@vibe-agent-toolkit/utils 0.2.0-rc.10 → 0.2.0-rc.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. package/README.md +112 -10
  2. package/dist/archive/archive.d.ts +129 -0
  3. package/dist/archive/archive.d.ts.map +1 -0
  4. package/dist/archive/archive.js +223 -0
  5. package/dist/archive/archive.js.map +1 -0
  6. package/dist/archive/entries.d.ts +132 -0
  7. package/dist/archive/entries.d.ts.map +1 -0
  8. package/dist/archive/entries.js +223 -0
  9. package/dist/archive/entries.js.map +1 -0
  10. package/dist/archive/limits.d.ts +39 -0
  11. package/dist/archive/limits.d.ts.map +1 -0
  12. package/dist/archive/limits.js +59 -0
  13. package/dist/archive/limits.js.map +1 -0
  14. package/dist/archive/records.d.ts +14 -0
  15. package/dist/archive/records.d.ts.map +1 -0
  16. package/dist/archive/records.js +3 -0
  17. package/dist/archive/records.js.map +1 -0
  18. package/dist/archive/tar-reader.d.ts +18 -0
  19. package/dist/archive/tar-reader.d.ts.map +1 -0
  20. package/dist/archive/tar-reader.js +173 -0
  21. package/dist/archive/tar-reader.js.map +1 -0
  22. package/dist/archive/zip-reader.d.ts +76 -0
  23. package/dist/archive/zip-reader.d.ts.map +1 -0
  24. package/dist/archive/zip-reader.js +376 -0
  25. package/dist/archive/zip-reader.js.map +1 -0
  26. package/dist/archive.d.ts +14 -0
  27. package/dist/archive.d.ts.map +1 -0
  28. package/dist/archive.js +12 -0
  29. package/dist/archive.js.map +1 -0
  30. package/dist/asset-reference.d.ts +17 -1
  31. package/dist/asset-reference.d.ts.map +1 -1
  32. package/dist/asset-reference.js +31 -7
  33. package/dist/asset-reference.js.map +1 -1
  34. package/dist/dirent-kind.d.ts +13 -40
  35. package/dist/dirent-kind.d.ts.map +1 -1
  36. package/dist/dirent-kind.js +21 -69
  37. package/dist/dirent-kind.js.map +1 -1
  38. package/dist/entrypoint.d.ts +2 -2
  39. package/dist/entrypoint.d.ts.map +1 -1
  40. package/dist/entrypoint.js +4 -3
  41. package/dist/entrypoint.js.map +1 -1
  42. package/dist/env-flag.d.ts +13 -5
  43. package/dist/env-flag.d.ts.map +1 -1
  44. package/dist/env-flag.js +13 -5
  45. package/dist/env-flag.js.map +1 -1
  46. package/dist/errors/confirmed-absent.d.ts +41 -0
  47. package/dist/errors/confirmed-absent.d.ts.map +1 -0
  48. package/dist/errors/confirmed-absent.js +43 -0
  49. package/dist/errors/confirmed-absent.js.map +1 -0
  50. package/dist/errors/errno-table.d.ts +177 -0
  51. package/dist/errors/errno-table.d.ts.map +1 -0
  52. package/dist/errors/errno-table.js +343 -0
  53. package/dist/errors/errno-table.js.map +1 -0
  54. package/dist/errors/fs-boundary.d.ts +36 -0
  55. package/dist/errors/fs-boundary.d.ts.map +1 -0
  56. package/dist/errors/fs-boundary.js +121 -0
  57. package/dist/errors/fs-boundary.js.map +1 -0
  58. package/dist/errors/fs-fault.d.ts +176 -0
  59. package/dist/errors/fs-fault.d.ts.map +1 -0
  60. package/dist/errors/fs-fault.js +215 -0
  61. package/dist/errors/fs-fault.js.map +1 -0
  62. package/dist/errors/git-errno.d.ts +13 -0
  63. package/dist/errors/git-errno.d.ts.map +1 -0
  64. package/dist/errors/git-errno.js +45 -0
  65. package/dist/errors/git-errno.js.map +1 -0
  66. package/dist/errors/path-present.d.ts +72 -0
  67. package/dist/errors/path-present.d.ts.map +1 -0
  68. package/dist/errors/path-present.js +110 -0
  69. package/dist/errors/path-present.js.map +1 -0
  70. package/dist/errors/rag-index-empty.d.ts +16 -0
  71. package/dist/errors/rag-index-empty.d.ts.map +1 -0
  72. package/dist/errors/rag-index-empty.js +16 -0
  73. package/dist/errors/rag-index-empty.js.map +1 -0
  74. package/dist/errors/suppressed-faults.d.ts +34 -0
  75. package/dist/errors/suppressed-faults.d.ts.map +1 -0
  76. package/dist/errors/suppressed-faults.js +66 -0
  77. package/dist/errors/suppressed-faults.js.map +1 -0
  78. package/dist/file-crawler.d.ts +13 -18
  79. package/dist/file-crawler.d.ts.map +1 -1
  80. package/dist/file-crawler.js +140 -24
  81. package/dist/file-crawler.js.map +1 -1
  82. package/dist/fs-utils.d.ts +75 -50
  83. package/dist/fs-utils.d.ts.map +1 -1
  84. package/dist/fs-utils.js +148 -158
  85. package/dist/fs-utils.js.map +1 -1
  86. package/dist/fs.d.ts +5 -4
  87. package/dist/fs.d.ts.map +1 -1
  88. package/dist/fs.js +5 -4
  89. package/dist/fs.js.map +1 -1
  90. package/dist/git-snapshot.d.ts +25 -17
  91. package/dist/git-snapshot.d.ts.map +1 -1
  92. package/dist/git-snapshot.js +65 -11
  93. package/dist/git-snapshot.js.map +1 -1
  94. package/dist/git-tracker.d.ts +11 -3
  95. package/dist/git-tracker.d.ts.map +1 -1
  96. package/dist/git-tracker.js +29 -6
  97. package/dist/git-tracker.js.map +1 -1
  98. package/dist/git-utils.d.ts.map +1 -1
  99. package/dist/git-utils.js +7 -35
  100. package/dist/git-utils.js.map +1 -1
  101. package/dist/git.d.ts +1 -1
  102. package/dist/git.d.ts.map +1 -1
  103. package/dist/git.js +1 -1
  104. package/dist/git.js.map +1 -1
  105. package/dist/gitignore-checker.d.ts.map +1 -1
  106. package/dist/gitignore-checker.js +5 -4
  107. package/dist/gitignore-checker.js.map +1 -1
  108. package/dist/in-order.d.ts +93 -0
  109. package/dist/in-order.d.ts.map +1 -0
  110. package/dist/in-order.js +165 -0
  111. package/dist/in-order.js.map +1 -0
  112. package/dist/index.d.ts +20 -4
  113. package/dist/index.d.ts.map +1 -1
  114. package/dist/index.js +30 -4
  115. package/dist/index.js.map +1 -1
  116. package/dist/kill-process-tree.d.ts +43 -0
  117. package/dist/kill-process-tree.d.ts.map +1 -0
  118. package/dist/kill-process-tree.js +48 -0
  119. package/dist/kill-process-tree.js.map +1 -0
  120. package/dist/link-following.d.ts +115 -0
  121. package/dist/link-following.d.ts.map +1 -0
  122. package/dist/link-following.js +283 -0
  123. package/dist/link-following.js.map +1 -0
  124. package/dist/listing-refusal.d.ts +44 -0
  125. package/dist/listing-refusal.d.ts.map +1 -1
  126. package/dist/listing-refusal.js +79 -2
  127. package/dist/listing-refusal.js.map +1 -1
  128. package/dist/name-fold.d.ts +25 -0
  129. package/dist/name-fold.d.ts.map +1 -0
  130. package/dist/name-fold.js +40 -0
  131. package/dist/name-fold.js.map +1 -0
  132. package/dist/path-containment.d.ts +17 -0
  133. package/dist/path-containment.d.ts.map +1 -1
  134. package/dist/path-containment.js +28 -5
  135. package/dist/path-containment.js.map +1 -1
  136. package/dist/path-utils.d.ts +14 -17
  137. package/dist/path-utils.d.ts.map +1 -1
  138. package/dist/path-utils.js +37 -55
  139. package/dist/path-utils.js.map +1 -1
  140. package/dist/process.d.ts +2 -0
  141. package/dist/process.d.ts.map +1 -1
  142. package/dist/process.js +2 -0
  143. package/dist/process.js.map +1 -1
  144. package/dist/project-utils.d.ts.map +1 -1
  145. package/dist/project-utils.js +8 -9
  146. package/dist/project-utils.js.map +1 -1
  147. package/dist/safe-exec.d.ts +6 -2
  148. package/dist/safe-exec.d.ts.map +1 -1
  149. package/dist/safe-exec.js +1 -1
  150. package/dist/safe-exec.js.map +1 -1
  151. package/dist/skill-targets.d.ts.map +1 -1
  152. package/dist/skill-targets.js +3 -1
  153. package/dist/skill-targets.js.map +1 -1
  154. package/dist/skill-test/spawn-claude.d.ts +0 -15
  155. package/dist/skill-test/spawn-claude.d.ts.map +1 -1
  156. package/dist/skill-test/spawn-claude.js +11 -50
  157. package/dist/skill-test/spawn-claude.js.map +1 -1
  158. package/dist/special-file.d.ts +18 -0
  159. package/dist/special-file.d.ts.map +1 -0
  160. package/dist/special-file.js +21 -0
  161. package/dist/special-file.js.map +1 -0
  162. package/dist/terminating-signals.d.ts +129 -0
  163. package/dist/terminating-signals.d.ts.map +1 -0
  164. package/dist/terminating-signals.js +210 -0
  165. package/dist/terminating-signals.js.map +1 -0
  166. package/dist/test-helpers.d.ts +9 -5
  167. package/dist/test-helpers.d.ts.map +1 -1
  168. package/dist/test-helpers.js +18 -21
  169. package/dist/test-helpers.js.map +1 -1
  170. package/dist/test-scratch-guard.d.ts +34 -0
  171. package/dist/test-scratch-guard.d.ts.map +1 -0
  172. package/dist/test-scratch-guard.js +45 -0
  173. package/dist/test-scratch-guard.js.map +1 -0
  174. package/dist/testing/archive-fixtures.d.ts +147 -0
  175. package/dist/testing/archive-fixtures.d.ts.map +1 -0
  176. package/dist/testing/archive-fixtures.js +449 -0
  177. package/dist/testing/archive-fixtures.js.map +1 -0
  178. package/dist/testing/executables.d.ts +6 -0
  179. package/dist/testing/executables.d.ts.map +1 -1
  180. package/dist/testing/executables.js +20 -9
  181. package/dist/testing/executables.js.map +1 -1
  182. package/dist/testing/fault-fs-preload.d.ts +16 -0
  183. package/dist/testing/fault-fs-preload.d.ts.map +1 -0
  184. package/dist/testing/fault-fs-preload.js +22 -0
  185. package/dist/testing/fault-fs-preload.js.map +1 -0
  186. package/dist/testing/fault-fs.d.ts +115 -0
  187. package/dist/testing/fault-fs.d.ts.map +1 -0
  188. package/dist/testing/fault-fs.js +411 -0
  189. package/dist/testing/fault-fs.js.map +1 -0
  190. package/dist/testing/fault-spec.d.ts +83 -0
  191. package/dist/testing/fault-spec.d.ts.map +1 -0
  192. package/dist/testing/fault-spec.js +132 -0
  193. package/dist/testing/fault-spec.js.map +1 -0
  194. package/dist/testing/hostile-tree.d.ts.map +1 -1
  195. package/dist/testing/hostile-tree.js +3 -4
  196. package/dist/testing/hostile-tree.js.map +1 -1
  197. package/dist/testing/platform-gates.d.ts +8 -0
  198. package/dist/testing/platform-gates.d.ts.map +1 -1
  199. package/dist/testing/platform-gates.js +24 -0
  200. package/dist/testing/platform-gates.js.map +1 -1
  201. package/dist/testing/temp-dir.d.ts +31 -0
  202. package/dist/testing/temp-dir.d.ts.map +1 -1
  203. package/dist/testing/temp-dir.js +63 -0
  204. package/dist/testing/temp-dir.js.map +1 -1
  205. package/dist/testing/tier-timeout.d.ts +34 -0
  206. package/dist/testing/tier-timeout.d.ts.map +1 -0
  207. package/dist/testing/tier-timeout.js +45 -0
  208. package/dist/testing/tier-timeout.js.map +1 -0
  209. package/dist/testing/tree-snapshot.d.ts +71 -0
  210. package/dist/testing/tree-snapshot.d.ts.map +1 -0
  211. package/dist/testing/tree-snapshot.js +163 -0
  212. package/dist/testing/tree-snapshot.js.map +1 -0
  213. package/dist/testing.d.ts +6 -0
  214. package/dist/testing.d.ts.map +1 -1
  215. package/dist/testing.js +8 -1
  216. package/dist/testing.js.map +1 -1
  217. package/dist/text-content.d.ts +29 -0
  218. package/dist/text-content.d.ts.map +1 -1
  219. package/dist/text-content.js +64 -0
  220. package/dist/text-content.js.map +1 -1
  221. package/dist/text-file.d.ts +58 -6
  222. package/dist/text-file.d.ts.map +1 -1
  223. package/dist/text-file.js +111 -11
  224. package/dist/text-file.js.map +1 -1
  225. package/dist/text.d.ts +1 -1
  226. package/dist/text.d.ts.map +1 -1
  227. package/dist/text.js +1 -1
  228. package/dist/text.js.map +1 -1
  229. package/dist/timing-dump.d.ts.map +1 -1
  230. package/dist/timing-dump.js +2 -10
  231. package/dist/timing-dump.js.map +1 -1
  232. package/dist/tree-change/apply-decisions.d.ts +101 -0
  233. package/dist/tree-change/apply-decisions.d.ts.map +1 -0
  234. package/dist/tree-change/apply-decisions.js +139 -0
  235. package/dist/tree-change/apply-decisions.js.map +1 -0
  236. package/dist/tree-change/apply.d.ts +98 -0
  237. package/dist/tree-change/apply.d.ts.map +1 -0
  238. package/dist/tree-change/apply.js +364 -0
  239. package/dist/tree-change/apply.js.map +1 -0
  240. package/dist/tree-change/copy-decisions.d.ts +58 -0
  241. package/dist/tree-change/copy-decisions.d.ts.map +1 -0
  242. package/dist/tree-change/copy-decisions.js +66 -0
  243. package/dist/tree-change/copy-decisions.js.map +1 -0
  244. package/dist/tree-change/copy-tree.d.ts +125 -0
  245. package/dist/tree-change/copy-tree.d.ts.map +1 -0
  246. package/dist/tree-change/copy-tree.js +279 -0
  247. package/dist/tree-change/copy-tree.js.map +1 -0
  248. package/dist/tree-change/files.d.ts +167 -0
  249. package/dist/tree-change/files.d.ts.map +1 -0
  250. package/dist/tree-change/files.js +423 -0
  251. package/dist/tree-change/files.js.map +1 -0
  252. package/dist/tree-change/followed-walk.d.ts +54 -0
  253. package/dist/tree-change/followed-walk.d.ts.map +1 -0
  254. package/dist/tree-change/followed-walk.js +81 -0
  255. package/dist/tree-change/followed-walk.js.map +1 -0
  256. package/dist/tree-change/host-chain.d.ts +48 -0
  257. package/dist/tree-change/host-chain.d.ts.map +1 -0
  258. package/dist/tree-change/host-chain.js +85 -0
  259. package/dist/tree-change/host-chain.js.map +1 -0
  260. package/dist/tree-change/identity-compare.d.ts +61 -0
  261. package/dist/tree-change/identity-compare.d.ts.map +1 -0
  262. package/dist/tree-change/identity-compare.js +115 -0
  263. package/dist/tree-change/identity-compare.js.map +1 -0
  264. package/dist/tree-change/identity.d.ts +62 -0
  265. package/dist/tree-change/identity.d.ts.map +1 -0
  266. package/dist/tree-change/identity.js +152 -0
  267. package/dist/tree-change/identity.js.map +1 -0
  268. package/dist/tree-change/index.d.ts +24 -0
  269. package/dist/tree-change/index.d.ts.map +1 -0
  270. package/dist/tree-change/index.js +14 -0
  271. package/dist/tree-change/index.js.map +1 -0
  272. package/dist/tree-change/link-chain.d.ts +180 -0
  273. package/dist/tree-change/link-chain.d.ts.map +1 -0
  274. package/dist/tree-change/link-chain.js +377 -0
  275. package/dist/tree-change/link-chain.js.map +1 -0
  276. package/dist/tree-change/link-containment.d.ts +105 -0
  277. package/dist/tree-change/link-containment.d.ts.map +1 -0
  278. package/dist/tree-change/link-containment.js +196 -0
  279. package/dist/tree-change/link-containment.js.map +1 -0
  280. package/dist/tree-change/link-walk.d.ts +49 -0
  281. package/dist/tree-change/link-walk.d.ts.map +1 -0
  282. package/dist/tree-change/link-walk.js +69 -0
  283. package/dist/tree-change/link-walk.js.map +1 -0
  284. package/dist/tree-change/plan.d.ts +206 -0
  285. package/dist/tree-change/plan.d.ts.map +1 -0
  286. package/dist/tree-change/plan.js +320 -0
  287. package/dist/tree-change/plan.js.map +1 -0
  288. package/dist/tree-change/readable-tree.d.ts +44 -0
  289. package/dist/tree-change/readable-tree.d.ts.map +1 -0
  290. package/dist/tree-change/readable-tree.js +52 -0
  291. package/dist/tree-change/readable-tree.js.map +1 -0
  292. package/dist/tree-change/rollback-error.d.ts +29 -0
  293. package/dist/tree-change/rollback-error.d.ts.map +1 -0
  294. package/dist/tree-change/rollback-error.js +31 -0
  295. package/dist/tree-change/rollback-error.js.map +1 -0
  296. package/dist/tree-change/staging-names.d.ts +27 -0
  297. package/dist/tree-change/staging-names.d.ts.map +1 -0
  298. package/dist/tree-change/staging-names.js +40 -0
  299. package/dist/tree-change/staging-names.js.map +1 -0
  300. package/dist/tree-change/tree-walk.d.ts +81 -0
  301. package/dist/tree-change/tree-walk.d.ts.map +1 -0
  302. package/dist/tree-change/tree-walk.js +212 -0
  303. package/dist/tree-change/tree-walk.js.map +1 -0
  304. package/dist/win32-namespace.d.ts +24 -0
  305. package/dist/win32-namespace.d.ts.map +1 -0
  306. package/dist/win32-namespace.js +31 -0
  307. package/dist/win32-namespace.js.map +1 -0
  308. package/dist/yaml/surgical-yaml.d.ts +12 -3
  309. package/dist/yaml/surgical-yaml.d.ts.map +1 -1
  310. package/dist/yaml/surgical-yaml.js +16 -6
  311. package/dist/yaml/surgical-yaml.js.map +1 -1
  312. package/eslint/README.md +12 -4
  313. package/eslint/rules/fs-binding-scan.cjs +278 -0
  314. package/eslint/rules/no-adhoc-errno.cjs +364 -0
  315. package/eslint/rules/no-bare-symlink-in-tests.cjs +2 -3
  316. package/eslint/rules/no-blind-catch.cjs +1 -1
  317. package/eslint/rules/no-destructive-fs.cjs +359 -0
  318. package/eslint/rules/no-existssync.cjs +70 -0
  319. package/eslint/rules/no-fragile-entrypoint-guard.cjs +3 -2
  320. package/eslint/rules/no-link-following-fs.cjs +68 -0
  321. package/eslint/rules/no-literal-process-exit.cjs +96 -8
  322. package/eslint/rules/no-literal-test-timeout.cjs +214 -0
  323. package/eslint/rules/no-raw-signal-listener.cjs +224 -0
  324. package/eslint/rules/no-stdout-outside-writer.cjs +135 -0
  325. package/package.json +10 -2
  326. package/dist/errors/errno.d.ts +0 -51
  327. package/dist/errors/errno.d.ts.map +0 -1
  328. package/dist/errors/errno.js +0 -112
  329. package/dist/errors/errno.js.map +0 -1
  330. package/eslint/rules/no-fs-promises-cp.cjs +0 -43
