@shivaedev/quality 0.17.0 → 0.19.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 (267) hide show
  1. package/CHANGELOG.md +54 -0
  2. package/README.md +151 -508
  3. package/biome/declarations.json +0 -45
  4. package/biome/plugins/constant-names.grit +1 -1
  5. package/biome/plugins/effect-fn-functions.grit +1 -1
  6. package/biome/preset.json +16 -9
  7. package/dist/baseline/compare.d.ts.map +1 -1
  8. package/dist/baseline/format.d.ts.map +1 -1
  9. package/dist/baseline/legacy.d.ts.map +1 -1
  10. package/dist/baseline/rewrite.d.ts.map +1 -1
  11. package/dist/baseline/update.d.ts.map +1 -1
  12. package/dist/baseline/update.js.map +1 -1
  13. package/dist/biome/nativeEffectCall.d.ts +4 -0
  14. package/dist/biome/nativeEffectCall.d.ts.map +1 -0
  15. package/dist/biome/nativeEffectCall.js +34 -0
  16. package/dist/biome/nativeEffectCall.js.map +1 -0
  17. package/dist/biome/recognizeDiagnostics.d.ts +3 -0
  18. package/dist/biome/recognizeDiagnostics.d.ts.map +1 -0
  19. package/dist/biome/recognizeDiagnostics.js +58 -0
  20. package/dist/biome/recognizeDiagnostics.js.map +1 -0
  21. package/dist/biome/report.d.ts +10 -0
  22. package/dist/biome/report.d.ts.map +1 -1
  23. package/dist/biome/report.js +23 -5
  24. package/dist/biome/report.js.map +1 -1
  25. package/dist/biome/run.js.map +1 -1
  26. package/dist/biome/syntax.d.ts +12 -0
  27. package/dist/biome/syntax.d.ts.map +1 -0
  28. package/dist/biome/syntax.js +29 -0
  29. package/dist/biome/syntax.js.map +1 -0
  30. package/dist/cli/args.d.ts +10 -1
  31. package/dist/cli/args.d.ts.map +1 -1
  32. package/dist/cli/args.js +25 -3
  33. package/dist/cli/args.js.map +1 -1
  34. package/dist/cli/baseline.d.ts +1 -1
  35. package/dist/cli/baseline.d.ts.map +1 -1
  36. package/dist/cli/baseline.js.map +1 -1
  37. package/dist/cli/fix.d.ts +6 -6
  38. package/dist/cli/fix.d.ts.map +1 -1
  39. package/dist/cli/fix.js +1 -1
  40. package/dist/cli/fix.js.map +1 -1
  41. package/dist/cli/lint.d.ts.map +1 -1
  42. package/dist/cli/migrate.d.ts.map +1 -1
  43. package/dist/cli/run-main.d.ts +1 -1
  44. package/dist/cli/run-main.d.ts.map +1 -1
  45. package/dist/cli/run-main.js.map +1 -1
  46. package/dist/cli/shrink.d.ts.map +1 -1
  47. package/dist/cli.js +14 -0
  48. package/dist/cli.js.map +1 -1
  49. package/dist/config/decode.d.ts +3 -3
  50. package/dist/config/decode.d.ts.map +1 -1
  51. package/dist/config/decode.js +5 -2
  52. package/dist/config/decode.js.map +1 -1
  53. package/dist/config/load.d.ts.map +1 -1
  54. package/dist/config/load.js +11 -6
  55. package/dist/config/load.js.map +1 -1
  56. package/dist/config/resolve.d.ts.map +1 -1
  57. package/dist/config/resolve.js +8 -12
  58. package/dist/config/resolve.js.map +1 -1
  59. package/dist/config.d.ts +10 -11
  60. package/dist/config.d.ts.map +1 -1
  61. package/dist/config.js.map +1 -1
  62. package/dist/decoded.d.ts +4 -4
  63. package/dist/decoded.d.ts.map +1 -1
  64. package/dist/decoded.js.map +1 -1
  65. package/dist/engine/baseline-file.d.ts.map +1 -1
  66. package/dist/engine/evaluate.d.ts.map +1 -1
  67. package/dist/engine/run-rules.d.ts.map +1 -1
  68. package/dist/engine/session.d.ts.map +1 -1
  69. package/dist/engine/session.js.map +1 -1
  70. package/dist/engine/violation.d.ts +1 -1
  71. package/dist/engine/violation.d.ts.map +1 -1
  72. package/dist/engine/violation.js.map +1 -1
  73. package/dist/exceptions/registry.d.ts.map +1 -1
  74. package/dist/git/base.d.ts.map +1 -1
  75. package/dist/git/command.d.ts.map +1 -1
  76. package/dist/git/history.d.ts.map +1 -1
  77. package/dist/hooks/command.d.ts +13 -0
  78. package/dist/hooks/command.d.ts.map +1 -0
  79. package/dist/hooks/command.js +20 -0
  80. package/dist/hooks/command.js.map +1 -0
  81. package/dist/hooks/install.d.ts +11 -0
  82. package/dist/hooks/install.d.ts.map +1 -0
  83. package/dist/hooks/install.js +52 -0
  84. package/dist/hooks/install.js.map +1 -0
  85. package/dist/hooks/location.d.ts +9 -0
  86. package/dist/hooks/location.d.ts.map +1 -0
  87. package/dist/hooks/location.js +22 -0
  88. package/dist/hooks/location.js.map +1 -0
  89. package/dist/hooks/preCommit.d.ts +5 -0
  90. package/dist/hooks/preCommit.d.ts.map +1 -0
  91. package/dist/hooks/preCommit.js +50 -0
  92. package/dist/hooks/preCommit.js.map +1 -0
  93. package/dist/hooks/shim.d.ts +4 -0
  94. package/dist/hooks/shim.d.ts.map +1 -0
  95. package/dist/hooks/shim.js +26 -0
  96. package/dist/hooks/shim.js.map +1 -0
  97. package/dist/hooks/uninstall.d.ts +4 -0
  98. package/dist/hooks/uninstall.d.ts.map +1 -0
  99. package/dist/hooks/uninstall.js +19 -0
  100. package/dist/hooks/uninstall.js.map +1 -0
  101. package/dist/imports/browserGlobals.d.ts +3 -0
  102. package/dist/imports/browserGlobals.d.ts.map +1 -0
  103. package/dist/imports/browserGlobals.js +125 -0
  104. package/dist/imports/browserGlobals.js.map +1 -0
  105. package/dist/imports/browserNames.d.ts +2 -0
  106. package/dist/imports/browserNames.d.ts.map +1 -0
  107. package/dist/imports/browserNames.js +78 -0
  108. package/dist/imports/browserNames.js.map +1 -0
  109. package/dist/imports/fences/check.d.ts +4 -0
  110. package/dist/imports/fences/check.d.ts.map +1 -0
  111. package/dist/imports/fences/check.js +10 -0
  112. package/dist/imports/fences/check.js.map +1 -0
  113. package/dist/imports/fences/declarations.d.ts +5 -0
  114. package/dist/imports/fences/declarations.d.ts.map +1 -0
  115. package/dist/imports/fences/declarations.js +29 -0
  116. package/dist/imports/fences/declarations.js.map +1 -0
  117. package/dist/imports/fences/discover.d.ts +5 -0
  118. package/dist/imports/fences/discover.d.ts.map +1 -0
  119. package/dist/imports/fences/discover.js +41 -0
  120. package/dist/imports/fences/discover.js.map +1 -0
  121. package/dist/imports/fences/match.js.map +1 -1
  122. package/dist/imports/graph.js +2 -2
  123. package/dist/imports/graph.js.map +1 -1
  124. package/dist/imports/projects.js.map +1 -1
  125. package/dist/imports/runtime.d.ts +5 -0
  126. package/dist/imports/runtime.d.ts.map +1 -0
  127. package/dist/imports/runtime.js +32 -0
  128. package/dist/imports/runtime.js.map +1 -0
  129. package/dist/imports/workspace.d.ts +1 -1
  130. package/dist/imports/workspace.d.ts.map +1 -1
  131. package/dist/imports/workspace.js +5 -1
  132. package/dist/imports/workspace.js.map +1 -1
  133. package/dist/inventory/collect.d.ts.map +1 -1
  134. package/dist/inventory/collect.js +8 -1
  135. package/dist/inventory/collect.js.map +1 -1
  136. package/dist/inventory/filesystem.d.ts.map +1 -1
  137. package/dist/inventory/ignore-scope.d.ts.map +1 -1
  138. package/dist/inventory/trackedPaths.d.ts +3 -0
  139. package/dist/inventory/trackedPaths.d.ts.map +1 -0
  140. package/dist/inventory/trackedPaths.js +26 -0
  141. package/dist/inventory/trackedPaths.js.map +1 -0
  142. package/dist/inventory/walk.d.ts +4 -4
  143. package/dist/inventory/walk.d.ts.map +1 -1
  144. package/dist/inventory/walk.js +32 -12
  145. package/dist/inventory/walk.js.map +1 -1
  146. package/dist/naming/testName.d.ts.map +1 -1
  147. package/dist/report/plural.d.ts.map +1 -1
  148. package/dist/report/render.d.ts.map +1 -1
  149. package/dist/report/stale.d.ts.map +1 -1
  150. package/dist/rules/built-in.d.ts +2 -3
  151. package/dist/rules/built-in.d.ts.map +1 -1
  152. package/dist/rules/built-in.js +6 -0
  153. package/dist/rules/built-in.js.map +1 -1
  154. package/dist/rules/comments/kinds.d.ts.map +1 -1
  155. package/dist/rules/comments/max-per-file.js +1 -1
  156. package/dist/rules/comments/max-per-file.js.map +1 -1
  157. package/dist/rules/comments/pattern-rule.d.ts.map +1 -1
  158. package/dist/rules/comments/scan.d.ts.map +1 -1
  159. package/dist/rules/files/folderNames.js +1 -1
  160. package/dist/rules/files/folderNames.js.map +1 -1
  161. package/dist/rules/files/otherNames.d.ts.map +1 -1
  162. package/dist/rules/files/otherNames.js +1 -10
  163. package/dist/rules/files/otherNames.js.map +1 -1
  164. package/dist/rules/imports/bundleInputs.d.ts +7 -0
  165. package/dist/rules/imports/bundleInputs.d.ts.map +1 -0
  166. package/dist/rules/imports/bundleInputs.js +77 -0
  167. package/dist/rules/imports/bundleInputs.js.map +1 -0
  168. package/dist/rules/imports/fences.d.ts +1 -2
  169. package/dist/rules/imports/fences.d.ts.map +1 -1
  170. package/dist/rules/imports/fences.js +4 -14
  171. package/dist/rules/imports/fences.js.map +1 -1
  172. package/dist/rules/imports/manifest.d.ts +2 -0
  173. package/dist/rules/imports/manifest.d.ts.map +1 -0
  174. package/dist/rules/imports/manifest.js +98 -0
  175. package/dist/rules/imports/manifest.js.map +1 -0
  176. package/dist/rules/imports/noTestCode.d.ts +2 -0
  177. package/dist/rules/imports/noTestCode.d.ts.map +1 -0
  178. package/dist/rules/imports/noTestCode.js +17 -0
  179. package/dist/rules/imports/noTestCode.js.map +1 -0
  180. package/dist/rules/imports/runtime.d.ts +2 -0
  181. package/dist/rules/imports/runtime.d.ts.map +1 -0
  182. package/dist/rules/imports/runtime.js +41 -0
  183. package/dist/rules/imports/runtime.js.map +1 -0
  184. package/dist/rules/max-lines.d.ts +0 -1
  185. package/dist/rules/max-lines.d.ts.map +1 -1
  186. package/dist/rules/max-lines.js +3 -10
  187. package/dist/rules/max-lines.js.map +1 -1
  188. package/dist/rules/suppressions/biome/configs.d.ts.map +1 -1
  189. package/dist/rules/suppressions/biome/declarations.d.ts.map +1 -1
  190. package/dist/rules/suppressions/biome/json.d.ts.map +1 -1
  191. package/dist/rules/suppressions/biome/resolve.d.ts.map +1 -1
  192. package/dist/rules/suppressions/biome/weakenings.d.ts.map +1 -1
  193. package/dist/rules/suppressions/biome-overrides.d.ts.map +1 -1
  194. package/dist/rules/suppressions/biome-overrides.js +21 -4
  195. package/dist/rules/suppressions/biome-overrides.js.map +1 -1
  196. package/dist/rules/suppressions/biomeRecommended.js +2 -2
  197. package/dist/rules/suppressions/biomeRecommended.js.map +1 -1
  198. package/dist/rules/suppressions/directives.d.ts.map +1 -1
  199. package/dist/rules/suppressions/no-inline.js +1 -1
  200. package/dist/rules/suppressions/no-inline.js.map +1 -1
  201. package/dist/rules/suppressions/stylesheet-comments.d.ts.map +1 -1
  202. package/dist/rules/syntax.d.ts.map +1 -1
  203. package/dist/standard-schema.d.ts +1 -1
  204. package/dist/standard-schema.d.ts.map +1 -1
  205. package/dist/standard-schema.js +10 -2
  206. package/dist/standard-schema.js.map +1 -1
  207. package/dist/vitest.d.ts +1 -3
  208. package/dist/vitest.d.ts.map +1 -1
  209. package/dist/vitest.js +11 -6
  210. package/dist/vitest.js.map +1 -1
  211. package/docs/debt-and-hooks.md +90 -0
  212. package/docs/modules.md +253 -0
  213. package/docs/naming.md +126 -0
  214. package/docs/north-star.md +61 -0
  215. package/docs/roadmap.md +37 -0
  216. package/docs/rules.md +308 -0
  217. package/docs/tooling.md +120 -0
  218. package/package.json +8 -6
  219. package/src/biome/nativeEffectCall.ts +45 -0
  220. package/src/biome/recognizeDiagnostics.ts +67 -0
  221. package/src/biome/report.ts +24 -6
  222. package/src/biome/syntax.ts +36 -0
  223. package/src/cli/args.ts +29 -3
  224. package/src/cli/baseline.ts +3 -3
  225. package/src/cli/fix.ts +13 -13
  226. package/src/cli/run-main.ts +1 -1
  227. package/src/cli.ts +14 -0
  228. package/src/config/decode.ts +7 -2
  229. package/src/config/load.ts +15 -6
  230. package/src/config/resolve.ts +10 -15
  231. package/src/config.ts +8 -9
  232. package/src/decoded.ts +3 -3
  233. package/src/engine/session.ts +3 -3
  234. package/src/engine/violation.ts +2 -2
  235. package/src/hooks/command.ts +34 -0
  236. package/src/hooks/install.ts +69 -0
  237. package/src/hooks/location.ts +28 -0
  238. package/src/hooks/preCommit.ts +68 -0
  239. package/src/hooks/shim.ts +28 -0
  240. package/src/hooks/uninstall.ts +19 -0
  241. package/src/imports/browserGlobals.ts +142 -0
  242. package/src/imports/browserNames.ts +80 -0
  243. package/src/imports/fences/check.ts +12 -0
  244. package/src/imports/fences/declarations.ts +38 -0
  245. package/src/imports/fences/discover.ts +37 -0
  246. package/src/imports/graph.ts +2 -2
  247. package/src/imports/projects.ts +2 -2
  248. package/src/imports/runtime.ts +37 -0
  249. package/src/imports/workspace.ts +7 -2
  250. package/src/inventory/collect.ts +8 -1
  251. package/src/inventory/trackedPaths.ts +28 -0
  252. package/src/inventory/walk.ts +65 -36
  253. package/src/rules/built-in.ts +6 -0
  254. package/src/rules/comments/max-per-file.ts +1 -1
  255. package/src/rules/files/folderNames.ts +1 -1
  256. package/src/rules/files/otherNames.ts +1 -10
  257. package/src/rules/imports/bundleInputs.ts +94 -0
  258. package/src/rules/imports/fences.ts +4 -16
  259. package/src/rules/imports/manifest.ts +116 -0
  260. package/src/rules/imports/noTestCode.ts +18 -0
  261. package/src/rules/imports/runtime.ts +43 -0
  262. package/src/rules/max-lines.ts +4 -10
  263. package/src/rules/suppressions/biome-overrides.ts +31 -4
  264. package/src/rules/suppressions/biomeRecommended.ts +2 -2
  265. package/src/rules/suppressions/no-inline.ts +1 -1
  266. package/src/standard-schema.ts +11 -3
  267. package/src/vitest.ts +11 -6
