@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,114 @@
1
+ /**
2
+ * The validation and matching rules every Search implementation shares.
3
+ *
4
+ * Both peers shipped here match globs through {@link includedByGlobs} and
5
+ * canonicalize them through {@link canonicalGlob}, so the two implementations
6
+ * cannot drift on what a pattern means, and an external peer binding its own
7
+ * `Search` builds on the same functions. {@link unsatisfiableNotice} is the
8
+ * shared explanation for empty answers caused by impossible globs or ignore
9
+ * exclusions.
10
+ *
11
+ * @since 1.0.0
12
+ */
13
+ import type * as Path from "@smthrs/kernel/Path";
14
+ import { Effect } from "effect";
15
+ import type * as FileSystem from "effect/FileSystem";
16
+ import type * as StdError from "./StdError.ts";
17
+ /**
18
+ * Validates Smithers Ripgrep ASCII v1. It is deliberately the intersection of
19
+ * Rust regex and JavaScript RegExp: ASCII patterns, captures, alternation,
20
+ * ASCII character classes and ordinary quantifiers. Lookaround,
21
+ * backreferences, named/inline groups, Unicode/shorthand classes and control
22
+ * escapes are rejected before either implementation runs. Patterns are
23
+ * limited to 4096 bytes, counted repetitions to 1000, group nesting to 128
24
+ * and expanded state machines to 8192 states. Both peers share this
25
+ * compilation boundary; portable matching never backtracks over input.
26
+ *
27
+ * @category validation
28
+ * @since 1.0.0
29
+ */
30
+ export declare const validatePattern: (pattern: string, fixedStrings: boolean) => StdError.StdError | undefined;
31
+ /**
32
+ * Whether `error` is a pattern or glob rejection this contract wrote.
33
+ *
34
+ * Those messages are host-authored and name the construct that broke, so a
35
+ * caller may show them to a model. A peer's `invalid_pattern` built from
36
+ * `rg`'s stderr is not one of them and stays private.
37
+ *
38
+ * @category validation
39
+ * @since 1.0.0
40
+ */
41
+ export declare const isContractRejection: (error: StdError.StdError) => boolean;
42
+ /**
43
+ * Validates the portable `-g` grammar before either peer sees it.
44
+ *
45
+ * @category validation
46
+ * @since 1.0.0
47
+ */
48
+ export declare const validateGlob: (glob: string) => StdError.StdError | undefined;
49
+ /**
50
+ * Compiles a pattern after common validation.
51
+ *
52
+ * @category matching
53
+ * @since 1.0.0
54
+ */
55
+ export declare const expression: (pattern: string, fixedStrings: boolean, insensitive: boolean) => RegExp;
56
+ /**
57
+ * Rewrites a glob into the one spelling both peers match against.
58
+ *
59
+ * `.` is never a path component either peer can produce, so a leading `./` and
60
+ * every interior `/./` would silently make a pattern unmatchable. Both are
61
+ * folded into the root anchor, which is what a caller writing `./src/**` means.
62
+ * Trailing spaces are dropped because `rg` reads `-g` by gitignore's rules and
63
+ * drops them too, so `"a.ts "` finds `a.ts` in the native peer and has to find
64
+ * it in the in-process one. A leading `!` is preserved so exclusion globs
65
+ * canonicalize the same way.
66
+ *
67
+ * @category matching
68
+ * @since 1.0.0
69
+ */
70
+ export declare const canonicalGlob: (glob: string) => string;
71
+ /**
72
+ * Matches the supported `-g` subset against a root-relative candidate path.
73
+ *
74
+ * A pattern without `/` matches the basename at any depth. Every other pattern
75
+ * is matched against the candidate's path relative to the search root, anchored
76
+ * at the root, whether or not it carries the optional leading `/`.
77
+ *
78
+ * @category matching
79
+ * @since 1.0.0
80
+ */
81
+ export declare const matchesGlob: (pattern: string, relative: string, basename: string) => boolean;
82
+ /**
83
+ * Applies ripgrep `-g` ordering: positive globs include and `!` globs exclude.
84
+ *
85
+ * @category matching
86
+ * @since 1.0.0
87
+ */
88
+ export declare const includedByGlobs: (globs: ReadonlyArray<string>, relative: string, basename: string) => boolean;
89
+ /**
90
+ * Explains the positive globs that no file under the root could ever match.
91
+ *
92
+ * A search that returns nothing is ambiguous: the tree may hold no match, or
93
+ * the pattern may be unsatisfiable — an absolute path written where a
94
+ * root-relative one belongs, a directory that does not exist, a skipped
95
+ * directory, a hidden path with `hidden` left false. Callers attach the result
96
+ * to `notice` when they produced no entries. Ignore exclusions name the
97
+ * `noIgnore: true` escape hatch, while impossible globs explain the correction.
98
+ * This keeps the cases
99
+ * distinguishable. Exclusion globs are ignored: excluding what is not there
100
+ * changes nothing.
101
+ *
102
+ * @category diagnostics
103
+ * @since 1.0.0
104
+ */
105
+ export declare const unsatisfiableNotice: (options: {
106
+ readonly fileSystem: FileSystem.FileSystem;
107
+ readonly path: Path.Path;
108
+ readonly root: string;
109
+ readonly globs: ReadonlyArray<string>;
110
+ readonly noIgnore?: boolean | undefined;
111
+ readonly ignored?: boolean | undefined;
112
+ readonly hidden: boolean;
113
+ }) => Effect.Effect<string | undefined>;
114
+ //# sourceMappingURL=SearchContract.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchContract.d.ts","sourceRoot":"","sources":["../../src/SearchContract.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,KAAK,UAAU,MAAM,mBAAmB,CAAA;AAIpD,OAAO,KAAK,KAAK,QAAQ,MAAM,eAAe,CAAA;AAE9C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,cAAc,OAAO,KAAG,QAAQ,CAAC,QAAQ,GAAG,SAiE5F,CAAA;AAwED;;;;;;;;;GASG;AACH,eAAO,MAAM,mBAAmB,GAAI,OAAO,QAAQ,CAAC,QAAQ,KAAG,OACsB,CAAA;AAErF;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,QAAQ,CAAC,QAAQ,GAAG,SA8B/D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,SAAS,MAAM,EAAE,cAAc,OAAO,EAAE,aAAa,OAAO,KAAG,MAwBzF,CAAA;AA4CD;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAK5C,CAAA;AA+BD;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,EAAE,UAAU,MAAM,EAAE,UAAU,MAAM,KAAG,OACqC,CAAA;AAEvH;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,aAAa,CAAC,MAAM,CAAC,EAAE,UAAU,MAAM,EAAE,UAAU,MAAM,KAAG,OAQlG,CAAA;AAoDD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS;IAC3C,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC,UAAU,CAAA;IAC1C,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;IACtC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;CACzB,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,SAAS,CAuChC,CAAA"}
@@ -0,0 +1,461 @@
1
+ /**
2
+ * The validation and matching rules every Search implementation shares.
3
+ *
4
+ * Both peers shipped here match globs through {@link includedByGlobs} and
5
+ * canonicalize them through {@link canonicalGlob}, so the two implementations
6
+ * cannot drift on what a pattern means, and an external peer binding its own
7
+ * `Search` builds on the same functions. {@link unsatisfiableNotice} is the
8
+ * shared explanation for empty answers caused by impossible globs or ignore
9
+ * exclusions.
10
+ *
11
+ * @since 1.0.0
12
+ */
13
+ import { Effect } from "effect";
14
+ import * as LinearRegex from "./internal/LinearRegex.js";
15
+ import { escapeRegex, invalidPattern, rejectionPrefix } from "./internal/SearchContract.js";
16
+ import * as Walk from "./internal/Walk.js";
17
+ /**
18
+ * Validates Smithers Ripgrep ASCII v1. It is deliberately the intersection of
19
+ * Rust regex and JavaScript RegExp: ASCII patterns, captures, alternation,
20
+ * ASCII character classes and ordinary quantifiers. Lookaround,
21
+ * backreferences, named/inline groups, Unicode/shorthand classes and control
22
+ * escapes are rejected before either implementation runs. Patterns are
23
+ * limited to 4096 bytes, counted repetitions to 1000, group nesting to 128
24
+ * and expanded state machines to 8192 states. Both peers share this
25
+ * compilation boundary; portable matching never backtracks over input.
26
+ *
27
+ * @category validation
28
+ * @since 1.0.0
29
+ */
30
+ export const validatePattern = (pattern, fixedStrings) => {
31
+ if (pattern.length > 4096)
32
+ return invalidPattern(pattern, "patterns must not exceed 4096 bytes");
33
+ if (!/^[\x20-\x7e]*$/.test(pattern))
34
+ return invalidPattern(pattern, "patterns must contain printable ASCII only");
35
+ if (fixedStrings)
36
+ return undefined;
37
+ if (pattern.includes("(?"))
38
+ return invalidPattern(pattern, "special groups and lookaround are not supported");
39
+ let inClass = false;
40
+ let classCharacters = 0;
41
+ for (let index = 0; index < pattern.length; index++) {
42
+ const character = pattern[index];
43
+ if (character === "\\") {
44
+ const escaped = pattern[index + 1];
45
+ if (escaped === undefined || /[A-Za-z0-9]/.test(escaped)) {
46
+ return invalidPattern(pattern, "backreferences, shorthand classes and encoded escapes are not supported");
47
+ }
48
+ index++;
49
+ if (inClass)
50
+ classCharacters++;
51
+ continue;
52
+ }
53
+ if (character === "[" && inClass) {
54
+ return invalidPattern(pattern, "nested and named character classes are not supported");
55
+ }
56
+ if (character === "[") {
57
+ inClass = true;
58
+ classCharacters = 0;
59
+ continue;
60
+ }
61
+ if (character === "{" && !inClass) {
62
+ const closing = pattern.indexOf("}", index + 1);
63
+ if (closing >= 0) {
64
+ const counts = pattern.slice(index + 1, closing).split(",").filter((value) => value.length > 0);
65
+ if (counts.some((value) => /^\d+$/.test(value) && Number(value) > 1000)) {
66
+ return invalidPattern(pattern, "repetition counts above 1000 are not supported");
67
+ }
68
+ }
69
+ }
70
+ if (character === "]" && inClass) {
71
+ if (classCharacters === 0 || (classCharacters === 1 && pattern[index - 1] === "^")) {
72
+ return invalidPattern(pattern, "empty character classes are not supported");
73
+ }
74
+ inClass = false;
75
+ continue;
76
+ }
77
+ if (inClass) {
78
+ if ((character === "&" && pattern[index + 1] === "&") ||
79
+ (character === "-" && pattern[index + 1] === "-") ||
80
+ (character === "~" && pattern[index + 1] === "~")) {
81
+ return invalidPattern(pattern, "character-class set operations are not supported");
82
+ }
83
+ classCharacters++;
84
+ }
85
+ }
86
+ try {
87
+ new RegExp(pattern, "u");
88
+ }
89
+ catch (error) {
90
+ return invalidPattern(pattern, malformed(pattern) ?? engineReason(error));
91
+ }
92
+ try {
93
+ LinearRegex.compile(pattern, false);
94
+ return undefined;
95
+ }
96
+ catch (error) {
97
+ // LinearRegex.compile throws Error for its nesting and state budgets.
98
+ return invalidPattern(pattern, error.message);
99
+ }
100
+ };
101
+ const countedRepetition = /^\{\d+(,\d*)?\}/;
102
+ /**
103
+ * Names the first construct that keeps `pattern` from parsing, with its
104
+ * 1-based column and the escape that makes it literal.
105
+ *
106
+ * A caller told only that a pattern is unsupported guesses at which character
107
+ * broke it; `Rule({` reads as a literal search to its author and as an unclosed
108
+ * group plus a count with no digits to the parser. Only the syntax errors a
109
+ * search author commonly makes are named here; anything else falls back to the
110
+ * engine's own reason.
111
+ */
112
+ const malformed = (pattern) => {
113
+ const open = [];
114
+ let repeatable = false;
115
+ for (let index = 0; index < pattern.length; index++) {
116
+ const character = pattern[index];
117
+ const at = `"${character}" at column ${index + 1}`;
118
+ if (character === "\\") {
119
+ index++;
120
+ repeatable = true;
121
+ continue;
122
+ }
123
+ if (character === "[") {
124
+ let end = index + 1;
125
+ if (pattern[end] === "^")
126
+ end++;
127
+ while (end < pattern.length && pattern[end] !== "]")
128
+ end += pattern[end] === "\\" ? 2 : 1;
129
+ if (end >= pattern.length)
130
+ return `${at} is never closed; write \\[ for a literal bracket`;
131
+ index = end;
132
+ repeatable = true;
133
+ continue;
134
+ }
135
+ if (character === "(") {
136
+ open.push(index);
137
+ repeatable = false;
138
+ continue;
139
+ }
140
+ if (character === ")") {
141
+ if (open.pop() === undefined)
142
+ return `${at} closes nothing; write \\) for a literal parenthesis`;
143
+ repeatable = true;
144
+ continue;
145
+ }
146
+ if (character === "{") {
147
+ const count = countedRepetition.exec(pattern.slice(index));
148
+ if (count === null)
149
+ return `${at} is not a repetition count; write \\{ for a literal brace`;
150
+ if (!repeatable)
151
+ return `${at} repeats nothing; write \\{ for a literal brace`;
152
+ index += count[0].length - 1;
153
+ continue;
154
+ }
155
+ if (character === "}" || character === "]") {
156
+ return `${at} closes nothing; write \\${character} for a literal ${character === "}" ? "brace" : "bracket"}`;
157
+ }
158
+ if (character === "*" || character === "+" || character === "?") {
159
+ if (!repeatable)
160
+ return `${at} repeats nothing; write \\${character} for a literal ${character}`;
161
+ continue;
162
+ }
163
+ repeatable = character !== "|" && character !== "^" && character !== "$";
164
+ }
165
+ const unclosed = open.at(-1);
166
+ return unclosed === undefined
167
+ ? undefined
168
+ : `"(" at column ${unclosed + 1} is never closed; write \\( for a literal parenthesis`;
169
+ };
170
+ /** The JavaScript engine's reason, without its prefix or its echo of the pattern. */
171
+ const engineReason = (error) => {
172
+ const reason = error.message.replace(/^Invalid regular expression: (\/.*\/[a-z]*: )?/, "").trim();
173
+ return `invalid expression: ${reason}`;
174
+ };
175
+ /**
176
+ * Whether `error` is a pattern or glob rejection this contract wrote.
177
+ *
178
+ * Those messages are host-authored and name the construct that broke, so a
179
+ * caller may show them to a model. A peer's `invalid_pattern` built from
180
+ * `rg`'s stderr is not one of them and stays private.
181
+ *
182
+ * @category validation
183
+ * @since 1.0.0
184
+ */
185
+ export const isContractRejection = (error) => error.code === "invalid_pattern" && error.message.startsWith(`${rejectionPrefix}"`);
186
+ /**
187
+ * Validates the portable `-g` grammar before either peer sees it.
188
+ *
189
+ * @category validation
190
+ * @since 1.0.0
191
+ */
192
+ export const validateGlob = (glob) => {
193
+ const pattern = glob.startsWith("!") ? glob.slice(1) : glob;
194
+ // `rg` drops the trailing spaces and then ignores a glob that is left blank,
195
+ // which filters nothing at all. Rejecting it keeps a typo from silently
196
+ // widening the search instead of narrowing it.
197
+ if (pattern.replace(/ +$/, "").length === 0)
198
+ return invalidPattern(glob, "glob patterns must not be empty");
199
+ if (!/^[\x20-\x7e]*$/.test(pattern))
200
+ return invalidPattern(glob, "globs must contain printable ASCII only");
201
+ if (pattern.includes("\\") || pattern.includes("[") || pattern.includes("]")) {
202
+ return invalidPattern(glob, "glob escapes and character classes are not supported");
203
+ }
204
+ let inBrace = false;
205
+ let alternatives = 1;
206
+ let expansionCount = 1;
207
+ for (let index = 0; index < pattern.length; index++) {
208
+ const character = pattern[index];
209
+ if (character === "{") {
210
+ if (inBrace)
211
+ return invalidPattern(glob, "nested brace alternatives are not supported");
212
+ inBrace = true;
213
+ alternatives = 1;
214
+ }
215
+ else if (character === "," && inBrace) {
216
+ alternatives++;
217
+ }
218
+ else if (character === "}") {
219
+ if (!inBrace || alternatives < 2)
220
+ return invalidPattern(glob, "braces must contain alternatives");
221
+ inBrace = false;
222
+ expansionCount *= alternatives;
223
+ if (expansionCount > 256)
224
+ return invalidPattern(glob, "glob brace expansion exceeds 256 patterns");
225
+ }
226
+ }
227
+ if (inBrace)
228
+ return invalidPattern(glob, "glob braces must be balanced");
229
+ return undefined;
230
+ };
231
+ /**
232
+ * Compiles a pattern after common validation.
233
+ *
234
+ * @category matching
235
+ * @since 1.0.0
236
+ */
237
+ export const expression = (pattern, fixedStrings, insensitive) => {
238
+ const input = fixedStrings ? escapeRegex(pattern) : pattern;
239
+ let source = "";
240
+ let inClass = false;
241
+ for (let index = 0; index < input.length; index++) {
242
+ const character = input[index];
243
+ if (character === "\\") {
244
+ source += `${character}${input[index + 1] ?? ""}`;
245
+ index++;
246
+ }
247
+ else if (character === "[") {
248
+ inClass = true;
249
+ source += character;
250
+ }
251
+ else if (character === "]" && inClass) {
252
+ inClass = false;
253
+ source += character;
254
+ }
255
+ else if (!inClass && character === ".") {
256
+ source += "[^\\n]";
257
+ }
258
+ else if (!inClass && character === "$") {
259
+ source += "(?![\\s\\S])";
260
+ }
261
+ else {
262
+ source += character;
263
+ }
264
+ }
265
+ return new RegExp(source, insensitive ? "iu" : "u");
266
+ };
267
+ const expandBraces = (pattern) => {
268
+ const opening = pattern.indexOf("{");
269
+ if (opening < 0)
270
+ return [pattern];
271
+ const closing = pattern.indexOf("}", opening + 1);
272
+ if (closing < 0)
273
+ return [pattern];
274
+ const alternatives = pattern.slice(opening + 1, closing).split(",");
275
+ if (alternatives.length < 2)
276
+ return [pattern];
277
+ return alternatives.flatMap((alternative) => expandBraces(`${pattern.slice(0, opening)}${alternative}${pattern.slice(closing + 1)}`));
278
+ };
279
+ const globExpression = (pattern) => {
280
+ let source = "";
281
+ for (let index = 0; index < pattern.length; index++) {
282
+ const character = pattern[index];
283
+ const next = pattern[index + 1];
284
+ if (character === "*" && next === "*" &&
285
+ (index === 0 || pattern[index - 1] === "/") &&
286
+ (pattern[index + 2] === undefined || pattern[index + 2] === "/")) {
287
+ source += pattern[index + 2] === "/" ? "(?:.*/)?" : ".*";
288
+ index += pattern[index + 2] === "/" ? 2 : 1;
289
+ }
290
+ else if (character === "*")
291
+ source += "[^/]*";
292
+ else if (character === "?")
293
+ source += "[^/]";
294
+ else
295
+ source += character.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
296
+ }
297
+ return new RegExp(`^${source}$`);
298
+ };
299
+ const outsidePrintableAscii = /[^\x20-\x7e]/;
300
+ // Printable ASCII is its own UTF-8 encoding, and paths are overwhelmingly
301
+ // printable ASCII, so the encoder only runs for the paths that need it.
302
+ const utf8ByteString = (value) => outsidePrintableAscii.test(value)
303
+ ? Array.from(new TextEncoder().encode(value), (byte) => String.fromCharCode(byte)).join("")
304
+ : value;
305
+ /**
306
+ * Rewrites a glob into the one spelling both peers match against.
307
+ *
308
+ * `.` is never a path component either peer can produce, so a leading `./` and
309
+ * every interior `/./` would silently make a pattern unmatchable. Both are
310
+ * folded into the root anchor, which is what a caller writing `./src/**` means.
311
+ * Trailing spaces are dropped because `rg` reads `-g` by gitignore's rules and
312
+ * drops them too, so `"a.ts "` finds `a.ts` in the native peer and has to find
313
+ * it in the in-process one. A leading `!` is preserved so exclusion globs
314
+ * canonicalize the same way.
315
+ *
316
+ * @category matching
317
+ * @since 1.0.0
318
+ */
319
+ export const canonicalGlob = (glob) => {
320
+ const excluded = glob.startsWith("!");
321
+ const pattern = excluded ? glob.slice(1) : glob;
322
+ const canonical = pattern.replace(/ +$/, "").replace(/\/\.(?=\/)/g, "").replace(/^\.\//, "/");
323
+ return excluded ? `!${canonical}` : canonical;
324
+ };
325
+ const compiled = new Map();
326
+ /**
327
+ * Compiles one glob into its alternatives, once per distinct pattern.
328
+ *
329
+ * The in-process peer asks whether a pattern matches for every candidate file
330
+ * in the walk, so canonicalizing, brace expanding and compiling the pattern
331
+ * inside that loop makes the work quadratic in the tree. A pattern compiles to
332
+ * the same matchers every time, so the compilation is cached; the cache is
333
+ * bounded because callers, not the tree, supply the patterns.
334
+ */
335
+ const compileGlob = (pattern) => {
336
+ const cached = compiled.get(pattern);
337
+ if (cached !== undefined)
338
+ return cached;
339
+ const matchers = expandBraces(canonicalGlob(pattern)).map((expanded) => {
340
+ const rooted = expanded.startsWith("/");
341
+ const normalized = rooted ? expanded.slice(1) : expanded;
342
+ return { byPath: rooted || normalized.includes("/"), expression: globExpression(normalized) };
343
+ });
344
+ if (compiled.size >= 256)
345
+ compiled.clear();
346
+ compiled.set(pattern, matchers);
347
+ return matchers;
348
+ };
349
+ /**
350
+ * Matches the supported `-g` subset against a root-relative candidate path.
351
+ *
352
+ * A pattern without `/` matches the basename at any depth. Every other pattern
353
+ * is matched against the candidate's path relative to the search root, anchored
354
+ * at the root, whether or not it carries the optional leading `/`.
355
+ *
356
+ * @category matching
357
+ * @since 1.0.0
358
+ */
359
+ export const matchesGlob = (pattern, relative, basename) => compileGlob(pattern).some((matcher) => matcher.expression.test(utf8ByteString(matcher.byPath ? relative : basename)));
360
+ /**
361
+ * Applies ripgrep `-g` ordering: positive globs include and `!` globs exclude.
362
+ *
363
+ * @category matching
364
+ * @since 1.0.0
365
+ */
366
+ export const includedByGlobs = (globs, relative, basename) => {
367
+ const positives = globs.filter((glob) => !glob.startsWith("!"));
368
+ let included = positives.length === 0;
369
+ for (const glob of globs) {
370
+ const excluded = glob.startsWith("!");
371
+ if (matchesGlob(excluded ? glob.slice(1) : glob, relative, basename))
372
+ included = !excluded;
373
+ }
374
+ return included;
375
+ };
376
+ const wildcard = /[*?{}]/;
377
+ const literalDirectory = (pattern) => {
378
+ if (!pattern.includes("/"))
379
+ return [];
380
+ const segments = pattern.replace(/^\//, "").split("/").filter((segment) => segment.length > 0);
381
+ const wildcardAt = segments.findIndex((segment) => wildcard.test(segment));
382
+ return wildcardAt < 0 ? segments.slice(0, -1) : segments.slice(0, wildcardAt);
383
+ };
384
+ const rootRelativeSuffix = (pattern, root, path) => {
385
+ const anchored = pattern.replace(/^\/+/, "");
386
+ const patternRoot = path.sep === "\\" ? root.replaceAll("\\", "/") : root;
387
+ const stem = patternRoot.replace(/^\/+/, "").replace(/\/+$/, "");
388
+ return stem.length > 0 && anchored.startsWith(`${stem}/`) ? anchored.slice(stem.length + 1) : undefined;
389
+ };
390
+ const unsatisfiedReason = (options, pattern) => Effect.gen(function* () {
391
+ const reasons = [];
392
+ for (const alternative of expandBraces(pattern)) {
393
+ const segments = literalDirectory(alternative);
394
+ if (segments.length === 0)
395
+ return undefined;
396
+ const skipped = segments.find((segment) => Walk.skippedDirectories.has(segment));
397
+ if (skipped !== undefined) {
398
+ reasons.push(`${skipped} is never descended into; name it as the search root to look inside it`);
399
+ continue;
400
+ }
401
+ if (!options.hidden && segments.some((segment) => segment.startsWith("."))) {
402
+ reasons.push("hidden paths are excluded unless hidden is true");
403
+ continue;
404
+ }
405
+ const directory = segments.join("/");
406
+ const present = yield* options.fileSystem.stat(options.path.join(options.root, directory)).pipe(Effect.map((info) => info.type === "Directory"), Effect.orElseSucceed(() => false));
407
+ if (present)
408
+ return undefined;
409
+ reasons.push(`there is no ${directory} directory there`);
410
+ }
411
+ return reasons[0];
412
+ });
413
+ /**
414
+ * Explains the positive globs that no file under the root could ever match.
415
+ *
416
+ * A search that returns nothing is ambiguous: the tree may hold no match, or
417
+ * the pattern may be unsatisfiable — an absolute path written where a
418
+ * root-relative one belongs, a directory that does not exist, a skipped
419
+ * directory, a hidden path with `hidden` left false. Callers attach the result
420
+ * to `notice` when they produced no entries. Ignore exclusions name the
421
+ * `noIgnore: true` escape hatch, while impossible globs explain the correction.
422
+ * This keeps the cases
423
+ * distinguishable. Exclusion globs are ignored: excluding what is not there
424
+ * changes nothing.
425
+ *
426
+ * @category diagnostics
427
+ * @since 1.0.0
428
+ */
429
+ export const unsatisfiableNotice = (options) => Effect.gen(function* () {
430
+ // Globs filter a walk. A root that names one file is searched whatever the
431
+ // globs say — `rg` always searches a path given on the command line — so
432
+ // there is no unsatisfiable pattern to report and no directory to stat.
433
+ const walkable = yield* options.fileSystem.stat(options.root).pipe(Effect.map((info) => info.type === "Directory"), Effect.orElseSucceed(() => false));
434
+ if (!walkable)
435
+ return undefined;
436
+ const sentences = [];
437
+ for (const glob of options.globs) {
438
+ if (glob.startsWith("!"))
439
+ continue;
440
+ const canonical = canonicalGlob(glob);
441
+ const reason = yield* unsatisfiedReason(options, canonical);
442
+ if (reason === undefined)
443
+ continue;
444
+ const suffix = rootRelativeSuffix(canonical, options.root, options.path);
445
+ sentences.push(`No file under ${options.root} can match "${glob}": ${suffix === undefined
446
+ ? reason
447
+ : `glob patterns are relative to the search root, so use "${suffix}" instead`}.`);
448
+ }
449
+ // An impossible glob cannot be repaired by opting out of ignores.
450
+ if (sentences.length > 0 && sentences.length === options.globs.filter((glob) => !glob.startsWith("!")).length) {
451
+ return sentences.join(" ");
452
+ }
453
+ const included = (relative, basename) => includedByGlobs(options.globs, relative, basename);
454
+ const ignored = options.noIgnore ? false : options.ignored ??
455
+ (yield* Walk.files(options.fileSystem, options.path, options.root, options.hidden, false, included).pipe(Effect.map((walked) => walked.ignored), Effect.orElseSucceed(() => false)));
456
+ if (ignored) {
457
+ sentences.push("No results; ignore files excluded paths. Retry with noIgnore: true to include them.");
458
+ }
459
+ return sentences.length === 0 ? undefined : sentences.join(" ");
460
+ });
461
+ //# sourceMappingURL=SearchContract.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SearchContract.js","sourceRoot":"","sources":["../../src/SearchContract.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * The validation and matching rules every Search implementation shares.\n *\n * Both peers shipped here match globs through {@link includedByGlobs} and\n * canonicalize them through {@link canonicalGlob}, so the two implementations\n * cannot drift on what a pattern means, and an external peer binding its own\n * `Search` builds on the same functions. {@link unsatisfiableNotice} is the\n * shared explanation for empty answers caused by impossible globs or ignore\n * exclusions.\n *\n * @since 1.0.0\n */\n\nimport type * as Path from \"@smthrs/kernel/Path\"\nimport { Effect } from \"effect\"\nimport type * as FileSystem from \"effect/FileSystem\"\nimport * as LinearRegex from \"./internal/LinearRegex.ts\"\nimport { escapeRegex, invalidPattern, rejectionPrefix } from \"./internal/SearchContract.ts\"\nimport * as Walk from \"./internal/Walk.ts\"\nimport type * as StdError from \"./StdError.ts\"\n\n/**\n * Validates Smithers Ripgrep ASCII v1. It is deliberately the intersection of\n * Rust regex and JavaScript RegExp: ASCII patterns, captures, alternation,\n * ASCII character classes and ordinary quantifiers. Lookaround,\n * backreferences, named/inline groups, Unicode/shorthand classes and control\n * escapes are rejected before either implementation runs. Patterns are\n * limited to 4096 bytes, counted repetitions to 1000, group nesting to 128\n * and expanded state machines to 8192 states. Both peers share this\n * compilation boundary; portable matching never backtracks over input.\n *\n * @category validation\n * @since 1.0.0\n */\nexport const validatePattern = (pattern: string, fixedStrings: boolean): StdError.StdError | undefined => {\n if (pattern.length > 4096) return invalidPattern(pattern, \"patterns must not exceed 4096 bytes\")\n if (!/^[\\x20-\\x7e]*$/.test(pattern)) return invalidPattern(pattern, \"patterns must contain printable ASCII only\")\n if (fixedStrings) return undefined\n if (pattern.includes(\"(?\")) return invalidPattern(pattern, \"special groups and lookaround are not supported\")\n let inClass = false\n let classCharacters = 0\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]\n if (character === \"\\\\\") {\n const escaped = pattern[index + 1]\n if (escaped === undefined || /[A-Za-z0-9]/.test(escaped)) {\n return invalidPattern(pattern, \"backreferences, shorthand classes and encoded escapes are not supported\")\n }\n index++\n if (inClass) classCharacters++\n continue\n }\n if (character === \"[\" && inClass) {\n return invalidPattern(pattern, \"nested and named character classes are not supported\")\n }\n if (character === \"[\") {\n inClass = true\n classCharacters = 0\n continue\n }\n if (character === \"{\" && !inClass) {\n const closing = pattern.indexOf(\"}\", index + 1)\n if (closing >= 0) {\n const counts = pattern.slice(index + 1, closing).split(\",\").filter((value) => value.length > 0)\n if (counts.some((value) => /^\\d+$/.test(value) && Number(value) > 1000)) {\n return invalidPattern(pattern, \"repetition counts above 1000 are not supported\")\n }\n }\n }\n if (character === \"]\" && inClass) {\n if (classCharacters === 0 || (classCharacters === 1 && pattern[index - 1] === \"^\")) {\n return invalidPattern(pattern, \"empty character classes are not supported\")\n }\n inClass = false\n continue\n }\n if (inClass) {\n if (\n (character === \"&\" && pattern[index + 1] === \"&\") ||\n (character === \"-\" && pattern[index + 1] === \"-\") ||\n (character === \"~\" && pattern[index + 1] === \"~\")\n ) {\n return invalidPattern(pattern, \"character-class set operations are not supported\")\n }\n classCharacters++\n }\n }\n try {\n new RegExp(pattern, \"u\")\n } catch (error) {\n return invalidPattern(pattern, malformed(pattern) ?? engineReason(error as Error))\n }\n try {\n LinearRegex.compile(pattern, false)\n return undefined\n } catch (error) {\n // LinearRegex.compile throws Error for its nesting and state budgets.\n return invalidPattern(pattern, (error as Error).message)\n }\n}\n\nconst countedRepetition = /^\\{\\d+(,\\d*)?\\}/\n\n/**\n * Names the first construct that keeps `pattern` from parsing, with its\n * 1-based column and the escape that makes it literal.\n *\n * A caller told only that a pattern is unsupported guesses at which character\n * broke it; `Rule({` reads as a literal search to its author and as an unclosed\n * group plus a count with no digits to the parser. Only the syntax errors a\n * search author commonly makes are named here; anything else falls back to the\n * engine's own reason.\n */\nconst malformed = (pattern: string): string | undefined => {\n const open: Array<number> = []\n let repeatable = false\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]!\n const at = `\"${character}\" at column ${index + 1}`\n if (character === \"\\\\\") {\n index++\n repeatable = true\n continue\n }\n if (character === \"[\") {\n let end = index + 1\n if (pattern[end] === \"^\") end++\n while (end < pattern.length && pattern[end] !== \"]\") end += pattern[end] === \"\\\\\" ? 2 : 1\n if (end >= pattern.length) return `${at} is never closed; write \\\\[ for a literal bracket`\n index = end\n repeatable = true\n continue\n }\n if (character === \"(\") {\n open.push(index)\n repeatable = false\n continue\n }\n if (character === \")\") {\n if (open.pop() === undefined) return `${at} closes nothing; write \\\\) for a literal parenthesis`\n repeatable = true\n continue\n }\n if (character === \"{\") {\n const count = countedRepetition.exec(pattern.slice(index))\n if (count === null) return `${at} is not a repetition count; write \\\\{ for a literal brace`\n if (!repeatable) return `${at} repeats nothing; write \\\\{ for a literal brace`\n index += count[0].length - 1\n continue\n }\n if (character === \"}\" || character === \"]\") {\n return `${at} closes nothing; write \\\\${character} for a literal ${character === \"}\" ? \"brace\" : \"bracket\"}`\n }\n if (character === \"*\" || character === \"+\" || character === \"?\") {\n if (!repeatable) return `${at} repeats nothing; write \\\\${character} for a literal ${character}`\n continue\n }\n repeatable = character !== \"|\" && character !== \"^\" && character !== \"$\"\n }\n const unclosed = open.at(-1)\n return unclosed === undefined\n ? undefined\n : `\"(\" at column ${unclosed + 1} is never closed; write \\\\( for a literal parenthesis`\n}\n\n/** The JavaScript engine's reason, without its prefix or its echo of the pattern. */\nconst engineReason = (error: Error): string => {\n const reason = error.message.replace(/^Invalid regular expression: (\\/.*\\/[a-z]*: )?/, \"\").trim()\n return `invalid expression: ${reason}`\n}\n\n/**\n * Whether `error` is a pattern or glob rejection this contract wrote.\n *\n * Those messages are host-authored and name the construct that broke, so a\n * caller may show them to a model. A peer's `invalid_pattern` built from\n * `rg`'s stderr is not one of them and stays private.\n *\n * @category validation\n * @since 1.0.0\n */\nexport const isContractRejection = (error: StdError.StdError): boolean =>\n error.code === \"invalid_pattern\" && error.message.startsWith(`${rejectionPrefix}\"`)\n\n/**\n * Validates the portable `-g` grammar before either peer sees it.\n *\n * @category validation\n * @since 1.0.0\n */\nexport const validateGlob = (glob: string): StdError.StdError | undefined => {\n const pattern = glob.startsWith(\"!\") ? glob.slice(1) : glob\n // `rg` drops the trailing spaces and then ignores a glob that is left blank,\n // which filters nothing at all. Rejecting it keeps a typo from silently\n // widening the search instead of narrowing it.\n if (pattern.replace(/ +$/, \"\").length === 0) return invalidPattern(glob, \"glob patterns must not be empty\")\n if (!/^[\\x20-\\x7e]*$/.test(pattern)) return invalidPattern(glob, \"globs must contain printable ASCII only\")\n if (pattern.includes(\"\\\\\") || pattern.includes(\"[\") || pattern.includes(\"]\")) {\n return invalidPattern(glob, \"glob escapes and character classes are not supported\")\n }\n let inBrace = false\n let alternatives = 1\n let expansionCount = 1\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]\n if (character === \"{\") {\n if (inBrace) return invalidPattern(glob, \"nested brace alternatives are not supported\")\n inBrace = true\n alternatives = 1\n } else if (character === \",\" && inBrace) {\n alternatives++\n } else if (character === \"}\") {\n if (!inBrace || alternatives < 2) return invalidPattern(glob, \"braces must contain alternatives\")\n inBrace = false\n expansionCount *= alternatives\n if (expansionCount > 256) return invalidPattern(glob, \"glob brace expansion exceeds 256 patterns\")\n }\n }\n if (inBrace) return invalidPattern(glob, \"glob braces must be balanced\")\n return undefined\n}\n\n/**\n * Compiles a pattern after common validation.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const expression = (pattern: string, fixedStrings: boolean, insensitive: boolean): RegExp => {\n const input = fixedStrings ? escapeRegex(pattern) : pattern\n let source = \"\"\n let inClass = false\n for (let index = 0; index < input.length; index++) {\n const character = input[index]\n if (character === \"\\\\\") {\n source += `${character}${input[index + 1] ?? \"\"}`\n index++\n } else if (character === \"[\") {\n inClass = true\n source += character\n } else if (character === \"]\" && inClass) {\n inClass = false\n source += character\n } else if (!inClass && character === \".\") {\n source += \"[^\\\\n]\"\n } else if (!inClass && character === \"$\") {\n source += \"(?![\\\\s\\\\S])\"\n } else {\n source += character\n }\n }\n return new RegExp(source, insensitive ? \"iu\" : \"u\")\n}\n\nconst expandBraces = (pattern: string): ReadonlyArray<string> => {\n const opening = pattern.indexOf(\"{\")\n if (opening < 0) return [pattern]\n const closing = pattern.indexOf(\"}\", opening + 1)\n if (closing < 0) return [pattern]\n const alternatives = pattern.slice(opening + 1, closing).split(\",\")\n if (alternatives.length < 2) return [pattern]\n return alternatives.flatMap((alternative) =>\n expandBraces(\n `${pattern.slice(0, opening)}${alternative}${pattern.slice(closing + 1)}`\n )\n )\n}\n\nconst globExpression = (pattern: string): RegExp => {\n let source = \"\"\n for (let index = 0; index < pattern.length; index++) {\n const character = pattern[index]!\n const next = pattern[index + 1]\n if (\n character === \"*\" && next === \"*\" &&\n (index === 0 || pattern[index - 1] === \"/\") &&\n (pattern[index + 2] === undefined || 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 += character.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\")\n }\n return new RegExp(`^${source}$`)\n}\n\nconst outsidePrintableAscii = /[^\\x20-\\x7e]/\n\n// Printable ASCII is its own UTF-8 encoding, and paths are overwhelmingly\n// printable ASCII, so the encoder only runs for the paths that need it.\nconst utf8ByteString = (value: string): string =>\n outsidePrintableAscii.test(value)\n ? Array.from(new TextEncoder().encode(value), (byte) => String.fromCharCode(byte)).join(\"\")\n : value\n\n/**\n * Rewrites a glob into the one spelling both peers match against.\n *\n * `.` is never a path component either peer can produce, so a leading `./` and\n * every interior `/./` would silently make a pattern unmatchable. Both are\n * folded into the root anchor, which is what a caller writing `./src/**` means.\n * Trailing spaces are dropped because `rg` reads `-g` by gitignore's rules and\n * drops them too, so `\"a.ts \"` finds `a.ts` in the native peer and has to find\n * it in the in-process one. A leading `!` is preserved so exclusion globs\n * canonicalize the same way.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const canonicalGlob = (glob: string): string => {\n const excluded = glob.startsWith(\"!\")\n const pattern = excluded ? glob.slice(1) : glob\n const canonical = pattern.replace(/ +$/, \"\").replace(/\\/\\.(?=\\/)/g, \"\").replace(/^\\.\\//, \"/\")\n return excluded ? `!${canonical}` : canonical\n}\n\ninterface CompiledGlob {\n readonly byPath: boolean\n readonly expression: RegExp\n}\n\nconst compiled = new Map<string, ReadonlyArray<CompiledGlob>>()\n\n/**\n * Compiles one glob into its alternatives, once per distinct pattern.\n *\n * The in-process peer asks whether a pattern matches for every candidate file\n * in the walk, so canonicalizing, brace expanding and compiling the pattern\n * inside that loop makes the work quadratic in the tree. A pattern compiles to\n * the same matchers every time, so the compilation is cached; the cache is\n * bounded because callers, not the tree, supply the patterns.\n */\nconst compileGlob = (pattern: string): ReadonlyArray<CompiledGlob> => {\n const cached = compiled.get(pattern)\n if (cached !== undefined) return cached\n const matchers = expandBraces(canonicalGlob(pattern)).map((expanded) => {\n const rooted = expanded.startsWith(\"/\")\n const normalized = rooted ? expanded.slice(1) : expanded\n return { byPath: rooted || normalized.includes(\"/\"), expression: globExpression(normalized) }\n })\n if (compiled.size >= 256) compiled.clear()\n compiled.set(pattern, matchers)\n return matchers\n}\n\n/**\n * Matches the supported `-g` subset against a root-relative candidate path.\n *\n * A pattern without `/` matches the basename at any depth. Every other pattern\n * is matched against the candidate's path relative to the search root, anchored\n * at the root, whether or not it carries the optional leading `/`.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const matchesGlob = (pattern: string, relative: string, basename: string): boolean =>\n compileGlob(pattern).some((matcher) => matcher.expression.test(utf8ByteString(matcher.byPath ? relative : basename)))\n\n/**\n * Applies ripgrep `-g` ordering: positive globs include and `!` globs exclude.\n *\n * @category matching\n * @since 1.0.0\n */\nexport const includedByGlobs = (globs: ReadonlyArray<string>, relative: string, basename: string): boolean => {\n const positives = globs.filter((glob) => !glob.startsWith(\"!\"))\n let included = positives.length === 0\n for (const glob of globs) {\n const excluded = glob.startsWith(\"!\")\n if (matchesGlob(excluded ? glob.slice(1) : glob, relative, basename)) included = !excluded\n }\n return included\n}\n\nconst wildcard = /[*?{}]/\n\nconst literalDirectory = (pattern: string): ReadonlyArray<string> => {\n if (!pattern.includes(\"/\")) return []\n const segments = pattern.replace(/^\\//, \"\").split(\"/\").filter((segment) => segment.length > 0)\n const wildcardAt = segments.findIndex((segment) => wildcard.test(segment))\n return wildcardAt < 0 ? segments.slice(0, -1) : segments.slice(0, wildcardAt)\n}\n\nconst rootRelativeSuffix = (pattern: string, root: string, path: Path.Path): string | undefined => {\n const anchored = pattern.replace(/^\\/+/, \"\")\n const patternRoot = path.sep === \"\\\\\" ? root.replaceAll(\"\\\\\", \"/\") : root\n const stem = patternRoot.replace(/^\\/+/, \"\").replace(/\\/+$/, \"\")\n return stem.length > 0 && anchored.startsWith(`${stem}/`) ? anchored.slice(stem.length + 1) : undefined\n}\n\nconst unsatisfiedReason = (\n options: {\n readonly fileSystem: FileSystem.FileSystem\n readonly path: Path.Path\n readonly root: string\n readonly hidden: boolean\n },\n pattern: string\n): Effect.Effect<string | undefined> =>\n Effect.gen(function*() {\n const reasons: Array<string> = []\n for (const alternative of expandBraces(pattern)) {\n const segments = literalDirectory(alternative)\n if (segments.length === 0) return undefined\n const skipped = segments.find((segment) => Walk.skippedDirectories.has(segment))\n if (skipped !== undefined) {\n reasons.push(`${skipped} is never descended into; name it as the search root to look inside it`)\n continue\n }\n if (!options.hidden && segments.some((segment) => segment.startsWith(\".\"))) {\n reasons.push(\"hidden paths are excluded unless hidden is true\")\n continue\n }\n const directory = segments.join(\"/\")\n const present = yield* options.fileSystem.stat(options.path.join(options.root, directory)).pipe(\n Effect.map((info) => info.type === \"Directory\"),\n Effect.orElseSucceed(() => false)\n )\n if (present) return undefined\n reasons.push(`there is no ${directory} directory there`)\n }\n return reasons[0]\n })\n\n/**\n * Explains the positive globs that no file under the root could ever match.\n *\n * A search that returns nothing is ambiguous: the tree may hold no match, or\n * the pattern may be unsatisfiable — an absolute path written where a\n * root-relative one belongs, a directory that does not exist, a skipped\n * directory, a hidden path with `hidden` left false. Callers attach the result\n * to `notice` when they produced no entries. Ignore exclusions name the\n * `noIgnore: true` escape hatch, while impossible globs explain the correction.\n * This keeps the cases\n * distinguishable. Exclusion globs are ignored: excluding what is not there\n * changes nothing.\n *\n * @category diagnostics\n * @since 1.0.0\n */\nexport const unsatisfiableNotice = (options: {\n readonly fileSystem: FileSystem.FileSystem\n readonly path: Path.Path\n readonly root: string\n readonly globs: ReadonlyArray<string>\n readonly noIgnore?: boolean | undefined\n readonly ignored?: boolean | undefined\n readonly hidden: boolean\n}): Effect.Effect<string | undefined> =>\n Effect.gen(function*() {\n // Globs filter a walk. A root that names one file is searched whatever the\n // globs say — `rg` always searches a path given on the command line — so\n // there is no unsatisfiable pattern to report and no directory to stat.\n const walkable = yield* options.fileSystem.stat(options.root).pipe(\n Effect.map((info) => info.type === \"Directory\"),\n Effect.orElseSucceed(() => false)\n )\n if (!walkable) return undefined\n const sentences: Array<string> = []\n for (const glob of options.globs) {\n if (glob.startsWith(\"!\")) continue\n const canonical = canonicalGlob(glob)\n const reason = yield* unsatisfiedReason(options, canonical)\n if (reason === undefined) continue\n const suffix = rootRelativeSuffix(canonical, options.root, options.path)\n sentences.push(\n `No file under ${options.root} can match \"${glob}\": ${\n suffix === undefined\n ? reason\n : `glob patterns are relative to the search root, so use \"${suffix}\" instead`\n }.`\n )\n }\n // An impossible glob cannot be repaired by opting out of ignores.\n if (sentences.length > 0 && sentences.length === options.globs.filter((glob) => !glob.startsWith(\"!\")).length) {\n return sentences.join(\" \")\n }\n const included = (relative: string, basename: string) => includedByGlobs(options.globs, relative, basename)\n const ignored = options.noIgnore ? false : options.ignored ??\n (yield* Walk.files(options.fileSystem, options.path, options.root, options.hidden, false, included).pipe(\n Effect.map((walked) => walked.ignored),\n Effect.orElseSucceed(() => false)\n ))\n if (ignored) {\n sentences.push(\"No results; ignore files excluded paths. Retry with noIgnore: true to include them.\")\n }\n return sentences.length === 0 ? undefined : sentences.join(\" \")\n })\n"]}