package/dist/fs-utils.js CHANGED
@@ -1,29 +1,24 @@
1
1
  /**
2
2
  * Filesystem utilities
3
3
  */
4
- // ⚠️ The sync half is reached through the DEFAULT object (`nodeFs.existsSync`),
5
- // not as named imports, and that is load-bearing rather than stylistic. Node
6
- // snapshots a builtin's named ESM exports at import time, so `vi.spyOn(fs,
7
- // 'existsSync')` cannot see a call made through a named binding — the spy
8
- // attaches and counts zero, which reads exactly like "this function performs no
9
- // I/O". `pathSpellingFrom` and `realpathFrom` are guarded by precisely that
10
- // assertion (they must reach neither `readdir` nor this pair), so a "tidy-up"
11
- // back to named imports would silently disarm the guard. The async half below
12
- // already uses the default object for the same reason.
13
- import nodeFs from 'node:fs';
4
+ // ⚠️ Every fs call here is reached through a DEFAULT object (`fs.readdir`), and every
5
+ // link-following one through `link-following.ts`, which does the same: Node snapshots a
6
+ // builtin's named ESM exports at import time, so a `vi.spyOn` cannot see a call made through
7
+ // a named binding — the spy attaches and counts zero, which reads exactly like "this function
8
+ // performs no I/O". `pathSpellingFrom` and `realpathRowFrom` are guarded by precisely that
9
+ // assertion, so a "tidy-up" to named imports would silently disarm the guard.
14
10
  import fs from 'node:fs/promises';
