@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.
- package/CHANGELOG.md +130 -0
- package/LICENSE +21 -0
- package/README.md +152 -2
- package/dist/cjs/ApplyPatch.d.ts +174 -0
- package/dist/cjs/ApplyPatch.d.ts.map +1 -0
- package/dist/cjs/ApplyPatch.js +309 -0
- package/dist/cjs/ApplyPatch.js.map +7 -0
- package/dist/cjs/Bash.d.ts +380 -0
- package/dist/cjs/Bash.d.ts.map +1 -0
- package/dist/cjs/Bash.js +332 -0
- package/dist/cjs/Bash.js.map +7 -0
- package/dist/cjs/Checkpoints.d.ts +279 -0
- package/dist/cjs/Checkpoints.d.ts.map +1 -0
- package/dist/cjs/Checkpoints.js +145 -0
- package/dist/cjs/Checkpoints.js.map +7 -0
- package/dist/cjs/Container.d.ts +132 -0
- package/dist/cjs/Container.d.ts.map +1 -0
- package/dist/cjs/Container.js +113 -0
- package/dist/cjs/Container.js.map +7 -0
- package/dist/cjs/Edit.d.ts +203 -0
- package/dist/cjs/Edit.d.ts.map +1 -0
- package/dist/cjs/Edit.js +258 -0
- package/dist/cjs/Edit.js.map +7 -0
- package/dist/cjs/ExaWebSearch.d.ts +22 -0
- package/dist/cjs/ExaWebSearch.d.ts.map +1 -0
- package/dist/cjs/ExaWebSearch.js +138 -0
- package/dist/cjs/ExaWebSearch.js.map +7 -0
- package/dist/cjs/Explore.d.ts +328 -0
- package/dist/cjs/Explore.d.ts.map +1 -0
- package/dist/cjs/Explore.js +90 -0
- package/dist/cjs/Explore.js.map +7 -0
- package/dist/cjs/Fetch.d.ts +130 -0
- package/dist/cjs/Fetch.d.ts.map +1 -0
- package/dist/cjs/Fetch.js +64 -0
- package/dist/cjs/Fetch.js.map +7 -0
- package/dist/cjs/Glob.d.ts +204 -0
- package/dist/cjs/Glob.d.ts.map +1 -0
- package/dist/cjs/Glob.js +94 -0
- package/dist/cjs/Glob.js.map +7 -0
- package/dist/cjs/Grep.d.ts +347 -0
- package/dist/cjs/Grep.d.ts.map +1 -0
- package/dist/cjs/Grep.js +181 -0
- package/dist/cjs/Grep.js.map +7 -0
- package/dist/cjs/HttpPost.d.ts +130 -0
- package/dist/cjs/HttpPost.d.ts.map +1 -0
- package/dist/cjs/HttpPost.js +72 -0
- package/dist/cjs/HttpPost.js.map +7 -0
- package/dist/cjs/LanguageServer.d.ts +90 -0
- package/dist/cjs/LanguageServer.d.ts.map +1 -0
- package/dist/cjs/LanguageServer.js +60 -0
- package/dist/cjs/LanguageServer.js.map +7 -0
- package/dist/cjs/Ls.d.ts +164 -0
- package/dist/cjs/Ls.d.ts.map +1 -0
- package/dist/cjs/Ls.js +136 -0
- package/dist/cjs/Ls.js.map +7 -0
- package/dist/cjs/Lsp.d.ts +125 -0
- package/dist/cjs/Lsp.d.ts.map +1 -0
- package/dist/cjs/Lsp.js +137 -0
- package/dist/cjs/Lsp.js.map +7 -0
- package/dist/cjs/Manifest.d.ts +918 -0
- package/dist/cjs/Manifest.d.ts.map +1 -0
- package/dist/cjs/Manifest.js +144 -0
- package/dist/cjs/Manifest.js.map +7 -0
- package/dist/cjs/NativeSearch.d.ts +38 -0
- package/dist/cjs/NativeSearch.d.ts.map +1 -0
- package/dist/cjs/NativeSearch.js +326 -0
- package/dist/cjs/NativeSearch.js.map +7 -0
- package/dist/cjs/NodeLanguageServer.d.ts +128 -0
- package/dist/cjs/NodeLanguageServer.d.ts.map +1 -0
- package/dist/cjs/NodeLanguageServer.js +796 -0
- package/dist/cjs/NodeLanguageServer.js.map +7 -0
- package/dist/cjs/PortableSearch.d.ts +24 -0
- package/dist/cjs/PortableSearch.d.ts.map +1 -0
- package/dist/cjs/PortableSearch.js +233 -0
- package/dist/cjs/PortableSearch.js.map +7 -0
- package/dist/cjs/Probe.d.ts +193 -0
- package/dist/cjs/Probe.d.ts.map +1 -0
- package/dist/cjs/Probe.js +134 -0
- package/dist/cjs/Probe.js.map +7 -0
- package/dist/cjs/Read.d.ts +189 -0
- package/dist/cjs/Read.d.ts.map +1 -0
- package/dist/cjs/Read.js +223 -0
- package/dist/cjs/Read.js.map +7 -0
- package/dist/cjs/Relocate.d.ts +73 -0
- package/dist/cjs/Relocate.d.ts.map +1 -0
- package/dist/cjs/Relocate.js +72 -0
- package/dist/cjs/Relocate.js.map +7 -0
- package/dist/cjs/Search.d.ts +163 -0
- package/dist/cjs/Search.d.ts.map +1 -0
- package/dist/cjs/Search.js +51 -0
- package/dist/cjs/Search.js.map +7 -0
- package/dist/cjs/SearchConformance.d.ts +115 -0
- package/dist/cjs/SearchConformance.d.ts.map +1 -0
- package/dist/cjs/SearchConformance.js +172 -0
- package/dist/cjs/SearchConformance.js.map +7 -0
- package/dist/cjs/SearchContract.d.ts +114 -0
- package/dist/cjs/SearchContract.d.ts.map +1 -0
- package/dist/cjs/SearchContract.js +339 -0
- package/dist/cjs/SearchContract.js.map +7 -0
- package/dist/cjs/ShellCommand.d.ts +164 -0
- package/dist/cjs/ShellCommand.d.ts.map +1 -0
- package/dist/cjs/ShellCommand.js +102 -0
- package/dist/cjs/ShellCommand.js.map +7 -0
- package/dist/cjs/StdError.d.ts +55 -0
- package/dist/cjs/StdError.d.ts.map +1 -0
- package/dist/cjs/StdError.js +74 -0
- package/dist/cjs/StdError.js.map +7 -0
- package/dist/cjs/TestRun.d.ts +311 -0
- package/dist/cjs/TestRun.d.ts.map +1 -0
- package/dist/cjs/TestRun.js +228 -0
- package/dist/cjs/TestRun.js.map +7 -0
- package/dist/cjs/TestRunner.d.ts +102 -0
- package/dist/cjs/TestRunner.d.ts.map +1 -0
- package/dist/cjs/TestRunner.js +54 -0
- package/dist/cjs/TestRunner.js.map +7 -0
- package/dist/cjs/TreeFingerprint.d.ts +140 -0
- package/dist/cjs/TreeFingerprint.d.ts.map +1 -0
- package/dist/cjs/TreeFingerprint.js +87 -0
- package/dist/cjs/TreeFingerprint.js.map +7 -0
- package/dist/cjs/UpdatePlan.d.ts +152 -0
- package/dist/cjs/UpdatePlan.d.ts.map +1 -0
- package/dist/cjs/UpdatePlan.js +87 -0
- package/dist/cjs/UpdatePlan.js.map +7 -0
- package/dist/cjs/WebFetch.d.ts +134 -0
- package/dist/cjs/WebFetch.d.ts.map +1 -0
- package/dist/cjs/WebFetch.js +140 -0
- package/dist/cjs/WebFetch.js.map +7 -0
- package/dist/cjs/WebSearch.d.ts +181 -0
- package/dist/cjs/WebSearch.d.ts.map +1 -0
- package/dist/cjs/WebSearch.js +86 -0
- package/dist/cjs/WebSearch.js.map +7 -0
- package/dist/cjs/Write.d.ts +147 -0
- package/dist/cjs/Write.d.ts.map +1 -0
- package/dist/cjs/Write.js +122 -0
- package/dist/cjs/Write.js.map +7 -0
- package/dist/cjs/index.d.ts +127 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +99 -0
- package/dist/cjs/index.js.map +7 -0
- package/dist/cjs/internal/ApplyPatch.d.ts +145 -0
- package/dist/cjs/internal/ApplyPatch.d.ts.map +1 -0
- package/dist/cjs/internal/ApplyPatch.js +462 -0
- package/dist/cjs/internal/ApplyPatch.js.map +7 -0
- package/dist/cjs/internal/CodexText.d.ts +73 -0
- package/dist/cjs/internal/CodexText.d.ts.map +1 -0
- package/dist/cjs/internal/CodexText.js +108 -0
- package/dist/cjs/internal/CodexText.js.map +7 -0
- package/dist/cjs/internal/Declaration.d.ts +49 -0
- package/dist/cjs/internal/Declaration.d.ts.map +1 -0
- package/dist/cjs/internal/Declaration.js +46 -0
- package/dist/cjs/internal/Declaration.js.map +7 -0
- package/dist/cjs/internal/Diagnostics.d.ts +77 -0
- package/dist/cjs/internal/Diagnostics.d.ts.map +1 -0
- package/dist/cjs/internal/Diagnostics.js +89 -0
- package/dist/cjs/internal/Diagnostics.js.map +7 -0
- package/dist/cjs/internal/EnvelopePrecheck.d.ts +67 -0
- package/dist/cjs/internal/EnvelopePrecheck.d.ts.map +1 -0
- package/dist/cjs/internal/EnvelopePrecheck.js +124 -0
- package/dist/cjs/internal/EnvelopePrecheck.js.map +7 -0
- package/dist/cjs/internal/Exec.d.ts +139 -0
- package/dist/cjs/internal/Exec.d.ts.map +1 -0
- package/dist/cjs/internal/Exec.js +158 -0
- package/dist/cjs/internal/Exec.js.map +7 -0
- package/dist/cjs/internal/FileMutation.d.ts +109 -0
- package/dist/cjs/internal/FileMutation.d.ts.map +1 -0
- package/dist/cjs/internal/FileMutation.js +116 -0
- package/dist/cjs/internal/FileMutation.js.map +7 -0
- package/dist/cjs/internal/FsFailure.d.ts +38 -0
- package/dist/cjs/internal/FsFailure.d.ts.map +1 -0
- package/dist/cjs/internal/FsFailure.js +40 -0
- package/dist/cjs/internal/FsFailure.js.map +7 -0
- package/dist/cjs/internal/GitWorktree.d.ts +108 -0
- package/dist/cjs/internal/GitWorktree.d.ts.map +1 -0
- package/dist/cjs/internal/GitWorktree.js +276 -0
- package/dist/cjs/internal/GitWorktree.js.map +7 -0
- package/dist/cjs/internal/Grouping.d.ts +51 -0
- package/dist/cjs/internal/Grouping.d.ts.map +1 -0
- package/dist/cjs/internal/Grouping.js +83 -0
- package/dist/cjs/internal/Grouping.js.map +7 -0
- package/dist/cjs/internal/Html.d.ts +20 -0
- package/dist/cjs/internal/Html.d.ts.map +1 -0
- package/dist/cjs/internal/Html.js +81 -0
- package/dist/cjs/internal/Html.js.map +7 -0
- package/dist/cjs/internal/Http.d.ts +95 -0
- package/dist/cjs/internal/Http.d.ts.map +1 -0
- package/dist/cjs/internal/Http.js +153 -0
- package/dist/cjs/internal/Http.js.map +7 -0
- package/dist/cjs/internal/HttpNetwork.d.ts +27 -0
- package/dist/cjs/internal/HttpNetwork.d.ts.map +1 -0
- package/dist/cjs/internal/HttpNetwork.js +146 -0
- package/dist/cjs/internal/HttpNetwork.js.map +7 -0
- package/dist/cjs/internal/Ignore.d.ts +37 -0
- package/dist/cjs/internal/Ignore.d.ts.map +1 -0
- package/dist/cjs/internal/Ignore.js +100 -0
- package/dist/cjs/internal/Ignore.js.map +7 -0
- package/dist/cjs/internal/LinearRegex.d.ts +19 -0
- package/dist/cjs/internal/LinearRegex.d.ts.map +1 -0
- package/dist/cjs/internal/LinearRegex.js +166 -0
- package/dist/cjs/internal/LinearRegex.js.map +7 -0
- package/dist/cjs/internal/Match.d.ts +85 -0
- package/dist/cjs/internal/Match.d.ts.map +1 -0
- package/dist/cjs/internal/Match.js +99 -0
- package/dist/cjs/internal/Match.js.map +7 -0
- package/dist/cjs/internal/Paths.d.ts +23 -0
- package/dist/cjs/internal/Paths.d.ts.map +1 -0
- package/dist/cjs/internal/Paths.js +52 -0
- package/dist/cjs/internal/Paths.js.map +7 -0
- package/dist/cjs/internal/Preserve.d.ts +25 -0
- package/dist/cjs/internal/Preserve.d.ts.map +1 -0
- package/dist/cjs/internal/Preserve.js +88 -0
- package/dist/cjs/internal/Preserve.js.map +7 -0
- package/dist/cjs/internal/Prune.d.ts +35 -0
- package/dist/cjs/internal/Prune.d.ts.map +1 -0
- package/dist/cjs/internal/Prune.js +54 -0
- package/dist/cjs/internal/Prune.js.map +7 -0
- package/dist/cjs/internal/SearchContract.d.ts +63 -0
- package/dist/cjs/internal/SearchContract.d.ts.map +1 -0
- package/dist/cjs/internal/SearchContract.js +46 -0
- package/dist/cjs/internal/SearchContract.js.map +7 -0
- package/dist/cjs/internal/Symbols.d.ts +39 -0
- package/dist/cjs/internal/Symbols.d.ts.map +1 -0
- package/dist/cjs/internal/Symbols.js +59 -0
- package/dist/cjs/internal/Symbols.js.map +7 -0
- package/dist/cjs/internal/TestReport.d.ts +52 -0
- package/dist/cjs/internal/TestReport.d.ts.map +1 -0
- package/dist/cjs/internal/TestReport.js +131 -0
- package/dist/cjs/internal/TestReport.js.map +7 -0
- package/dist/cjs/internal/Text.d.ts +114 -0
- package/dist/cjs/internal/Text.d.ts.map +1 -0
- package/dist/cjs/internal/Text.js +82 -0
- package/dist/cjs/internal/Text.js.map +7 -0
- package/dist/cjs/internal/Url.d.ts +13 -0
- package/dist/cjs/internal/Url.d.ts.map +1 -0
- package/dist/cjs/internal/Url.js +35 -0
- package/dist/cjs/internal/Url.js.map +7 -0
- package/dist/cjs/internal/Walk.d.ts +72 -0
- package/dist/cjs/internal/Walk.d.ts.map +1 -0
- package/dist/cjs/internal/Walk.js +108 -0
- package/dist/cjs/internal/Walk.js.map +7 -0
- package/dist/cjs/package.json +1 -0
- package/dist/esm/ApplyPatch.d.ts +174 -0
- package/dist/esm/ApplyPatch.d.ts.map +1 -0
- package/dist/esm/ApplyPatch.js +346 -0
- package/dist/esm/ApplyPatch.js.map +1 -0
- package/dist/esm/Bash.d.ts +380 -0
- package/dist/esm/Bash.d.ts.map +1 -0
- package/dist/esm/Bash.js +505 -0
- package/dist/esm/Bash.js.map +1 -0
- package/dist/esm/Checkpoints.d.ts +279 -0
- package/dist/esm/Checkpoints.d.ts.map +1 -0
- package/dist/esm/Checkpoints.js +298 -0
- package/dist/esm/Checkpoints.js.map +1 -0
- package/dist/esm/Container.d.ts +132 -0
- package/dist/esm/Container.d.ts.map +1 -0
- package/dist/esm/Container.js +151 -0
- package/dist/esm/Container.js.map +1 -0
- package/dist/esm/Edit.d.ts +203 -0
- package/dist/esm/Edit.d.ts.map +1 -0
- package/dist/esm/Edit.js +296 -0
- package/dist/esm/Edit.js.map +1 -0
- package/dist/esm/ExaWebSearch.d.ts +22 -0
- package/dist/esm/ExaWebSearch.d.ts.map +1 -0
- package/dist/esm/ExaWebSearch.js +107 -0
- package/dist/esm/ExaWebSearch.js.map +1 -0
- package/dist/esm/Explore.d.ts +328 -0
- package/dist/esm/Explore.d.ts.map +1 -0
- package/dist/esm/Explore.js +106 -0
- package/dist/esm/Explore.js.map +1 -0
- package/dist/esm/Fetch.d.ts +130 -0
- package/dist/esm/Fetch.d.ts.map +1 -0
- package/dist/esm/Fetch.js +91 -0
- package/dist/esm/Fetch.js.map +1 -0
- package/dist/esm/Glob.d.ts +204 -0
- package/dist/esm/Glob.d.ts.map +1 -0
- package/dist/esm/Glob.js +177 -0
- package/dist/esm/Glob.js.map +1 -0
- package/dist/esm/Grep.d.ts +347 -0
- package/dist/esm/Grep.d.ts.map +1 -0
- package/dist/esm/Grep.js +289 -0
- package/dist/esm/Grep.js.map +1 -0
- package/dist/esm/HttpPost.d.ts +130 -0
- package/dist/esm/HttpPost.d.ts.map +1 -0
- package/dist/esm/HttpPost.js +89 -0
- package/dist/esm/HttpPost.js.map +1 -0
- package/dist/esm/LanguageServer.d.ts +90 -0
- package/dist/esm/LanguageServer.d.ts.map +1 -0
- package/dist/esm/LanguageServer.js +57 -0
- package/dist/esm/LanguageServer.js.map +1 -0
- package/dist/esm/Ls.d.ts +164 -0
- package/dist/esm/Ls.d.ts.map +1 -0
- package/dist/esm/Ls.js +178 -0
- package/dist/esm/Ls.js.map +1 -0
- package/dist/esm/Lsp.d.ts +125 -0
- package/dist/esm/Lsp.d.ts.map +1 -0
- package/dist/esm/Lsp.js +165 -0
- package/dist/esm/Lsp.js.map +1 -0
- package/dist/esm/Manifest.d.ts +918 -0
- package/dist/esm/Manifest.d.ts.map +1 -0
- package/dist/esm/Manifest.js +153 -0
- package/dist/esm/Manifest.js.map +1 -0
- package/dist/esm/NativeSearch.d.ts +38 -0
- package/dist/esm/NativeSearch.d.ts.map +1 -0
- package/dist/esm/NativeSearch.js +378 -0
- package/dist/esm/NativeSearch.js.map +1 -0
- package/dist/esm/NodeLanguageServer.d.ts +128 -0
- package/dist/esm/NodeLanguageServer.d.ts.map +1 -0
- package/dist/esm/NodeLanguageServer.js +843 -0
- package/dist/esm/NodeLanguageServer.js.map +1 -0
- package/dist/esm/PortableSearch.d.ts +24 -0
- package/dist/esm/PortableSearch.d.ts.map +1 -0
- package/dist/esm/PortableSearch.js +240 -0
- package/dist/esm/PortableSearch.js.map +1 -0
- package/dist/esm/Probe.d.ts +193 -0
- package/dist/esm/Probe.d.ts.map +1 -0
- package/dist/esm/Probe.js +225 -0
- package/dist/esm/Probe.js.map +1 -0
- package/dist/esm/Read.d.ts +189 -0
- package/dist/esm/Read.d.ts.map +1 -0
- package/dist/esm/Read.js +300 -0
- package/dist/esm/Read.js.map +1 -0
- package/dist/esm/Relocate.d.ts +73 -0
- package/dist/esm/Relocate.d.ts.map +1 -0
- package/dist/esm/Relocate.js +153 -0
- package/dist/esm/Relocate.js.map +1 -0
- package/dist/esm/Search.d.ts +163 -0
- package/dist/esm/Search.d.ts.map +1 -0
- package/dist/esm/Search.js +47 -0
- package/dist/esm/Search.js.map +1 -0
- package/dist/esm/SearchConformance.d.ts +115 -0
- package/dist/esm/SearchConformance.d.ts.map +1 -0
- package/dist/esm/SearchConformance.js +193 -0
- package/dist/esm/SearchConformance.js.map +1 -0
- package/dist/esm/SearchContract.d.ts +114 -0
- package/dist/esm/SearchContract.d.ts.map +1 -0
- package/dist/esm/SearchContract.js +461 -0
- package/dist/esm/SearchContract.js.map +1 -0
- package/dist/esm/ShellCommand.d.ts +164 -0
- package/dist/esm/ShellCommand.d.ts.map +1 -0
- package/dist/esm/ShellCommand.js +159 -0
- package/dist/esm/ShellCommand.js.map +1 -0
- package/dist/esm/StdError.d.ts +55 -0
- package/dist/esm/StdError.d.ts.map +1 -0
- package/dist/esm/StdError.js +71 -0
- package/dist/esm/StdError.js.map +1 -0
- package/dist/esm/TestRun.d.ts +311 -0
- package/dist/esm/TestRun.d.ts.map +1 -0
- package/dist/esm/TestRun.js +316 -0
- package/dist/esm/TestRun.js.map +1 -0
- package/dist/esm/TestRunner.d.ts +102 -0
- package/dist/esm/TestRunner.d.ts.map +1 -0
- package/dist/esm/TestRunner.js +68 -0
- package/dist/esm/TestRunner.js.map +1 -0
- package/dist/esm/TreeFingerprint.d.ts +140 -0
- package/dist/esm/TreeFingerprint.d.ts.map +1 -0
- package/dist/esm/TreeFingerprint.js +170 -0
- package/dist/esm/TreeFingerprint.js.map +1 -0
- package/dist/esm/UpdatePlan.d.ts +152 -0
- package/dist/esm/UpdatePlan.d.ts.map +1 -0
- package/dist/esm/UpdatePlan.js +129 -0
- package/dist/esm/UpdatePlan.js.map +1 -0
- package/dist/esm/WebFetch.d.ts +134 -0
- package/dist/esm/WebFetch.d.ts.map +1 -0
- package/dist/esm/WebFetch.js +151 -0
- package/dist/esm/WebFetch.js.map +1 -0
- package/dist/esm/WebSearch.d.ts +181 -0
- package/dist/esm/WebSearch.d.ts.map +1 -0
- package/dist/esm/WebSearch.js +134 -0
- package/dist/esm/WebSearch.js.map +1 -0
- package/dist/esm/Write.d.ts +147 -0
- package/dist/esm/Write.d.ts.map +1 -0
- package/dist/esm/Write.js +144 -0
- package/dist/esm/Write.js.map +1 -0
- package/dist/esm/index.d.ts +127 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +127 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/internal/ApplyPatch.d.ts +145 -0
- package/dist/esm/internal/ApplyPatch.d.ts.map +1 -0
- package/dist/esm/internal/ApplyPatch.js +489 -0
- package/dist/esm/internal/ApplyPatch.js.map +1 -0
- package/dist/esm/internal/CodexText.d.ts +73 -0
- package/dist/esm/internal/CodexText.d.ts.map +1 -0
- package/dist/esm/internal/CodexText.js +156 -0
- package/dist/esm/internal/CodexText.js.map +1 -0
- package/dist/esm/internal/Declaration.d.ts +49 -0
- package/dist/esm/internal/Declaration.d.ts.map +1 -0
- package/dist/esm/internal/Declaration.js +42 -0
- package/dist/esm/internal/Declaration.js.map +1 -0
- package/dist/esm/internal/Diagnostics.d.ts +77 -0
- package/dist/esm/internal/Diagnostics.d.ts.map +1 -0
- package/dist/esm/internal/Diagnostics.js +99 -0
- package/dist/esm/internal/Diagnostics.js.map +1 -0
- package/dist/esm/internal/EnvelopePrecheck.d.ts +67 -0
- package/dist/esm/internal/EnvelopePrecheck.d.ts.map +1 -0
- package/dist/esm/internal/EnvelopePrecheck.js +167 -0
- package/dist/esm/internal/EnvelopePrecheck.js.map +1 -0
- package/dist/esm/internal/Exec.d.ts +139 -0
- package/dist/esm/internal/Exec.d.ts.map +1 -0
- package/dist/esm/internal/Exec.js +193 -0
- package/dist/esm/internal/Exec.js.map +1 -0
- package/dist/esm/internal/FileMutation.d.ts +109 -0
- package/dist/esm/internal/FileMutation.d.ts.map +1 -0
- package/dist/esm/internal/FileMutation.js +123 -0
- package/dist/esm/internal/FileMutation.js.map +1 -0
- package/dist/esm/internal/FsFailure.d.ts +38 -0
- package/dist/esm/internal/FsFailure.d.ts.map +1 -0
- package/dist/esm/internal/FsFailure.js +39 -0
- package/dist/esm/internal/FsFailure.js.map +1 -0
- package/dist/esm/internal/GitWorktree.d.ts +108 -0
- package/dist/esm/internal/GitWorktree.d.ts.map +1 -0
- package/dist/esm/internal/GitWorktree.js +352 -0
- package/dist/esm/internal/GitWorktree.js.map +1 -0
- package/dist/esm/internal/Grouping.d.ts +51 -0
- package/dist/esm/internal/Grouping.d.ts.map +1 -0
- package/dist/esm/internal/Grouping.js +99 -0
- package/dist/esm/internal/Grouping.js.map +1 -0
- package/dist/esm/internal/Html.d.ts +20 -0
- package/dist/esm/internal/Html.d.ts.map +1 -0
- package/dist/esm/internal/Html.js +70 -0
- package/dist/esm/internal/Html.js.map +1 -0
- package/dist/esm/internal/Http.d.ts +95 -0
- package/dist/esm/internal/Http.d.ts.map +1 -0
- package/dist/esm/internal/Http.js +154 -0
- package/dist/esm/internal/Http.js.map +1 -0
- package/dist/esm/internal/HttpNetwork.d.ts +27 -0
- package/dist/esm/internal/HttpNetwork.d.ts.map +1 -0
- package/dist/esm/internal/HttpNetwork.js +114 -0
- package/dist/esm/internal/HttpNetwork.js.map +1 -0
- package/dist/esm/internal/Ignore.d.ts +37 -0
- package/dist/esm/internal/Ignore.d.ts.map +1 -0
- package/dist/esm/internal/Ignore.js +128 -0
- package/dist/esm/internal/Ignore.js.map +1 -0
- package/dist/esm/internal/LinearRegex.d.ts +19 -0
- package/dist/esm/internal/LinearRegex.d.ts.map +1 -0
- package/dist/esm/internal/LinearRegex.js +176 -0
- package/dist/esm/internal/LinearRegex.js.map +1 -0
- package/dist/esm/internal/Match.d.ts +85 -0
- package/dist/esm/internal/Match.d.ts.map +1 -0
- package/dist/esm/internal/Match.js +142 -0
- package/dist/esm/internal/Match.js.map +1 -0
- package/dist/esm/internal/Paths.d.ts +23 -0
- package/dist/esm/internal/Paths.d.ts.map +1 -0
- package/dist/esm/internal/Paths.js +40 -0
- package/dist/esm/internal/Paths.js.map +1 -0
- package/dist/esm/internal/Preserve.d.ts +25 -0
- package/dist/esm/internal/Preserve.d.ts.map +1 -0
- package/dist/esm/internal/Preserve.js +70 -0
- package/dist/esm/internal/Preserve.js.map +1 -0
- package/dist/esm/internal/Prune.d.ts +35 -0
- package/dist/esm/internal/Prune.d.ts.map +1 -0
- package/dist/esm/internal/Prune.js +60 -0
- package/dist/esm/internal/Prune.js.map +1 -0
- package/dist/esm/internal/SearchContract.d.ts +63 -0
- package/dist/esm/internal/SearchContract.d.ts.map +1 -0
- package/dist/esm/internal/SearchContract.js +66 -0
- package/dist/esm/internal/SearchContract.js.map +1 -0
- package/dist/esm/internal/Symbols.d.ts +39 -0
- package/dist/esm/internal/Symbols.d.ts.map +1 -0
- package/dist/esm/internal/Symbols.js +79 -0
- package/dist/esm/internal/Symbols.js.map +1 -0
- package/dist/esm/internal/TestReport.d.ts +52 -0
- package/dist/esm/internal/TestReport.d.ts.map +1 -0
- package/dist/esm/internal/TestReport.js +172 -0
- package/dist/esm/internal/TestReport.js.map +1 -0
- package/dist/esm/internal/Text.d.ts +114 -0
- package/dist/esm/internal/Text.d.ts.map +1 -0
- package/dist/esm/internal/Text.js +130 -0
- package/dist/esm/internal/Text.js.map +1 -0
- package/dist/esm/internal/Url.d.ts +13 -0
- package/dist/esm/internal/Url.d.ts.map +1 -0
- package/dist/esm/internal/Url.js +27 -0
- package/dist/esm/internal/Url.js.map +1 -0
- package/dist/esm/internal/Walk.d.ts +72 -0
- package/dist/esm/internal/Walk.d.ts.map +1 -0
- package/dist/esm/internal/Walk.js +126 -0
- package/dist/esm/internal/Walk.js.map +1 -0
- package/docs/README.md +117 -0
- package/docs/api.md +472 -0
- package/docs/concepts/effects-and-capabilities.md +136 -0
- package/docs/concepts/flows-and-handlers.md +115 -0
- package/docs/concepts/limits-and-disclosure.md +102 -0
- package/docs/concepts/search-contract.md +182 -0
- package/docs/guides/bind-the-standard-flows.md +114 -0
- package/docs/guides/implement-a-search-peer.md +133 -0
- package/docs/guides/pin-a-checkpoint.md +141 -0
- package/docs/guides/query-a-language-server.md +257 -0
- package/docs/guides/reach-the-network.md +141 -0
- package/docs/guides/read-and-edit-a-file.md +240 -0
- package/docs/guides/run-a-shell-command.md +215 -0
- package/docs/guides/run-the-test-suite.md +154 -0
- package/docs/guides/search-a-workspace.md +148 -0
- package/docs/installation.md +111 -0
- package/docs/quickstart.md +125 -0
- package/docs/reference/flows.md +556 -0
- package/docs/troubleshooting.md +322 -0
- package/package.json +439 -3
- package/src/ApplyPatch.ts +458 -0
- package/src/Bash.ts +607 -0
- package/src/Checkpoints.ts +422 -0
- package/src/Container.ts +212 -0
- package/src/Edit.ts +366 -0
- package/src/ExaWebSearch.ts +145 -0
- package/src/Explore.ts +139 -0
- package/src/Fetch.ts +117 -0
- package/src/Glob.ts +200 -0
- package/src/Grep.ts +320 -0
- package/src/HttpPost.ts +120 -0
- package/src/LanguageServer.ts +110 -0
- package/src/Ls.ts +228 -0
- package/src/Lsp.ts +184 -0
- package/src/Manifest.ts +162 -0
- package/src/NativeSearch.ts +457 -0
- package/src/NodeLanguageServer.ts +1148 -0
- package/src/PortableSearch.ts +264 -0
- package/src/Probe.ts +284 -0
- package/src/Read.ts +359 -0
- package/src/Relocate.ts +166 -0
- package/src/Search.ts +185 -0
- package/src/SearchConformance.ts +288 -0
- package/src/SearchContract.ts +489 -0
- package/src/ShellCommand.ts +201 -0
- package/src/StdError.ts +80 -0
- package/src/TestRun.ts +401 -0
- package/src/TestRunner.ts +119 -0
- package/src/TreeFingerprint.ts +200 -0
- package/src/UpdatePlan.ts +171 -0
- package/src/WebFetch.ts +194 -0
- package/src/WebSearch.ts +165 -0
- package/src/Write.ts +195 -0
- package/src/index.ts +154 -0
- package/src/internal/ApplyPatch.ts +601 -0
- package/src/internal/CodexText.ts +182 -0
- package/src/internal/Declaration.ts +60 -0
- package/src/internal/Diagnostics.ts +134 -0
- package/src/internal/EnvelopePrecheck.ts +233 -0
- package/src/internal/Exec.ts +314 -0
- package/src/internal/FileMutation.ts +231 -0
- package/src/internal/FsFailure.ts +51 -0
- package/src/internal/GitWorktree.ts +491 -0
- package/src/internal/Grouping.ts +106 -0
- package/src/internal/Html.ts +87 -0
- package/src/internal/Http.ts +209 -0
- package/src/internal/HttpNetwork.ts +153 -0
- package/src/internal/Ignore.ts +135 -0
- package/src/internal/LinearRegex.ts +173 -0
- package/src/internal/Match.ts +172 -0
- package/src/internal/Paths.ts +42 -0
- package/src/internal/Preserve.ts +108 -0
- package/src/internal/Prune.ts +62 -0
- package/src/internal/SearchContract.ts +77 -0
- package/src/internal/Symbols.ts +88 -0
- package/src/internal/TestReport.ts +194 -0
- package/src/internal/Text.ts +170 -0
- package/src/internal/Url.ts +23 -0
- package/src/internal/Walk.ts +176 -0
|
@@ -0,0 +1,83 @@
|
|
|
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 Grouping_exports = {};
|
|
30
|
+
__export(Grouping_exports, {
|
|
31
|
+
annotate: () => annotate,
|
|
32
|
+
group: () => group,
|
|
33
|
+
sourceLines: () => sourceLines
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(Grouping_exports);
|
|
36
|
+
var Symbols = __toESM(require("./Symbols.js"), 1);
|
|
37
|
+
var Text = __toESM(require("./Text.js"), 1);
|
|
38
|
+
const sourceLines = Text.sourceLines;
|
|
39
|
+
const owner = (matches, line) => {
|
|
40
|
+
let best = 0;
|
|
41
|
+
let distance = Number.POSITIVE_INFINITY;
|
|
42
|
+
for (let index = 0; index < matches.length; index++) {
|
|
43
|
+
const candidate = Math.abs(matches[index] - line);
|
|
44
|
+
if (candidate < distance) {
|
|
45
|
+
best = index;
|
|
46
|
+
distance = candidate;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return best;
|
|
50
|
+
};
|
|
51
|
+
const group = (lines) => {
|
|
52
|
+
const byFile = /* @__PURE__ */ new Map();
|
|
53
|
+
for (const line of lines) {
|
|
54
|
+
const existing = byFile.get(line.file);
|
|
55
|
+
if (existing === void 0) byFile.set(line.file, [line]);
|
|
56
|
+
else existing.push(line);
|
|
57
|
+
}
|
|
58
|
+
const grouped = [];
|
|
59
|
+
for (const [file, rows] of byFile) {
|
|
60
|
+
const matches = rows.filter((row) => row.kind === "match");
|
|
61
|
+
if (matches.length === 0) continue;
|
|
62
|
+
const numbers = matches.map((row) => row.line);
|
|
63
|
+
const before = matches.map(() => []);
|
|
64
|
+
const after = matches.map(() => []);
|
|
65
|
+
for (const row of rows) {
|
|
66
|
+
if (row.kind !== "context") continue;
|
|
67
|
+
const index = owner(numbers, row.line);
|
|
68
|
+
const bucket = row.line < numbers[index] ? before[index] : after[index];
|
|
69
|
+
bucket.push({ line: row.line, text: row.text });
|
|
70
|
+
}
|
|
71
|
+
for (let index = 0; index < matches.length; index++) {
|
|
72
|
+
const row = matches[index];
|
|
73
|
+
grouped.push({ file, line: row.line, text: row.text, before: before[index], after: after[index] });
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return grouped;
|
|
77
|
+
};
|
|
78
|
+
const annotate = (matches, contents) => matches.map((match) => {
|
|
79
|
+
const source = contents.get(match.file);
|
|
80
|
+
const symbol = source === void 0 ? void 0 : Symbols.enclosing(source, match.line);
|
|
81
|
+
return symbol === void 0 ? match : { ...match, symbol };
|
|
82
|
+
});
|
|
83
|
+
//# sourceMappingURL=Grouping.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Grouping.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Match-centric grep results: the limit counts matches, and context rides\n * inside the match it belongs to.\n *\n * A flat list of rows made `limit` a row budget, and a row budget can spend\n * itself on context and drop the match. That is not a display detail: on\n * astropy-7166 the clip dropped the match row twice and cost three frames of\n * guard-bailing, because the agent could see the lines around its hit and not\n * the hit. Ripgrep's own JSON groups by match for the same reason.\n *\n * Both peers group here rather than each in its own way, so the native and\n * in-process implementations cannot drift on what a limit means or on which\n * match owns a shared context line.\n *\n * @since 1.0.0\n */\n\nimport type * as Search from \"../Search.ts\"\nimport * as Symbols from \"./Symbols.ts\"\nimport * as Text from \"./Text.ts\"\n\n/**\n * A file's text as the numbered lines both peers count.\n *\n * This is `Text.sourceLines` under the name the search peers reach for, not a\n * second copy of it. There used to be two byte-identical definitions of the\n * rule, one here and one in `internal/Text.ts`, and a divergence between them\n * is exactly how `read` came to report one more line than `grep` for every\n * file ending in a newline. One definition cannot drift from itself.\n *\n * @category search\n * @since 1.0.0\n */\nexport const sourceLines: (content: string) => ReadonlyArray<string> = Text.sourceLines\n\n/** Every context line belongs to exactly one match: the nearest, earliest on a tie. */\nconst owner = (matches: ReadonlyArray<number>, line: number): number => {\n let best = 0\n let distance = Number.POSITIVE_INFINITY\n for (let index = 0; index < matches.length; index++) {\n const candidate = Math.abs(matches[index]! - line)\n if (candidate < distance) {\n best = index\n distance = candidate\n }\n }\n return best\n}\n\n/**\n * Groups a peer's flat rows into matches, each carrying its own context.\n *\n * @category search\n * @since 1.0.0\n */\nexport const group = (\n lines: ReadonlyArray<Search.GrepLine>\n): ReadonlyArray<Search.GrepMatch> => {\n const byFile = new Map<string, Array<Search.GrepLine>>()\n for (const line of lines) {\n const existing = byFile.get(line.file)\n if (existing === undefined) byFile.set(line.file, [line])\n else existing.push(line)\n }\n const grouped: Array<Search.GrepMatch> = []\n for (const [file, rows] of byFile) {\n const matches = rows.filter((row) => row.kind === \"match\")\n if (matches.length === 0) continue\n const numbers = matches.map((row) => row.line)\n const before = matches.map((): Array<Search.ContextLine> => [])\n const after = matches.map((): Array<Search.ContextLine> => [])\n for (const row of rows) {\n if (row.kind !== \"context\") continue\n const index = owner(numbers, row.line)\n const bucket = row.line < numbers[index]! ? before[index]! : after[index]!\n bucket.push({ line: row.line, text: row.text })\n }\n for (let index = 0; index < matches.length; index++) {\n const row = matches[index]!\n grouped.push({ file, line: row.line, text: row.text, before: before[index]!, after: after[index]! })\n }\n }\n return grouped\n}\n\n/**\n * Attaches each hit's enclosing definition, for the hits actually being\n * returned.\n *\n * `contents` holds a matched file's lines. A peer that does not have them \u2014 the\n * `rg` process reports lines, not files \u2014 reads only the files whose hits\n * survived the limit, so the cost is bounded by what the caller receives rather\n * than by what the search covered.\n *\n * @category search\n * @since 1.0.0\n */\nexport const annotate = (\n matches: ReadonlyArray<Search.GrepMatch>,\n contents: ReadonlyMap<string, ReadonlyArray<string>>\n): ReadonlyArray<Search.GrepMatch> =>\n matches.map((match) => {\n const source = contents.get(match.file)\n const symbol = source === undefined ? undefined : Symbols.enclosing(source, match.line)\n return symbol === undefined ? match : { ...match, symbol }\n })\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBA,cAAyB;AACzB,WAAsB;AAcf,MAAM,cAA0D,KAAK;AAG5E,MAAM,QAAQ,CAAC,SAAgC,SAAyB;AACtE,MAAI,OAAO;AACX,MAAI,WAAW,OAAO;AACtB,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACnD,UAAM,YAAY,KAAK,IAAI,QAAQ,KAAK,IAAK,IAAI;AACjD,QAAI,YAAY,UAAU;AACxB,aAAO;AACP,iBAAW;AAAA,IACb;AAAA,EACF;AACA,SAAO;AACT;AAQO,MAAM,QAAQ,CACnB,UACoC;AACpC,QAAM,SAAS,oBAAI,IAAoC;AACvD,aAAW,QAAQ,OAAO;AACxB,UAAM,WAAW,OAAO,IAAI,KAAK,IAAI;AACrC,QAAI,aAAa,OAAW,QAAO,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,QACnD,UAAS,KAAK,IAAI;AAAA,EACzB;AACA,QAAM,UAAmC,CAAC;AAC1C,aAAW,CAAC,MAAM,IAAI,KAAK,QAAQ;AACjC,UAAM,UAAU,KAAK,OAAO,CAAC,QAAQ,IAAI,SAAS,OAAO;AACzD,QAAI,QAAQ,WAAW,EAAG;AAC1B,UAAM,UAAU,QAAQ,IAAI,CAAC,QAAQ,IAAI,IAAI;AAC7C,UAAM,SAAS,QAAQ,IAAI,MAAiC,CAAC,CAAC;AAC9D,UAAM,QAAQ,QAAQ,IAAI,MAAiC,CAAC,CAAC;AAC7D,eAAW,OAAO,MAAM;AACtB,UAAI,IAAI,SAAS,UAAW;AAC5B,YAAM,QAAQ,MAAM,SAAS,IAAI,IAAI;AACrC,YAAM,SAAS,IAAI,OAAO,QAAQ,KAAK,IAAK,OAAO,KAAK,IAAK,MAAM,KAAK;AACxE,aAAO,KAAK,EAAE,MAAM,IAAI,MAAM,MAAM,IAAI,KAAK,CAAC;AAAA,IAChD;AACA,aAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACnD,YAAM,MAAM,QAAQ,KAAK;AACzB,cAAQ,KAAK,EAAE,MAAM,MAAM,IAAI,MAAM,MAAM,IAAI,MAAM,QAAQ,OAAO,KAAK,GAAI,OAAO,MAAM,KAAK,EAAG,CAAC;AAAA,IACrG;AAAA,EACF;AACA,SAAO;AACT;AAcO,MAAM,WAAW,CACtB,SACA,aAEA,QAAQ,IAAI,CAAC,UAAU;AACrB,QAAM,SAAS,SAAS,IAAI,MAAM,IAAI;AACtC,QAAM,SAAS,WAAW,SAAY,SAAY,QAAQ,UAAU,QAAQ,MAAM,IAAI;AACtF,SAAO,WAAW,SAAY,QAAQ,EAAE,GAAG,OAAO,OAAO;AAC3D,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Small, dependency-free HTML renderers for web retrieval.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* Extracts readable text while dropping executable and presentation-only elements.
|
|
8
|
+
*
|
|
9
|
+
* @category rendering
|
|
10
|
+
* @since 1.0.0
|
|
11
|
+
*/
|
|
12
|
+
export declare const toText: (html: string) => string;
|
|
13
|
+
/**
|
|
14
|
+
* Converts a conservative subset of HTML into readable Markdown.
|
|
15
|
+
*
|
|
16
|
+
* @category rendering
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
export declare const toMarkdown: (html: string) => string;
|
|
20
|
+
//# sourceMappingURL=Html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Html.d.ts","sourceRoot":"","sources":["../../../src/internal/Html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAgDH;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,MAEiF,CAAA;AAEvH;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,MAkBzC,CAAA"}
|
|
@@ -0,0 +1,81 @@
|
|
|
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 Html_exports = {};
|
|
20
|
+
__export(Html_exports, {
|
|
21
|
+
toMarkdown: () => toMarkdown,
|
|
22
|
+
toText: () => toText
|
|
23
|
+
});
|
|
24
|
+
module.exports = __toCommonJS(Html_exports);
|
|
25
|
+
const comments = /<!--[\s\S]*?-->/g;
|
|
26
|
+
const entities = { amp: "&", lt: "<", gt: ">", quot: '"', apos: "'", nbsp: " " };
|
|
27
|
+
const dropSkipped = (html) => {
|
|
28
|
+
const lower = html.replace(/[A-Z]/g, (letter) => letter.toLowerCase());
|
|
29
|
+
const opening = /<(head|script|style|noscript|iframe|object|embed)\b/gi;
|
|
30
|
+
let output = "";
|
|
31
|
+
let cursor = 0;
|
|
32
|
+
let match;
|
|
33
|
+
while ((match = opening.exec(html)) !== null) {
|
|
34
|
+
output += html.slice(cursor, match.index);
|
|
35
|
+
const marker = `</${match[1].toLowerCase()}`;
|
|
36
|
+
let close = lower.indexOf(marker, opening.lastIndex);
|
|
37
|
+
while (close !== -1) {
|
|
38
|
+
let end = close + marker.length;
|
|
39
|
+
while (/\s/.test(lower[end] ?? "")) end++;
|
|
40
|
+
if (lower[end] === ">") {
|
|
41
|
+
cursor = end + 1;
|
|
42
|
+
opening.lastIndex = cursor;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
close = lower.indexOf(marker, close + marker.length);
|
|
46
|
+
}
|
|
47
|
+
if (close === -1) return output;
|
|
48
|
+
}
|
|
49
|
+
return output + html.slice(cursor);
|
|
50
|
+
};
|
|
51
|
+
const decode = (value) => value.replace(/&(#x[\da-f]+|#\d+|[a-z]+);/gi, (match, entity) => {
|
|
52
|
+
if (entity[0] === "#") {
|
|
53
|
+
const number = Number.parseInt(
|
|
54
|
+
entity.slice(entity[1].toLowerCase() === "x" ? 2 : 1),
|
|
55
|
+
entity[1].toLowerCase() === "x" ? 16 : 10
|
|
56
|
+
);
|
|
57
|
+
return number <= 1114111 && !(number >= 55296 && number <= 57343) ? String.fromCodePoint(number) : match;
|
|
58
|
+
}
|
|
59
|
+
const key = entity.toLowerCase();
|
|
60
|
+
return Object.hasOwn(entities, key) ? entities[key] : match;
|
|
61
|
+
});
|
|
62
|
+
const source = (html) => dropSkipped(html.replace(comments, ""));
|
|
63
|
+
const toText = (html) => decode(source(html).replace(/<(br|\/p|\/div|\/li|\/h[1-6]|\/tr)\b[^>]*>/gi, "\n").replace(/<[^>]*>/g, " ")).replace(/[ \t]+\n/g, "\n").replace(/\n[ \t]+/g, "\n").replace(/\n{3,}/g, "\n\n").replace(/[ \t]{2,}/g, " ").trim();
|
|
64
|
+
const toMarkdown = (html) => {
|
|
65
|
+
const markdown = source(html).replace(
|
|
66
|
+
/<h([1-6])\b[^>]*>([\s\S]*?)<\/h\1>/gi,
|
|
67
|
+
(_all, level, text) => `
|
|
68
|
+
|
|
69
|
+
${"#".repeat(Number(level))} ${toText(text)}
|
|
70
|
+
|
|
71
|
+
`
|
|
72
|
+
).replace(/<(strong|b)\b[^>]*>([\s\S]*?)<\/\1>/gi, "**$2**").replace(/<(em|i)\b[^>]*>([\s\S]*?)<\/\1>/gi, "*$2*").replace(
|
|
73
|
+
/<a\b[^>]*href=["']([^"']+)["'][^>]*>([\s\S]*?)<\/a>/gi,
|
|
74
|
+
(_all, href, text) => `[${toText(text)}](${href})`
|
|
75
|
+
).replace(/<li\b[^>]*>/gi, "\n- ").replace(
|
|
76
|
+
/<\/?(ul|ol|p|div|section|article|main|blockquote|pre|tr)\b[^>]*>/gi,
|
|
77
|
+
"\n"
|
|
78
|
+
).replace(/<br\b[^>]*>/gi, "\n").replace(/<[^>]*>/g, "");
|
|
79
|
+
return decode(markdown).replace(/[ \t]+\n/g, "\n").replace(/\n{3,}/g, "\n\n").trim();
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=Html.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Html.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Small, dependency-free HTML renderers for web retrieval.\n *\n * @since 1.0.0\n */\n\nconst comments = /<!--[\\s\\S]*?-->/g\nconst entities: Readonly<Record<string, string>> = { amp: \"&\", lt: \"<\", gt: \">\", quot: \"\\\"\", apos: \"'\", nbsp: \" \" }\n\nconst dropSkipped = (html: string): string => {\n const lower = html.replace(/[A-Z]/g, (letter) => letter.toLowerCase())\n const opening = /<(head|script|style|noscript|iframe|object|embed)\\b/gi\n let output = \"\"\n let cursor = 0\n let match: RegExpExecArray | null\n while ((match = opening.exec(html)) !== null) {\n output += html.slice(cursor, match.index)\n const marker = `</${match[1]!.toLowerCase()}`\n let close = lower.indexOf(marker, opening.lastIndex)\n while (close !== -1) {\n let end = close + marker.length\n while (/\\s/.test(lower[end] ?? \"\")) end++\n if (lower[end] === \">\") {\n cursor = end + 1\n opening.lastIndex = cursor\n break\n }\n close = lower.indexOf(marker, close + marker.length)\n }\n if (close === -1) return output\n }\n return output + html.slice(cursor)\n}\n\nconst decode = (value: string): string =>\n value.replace(/&(#x[\\da-f]+|#\\d+|[a-z]+);/gi, (match, entity: string) => {\n if (entity[0] === \"#\") {\n const number = Number.parseInt(\n entity.slice(entity[1]!.toLowerCase() === \"x\" ? 2 : 1),\n entity[1]!.toLowerCase() === \"x\" ? 16 : 10\n )\n return number <= 0x10ffff\n && !(number >= 0xd800 && number <= 0xdfff)\n ? String.fromCodePoint(number)\n : match\n }\n const key = entity.toLowerCase()\n return Object.hasOwn(entities, key) ? entities[key]! : match\n })\n\nconst source = (html: string): string => dropSkipped(html.replace(comments, \"\"))\n\n/**\n * Extracts readable text while dropping executable and presentation-only elements.\n *\n * @category rendering\n * @since 1.0.0\n */\nexport const toText = (html: string): string =>\n decode(source(html).replace(/<(br|\\/p|\\/div|\\/li|\\/h[1-6]|\\/tr)\\b[^>]*>/gi, \"\\n\").replace(/<[^>]*>/g, \" \"))\n .replace(/[ \\t]+\\n/g, \"\\n\").replace(/\\n[ \\t]+/g, \"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").replace(/[ \\t]{2,}/g, \" \").trim()\n\n/**\n * Converts a conservative subset of HTML into readable Markdown.\n *\n * @category rendering\n * @since 1.0.0\n */\nexport const toMarkdown = (html: string): string => {\n const markdown = source(html)\n .replace(\n /<h([1-6])\\b[^>]*>([\\s\\S]*?)<\\/h\\1>/gi,\n (_all, level: string, text: string) => `\\n\\n${\"#\".repeat(Number(level))} ${toText(text)}\\n\\n`\n )\n .replace(/<(strong|b)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi, \"**$2**\")\n .replace(/<(em|i)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi, \"*$2*\")\n .replace(\n /<a\\b[^>]*href=[\"']([^\"']+)[\"'][^>]*>([\\s\\S]*?)<\\/a>/gi,\n (_all, href: string, text: string) => `[${toText(text)}](${href})`\n )\n .replace(/<li\\b[^>]*>/gi, \"\\n- \").replace(\n /<\\/?(ul|ol|p|div|section|article|main|blockquote|pre|tr)\\b[^>]*>/gi,\n \"\\n\"\n )\n .replace(/<br\\b[^>]*>/gi, \"\\n\").replace(/<[^>]*>/g, \"\")\n return decode(markdown).replace(/[ \\t]+\\n/g, \"\\n\").replace(/\\n{3,}/g, \"\\n\\n\").trim()\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,MAAM,WAAW;AACjB,MAAM,WAA6C,EAAE,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,KAAM,MAAM,KAAK,MAAM,IAAI;AAElH,MAAM,cAAc,CAAC,SAAyB;AAC5C,QAAM,QAAQ,KAAK,QAAQ,UAAU,CAAC,WAAW,OAAO,YAAY,CAAC;AACrE,QAAM,UAAU;AAChB,MAAI,SAAS;AACb,MAAI,SAAS;AACb,MAAI;AACJ,UAAQ,QAAQ,QAAQ,KAAK,IAAI,OAAO,MAAM;AAC5C,cAAU,KAAK,MAAM,QAAQ,MAAM,KAAK;AACxC,UAAM,SAAS,KAAK,MAAM,CAAC,EAAG,YAAY,CAAC;AAC3C,QAAI,QAAQ,MAAM,QAAQ,QAAQ,QAAQ,SAAS;AACnD,WAAO,UAAU,IAAI;AACnB,UAAI,MAAM,QAAQ,OAAO;AACzB,aAAO,KAAK,KAAK,MAAM,GAAG,KAAK,EAAE,EAAG;AACpC,UAAI,MAAM,GAAG,MAAM,KAAK;AACtB,iBAAS,MAAM;AACf,gBAAQ,YAAY;AACpB;AAAA,MACF;AACA,cAAQ,MAAM,QAAQ,QAAQ,QAAQ,OAAO,MAAM;AAAA,IACrD;AACA,QAAI,UAAU,GAAI,QAAO;AAAA,EAC3B;AACA,SAAO,SAAS,KAAK,MAAM,MAAM;AACnC;AAEA,MAAM,SAAS,CAAC,UACd,MAAM,QAAQ,gCAAgC,CAAC,OAAO,WAAmB;AACvE,MAAI,OAAO,CAAC,MAAM,KAAK;AACrB,UAAM,SAAS,OAAO;AAAA,MACpB,OAAO,MAAM,OAAO,CAAC,EAAG,YAAY,MAAM,MAAM,IAAI,CAAC;AAAA,MACrD,OAAO,CAAC,EAAG,YAAY,MAAM,MAAM,KAAK;AAAA,IAC1C;AACA,WAAO,UAAU,WACV,EAAE,UAAU,SAAU,UAAU,SACnC,OAAO,cAAc,MAAM,IAC3B;AAAA,EACN;AACA,QAAM,MAAM,OAAO,YAAY;AAC/B,SAAO,OAAO,OAAO,UAAU,GAAG,IAAI,SAAS,GAAG,IAAK;AACzD,CAAC;AAEH,MAAM,SAAS,CAAC,SAAyB,YAAY,KAAK,QAAQ,UAAU,EAAE,CAAC;AAQxE,MAAM,SAAS,CAAC,SACrB,OAAO,OAAO,IAAI,EAAE,QAAQ,gDAAgD,IAAI,EAAE,QAAQ,YAAY,GAAG,CAAC,EACvG,QAAQ,aAAa,IAAI,EAAE,QAAQ,aAAa,IAAI,EAAE,QAAQ,WAAW,MAAM,EAAE,QAAQ,cAAc,GAAG,EAAE,KAAK;AAQ/G,MAAM,aAAa,CAAC,SAAyB;AAClD,QAAM,WAAW,OAAO,IAAI,EACzB;AAAA,IACC;AAAA,IACA,CAAC,MAAM,OAAe,SAAiB;AAAA;AAAA,EAAO,IAAI,OAAO,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,IAAI,CAAC;AAAA;AAAA;AAAA,EACzF,EACC,QAAQ,yCAAyC,QAAQ,EACzD,QAAQ,qCAAqC,MAAM,EACnD;AAAA,IACC;AAAA,IACA,CAAC,MAAM,MAAc,SAAiB,IAAI,OAAO,IAAI,CAAC,KAAK,IAAI;AAAA,EACjE,EACC,QAAQ,iBAAiB,MAAM,EAAE;AAAA,IAChC;AAAA,IACA;AAAA,EACF,EACC,QAAQ,iBAAiB,IAAI,EAAE,QAAQ,YAAY,EAAE;AACxD,SAAO,OAAO,QAAQ,EAAE,QAAQ,aAAa,IAAI,EAAE,QAAQ,WAAW,MAAM,EAAE,KAAK;AACrF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTTP response limits, error mapping, and request deadlines.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import type { GrantStore } from "@smthrs/kernel/GrantStore";
|
|
7
|
+
import * as HttpClient from "@smthrs/kernel/HttpClient";
|
|
8
|
+
import * as Effect from "effect/Effect";
|
|
9
|
+
import * as Schema from "effect/Schema";
|
|
10
|
+
import * as Stream from "effect/Stream";
|
|
11
|
+
import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest";
|
|
12
|
+
import * as StdError from "../StdError.ts";
|
|
13
|
+
/**
|
|
14
|
+
* Maximum captured response bytes before decoding.
|
|
15
|
+
*
|
|
16
|
+
* @category http
|
|
17
|
+
* @since 1.0.0
|
|
18
|
+
*/
|
|
19
|
+
export declare const MAX_RESPONSE_BYTES: number;
|
|
20
|
+
/**
|
|
21
|
+
* Reads a response up to the shared byte limit and finalizes the stream on failure.
|
|
22
|
+
*
|
|
23
|
+
* @category http
|
|
24
|
+
* @since 1.0.0
|
|
25
|
+
*/
|
|
26
|
+
export declare const readBounded: <E, R>(stream: Stream.Stream<Uint8Array, E, R>, url: string) => Effect.Effect<Uint8Array, E | StdError.StdError, R>;
|
|
27
|
+
/**
|
|
28
|
+
* Maps transport failures while preserving standard HTTP failure codes.
|
|
29
|
+
*
|
|
30
|
+
* @category http
|
|
31
|
+
* @since 1.0.0
|
|
32
|
+
*/
|
|
33
|
+
export declare const requestError: (url: string, error: unknown) => StdError.StdError;
|
|
34
|
+
/**
|
|
35
|
+
* Looks up a response header without depending on transport normalization.
|
|
36
|
+
*
|
|
37
|
+
* @category http
|
|
38
|
+
* @since 1.0.0
|
|
39
|
+
*/
|
|
40
|
+
export declare const header: (headers: Readonly<Record<string, string | undefined>>, name: string) => string | undefined;
|
|
41
|
+
/**
|
|
42
|
+
* Seconds; the runtime caps valid overrides at 120.
|
|
43
|
+
*
|
|
44
|
+
* @category http
|
|
45
|
+
* @since 1.0.0
|
|
46
|
+
*/
|
|
47
|
+
export declare const Timeout: Schema.Number;
|
|
48
|
+
/**
|
|
49
|
+
* Bounds the entire request and body read with one timer. Interruption reaches
|
|
50
|
+
* HttpClient.execute and response.stream so Effect aborts the transport and
|
|
51
|
+
* finalizes the body reader before returning the timeout failure.
|
|
52
|
+
* `timeoutError` preserves a tool's own timeout message while sharing the
|
|
53
|
+
* validation, duration cap, and interruption behavior.
|
|
54
|
+
*
|
|
55
|
+
* @category http
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*/
|
|
58
|
+
export declare const withDeadline: <A, E, R>(effect: Effect.Effect<A, E, R>, url: string, timeout?: number, timeoutError?: (seconds: number) => StdError.StdError) => Effect.Effect<A, E | StdError.StdError, R>;
|
|
59
|
+
/**
|
|
60
|
+
* Keeps the head of rendered response text within the shared output budget and
|
|
61
|
+
* discloses the cut.
|
|
62
|
+
*
|
|
63
|
+
* @since 1.0.0
|
|
64
|
+
* @private
|
|
65
|
+
*/
|
|
66
|
+
export declare const capOutput: (text: string) => {
|
|
67
|
+
readonly text: string;
|
|
68
|
+
readonly truncated: boolean;
|
|
69
|
+
readonly notice?: string;
|
|
70
|
+
};
|
|
71
|
+
/** Shared response contract for the GET and POST tools.
|
|
72
|
+
* @since 1.0.0
|
|
73
|
+
* @private
|
|
74
|
+
*/
|
|
75
|
+
export declare const Response: Schema.Struct<{
|
|
76
|
+
readonly status: Schema.Number;
|
|
77
|
+
readonly body: Schema.String;
|
|
78
|
+
readonly truncated: Schema.Boolean;
|
|
79
|
+
readonly notice: Schema.optional<Schema.String>;
|
|
80
|
+
}>;
|
|
81
|
+
/** Validate, execute, and render one bounded HTTP request.
|
|
82
|
+
* @since 1.0.0
|
|
83
|
+
* @private
|
|
84
|
+
*/
|
|
85
|
+
export declare const execute: (input: {
|
|
86
|
+
readonly url: string;
|
|
87
|
+
readonly headers?: Readonly<Record<string, string>> | undefined;
|
|
88
|
+
readonly timeout?: number | undefined;
|
|
89
|
+
}, makeRequest: (url: string) => HttpClientRequest.HttpClientRequest) => Effect.Effect<{
|
|
90
|
+
readonly status: number;
|
|
91
|
+
readonly body: string;
|
|
92
|
+
readonly truncated: boolean;
|
|
93
|
+
readonly notice?: string | undefined;
|
|
94
|
+
}, StdError.StdError, GrantStore | HttpClient.HttpClient>;
|
|
95
|
+
//# sourceMappingURL=Http.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Http.d.ts","sourceRoot":"","sources":["../../../src/internal/Http.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAC3D,OAAO,KAAK,UAAU,MAAM,2BAA2B,CAAA;AACvD,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,iBAAiB,MAAM,wCAAwC,CAAA;AAC3E,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAK1C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAkB,CAAA;AAOjD;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,CAAC,EAAE,CAAC,EAC9B,QAAQ,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC,EACvC,KAAK,MAAM,KACV,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CA6BlD,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,KAAK,MAAM,EAAE,OAAO,OAAO,KAAG,QAAQ,CAAC,QAIhE,CAAA;AAEJ;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAGrG,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,OAAO,eAAkE,CAAA;AAEtF;;;;;;;;;GASG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,EAAE,CAAC,EAAE,CAAC,EAClC,QAAQ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAC9B,KAAK,MAAM,EACX,gBAAY,EACZ,eAAe,CAAC,OAAO,EAAE,MAAM,KAAK,QAAQ,CAAC,QAAQ,KACpD,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAsB3C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,GACpB,MAAM,MAAM,KACX;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAShF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ;;;;;EAKnB,CAAA;AAEF;;;GAGG;AACH,eAAO,MAAM,OAAO;kBAEF,MAAM;uBACD,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,GAAG,SAAS;uBAC5C,MAAM,GAAG,SAAS;sBAEpB,MAAM,KAAK,iBAAiB,CAAC,iBAAiB;;;;;yDA2BjE,CAAA"}
|
|
@@ -0,0 +1,153 @@
|
|
|
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 Http_exports = {};
|
|
30
|
+
__export(Http_exports, {
|
|
31
|
+
MAX_RESPONSE_BYTES: () => MAX_RESPONSE_BYTES,
|
|
32
|
+
Response: () => Response,
|
|
33
|
+
Timeout: () => Timeout,
|
|
34
|
+
capOutput: () => capOutput,
|
|
35
|
+
execute: () => execute,
|
|
36
|
+
header: () => header,
|
|
37
|
+
readBounded: () => readBounded,
|
|
38
|
+
requestError: () => requestError,
|
|
39
|
+
withDeadline: () => withDeadline
|
|
40
|
+
});
|
|
41
|
+
module.exports = __toCommonJS(Http_exports);
|
|
42
|
+
var HttpClient = __toESM(require("@smthrs/kernel/HttpClient"), 1);
|
|
43
|
+
var Effect = __toESM(require("effect/Effect"), 1);
|
|
44
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
45
|
+
var Stream = __toESM(require("effect/Stream"), 1);
|
|
46
|
+
var HttpClientRequest = __toESM(require("effect/unstable/http/HttpClientRequest"), 1);
|
|
47
|
+
var StdError = __toESM(require("../StdError.js"), 1);
|
|
48
|
+
var import_HttpNetwork = require("./HttpNetwork.js");
|
|
49
|
+
var import_Text = require("./Text.js");
|
|
50
|
+
var import_Url = require("./Url.js");
|
|
51
|
+
const MAX_RESPONSE_BYTES = 5 * 1024 * 1024;
|
|
52
|
+
const readBounded = (stream, url) => Stream.runFoldEffect(
|
|
53
|
+
stream,
|
|
54
|
+
() => ({ chunks: [], size: 0 }),
|
|
55
|
+
(state, chunk) => {
|
|
56
|
+
const size = state.size + chunk.byteLength;
|
|
57
|
+
if (size > MAX_RESPONSE_BYTES) {
|
|
58
|
+
return Effect.fail(
|
|
59
|
+
new StdError.StdError({
|
|
60
|
+
code: "response_too_large",
|
|
61
|
+
message: "Response exceeds the 5 MiB limit",
|
|
62
|
+
path: url
|
|
63
|
+
})
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
state.chunks.push(chunk);
|
|
67
|
+
state.size = size;
|
|
68
|
+
return Effect.succeed(state);
|
|
69
|
+
}
|
|
70
|
+
).pipe(
|
|
71
|
+
Effect.map((state) => {
|
|
72
|
+
const output = new Uint8Array(state.size);
|
|
73
|
+
let offset = 0;
|
|
74
|
+
for (const chunk of state.chunks) {
|
|
75
|
+
output.set(chunk, offset);
|
|
76
|
+
offset += chunk.byteLength;
|
|
77
|
+
}
|
|
78
|
+
return output;
|
|
79
|
+
})
|
|
80
|
+
);
|
|
81
|
+
const requestError = (url, error) => error instanceof StdError.StdError ? error : (0, import_HttpNetwork.refusal)(error) ?? new StdError.StdError({
|
|
82
|
+
code: "request_failed",
|
|
83
|
+
message: `Request failed: ${url}${error instanceof Error ? ` (${error.message})` : ""}`
|
|
84
|
+
});
|
|
85
|
+
const header = (headers, name) => {
|
|
86
|
+
const lower = name.toLowerCase();
|
|
87
|
+
return Object.entries(headers).find(([key]) => key.toLowerCase() === lower)?.[1];
|
|
88
|
+
};
|
|
89
|
+
const Timeout = Schema.Number.check(Schema.isFinite(), Schema.isGreaterThan(0));
|
|
90
|
+
const withDeadline = (effect, url, timeout = 30, timeoutError) => {
|
|
91
|
+
if (!Schema.is(Timeout)(timeout)) {
|
|
92
|
+
return Effect.fail(
|
|
93
|
+
new StdError.StdError({
|
|
94
|
+
code: "invalid_input",
|
|
95
|
+
message: "Timeout must be a finite number greater than zero seconds",
|
|
96
|
+
path: url
|
|
97
|
+
})
|
|
98
|
+
);
|
|
99
|
+
}
|
|
100
|
+
const seconds = Math.min(timeout, 120);
|
|
101
|
+
return Effect.timeoutOrElse(effect, {
|
|
102
|
+
duration: seconds * 1e3,
|
|
103
|
+
orElse: () => Effect.fail(
|
|
104
|
+
timeoutError?.(seconds) ?? new StdError.StdError({
|
|
105
|
+
code: "timeout",
|
|
106
|
+
message: `Request timed out after ${seconds} seconds`,
|
|
107
|
+
path: url
|
|
108
|
+
})
|
|
109
|
+
)
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
const capOutput = (text) => {
|
|
113
|
+
const rendered = (0, import_Text.truncateBytes)(text, import_Text.MAX_OUTPUT_BYTES, { keep: "head" });
|
|
114
|
+
return {
|
|
115
|
+
text: rendered.text,
|
|
116
|
+
truncated: rendered.truncated,
|
|
117
|
+
...rendered.truncated ? { notice: (0, import_Text.notice)("bytes", rendered.keptBytes, rendered.keptBytes + rendered.droppedBytes) } : {}
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
const Response = Schema.Struct({
|
|
121
|
+
status: Schema.Number.annotate({ description: "HTTP status code, including error statuses" }),
|
|
122
|
+
body: Schema.String.annotate({ description: "Response body as text" }),
|
|
123
|
+
truncated: Schema.Boolean.annotate({ description: "Whether the body exceeded the display budget" }),
|
|
124
|
+
notice: Schema.optional(Schema.String.annotate({ description: "Truncation disclosure" }))
|
|
125
|
+
});
|
|
126
|
+
const execute = Effect.fn("Http.execute")(function* (input, makeRequest) {
|
|
127
|
+
const url = (0, import_Url.parseHttpUrl)(input.url);
|
|
128
|
+
if (url === void 0) {
|
|
129
|
+
return yield* Effect.fail(
|
|
130
|
+
new StdError.StdError({
|
|
131
|
+
code: "invalid_input",
|
|
132
|
+
message: `URL must use http or https without user information: ${input.url}`,
|
|
133
|
+
path: input.url
|
|
134
|
+
})
|
|
135
|
+
);
|
|
136
|
+
}
|
|
137
|
+
const client = (0, import_HttpNetwork.guarded)(yield* HttpClient.HttpClient);
|
|
138
|
+
const request = makeRequest(url.toString());
|
|
139
|
+
const { status, bytes } = yield* withDeadline(
|
|
140
|
+
Effect.gen(function* () {
|
|
141
|
+
const response = yield* client.execute(
|
|
142
|
+
input.headers === void 0 ? request : HttpClientRequest.setHeaders(request, input.headers)
|
|
143
|
+
);
|
|
144
|
+
const bytes2 = yield* readBounded(response.stream, input.url);
|
|
145
|
+
return { status: response.status, bytes: bytes2 };
|
|
146
|
+
}).pipe(Effect.mapError((error) => requestError(input.url, error))),
|
|
147
|
+
input.url,
|
|
148
|
+
input.timeout
|
|
149
|
+
);
|
|
150
|
+
const { text, ...disclosure } = capOutput(new TextDecoder().decode(bytes));
|
|
151
|
+
return { status, body: text, ...disclosure };
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=Http.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Http.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shared HTTP response limits, error mapping, and request deadlines.\n *\n * @since 1.0.0\n */\n\nimport type { GrantStore } from \"@smthrs/kernel/GrantStore\"\nimport * as HttpClient from \"@smthrs/kernel/HttpClient\"\nimport * as Effect from \"effect/Effect\"\nimport * as Schema from \"effect/Schema\"\nimport * as Stream from \"effect/Stream\"\nimport * as HttpClientRequest from \"effect/unstable/http/HttpClientRequest\"\nimport * as StdError from \"../StdError.ts\"\nimport { guarded, refusal } from \"./HttpNetwork.ts\"\nimport { MAX_OUTPUT_BYTES, notice, truncateBytes } from \"./Text.ts\"\nimport { parseHttpUrl } from \"./Url.ts\"\n\n/**\n * Maximum captured response bytes before decoding.\n *\n * @category http\n * @since 1.0.0\n */\nexport const MAX_RESPONSE_BYTES = 5 * 1024 * 1024\n\ninterface BodyState {\n readonly chunks: Array<Uint8Array>\n size: number\n}\n\n/**\n * Reads a response up to the shared byte limit and finalizes the stream on failure.\n *\n * @category http\n * @since 1.0.0\n */\nexport const readBounded = <E, R>(\n stream: Stream.Stream<Uint8Array, E, R>,\n url: string\n): Effect.Effect<Uint8Array, E | StdError.StdError, R> =>\n Stream.runFoldEffect(\n stream,\n (): BodyState => ({ chunks: [], size: 0 }),\n (state, chunk) => {\n const size = state.size + chunk.byteLength\n if (size > MAX_RESPONSE_BYTES) {\n return Effect.fail(\n new StdError.StdError({\n code: \"response_too_large\",\n message: \"Response exceeds the 5 MiB limit\",\n path: url\n })\n )\n }\n state.chunks.push(chunk)\n state.size = size\n return Effect.succeed(state)\n }\n ).pipe(\n Effect.map((state) => {\n const output = new Uint8Array(state.size)\n let offset = 0\n for (const chunk of state.chunks) {\n output.set(chunk, offset)\n offset += chunk.byteLength\n }\n return output\n })\n )\n\n/**\n * Maps transport failures while preserving standard HTTP failure codes.\n *\n * @category http\n * @since 1.0.0\n */\nexport const requestError = (url: string, error: unknown): StdError.StdError =>\n error instanceof StdError.StdError ? error : refusal(error) ?? new StdError.StdError({\n code: \"request_failed\",\n message: `Request failed: ${url}${error instanceof Error ? ` (${error.message})` : \"\"}`\n })\n\n/**\n * Looks up a response header without depending on transport normalization.\n *\n * @category http\n * @since 1.0.0\n */\nexport const header = (headers: Readonly<Record<string, string | undefined>>, name: string): string | undefined => {\n const lower = name.toLowerCase()\n return Object.entries(headers).find(([key]) => key.toLowerCase() === lower)?.[1]\n}\n\n/**\n * Seconds; the runtime caps valid overrides at 120.\n *\n * @category http\n * @since 1.0.0\n */\nexport const Timeout = Schema.Number.check(Schema.isFinite(), Schema.isGreaterThan(0))\n\n/**\n * Bounds the entire request and body read with one timer. Interruption reaches\n * HttpClient.execute and response.stream so Effect aborts the transport and\n * finalizes the body reader before returning the timeout failure.\n * `timeoutError` preserves a tool's own timeout message while sharing the\n * validation, duration cap, and interruption behavior.\n *\n * @category http\n * @since 1.0.0\n */\nexport const withDeadline = <A, E, R>(\n effect: Effect.Effect<A, E, R>,\n url: string,\n timeout = 30,\n timeoutError?: (seconds: number) => StdError.StdError\n): Effect.Effect<A, E | StdError.StdError, R> => {\n if (!Schema.is(Timeout)(timeout)) {\n return Effect.fail(\n new StdError.StdError({\n code: \"invalid_input\",\n message: \"Timeout must be a finite number greater than zero seconds\",\n path: url\n })\n )\n }\n const seconds = Math.min(timeout, 120)\n return Effect.timeoutOrElse(effect, {\n duration: seconds * 1_000,\n orElse: () =>\n Effect.fail(\n timeoutError?.(seconds) ?? new StdError.StdError({\n code: \"timeout\",\n message: `Request timed out after ${seconds} seconds`,\n path: url\n })\n )\n })\n}\n\n/**\n * Keeps the head of rendered response text within the shared output budget and\n * discloses the cut.\n *\n * @since 1.0.0\n * @private\n */\nexport const capOutput = (\n text: string\n): { readonly text: string; readonly truncated: boolean; readonly notice?: string } => {\n const rendered = truncateBytes(text, MAX_OUTPUT_BYTES, { keep: \"head\" })\n return {\n text: rendered.text,\n truncated: rendered.truncated,\n ...(rendered.truncated\n ? { notice: notice(\"bytes\", rendered.keptBytes, rendered.keptBytes + rendered.droppedBytes) }\n : {})\n }\n}\n\n/** Shared response contract for the GET and POST tools.\n * @since 1.0.0\n * @private\n */\nexport const Response = Schema.Struct({\n status: Schema.Number.annotate({ description: \"HTTP status code, including error statuses\" }),\n body: Schema.String.annotate({ description: \"Response body as text\" }),\n truncated: Schema.Boolean.annotate({ description: \"Whether the body exceeded the display budget\" }),\n notice: Schema.optional(Schema.String.annotate({ description: \"Truncation disclosure\" }))\n})\n\n/** Validate, execute, and render one bounded HTTP request.\n * @since 1.0.0\n * @private\n */\nexport const execute = Effect.fn(\"Http.execute\")(function*(\n input: {\n readonly url: string\n readonly headers?: Readonly<Record<string, string>> | undefined\n readonly timeout?: number | undefined\n },\n makeRequest: (url: string) => HttpClientRequest.HttpClientRequest\n): Effect.fn.Return<typeof Response.Type, StdError.StdError, HttpClient.HttpClient | GrantStore> {\n const url = parseHttpUrl(input.url)\n if (url === undefined) {\n return yield* Effect.fail(\n new StdError.StdError({\n code: \"invalid_input\",\n message: `URL must use http or https without user information: ${input.url}`,\n path: input.url\n })\n )\n }\n const client = guarded(yield* HttpClient.HttpClient)\n const request = makeRequest(url.toString())\n const { status, bytes } = yield* withDeadline(\n Effect.gen(function*() {\n const response = yield* client.execute(\n input.headers === undefined ? request : HttpClientRequest.setHeaders(request, input.headers)\n )\n const bytes = yield* readBounded(response.stream, input.url)\n return { status: response.status, bytes }\n }).pipe(Effect.mapError((error) => requestError(input.url, error))),\n input.url,\n input.timeout\n )\n const { text, ...disclosure } = capOutput(new TextDecoder().decode(bytes))\n return { status, body: text, ...disclosure }\n})\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["bytes"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Destination policy shared by the web tools, including every redirect hop.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import { GrantStore } from "@smthrs/kernel/GrantStore";
|
|
7
|
+
import { Context, Effect } from "effect";
|
|
8
|
+
import * as HttpClient from "effect/unstable/http/HttpClient";
|
|
9
|
+
import * as HttpClientError from "effect/unstable/http/HttpClientError";
|
|
10
|
+
import * as StdError from "../StdError.ts";
|
|
11
|
+
/** Resolver seam: all addresses must be public before an unprivileged request.
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
* @private
|
|
14
|
+
*/
|
|
15
|
+
export declare const ResolveHost: Context.Reference<(hostname: string) => Effect.Effect<ReadonlyArray<string>, unknown>>;
|
|
16
|
+
/** Decorates the supplied client before following redirects through the guard.
|
|
17
|
+
* The transport must honor manual redirects, as required by the kernel client.
|
|
18
|
+
* @since 1.0.0
|
|
19
|
+
* @private
|
|
20
|
+
*/
|
|
21
|
+
export declare const guarded: (client: HttpClient.HttpClient, follow?: boolean) => HttpClient.HttpClient.With<HttpClientError.HttpClientError, GrantStore>;
|
|
22
|
+
/** Recovers the typed refusal carried through Effect's HTTP error channel.
|
|
23
|
+
* @since 1.0.0
|
|
24
|
+
* @private
|
|
25
|
+
*/
|
|
26
|
+
export declare const refusal: (error: unknown) => StdError.StdError | undefined;
|
|
27
|
+
//# sourceMappingURL=HttpNetwork.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HttpNetwork.d.ts","sourceRoot":"","sources":["../../../src/internal/HttpNetwork.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AAOtD,OAAO,EAAE,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAA;AAEhD,OAAO,KAAK,UAAU,MAAM,iCAAiC,CAAA;AAC7D,OAAO,KAAK,eAAe,MAAM,sCAAsC,CAAA;AAGvE,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG1C;;;GAGG;AACH,eAAO,MAAM,WAAW,+BACX,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAInE,CAAA;AAwEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,GAClB,QAAQ,UAAU,CAAC,UAAU,EAC7B,gBAAa,KACZ,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,UAAU,CAuBxE,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,OAAO,GAAI,OAAO,OAAO,KAAG,QAAQ,CAAC,QAAQ,GAAG,SAW5D,CAAA"}
|