@shivaedev/quality 0.4.0 → 0.5.0

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 (387) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/README.md +119 -29
  3. package/biome/declarations.json +17 -0
  4. package/biome/plugins/ambient-runtime.grit +18 -0
  5. package/biome/plugins/effect-fn-spans.grit +7 -0
  6. package/biome/preset.json +602 -0
  7. package/dist/baseline/compare.d.ts +8 -9
  8. package/dist/baseline/compare.d.ts.map +1 -1
  9. package/dist/baseline/compare.js +4 -4
  10. package/dist/baseline/compare.js.map +1 -1
  11. package/dist/baseline/format.d.ts +4 -4
  12. package/dist/baseline/format.d.ts.map +1 -1
  13. package/dist/baseline/format.js +3 -2
  14. package/dist/baseline/format.js.map +1 -1
  15. package/dist/baseline/guard.d.ts +3 -3
  16. package/dist/baseline/guard.d.ts.map +1 -1
  17. package/dist/baseline/guard.js +6 -5
  18. package/dist/baseline/guard.js.map +1 -1
  19. package/dist/baseline/legacy.d.ts +3 -3
  20. package/dist/baseline/legacy.d.ts.map +1 -1
  21. package/dist/baseline/legacy.js.map +1 -1
  22. package/dist/baseline/rewrite.d.ts +1 -1
  23. package/dist/baseline/rewrite.d.ts.map +1 -1
  24. package/dist/baseline/rewrite.js.map +1 -1
  25. package/dist/baseline/update.d.ts +8 -9
  26. package/dist/baseline/update.d.ts.map +1 -1
  27. package/dist/baseline/update.js +10 -9
  28. package/dist/baseline/update.js.map +1 -1
  29. package/dist/biome/report.d.ts +33 -0
  30. package/dist/biome/report.d.ts.map +1 -0
  31. package/dist/biome/report.js +25 -0
  32. package/dist/biome/report.js.map +1 -0
  33. package/dist/biome/run.d.ts +7 -0
  34. package/dist/biome/run.d.ts.map +1 -0
  35. package/dist/biome/run.js +16 -0
  36. package/dist/biome/run.js.map +1 -0
  37. package/dist/cli/args.d.ts +6 -3
  38. package/dist/cli/args.d.ts.map +1 -1
  39. package/dist/cli/args.js +9 -4
  40. package/dist/cli/args.js.map +1 -1
  41. package/dist/cli/baseline.d.ts +1 -1
  42. package/dist/cli/baseline.d.ts.map +1 -1
  43. package/dist/cli/baseline.js +3 -3
  44. package/dist/cli/baseline.js.map +1 -1
  45. package/dist/cli/check.js.map +1 -1
  46. package/dist/cli/fix.d.ts +4 -0
  47. package/dist/cli/fix.d.ts.map +1 -0
  48. package/dist/cli/fix.js +19 -0
  49. package/dist/cli/fix.js.map +1 -0
  50. package/dist/cli/lint.js +1 -1
  51. package/dist/cli/lint.js.map +1 -1
  52. package/dist/cli/run-main.d.ts.map +1 -1
  53. package/dist/cli/run-main.js +7 -3
  54. package/dist/cli/run-main.js.map +1 -1
  55. package/dist/cli.js +3 -0
  56. package/dist/cli.js.map +1 -1
  57. package/dist/config/decode.d.ts +4 -4
  58. package/dist/config/decode.js +12 -12
  59. package/dist/config/decode.js.map +1 -1
  60. package/dist/config/load.d.ts +3 -3
  61. package/dist/config/load.d.ts.map +1 -1
  62. package/dist/config/load.js +1 -1
  63. package/dist/config/load.js.map +1 -1
  64. package/dist/config/resolve.d.ts +3 -5
  65. package/dist/config/resolve.d.ts.map +1 -1
  66. package/dist/config/resolve.js +11 -5
  67. package/dist/config/resolve.js.map +1 -1
  68. package/dist/config.d.ts +9 -9
  69. package/dist/config.d.ts.map +1 -1
  70. package/dist/config.js.map +1 -1
  71. package/dist/decoded.d.ts +1 -1
  72. package/dist/decoded.d.ts.map +1 -1
  73. package/dist/engine/baseline-file.d.ts +1 -1
  74. package/dist/engine/baseline-file.d.ts.map +1 -1
  75. package/dist/engine/evaluate.d.ts +8 -9
  76. package/dist/engine/evaluate.d.ts.map +1 -1
  77. package/dist/engine/evaluate.js +4 -4
  78. package/dist/engine/evaluate.js.map +1 -1
  79. package/dist/engine/run-rules.d.ts +4 -3
  80. package/dist/engine/run-rules.d.ts.map +1 -1
  81. package/dist/engine/run-rules.js +3 -3
  82. package/dist/engine/run-rules.js.map +1 -1
  83. package/dist/engine/session.d.ts +3 -3
  84. package/dist/engine/session.d.ts.map +1 -1
  85. package/dist/engine/violation.d.ts +11 -3
  86. package/dist/engine/violation.d.ts.map +1 -1
  87. package/dist/engine/violation.js +6 -2
  88. package/dist/engine/violation.js.map +1 -1
  89. package/dist/exceptions/registry.d.ts +7 -8
  90. package/dist/exceptions/registry.d.ts.map +1 -1
  91. package/dist/exceptions/registry.js +6 -6
  92. package/dist/exceptions/registry.js.map +1 -1
  93. package/dist/git/base.d.ts +1 -1
  94. package/dist/git/base.d.ts.map +1 -1
  95. package/dist/git/base.js.map +1 -1
  96. package/dist/git/command.d.ts +3 -3
  97. package/dist/git/command.d.ts.map +1 -1
  98. package/dist/git/command.js.map +1 -1
  99. package/dist/git/history.d.ts +1 -1
  100. package/dist/git/history.d.ts.map +1 -1
  101. package/dist/git/history.js +1 -1
  102. package/dist/git/history.js.map +1 -1
  103. package/dist/imports/ambient.d.ts +7 -0
  104. package/dist/imports/ambient.d.ts.map +1 -0
  105. package/dist/imports/ambient.js +44 -0
  106. package/dist/imports/ambient.js.map +1 -0
  107. package/dist/imports/components.d.ts +2 -0
  108. package/dist/imports/components.d.ts.map +1 -0
  109. package/dist/imports/components.js +63 -0
  110. package/dist/imports/components.js.map +1 -0
  111. package/dist/imports/extract.d.ts +10 -0
  112. package/dist/imports/extract.d.ts.map +1 -0
  113. package/dist/imports/extract.js +100 -0
  114. package/dist/imports/extract.js.map +1 -0
  115. package/dist/imports/fences/dsl.d.ts +18 -0
  116. package/dist/imports/fences/dsl.d.ts.map +1 -0
  117. package/dist/imports/fences/dsl.js +14 -0
  118. package/dist/imports/fences/dsl.js.map +1 -0
  119. package/dist/imports/fences/evaluate.d.ts +12 -0
  120. package/dist/imports/fences/evaluate.d.ts.map +1 -0
  121. package/dist/imports/fences/evaluate.js +55 -0
  122. package/dist/imports/fences/evaluate.js.map +1 -0
  123. package/dist/imports/fences/match.d.ts +17 -0
  124. package/dist/imports/fences/match.d.ts.map +1 -0
  125. package/dist/imports/fences/match.js +106 -0
  126. package/dist/imports/fences/match.js.map +1 -0
  127. package/dist/imports/fences/model.d.ts +60 -0
  128. package/dist/imports/fences/model.d.ts.map +1 -0
  129. package/dist/imports/fences/model.js +2 -0
  130. package/dist/imports/fences/model.js.map +1 -0
  131. package/dist/imports/fences/policy.d.ts +5 -0
  132. package/dist/imports/fences/policy.d.ts.map +1 -0
  133. package/dist/imports/fences/policy.js +59 -0
  134. package/dist/imports/fences/policy.js.map +1 -0
  135. package/dist/imports/fences/reach.d.ts +12 -0
  136. package/dist/imports/fences/reach.d.ts.map +1 -0
  137. package/dist/imports/fences/reach.js +39 -0
  138. package/dist/imports/fences/reach.js.map +1 -0
  139. package/dist/imports/fences/selectors.d.ts +11 -0
  140. package/dist/imports/fences/selectors.d.ts.map +1 -0
  141. package/dist/imports/fences/selectors.js +27 -0
  142. package/dist/imports/fences/selectors.js.map +1 -0
  143. package/dist/imports/fences/vocabulary.d.ts +9 -0
  144. package/dist/imports/fences/vocabulary.d.ts.map +1 -0
  145. package/dist/imports/fences/vocabulary.js +40 -0
  146. package/dist/imports/fences/vocabulary.js.map +1 -0
  147. package/dist/imports/generated.d.ts +6 -0
  148. package/dist/imports/generated.d.ts.map +1 -0
  149. package/dist/imports/generated.js +78 -0
  150. package/dist/imports/generated.js.map +1 -0
  151. package/dist/imports/glob.d.ts +2 -0
  152. package/dist/imports/glob.d.ts.map +1 -0
  153. package/dist/imports/glob.js +125 -0
  154. package/dist/imports/glob.js.map +1 -0
  155. package/dist/imports/graph.d.ts +23 -0
  156. package/dist/imports/graph.d.ts.map +1 -0
  157. package/dist/imports/graph.js +56 -0
  158. package/dist/imports/graph.js.map +1 -0
  159. package/dist/imports/paths.d.ts +2 -0
  160. package/dist/imports/paths.d.ts.map +1 -0
  161. package/dist/imports/paths.js +24 -0
  162. package/dist/imports/paths.js.map +1 -0
  163. package/dist/imports/pnpm-workspace.d.ts +2 -0
  164. package/dist/imports/pnpm-workspace.d.ts.map +1 -0
  165. package/dist/imports/pnpm-workspace.js +122 -0
  166. package/dist/imports/pnpm-workspace.js.map +1 -0
  167. package/dist/imports/projects.d.ts +10 -0
  168. package/dist/imports/projects.d.ts.map +1 -0
  169. package/dist/imports/projects.js +83 -0
  170. package/dist/imports/projects.js.map +1 -0
  171. package/dist/imports/resolve.d.ts +16 -0
  172. package/dist/imports/resolve.d.ts.map +1 -0
  173. package/dist/imports/resolve.js +88 -0
  174. package/dist/imports/resolve.js.map +1 -0
  175. package/dist/imports/workspace.d.ts +10 -0
  176. package/dist/imports/workspace.d.ts.map +1 -0
  177. package/dist/imports/workspace.js +55 -0
  178. package/dist/imports/workspace.js.map +1 -0
  179. package/dist/index.d.ts +3 -0
  180. package/dist/index.d.ts.map +1 -1
  181. package/dist/index.js +2 -0
  182. package/dist/index.js.map +1 -1
  183. package/dist/inventory/collect.d.ts +6 -6
  184. package/dist/inventory/collect.d.ts.map +1 -1
  185. package/dist/inventory/collect.js.map +1 -1
  186. package/dist/manifests/sorted.d.ts +14 -0
  187. package/dist/manifests/sorted.d.ts.map +1 -0
  188. package/dist/manifests/sorted.js +39 -0
  189. package/dist/manifests/sorted.js.map +1 -0
  190. package/dist/report/guard.d.ts +1 -1
  191. package/dist/report/guard.d.ts.map +1 -1
  192. package/dist/report/guard.js +1 -1
  193. package/dist/report/guard.js.map +1 -1
  194. package/dist/report/render.d.ts +2 -2
  195. package/dist/report/render.d.ts.map +1 -1
  196. package/dist/report/render.js.map +1 -1
  197. package/dist/report/stale.d.ts +2 -2
  198. package/dist/report/stale.d.ts.map +1 -1
  199. package/dist/report/stale.js.map +1 -1
  200. package/dist/rule.d.ts +12 -11
  201. package/dist/rule.d.ts.map +1 -1
  202. package/dist/rule.js.map +1 -1
  203. package/dist/rules/biome.d.ts +4 -0
  204. package/dist/rules/biome.d.ts.map +1 -0
  205. package/dist/rules/biome.js +40 -0
  206. package/dist/rules/biome.js.map +1 -0
  207. package/dist/rules/built-in.d.ts +8 -10
  208. package/dist/rules/built-in.d.ts.map +1 -1
  209. package/dist/rules/built-in.js +12 -0
  210. package/dist/rules/built-in.js.map +1 -1
  211. package/dist/rules/comments/kinds.d.ts +1 -2
  212. package/dist/rules/comments/kinds.d.ts.map +1 -1
  213. package/dist/rules/comments/kinds.js +7 -16
  214. package/dist/rules/comments/kinds.js.map +1 -1
  215. package/dist/rules/comments/max-per-file.d.ts +1 -1
  216. package/dist/rules/comments/max-per-file.js +11 -11
  217. package/dist/rules/comments/max-per-file.js.map +1 -1
  218. package/dist/rules/comments/no-banner.js +2 -2
  219. package/dist/rules/comments/no-banner.js.map +1 -1
  220. package/dist/rules/comments/no-environment-pragma.d.ts +2 -0
  221. package/dist/rules/comments/no-environment-pragma.d.ts.map +1 -0
  222. package/dist/rules/comments/no-environment-pragma.js +8 -0
  223. package/dist/rules/comments/no-environment-pragma.js.map +1 -0
  224. package/dist/rules/comments/no-jsdoc.js +3 -3
  225. package/dist/rules/comments/no-jsdoc.js.map +1 -1
  226. package/dist/rules/comments/no-line-reference.js +2 -2
  227. package/dist/rules/comments/no-line-reference.js.map +1 -1
  228. package/dist/rules/comments/no-pr-reference.js +6 -6
  229. package/dist/rules/comments/no-pr-reference.js.map +1 -1
  230. package/dist/rules/comments/no-todo.js +2 -2
  231. package/dist/rules/comments/no-todo.js.map +1 -1
  232. package/dist/rules/comments/pattern-rule.d.ts +2 -2
  233. package/dist/rules/comments/pattern-rule.d.ts.map +1 -1
  234. package/dist/rules/comments/pattern-rule.js +2 -2
  235. package/dist/rules/comments/pattern-rule.js.map +1 -1
  236. package/dist/rules/comments/scan.d.ts +6 -6
  237. package/dist/rules/comments/scan.d.ts.map +1 -1
  238. package/dist/rules/comments/scan.js +2 -2
  239. package/dist/rules/comments/scan.js.map +1 -1
  240. package/dist/rules/imports/cycles.d.ts +2 -0
  241. package/dist/rules/imports/cycles.d.ts.map +1 -0
  242. package/dist/rules/imports/cycles.js +38 -0
  243. package/dist/rules/imports/cycles.js.map +1 -0
  244. package/dist/rules/imports/fences.d.ts +5 -0
  245. package/dist/rules/imports/fences.d.ts.map +1 -0
  246. package/dist/rules/imports/fences.js +24 -0
  247. package/dist/rules/imports/fences.js.map +1 -0
  248. package/dist/rules/imports/resolvable.d.ts +4 -0
  249. package/dist/rules/imports/resolvable.d.ts.map +1 -0
  250. package/dist/rules/imports/resolvable.js +22 -0
  251. package/dist/rules/imports/resolvable.js.map +1 -0
  252. package/dist/rules/manifests-sorted.d.ts +2 -0
  253. package/dist/rules/manifests-sorted.d.ts.map +1 -0
  254. package/dist/rules/manifests-sorted.js +22 -0
  255. package/dist/rules/manifests-sorted.js.map +1 -0
  256. package/dist/rules/max-lines.js +4 -4
  257. package/dist/rules/max-lines.js.map +1 -1
  258. package/dist/rules/suppressions/biome/configs.d.ts +6 -6
  259. package/dist/rules/suppressions/biome/configs.d.ts.map +1 -1
  260. package/dist/rules/suppressions/biome/configs.js +2 -2
  261. package/dist/rules/suppressions/biome/configs.js.map +1 -1
  262. package/dist/rules/suppressions/biome/declarations.d.ts +4 -4
  263. package/dist/rules/suppressions/biome/declarations.d.ts.map +1 -1
  264. package/dist/rules/suppressions/biome/declarations.js +3 -3
  265. package/dist/rules/suppressions/biome/declarations.js.map +1 -1
  266. package/dist/rules/suppressions/biome/json.d.ts +2 -2
  267. package/dist/rules/suppressions/biome/json.d.ts.map +1 -1
  268. package/dist/rules/suppressions/biome/json.js +1 -1
  269. package/dist/rules/suppressions/biome/json.js.map +1 -1
  270. package/dist/rules/suppressions/biome/resolve.js +3 -3
  271. package/dist/rules/suppressions/biome/resolve.js.map +1 -1
  272. package/dist/rules/suppressions/biome/weakenings.d.ts +4 -4
  273. package/dist/rules/suppressions/biome/weakenings.d.ts.map +1 -1
  274. package/dist/rules/suppressions/biome/weakenings.js.map +1 -1
  275. package/dist/rules/suppressions/biome-overrides.d.ts +1 -1
  276. package/dist/rules/suppressions/biome-overrides.js +4 -4
  277. package/dist/rules/suppressions/biome-overrides.js.map +1 -1
  278. package/dist/rules/suppressions/directives.d.ts +1 -1
  279. package/dist/rules/suppressions/directives.d.ts.map +1 -1
  280. package/dist/rules/suppressions/directives.js +11 -11
  281. package/dist/rules/suppressions/directives.js.map +1 -1
  282. package/dist/rules/suppressions/no-double-cast.js +2 -2
  283. package/dist/rules/suppressions/no-double-cast.js.map +1 -1
  284. package/dist/rules/suppressions/no-inline.d.ts +1 -7
  285. package/dist/rules/suppressions/no-inline.d.ts.map +1 -1
  286. package/dist/rules/suppressions/no-inline.js +7 -30
  287. package/dist/rules/suppressions/no-inline.js.map +1 -1
  288. package/dist/rules/suppressions/stylesheet-comments.d.ts +1 -1
  289. package/dist/rules/suppressions/stylesheet-comments.d.ts.map +1 -1
  290. package/dist/rules/suppressions/stylesheet-comments.js +3 -3
  291. package/dist/rules/suppressions/stylesheet-comments.js.map +1 -1
  292. package/dist/rules/syntax.js +4 -4
  293. package/dist/rules/syntax.js.map +1 -1
  294. package/dist/standard-schema.d.ts +1 -1
  295. package/dist/standard-schema.d.ts.map +1 -1
  296. package/dist/vitest.d.ts +3 -0
  297. package/dist/vitest.d.ts.map +1 -0
  298. package/dist/vitest.js +20 -0
  299. package/dist/vitest.js.map +1 -0
  300. package/package.json +46 -31
  301. package/src/baseline/compare.ts +10 -15
  302. package/src/baseline/format.ts +8 -6
  303. package/src/baseline/guard.ts +11 -10
  304. package/src/baseline/legacy.ts +3 -3
  305. package/src/baseline/rewrite.ts +1 -1
  306. package/src/baseline/update.ts +21 -21
  307. package/src/biome/report.ts +35 -0
  308. package/src/biome/run.ts +23 -0
  309. package/src/cli/args.ts +14 -8
  310. package/src/cli/baseline.ts +5 -6
  311. package/src/cli/check.ts +1 -1
  312. package/src/cli/fix.ts +19 -0
  313. package/src/cli/lint.ts +1 -1
  314. package/src/cli/run-main.ts +8 -3
  315. package/src/cli.ts +3 -0
  316. package/src/config/decode.ts +12 -12
  317. package/src/config/load.ts +4 -4
  318. package/src/config/resolve.ts +15 -11
  319. package/src/config.ts +9 -9
  320. package/src/decoded.ts +1 -1
  321. package/src/engine/baseline-file.ts +1 -1
  322. package/src/engine/evaluate.ts +14 -16
  323. package/src/engine/run-rules.ts +8 -7
  324. package/src/engine/session.ts +3 -3
  325. package/src/engine/violation.ts +18 -4
  326. package/src/exceptions/registry.ts +10 -16
  327. package/src/git/base.ts +2 -2
  328. package/src/git/command.ts +3 -3
  329. package/src/git/history.ts +2 -2
  330. package/src/imports/ambient.ts +54 -0
  331. package/src/imports/components.ts +80 -0
  332. package/src/imports/extract.ts +129 -0
  333. package/src/imports/fences/dsl.ts +33 -0
  334. package/src/imports/fences/evaluate.ts +75 -0
  335. package/src/imports/fences/match.ts +148 -0
  336. package/src/imports/fences/model.ts +42 -0
  337. package/src/imports/fences/policy.ts +70 -0
  338. package/src/imports/fences/reach.ts +62 -0
  339. package/src/imports/fences/selectors.ts +37 -0
  340. package/src/imports/fences/vocabulary.ts +51 -0
  341. package/src/imports/generated.ts +95 -0
  342. package/src/imports/glob.ts +142 -0
  343. package/src/imports/graph.ts +81 -0
  344. package/src/imports/paths.ts +28 -0
  345. package/src/imports/pnpm-workspace.ts +134 -0
  346. package/src/imports/projects.ts +106 -0
  347. package/src/imports/resolve.ts +115 -0
  348. package/src/imports/workspace.ts +76 -0
  349. package/src/index.ts +3 -0
  350. package/src/inventory/collect.ts +6 -6
  351. package/src/manifests/sorted.ts +46 -0
  352. package/src/report/guard.ts +2 -2
  353. package/src/report/render.ts +9 -9
  354. package/src/report/stale.ts +3 -3
  355. package/src/rule.ts +13 -12
  356. package/src/rules/biome.ts +47 -0
  357. package/src/rules/built-in.ts +12 -0
  358. package/src/rules/comments/kinds.ts +11 -21
  359. package/src/rules/comments/max-per-file.ts +13 -13
  360. package/src/rules/comments/no-banner.ts +2 -2
  361. package/src/rules/comments/no-environment-pragma.ts +9 -0
  362. package/src/rules/comments/no-jsdoc.ts +3 -3
  363. package/src/rules/comments/no-line-reference.ts +2 -2
  364. package/src/rules/comments/no-pr-reference.ts +6 -6
  365. package/src/rules/comments/no-todo.ts +2 -2
  366. package/src/rules/comments/pattern-rule.ts +6 -6
  367. package/src/rules/comments/scan.ts +13 -13
  368. package/src/rules/imports/cycles.ts +44 -0
  369. package/src/rules/imports/fences.ts +27 -0
  370. package/src/rules/imports/resolvable.ts +23 -0
  371. package/src/rules/manifests-sorted.ts +23 -0
  372. package/src/rules/max-lines.ts +6 -6
  373. package/src/rules/suppressions/biome/configs.ts +12 -12
  374. package/src/rules/suppressions/biome/declarations.ts +7 -7
  375. package/src/rules/suppressions/biome/json.ts +3 -3
  376. package/src/rules/suppressions/biome/resolve.ts +3 -3
  377. package/src/rules/suppressions/biome/weakenings.ts +18 -19
  378. package/src/rules/suppressions/biome-overrides.ts +7 -7
  379. package/src/rules/suppressions/directives.ts +12 -12
  380. package/src/rules/suppressions/no-double-cast.ts +4 -4
  381. package/src/rules/suppressions/no-inline.ts +13 -37
  382. package/src/rules/suppressions/stylesheet-comments.ts +4 -4
  383. package/src/rules/syntax.ts +4 -4
  384. package/src/standard-schema.ts +1 -1
  385. package/src/vitest.ts +22 -0
  386. package/tsconfig/base.json +21 -21
  387. package/tsconfig/package.json +2 -2