15
11
  import path from 'node:path';
16
- import { promisify } from 'node:util';
17
- import { FollowedWalk } from './dirent-kind.js';
18
- import { isFilesystemAccessError } from './errors/errno.js';
19
- import { VatError } from './errors/vat-error.js';
20
- import { isUnderRoot } from './path-containment.js';
12
+ import { fsFaultOf, isRetryableShortageError, isUnresolvableLinkError } from './errors/errno-table.js';
13
+ import { linkResolutionFault } from './errors/fs-fault.js';
14
+ import { everyInOrder } from './in-order.js';
15
+ import { followedRealpath, followedStatSync } from './link-following.js';
21
16
  import { toForwardSlash, toNfc } from './path-core.js';
22
17
  import { safePath } from './path-utils.js';
23
18
  /**
24
19
  * Turn a `readdir` rejection into the failure it actually is.
25
20
  *
26
- * ⚠️ **`isFilesystemAccessError` is deliberately NOT used here, and that is not
21
+ * ⚠️ **`fsFaultOf` is deliberately NOT used here, and that is not
27
22
  * an oversight.** It answers a different question — *"is this the environment's
28
23
  * fault or a bug in our code?"* — and to answer it, it deliberately groups
29
24
  * `ENOENT` together with `EACCES`. That grouping IS the conflation this function
@@ -39,39 +34,44 @@ import { safePath } from './path-utils.js';
39
34
  * @returns The listing outcome that error stands for
40
35
  */
