@lucasacoutinho/archer 0.2.1 → 0.3.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 (214) hide show
  1. package/README.md +144 -387
  2. package/dist/analyzer/Analyzer.d.ts +17 -0
  3. package/dist/analyzer/Analyzer.d.ts.map +1 -0
  4. package/dist/analyzer/Analyzer.js +15 -0
  5. package/dist/analyzer/Analyzer.js.map +1 -0
  6. package/dist/analyzer/bindings.d.ts +26 -0
  7. package/dist/analyzer/bindings.d.ts.map +1 -0
  8. package/dist/analyzer/bindings.js +61 -0
  9. package/dist/analyzer/bindings.js.map +1 -0
  10. package/dist/analyzer/errors.d.ts +34 -0
  11. package/dist/analyzer/errors.d.ts.map +1 -0
  12. package/dist/analyzer/errors.js +20 -0
  13. package/dist/analyzer/errors.js.map +1 -0
  14. package/dist/analyzer/graph-file.d.ts +13 -0
  15. package/dist/analyzer/graph-file.d.ts.map +1 -0
  16. package/dist/analyzer/graph-file.js +22 -0
  17. package/dist/analyzer/graph-file.js.map +1 -0
  18. package/dist/analyzer/paths.d.ts +12 -0
  19. package/dist/analyzer/paths.d.ts.map +1 -0
  20. package/dist/analyzer/paths.js +26 -0
  21. package/dist/analyzer/paths.js.map +1 -0
  22. package/dist/analyzer/server-exit.d.ts +19 -0
  23. package/dist/analyzer/server-exit.d.ts.map +1 -0
  24. package/dist/analyzer/server-exit.js +70 -0
  25. package/dist/analyzer/server-exit.js.map +1 -0
  26. package/dist/analyzer/source.d.ts +29 -0
  27. package/dist/analyzer/source.d.ts.map +1 -0
  28. package/dist/analyzer/source.js +58 -0
  29. package/dist/analyzer/source.js.map +1 -0
  30. package/dist/analyzer/syntax.d.ts +29 -0
  31. package/dist/analyzer/syntax.d.ts.map +1 -0
  32. package/dist/analyzer/syntax.js +226 -0
  33. package/dist/analyzer/syntax.js.map +1 -0
  34. package/dist/analyzer/targets.d.ts +26 -0
  35. package/dist/analyzer/targets.d.ts.map +1 -0
  36. package/dist/analyzer/targets.js +84 -0
  37. package/dist/analyzer/targets.js.map +1 -0
  38. package/dist/analyzer/typescript.d.ts +5 -0
  39. package/dist/analyzer/typescript.d.ts.map +1 -0
  40. package/dist/analyzer/typescript.js +221 -0
  41. package/dist/analyzer/typescript.js.map +1 -0
  42. package/dist/analyzer/workspace.d.ts +24 -0
  43. package/dist/analyzer/workspace.d.ts.map +1 -0
  44. package/dist/analyzer/workspace.js +9 -0
  45. package/dist/analyzer/workspace.js.map +1 -0
  46. package/dist/cli/explain.d.ts +3 -0
  47. package/dist/cli/explain.d.ts.map +1 -0
  48. package/dist/cli/explain.js +21 -0
  49. package/dist/cli/explain.js.map +1 -0
  50. package/dist/cli/main.d.ts +3 -0
  51. package/dist/cli/main.d.ts.map +1 -0
  52. package/dist/cli/main.js +159 -0
  53. package/dist/cli/main.js.map +1 -0
  54. package/dist/config/input.d.ts +59 -0
  55. package/dist/config/input.d.ts.map +1 -0
  56. package/dist/config/input.js +115 -0
  57. package/dist/config/input.js.map +1 -0
  58. package/dist/config/rules.d.ts +94 -0
  59. package/dist/config/rules.d.ts.map +1 -0
  60. package/dist/config/rules.js +130 -0
  61. package/dist/config/rules.js.map +1 -0
  62. package/dist/core/baseline.d.ts +16 -0
  63. package/dist/core/baseline.d.ts.map +1 -0
  64. package/dist/core/baseline.js +25 -0
  65. package/dist/core/baseline.js.map +1 -0
  66. package/dist/core/check.d.ts +16 -0
  67. package/dist/core/check.d.ts.map +1 -0
  68. package/dist/core/check.js +271 -0
  69. package/dist/core/check.js.map +1 -0
  70. package/dist/core/config.d.ts +72 -0
  71. package/dist/core/config.d.ts.map +1 -0
  72. package/dist/core/config.js +78 -0
  73. package/dist/core/config.js.map +1 -0
  74. package/dist/core/fingerprint.d.ts +54 -0
  75. package/dist/core/fingerprint.d.ts.map +1 -0
  76. package/dist/core/fingerprint.js +182 -0
  77. package/dist/core/fingerprint.js.map +1 -0
  78. package/dist/core/keys.d.ts +10 -0
  79. package/dist/core/keys.d.ts.map +1 -0
  80. package/dist/core/keys.js +16 -0
  81. package/dist/core/keys.js.map +1 -0
  82. package/dist/core/lower.d.ts +13 -0
  83. package/dist/core/lower.d.ts.map +1 -0
  84. package/dist/core/lower.js +82 -0
  85. package/dist/core/lower.js.map +1 -0
  86. package/dist/core/model.d.ts +155 -0
  87. package/dist/core/model.d.ts.map +1 -0
  88. package/dist/core/model.js +116 -0
  89. package/dist/core/model.js.map +1 -0
  90. package/dist/core/pattern.d.ts +13 -0
  91. package/dist/core/pattern.d.ts.map +1 -0
  92. package/dist/core/pattern.js +29 -0
  93. package/dist/core/pattern.js.map +1 -0
  94. package/dist/core/reach.d.ts +10 -0
  95. package/dist/core/reach.d.ts.map +1 -0
  96. package/dist/core/reach.js +81 -0
  97. package/dist/core/reach.js.map +1 -0
  98. package/dist/core/rule.d.ts +200 -0
  99. package/dist/core/rule.d.ts.map +1 -0
  100. package/dist/core/rule.js +162 -0
  101. package/dist/core/rule.js.map +1 -0
  102. package/dist/core/selector.d.ts +7 -0
  103. package/dist/core/selector.d.ts.map +1 -0
  104. package/dist/core/selector.js +27 -0
  105. package/dist/core/selector.js.map +1 -0
  106. package/dist/core/structural.d.ts +10 -0
  107. package/dist/core/structural.d.ts.map +1 -0
  108. package/dist/core/structural.js +24 -0
  109. package/dist/core/structural.js.map +1 -0
  110. package/dist/core/text.d.ts +26 -0
  111. package/dist/core/text.d.ts.map +1 -0
  112. package/dist/core/text.js +144 -0
  113. package/dist/core/text.js.map +1 -0
  114. package/dist/effect.d.ts +19 -0
  115. package/dist/effect.d.ts.map +1 -0
  116. package/dist/effect.js +21 -0
  117. package/dist/effect.js.map +1 -0
  118. package/dist/index.d.ts +24 -44
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +59 -52
  121. package/dist/index.js.map +1 -0
  122. package/dist/report/agent.d.ts +3 -0
  123. package/dist/report/agent.d.ts.map +1 -0
  124. package/dist/report/agent.js +35 -0
  125. package/dist/report/agent.js.map +1 -0
  126. package/dist/report/dot.d.ts +4 -0
  127. package/dist/report/dot.d.ts.map +1 -0
  128. package/dist/report/dot.js +15 -0
  129. package/dist/report/dot.js.map +1 -0
  130. package/dist/report/github.d.ts +3 -0
  131. package/dist/report/github.d.ts.map +1 -0
  132. package/dist/report/github.js +18 -0
  133. package/dist/report/github.js.map +1 -0
  134. package/dist/report/json.d.ts +3 -0
  135. package/dist/report/json.d.ts.map +1 -0
  136. package/dist/report/json.js +4 -0
  137. package/dist/report/json.js.map +1 -0
  138. package/dist/report/message.d.ts +20 -0
  139. package/dist/report/message.d.ts.map +1 -0
  140. package/dist/report/message.js +73 -0
  141. package/dist/report/message.js.map +1 -0
  142. package/dist/report/pretty.d.ts +8 -0
  143. package/dist/report/pretty.d.ts.map +1 -0
  144. package/dist/report/pretty.js +89 -0
  145. package/dist/report/pretty.js.map +1 -0
  146. package/dist/report/render.d.ts +9 -0
  147. package/dist/report/render.d.ts.map +1 -0
  148. package/dist/report/render.js +10 -0
  149. package/dist/report/render.js.map +1 -0
  150. package/dist/report/report.d.ts +44 -0
  151. package/dist/report/report.d.ts.map +1 -0
  152. package/dist/report/report.js +49 -0
  153. package/dist/report/report.js.map +1 -0
  154. package/dist/report/sarif.d.ts +3 -0
  155. package/dist/report/sarif.d.ts.map +1 -0
  156. package/dist/report/sarif.js +68 -0
  157. package/dist/report/sarif.js.map +1 -0
  158. package/dist/run.d.ts +49 -0
  159. package/dist/run.d.ts.map +1 -0
  160. package/dist/run.js +87 -0
  161. package/dist/run.js.map +1 -0
  162. package/dist/shell/baseline-file.d.ts +20 -0
  163. package/dist/shell/baseline-file.d.ts.map +1 -0
  164. package/dist/shell/baseline-file.js +46 -0
  165. package/dist/shell/baseline-file.js.map +1 -0
  166. package/dist/shell/load-config.d.ts +19 -0
  167. package/dist/shell/load-config.d.ts.map +1 -0
  168. package/dist/shell/load-config.js +39 -0
  169. package/dist/shell/load-config.js.map +1 -0
  170. package/package.json +29 -177
  171. package/skills/archer/SKILL.md +127 -45
  172. package/skills/archer/agents/openai.yaml +2 -2
  173. package/skills/archer/references/rules.md +267 -54
  174. package/dist/bun/plugin.cjs +0 -85
  175. package/dist/bun/plugin.d.cts +0 -7
  176. package/dist/bun/plugin.d.ts +0 -7
  177. package/dist/bun/plugin.js +0 -11
  178. package/dist/bun.cjs +0 -2238
  179. package/dist/bun.d.cts +0 -13
  180. package/dist/bun.d.ts +0 -13
  181. package/dist/bun.js +0 -28
  182. package/dist/chunk-2AKMBLHG.js +0 -2165
  183. package/dist/chunk-67YEOTXP.js +0 -25
  184. package/dist/chunk-IDVLHNL2.js +0 -46
  185. package/dist/chunk-ZZ6TR4PO.js +0 -201
  186. package/dist/cli.js +0 -2643
  187. package/dist/index.cjs +0 -2484
  188. package/dist/index.d.cts +0 -45
  189. package/dist/jest/plugin.cjs +0 -85
  190. package/dist/jest/plugin.d.cts +0 -7
  191. package/dist/jest/plugin.d.ts +0 -7
  192. package/dist/jest/plugin.js +0 -11
  193. package/dist/jest.cjs +0 -2237
  194. package/dist/jest.d.cts +0 -13
  195. package/dist/jest.d.ts +0 -13
  196. package/dist/jest.js +0 -27
  197. package/dist/matchers-Cqnbsyxe.d.cts +0 -11
  198. package/dist/matchers-Cqnbsyxe.d.ts +0 -11
  199. package/dist/node.cjs +0 -2237
  200. package/dist/node.d.cts +0 -13
  201. package/dist/node.d.ts +0 -13
  202. package/dist/node.js +0 -27
  203. package/dist/reporters-BbAXMpuW.d.cts +0 -6
  204. package/dist/reporters-xh-HQneS.d.ts +0 -6
  205. package/dist/suite-BwnPDCvU.d.cts +0 -337
  206. package/dist/suite-BwnPDCvU.d.ts +0 -337
  207. package/dist/vitest/plugin.cjs +0 -85
  208. package/dist/vitest/plugin.d.cts +0 -7
  209. package/dist/vitest/plugin.d.ts +0 -7
  210. package/dist/vitest/plugin.js +0 -11
  211. package/dist/vitest.cjs +0 -2531
  212. package/dist/vitest.d.cts +0 -37
  213. package/dist/vitest.d.ts +0 -37
  214. package/dist/vitest.js +0 -139
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typescript.js","sourceRoot":"","sources":["../../src/analyzer/typescript.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { type Effect, Schema } from "effect";
2
+ import type { Graph } from "../core/model.ts";
3
+ import type { AnalysisError } from "./errors.ts";
4
+ export declare const AbsolutePath: Schema.Codec<string>;
5
+ export declare const RootRelativePath: Schema.Codec<string>;
6
+ /**
7
+ * What to analyze: the root directory and the tsconfig projects to load. The
8
+ * source files are the union of the projects' file lists. A file in several
9
+ * projects is analyzed through the first one in `projects` order.
10
+ */
11
+ export interface Workspace {
12
+ readonly root: string;
13
+ readonly projects: readonly [string, ...Array<string>];
14
+ }
15
+ export declare const Workspace: Schema.Codec<Workspace>;
16
+ export interface AnalyzerShape {
17
+ /**
18
+ * The whole graph for the workspace, or an error; never a partial graph.
19
+ * Each call reads the files again, so a watcher can call it repeatedly.
20
+ * Concurrent calls run one after another.
21
+ */
22
+ readonly analyze: (workspace: Workspace) => Effect.Effect<Graph, AnalysisError>;
23
+ }
24
+ //# sourceMappingURL=workspace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../../src/analyzer/workspace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAEhD,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAG7C,CAAA;AAED,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAGjD,CAAA;AAED;;;;GAIG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAA;CACvD;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,KAAK,CAAC,SAAS,CAG5C,CAAA;AACF,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,SAAS,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;CAChF"}
@@ -0,0 +1,9 @@
1
+ import { isAbsolute } from "node:path";
2
+ import { Schema } from "effect";
3
+ export const AbsolutePath = Schema.String.check(Schema.isNonEmpty(), Schema.makeFilter((path) => isAbsolute(path) || "must be an absolute path"));
4
+ export const RootRelativePath = Schema.String.check(Schema.isNonEmpty(), Schema.makeFilter((path) => !isAbsolute(path) || "must be relative to the workspace root"));
5
+ export const Workspace = Schema.Struct({
6
+ root: AbsolutePath,
7
+ projects: Schema.NonEmptyArray(RootRelativePath),
8
+ });
9
+ //# sourceMappingURL=workspace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace.js","sourceRoot":"","sources":["../../src/analyzer/workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAe,MAAM,EAAE,MAAM,QAAQ,CAAA;AAI5C,MAAM,CAAC,MAAM,YAAY,GAAyB,MAAM,CAAC,MAAM,CAAC,KAAK,CACnE,MAAM,CAAC,UAAU,EAAE,EACnB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAC5E,CAAA;AAED,MAAM,CAAC,MAAM,gBAAgB,GAAyB,MAAM,CAAC,MAAM,CAAC,KAAK,CACvE,MAAM,CAAC,UAAU,EAAE,EACnB,MAAM,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,wCAAwC,CAAC,CAC3F,CAAA;AAYD,MAAM,CAAC,MAAM,SAAS,GAA4B,MAAM,CAAC,MAAM,CAAC;IAC9D,IAAI,EAAE,YAAY;IAClB,QAAQ,EAAE,MAAM,CAAC,aAAa,CAAC,gBAAgB,CAAC;CACjD,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import type { RunError } from "../run.ts";
2
+ export declare const explain: (error: RunError) => string;
3
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/cli/explain.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAA;AAczC,eAAO,MAAM,OAAO,UAAW,QAAQ,KAAG,MAYtC,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { Match } from "effect";
2
+ const causeText = (cause) => (cause instanceof Error ? cause.message : String(cause));
3
+ const rejection = (error) => Match.valueTags(error, {
4
+ DuplicateLayer: ({ name }) => `layer '${name}' is defined twice`,
5
+ UnknownLayer: ({ name }) => `layer '${name}' is used but not defined`,
6
+ DuplicateRuleId: ({ id }) => `rule id '${id}' is used twice (layer rules are named layer/<name>, public APIs public-api/<name>)`,
7
+ EmptyPolicy: () => "the configuration declares no rules",
8
+ });
9
+ const list = (items) => items.map((item) => `\n - ${item}`).join("");
10
+ export const explain = (error) => Match.valueTags(error, {
11
+ ConfigNotFound: ({ searched }) => `No configuration file. Looked for:${list(searched)}\nRun \`archer init\` to create one.`,
12
+ ConfigLoadError: ({ path, cause }) => `Could not load ${path}: ${causeText(cause)}`,
13
+ ConfigInvalid: ({ issues }) => `Invalid configuration:${list(issues)}`,
14
+ ConfigRejected: ({ error: rejected }) => `Invalid configuration: ${rejection(rejected)}`,
15
+ ProjectNotFound: ({ tsconfig }) => `No tsconfig at ${tsconfig}. Set \`root\` or \`projects\` in the configuration.`,
16
+ ProjectParseFailed: ({ tsconfig, diagnostics }) => `Could not read ${tsconfig}:${list(diagnostics)}`,
17
+ AnalyzerUnavailable: ({ cause }) => `The TypeScript analyzer stopped: ${causeText(cause)}`,
18
+ GraphFileInvalid: ({ path, issue }) => `Not a graph saved by \`archer graph\`: ${path} (${issue})`,
19
+ BaselineError: ({ path, reason, line }) => `Baseline ${path}: ${reason}${line === undefined ? "" : ` at line ${line}`}. Record a new one with \`archer baseline record\`.`,
20
+ });
21
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/cli/explain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAI9B,MAAM,SAAS,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;AAEtG,MAAM,SAAS,GAAG,CAAC,KAAkB,EAAU,EAAE,CAC/C,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;IACrB,cAAc,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,IAAI,oBAAoB;IAChE,YAAY,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,UAAU,IAAI,2BAA2B;IACrE,eAAe,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,YAAY,EAAE,qFAAqF;IAChI,WAAW,EAAE,GAAG,EAAE,CAAC,qCAAqC;CACzD,CAAC,CAAA;AAEJ,MAAM,IAAI,GAAG,CAAC,KAA4B,EAAU,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AAEpG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,KAAe,EAAU,EAAE,CACjD,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;IACrB,cAAc,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,qCAAqC,IAAI,CAAC,QAAQ,CAAC,sCAAsC;IAC3H,eAAe,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,kBAAkB,IAAI,KAAK,SAAS,CAAC,KAAK,CAAC,EAAE;IACnF,aAAa,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,yBAAyB,IAAI,CAAC,MAAM,CAAC,EAAE;IACtE,cAAc,EAAE,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,0BAA0B,SAAS,CAAC,QAAQ,CAAC,EAAE;IACxF,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,kBAAkB,QAAQ,sDAAsD;IACnH,kBAAkB,EAAE,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,kBAAkB,QAAQ,IAAI,IAAI,CAAC,WAAW,CAAC,EAAE;IACpG,mBAAmB,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,oCAAoC,SAAS,CAAC,KAAK,CAAC,EAAE;IAC1F,gBAAgB,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,0CAA0C,IAAI,KAAK,KAAK,GAAG;IAClG,aAAa,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CACxC,YAAY,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAAI,EAAE,qDAAqD;CAClI,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":""}
@@ -0,0 +1,159 @@
1
+ #!/usr/bin/env node
2
+ import { spawn } from "node:child_process";
3
+ import { readFileSync } from "node:fs";
4
+ import { fileURLToPath } from "node:url";
5
+ import { NodeRuntime, NodeServices } from "@effect/platform-node";
6
+ import { Console, Deferred, Duration, Effect, Fiber, FileSystem, Option, Path, Schema, Semaphore, Stream } from "effect";
7
+ import { Argument, CliError, Command, Flag } from "effect/cli";
8
+ import { Analyzer } from "../analyzer/Analyzer.js";
9
+ import { formatGraphFile } from "../analyzer/graph-file.js";
10
+ import { render } from "../report/render.js";
11
+ import { locateWorkspace, run } from "../run.js";
12
+ import { explain } from "./explain.js";
13
+ const formats = ["pretty", "agent", "json", "sarif", "github", "dot"];
14
+ const defaultFormat = "pretty";
15
+ const config = Flag.String("config").pipe(Flag.withAlias("c"), Flag.withDescription("Configuration file. Default: the first archer.config.{ts,mts,js,mjs} in the current directory."), Flag.optional);
16
+ /** A run that Archer cannot complete prints why and exits 2, keeping 1 for a failing report. */
17
+ const attempt = (effect) => effect.pipe(Effect.asSome, Effect.catch((error) => Console.error(explain(error)).pipe(Effect.andThen(Effect.sync(() => (process.exitCode = 2))), Effect.as(Option.none()))));
18
+ const runOnce = (options) => Effect.gen(function* () {
19
+ const fs = yield* FileSystem.FileSystem;
20
+ const outcome = yield* attempt(run({ ...(Option.isSome(options.config) ? { config: options.config.value } : {}), baseline: options.baseline }));
21
+ if (Option.isNone(outcome)) {
22
+ return Option.none();
23
+ }
24
+ const result = outcome.value;
25
+ const color = Option.isNone(options.output) && process.stdout.isTTY === true;
26
+ const text = yield* render(options.reporter, result.report, result.graph, { root: result.root, color });
27
+ if (Option.isSome(options.output)) {
28
+ yield* fs.writeFileString(options.output.value, `${text}\n`);
29
+ }
30
+ else if (text !== "") {
31
+ yield* Console.log(text);
32
+ }
33
+ process.exitCode = result.report.verdict === "fail" ? 1 : 0;
34
+ return Option.some(result.root);
35
+ });
36
+ /** Watch event paths use the platform separator: `/`, or `\` on Windows. */
37
+ const ignored = (changed) => changed
38
+ .split("\\")
39
+ .flatMap((part) => part.split("/"))
40
+ .some((segment) => segment === "node_modules" || segment === ".git");
41
+ /** The `check` invocation that a watcher repeats: the same flags, without `--watch`. */
42
+ const checkArguments = (input) => [
43
+ "check",
44
+ ...(Option.isSome(input.config) ? ["--config", input.config.value] : []),
45
+ "--reporter",
46
+ input.reporter,
47
+ ...(Option.isSome(input.output) ? ["--output", input.output.value] : []),
48
+ ...(input.ignoreBaseline ? ["--ignore-baseline"] : []),
49
+ ...(Option.isSome(input.graph) ? ["--graph", input.graph.value] : []),
50
+ ];
51
+ const entry = fileURLToPath(import.meta.url);
52
+ /** One check in a fresh Node process, so every module reloads and nothing is retained between runs. */
53
+ const checkInChild = (args) => Effect.callback((resume) => {
54
+ const child = spawn(process.execPath, [...process.execArgv, entry, ...args], { stdio: "inherit" });
55
+ child.once("exit", () => resume(Effect.void));
56
+ child.once("error", (error) => resume(Console.error(`archer: could not start a check: ${error.message}`)));
57
+ return Effect.sync(() => {
58
+ child.kill();
59
+ setTimeout(() => child.kill("SIGKILL"), 3_000).unref();
60
+ });
61
+ });
62
+ /**
63
+ * Runs the check, then again after each change under the workspace root or
64
+ * beside the configuration file, which covers modules the configuration
65
+ * imports. This process never loads TypeScript or the user's rules twice.
66
+ */
67
+ const watchChecks = (input) => Effect.gen(function* () {
68
+ const fs = yield* FileSystem.FileSystem;
69
+ const path = yield* Path.Path;
70
+ const location = yield* attempt(locateWorkspace(Option.isSome(input.config) ? { config: input.config.value } : {}));
71
+ if (Option.isNone(location)) {
72
+ return;
73
+ }
74
+ const args = checkArguments(input);
75
+ const { root, configFile } = location.value;
76
+ const report = Option.isSome(input.output) ? path.resolve(input.output.value) : undefined;
77
+ const relevant = (directory, changed) => !ignored(changed) && path.resolve(directory, changed) !== report;
78
+ const rootReady = yield* Deferred.make();
79
+ const configReady = yield* Deferred.make();
80
+ const changes = fs
81
+ .watch(root, { recursive: true, onReady: () => Deferred.doneUnsafe(rootReady, Effect.void) })
82
+ .pipe(Stream.filter((event) => relevant(root, event.path)));
83
+ const configChanges = configFile === undefined
84
+ ? Stream.fromEffect(Deferred.succeed(configReady, undefined)).pipe(Stream.drain)
85
+ : fs
86
+ .watch(path.dirname(configFile), { onReady: () => Deferred.doneUnsafe(configReady, Effect.void) })
87
+ .pipe(Stream.filter((event) => relevant(path.dirname(configFile), event.path)));
88
+ const lock = yield* Semaphore.make(1);
89
+ const checkOnce = lock.withPermit(checkInChild(args));
90
+ const watching = yield* Stream.merge(changes, configChanges).pipe(Stream.debounce(Duration.millis(200)), Stream.runForEach(() => checkOnce), Effect.forkChild);
91
+ // Watch before the first check, so an edit made while it runs is not missed.
92
+ yield* Deferred.await(rootReady);
93
+ yield* Deferred.await(configReady);
94
+ yield* checkOnce;
95
+ yield* Fiber.join(watching);
96
+ });
97
+ const check = Command.make("check", {
98
+ config,
99
+ reporter: Flag.Literals("reporter", formats).pipe(Flag.withAlias("r"), Flag.withDefault(defaultFormat)),
100
+ output: Flag.String("output").pipe(Flag.withAlias("o"), Flag.withDescription("Write the report to a file."), Flag.optional),
101
+ watch: Flag.Boolean("watch").pipe(Flag.withAlias("w"), Flag.withDefault(false)),
102
+ ignoreBaseline: Flag.Boolean("ignore-baseline").pipe(Flag.withDescription("Report every violation, including those the baseline accepts."), Flag.withDefault(false)),
103
+ graph: Flag.String("graph").pipe(Flag.withDescription("Check a graph saved by `archer graph` instead of analyzing the workspace."), Flag.optional),
104
+ }, Effect.fn("archer.check")(function* (input) {
105
+ if (input.watch) {
106
+ return yield* watchChecks(input);
107
+ }
108
+ yield* runOnce({
109
+ config: input.config,
110
+ reporter: input.reporter,
111
+ output: input.output,
112
+ baseline: input.ignoreBaseline ? "ignore" : "apply",
113
+ }).pipe(Effect.provide(Option.isSome(input.graph) ? Analyzer.replay(input.graph.value) : Analyzer.typescript));
114
+ })).pipe(Command.withDescription("Check the architecture. Exits 1 when the report fails, 2 when Archer cannot check."));
115
+ const baseline = Command.make("baseline", { config, mode: Argument.Literals("mode", ["record", "prune"]) }, Effect.fn("archer.baseline")(function* ({ config, mode }) {
116
+ const recorded = yield* runOnce({ config, reporter: "agent", output: Option.none(), baseline: mode }).pipe(Effect.provide(Analyzer.typescript));
117
+ if (Option.isSome(recorded)) {
118
+ process.exitCode = 0;
119
+ }
120
+ })).pipe(Command.withDescription("record: accept every current violation. prune: drop entries no violation has."));
121
+ const graph = Command.make("graph", {
122
+ config,
123
+ output: Flag.String("output").pipe(Flag.withAlias("o"), Flag.withDescription("The graph file to write.")),
124
+ }, Effect.fn("archer.graph")(function* ({ config, output }) {
125
+ const fs = yield* FileSystem.FileSystem;
126
+ const result = yield* attempt(run({ ...(Option.isSome(config) ? { config: config.value } : {}), baseline: "ignore" }).pipe(Effect.provide(Analyzer.typescript)));
127
+ if (Option.isSome(result)) {
128
+ yield* fs.writeFileString(output, formatGraphFile(result.value.graph));
129
+ yield* Console.log(`Wrote ${result.value.graph.files.length} files to ${output}`);
130
+ }
131
+ })).pipe(Command.withDescription("Save the analyzed graph, for `archer check --graph` or a bug report."));
132
+ const template = `import { defineConfig, presets, r } from "@lucasacoutinho/archer"
133
+
134
+ export default defineConfig({
135
+ layers: {
136
+ app: "src/app",
137
+ domain: "src/domain",
138
+ infrastructure: "src/infrastructure",
139
+ },
140
+ stack: ["app", "domain"],
141
+ allow: { infrastructure: ["domain"] },
142
+ rules: [...presets.recommended, r.forbid("domain/pure", "layer:domain", ["npm:*", "node:*"])],
143
+ })
144
+ `;
145
+ const init = Command.make("init", {}, Effect.fn("archer.init")(function* () {
146
+ const fs = yield* FileSystem.FileSystem;
147
+ const path = yield* Path.Path;
148
+ const file = path.resolve("archer.config.ts");
149
+ if (yield* fs.exists(file)) {
150
+ process.exitCode = 1;
151
+ return yield* Console.error(`${file} already exists`);
152
+ }
153
+ yield* fs.writeFileString(file, template);
154
+ yield* Console.log(`Created ${file}`);
155
+ })).pipe(Command.withDescription("Create a starter archer.config.ts."));
156
+ const { version } = Schema.decodeUnknownSync(Schema.Struct({ version: Schema.String }))(JSON.parse(readFileSync(new URL("../../package.json", import.meta.url), "utf8")));
157
+ const archer = Command.make("archer").pipe(Command.withSubcommands([check, baseline, graph, init]));
158
+ archer.pipe(Command.run({ version }), Effect.catchIf(CliError.isCliError, () => Effect.sync(() => (process.exitCode = 2))), Effect.provide(NodeServices.layer), NodeRuntime.runMain);
159
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { Result, Schema } from "effect";
2
+ import type { Config } from "../core/config.ts";
3
+ import { type Assertion, Severity } from "../core/rule.ts";
4
+ import type { RuleInfo } from "../report/report.ts";
5
+ import type { CustomCheck, RuleSpec, SelectorInput } from "./rules.ts";
6
+ interface RuleShape {
7
+ readonly id: string;
8
+ readonly severity?: Severity;
9
+ readonly reason?: string;
10
+ readonly subject: SelectorInput;
11
+ readonly assertion: Assertion<SelectorInput>;
12
+ readonly check?: unknown;
13
+ }
14
+ declare const RuleShape: Schema.Codec<RuleShape>;
15
+ interface ArcherShape {
16
+ readonly root?: string;
17
+ readonly projects?: readonly [string, ...Array<string>];
18
+ readonly layers?: Readonly<Record<string, SelectorInput>>;
19
+ readonly stack?: ReadonlyArray<string>;
20
+ readonly allow?: Readonly<Record<string, ReadonlyArray<string>>>;
21
+ readonly publicApis?: Readonly<Record<string, SelectorInput>>;
22
+ readonly rules?: ReadonlyArray<RuleShape>;
23
+ readonly baseline?: string | false;
24
+ readonly failOnWarnings?: boolean;
25
+ }
26
+ export declare const ArcherConfig: Schema.Codec<ArcherShape>;
27
+ /** What a configuration file exports. `defineConfig` only adds type inference. */
28
+ export interface ArcherConfig {
29
+ readonly root?: string;
30
+ readonly projects?: readonly [string, ...Array<string>];
31
+ readonly layers?: Readonly<Record<string, SelectorInput>>;
32
+ readonly stack?: ReadonlyArray<string>;
33
+ readonly allow?: Readonly<Record<string, ReadonlyArray<string>>>;
34
+ readonly publicApis?: Readonly<Record<string, SelectorInput>>;
35
+ readonly rules?: ReadonlyArray<RuleSpec>;
36
+ readonly baseline?: string | false;
37
+ readonly failOnWarnings?: boolean;
38
+ }
39
+ export declare const defineConfig: (config: ArcherConfig) => ArcherConfig;
40
+ /** A decoded configuration: the Lean `Config` plus what only the shell needs. */
41
+ export interface Configuration {
42
+ readonly config: Config;
43
+ readonly custom: ReadonlyMap<string, CustomCheck>;
44
+ readonly rules: ReadonlyArray<RuleInfo>;
45
+ readonly root: string;
46
+ readonly projects: readonly [string, ...Array<string>];
47
+ readonly baseline: string | undefined;
48
+ readonly failOnWarnings: boolean;
49
+ }
50
+ declare const ConfigInvalid_base: Schema.Class<ConfigInvalid, Schema.TaggedStruct<"ConfigInvalid", {
51
+ readonly issues: Schema.NonEmptyArray<Schema.String>;
52
+ }>, import("effect/Cause").YieldableError & {
53
+ readonly brand: unique symbol;
54
+ }>;
55
+ export declare class ConfigInvalid extends ConfigInvalid_base {
56
+ }
57
+ export declare const decodeConfiguration: (input: unknown) => Result.Result<Configuration, ConfigInvalid>;
58
+ export {};
59
+ //# sourceMappingURL=input.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/config/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { Match, Result, Schema } from "effect";
2
+ import { assertionOf, mapAssertion, Severity } from "../core/rule.js";
3
+ import { parse } from "../core/text.js";
4
+ /** Integer-like keys enumerate before the others in JavaScript, which would reorder layers. */
5
+ const isArrayIndex = (name) => {
6
+ const value = Number(name);
7
+ return Number.isInteger(value) && value >= 0 && String(value) === name;
8
+ };
9
+ const LayerName = Schema.NonEmptyString;
10
+ const SelectorShape = Schema.Union([
11
+ Schema.String,
12
+ Schema.Array(Schema.suspend(() => SelectorShape)),
13
+ Schema.Struct({ not: Schema.suspend(() => SelectorShape) }),
14
+ Schema.Struct({ all: Schema.Array(Schema.suspend(() => SelectorShape)) }),
15
+ ]);
16
+ const RuleShape = Schema.Struct({
17
+ id: Schema.NonEmptyString,
18
+ severity: Schema.optionalKey(Severity),
19
+ reason: Schema.optionalKey(Schema.String),
20
+ subject: SelectorShape,
21
+ assertion: assertionOf(SelectorShape),
22
+ check: Schema.optionalKey(Schema.Unknown),
23
+ });
24
+ export const ArcherConfig = Schema.Struct({
25
+ /** Relative to the configuration file. */
26
+ root: Schema.optionalKey(Schema.String),
27
+ /** tsconfig files, relative to `root`. */
28
+ projects: Schema.optionalKey(Schema.NonEmptyArray(Schema.NonEmptyString)),
29
+ layers: Schema.optionalKey(Schema.Record(LayerName, SelectorShape)),
30
+ stack: Schema.optionalKey(Schema.Array(LayerName)),
31
+ allow: Schema.optionalKey(Schema.Record(LayerName, Schema.Array(LayerName))),
32
+ publicApis: Schema.optionalKey(Schema.Record(LayerName, SelectorShape)),
33
+ rules: Schema.optionalKey(Schema.Array(RuleShape)),
34
+ /** Relative to `root`; `false` checks without a baseline. */
35
+ baseline: Schema.optionalKey(Schema.Union([Schema.String, Schema.Literal(false)])),
36
+ failOnWarnings: Schema.optionalKey(Schema.Boolean),
37
+ }).check(Schema.makeFilter((config) => {
38
+ const names = [config.layers, config.allow, config.publicApis].flatMap((table) => Object.keys(table ?? {}));
39
+ const index = names.find(isArrayIndex);
40
+ return index === undefined || `layer name '${index}' must not look like an array index`;
41
+ }));
42
+ export const defineConfig = (config) => config;
43
+ export class ConfigInvalid extends Schema.TaggedError()("ConfigInvalid", { issues: Schema.NonEmptyArray(Schema.String) }) {
44
+ }
45
+ const all = (items) => {
46
+ const issues = items.flatMap((item) => (Result.isFailure(item) ? item.failure : []));
47
+ return issues.length > 0 ? Result.fail(issues) : Result.succeed(items.flatMap((item) => (Result.isSuccess(item) ? [item.success] : [])));
48
+ };
49
+ const isList = (input) => Array.isArray(input);
50
+ const toConfigSelector = (input, at) => Match.value(input).pipe(Match.when(Match.string, (text) => Result.mapError(parse(text), (error) => [`${at}: '${text}' is not a selector (${error._tag})`])), Match.when(isList, (items) => Result.map(all(items.map((item, index) => toConfigSelector(item, `${at}[${index}]`))), (selectors) => (selectors.length === 1 && selectors[0] !== undefined ? selectors[0] : { _tag: "Any", selectors }))), Match.when({ not: Match.defined }, ({ not }) => Result.map(toConfigSelector(not, `${at}.not`), (selector) => ({ _tag: "Not", selector }))), Match.orElse(({ all: items }) => Result.map(all(items.map((item, index) => toConfigSelector(item, `${at}.all[${index}]`))), (selectors) => ({ _tag: "All", selectors }))));
51
+ /** Layer and entry selectors define layers, so they cannot refer to one. */
52
+ const withoutLayers = (selector, at) => Match.valueTags(selector, {
53
+ Base: ({ selector: base }) => Result.succeed(base),
54
+ Layer: ({ name }) => Result.fail([`${at}: 'layer:${name}' cannot be used to define a layer`]),
55
+ Any: ({ selectors }) => Result.map(all(selectors.map((inner) => withoutLayers(inner, at))), (inner) => ({ _tag: "Any", selectors: inner })),
56
+ All: ({ selectors }) => Result.map(all(selectors.map((inner) => withoutLayers(inner, at))), (inner) => ({ _tag: "All", selectors: inner })),
57
+ Not: ({ selector: inner }) => Result.map(withoutLayers(inner, at), (base) => ({ _tag: "Not", selector: base })),
58
+ });
59
+ const layerSelector = (input, at) => Result.flatMap(toConfigSelector(input, at), (selector) => withoutLayers(selector, at));
60
+ const convertRule = (rule, at) => {
61
+ const selectors = [];
62
+ const assertion = mapAssertion(rule.assertion, (input) => {
63
+ const converted = toConfigSelector(input, `${at}.assertion`);
64
+ selectors.push(converted);
65
+ return Result.getOrElse(converted, () => ({ _tag: "Any", selectors: [] }));
66
+ });
67
+ const custom = rule.assertion._tag === "Custom" && typeof rule.check !== "function"
68
+ ? [Result.fail([`${at}: a custom rule needs a check function`])]
69
+ : [];
70
+ return Result.flatMap(all([toConfigSelector(rule.subject, `${at}.subject`), ...selectors, ...custom]), ([subject]) => subject === undefined
71
+ ? Result.fail([`${at}.subject: missing`])
72
+ : Result.succeed({ id: rule.id, severity: rule.severity ?? "error", subject, assertion }));
73
+ };
74
+ const Messages = Schema.Array(Schema.String);
75
+ /** A user check is untrusted: a throw or a malformed result becomes one finding, so the check stays total. */
76
+ const guarded = (check) => (context) => {
77
+ try {
78
+ const output = Reflect.apply(check, undefined, [context]);
79
+ return Result.getOrElse(Schema.decodeUnknownResult(Messages)(output), () => [
80
+ "custom rule returned something other than a list of messages",
81
+ ]);
82
+ }
83
+ catch (error) {
84
+ return [`custom rule crashed: ${error instanceof Error ? error.message : String(error)}`];
85
+ }
86
+ };
87
+ const issuesOf = (item) => (Result.isFailure(item) ? item.failure : []);
88
+ const allOf = (a, b, c) => Result.isSuccess(a) && Result.isSuccess(b) && Result.isSuccess(c)
89
+ ? Result.succeed([a.success, b.success, c.success])
90
+ : Result.fail([...issuesOf(a), ...issuesOf(b), ...issuesOf(c)]);
91
+ export const decodeConfiguration = (input) => {
92
+ const shaped = Schema.decodeUnknownResult(ArcherConfig, { errors: "all" })(input);
93
+ if (Result.isFailure(shaped)) {
94
+ return Result.fail(new ConfigInvalid({ issues: [shaped.failure.message] }));
95
+ }
96
+ const config = shaped.success;
97
+ const parts = allOf(all(Object.entries(config.layers ?? {}).map(([name, selector]) => Result.map(layerSelector(selector, `layers.${name}`), (converted) => ({ name, selector: converted })))), all(Object.entries(config.publicApis ?? {}).map(([layer, entry]) => Result.map(layerSelector(entry, `publicApis.${layer}`), (converted) => ({ layer, entry: converted })))), all((config.rules ?? []).map((rule, index) => convertRule(rule, `rules[${index}]`))));
98
+ return Result.mapBoth(parts, {
99
+ onFailure: ([first = "invalid configuration", ...rest]) => new ConfigInvalid({ issues: [first, ...rest] }),
100
+ onSuccess: ([layers, publicApis, rules]) => ({
101
+ config: { layers, stack: config.stack ?? [], allow: Object.entries(config.allow ?? {}), publicApis, rules },
102
+ custom: new Map((config.rules ?? []).flatMap((rule) => (typeof rule.check === "function" ? [[rule.id, guarded(rule.check)]] : []))),
103
+ rules: (config.rules ?? []).map((rule) => ({
104
+ id: rule.id,
105
+ severity: rule.severity ?? "error",
106
+ ...(rule.reason === undefined ? {} : { reason: rule.reason }),
107
+ })),
108
+ root: config.root ?? ".",
109
+ projects: config.projects ?? ["tsconfig.json"],
110
+ baseline: config.baseline === false ? undefined : (config.baseline ?? ".archer-baseline"),
111
+ failOnWarnings: config.failOnWarnings ?? false,
112
+ }),
113
+ });
114
+ };
115
+ //# sourceMappingURL=input.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/config/input.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ import type { DeclarationKind, DependencyKind, Graph, Visibility } from "../core/model.ts";
2
+ import type { Assertion, DeclarationPredicate, Severity, UseSpec } from "../core/rule.ts";
3
+ /** Selector text, a union (array), or a combination. */
4
+ export type SelectorInput = string | ReadonlyArray<SelectorInput> | {
5
+ readonly not: SelectorInput;
6
+ } | {
7
+ readonly all: ReadonlyArray<SelectorInput>;
8
+ };
9
+ export interface RuleOptions {
10
+ readonly severity?: Severity;
11
+ readonly reason?: string;
12
+ }
13
+ export interface EdgeOptions extends RuleOptions {
14
+ readonly kinds?: ReadonlyArray<DependencyKind>;
15
+ readonly transitive?: boolean;
16
+ readonly localOnly?: boolean;
17
+ }
18
+ export interface CustomContext {
19
+ readonly graph: Graph;
20
+ /** The subject's root-relative path, `/`-separated. */
21
+ readonly subject: string;
22
+ }
23
+ export type CustomCheck = (context: CustomContext) => ReadonlyArray<string>;
24
+ export interface RuleSpec {
25
+ readonly id: string;
26
+ readonly severity?: Severity;
27
+ readonly reason?: string;
28
+ readonly subject: SelectorInput;
29
+ readonly assertion: Assertion<SelectorInput>;
30
+ /** The closure of a custom rule, whose assertion names it by the rule's ID. */
31
+ readonly check?: CustomCheck;
32
+ }
33
+ export type ReachRule = (id: string, subject: SelectorInput, object: SelectorInput, options?: EdgeOptions) => RuleSpec;
34
+ export type AcyclicRule = (id: string, subject: SelectorInput, options?: EdgeOptions & {
35
+ readonly folderDepth?: number;
36
+ }) => RuleSpec;
37
+ export type ResolvableRule = (id: string, subject: SelectorInput, options?: RuleOptions & {
38
+ readonly allowComputed?: boolean;
39
+ }) => RuleSpec;
40
+ export type DeclaresRule = (id: string, subject: SelectorInput, predicate: DeclarationPredicate, options?: RuleOptions) => RuleSpec;
41
+ export type ExportsOnlyRule = (id: string, subject: SelectorInput, names: ReadonlyArray<string>, options?: RuleOptions) => RuleSpec;
42
+ export type UsesRule = (id: string, subject: SelectorInput, use: UseSpec, options?: RuleOptions) => RuleSpec;
43
+ export type NamedRule = (id: string, subject: SelectorInput, value: string, options?: RuleOptions & {
44
+ readonly forbid?: boolean;
45
+ }) => RuleSpec;
46
+ export type MaxLinesRule = (id: string, subject: SelectorInput, max: number, options?: RuleOptions) => RuleSpec;
47
+ export type CustomRule = (id: string, subject: SelectorInput, check: CustomCheck, options?: RuleOptions) => RuleSpec;
48
+ export interface RuleConstructors {
49
+ readonly forbid: ReachRule;
50
+ readonly require: ReachRule;
51
+ readonly onlyDependOn: ReachRule;
52
+ readonly forbidDependents: ReachRule;
53
+ readonly requireDependents: ReachRule;
54
+ readonly onlyDependedOnBy: ReachRule;
55
+ readonly acyclic: AcyclicRule;
56
+ readonly resolvable: ResolvableRule;
57
+ readonly declares: DeclaresRule;
58
+ readonly declaresNone: DeclaresRule;
59
+ readonly exportsOnly: ExportsOnlyRule;
60
+ readonly forbidUse: UsesRule;
61
+ readonly requireUse: UsesRule;
62
+ readonly prefix: NamedRule;
63
+ readonly suffix: NamedRule;
64
+ readonly maxLines: MaxLinesRule;
65
+ readonly custom: CustomRule;
66
+ }
67
+ export interface PredicateConstructors {
68
+ readonly kind: (...kinds: ReadonlyArray<DeclarationKind>) => DeclarationPredicate;
69
+ readonly abstract: DeclarationPredicate;
70
+ readonly exported: DeclarationPredicate;
71
+ readonly readonlyProperties: DeclarationPredicate;
72
+ readonly extends: (name: string) => DeclarationPredicate;
73
+ readonly implements: (name: string) => DeclarationPredicate;
74
+ readonly decorator: (name: string) => DeclarationPredicate;
75
+ readonly hasMethods: (names: ReadonlyArray<string>, visibility?: Visibility) => DeclarationPredicate;
76
+ readonly onlyPublicMethods: DeclarationPredicate;
77
+ readonly all: (...predicates: ReadonlyArray<DeclarationPredicate>) => DeclarationPredicate;
78
+ }
79
+ export interface UseConstructors {
80
+ readonly looseEquality: UseSpec;
81
+ readonly globals: (...names: ReadonlyArray<string>) => UseSpec;
82
+ readonly imported: (source: string, ...names: ReadonlyArray<string>) => UseSpec;
83
+ }
84
+ export interface Presets {
85
+ readonly recommended: ReadonlyArray<RuleSpec>;
86
+ }
87
+ /** Rule constructors. Each returns plain data; the first argument is the rule's stable ID. */
88
+ export declare const r: RuleConstructors;
89
+ /** Declaration predicates for `r.declares` and `r.declaresNone`. */
90
+ export declare const p: PredicateConstructors;
91
+ /** Uses for `r.forbidUse` and `r.requireUse`. */
92
+ export declare const use: UseConstructors;
93
+ export declare const presets: Presets;
94
+ //# sourceMappingURL=rules.d.ts.map