@smthrs/std 0.0.0-stage → 1.0.0-rc.3
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 +304 -0
- package/dist/cjs/Bash.d.ts.map +1 -0
- package/dist/cjs/Bash.js +321 -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 +98 -0
- package/dist/cjs/internal/GitWorktree.d.ts.map +1 -0
- package/dist/cjs/internal/GitWorktree.js +270 -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 +304 -0
- package/dist/esm/Bash.d.ts.map +1 -0
- package/dist/esm/Bash.js +469 -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 +98 -0
- package/dist/esm/internal/GitWorktree.d.ts.map +1 -0
- package/dist/esm/internal/GitWorktree.js +345 -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 +549 -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 +473 -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,108 @@
|
|
|
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 CodexText_exports = {};
|
|
20
|
+
__export(CodexText_exports, {
|
|
21
|
+
approxBytesForTokens: () => approxBytesForTokens,
|
|
22
|
+
approxTokenCount: () => approxTokenCount,
|
|
23
|
+
approxTokensFromByteCount: () => approxTokensFromByteCount,
|
|
24
|
+
byteLength: () => byteLength,
|
|
25
|
+
formatExecOutputForModel: () => formatExecOutputForModel,
|
|
26
|
+
truncateMiddleChars: () => truncateMiddleChars,
|
|
27
|
+
truncateMiddleWithTokenBudget: () => truncateMiddleWithTokenBudget
|
|
28
|
+
});
|
|
29
|
+
module.exports = __toCommonJS(CodexText_exports);
|
|
30
|
+
const APPROX_BYTES_PER_TOKEN = 4;
|
|
31
|
+
const encoder = new TextEncoder();
|
|
32
|
+
const decoder = new TextDecoder();
|
|
33
|
+
const byteLength = (text) => encoder.encode(text).byteLength;
|
|
34
|
+
const approxTokenCount = (text) => Math.floor((byteLength(text) + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN);
|
|
35
|
+
const approxBytesForTokens = (tokens) => tokens * APPROX_BYTES_PER_TOKEN;
|
|
36
|
+
const approxTokensFromByteCount = (bytes) => Math.floor((bytes + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN);
|
|
37
|
+
const formatTruncationMarker = (useTokens, removedCount) => useTokens ? `\u2026${removedCount} tokens truncated\u2026` : `\u2026${removedCount} chars truncated\u2026`;
|
|
38
|
+
const isContinuation = (byte) => (byte & 192) === 128;
|
|
39
|
+
const boundaryAtOrBefore = (bytes, offset) => {
|
|
40
|
+
let at = Math.min(offset, bytes.byteLength);
|
|
41
|
+
while (at > 0 && at < bytes.byteLength && isContinuation(bytes[at])) at--;
|
|
42
|
+
return at;
|
|
43
|
+
};
|
|
44
|
+
const boundaryAtOrAfter = (bytes, offset) => {
|
|
45
|
+
let at = Math.max(offset, 0);
|
|
46
|
+
while (at < bytes.byteLength && isContinuation(bytes[at])) at++;
|
|
47
|
+
return at;
|
|
48
|
+
};
|
|
49
|
+
const splitString = (s, beginningBytes, endBytes) => {
|
|
50
|
+
const bytes = encoder.encode(s);
|
|
51
|
+
const tailStartTarget = Math.max(bytes.byteLength - endBytes, 0);
|
|
52
|
+
const prefixEnd = boundaryAtOrBefore(bytes, beginningBytes);
|
|
53
|
+
const suffixStart = boundaryAtOrAfter(bytes, Math.max(tailStartTarget, prefixEnd));
|
|
54
|
+
let removedChars = 0;
|
|
55
|
+
for (let at = prefixEnd; at < suffixStart; at++) if (!isContinuation(bytes[at])) removedChars++;
|
|
56
|
+
return {
|
|
57
|
+
removedChars,
|
|
58
|
+
before: decoder.decode(bytes.subarray(0, prefixEnd)),
|
|
59
|
+
after: decoder.decode(bytes.subarray(suffixStart))
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
const truncateWithByteEstimate = (s, maxBytes, useTokens) => {
|
|
63
|
+
if (s === "") return "";
|
|
64
|
+
const totalBytes = byteLength(s);
|
|
65
|
+
if (maxBytes === 0) {
|
|
66
|
+
return formatTruncationMarker(useTokens, useTokens ? approxTokensFromByteCount(totalBytes) : [...s].length);
|
|
67
|
+
}
|
|
68
|
+
if (totalBytes <= maxBytes) return s;
|
|
69
|
+
const leftBudget = Math.floor(maxBytes / 2);
|
|
70
|
+
const rightBudget = maxBytes - leftBudget;
|
|
71
|
+
const { after, before, removedChars } = splitString(s, leftBudget, rightBudget);
|
|
72
|
+
const marker = formatTruncationMarker(
|
|
73
|
+
useTokens,
|
|
74
|
+
useTokens ? approxTokensFromByteCount(Math.max(totalBytes - maxBytes, 0)) : removedChars
|
|
75
|
+
);
|
|
76
|
+
return `${before}${marker}${after}`;
|
|
77
|
+
};
|
|
78
|
+
const truncateMiddleChars = (s, maxBytes) => truncateWithByteEstimate(s, maxBytes, false);
|
|
79
|
+
const truncateMiddleWithTokenBudget = (s, maxTokens) => {
|
|
80
|
+
if (s === "") return { text: "", originalTokenCount: void 0 };
|
|
81
|
+
if (maxTokens > 0 && byteLength(s) <= approxBytesForTokens(maxTokens)) {
|
|
82
|
+
return { text: s, originalTokenCount: void 0 };
|
|
83
|
+
}
|
|
84
|
+
const truncated = truncateWithByteEstimate(s, approxBytesForTokens(maxTokens), true);
|
|
85
|
+
if (truncated === s) return { text: s, originalTokenCount: void 0 };
|
|
86
|
+
return { text: truncated, originalTokenCount: approxTokenCount(s) };
|
|
87
|
+
};
|
|
88
|
+
const countLines = (content) => {
|
|
89
|
+
if (content === "") return 0;
|
|
90
|
+
const parts = content.split("\n");
|
|
91
|
+
return parts[parts.length - 1] === "" ? parts.length - 1 : parts.length;
|
|
92
|
+
};
|
|
93
|
+
const formatExecOutputForModel = (options) => {
|
|
94
|
+
const content = options.timedOutAfterMs === void 0 ? options.output : `command timed out after ${options.timedOutAfterMs} milliseconds
|
|
95
|
+
${options.output}`;
|
|
96
|
+
const durationSeconds = Math.round(options.durationSeconds * 10) / 10;
|
|
97
|
+
const totalLines = countLines(content);
|
|
98
|
+
const formatted = truncateMiddleWithTokenBudget(content, options.maxOutputTokens).text;
|
|
99
|
+
const sections = [
|
|
100
|
+
`Exit code: ${options.exitCode}`,
|
|
101
|
+
`Wall time: ${durationSeconds} seconds`
|
|
102
|
+
];
|
|
103
|
+
if (totalLines !== countLines(formatted)) sections.push(`Total output lines: ${totalLines}`);
|
|
104
|
+
sections.push("Output:");
|
|
105
|
+
sections.push(formatted);
|
|
106
|
+
return sections.join("\n");
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=CodexText.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/CodexText.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Faithful port of Codex CLI output truncation.\n *\n * Mirrors `codex-rs/utils/string/src/truncate.rs` and\n * `codex-rs/utils/output-truncation/src/lib.rs`: middle truncation on UTF-8\n * boundaries with a `\u2026{n} tokens truncated\u2026` marker and a 4-bytes-per-token\n * estimate, so ChatGPT-family models see the exact shapes they were\n * posttrained on.\n *\n * @since 1.0.0\n */\n\nconst APPROX_BYTES_PER_TOKEN = 4\n\nconst encoder = new TextEncoder()\nconst decoder = new TextDecoder()\n\n/**\n * UTF-8 byte length of a string.\n *\n * @since 1.0.0\n * @private\n */\nexport const byteLength = (text: string): number => encoder.encode(text).byteLength\n\n/**\n * Approximate token count: ceil(utf8Bytes / 4).\n *\n * @since 1.0.0\n * @private\n */\nexport const approxTokenCount = (text: string): number =>\n Math.floor((byteLength(text) + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN)\n\n/**\n * Approximate byte budget for a token budget.\n *\n * @since 1.0.0\n * @private\n */\nexport const approxBytesForTokens = (tokens: number): number => tokens * APPROX_BYTES_PER_TOKEN\n\n/**\n * Approximate tokens represented by a byte count: ceil(bytes / 4).\n *\n * @since 1.0.0\n * @private\n */\nexport const approxTokensFromByteCount = (bytes: number): number =>\n Math.floor((bytes + APPROX_BYTES_PER_TOKEN - 1) / APPROX_BYTES_PER_TOKEN)\n\nconst formatTruncationMarker = (useTokens: boolean, removedCount: number): string =>\n useTokens ? `\u2026${removedCount} tokens truncated\u2026` : `\u2026${removedCount} chars truncated\u2026`\n\ninterface Split {\n readonly removedChars: number\n readonly before: string\n readonly after: string\n}\n\n/** A UTF-8 continuation byte is `10xxxxxx`; every other byte starts a character. */\nconst isContinuation = (byte: number): boolean => (byte & 0b1100_0000) === 0b1000_0000\n\n/** The last character boundary at or before `offset`. */\nconst boundaryAtOrBefore = (bytes: Uint8Array, offset: number): number => {\n let at = Math.min(offset, bytes.byteLength)\n while (at > 0 && at < bytes.byteLength && isContinuation(bytes[at]!)) at--\n return at\n}\n\n/** The first character boundary at or after `offset`. */\nconst boundaryAtOrAfter = (bytes: Uint8Array, offset: number): number => {\n let at = Math.max(offset, 0)\n while (at < bytes.byteLength && isContinuation(bytes[at]!)) at++\n return at\n}\n\n/**\n * Splits `s` into the head that fits `beginningBytes` and the tail that fits\n * `endBytes`, both cut on UTF-8 character boundaries, and counts the characters\n * dropped between them.\n *\n * The boundaries are read off the encoded bytes rather than by re-encoding one\n * character at a time: a per-character `TextEncoder.encode` costs about two\n * microseconds, which is nineteen seconds for the eight megabytes a bounded\n * capture can hand this function.\n */\nconst splitString = (s: string, beginningBytes: number, endBytes: number): Split => {\n const bytes = encoder.encode(s)\n const tailStartTarget = Math.max(bytes.byteLength - endBytes, 0)\n const prefixEnd = boundaryAtOrBefore(bytes, beginningBytes)\n const suffixStart = boundaryAtOrAfter(bytes, Math.max(tailStartTarget, prefixEnd))\n let removedChars = 0\n for (let at = prefixEnd; at < suffixStart; at++) if (!isContinuation(bytes[at]!)) removedChars++\n return {\n removedChars,\n before: decoder.decode(bytes.subarray(0, prefixEnd)),\n after: decoder.decode(bytes.subarray(suffixStart))\n }\n}\n\nconst truncateWithByteEstimate = (s: string, maxBytes: number, useTokens: boolean): string => {\n if (s === \"\") return \"\"\n const totalBytes = byteLength(s)\n if (maxBytes === 0) {\n return formatTruncationMarker(useTokens, useTokens ? approxTokensFromByteCount(totalBytes) : [...s].length)\n }\n if (totalBytes <= maxBytes) return s\n const leftBudget = Math.floor(maxBytes / 2)\n const rightBudget = maxBytes - leftBudget\n const { after, before, removedChars } = splitString(s, leftBudget, rightBudget)\n const marker = formatTruncationMarker(\n useTokens,\n useTokens ? approxTokensFromByteCount(Math.max(totalBytes - maxBytes, 0)) : removedChars\n )\n return `${before}${marker}${after}`\n}\n\n/**\n * Middle-truncate to a byte budget with a char-count marker.\n *\n * @since 1.0.0\n * @private\n */\nexport const truncateMiddleChars = (s: string, maxBytes: number): string => truncateWithByteEstimate(s, maxBytes, false)\n\n/**\n * Middle-truncate to an approximate token budget, preserving the beginning\n * and end. Returns the possibly truncated string and the original token\n * count when truncation occurred.\n *\n * @since 1.0.0\n * @private\n */\nexport const truncateMiddleWithTokenBudget = (\n s: string,\n maxTokens: number\n): { readonly text: string; readonly originalTokenCount: number | undefined } => {\n if (s === \"\") return { text: \"\", originalTokenCount: undefined }\n if (maxTokens > 0 && byteLength(s) <= approxBytesForTokens(maxTokens)) {\n return { text: s, originalTokenCount: undefined }\n }\n const truncated = truncateWithByteEstimate(s, approxBytesForTokens(maxTokens), true)\n if (truncated === s) return { text: s, originalTokenCount: undefined }\n return { text: truncated, originalTokenCount: approxTokenCount(s) }\n}\n\nconst countLines = (content: string): number => {\n if (content === \"\") return 0\n const parts = content.split(\"\\n\")\n return parts[parts.length - 1] === \"\" ? parts.length - 1 : parts.length\n}\n\n/**\n * Codex `format_exec_output_for_model`: exit code, wall time, optional line\n * count disclosure, then the (possibly middle-truncated) output.\n *\n * @since 1.0.0\n * @private\n */\nexport const formatExecOutputForModel = (options: {\n readonly output: string\n readonly exitCode: number\n readonly durationSeconds: number\n readonly maxOutputTokens: number\n readonly timedOutAfterMs?: number | undefined\n}): string => {\n const content = options.timedOutAfterMs === undefined\n ? options.output\n : `command timed out after ${options.timedOutAfterMs} milliseconds\\n${options.output}`\n const durationSeconds = Math.round(options.durationSeconds * 10) / 10\n const totalLines = countLines(content)\n const formatted = truncateMiddleWithTokenBudget(content, options.maxOutputTokens).text\n const sections = [\n `Exit code: ${options.exitCode}`,\n `Wall time: ${durationSeconds} seconds`\n ]\n if (totalLines !== countLines(formatted)) sections.push(`Total output lines: ${totalLines}`)\n sections.push(\"Output:\")\n sections.push(formatted)\n return sections.join(\"\\n\")\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAYA,MAAM,yBAAyB;AAE/B,MAAM,UAAU,IAAI,YAAY;AAChC,MAAM,UAAU,IAAI,YAAY;AAQzB,MAAM,aAAa,CAAC,SAAyB,QAAQ,OAAO,IAAI,EAAE;AAQlE,MAAM,mBAAmB,CAAC,SAC/B,KAAK,OAAO,WAAW,IAAI,IAAI,yBAAyB,KAAK,sBAAsB;AAQ9E,MAAM,uBAAuB,CAAC,WAA2B,SAAS;AAQlE,MAAM,4BAA4B,CAAC,UACxC,KAAK,OAAO,QAAQ,yBAAyB,KAAK,sBAAsB;AAE1E,MAAM,yBAAyB,CAAC,WAAoB,iBAClD,YAAY,SAAI,YAAY,4BAAuB,SAAI,YAAY;AASrE,MAAM,iBAAiB,CAAC,UAA2B,OAAO,SAAiB;AAG3E,MAAM,qBAAqB,CAAC,OAAmB,WAA2B;AACxE,MAAI,KAAK,KAAK,IAAI,QAAQ,MAAM,UAAU;AAC1C,SAAO,KAAK,KAAK,KAAK,MAAM,cAAc,eAAe,MAAM,EAAE,CAAE,EAAG;AACtE,SAAO;AACT;AAGA,MAAM,oBAAoB,CAAC,OAAmB,WAA2B;AACvE,MAAI,KAAK,KAAK,IAAI,QAAQ,CAAC;AAC3B,SAAO,KAAK,MAAM,cAAc,eAAe,MAAM,EAAE,CAAE,EAAG;AAC5D,SAAO;AACT;AAYA,MAAM,cAAc,CAAC,GAAW,gBAAwB,aAA4B;AAClF,QAAM,QAAQ,QAAQ,OAAO,CAAC;AAC9B,QAAM,kBAAkB,KAAK,IAAI,MAAM,aAAa,UAAU,CAAC;AAC/D,QAAM,YAAY,mBAAmB,OAAO,cAAc;AAC1D,QAAM,cAAc,kBAAkB,OAAO,KAAK,IAAI,iBAAiB,SAAS,CAAC;AACjF,MAAI,eAAe;AACnB,WAAS,KAAK,WAAW,KAAK,aAAa,KAAM,KAAI,CAAC,eAAe,MAAM,EAAE,CAAE,EAAG;AAClF,SAAO;AAAA,IACL;AAAA,IACA,QAAQ,QAAQ,OAAO,MAAM,SAAS,GAAG,SAAS,CAAC;AAAA,IACnD,OAAO,QAAQ,OAAO,MAAM,SAAS,WAAW,CAAC;AAAA,EACnD;AACF;AAEA,MAAM,2BAA2B,CAAC,GAAW,UAAkB,cAA+B;AAC5F,MAAI,MAAM,GAAI,QAAO;AACrB,QAAM,aAAa,WAAW,CAAC;AAC/B,MAAI,aAAa,GAAG;AAClB,WAAO,uBAAuB,WAAW,YAAY,0BAA0B,UAAU,IAAI,CAAC,GAAG,CAAC,EAAE,MAAM;AAAA,EAC5G;AACA,MAAI,cAAc,SAAU,QAAO;AACnC,QAAM,aAAa,KAAK,MAAM,WAAW,CAAC;AAC1C,QAAM,cAAc,WAAW;AAC/B,QAAM,EAAE,OAAO,QAAQ,aAAa,IAAI,YAAY,GAAG,YAAY,WAAW;AAC9E,QAAM,SAAS;AAAA,IACb;AAAA,IACA,YAAY,0BAA0B,KAAK,IAAI,aAAa,UAAU,CAAC,CAAC,IAAI;AAAA,EAC9E;AACA,SAAO,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK;AACnC;AAQO,MAAM,sBAAsB,CAAC,GAAW,aAA6B,yBAAyB,GAAG,UAAU,KAAK;AAUhH,MAAM,gCAAgC,CAC3C,GACA,cAC+E;AAC/E,MAAI,MAAM,GAAI,QAAO,EAAE,MAAM,IAAI,oBAAoB,OAAU;AAC/D,MAAI,YAAY,KAAK,WAAW,CAAC,KAAK,qBAAqB,SAAS,GAAG;AACrE,WAAO,EAAE,MAAM,GAAG,oBAAoB,OAAU;AAAA,EAClD;AACA,QAAM,YAAY,yBAAyB,GAAG,qBAAqB,SAAS,GAAG,IAAI;AACnF,MAAI,cAAc,EAAG,QAAO,EAAE,MAAM,GAAG,oBAAoB,OAAU;AACrE,SAAO,EAAE,MAAM,WAAW,oBAAoB,iBAAiB,CAAC,EAAE;AACpE;AAEA,MAAM,aAAa,CAAC,YAA4B;AAC9C,MAAI,YAAY,GAAI,QAAO;AAC3B,QAAM,QAAQ,QAAQ,MAAM,IAAI;AAChC,SAAO,MAAM,MAAM,SAAS,CAAC,MAAM,KAAK,MAAM,SAAS,IAAI,MAAM;AACnE;AASO,MAAM,2BAA2B,CAAC,YAM3B;AACZ,QAAM,UAAU,QAAQ,oBAAoB,SACxC,QAAQ,SACR,2BAA2B,QAAQ,eAAe;AAAA,EAAkB,QAAQ,MAAM;AACtF,QAAM,kBAAkB,KAAK,MAAM,QAAQ,kBAAkB,EAAE,IAAI;AACnE,QAAM,aAAa,WAAW,OAAO;AACrC,QAAM,YAAY,8BAA8B,SAAS,QAAQ,eAAe,EAAE;AAClF,QAAM,WAAW;AAAA,IACf,cAAc,QAAQ,QAAQ;AAAA,IAC9B,cAAc,eAAe;AAAA,EAC/B;AACA,MAAI,eAAe,WAAW,SAAS,EAAG,UAAS,KAAK,uBAAuB,UAAU,EAAE;AAC3F,WAAS,KAAK,SAAS;AACvB,WAAS,KAAK,SAAS;AACvB,SAAO,SAAS,KAAK,IAAI;AAC3B;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared declaration helpers for the standard flows.
|
|
3
|
+
*
|
|
4
|
+
* @since 1.0.0
|
|
5
|
+
*/
|
|
6
|
+
import type * as Capability from "@smthrs/capability/Capability";
|
|
7
|
+
import * as Effects from "@smthrs/core/Effects";
|
|
8
|
+
/**
|
|
9
|
+
* Options accepted by {@link envelope}.
|
|
10
|
+
*
|
|
11
|
+
* @category models
|
|
12
|
+
* @since 1.0.0
|
|
13
|
+
*/
|
|
14
|
+
export interface EnvelopeOptions {
|
|
15
|
+
readonly tier: "sealed" | "compensable" | "irreversible";
|
|
16
|
+
readonly mode: "hermetic" | "expected";
|
|
17
|
+
readonly reads: Iterable<string>;
|
|
18
|
+
readonly writes: Iterable<string>;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Builds a deterministic effect declaration for a standard flow.
|
|
22
|
+
*
|
|
23
|
+
* Every standard flow serializes on conflict: the library owns no lane
|
|
24
|
+
* partitioning of its own, so the conservative choice is the safe one.
|
|
25
|
+
*
|
|
26
|
+
* @category constructors
|
|
27
|
+
* @since 1.0.0
|
|
28
|
+
*/
|
|
29
|
+
export declare const envelope: (options: EnvelopeOptions) => Effects.Declaration;
|
|
30
|
+
/**
|
|
31
|
+
* Formats a capability request as the `action:resource` string carried on a
|
|
32
|
+
* flow declaration.
|
|
33
|
+
*
|
|
34
|
+
* @category constructors
|
|
35
|
+
* @since 1.0.0
|
|
36
|
+
*/
|
|
37
|
+
export declare const capability: (action: Capability.Action, resource: string) => string;
|
|
38
|
+
/**
|
|
39
|
+
* The read glob covering everything under one search root.
|
|
40
|
+
*
|
|
41
|
+
* `glob` and `grep` narrow their conservative `/**` declaration to the root the
|
|
42
|
+
* call actually names, and a declaration that disagreed between the two would
|
|
43
|
+
* make the same search reserve different paths depending on which flow ran it.
|
|
44
|
+
*
|
|
45
|
+
* @category constructors
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
*/
|
|
48
|
+
export declare const rootSubtree: (root: string) => string;
|
|
49
|
+
//# sourceMappingURL=Declaration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Declaration.d.ts","sourceRoot":"","sources":["../../../src/internal/Declaration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,KAAK,UAAU,MAAM,+BAA+B,CAAA;AAChE,OAAO,KAAK,OAAO,MAAM,sBAAsB,CAAA;AAE/C;;;;;GAKG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,aAAa,GAAG,cAAc,CAAA;IACxD,QAAQ,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,CAAA;IACtC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;IAChC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAA;CAClC;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,QAAQ,GAAI,SAAS,eAAe,KAAG,OAAO,CAAC,WAOxD,CAAA;AAEJ;;;;;;GAMG;AACH,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,CAAC,MAAM,EAAE,UAAU,MAAM,KAAG,MAAiC,CAAA;AAE1G;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAAiE,CAAA"}
|
|
@@ -0,0 +1,46 @@
|
|
|
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 Declaration_exports = {};
|
|
30
|
+
__export(Declaration_exports, {
|
|
31
|
+
capability: () => capability,
|
|
32
|
+
envelope: () => envelope,
|
|
33
|
+
rootSubtree: () => rootSubtree
|
|
34
|
+
});
|
|
35
|
+
module.exports = __toCommonJS(Declaration_exports);
|
|
36
|
+
var Effects = __toESM(require("@smthrs/core/Effects"), 1);
|
|
37
|
+
const envelope = (options) => Effects.make({
|
|
38
|
+
reads: options.reads,
|
|
39
|
+
writes: options.writes,
|
|
40
|
+
mode: options.mode,
|
|
41
|
+
onConflict: "serialize",
|
|
42
|
+
tier: options.tier
|
|
43
|
+
});
|
|
44
|
+
const capability = (action, resource) => `${action}:${resource}`;
|
|
45
|
+
const rootSubtree = (root) => root === "/" ? "/**" : `${root.replace(/\/+$/, "")}/**`;
|
|
46
|
+
//# sourceMappingURL=Declaration.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Declaration.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Shared declaration helpers for the standard flows.\n *\n * @since 1.0.0\n */\n\nimport type * as Capability from \"@smthrs/capability/Capability\"\nimport * as Effects from \"@smthrs/core/Effects\"\n\n/**\n * Options accepted by {@link envelope}.\n *\n * @category models\n * @since 1.0.0\n */\nexport interface EnvelopeOptions {\n readonly tier: \"sealed\" | \"compensable\" | \"irreversible\"\n readonly mode: \"hermetic\" | \"expected\"\n readonly reads: Iterable<string>\n readonly writes: Iterable<string>\n}\n\n/**\n * Builds a deterministic effect declaration for a standard flow.\n *\n * Every standard flow serializes on conflict: the library owns no lane\n * partitioning of its own, so the conservative choice is the safe one.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const envelope = (options: EnvelopeOptions): Effects.Declaration =>\n Effects.make({\n reads: options.reads,\n writes: options.writes,\n mode: options.mode,\n onConflict: \"serialize\",\n tier: options.tier\n })\n\n/**\n * Formats a capability request as the `action:resource` string carried on a\n * flow declaration.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const capability = (action: Capability.Action, resource: string): string => `${action}:${resource}`\n\n/**\n * The read glob covering everything under one search root.\n *\n * `glob` and `grep` narrow their conservative `/**` declaration to the root the\n * call actually names, and a declaration that disagreed between the two would\n * make the same search reserve different paths depending on which flow ran it.\n *\n * @category constructors\n * @since 1.0.0\n */\nexport const rootSubtree = (root: string): string => root === \"/\" ? \"/**\" : `${root.replace(/\\/+$/, \"\")}/**`\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA,cAAyB;AAwBlB,MAAM,WAAW,CAAC,YACvB,QAAQ,KAAK;AAAA,EACX,OAAO,QAAQ;AAAA,EACf,QAAQ,QAAQ;AAAA,EAChB,MAAM,QAAQ;AAAA,EACd,YAAY;AAAA,EACZ,MAAM,QAAQ;AAChB,CAAC;AASI,MAAM,aAAa,CAAC,QAA2B,aAA6B,GAAG,MAAM,IAAI,QAAQ;AAYjG,MAAM,cAAc,CAAC,SAAyB,SAAS,MAAM,QAAQ,GAAG,KAAK,QAAQ,QAAQ,EAAE,CAAC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Keeps a bound language server in step with the files the mutation flows
|
|
3
|
+
* write, and reads back the errors an edit leaves.
|
|
4
|
+
*
|
|
5
|
+
* The server is optional: a host that binds no `LanguageServer` edits files
|
|
6
|
+
* exactly as before, and a server that fails or times out never fails the
|
|
7
|
+
* write that already happened.
|
|
8
|
+
*
|
|
9
|
+
* @since 1.0.0
|
|
10
|
+
*/
|
|
11
|
+
import * as Effect from "effect/Effect";
|
|
12
|
+
import * as Schema from "effect/Schema";
|
|
13
|
+
import * as LanguageServer from "../LanguageServer.ts";
|
|
14
|
+
/**
|
|
15
|
+
* Most errors attached to one result.
|
|
16
|
+
*
|
|
17
|
+
* @category internal
|
|
18
|
+
* @since 1.0.0
|
|
19
|
+
*/
|
|
20
|
+
export declare const MAX_ERRORS = 20;
|
|
21
|
+
/**
|
|
22
|
+
* One error-severity diagnostic, at its 1-based position.
|
|
23
|
+
*
|
|
24
|
+
* @category internal
|
|
25
|
+
* @since 1.0.0
|
|
26
|
+
*/
|
|
27
|
+
export declare const Problem: Schema.Struct<{
|
|
28
|
+
readonly line: Schema.Number;
|
|
29
|
+
readonly character: Schema.Number;
|
|
30
|
+
readonly message: Schema.String;
|
|
31
|
+
}>;
|
|
32
|
+
/**
|
|
33
|
+
* A decoded {@link Problem}.
|
|
34
|
+
*
|
|
35
|
+
* @category internal
|
|
36
|
+
* @since 1.0.0
|
|
37
|
+
*/
|
|
38
|
+
export type Problem = typeof Problem.Type;
|
|
39
|
+
/**
|
|
40
|
+
* The error-severity items of a document diagnostic report, 1-based.
|
|
41
|
+
*
|
|
42
|
+
* @category internal
|
|
43
|
+
* @since 1.0.0
|
|
44
|
+
*/
|
|
45
|
+
export declare const errors: (report: unknown) => ReadonlyArray<Problem>;
|
|
46
|
+
/**
|
|
47
|
+
* Sends a written file's new text to the bound server, if any. Succeeds with
|
|
48
|
+
* the server that took it.
|
|
49
|
+
*
|
|
50
|
+
* @category internal
|
|
51
|
+
* @since 1.0.0
|
|
52
|
+
*/
|
|
53
|
+
export declare const sync: (path: string, text: string) => Effect.Effect<LanguageServer.LanguageServer | undefined>;
|
|
54
|
+
/**
|
|
55
|
+
* Tells the bound server, if any, that a file is gone.
|
|
56
|
+
*
|
|
57
|
+
* @category internal
|
|
58
|
+
* @since 1.0.0
|
|
59
|
+
*/
|
|
60
|
+
export declare const close: (path: string) => Effect.Effect<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Tells the bound server, if any, to re-read every file it has open, after
|
|
63
|
+
* something other than the mutation flows may have changed them.
|
|
64
|
+
*
|
|
65
|
+
* @category internal
|
|
66
|
+
* @since 1.0.0
|
|
67
|
+
*/
|
|
68
|
+
export declare const refresh: Effect.Effect<void>;
|
|
69
|
+
/**
|
|
70
|
+
* The errors `server` reports for `path`, or `undefined` when it could not
|
|
71
|
+
* answer.
|
|
72
|
+
*
|
|
73
|
+
* @category internal
|
|
74
|
+
* @since 1.0.0
|
|
75
|
+
*/
|
|
76
|
+
export declare const errorsOf: (server: LanguageServer.LanguageServer, path: string) => Effect.Effect<ReadonlyArray<Problem> | undefined>;
|
|
77
|
+
//# sourceMappingURL=Diagnostics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Diagnostics.d.ts","sourceRoot":"","sources":["../../../src/internal/Diagnostics.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,cAAc,MAAM,sBAAsB,CAAA;AAEtD;;;;;GAKG;AACH,eAAO,MAAM,UAAU,KAAK,CAAA;AAE5B;;;;;GAKG;AACH,eAAO,MAAM,OAAO;;;;EAIlB,CAAA;AAEF;;;;;GAKG;AACH,MAAM,MAAM,OAAO,GAAG,OAAO,OAAO,CAAC,IAAI,CAAA;AAOzC;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,QAAQ,OAAO,KAAG,aAAa,CAAC,OAAO,CAe7D,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,IAAI,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,cAAc,GAAG,SAAS,CAUtG,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAMpD,CAAA;AAEH;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAKvC,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GACnB,QAAQ,cAAc,CAAC,cAAc,EACrC,MAAM,MAAM,KACX,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,SAAS,CAIhD,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
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 Diagnostics_exports = {};
|
|
30
|
+
__export(Diagnostics_exports, {
|
|
31
|
+
MAX_ERRORS: () => MAX_ERRORS,
|
|
32
|
+
Problem: () => Problem,
|
|
33
|
+
close: () => close,
|
|
34
|
+
errors: () => errors,
|
|
35
|
+
errorsOf: () => errorsOf,
|
|
36
|
+
refresh: () => refresh,
|
|
37
|
+
sync: () => sync
|
|
38
|
+
});
|
|
39
|
+
module.exports = __toCommonJS(Diagnostics_exports);
|
|
40
|
+
var Effect = __toESM(require("effect/Effect"), 1);
|
|
41
|
+
var Option = __toESM(require("effect/Option"), 1);
|
|
42
|
+
var Schema = __toESM(require("effect/Schema"), 1);
|
|
43
|
+
var LanguageServer = __toESM(require("../LanguageServer.js"), 1);
|
|
44
|
+
const MAX_ERRORS = 20;
|
|
45
|
+
const Problem = Schema.Struct({
|
|
46
|
+
line: Schema.Number.annotate({ description: "1-based line" }),
|
|
47
|
+
character: Schema.Number.annotate({ description: "1-based character" }),
|
|
48
|
+
message: Schema.String
|
|
49
|
+
});
|
|
50
|
+
const record = (value) => typeof value === "object" && value !== null && !Array.isArray(value) ? value : void 0;
|
|
51
|
+
const errors = (report) => {
|
|
52
|
+
const items = record(report)?.items;
|
|
53
|
+
if (!Array.isArray(items)) return [];
|
|
54
|
+
const found = [];
|
|
55
|
+
for (const item of items) {
|
|
56
|
+
const diagnostic = record(item);
|
|
57
|
+
const start = record(record(diagnostic?.range)?.start);
|
|
58
|
+
if (diagnostic?.severity !== 1 || typeof diagnostic.message !== "string" || typeof start?.line !== "number" || typeof start.character !== "number") continue;
|
|
59
|
+
found.push({ line: start.line + 1, character: start.character + 1, message: diagnostic.message });
|
|
60
|
+
if (found.length === MAX_ERRORS) break;
|
|
61
|
+
}
|
|
62
|
+
return found;
|
|
63
|
+
};
|
|
64
|
+
const sync = (path, text) => Effect.serviceOption(LanguageServer.LanguageServer).pipe(
|
|
65
|
+
Effect.flatMap(Option.match({
|
|
66
|
+
onNone: () => Effect.succeed(void 0),
|
|
67
|
+
onSome: (server) => server.sync(path, text).pipe(
|
|
68
|
+
Effect.as(server),
|
|
69
|
+
Effect.orElseSucceed(() => void 0)
|
|
70
|
+
)
|
|
71
|
+
}))
|
|
72
|
+
);
|
|
73
|
+
const close = (path) => Effect.serviceOption(LanguageServer.LanguageServer).pipe(
|
|
74
|
+
Effect.flatMap(Option.match({
|
|
75
|
+
onNone: () => Effect.void,
|
|
76
|
+
onSome: (server) => server.close(path).pipe(Effect.ignore)
|
|
77
|
+
}))
|
|
78
|
+
);
|
|
79
|
+
const refresh = Effect.serviceOption(LanguageServer.LanguageServer).pipe(
|
|
80
|
+
Effect.flatMap(Option.match({
|
|
81
|
+
onNone: () => Effect.void,
|
|
82
|
+
onSome: (server) => server.refresh.pipe(Effect.ignore)
|
|
83
|
+
}))
|
|
84
|
+
);
|
|
85
|
+
const errorsOf = (server, path) => server.diagnostics(path).pipe(
|
|
86
|
+
Effect.map(errors),
|
|
87
|
+
Effect.orElseSucceed(() => void 0)
|
|
88
|
+
);
|
|
89
|
+
//# sourceMappingURL=Diagnostics.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/internal/Diagnostics.ts"],
|
|
4
|
+
"sourcesContent": ["/**\n * Keeps a bound language server in step with the files the mutation flows\n * write, and reads back the errors an edit leaves.\n *\n * The server is optional: a host that binds no `LanguageServer` edits files\n * exactly as before, and a server that fails or times out never fails the\n * write that already happened.\n *\n * @since 1.0.0\n */\n\nimport * as Effect from \"effect/Effect\"\nimport * as Option from \"effect/Option\"\nimport * as Schema from \"effect/Schema\"\nimport * as LanguageServer from \"../LanguageServer.ts\"\n\n/**\n * Most errors attached to one result.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const MAX_ERRORS = 20\n\n/**\n * One error-severity diagnostic, at its 1-based position.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const Problem = Schema.Struct({\n line: Schema.Number.annotate({ description: \"1-based line\" }),\n character: Schema.Number.annotate({ description: \"1-based character\" }),\n message: Schema.String\n})\n\n/**\n * A decoded {@link Problem}.\n *\n * @category internal\n * @since 1.0.0\n */\nexport type Problem = typeof Problem.Type\n\nconst record = (value: unknown): Readonly<Record<string, unknown>> | undefined =>\n typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? value as Readonly<Record<string, unknown>>\n : undefined\n\n/**\n * The error-severity items of a document diagnostic report, 1-based.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const errors = (report: unknown): ReadonlyArray<Problem> => {\n const items = record(report)?.items\n if (!Array.isArray(items)) return []\n const found: Array<Problem> = []\n for (const item of items) {\n const diagnostic = record(item)\n const start = record(record(diagnostic?.range)?.start)\n if (\n diagnostic?.severity !== 1 || typeof diagnostic.message !== \"string\" ||\n typeof start?.line !== \"number\" || typeof start.character !== \"number\"\n ) continue\n found.push({ line: start.line + 1, character: start.character + 1, message: diagnostic.message })\n if (found.length === MAX_ERRORS) break\n }\n return found\n}\n\n/**\n * Sends a written file's new text to the bound server, if any. Succeeds with\n * the server that took it.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const sync = (path: string, text: string): Effect.Effect<LanguageServer.LanguageServer | undefined> =>\n Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.succeed(undefined),\n onSome: (server) =>\n server.sync(path, text).pipe(\n Effect.as(server),\n Effect.orElseSucceed(() => undefined)\n )\n }))\n )\n\n/**\n * Tells the bound server, if any, that a file is gone.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const close = (path: string): Effect.Effect<void> =>\n Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (server) => server.close(path).pipe(Effect.ignore)\n }))\n )\n\n/**\n * Tells the bound server, if any, to re-read every file it has open, after\n * something other than the mutation flows may have changed them.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const refresh: Effect.Effect<void> = Effect.serviceOption(LanguageServer.LanguageServer).pipe(\n Effect.flatMap(Option.match({\n onNone: () => Effect.void,\n onSome: (server) => server.refresh.pipe(Effect.ignore)\n }))\n)\n\n/**\n * The errors `server` reports for `path`, or `undefined` when it could not\n * answer.\n *\n * @category internal\n * @since 1.0.0\n */\nexport const errorsOf = (\n server: LanguageServer.LanguageServer,\n path: string\n): Effect.Effect<ReadonlyArray<Problem> | undefined> =>\n server.diagnostics(path).pipe(\n Effect.map(errors),\n Effect.orElseSucceed(() => undefined)\n )\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAWA,aAAwB;AACxB,aAAwB;AACxB,aAAwB;AACxB,qBAAgC;AAQzB,MAAM,aAAa;AAQnB,MAAM,UAAU,OAAO,OAAO;AAAA,EACnC,MAAM,OAAO,OAAO,SAAS,EAAE,aAAa,eAAe,CAAC;AAAA,EAC5D,WAAW,OAAO,OAAO,SAAS,EAAE,aAAa,oBAAoB,CAAC;AAAA,EACtE,SAAS,OAAO;AAClB,CAAC;AAUD,MAAM,SAAS,CAAC,UACd,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK,IAC/D,QACA;AAQC,MAAM,SAAS,CAAC,WAA4C;AACjE,QAAM,QAAQ,OAAO,MAAM,GAAG;AAC9B,MAAI,CAAC,MAAM,QAAQ,KAAK,EAAG,QAAO,CAAC;AACnC,QAAM,QAAwB,CAAC;AAC/B,aAAW,QAAQ,OAAO;AACxB,UAAM,aAAa,OAAO,IAAI;AAC9B,UAAM,QAAQ,OAAO,OAAO,YAAY,KAAK,GAAG,KAAK;AACrD,QACE,YAAY,aAAa,KAAK,OAAO,WAAW,YAAY,YAC5D,OAAO,OAAO,SAAS,YAAY,OAAO,MAAM,cAAc,SAC9D;AACF,UAAM,KAAK,EAAE,MAAM,MAAM,OAAO,GAAG,WAAW,MAAM,YAAY,GAAG,SAAS,WAAW,QAAQ,CAAC;AAChG,QAAI,MAAM,WAAW,WAAY;AAAA,EACnC;AACA,SAAO;AACT;AASO,MAAM,OAAO,CAAC,MAAc,SACjC,OAAO,cAAc,eAAe,cAAc,EAAE;AAAA,EAClD,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC1B,QAAQ,MAAM,OAAO,QAAQ,MAAS;AAAA,IACtC,QAAQ,CAAC,WACP,OAAO,KAAK,MAAM,IAAI,EAAE;AAAA,MACtB,OAAO,GAAG,MAAM;AAAA,MAChB,OAAO,cAAc,MAAM,MAAS;AAAA,IACtC;AAAA,EACJ,CAAC,CAAC;AACJ;AAQK,MAAM,QAAQ,CAAC,SACpB,OAAO,cAAc,eAAe,cAAc,EAAE;AAAA,EAClD,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC1B,QAAQ,MAAM,OAAO;AAAA,IACrB,QAAQ,CAAC,WAAW,OAAO,MAAM,IAAI,EAAE,KAAK,OAAO,MAAM;AAAA,EAC3D,CAAC,CAAC;AACJ;AASK,MAAM,UAA+B,OAAO,cAAc,eAAe,cAAc,EAAE;AAAA,EAC9F,OAAO,QAAQ,OAAO,MAAM;AAAA,IAC1B,QAAQ,MAAM,OAAO;AAAA,IACrB,QAAQ,CAAC,WAAW,OAAO,QAAQ,KAAK,OAAO,MAAM;AAAA,EACvD,CAAC,CAAC;AACJ;AASO,MAAM,WAAW,CACtB,QACA,SAEA,OAAO,YAAY,IAAI,EAAE;AAAA,EACvB,OAAO,IAAI,MAAM;AAAA,EACjB,OAAO,cAAc,MAAM,MAAS;AACtC;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The hermetic pre-check: a lexical scan of shell text for the paths it names,
|
|
3
|
+
* and the refusal when one of them falls outside the declared envelope.
|
|
4
|
+
*
|
|
5
|
+
* The scan is fail-closed over explicit path tokens and nothing more. It
|
|
6
|
+
* cannot prove confinement — a shell can name a path no lexer sees, through a
|
|
7
|
+
* variable, a substitution, or a program that opens a file of its own — so a
|
|
8
|
+
* kernel or host sandbox must eventually enforce and report the complete read
|
|
9
|
+
* and write sets.
|
|
10
|
+
*
|
|
11
|
+
* It lives beside the flow rather than inside it because it is its own
|
|
12
|
+
* concept, with its own vocabulary (Access, PathReference) and its own
|
|
13
|
+
* security history: three independent bypasses, each sufficient on its own to
|
|
14
|
+
* defeat it, are closed here.
|
|
15
|
+
*
|
|
16
|
+
* @since 1.0.0
|
|
17
|
+
*/
|
|
18
|
+
import type * as Path from "@smthrs/kernel/Path";
|
|
19
|
+
import * as StdError from "../StdError.ts";
|
|
20
|
+
/**
|
|
21
|
+
* The filesystem envelope one invocation declared.
|
|
22
|
+
*
|
|
23
|
+
* Structural rather than the hermetic `Bash.Input` itself: the scan needs the
|
|
24
|
+
* three fields and none of the rest, and depending on the flow module would
|
|
25
|
+
* make the flow and its pre-check import each other.
|
|
26
|
+
*
|
|
27
|
+
* @category models
|
|
28
|
+
* @since 1.0.0
|
|
29
|
+
*/
|
|
30
|
+
export interface Envelope {
|
|
31
|
+
readonly cwd?: string | undefined;
|
|
32
|
+
readonly reads: ReadonlyArray<string>;
|
|
33
|
+
readonly writes: ReadonlyArray<string>;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* How a command touches a path it names.
|
|
37
|
+
*
|
|
38
|
+
* @category models
|
|
39
|
+
* @since 1.0.0
|
|
40
|
+
*/
|
|
41
|
+
export type Access = "read" | "write";
|
|
42
|
+
/**
|
|
43
|
+
* One path a command names, and how it touches it.
|
|
44
|
+
*
|
|
45
|
+
* @category models
|
|
46
|
+
* @since 1.0.0
|
|
47
|
+
*/
|
|
48
|
+
export interface PathReference {
|
|
49
|
+
readonly access: Access;
|
|
50
|
+
readonly value: string;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Every path token the shell text names, one segment at a time.
|
|
54
|
+
*
|
|
55
|
+
* @category pre-check
|
|
56
|
+
* @since 1.0.0
|
|
57
|
+
*/
|
|
58
|
+
export declare const commandReferences: (path: Path.Path, command: string) => ReadonlyArray<PathReference>;
|
|
59
|
+
/**
|
|
60
|
+
* The refusal shell text earns by naming a path outside its declared
|
|
61
|
+
* envelope, or `undefined` when every path it names is declared.
|
|
62
|
+
*
|
|
63
|
+
* @category pre-check
|
|
64
|
+
* @since 1.0.0
|
|
65
|
+
*/
|
|
66
|
+
export declare const outsideEnvelope: (input: Envelope, text: string, path: Path.Path) => StdError.StdError | undefined;
|
|
67
|
+
//# sourceMappingURL=EnvelopePrecheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EnvelopePrecheck.d.ts","sourceRoot":"","sources":["../../../src/internal/EnvelopePrecheck.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,KAAK,IAAI,MAAM,qBAAqB,CAAA;AAChD,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAG1C;;;;;;;;;GASG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;CACvC;AAED;;;;;GAKG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;AAErC;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAwFD;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,KAAG,aAAa,CAAC,aAAa,CAa/F,CAAA;AAmBD;;;;;;GAMG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,QAAQ,EACf,MAAM,MAAM,EACZ,MAAM,IAAI,CAAC,IAAI,KACd,QAAQ,CAAC,QAAQ,GAAG,SAwCtB,CAAA"}
|
|
@@ -0,0 +1,124 @@
|
|
|
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 EnvelopePrecheck_exports = {};
|
|
30
|
+
__export(EnvelopePrecheck_exports, {
|
|
31
|
+
commandReferences: () => commandReferences,
|
|
32
|
+
outsideEnvelope: () => outsideEnvelope
|
|
33
|
+
});
|
|
34
|
+
module.exports = __toCommonJS(EnvelopePrecheck_exports);
|
|
35
|
+
var StdError = __toESM(require("../StdError.js"), 1);
|
|
36
|
+
var import_Paths = require("./Paths.js");
|
|
37
|
+
const commandSeparators = /* @__PURE__ */ new Set(["&&", "||", ";", "|", "&", "\n"]);
|
|
38
|
+
const redirections = /* @__PURE__ */ new Set([">", ">>", "<", "<<"]);
|
|
39
|
+
const writeCommands = /* @__PURE__ */ new Set(["chmod", "chown", "mkdir", "rm", "rmdir", "tee", "touch", "truncate", "unlink"]);
|
|
40
|
+
const destinationCommands = /* @__PURE__ */ new Set(["cp", "install", "mv"]);
|
|
41
|
+
const prefixWrappers = /* @__PURE__ */ new Set(["env", "nice", "time", "sudo", "nohup", "xargs", "command", "exec"]);
|
|
42
|
+
const tokenize = (command) => command.match(/\n|>>|<<|&&|\|\||[<>;|&]|(?:"(?:\\.|[^"\\])*"|'[^']*'|[^\s<>;|&"']+)+/g) ?? [];
|
|
43
|
+
const unquote = (token) => {
|
|
44
|
+
const first = token[0];
|
|
45
|
+
const last = token[token.length - 1];
|
|
46
|
+
return token.length >= 2 && (first === "'" || first === '"') && last === first ? token.slice(1, -1) : token;
|
|
47
|
+
};
|
|
48
|
+
const pathValue = (token) => unquote(token).replace(/^\$\(+/, "").replace(/[),]+$/, "");
|
|
49
|
+
const isPathToken = (path, token) => token === "." || token === ".." || token.startsWith("./") || token.startsWith("../") || path.isAbsolute(token) || /^[A-Za-z]:[\\/]/.test(token) || token.includes("/");
|
|
50
|
+
const segmentReferences = (path, tokens) => {
|
|
51
|
+
const commentIndex = tokens.findIndex((token) => token.startsWith("#"));
|
|
52
|
+
const active = commentIndex === -1 ? tokens : tokens.slice(0, commentIndex);
|
|
53
|
+
const hasWrapper = active.some((token) => prefixWrappers.has(path.basename(pathValue(token))));
|
|
54
|
+
let commandIndex = active.findIndex(
|
|
55
|
+
(token) => !redirections.has(token) && !token.includes("=") && !prefixWrappers.has(path.basename(pathValue(token))) && !token.startsWith("-") && token !== ""
|
|
56
|
+
);
|
|
57
|
+
if (hasWrapper) {
|
|
58
|
+
const mutatingIndex = active.findIndex((token) => {
|
|
59
|
+
const command2 = path.basename(pathValue(token));
|
|
60
|
+
return writeCommands.has(command2) || destinationCommands.has(command2);
|
|
61
|
+
});
|
|
62
|
+
if (mutatingIndex !== -1) commandIndex = mutatingIndex;
|
|
63
|
+
}
|
|
64
|
+
if (commandIndex === -1) return [];
|
|
65
|
+
const command = path.basename(pathValue(active[commandIndex]));
|
|
66
|
+
const candidates = [];
|
|
67
|
+
for (let index = 0; index < active.length; index++) {
|
|
68
|
+
const token = active[index];
|
|
69
|
+
if (index === commandIndex || redirections.has(token) || token.startsWith("-")) continue;
|
|
70
|
+
const value = pathValue(token);
|
|
71
|
+
if (value !== "" && isPathToken(path, value)) candidates.push({ index, value });
|
|
72
|
+
}
|
|
73
|
+
const destinationIndex = destinationCommands.has(command) ? candidates[candidates.length - 1]?.index : void 0;
|
|
74
|
+
return candidates.map(({ index, value }) => {
|
|
75
|
+
const previous = active[index - 1];
|
|
76
|
+
const access = previous === ">" || previous === ">>" || writeCommands.has(command) || destinationIndex === index ? "write" : "read";
|
|
77
|
+
return { access, value };
|
|
78
|
+
});
|
|
79
|
+
};
|
|
80
|
+
const commandReferences = (path, command) => {
|
|
81
|
+
const references = [];
|
|
82
|
+
let segment = [];
|
|
83
|
+
for (const token of tokenize(command)) {
|
|
84
|
+
if (commandSeparators.has(token)) {
|
|
85
|
+
references.push(...segmentReferences(path, segment));
|
|
86
|
+
segment = [];
|
|
87
|
+
} else {
|
|
88
|
+
segment.push(token);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
references.push(...segmentReferences(path, segment));
|
|
92
|
+
return references;
|
|
93
|
+
};
|
|
94
|
+
const resolvePath = (path, cwd, value) => path.isAbsolute(value) ? path.normalize(value) : path.resolve(cwd, value);
|
|
95
|
+
const isDeclared = (path, cwd, declared, source) => (0, import_Paths.withinEnvelope)(
|
|
96
|
+
declared.map((entry) => resolvePath(path, cwd, entry)),
|
|
97
|
+
resolvePath(path, cwd, source)
|
|
98
|
+
);
|
|
99
|
+
const outsideEnvelope = (input, text, path) => {
|
|
100
|
+
const base = path.resolve(".");
|
|
101
|
+
const cwd = path.resolve(input.cwd ?? ".");
|
|
102
|
+
if (input.cwd !== void 0 && cwd !== base && !isDeclared(path, cwd, input.reads, cwd)) {
|
|
103
|
+
return new StdError.StdError({
|
|
104
|
+
code: "outside_declared_reads",
|
|
105
|
+
message: `Working directory is outside declared reads: ${cwd}`,
|
|
106
|
+
path: cwd
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
for (const reference of commandReferences(path, text)) {
|
|
110
|
+
const resolved = resolvePath(path, cwd, reference.value);
|
|
111
|
+
if (resolved.startsWith("/dev/")) continue;
|
|
112
|
+
const declared = reference.access === "write" ? input.writes : input.reads;
|
|
113
|
+
if (!isDeclared(path, cwd, declared, resolved)) {
|
|
114
|
+
const code = reference.access === "write" ? "outside_declared_writes" : "outside_declared_reads";
|
|
115
|
+
return new StdError.StdError({
|
|
116
|
+
code,
|
|
117
|
+
message: `Command path is outside declared ${reference.access}s: ${resolved}`,
|
|
118
|
+
path: resolved
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return void 0;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=EnvelopePrecheck.js.map
|