41
36
  export function listingFailure(error) {
42
- const code = typeof error === 'object' && error !== null && 'code' in error
43
- ? error.code
44
- : undefined;
45
- // `ENOTDIR` is absence too: a path component that is a file is a directory
46
- // that does not exist, which is exactly what the caller has to report.
47
- if (code === 'ENOENT' || code === 'ENOTDIR')
37
+ const facts = fsFaultOf(error);
38
+ // The `absent` class holds `ENOTDIR` too: a path component that is a file is a
39
+ // directory that does not exist, which is exactly what the caller has to report.
40
+ if (facts?.faultClass === 'absent')
48
41
  return { outcome: 'absent' };
42
+ if (facts !== undefined)
43
+ return { outcome: 'unreadable', code: facts.errno };
44
+ // An errno outside the classifier's table is still a refusal, reported as itself.
45
+ const code = typeof error === 'object' && error !== null && 'code' in error ? error.code : undefined;
49
46
  return { outcome: 'unreadable', code: typeof code === 'string' ? code : 'UNKNOWN' };
50
47
  }
51
48
  /**
52
- * Refusal errnos that a *re-ask* can legitimately answer differently.
53
- *
54
- * ⚠️ **This set decides what may be MEMOIZED, which makes it a correctness
55
- * boundary rather than a taxonomy.** `EACCES` (a mode bit) and `ELOOP` (a
56
- * committed symlink cycle) are facts about the tree: they hold for the whole
57
- * run, re-asking buys the same refusal, and caching them is exactly what
58
- * {@link FsLookupCache} is for. Descriptor exhaustion is not a fact about the
59
- * tree at all — it is a fact about this process at one instant — and a memo
60
- * that keeps one un-verifies every path under that directory for the rest of
61
- * the run, producing a burst of findings that a re-run does not reproduce.
62
- *
63
- * **Deliberately short, and everything unlisted is treated as stable.** The two
64
- * mistakes are not symmetric: memoizing a transient refusal costs a burst of
65
- * wrong answers *within one run*, while re-asking a stable one costs an
66
- * unbounded number of syscalls on a `--x` directory that will refuse every one
67
- * of them — and on a dead network mount, each of those blocks. `EAGAIN` is
68
- * included because it is literally "try again"; `ETIMEDOUT`/`ESTALE`/`EBUSY`
69
- * are not, because a re-ask against failing hardware or a hung mount is the
70
- * storm this set exists to avoid.
49
+ * Whether a listing refused with `code` could be answered differently by a later
50
+ * ask — {@link isRetryableShortageError}: busy, or out of descriptors.
51
+ *
52
+ * ⚠️ **This decides what may be MEMOIZED, which makes it a correctness boundary
53
+ * rather than a taxonomy.** `EACCES` (a mode bit) and `ELOOP` (a committed
54
+ * symlink cycle) are facts about the tree: they hold for the whole run, re-asking
55
+ * buys the same refusal, and caching them is exactly what {@link FsLookupCache}
56
+ * is for. A descriptor shortage or a busy handle is not a fact about the tree at
57
+ * all — it is a fact about this process at one instant — and a memo that keeps
58
+ * one un-verifies every path under that directory for the rest of the run,
59
+ * producing a burst of findings that a re-run does not reproduce.
60
+ *
61
+ * **Everything else is treated as stable.** The two mistakes are not symmetric:
62
+ * memoizing a transient refusal costs a burst of wrong answers *within one run*,
63
+ * while re-asking a stable one costs an unbounded number of syscalls on a `--x`
64
+ * directory that will refuse every one of them. The `device` class (`ETIMEDOUT`,
65
+ * `ESTALE`, `EIO`) stays stable — a re-ask against failing hardware or a hung
66
+ * mount is the storm this boundary exists to avoid — and so does a full disk
67
+ * (`ENOSPC`, `EDQUOT`): re-asking frees no space, and the clause below would
68
+ * tell the reader to re-run.
71
69
  */