@@ -1 +1 @@
1
- {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/engine/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5E,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED,eAAO,MAAM,QAAQ,GACpB,YAAY,SAAS,SAAS,EAAE,EAChC,UAAU,SAAS,aAAa,EAAE,EAClC,UAAU,SAAS,aAAa,EAAE,EAClC,OAAO,SAAS,KACd,OAcF,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,SAAS,OAAO,KAAG,OAC8D,CAAC"}
1
+ {"version":3,"file":"evaluate.d.ts","sourceRoot":"","sources":["../../src/engine/evaluate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,KAAK,UAAU,EAAE,KAAK,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAiB,KAAK,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACrG,OAAO,EAAc,KAAK,SAAS,EAAE,KAAK,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE5E,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;IACtC,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,QAAQ,CAAC,aAAa,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACtD,QAAQ,CAAC,QAAQ,EAAE,SAAS,SAAS,EAAE,CAAC;CACxC;AAED,eAAO,MAAM,QAAQ,eACR,SAAS,SAAS,EAAE,YACtB,SAAS,aAAa,EAAE,YACxB,SAAS,aAAa,EAAE,SAC3B,SAAS,KACd,OAcF,CAAC;AAEF,eAAO,MAAM,MAAM,YAAa,OAAO,KAAG,OAC8D,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-rules.d.ts","sourceRoot":"","sources":["../../src/engine/run-rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAW,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC5B;AAuBD,eAAO,MAAM,QAAQ,GAAI,OAAO,SAAS,UAAU,EAAE,EAAE,QAAQ,UAAU,KAAG,MAAM,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,EAAE,YAAY,CAI1H,CAAC"}
1
+ {"version":3,"file":"run-rules.d.ts","sourceRoot":"","sources":["../../src/engine/run-rules.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,KAAK,EAAW,QAAQ,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE7D,MAAM,WAAW,UAAU;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1D,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;CAC5B;AAuBD,eAAO,MAAM,QAAQ,UAAW,SAAS,UAAU,EAAE,UAAU,UAAU,KAAG,MAAM,CAAC,MAAM,CAAC,SAAS,SAAS,EAAE,EAAE,YAAY,CAI1H,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAE,KAAK,YAAY,EAA2B,MAAM,oBAAoB,CAAC;AAEhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;CAC1C;AAMD,eAAO,MAAM,IAAI,GAAI,QAAQ,cAAc,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,CAOvI,CAAC;AAEJ,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,EAAE,YAAY,MAAM,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,CAQjI,CAAC"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAc,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElE,OAAO,EAAkB,KAAK,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAoB,KAAK,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAEzE,OAAO,EAAE,KAAK,YAAY,EAA2B,MAAM,oBAAoB,CAAC;AAEhF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,QAAQ,EAAE,SAAS,aAAa,EAAE,CAAC;IAC5C,QAAQ,CAAC,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;CAC1C;AAMD,eAAO,MAAM,IAAI,WAAY,cAAc,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,YAAY,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,CAOvI,CAAC;AAEJ,eAAO,MAAM,WAAW,QAAS,MAAM,cAAc,MAAM,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,UAAU,CAAC,UAAU,CAQjI,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAmB,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAsB,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAkB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAA0B,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAqB,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAW1C,MAAM,KAAK,GAAG,CACb,MAA6D,EACV,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAE5I,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAsB,EAAiG,EAAE,CAC7I,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAyB,CAAC;IAChE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAA+B,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9I,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACvI,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,UAA8B,EAA+D,EAAE,CACvI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/G,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC9D,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/engine/session.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,MAAM,EAAmB,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAE,UAAU,EAAuB,MAAM,iBAAiB,CAAC;AAClE,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAsB,MAAM,yBAAyB,CAAC;AAC7E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAkB,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAA0B,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AACpF,OAAO,EAAqB,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAW1C,MAAM,KAAK,GAAG,CACb,MAA+D,EACV,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;AAE9I,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC,MAAsB,EAAiG,EAAE,CAC7I,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,EAAyB,CAAC;IAChE,MAAM,QAAQ,GAAG,CAAC,IAAY,EAA+B,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,gBAAgB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9I,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;IACvI,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AAClC,CAAC,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAW,EAAE,UAA8B,EAA+D,EAAE,CACvI,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IACnB,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;IACnE,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAC/G,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC;AAC9D,CAAC,CAAC,CAAC"}
@@ -7,7 +7,7 @@ export interface Violation extends Finding {
7
7
  }
8
8
  export declare const keyOf: (rule: string, file: string) => string;
9
9
  export declare const byLocation: (left: Violation, right: Violation) => number;
10
- export declare const groupBy: <Item>(items: readonly Item[], key: (item: Item) => string) => ReadonlyMap<string, readonly Item[]>;
10
+ export declare const groupBy: <TItem>(items: readonly TItem[], key: (item: TItem) => string) => ReadonlyMap<string, readonly TItem[]>;
11
11
  export interface RuleIndex {
12
12
  readonly families: ReadonlySet<string>;
13
13
  readonly levels: ReadonlyMap<string, Level>;
@@ -1 +1 @@
1
- {"version":3,"file":"violation.d.ts","sourceRoot":"","sources":["../../src/engine/violation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,SAAU,SAAQ,OAAO;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,MAAgC,CAAC;AAEpF,eAAO,MAAM,UAAU,GAAI,MAAM,SAAS,EAAE,OAAO,SAAS,KAAG,MACoD,CAAC;AAEpH,eAAO,MAAM,OAAO,GAAI,IAAI,EAAE,OAAO,SAAS,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,EAAE,IAAI,KAAK,MAAM,KAAG,WAAW,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAWtH,CAAC;AAEF,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAAuD,CAAC;AAI5G,eAAO,MAAM,OAAO,GAAI,OAAO,SAAS,EAAE,MAAM,MAAM,KAAG,KAAK,GAAG,SAAmD,CAAC;AAErH,eAAO,MAAM,WAAW,GAAI,OAAO,SAAS,EAAE,MAAM,MAAM,KAAG,OAAyD,CAAC;AAEvH,eAAO,MAAM,kBAAkB,GAAI,OAAO,SAAS,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,KAAG,MAMnF,CAAC"}
1
+ {"version":3,"file":"violation.d.ts","sourceRoot":"","sources":["../../src/engine/violation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AAExC,MAAM,MAAM,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAE3C,MAAM,WAAW,SAAU,SAAQ,OAAO;IACzC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,KAAK,SAAU,MAAM,QAAQ,MAAM,KAAG,MAAgC,CAAC;AAEpF,eAAO,MAAM,UAAU,SAAU,SAAS,SAAS,SAAS,KAAG,MACoD,CAAC;AAEpH,eAAO,MAAM,OAAO,GAAI,KAAK,SAAS,SAAS,KAAK,EAAE,OAAO,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,KAAG,WAAW,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAW1H,CAAC;AAEF,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,MAAM,SAAU,MAAM,QAAQ,MAAM,KAAG,OAAuD,CAAC;AAI5G,eAAO,MAAM,OAAO,UAAW,SAAS,QAAQ,MAAM,KAAG,KAAK,GAAG,SAAmD,CAAC;AAErH,eAAO,MAAM,WAAW,UAAW,SAAS,QAAQ,MAAM,KAAG,OAAyD,CAAC;AAEvH,eAAO,MAAM,kBAAkB,UAAW,SAAS,QAAQ,MAAM,UAAU,MAAM,KAAG,MAMnF,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"violation.js","sourceRoot":"","sources":["../../src/engine/violation.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,GAAG,IAAI,SAAS,IAAI,EAAE,CAAC;AAEpF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAe,EAAE,KAAgB,EAAU,EAAE,CACvE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAEpH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAO,KAAsB,EAAE,GAA2B,EAAwC,EAAE;IAC1H,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAAY,EAAW,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AAE5G,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAU,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;AAE/H,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAqB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAE,MAAc,EAAU,EAAE;IAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,qBAAqB,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9D,CAAC,CAAC"}
1
+ {"version":3,"file":"violation.js","sourceRoot":"","sources":["../../src/engine/violation.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE,CAAC,GAAG,IAAI,SAAS,IAAI,EAAE,CAAC;AAEpF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAe,EAAE,KAAgB,EAAU,EAAE,CACvE,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;AAEpH,MAAM,CAAC,MAAM,OAAO,GAAG,CAAQ,KAAuB,EAAE,GAA4B,EAAyC,EAAE;IAC9H,MAAM,MAAM,GAAG,IAAI,GAAG,EAAmB,CAAC;IAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACzB,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,CAAC;aAAM,CAAC;YACP,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClB,CAAC;IACF,CAAC;IACD,OAAO,MAAM,CAAC;AACf,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,IAAY,EAAW,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC;AAE5G,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAU,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC;AAE/H,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAqB,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAErH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAW,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;AAEvH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAgB,EAAE,IAAY,EAAE,MAAc,EAAU,EAAE;IAC5F,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACzB,OAAO,qBAAqB,CAAC;IAC9B,CAAC;IACD,OAAO,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC;AAC9D,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/exceptions/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,KAAK,SAAS,EAAmC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEvG,QAAA,MAAM,aAAa;;;;;EAKjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;AAMtD,eAAO,MAAM,cAAc,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CACJ,CAAC;AAE/F,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC9C;AAYD,eAAO,MAAM,aAAa,GAAI,YAAY,SAAS,SAAS,EAAE,EAAE,SAAS,SAAS,aAAa,EAAE,EAAE,OAAO,SAAS,KAAG,aAiBrH,CAAC"}
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/exceptions/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,OAAO,EAAc,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,KAAK,SAAS,EAAmC,KAAK,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEvG,QAAA,MAAM,aAAa;;;;;EAKjB,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,OAAO,aAAa,CAAC,IAAI,CAAC;AAMtD,eAAO,MAAM,cAAc,QAAS,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,OAAO,CAAC,SAAS,aAAa,EAAE,CAAC,CACJ,CAAC;AAE/F,MAAM,WAAW,kBAAkB;IAClC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC7B,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAC;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,SAAS,kBAAkB,EAAE,CAAC;CAC9C;AAYD,eAAO,MAAM,aAAa,eAAgB,SAAS,SAAS,EAAE,WAAW,SAAS,aAAa,EAAE,SAAS,SAAS,KAAG,aAiBrH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/git/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AA2CD,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAW1G,CAAC"}
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/git/base.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,KAAK,GAAG,EAAO,MAAM,cAAc,CAAC;AAE7C,MAAM,WAAW,IAAI;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;CACrB;AA2CD,eAAO,MAAM,WAAW,SAAU,MAAM,WAAW,MAAM,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,CAW1G,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/git/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAgB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,GAAG,GAAG,mBAAmB,CAAC,mBAAmB,CAAC;AAE1D,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAWC,CAAC;AAEvG,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,MAAM,SAAS,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAKtG,CAAC"}
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/git/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAgB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,MAAM,WAAW,SAAS;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,MAAM,GAAG,GAAG,mBAAmB,CAAC,mBAAmB,CAAC;AAE1D,eAAO,MAAM,GAAG,QAAS,MAAM,QAAQ,SAAS,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,YAAY,EAAE,GAAG,CAWC,CAAC;AAEvG,eAAO,MAAM,SAAS,QAAS,MAAM,QAAQ,SAAS,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAKtG,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/git/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,KAAK,GAAG,EAAa,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAsBD,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,UAAU,SAAS,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAI/G,CAAC"}
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/git/history.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,KAAK,GAAG,EAAa,MAAM,cAAc,CAAC;AAEnD,MAAM,WAAW,OAAO;IACvB,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC5C;AAsBD,eAAO,MAAM,YAAY,SAAU,MAAM,YAAY,SAAS,MAAM,EAAE,KAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAI/G,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface Launch {
2
+ readonly options: readonly string[];
3
+ readonly script: string;
4
+ }
5
+ export interface HookCommand {
6
+ readonly args: readonly string[];
7
+ readonly launcher: string;
8
+ readonly runner: readonly string[];
9
+ }
10
+ export declare function hookCommand(root: string, launch: Launch, config: string | undefined): HookCommand;
11
+ export declare function commandWords(command: HookCommand): readonly string[];
12
+ export declare function shellWords(words: readonly string[]): string;
13
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../src/hooks/command.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;CACnC;AAMD,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,WAAW,CAQjG;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,SAAS,MAAM,EAAE,CAEpE;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,20 @@
1
+ import { isAbsolute, relative, sep } from "node:path";
2
+ const BIN = "node_modules/.bin/quality";
3
+ const SAFE = /^[\w@%+=:,./-]+$/u;
4
+ // A quality run from a file in the repository, such as its own source, is run the same way by the hook; an installed one through its bin.
5
+ export function hookCommand(root, launch, config) {
6
+ const script = relative(root, launch.script);
7
+ const installed = script.startsWith("..") || isAbsolute(script) || script.split(sep).includes("node_modules");
8
+ return {
9
+ args: ["hooks", "pre-commit", ...(config === undefined ? [] : ["--config", config])],
10
+ launcher: installed ? BIN : script,
11
+ runner: installed ? [] : ["node", ...launch.options],
12
+ };
13
+ }
14
+ export function commandWords(command) {
15
+ return [...command.runner, command.launcher, ...command.args];
16
+ }
17
+ export function shellWords(words) {
18
+ return words.map((word) => (SAFE.test(word) ? word : `'${word.replaceAll("'", `'\\''`)}'`)).join(" ");
19
+ }
20
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/hooks/command.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAatD,MAAM,GAAG,GAAG,2BAA2B,CAAC;AACxC,MAAM,IAAI,GAAG,mBAAmB,CAAC;AAEjC,0IAA0I;AAC1I,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,MAAc,EAAE,MAA0B;IACnF,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC;IAC9G,OAAO;QACN,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;QACpF,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM;QAClC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC;KACpD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAoB;IAChD,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,KAAwB;IAClD,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvG,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Effect, FileSystem } from "effect";
2
+ import { SetupFailure } from "#failure.ts";
3
+ import { type Launch } from "./command.ts";
4
+ export interface HookInstall {
5
+ readonly config: string | undefined;
6
+ readonly cwd: string;
7
+ readonly force: boolean;
8
+ readonly launch: Launch;
9
+ }
10
+ export declare const installHook: (install: HookInstall) => Effect.Effect<void, SetupFailure, import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | FileSystem.FileSystem>;
11
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/hooks/install.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAGrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAA6B,KAAK,MAAM,EAAc,MAAM,cAAc,CAAC;AAIlF,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AA4BD,eAAO,MAAM,WAAW,gKAyBtB,CAAC"}
@@ -0,0 +1,52 @@
1
+ import { basename, dirname, join, relative, resolve } from "node:path";
2
+ import { Console, Effect, FileSystem } from "effect";
3
+ import { CONFIG_FILE } from "#config/file.ts";
4
+ import { loadConfig } from "#config/load.ts";
5
+ import { SetupFailure } from "#failure.ts";
6
+ import { readOptionalText } from "#inventory/filesystem.ts";
7
+ import { commandWords, hookCommand, shellWords } from "./command.js";
8
+ import { hookLocation } from "./location.js";
9
+ import { hookShim, isHookShim } from "./shim.js";
10
+ function failed(error) {
11
+ return new SetupFailure({ message: error.message });
12
+ }
13
+ const realPath = Effect.fnUntraced(function* (path) {
14
+ const fs = yield* FileSystem.FileSystem;
15
+ return yield* Effect.mapError(fs.realPath(path), failed);
16
+ });
17
+ const write = Effect.fnUntraced(function* (file, text) {
18
+ const fs = yield* FileSystem.FileSystem;
19
+ yield* fs.makeDirectory(dirname(file), { recursive: true }).pipe(Effect.andThen(fs.writeFileString(file, text)), Effect.andThen(fs.chmod(file, 0o755)), Effect.mapError((error) => new SetupFailure({ message: `cannot write ${file}: ${error.message}` })));
20
+ });
21
+ function elsewhere(location) {
22
+ return location.hooksPath === undefined || resolve(location.toplevel, location.hooksPath) === dirname(location.file)
23
+ ? Effect.void
24
+ : Console.error(`note: core.hooksPath is ${location.hooksPath}, so git runs the pre-commit hook there; ${location.file} runs only when that hook calls it.`);
25
+ }
26
+ export const installHook = Effect.fn("Hooks.installHook")(function* (install) {
27
+ const config = yield* loadConfig(install.cwd, install.config);
28
+ const location = yield* hookLocation(config.root);
29
+ const root = yield* realPath(config.root);
30
+ const script = join(yield* realPath(dirname(install.launch.script)), basename(install.launch.script));
31
+ const name = basename(config.file);
32
+ const command = hookCommand(root, { options: install.launch.options, script }, name === CONFIG_FILE ? undefined : name);
33
+ const directory = relative(location.toplevel, root);
34
+ const shim = hookShim(directory, command);
35
+ const words = shellWords(commandWords(command));
36
+ const existing = yield* Effect.mapError(readOptionalText(location.file), failed);
37
+ const foreign = existing !== undefined && !isHookShim(existing);
38
+ if (foreign && !install.force) {
39
+ const call = `${directory === "" ? "" : `cd ${shellWords([directory])} && `}${words}`;
40
+ yield* Console.error(`quality: kept ${location.file}: it is not quality's pre-commit hook, so quality does not check commits.\nhelp: call \`${call}\` from that hook, or replace it with \`quality hooks install --force\`.`);
41
+ }
42
+ else if (existing === shim) {
43
+ yield* Console.log(`quality: the pre-commit hook at ${location.file} is up to date.`);
44
+ }
45
+ else {
46
+ yield* write(location.file, shim);
47
+ const done = foreign ? `replaced ${location.file}, which was not quality's hook` : `installed the pre-commit hook at ${location.file}`;
48
+ yield* Console.log(`quality: ${done}; each commit runs \`${words}\`.`);
49
+ }
50
+ yield* elsewhere(location);
51
+ });
52
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/hooks/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Effect } from "effect";
2
+ import { SetupFailure } from "#failure.ts";
3
+ export interface HookLocation {
4
+ readonly file: string;
5
+ readonly hooksPath: string | undefined;
6
+ readonly toplevel: string;
7
+ }
8
+ export declare const hookLocation: (cwd: string) => Effect.Effect<HookLocation, SetupFailure, import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner>;
9
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/hooks/location.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,MAAM,WAAW,YAAY;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC1B;AAGD,eAAO,MAAM,YAAY,uIAevB,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { join } from "node:path";
2
+ import { Effect } from "effect";
3
+ import { SetupFailure } from "#failure.ts";
4
+ import { git } from "#git/command.ts";
5
+ // Hooks live in the common git directory, which every worktree of the repository shares.
6
+ export const hookLocation = Effect.fn("Hooks.hookLocation")(function* (cwd) {
7
+ const paths = yield* git(cwd, ["rev-parse", "--path-format=absolute", "--show-toplevel", "--git-common-dir"]);
8
+ const [toplevel, common] = paths.stdout.trim().split("\n");
9
+ if (paths.code !== 0 || toplevel === undefined || common === undefined) {
10
+ return yield* new SetupFailure({
11
+ message: `${cwd} is not in a git work tree, so there is no hook to manage.\nhelp: run quality from inside the repository, or run \`git init\` first.`,
12
+ });
13
+ }
14
+ const hooksPath = yield* git(cwd, ["config", "--type=path", "--get", "core.hooksPath"]);
15
+ const location = {
16
+ file: join(common, "hooks", "pre-commit"),
17
+ hooksPath: hooksPath.code === 0 ? hooksPath.stdout.trim() : undefined,
18
+ toplevel,
19
+ };
20
+ return location;
21
+ });
22
+ //# sourceMappingURL=location.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.js","sourceRoot":"","sources":["../../src/hooks/location.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,GAAG,EAAE,MAAM,iBAAiB,CAAC;AAQtC,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAW;IACjF,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAC9G,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACxE,OAAO,KAAK,CAAC,CAAC,IAAI,YAAY,CAAC;YAC9B,OAAO,EAAE,GAAG,GAAG,sIAAsI;SACrJ,CAAC,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,aAAa,EAAE,OAAO,EAAE,gBAAgB,CAAC,CAAC,CAAC;IACxF,MAAM,QAAQ,GAAiB;QAC9B,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,YAAY,CAAC;QACzC,SAAS,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS;QACrE,QAAQ;KACR,CAAC;IACF,OAAO,QAAQ,CAAC;AACjB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Effect } from "effect";
2
+ import { ChildProcessSpawner } from "effect/unstable/process";
3
+ import { GateFailed, SetupFailure } from "#failure.ts";
4
+ export declare const preCommitHook: (cwd: string, path: string | undefined) => Effect.Effect<undefined, GateFailed | SetupFailure, ChildProcessSpawner.ChildProcessSpawner | import("effect/FileSystem").FileSystem>;
5
+ //# sourceMappingURL=preCommit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preCommit.d.ts","sourceRoot":"","sources":["../../src/hooks/preCommit.ts"],"names":[],"mappings":"AACA,OAAO,EAAW,MAAM,EAAU,MAAM,QAAQ,CAAC;AACjD,OAAO,EAAgB,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAI5E,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAyCvD,eAAO,MAAM,aAAa,kLAoBxB,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { join } from "node:path";
2
+ import { Console, Effect, Schema } from "effect";
3
+ import { ChildProcess, ChildProcessSpawner } from "effect/unstable/process";
4
+ import { lint } from "#cli/lint.ts";
5
+ import { loadConfig } from "#config/load.ts";
6
+ import { decodeWith, validOrFail } from "#decoded.ts";
7
+ import { GateFailed, SetupFailure } from "#failure.ts";
8
+ import { readOptionalText } from "#inventory/filesystem.ts";
9
+ const COMMIT_AGAIN = "help: fix what the output above reports, then commit again; `quality hooks pre-commit` repeats these checks without committing.";
10
+ const Manifest = Schema.toStandardSchemaV1(Schema.fromJsonString(Schema.Struct({
11
+ packageManager: Schema.optionalKey(Schema.String),
12
+ scripts: Schema.optionalKey(Schema.Record(Schema.String, Schema.String)),
13
+ })));
14
+ const commitScripts = Effect.fnUntraced(function* (root) {
15
+ const file = join(root, "package.json");
16
+ const text = yield* readOptionalText(file).pipe(Effect.mapError((error) => new SetupFailure({ message: error.message })));
17
+ if (text === undefined) {
18
+ return { manager: "npm", scripts: [] };
19
+ }
20
+ const manifest = yield* validOrFail(file, yield* Effect.promise(() => decodeWith(Manifest, text)));
21
+ const manager = manifest.packageManager?.split("@")[0] ?? "npm";
22
+ if (!["npm", "pnpm", "yarn", "bun"].includes(manager)) {
23
+ return yield* new SetupFailure({ message: `${file}: unsupported packageManager "${manager}". Use npm, pnpm, yarn or bun.` });
24
+ }
25
+ return { manager, scripts: ["typecheck", "quality:commit"].filter((script) => manifest.scripts?.[script] !== undefined) };
26
+ });
27
+ const runScript = Effect.fnUntraced(function* (root, manager, script) {
28
+ const spawner = yield* ChildProcessSpawner.ChildProcessSpawner;
29
+ const child = yield* spawner.spawn(ChildProcess.make(manager, ["run", script], { cwd: root, stderr: "inherit", stdin: "inherit", stdout: "inherit" }));
30
+ return Number(yield* child.exitCode);
31
+ }, Effect.scoped, Effect.mapError((error) => new SetupFailure({ message: `cannot run a pre-commit script: ${error.message}` })));
32
+ export const preCommitHook = Effect.fn("Hooks.preCommitHook")(function* (cwd, path) {
33
+ const config = yield* loadConfig(cwd, path);
34
+ const { manager, scripts } = yield* commitScripts(config.root);
35
+ const linted = yield* lint(cwd, path, "summary").pipe(Effect.as(true), Effect.catchTag("GateFailed", () => Effect.succeed(false)));
36
+ const failed = linted ? [] : ["quality lint"];
37
+ for (const script of scripts) {
38
+ const command = `${manager} run ${script}`;
39
+ yield* Console.log(`quality: running \`${command}\``);
40
+ const code = yield* runScript(config.root, manager, script);
41
+ if (code !== 0) {
42
+ failed.push(`\`${command}\` (exit code ${code})`);
43
+ }
44
+ }
45
+ if (failed.length > 0) {
46
+ yield* Console.error(`quality: pre-commit failed: ${failed.join(", ")}.\n${COMMIT_AGAIN}`);
47
+ return yield* new GateFailed();
48
+ }
49
+ });
50
+ //# sourceMappingURL=preCommit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preCommit.js","sourceRoot":"","sources":["../../src/hooks/preCommit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { type HookCommand } from "./command.ts";
2
+ export declare function isHookShim(text: string): boolean;
3
+ export declare function hookShim(directory: string, command: HookCommand): string;
4
+ //# sourceMappingURL=shim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shim.d.ts","sourceRoot":"","sources":["../../src/hooks/shim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,cAAc,CAAC;AAI5D,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAID,wBAAgB,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,MAAM,CAiBxE"}
@@ -0,0 +1,26 @@
1
+ import { shellWords } from "./command.js";
2
+ const OWNER = "# Installed by @shivaedev/quality: `quality hooks install` writes it, `quality hooks uninstall` removes it.";
3
+ export function isHookShim(text) {
4
+ return text.split("\n").includes(OWNER);
5
+ }
6
+ // The hook moves to the checked-out worktree first, so each worktree commits under its own config and its own quality.
7
+ // Git sets GIT_DIR for a hook in a linked worktree, which makes git take the current folder as the worktree root unless GIT_WORK_TREE names it.
8
+ export function hookShim(directory, command) {
9
+ const folder = directory === "" ? "" : `/${shellWords([directory])}`;
10
+ const exec = [shellWords(command.runner), '"$quality"', shellWords(command.args)].filter((part) => part !== "");
11
+ return [
12
+ "#!/bin/sh",
13
+ OWNER,
14
+ 'top="$(git rev-parse --show-toplevel)" || exit 2',
15
+ 'if [ -n "$GIT_DIR" ] && [ -z "$GIT_WORK_TREE" ]; then export GIT_WORK_TREE="$top"; fi',
16
+ `cd "$top"${folder} || exit 2`,
17
+ `quality=${shellWords([command.launcher])}`,
18
+ 'if [ ! -e "$quality" ]; then',
19
+ '\tprintf \'quality: cannot check this commit: %s/%s does not exist.\\nhelp: install the dependencies of this worktree, then commit again.\\n\' "$PWD" "$quality" >&2',
20
+ "\texit 2",
21
+ "fi",
22
+ `exec ${exec.join(" ")}`,
23
+ "",
24
+ ].join("\n");
25
+ }
26
+ //# sourceMappingURL=shim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shim.js","sourceRoot":"","sources":["../../src/hooks/shim.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,UAAU,EAAE,MAAM,cAAc,CAAC;AAE5D,MAAM,KAAK,GAAG,6GAA6G,CAAC;AAE5H,MAAM,UAAU,UAAU,CAAC,IAAY;IACtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACzC,CAAC;AAED,uHAAuH;AACvH,gJAAgJ;AAChJ,MAAM,UAAU,QAAQ,CAAC,SAAiB,EAAE,OAAoB;IAC/D,MAAM,MAAM,GAAG,SAAS,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;IACrE,MAAM,IAAI,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;IAChH,OAAO;QACN,WAAW;QACX,KAAK;QACL,kDAAkD;QAClD,uFAAuF;QACvF,YAAY,MAAM,YAAY;QAC9B,WAAW,UAAU,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE;QAC3C,8BAA8B;QAC9B,sKAAsK;QACtK,UAAU;QACV,IAAI;QACJ,QAAQ,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE;QACxB,EAAE;KACF,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Effect, FileSystem } from "effect";
2
+ import { SetupFailure } from "#failure.ts";
3
+ export declare const uninstallHook: (cwd: string) => Effect.Effect<void, SetupFailure, import("effect/unstable/process/ChildProcessSpawner").ChildProcessSpawner | FileSystem.FileSystem>;
4
+ //# sourceMappingURL=uninstall.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.d.ts","sourceRoot":"","sources":["../../src/hooks/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,eAAO,MAAM,aAAa,uJAYxB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { Console, Effect, FileSystem } from "effect";
2
+ import { SetupFailure } from "#failure.ts";
3
+ import { readOptionalText } from "#inventory/filesystem.ts";
4
+ import { hookLocation } from "./location.js";
5
+ import { isHookShim } from "./shim.js";
6
+ export const uninstallHook = Effect.fn("Hooks.uninstallHook")(function* (cwd) {
7
+ const fs = yield* FileSystem.FileSystem;
8
+ const { file } = yield* hookLocation(cwd);
9
+ const existing = yield* Effect.mapError(readOptionalText(file), (failure) => new SetupFailure({ message: failure.message }));
10
+ if (existing === undefined) {
11
+ return yield* Console.log(`quality: there is no pre-commit hook at ${file}.`);
12
+ }
13
+ if (!isHookShim(existing)) {
14
+ return yield* Console.error(`quality: kept ${file}: it is not quality's pre-commit hook.`);
15
+ }
16
+ yield* Effect.mapError(fs.remove(file), (error) => new SetupFailure({ message: `cannot remove ${file}: ${error.message}` }));
17
+ yield* Console.log(`quality: removed the pre-commit hook at ${file}.`);
18
+ });
19
+ //# sourceMappingURL=uninstall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"uninstall.js","sourceRoot":"","sources":["../../src/hooks/uninstall.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,MAAM,CAAC,MAAM,aAAa,GAAG,MAAM,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,EAAE,GAAW;IACnF,MAAM,EAAE,GAAG,KAAK,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC;IACxC,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC7H,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2CAA2C,IAAI,GAAG,CAAC,CAAC;IAC/E,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3B,OAAO,KAAK,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,iBAAiB,IAAI,wCAAwC,CAAC,CAAC;IAC5F,CAAC;IACD,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,YAAY,CAAC,EAAE,OAAO,EAAE,iBAAiB,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IAC7H,KAAK,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,2CAA2C,IAAI,GAAG,CAAC,CAAC;AACxE,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Finding, SourceFile } from "#rule.ts";
2
+ export declare function browserGlobals(file: SourceFile): readonly Finding[];
3
+ //# sourceMappingURL=browserGlobals.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserGlobals.d.ts","sourceRoot":"","sources":["../../src/imports/browserGlobals.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AA4GpD,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,OAAO,EAAE,CAgCnE"}
@@ -0,0 +1,125 @@
1
+ import ts from "typescript";
2
+ import { parse } from "#rules/syntax.ts";
3
+ import { browserNames } from "./browserNames.js";
4
+ function checkerOf(source) {
5
+ const options = { allowJs: true, noLib: true, noResolve: true };
6
+ const host = ts.createCompilerHost(options);
7
+ host.getSourceFile = (path) => (path === source.fileName ? source : undefined);
8
+ return ts.createProgram([source.fileName], options, host).getTypeChecker();
9
+ }
10
+ function unbound(checker, node) {
11
+ return (checker.getSymbolAtLocation(node)?.declarations ?? []).length === 0;
12
+ }
13
+ function globalThisRoot(expression, checker) {
14
+ let root = expression;
15
+ while (ts.isParenthesizedExpression(root)
16
+ || ts.isAsExpression(root)
17
+ || ts.isTypeAssertionExpression(root)
18
+ || ts.isNonNullExpression(root)
19
+ || ts.isSatisfiesExpression(root)) {
20
+ root = root.expression;
21
+ }
22
+ return ts.isIdentifier(root) && root.text === "globalThis" && unbound(checker, root);
23
+ }
24
+ function qualifiedName(node, checker) {
25
+ const root = node.expression;
26
+ if (!globalThisRoot(root, checker)) {
27
+ return undefined;
28
+ }
29
+ if (ts.isPropertyAccessExpression(node)) {
30
+ return node.name.text;
31
+ }
32
+ return ts.isStringLiteral(node.argumentExpression) ? node.argumentExpression.text : undefined;
33
+ }
34
+ function bindingName(node) {
35
+ const parent = node.parent;
36
+ return ts.isBindingElement(parent) && (parent.name === node || parent.propertyName === node);
37
+ }
38
+ function globalName(node, checker) {
39
+ if (ts.isPropertyAccessExpression(node) || ts.isElementAccessExpression(node)) {
40
+ return qualifiedName(node, checker);
41
+ }
42
+ if (!ts.isIdentifier(node)) {
43
+ return undefined;
44
+ }
45
+ const parent = node.parent;
46
+ if (bindingName(node) || ts.isLabeledStatement(parent) || ts.isBreakStatement(parent) || ts.isContinueStatement(parent)) {
47
+ return undefined;
48
+ }
49
+ if ((ts.isPropertyAccessExpression(parent) && parent.name === node) || (ts.isPropertyAssignment(parent) && parent.name === node)) {
50
+ return undefined;
51
+ }
52
+ if (ts.isShorthandPropertyAssignment(parent)) {
53
+ return checker.getShorthandAssignmentValueSymbol(parent) === undefined ? node.text : undefined;
54
+ }
55
+ return unbound(checker, node) ? node.text : undefined;
56
+ }
57
+ function propertyName(node) {
58
+ if (ts.isComputedPropertyName(node) && ts.isStringLiteral(node.expression)) {
59
+ return [node.expression.text];
60
+ }
61
+ return ts.isIdentifier(node) || ts.isStringLiteral(node) ? [node.text] : [];
62
+ }
63
+ function destructuringOf(node) {
64
+ if ((ts.isVariableDeclaration(node) || ts.isParameter(node)) && ts.isObjectBindingPattern(node.name) && node.initializer !== undefined) {
65
+ return { pattern: node.name, root: node.initializer };
66
+ }
67
+ if (ts.isBinaryExpression(node) && node.operatorToken.kind === ts.SyntaxKind.EqualsToken && ts.isObjectLiteralExpression(node.left)) {
68
+ return { pattern: node.left, root: node.right };
69
+ }
70
+ return undefined;
71
+ }
72
+ function destructuredNames(node, checker) {
73
+ const destructuring = destructuringOf(node);
74
+ if (destructuring === undefined) {
75
+ return [];
76
+ }
77
+ const { pattern, root } = destructuring;
78
+ if (!globalThisRoot(root, checker)) {
79
+ return [];
80
+ }
81
+ if (ts.isObjectBindingPattern(pattern)) {
82
+ return pattern.elements.flatMap((element) => (element.dotDotDotToken === undefined ? propertyName(element.propertyName ?? element.name) : []));
83
+ }
84
+ return pattern.properties.flatMap((property) => ts.isShorthandPropertyAssignment(property) || ts.isPropertyAssignment(property) ? propertyName(property.name) : []);
85
+ }
86
+ function superclassesOf(node) {
87
+ if (node.token !== ts.SyntaxKind.ExtendsKeyword || !(ts.isClassDeclaration(node.parent) || ts.isClassExpression(node.parent))) {
88
+ return [];
89
+ }
90
+ return node.types.map((base) => base.expression);
91
+ }
92
+ export function browserGlobals(file) {
93
+ const parsed = parse(file);
94
+ if (parsed === undefined) {
95
+ return [];
96
+ }
97
+ const source = parsed;
98
+ const checker = checkerOf(source);
99
+ const findings = [];
100
+ function visit(node) {
101
+ if (ts.isHeritageClause(node)) {
102
+ for (const expression of superclassesOf(node)) {
103
+ visit(expression);
104
+ }
105
+ return;
106
+ }
107
+ if (ts.isTypeNode(node) || ts.isImportDeclaration(node) || ts.isExportSpecifier(node)) {
108
+ return;
109
+ }
110
+ const direct = globalName(node, checker);
111
+ const names = [...destructuredNames(node, checker), ...(direct === undefined ? [] : [direct])];
112
+ for (const name of names.filter((candidate) => browserNames.has(candidate))) {
113
+ findings.push({
114
+ file: file.path,
115
+ line: source.getLineAndCharacterOfPosition(node.getStart(source)).line + 1,
116
+ message: `Shared code uses browser global "${name}". Move browser-dependent code into src/client/ or pass the value into shared code.`,
117
+ subject: name,
118
+ });
119
+ }
120
+ ts.forEachChild(node, visit);
121
+ }
122
+ visit(source);
123
+ return findings;
124
+ }
125
+ //# sourceMappingURL=browserGlobals.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserGlobals.js","sourceRoot":"","sources":["../../src/imports/browserGlobals.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare const browserNames: ReadonlySet<string>;
2
+ //# sourceMappingURL=browserNames.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browserNames.d.ts","sourceRoot":"","sources":["../../src/imports/browserNames.ts"],"names":[],"mappings":"AA+EA,eAAO,MAAM,YAAY,EAAE,WAAW,CAAC,MAAM,CAA+D,CAAC"}