@@ -0,0 +1,78 @@
1
+ import { execFile } from "node:child_process";
2
+ import { posix } from "node:path";
3
+ import { promisify } from "node:util";
4
+ import { emptyScope, verdictFor, withIgnoreFile } from "../inventory/ignore-scope.js";
5
+ const IGNORE_FILE = ".gitignore";
6
+ const LEADING_DOT = /^\.\//u;
7
+ const TRAILING_SLASHES = /\/+$/u;
8
+ const NODE_MODULES = "node_modules";
9
+ const NOT_A_REPOSITORY = "not a git repository";
10
+ const PLACEHOLDERS = new Set([".gitkeep", ".keep"]);
11
+ const run = promisify(execFile);
12
+ async function withIgnoreFileIn(reader, scope, directory) {
13
+ const contents = await reader.readText(posix.join(directory, IGNORE_FILE));
14
+ return contents === undefined || contents === "" ? scope : withIgnoreFile(scope, posix.join(reader.root, directory), contents);
15
+ }
16
+ async function ignored(reader, file) {
17
+ const parts = file.split("/");
18
+ let scope = emptyScope;
19
+ for (const index of parts.keys()) {
20
+ scope = await withIgnoreFileIn(reader, scope, parts.slice(0, index).join("/") || ".");
21
+ if (verdictFor(scope, posix.join(reader.root, ...parts.slice(0, index + 1)), index < parts.length - 1) === "ignored") {
22
+ return true;
23
+ }
24
+ }
25
+ return false;
26
+ }
27
+ async function tracked(root, folder) {
28
+ try {
29
+ const { stdout } = await run("git", ["ls-files", "-z", "--", folder], { cwd: root });
30
+ return stdout.split("\0").filter(Boolean);
31
+ }
32
+ catch (error) {
33
+ if (error instanceof Error && "stderr" in error && String(error.stderr).includes(NOT_A_REPOSITORY)) {
34
+ return [];
35
+ }
36
+ throw error;
37
+ }
38
+ }
39
+ function under(folder, path) {
40
+ return path?.startsWith(`${folder}/`) === true;
41
+ }
42
+ async function contentIssue(reader, folder, named) {
43
+ const verdicts = await Promise.all(named.map((file) => ignored(reader, file)));
44
+ if (verdicts.includes(false)) {
45
+ return `"${folder}" is not ignored by git, so it holds source, not generated output`;
46
+ }
47
+ const kept = (await tracked(reader.root, folder)).find((file) => !PLACEHOLDERS.has(posix.basename(file)));
48
+ return kept === undefined ? undefined : `"${folder}" holds files git tracks, such as ${kept}, so it is not generated output`;
49
+ }
50
+ function placeIssue(graph, folder) {
51
+ if (folder === "" || folder.startsWith("../") || posix.isAbsolute(folder)) {
52
+ return `"${folder}" is no folder inside the repository`;
53
+ }
54
+ if (folder.split("/").includes(NODE_MODULES)) {
55
+ return `"${folder}" lies in node_modules, which holds installed packages, not generated output`;
56
+ }
57
+ return graph.edges.some((edge) => edge.to.kind === "file" && under(folder, edge.to.path))
58
+ ? undefined
59
+ : `"${folder}" holds no file that an import names`;
60
+ }
61
+ async function issueOf(reader, graph, folder) {
62
+ const misplaced = placeIssue(graph, folder);
63
+ if (misplaced !== undefined) {
64
+ return misplaced;
65
+ }
66
+ const named = [...new Set(graph.edges.flatMap((edge) => (edge.to.kind === "file" && under(folder, edge.to.path) ? [edge.to.path] : [])))];
67
+ return await contentIssue(reader, folder, named);
68
+ }
69
+ // A generated folder may be empty until its generator runs, so a relative import of a missing file in it resolves.
70
+ export async function withoutGenerated(reader, graph, declared) {
71
+ const folders = declared.map((folder) => posix.normalize(folder).replace(LEADING_DOT, "").replace(TRAILING_SLASHES, ""));
72
+ const issues = (await Promise.all(folders.map((folder) => issueOf(reader, graph, folder)))).flatMap((issue) => issue ?? []);
73
+ if (issues.length > 0) {
74
+ throw new Error(`the generated folders are invalid:\n${issues.map((issue) => ` - ${issue}`).join("\n")}`);
75
+ }
76
+ return graph.unresolved.filter((request) => !folders.some((folder) => under(folder, request.missing)));
77
+ }
78
+ //# sourceMappingURL=generated.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/imports/generated.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function globMatcher(pattern: string): (path: string) => boolean;
2
+ //# sourceMappingURL=glob.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../src/imports/glob.ts"],"names":[],"mappings":"AAuIA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAMtE"}
@@ -0,0 +1,125 @@
1
+ const STAR = "*";
2
+ const GLOBSTAR = "**";
3
+ const DOT = ".";
4
+ const NO_DOT = "(?!\\.)";
5
+ const EXTGLOB = /[?*+@!]\(/u;
6
+ const BRACE_RANGE = /^[^,]*\.\.[^,]*$/u;
7
+ const REGEX_SYNTAX = /[\\^$.*+?()[\]{}|/]/u;
8
+ const CLASS_SYNTAX = /[\\\]^]/gu;
9
+ const BRACE_DEPTH = new Map([
10
+ ["{", 1],
11
+ ["}", -1],
12
+ ]);
13
+ function depthChange(char) {
14
+ return BRACE_DEPTH.get(char ?? "") ?? 0;
15
+ }
16
+ function charSource(char) {
17
+ if (char === STAR) {
18
+ return "[^/]*";
19
+ }
20
+ if (char === "?") {
21
+ return "[^/]";
22
+ }
23
+ return REGEX_SYNTAX.test(char) ? `\\${char}` : char;
24
+ }
25
+ function unreadable(pattern, problem) {
26
+ return new Error(`cannot read the workspace pattern "${pattern}": ${problem}`);
27
+ }
28
+ function closingBrace(text, open) {
29
+ let depth = 0;
30
+ for (let index = open; index < text.length; index += 1) {
31
+ depth += depthChange(text[index]);
32
+ if (depth === 0) {
33
+ return index;
34
+ }
35
+ }
36
+ return -1;
37
+ }
38
+ function choices(body) {
39
+ const parts = [""];
40
+ let depth = 0;
41
+ for (const char of body) {
42
+ depth += depthChange(char);
43
+ if (char === "," && depth === 0) {
44
+ parts.push("");
45
+ }
46
+ else {
47
+ parts[parts.length - 1] += char;
48
+ }
49
+ }
50
+ return parts;
51
+ }
52
+ function expanded(pattern, whole) {
53
+ const open = pattern.indexOf("{");
54
+ if (open === -1) {
55
+ return [pattern];
56
+ }
57
+ const close = closingBrace(pattern, open);
58
+ if (close === -1) {
59
+ throw unreadable(whole, "a { never closes");
60
+ }
61
+ const body = pattern.slice(open + 1, close);
62
+ if (BRACE_RANGE.test(body)) {
63
+ throw unreadable(whole, "brace ranges are not supported");
64
+ }
65
+ const options = choices(body);
66
+ if (options.length < 2) {
67
+ throw unreadable(whole, "a { } needs two or more choices");
68
+ }
69
+ return options.flatMap((option) => expanded(`${pattern.slice(0, open)}${option}${pattern.slice(close + 1)}`, whole));
70
+ }
71
+ function characterClass(segment, start, whole) {
72
+ const negated = segment[start + 1] === "!" || segment[start + 1] === "^";
73
+ const first = start + (negated ? 2 : 1);
74
+ const end = segment.indexOf("]", segment[first] === "]" ? first + 1 : first);
75
+ if (end === -1) {
76
+ throw unreadable(whole, "a [ never closes");
77
+ }
78
+ const body = segment.slice(first, end);
79
+ if (body.includes("[:")) {
80
+ throw unreadable(whole, "character class names are not supported");
81
+ }
82
+ return { end, source: `[${negated ? "^" : ""}${body.replace(CLASS_SYNTAX, "\\$&")}]` };
83
+ }
84
+ function segmentOf(segment, whole) {
85
+ if (segment === GLOBSTAR) {
86
+ return GLOBSTAR;
87
+ }
88
+ if (EXTGLOB.test(segment)) {
89
+ throw unreadable(whole, "extended globs are not supported");
90
+ }
91
+ let source = "";
92
+ for (let index = 0; index < segment.length; index += 1) {
93
+ const char = segment[index] ?? "";
94
+ if (char === "[") {
95
+ const found = characterClass(segment, index, whole);
96
+ source += found.source;
97
+ index = found.end;
98
+ }
99
+ else {
100
+ source += charSource(char);
101
+ }
102
+ }
103
+ return new RegExp(`^${segment.startsWith(DOT) ? "" : NO_DOT}${source}$`, "u");
104
+ }
105
+ function segmentsMatch(pattern, path) {
106
+ const [first, ...rest] = pattern;
107
+ if (first === undefined) {
108
+ return path.length === 0;
109
+ }
110
+ if (first === GLOBSTAR) {
111
+ const hidden = path.findIndex((segment) => segment.startsWith(DOT));
112
+ const reachable = hidden === -1 ? path.length : hidden;
113
+ return [...path.keys(), path.length].some((skipped) => skipped <= reachable && segmentsMatch(rest, path.slice(skipped)));
114
+ }
115
+ const [head, ...tail] = path;
116
+ return head !== undefined && first.test(head) && segmentsMatch(rest, tail);
117
+ }
118
+ export function globMatcher(pattern) {
119
+ if (pattern.includes("\\")) {
120
+ throw unreadable(pattern, "escapes are not supported");
121
+ }
122
+ const alternatives = expanded(pattern, pattern).map((alternative) => alternative.split("/").map((segment) => segmentOf(segment, pattern)));
123
+ return (path) => alternatives.some((segments) => segmentsMatch(segments, path.split("/")));
124
+ }
125
+ //# sourceMappingURL=glob.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"glob.js","sourceRoot":"","sources":["../../src/imports/glob.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { RuleInputs } from "../rule.ts";
2
+ import { type ImportKind } from "./extract.ts";
3
+ import { type Endpoint } from "./resolve.ts";
4
+ import { type WorkspacePackage } from "./workspace.ts";
5
+ export interface ImportEdge {
6
+ readonly from: string;
7
+ readonly kind: ImportKind;
8
+ readonly line: number;
9
+ readonly specifier: string;
10
+ readonly to: Endpoint;
11
+ readonly type: boolean;
12
+ }
13
+ export type UnresolvedImport = Omit<ImportEdge, "to"> & {
14
+ readonly missing: string | undefined;
15
+ };
16
+ export interface ImportGraph {
17
+ readonly edges: readonly ImportEdge[];
18
+ readonly modules: readonly string[];
19
+ readonly packages: readonly WorkspacePackage[];
20
+ readonly unresolved: readonly UnresolvedImport[];
21
+ }
22
+ export declare function importGraph(inputs: RuleInputs): Promise<ImportGraph>;
23
+ //# sourceMappingURL=graph.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/imports/graph.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,YAAY,CAAC;AAGzD,OAAO,EAAE,KAAK,UAAU,EAAiC,MAAM,cAAc,CAAC;AAE9E,OAAO,EAAE,KAAK,QAAQ,EAAoC,MAAM,cAAc,CAAC;AAC/E,OAAO,EAAE,KAAK,gBAAgB,EAAqB,MAAM,gBAAgB,CAAC;AAE1E,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;CACvB;AAED,MAAM,MAAM,gBAAgB,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,GAAG;IAAE,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AAEjG,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,UAAU,EAAE,CAAC;IACtC,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,EAAE,SAAS,gBAAgB,EAAE,CAAC;IAC/C,QAAQ,CAAC,UAAU,EAAE,SAAS,gBAAgB,EAAE,CAAC;CACjD;AAkDD,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC,CAIpE"}
@@ -0,0 +1,56 @@
1
+ import { realpathSync } from "node:fs";
2
+ import { join, posix } from "node:path";
3
+ import { parse } from "../rules/syntax.js";
4
+ import { ambientModules } from "./ambient.js";
5
+ import { importsOf } from "./extract.js";
6
+ import { projectsFor } from "./projects.js";
7
+ import { isDeclarationFile, resolveImport } from "./resolve.js";
8
+ import { workspacePackages } from "./workspace.js";
9
+ const QUERY = /\?.*$/u;
10
+ const NO_MODULES = "the import graph covers no modules: the sources hold no TypeScript or JavaScript module. Point `sources` at the code, or turn the imports rules off.";
11
+ // A relative import of a missing file still names a path, so fences see it before its generator writes it.
12
+ function missingTarget(from, request) {
13
+ const relative = request.kind === "path-reference" || request.specifier.startsWith("./") || request.specifier.startsWith("../");
14
+ const target = posix.join(posix.dirname(from), request.specifier.replace(QUERY, ""));
15
+ return relative && !target.startsWith("../") ? target : undefined;
16
+ }
17
+ function walk(inputs, root) {
18
+ const projectOf = projectsFor(root);
19
+ const parsed = inputs.sources.flatMap((file) => {
20
+ const syntax = parse(file);
21
+ return syntax === undefined ? [] : [{ file, path: join(root, file.path), syntax }];
22
+ });
23
+ const ambient = ambientModules(parsed);
24
+ const edges = [];
25
+ const unresolved = [];
26
+ for (const { file, path, syntax } of parsed) {
27
+ const project = projectOf(path);
28
+ for (const request of importsOf(syntax, isDeclarationFile(file.path))) {
29
+ const to = resolveImport(root, ambient, request, path, project);
30
+ if (to === undefined) {
31
+ const missing = missingTarget(file.path, request);
32
+ unresolved.push({ ...request, from: file.path, missing });
33
+ edges.push(...(missing === undefined ? [] : [{ ...request, from: file.path, to: { kind: "file", path: missing } }]));
34
+ }
35
+ else {
36
+ edges.push({ ...request, from: file.path, to });
37
+ }
38
+ }
39
+ }
40
+ return { edges, modules: parsed.map(({ file }) => file.path), unresolved };
41
+ }
42
+ async function build(inputs) {
43
+ const walked = walk(inputs, realpathSync(inputs.root));
44
+ if (walked.modules.length === 0) {
45
+ throw new Error(NO_MODULES);
46
+ }
47
+ return { ...walked, packages: await workspacePackages(inputs) };
48
+ }
49
+ const graphs = new WeakMap();
50
+ // The three imports rules run on one scan, so they share the graph built from its sources.
51
+ export function importGraph(inputs) {
52
+ const known = graphs.get(inputs.sources) ?? build(inputs);
53
+ graphs.set(inputs.sources, known);
54
+ return known;
55
+ }
56
+ //# sourceMappingURL=graph.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../../src/imports/graph.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function shortestPath(start: string, neighbours: (node: string) => readonly string[], goal: (node: string) => boolean): readonly string[] | undefined;
2
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/imports/paths.ts"],"names":[],"mappings":"AAQA,wBAAgB,YAAY,CAC3B,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,SAAS,MAAM,EAAE,EAC/C,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAC7B,SAAS,MAAM,EAAE,GAAG,SAAS,CAe/B"}
@@ -0,0 +1,24 @@
1
+ function trail(previous, node) {
2
+ const path = [];
3
+ for (let step = node; step !== undefined; step = previous.get(step)) {
4
+ path.unshift(step);
5
+ }
6
+ return path;
7
+ }
8
+ export function shortestPath(start, neighbours, goal) {
9
+ const previous = new Map([[start, undefined]]);
10
+ const queue = [start];
11
+ for (const node of queue) {
12
+ for (const next of neighbours(node)) {
13
+ if (goal(next)) {
14
+ return [...trail(previous, node), next];
15
+ }
16
+ if (!previous.has(next)) {
17
+ previous.set(next, node);
18
+ queue.push(next);
19
+ }
20
+ }
21
+ }
22
+ return undefined;
23
+ }
24
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/imports/paths.ts"],"names":[],"mappings":"AAAA,SAAS,KAAK,CAAC,QAAiD,EAAE,IAAY;IAC7E,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,IAAI,IAAI,GAAuB,IAAI,EAAE,IAAI,KAAK,SAAS,EAAE,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACzF,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,UAAU,YAAY,CAC3B,KAAa,EACb,UAA+C,EAC/C,IAA+B;IAE/B,MAAM,QAAQ,GAAG,IAAI,GAAG,CAA6B,CAAC,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAC3E,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC;IACtB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,MAAM,IAAI,IAAI,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACzB,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACzB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAClB,CAAC;QACF,CAAC;IACF,CAAC;IACD,OAAO,SAAS,CAAC;AAClB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function pnpmWorkspacePatterns(text: string): readonly string[];
2
+ //# sourceMappingURL=pnpm-workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnpm-workspace.d.ts","sourceRoot":"","sources":["../../src/imports/pnpm-workspace.ts"],"names":[],"mappings":"AAqHA,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAgBrE"}
@@ -0,0 +1,122 @@
1
+ const KEY = /^(?:packages|"packages"|'packages')\s*:/u;
2
+ const ITEM = "-";
3
+ const SPACE = /\s/u;
4
+ const LINE_BREAK = /\r?\n/u;
5
+ function failure(problem, cause) {
6
+ return new Error(`pnpm-workspace.yaml: ${problem}`, { cause });
7
+ }
8
+ function withoutComment(line) {
9
+ let quote;
10
+ for (let index = 0; index < line.length; index += 1) {
11
+ const char = line[index];
12
+ if (quote !== undefined) {
13
+ quote = char === quote ? undefined : quote;
14
+ }
15
+ else if (char === '"' || char === "'") {
16
+ quote = char;
17
+ }
18
+ else if (char === "#" && (index === 0 || SPACE.test(line[index - 1] ?? ""))) {
19
+ return line.slice(0, index).trimEnd();
20
+ }
21
+ }
22
+ return line.trimEnd();
23
+ }
24
+ function scalar(raw) {
25
+ const value = raw.trim();
26
+ if (value.startsWith('"') && value.endsWith('"') && value.length > 1) {
27
+ try {
28
+ return String(JSON.parse(value));
29
+ }
30
+ catch (error) {
31
+ throw failure(`cannot read "${value}" in packages`, error);
32
+ }
33
+ }
34
+ if (value.startsWith("'") && value.endsWith("'") && value.length > 1) {
35
+ return value.slice(1, -1).replaceAll("''", "'");
36
+ }
37
+ if (value === "" || value.includes(": ") || value.endsWith(":") || ["[", "{", "'", '"'].some((opening) => value.startsWith(opening))) {
38
+ throw failure(`cannot read "${value}" in packages`);
39
+ }
40
+ return value;
41
+ }
42
+ const FLOW_INDICATOR = /[{}[\]]/u;
43
+ function flowScalar(raw) {
44
+ const value = raw.trim();
45
+ const quoted = value.startsWith('"') || value.startsWith("'");
46
+ if (!quoted && FLOW_INDICATOR.test(value)) {
47
+ throw failure(`cannot read "${value}" in packages; quote a pattern that holds { } [ ] or ,`);
48
+ }
49
+ return scalar(value);
50
+ }
51
+ function closed(scan, rest) {
52
+ if (rest.trim() !== "") {
53
+ throw failure(`cannot read "${rest.trim()}" after the packages list`);
54
+ }
55
+ return [...scan.entries, scan.current].filter((entry) => entry.trim() !== "").map(flowScalar);
56
+ }
57
+ function scanned(scan, char) {
58
+ if (scan.quote !== undefined) {
59
+ scan.quote = char === scan.quote ? undefined : scan.quote;
60
+ }
61
+ else if (char === "]") {
62
+ return "close";
63
+ }
64
+ else if (char === ",") {
65
+ scan.entries.push(scan.current);
66
+ scan.current = "";
67
+ return undefined;
68
+ }
69
+ else if (char === '"' || char === "'") {
70
+ scan.quote = char;
71
+ }
72
+ scan.current += char;
73
+ return undefined;
74
+ }
75
+ function flowList(lines) {
76
+ const scan = { current: "", entries: [], quote: undefined };
77
+ for (const [number, line] of lines.map(withoutComment).entries()) {
78
+ for (let index = number === 0 ? 1 : 0; index < line.length; index += 1) {
79
+ if (scanned(scan, line[index] ?? "") === "close") {
80
+ return closed(scan, line.slice(index + 1));
81
+ }
82
+ }
83
+ scan.current += " ";
84
+ }
85
+ throw failure("the packages list never closes");
86
+ }
87
+ function blockList(lines) {
88
+ const patterns = [];
89
+ for (const line of lines.map(withoutComment)) {
90
+ const trimmed = line.trim();
91
+ if (trimmed === "") {
92
+ continue;
93
+ }
94
+ const item = trimmed === ITEM || trimmed.startsWith(`${ITEM} `);
95
+ if (!(item || line.startsWith(" ") || line.startsWith("\t"))) {
96
+ break;
97
+ }
98
+ if (!item) {
99
+ throw failure(`cannot read "${trimmed}" in packages`);
100
+ }
101
+ patterns.push(scalar(trimmed.slice(ITEM.length)));
102
+ }
103
+ return patterns;
104
+ }
105
+ export function pnpmWorkspacePatterns(text) {
106
+ const lines = text.split(LINE_BREAK);
107
+ const start = lines.findIndex((line) => KEY.test(line));
108
+ if (start === -1) {
109
+ return [];
110
+ }
111
+ const rest = withoutComment(lines[start] ?? "")
112
+ .replace(KEY, "")
113
+ .trim();
114
+ if (rest.startsWith("[")) {
115
+ return flowList([rest, ...lines.slice(start + 1)]);
116
+ }
117
+ if (rest !== "") {
118
+ throw failure(`cannot read "${rest}" in packages`);
119
+ }
120
+ return blockList(lines.slice(start + 1));
121
+ }
122
+ //# sourceMappingURL=pnpm-workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pnpm-workspace.js","sourceRoot":"","sources":["../../src/imports/pnpm-workspace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import ts from "typescript";
2
+ export interface Project {
3
+ readonly cache: ts.ModuleResolutionCache;
4
+ readonly files: ReadonlySet<string>;
5
+ readonly options: ts.CompilerOptions;
6
+ readonly typesCache: ts.ModuleResolutionCache;
7
+ readonly typesOptions: ts.CompilerOptions;
8
+ }
9
+ export declare function projectsFor(root: string): (file: string) => Project;
10
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../src/imports/projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC,qBAAqB,CAAC;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,eAAe,CAAC;IACrC,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,qBAAqB,CAAC;IAC9C,QAAQ,CAAC,YAAY,EAAE,EAAE,CAAC,eAAe,CAAC;CAC1C;AA4ED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAoBnE"}
@@ -0,0 +1,83 @@
1
+ import { dirname, join, relative } from "node:path";
2
+ import ts from "typescript";
3
+ const CONFIG = "tsconfig.json";
4
+ const SOURCE_CONDITION = "source";
5
+ const quietHost = { ...ts.sys, onUnRecoverableConfigFileDiagnostic: () => undefined };
6
+ function resolutionOptions(options, declarations) {
7
+ return {
8
+ ...options,
9
+ allowArbitraryExtensions: declarations,
10
+ allowImportingTsExtensions: true,
11
+ allowJs: true,
12
+ customConditions: [...new Set([SOURCE_CONDITION, ...(options.customConditions ?? [])])],
13
+ module: ts.ModuleKind.ESNext,
14
+ moduleResolution: ts.ModuleResolutionKind.Bundler,
15
+ noDtsResolution: !declarations,
16
+ resolveJsonModule: true,
17
+ resolvePackageJsonExports: true,
18
+ resolvePackageJsonImports: true,
19
+ };
20
+ }
21
+ function projectOf(root, parsed) {
22
+ const runtime = resolutionOptions(parsed?.options ?? {}, false);
23
+ const types = resolutionOptions(parsed?.options ?? {}, true);
24
+ return {
25
+ cache: ts.createModuleResolutionCache(root, (file) => file, runtime),
26
+ files: parsed?.files ?? new Set(),
27
+ options: runtime,
28
+ typesCache: ts.createModuleResolutionCache(root, (file) => file, types),
29
+ typesOptions: types,
30
+ };
31
+ }
32
+ function parse(path) {
33
+ const parsed = ts.getParsedCommandLineOfConfigFile(path, {}, quietHost);
34
+ return {
35
+ files: new Set(parsed?.fileNames ?? []),
36
+ key: path,
37
+ options: parsed?.options ?? {},
38
+ references: (parsed?.projectReferences ?? []).map((reference) => ts.resolveProjectReferencePath(reference)),
39
+ };
40
+ }
41
+ function nearestConfig(root, file) {
42
+ for (let directory = dirname(file); !relative(root, directory).startsWith(".."); directory = dirname(directory)) {
43
+ const candidate = join(directory, CONFIG);
44
+ if (ts.sys.fileExists(candidate)) {
45
+ return candidate;
46
+ }
47
+ if (directory === root) {
48
+ return undefined;
49
+ }
50
+ }
51
+ return undefined;
52
+ }
53
+ function memo(compute) {
54
+ const known = new Map();
55
+ return (key) => {
56
+ const value = known.get(key) ?? compute(key);
57
+ known.set(key, value);
58
+ return value;
59
+ };
60
+ }
61
+ // A file resolves with the options of the project that includes it: the nearest tsconfig.json, or a project it references.
62
+ export function projectsFor(root) {
63
+ const parsedAt = memo(parse);
64
+ function withReferences(path, seen) {
65
+ if (seen.has(path)) {
66
+ return [];
67
+ }
68
+ seen.add(path);
69
+ const project = parsedAt(path);
70
+ return [project, ...project.references.flatMap((reference) => withReferences(reference, seen))];
71
+ }
72
+ const familyAt = memo((config) => withReferences(config, new Set()));
73
+ const projects = new Map();
74
+ return (file) => {
75
+ const config = nearestConfig(root, file);
76
+ const owner = config === undefined ? undefined : (familyAt(config).find((candidate) => candidate.files.has(file)) ?? parsedAt(config));
77
+ const key = owner?.key ?? "";
78
+ const project = projects.get(key) ?? projectOf(root, owner);
79
+ projects.set(key, project);
80
+ return project;
81
+ };
82
+ }
83
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../src/imports/projects.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Ambient } from "./ambient.ts";
2
+ import type { ImportRequest } from "./extract.ts";
3
+ import type { Project } from "./projects.ts";
4
+ export type Endpoint = {
5
+ readonly kind: "file";
6
+ readonly path: string;
7
+ } | {
8
+ readonly kind: "external";
9
+ readonly package: string;
10
+ readonly specifier: string;
11
+ };
12
+ export declare function builtinName(specifier: string): string | undefined;
13
+ export declare function packageNameOf(specifier: string): string;
14
+ export declare function isDeclarationFile(path: string): boolean;
15
+ export declare function resolveImport(root: string, ambient: Ambient, request: ImportRequest, from: string, project: Project): Endpoint | undefined;
16
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/imports/resolve.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,MAAM,QAAQ,GACjB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAYvF,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKjE;AAmBD,wBAAgB,aAAa,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEvD;AAYD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvD;AAuCD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,SAAS,CAY1I"}