72
- const TRANSIENT_LISTING_ERRNOS = new Set(['EMFILE', 'ENFILE', 'EAGAIN']);
70
+ function isTransientListingCode(code) {
71
+ return isRetryableShortageError({ code });
72
+ }
73
73
  /**
74
- * The clause a finding prints about a refusal {@link TRANSIENT_LISTING_ERRNOS}
74
+ * The clause a finding prints about a refusal {@link isTransientListingCode}
75
75
  * calls transient — owned here, beside the list, so it describes every member.
76
76
  *
77
77
  * 🪤 Both consumers of `AbsenceCause.transient` used to write their own: "`X`
@@ -86,11 +86,11 @@ const TRANSIENT_LISTING_ERRNOS = new Set(['EMFILE', 'ENFILE', 'EAGAIN']);
86
86
  * trailing punctuation so a caller can continue the sentence
87
87
  */
88
88
  export function transientRefusalClause(code) {
89
- return `${code} is a transient shortage (a descriptor or other resource this process ran out of for a moment), not a permission`;
89
+ return `${code} is a transient shortage (a descriptor this process ran out of, or something busy, for a moment), not a permission`;
90
90
  }
91
91
  /** Whether this listing failed in a way a later ask could get past. */
92
92
  function isTransientRefusal(listing) {
93
- return listing.outcome === 'unreadable' && TRANSIENT_LISTING_ERRNOS.has(listing.code);
93
+ return listing.outcome === 'unreadable' && isTransientListingCode(listing.code);
94
94
  }
95
95
  /**
96
96
  * Per-run memo for the two filesystem lookups that validation repeats on values
@@ -133,6 +133,12 @@ export class FsLookupCache {
133
133
  #probeMisses = 0;
134
134
  /** The listings turned into spelling indexes, built on first use. */
135
135
  #spellingIndex;
136
+ /** The tree every path this cache follows is crawled in: the operator's own input (`link-following.ts`). */
137
+ #within;
138
+ /** @param within - The tree this run's paths are crawled in — a project or skill root the operator named */
139
+ constructor(within) {
140
+ this.#within = within;
141
+ }
136
142
  /**
137
143
  * The three-way spelling index over this cache's listings — one per run, for
138
144
  * the same reason the listings themselves are.
@@ -165,12 +171,12 @@ export class FsLookupCache {
165
171
  /**
166
172
  * Does this path exist, and is it a directory — asked once per run.
167
173
  *
168
- * **Both syscalls are preserved, in order, exactly as an uncached caller
169
- * would make them.** `existsSync` then `statSync` is not the same as one
170
- * `statSync`: the pair distinguishes "absent" from "present but unstattable",
171
- * and the link walker's classifier branches differently on each. Collapsing
172
- * them would be a behaviour change wearing the shape of an optimization, so
173
- * this method deduplicates the pair rather than replacing it.
174
+ * One followed `stat`, its link chain read beneath this cache's tree first
175
+ * (`followedStatSync`): a path that resolves to nothing — absent, dangling, a
176
+ * cycle — is `{ exists: false }`; a probe the OS refused, or a chain VAT will not
177
+ * hand the kernel (a link to a network or device path), is present with NO
178
+ * answer (`isDirectory: null`), which the link walker reports as an unreadable
179
+ * target — so the refusal is SEEN, never read as "not there".
174
180
  *
175
181
  * Synchronous, unlike this class's other two lookups, because its caller (the
176
182
  * skill link-graph walker) is synchronous throughout. One oracle answering
@@ -185,25 +191,18 @@ export class FsLookupCache {
185
191
  if (cached !== undefined)
186
192
  return cached;
187
193
  this.#probeMisses++;
188
- const exists = nodeFs.existsSync(targetPath);
194
+ let exists = true;
189
195
  let isDirectory = null;
190
- if (exists) {
191
- try {
192
- isDirectory = nodeFs.statSync(targetPath).isDirectory();
193
- }
194
- catch (error) {
195
- // Present to `existsSync` but unstattable — a permission change or a
196
- // delete racing between the two calls. `null` records "no answer" rather
197
- // than guessing `false`, which would read as "it is a file", and the
198
- // link walker reports it as an unreadable target — so the refusal is
199
- // SEEN, not swallowed. A bug from under the stat is not a refusal and
200
- // stays loud; `isFilesystemAccessError` is the right predicate here
201
- // precisely because it groups every environmental errno together and
202
- // excludes a `TypeError`.
203
- if (!isFilesystemAccessError(error))
204
- throw error;
205
- isDirectory = null;
206
- }
196
+ try {
197
+ const stats = followedStatSync(targetPath, this.#within);
198
+ exists = stats !== undefined;
199
+ isDirectory = stats === undefined ? null : stats.isDirectory();
200
+ }
201
+ catch (error) {
202
+ // A bug from under the stat is not a refusal and stays loud: only a fault
203
+ // the classifier knows, or VAT's own refusal of the chain, is "no answer".
204
+ if (linkResolutionFault(error) === undefined)
205
+ exists = false;
207
206
  }
208
207
  const result = { exists, isDirectory };
209
208
  this.#probes.set(targetPath, result);
@@ -245,9 +244,16 @@ export class FsLookupCache {
245
244
  * is idempotent at a root (`'/'` on posix, `'C:/'` for a drive, `'//server/share/'`
246
245
  * for a UNC share), so without it the walk never terminates.
247
246
  *
248
- * Errno is deliberately not inspected. EACCES on an existing file and ELOOP on
249
- * a symlink cycle land in the same catch as ENOENT, and for all three the
250
- * ancestor's namespace is a strictly better answer than the lexical one.
247
+ * Every filesystem failure walks up, and the row says which kind it was
248
+ * ({@link linkResolutionFault}, the one predicate): a path that resolves to
249
+ * nothing (ENOENT, ELOOP on a cycle, …) carries `fault: null`, and one the OS
250
+ * DECLINED (`EACCES`/`EPERM`) or could not look at carries the fault — errno
251
+ * and class — for the judge to report against that ONE target. Never a
252
+ * rejection: this column is filled over every link target in one
253
+ * `Promise.all`, and one refused target must not abort the run and lose every
254
+ * other finding. The ancestor answer is still the containment answer: a
255
+ * target outside the root is outside whatever refused beneath it. A bug
256
+ * (no errno) rejects as itself.
251
257
  *
252
258
  * ⚠️ **`promisify(nodeFs.realpath)` — NOT `fs/promises.realpath`. Node ships two
253
259
  * different realpaths and they do not agree.** `fs.realpathSync` and the
@@ -285,7 +291,8 @@ export class FsLookupCache {
285
291
  * The wrapper is allocated only on a cache MISS, i.e. once per actual syscall.
286
292
  *
287
293
  * @param targetPath - Path to canonicalize
288
- * @returns Canonical path with forward slashes on every platform
294
+ * @returns The canonical path with forward slashes on every platform, and the
295
+ * fault (or `null`) that sent the answer to an ancestor
289
296
  */
290
297
  realpath(targetPath) {
291
298
  const cached = this.#realpaths.get(targetPath);
@@ -298,9 +305,16 @@ export class FsLookupCache {
298
305
  // sibling lookups: the rule matches a member call on an fs object, and the
299
306
  // path is passed to the promisified wrapper instead. The path is
300
307
  // caller-validated all the same.
301
- const pending = promisify(nodeFs.realpath)(targetPath)
302
- .then(toForwardSlash)
303
- .catch(() => this.#canonicalizeViaAncestor(targetPath));
308
+ // The kernel is asked only once the link chain has been read and shown local
309
+ // (`assertLocalChain`); a chain it refuses is this target's fault, like any other.
310
+ const pending = Promise.resolve()
311
+ .then(() => followedRealpath(targetPath, this.#within))
312
+ .then((real) => ({ path: toForwardSlash(real), fault: null }))
313
+ .catch((error) => {
314
+ const facts = linkResolutionFault(error);
315
+ const fault = facts === undefined ? null : { errno: facts.errno, faultClass: facts.faultClass, error };
316
+ return this.#canonicalizeViaAncestor(targetPath, fault);
317
+ });
304
318
  this.#realpaths.set(targetPath, pending);
305
319
  return pending;
306
320
  }
@@ -314,24 +328,27 @@ export class FsLookupCache {
314
328
  * before any of this can start.
315
329
  *
316
330
  * @param targetPath - Path that could not be canonicalized
317
- * @returns Canonical ancestor plus the missing remainder, forward-slashed
331
+ * @param fault - Why it could not, when the OS declined or could not look; `null` when it resolves to nothing
332
+ * @returns Canonical ancestor plus the missing remainder, forward-slashed, with
333
+ * this path's own fault — or, when it has none, the ancestor's
318
334
  */
319
- async #canonicalizeViaAncestor(targetPath) {
335
+ async #canonicalizeViaAncestor(targetPath, fault) {
320
336
  const absolutePath = safePath.resolve(targetPath);
321
337
  const parent = toForwardSlash(path.dirname(absolutePath));
322
338
  // Fixpoint at a filesystem root — `/`, `C:/`, `//server/share/` — where
323
339
  // `dirname` returns its own input. Nothing left to walk, and no guard means
324
340
  // no termination.
325
341
  if (parent === absolutePath)
326
- return absolutePath;
327
- return safePath.join(await this.realpath(parent), path.basename(absolutePath));
342
+ return { path: absolutePath, fault };
343
+ const ancestor = await this.realpath(parent);
344
+ return { path: safePath.join(ancestor.path, path.basename(absolutePath)), fault: fault ?? ancestor.fault };
328
345
  }
329
346
  /**
330
347
  * What `dirPath` holds, or which of the two ways the question went unanswered.
331
348
  *
332
349
  * A *stable* failure is cached like a success: re-asking a directory whose
333
350
  * mode bits refuse us, or whose path is a symlink cycle, is the same failed
334
- * syscall. A **transient** one is not — see {@link TRANSIENT_LISTING_ERRNOS}.
351
+ * syscall. A **transient** one is not — see {@link isTransientListingCode}.
335
352
  *
336
353
  * ⚠️ **The transient entry is dropped only once the promise has SETTLED, and
337
354
  * that timing is the whole design.** Deleting the row up front, or refusing to
@@ -385,67 +402,6 @@ export class FsLookupCache {
385
402
  return listing;
386
403
  }
387
404
  }
388
- /** Thrown when a link inside the tree being copied points outside it. */
389
- export class CopyLinkEscapesSourceError extends VatError {
390
- constructor(link, src) {
391
- super('COPY_LINK_ESCAPES_SOURCE', `Refusing to copy ${link}: it is a symlink to a path outside ${src}. ` +
392
- 'A copy follows links, so this would ship content the source tree does not own — ' +
393
- 'replace the link with the files, or point it inside the tree.');
394
- }
395
- }
396
- /**
397
- * Recursively copy a directory, following symlinks — contained to `src`.
398
- *
399
- * A link is copied as what it points at (a linked directory as its tree, a
400
- * linked file as its bytes; a dangling link fails loudly in `stat`). Two
401
- * refusals bound that: a link whose target is not under `src` throws
402
- * {@link CopyLinkEscapesSourceError} — `scripts/etc -> /etc` used to copy
403
- * `/etc` into `dist` — and a link that leads the walk back into a directory
404
- * it already entered throws `DirectoryWalkRevisitedError` (`scripts/loop -> .`
405
- * used to create `dest/loop/loop/…` until `ENAMETOOLONG`, writing every file
406
- * at every level first). Adopter-authored trees reach this through
407
- * `vat agent build`, so neither shape is exotic.
408
- *
409
- * @param src - Source directory path
410
- * @param dest - Destination directory path
411
- *
412
- * @example
413
- * await copyDirectory('/source/dir', '/dest/dir');
414
- */
415
- export async function copyDirectory(src, dest) {
416
- const walk = new FollowedWalk();
417
- walk.enter(src);
418
- await copyTree(src, dest, src, walk);
419
- }
420
- /** One level of {@link copyDirectory}; every directory it recurses into has been `enter`ed. */
421
- async function copyTree(src, dest, root, walk) {
422
- await fs.mkdir(dest, { recursive: true });
423
- const entries = await fs.readdir(src, { withFileTypes: true });
424
- for (const entry of entries) {
425
- const srcPath = safePath.join(src, entry.name);
426
- const destPath = safePath.join(dest, entry.name);
427
- // (Inline rather than `direntKindFollowing`: that module imports this one.)
428
- let isDirectory = entry.isDirectory();
429
- if (entry.isSymbolicLink()) {
430
- isDirectory = (await fs.stat(srcPath)).isDirectory();
431
- // Revisit first, so a link back into the tree is named as the loop it
432
- // is; then containment, so a link out is named as the escape it is.
433
- if (isDirectory)
434
- walk.enter(srcPath);
435
- if (isUnderRoot(root, srcPath) !== 'inside')
436
- throw new CopyLinkEscapesSourceError(srcPath, root);
437
- }
438
- else if (isDirectory) {
439
- walk.enter(srcPath);
440
- }
441
- if (isDirectory) {
442
- await copyTree(srcPath, destPath, root, walk);
443
- }
444
- else {
445
- await fs.copyFile(srcPath, destPath);
446
- }
447
- }
448
- }
449
405
  /**
450
406
  * The refusal a `readdir` that was refused stands for — errno, directory and
451
407
  * whether a re-ask could answer differently, derived ONCE beside the errno list.
@@ -463,18 +419,46 @@ export function directoryRefusalFor(listing, directory) {
463
419
  kind: 'directory_unreadable',
464
420
  code: listing.code,
465
421
  directory: toForwardSlash(directory),
466
- transient: TRANSIENT_LISTING_ERRNOS.has(listing.code),
422
+ transient: isTransientListingCode(listing.code),
467
423
  };
468
424
  }
425
+ /**
426
+ * The refusal a failed `stat` or `readdir` of a scan ROOT stands for, or
427
+ * `undefined` when the root is simply absent (`ENOENT`/`ENOTDIR`).
428
+ *
429
+ * For a caller that must decide whether a root exists before it scans it: an
430
+ * `existsSync` answers `false` for an untraversable parent too, and the root
431
+ * then reads as scanned and empty.
432
+ *
433
+ * @param error - What the `stat` or `readdir` of `directory` threw
434
+ * @param directory - The root that was asked about
435
+ */
436
+ export function rootListingRefusal(error, directory) {
437
+ const listing = listingFailure(error);
438
+ return listing.outcome === 'unreadable' ? directoryRefusalFor(listing, directory) : undefined;
439
+ }
469
440
  /**
470
441
  * The cause for a listing that produced no index.
471
442
  *
443
+ * ⛔ One link, one answer. A directory whose listing failed with an errno the ONE link predicate
444
+ * ({@link isUnresolvableLinkError}) calls "resolves to nothing" — the `absent` class, and a link
445
+ * loop (`ELOOP`) — is ABSENCE here, exactly as the realpath beside this walk
446
+ * ({@link FsLookupCache.realpath}, through `linkResolutionFault`) answers the same errno, and as the
447
+ * projection extent and every install lane do. This walk used to call a looping directory
448
+ * "unreadable" while that realpath called the same link a link to nothing: two answers for one
449
+ * link. Every other failed listing stays a refusal with its errno: declined or failed (`EACCES`,
450
+ * `EIO`, Windows' `UNKNOWN`), and Windows' ambiguous `EINVAL` / `ENAMETOOLONG`, each of which libuv
451
+ * answers for more than one Win32 error.
452
+ *
453
+ * {@link listingFailure} itself keeps `absent` to `ENOENT`/`ENOTDIR`: the crawler reads it to
454
+ * decide what it could not ENUMERATE, a different question from whether a link target exists.
455
+ *
472
456
  * @param listing - A `readdir` outcome that is not `listed`
473
457
  * @param directory - The directory that was asked about
474
458
  * @returns Which absence this is, and — when it is a refusal — its detail
475
459
  */
476
460
  function absenceCauseFor(listing, directory) {
477
- if (listing.outcome === 'absent')
461
+ if (listing.outcome === 'absent' || isUnresolvableLinkError({ code: listing.code }))
478
462
  return { kind: 'no_such_entry' };
479
463
  return directoryRefusalFor(listing, directory);
480
464
  }
@@ -621,17 +605,18 @@ export class DirectorySpellingIndex {
621
605
  const actual = [];
622
606
  let worst = 'exact';
623
607
  let directory = root;
624
- for (const segment of segments) {
625
- // Sequential by necessity: which directory holds the next component
626
- // depends on how this one is really spelled. Every listing is memoized,
627
- // so a run pays per DIRECTORY, not per path and not per component.
608
+ let absent;
609
+ // In order by necessity: which directory holds the next component depends
610
+ // on how this one is really spelled. Every listing is memoized, so a run
611
+ // pays per DIRECTORY, not per path and not per component.
612
+ await everyInOrder(segments, async (segment) => {
628
613
  const found = await this.lookup(directory, segment);
629
614
  if (found.match === 'absent') {
630
615
  // The cause travels with the verdict rather than being re-derived: by
631
616
  // the time a caller reports this, the directory that refused is
632
617
  // several frames gone and nothing else can tell the two absences
633
618
  // apart. So does what was learned ABOVE it — see `verified`.
634
- return {
619
+ absent = {
635
620
  match: 'absent',
636
621
  askedPath,
637
622
  actualPath: '',
@@ -642,12 +627,16 @@ export class DirectorySpellingIndex {
642
627
  actualPath: actual.join('/'),
643
628
  },
644
629
  };
630
+ return false;
645
631
  }
646
632
  if (SPELLING_RANK[found.match] > SPELLING_RANK[worst])
647
633
  worst = found.match;
648
634
  actual.push(found.actualName);
649
635
  directory = safePath.join(directory, found.actualName);
650
- }
636
+ return true;
637
+ });
638
+ if (absent !== undefined)
639
+ return absent;
651
640
  return { match: worst, askedPath, actualPath: actual.join('/') };
652
641
  }
653
642
  /**
@@ -793,7 +782,7 @@ export function pathSpellingFrom(table, referrer, target) {
793
782
  * fact, and the pass that must run *before* any judging.
794
783
  *
795
784
  * ⚠️ **Rows are keyed by the input path string exactly as given** — not a
796
- * dirname, not a re-resolved form. {@link realpathFrom} looks that same string
785
+ * dirname, not a re-resolved form. {@link realpathRowFrom} looks that same string
797
786
  * up, so any normalization applied here and not there is a silent miss (a loud
798
787
  * one, in fact: the judge throws). Contrast {@link fillPathSpellings}, which
799
788
  * keys by (walk root, target) *because* many references share one walk; here the
@@ -819,7 +808,8 @@ export async function fillRealpaths(paths, fsCache) {
819
808
  return table;
820
809
  }
821
810
  /**
822
- * Read the canonical path for `filePath` out of an already-filled table. Pure.
811
+ * Read the row for `filePath` — its canonical path and the fault, if any, that
812
+ * kept it from resolving — out of an already-filled table. Pure.
823
813
  *
824
814
  * **A miss throws rather than degrading to a recomputed realpath.** The fill set
825
815
  * is derived from exactly the paths the judge will be asked about, so a missing
@@ -842,18 +832,18 @@ export async function fillRealpaths(paths, fsCache) {
842
832
  *
843
833
  * @param table - Table filled by {@link fillRealpaths}
844
834
  * @param filePath - Path being asked about, as it was handed to the fill
845
- * @returns The canonical path, with forward slashes on every platform
835
+ * @returns The row: the canonical path, with forward slashes on every platform, and its fault
846
836
  * @throws If `table` holds no row for `filePath`
847
837
  */
848
- export function realpathFrom(table, filePath) {
849
- // `undefined` can only mean "absent key": a filled row is always a string,
838
+ export function realpathRowFrom(table, filePath) {
839
+ // `undefined` can only mean "absent key": a filled row is always a row,
850
840
  // because `FsLookupCache.realpath` falls back to the deepest existing
851
841
  // ancestor's canonical path rather than leaving an unresolvable path without
852
842
  // an answer.
853
- const realPath = table.get(filePath);
854
- if (realPath === undefined) {
843
+ const row = table.get(filePath);
844
+ if (row === undefined) {
855
845
  throw new Error(`No canonical path for "${filePath}". Fill it with fillRealpaths() before judging.`);
856
846
  }
857
- return realPath;
847
+ return row;
858
848
  }
859
849
  //# sourceMappingURL=fs-utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../src/fs-utils.ts"],"names":[],"mappings":"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"}
package/dist/fs.d.ts CHANGED
@@ -8,9 +8,10 @@
8
8
  * `@vibe-agent-toolkit/utils/path` instead — it is dramatically cheaper.
9
9
  */
10
10
  export { normalizePath, normalizedTmpdir, mkdirSyncReal, resolveFromImportMeta, dynamicImportPath, } from './path-utils.js';
11
- export { readTextContent, readTextContentSync } from './text-file.js';
11
+ export { exceedsDecodableLength, MAX_DECODABLE_BYTES, openForReading, readDecodableBytes, readTextContent, readTextContentSync, } from './text-file.js';
12
+ export { TextTooLargeError } from './text-content.js';
12
13
  export type { DecodedText, EncodingSource, TextEncoding, TextProvenance } from './text-content.js';
13
- export { isFilesystemAccessError, isPathAbsentError } from './errors/errno.js';
14
- export { copyDirectory, DirectorySpellingIndex, fillPathSpellings, fillRealpaths, FsLookupCache, pathSpellingFrom, realpathFrom, spellingWalkRoot, } from './fs-utils.js';
15
- export type { ComponentMatch, FilenameMatch, PathProbe, PathProbeStats, PathSpelling, PathSpellingRequest, PathSpellingTable, RealpathTable, } from './fs-utils.js';
14
+ export { fsFaultOf, isPathAbsentError } from './errors/errno-table.js';
15
+ export { DirectorySpellingIndex, fillPathSpellings, fillRealpaths, FsLookupCache, pathSpellingFrom, realpathRowFrom, spellingWalkRoot, } from './fs-utils.js';
16
+ export type { ComponentMatch, FilenameMatch, PathProbe, PathProbeStats, PathSpelling, PathSpellingRequest, PathSpellingTable, RealpathFault, RealpathRow, RealpathTable, } from './fs-utils.js';
16
17
  //# sourceMappingURL=fs.d.ts.map
package/dist/fs.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACtE,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnG,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,GACd,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"fs.d.ts","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAKzB,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAKnG,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,aAAa,EACb,SAAS,EACT,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,iBAAiB,EACjB,aAAa,EACb,WAAW,EACX,aAAa,GACd,MAAM,eAAe,CAAC"}
package/dist/fs.js CHANGED
@@ -11,10 +11,11 @@ export { normalizePath, normalizedTmpdir, mkdirSyncReal, resolveFromImportMeta,
11
11
  // Read a file and decode it through the one content-decoding seam. The DECISION
12
12
  // about what the bytes say is pure and lives on `./text`; these two are that
13
13
  // plus a `readFile`, which is why they are here and not there.
14
- export { readTextContent, readTextContentSync } from './text-file.js';
14
+ export { exceedsDecodableLength, MAX_DECODABLE_BYTES, openForReading, readDecodableBytes, readTextContent, readTextContentSync, } from './text-file.js';
15
+ export { TextTooLargeError } from './text-content.js';
15
16
  // Two materialized columns, each a fill+judge pair and nothing else. In both the
16
- // row IS the answer, so the row lookup — `pathSpellingFrom`, `realpathFrom` — is
17
+ // row IS the answer, so the row lookup — `pathSpellingFrom`, `realpathRowFrom` — is
17
18
  // itself the judge and is exported. See `index.ts` for the full reasoning.
18
- export { isFilesystemAccessError, isPathAbsentError } from './errors/errno.js';
19
- export { copyDirectory, DirectorySpellingIndex, fillPathSpellings, fillRealpaths, FsLookupCache, pathSpellingFrom, realpathFrom, spellingWalkRoot, } from './fs-utils.js';
19
+ export { fsFaultOf, isPathAbsentError } from './errors/errno-table.js';
20
+ export { DirectorySpellingIndex, fillPathSpellings, fillRealpaths, FsLookupCache, pathSpellingFrom, realpathRowFrom, spellingWalkRoot, } from './fs-utils.js';
20
21
  //# sourceMappingURL=fs.js.map
package/dist/fs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,6EAA6E;AAC7E,+DAA+D;AAC/D,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAGtE,iFAAiF;AACjF,iFAAiF;AACjF,2EAA2E;AAC3E,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC/E,OAAO,EACL,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,GACjB,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"fs.js","sourceRoot":"","sources":["../src/fs.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EACL,aAAa,EACb,gBAAgB,EAChB,aAAa,EACb,qBAAqB,EACrB,iBAAiB,GAClB,MAAM,iBAAiB,CAAC;AAEzB,gFAAgF;AAChF,6EAA6E;AAC7E,+DAA+D;AAC/D,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,cAAc,EACd,kBAAkB,EAClB,eAAe,EACf,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAGtD,iFAAiF;AACjF,oFAAoF;AACpF,2EAA2E;AAC3E,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AACvE,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,gBAAgB,EAChB,eAAe,EACf,gBAAgB,GACjB,MAAM,eAAe,CAAC"}