@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,155 @@
1
+ /** Schemas that mirror lean/Archer/Model.lean. */
2
+ import { Schema } from "effect";
3
+ export declare const Segment: Schema.Codec<string>;
4
+ /** A root-relative path as its segments. */
5
+ export type FilePath = ReadonlyArray<string>;
6
+ export declare const FilePath: Schema.Codec<FilePath>;
7
+ export type Runtime = "node" | "bun";
8
+ export declare const Runtime: Schema.Codec<Runtime>;
9
+ export type Target = {
10
+ readonly _tag: "File";
11
+ readonly path: FilePath;
12
+ } | {
13
+ readonly _tag: "Package";
14
+ readonly name: string;
15
+ readonly subpath: ReadonlyArray<string>;
16
+ } | {
17
+ readonly _tag: "Builtin";
18
+ readonly runtime: Runtime;
19
+ readonly name: string;
20
+ } | {
21
+ readonly _tag: "Unresolved";
22
+ readonly specifier: string;
23
+ } | {
24
+ readonly _tag: "Computed";
25
+ };
26
+ export declare const Target: Schema.Codec<Target>;
27
+ export type DependencyKind = "static" | "type" | "require" | "dynamic";
28
+ export declare const DependencyKind: Schema.Codec<DependencyKind>;
29
+ export interface Location {
30
+ readonly line: number;
31
+ readonly column: number;
32
+ }
33
+ export declare const Location: Schema.Codec<Location>;
34
+ export interface Dependency {
35
+ readonly target: Target;
36
+ readonly kind: DependencyKind;
37
+ readonly specifier: string;
38
+ readonly location: Location;
39
+ }
40
+ export declare const Dependency: Schema.Codec<Dependency>;
41
+ export type DeclarationKind = "class" | "interface" | "enum" | "function" | "type" | "variable";
42
+ export declare const DeclarationKind: Schema.Codec<DeclarationKind>;
43
+ export type Visibility = "public" | "protected" | "private";
44
+ export declare const Visibility: Schema.Codec<Visibility>;
45
+ export interface Method {
46
+ readonly name: string;
47
+ readonly visibility: Visibility;
48
+ readonly isStatic: boolean;
49
+ }
50
+ export declare const Method: Schema.Codec<Method>;
51
+ export interface Declaration {
52
+ readonly name: string;
53
+ readonly kind: DeclarationKind;
54
+ readonly exported: boolean;
55
+ readonly abstract: boolean;
56
+ readonly extended: ReadonlyArray<string>;
57
+ readonly implemented: ReadonlyArray<string>;
58
+ readonly decorators: ReadonlyArray<string>;
59
+ readonly methods: ReadonlyArray<Method>;
60
+ readonly readonlyProperties: boolean;
61
+ readonly location: Location;
62
+ }
63
+ export declare const Declaration: Schema.Codec<Declaration>;
64
+ export type UseKind = "call" | "looseEquality";
65
+ export declare const UseKind: Schema.Codec<UseKind>;
66
+ /** The module and export name that an imported call resolves to. */
67
+ export interface ImportedName {
68
+ readonly source: string;
69
+ readonly name: string;
70
+ }
71
+ export declare const ImportedName: Schema.Codec<ImportedName>;
72
+ export type Binding = {
73
+ readonly _tag: "Global";
74
+ } | {
75
+ readonly _tag: "Local";
76
+ } | {
77
+ readonly _tag: "Imported";
78
+ readonly name: ImportedName;
79
+ };
80
+ export declare const Binding: Schema.Codec<Binding>;
81
+ export interface Use {
82
+ readonly kind: UseKind;
83
+ readonly name: string;
84
+ readonly binding: Binding;
85
+ readonly location: Location;
86
+ }
87
+ export declare const Use: Schema.Codec<Use>;
88
+ export interface SourceFile {
89
+ readonly path: FilePath;
90
+ readonly dependencies: ReadonlyArray<Dependency>;
91
+ readonly declarations: ReadonlyArray<Declaration>;
92
+ readonly exports: ReadonlyArray<string>;
93
+ readonly uses: ReadonlyArray<Use>;
94
+ readonly lines: number;
95
+ }
96
+ export declare const SourceFile: Schema.Codec<SourceFile>;
97
+ /** Decoding establishes the Lean premise `Graph.WellFormed`. */
98
+ export interface Graph {
99
+ readonly files: ReadonlyArray<SourceFile>;
100
+ }
101
+ export declare const Graph: Schema.Codec<Graph>;
102
+ export interface EdgeFilter {
103
+ readonly kinds: ReadonlyArray<DependencyKind>;
104
+ readonly localOnly: boolean;
105
+ readonly transitive: boolean;
106
+ }
107
+ export declare const EdgeFilter: Schema.Codec<EdgeFilter>;
108
+ export declare const admits: (filter: EdgeFilter, dependency: Dependency) => boolean;
109
+ export declare const graphPaths: (graph: Graph) => Array<FilePath>;
110
+ export type SegmentToken = {
111
+ readonly _tag: "Literal";
112
+ readonly char: string;
113
+ } | {
114
+ readonly _tag: "One";
115
+ } | {
116
+ readonly _tag: "Star";
117
+ };
118
+ export declare const SegmentToken: Schema.Codec<SegmentToken>;
119
+ export type PathToken = {
120
+ readonly _tag: "Segment";
121
+ readonly tokens: ReadonlyArray<SegmentToken>;
122
+ } | {
123
+ readonly _tag: "Globstar";
124
+ };
125
+ export declare const PathToken: Schema.Codec<PathToken>;
126
+ export type Selector = {
127
+ readonly _tag: "Glob";
128
+ readonly tokens: ReadonlyArray<PathToken>;
129
+ }
130
+ /** `npm:<name>`, or `npm:*` without a name. Any subpath. */
131
+ | {
132
+ readonly _tag: "Package";
133
+ readonly name?: string;
134
+ }
135
+ /** `node:fs`, `node:*`, `bun:*`. */
136
+ | {
137
+ readonly _tag: "Builtin";
138
+ readonly runtime: Runtime;
139
+ readonly name?: string;
140
+ } | {
141
+ readonly _tag: "Unresolved";
142
+ } | {
143
+ readonly _tag: "Computed";
144
+ } | {
145
+ readonly _tag: "Any";
146
+ readonly selectors: ReadonlyArray<Selector>;
147
+ } | {
148
+ readonly _tag: "All";
149
+ readonly selectors: ReadonlyArray<Selector>;
150
+ } | {
151
+ readonly _tag: "Not";
152
+ readonly selector: Selector;
153
+ };
154
+ export declare const Selector: Schema.Codec<Selector>;
155
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,116 @@
1
+ /** Schemas that mirror lean/Archer/Model.lean. */
2
+ import { Schema } from "effect";
3
+ export const Segment = Schema.String.check(Schema.isNonEmpty(), Schema.makeFilter((segment) => !segment.includes("/") || "must not contain '/'"));
4
+ export const FilePath = Schema.Array(Segment);
5
+ export const Runtime = Schema.Literals(["node", "bun"]);
6
+ export const Target = Schema.Union([
7
+ Schema.TaggedStruct("File", { path: FilePath }),
8
+ Schema.TaggedStruct("Package", { name: Schema.NonEmptyString, subpath: Schema.Array(Schema.String) }),
9
+ Schema.TaggedStruct("Builtin", { runtime: Runtime, name: Schema.NonEmptyString }),
10
+ Schema.TaggedStruct("Unresolved", { specifier: Schema.String }),
11
+ Schema.TaggedStruct("Computed", {}),
12
+ ]);
13
+ export const DependencyKind = Schema.Literals(["static", "type", "require", "dynamic"]);
14
+ export const Location = Schema.Struct({
15
+ line: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
16
+ column: Schema.Int.check(Schema.isGreaterThanOrEqualTo(1)),
17
+ });
18
+ export const Dependency = Schema.Struct({
19
+ target: Target,
20
+ kind: DependencyKind,
21
+ specifier: Schema.String,
22
+ location: Location,
23
+ });
24
+ export const DeclarationKind = Schema.Literals([
25
+ "class",
26
+ "interface",
27
+ "enum",
28
+ "function",
29
+ "type",
30
+ "variable",
31
+ ]);
32
+ export const Visibility = Schema.Literals(["public", "protected", "private"]);
33
+ export const Method = Schema.Struct({
34
+ name: Schema.NonEmptyString,
35
+ visibility: Visibility,
36
+ isStatic: Schema.Boolean,
37
+ });
38
+ export const Declaration = Schema.Struct({
39
+ name: Schema.String,
40
+ kind: DeclarationKind,
41
+ exported: Schema.Boolean,
42
+ abstract: Schema.Boolean,
43
+ extended: Schema.Array(Schema.String),
44
+ implemented: Schema.Array(Schema.String),
45
+ decorators: Schema.Array(Schema.String),
46
+ methods: Schema.Array(Method),
47
+ readonlyProperties: Schema.Boolean,
48
+ location: Location,
49
+ });
50
+ export const UseKind = Schema.Literals(["call", "looseEquality"]);
51
+ export const ImportedName = Schema.Struct({
52
+ source: Schema.NonEmptyString,
53
+ name: Schema.NonEmptyString,
54
+ });
55
+ export const Binding = Schema.Union([
56
+ /** No declaration in the program, such as `eval`. */
57
+ Schema.TaggedStruct("Global", {}),
58
+ Schema.TaggedStruct("Local", {}),
59
+ Schema.TaggedStruct("Imported", { name: ImportedName }),
60
+ ]);
61
+ export const Use = Schema.Struct({
62
+ kind: UseKind,
63
+ name: Schema.String,
64
+ binding: Binding,
65
+ location: Location,
66
+ });
67
+ export const SourceFile = Schema.Struct({
68
+ path: FilePath,
69
+ dependencies: Schema.Array(Dependency),
70
+ declarations: Schema.Array(Declaration),
71
+ exports: Schema.Array(Schema.String),
72
+ uses: Schema.Array(Use),
73
+ lines: Schema.Int.check(Schema.isGreaterThanOrEqualTo(0)),
74
+ });
75
+ const joinPath = (path) => path.join("/");
76
+ export const Graph = Schema.Struct({ files: Schema.Array(SourceFile) }).check(Schema.makeFilter((graph) => {
77
+ const seen = new Set();
78
+ for (const file of graph.files) {
79
+ const key = joinPath(file.path);
80
+ if (seen.has(key)) {
81
+ return { path: ["files"], issue: `source file '${key}' appears more than once` };
82
+ }
83
+ seen.add(key);
84
+ }
85
+ return undefined;
86
+ }));
87
+ export const EdgeFilter = Schema.Struct({
88
+ kinds: Schema.Array(DependencyKind).check(Schema.isNonEmpty(), Schema.isUnique()),
89
+ localOnly: Schema.Boolean,
90
+ transitive: Schema.Boolean,
91
+ });
92
+ export const admits = (filter, dependency) => filter.kinds.includes(dependency.kind) && (!filter.localOnly || dependency.target._tag === "File");
93
+ export const graphPaths = (graph) => graph.files.map((file) => file.path);
94
+ export const SegmentToken = Schema.Union([
95
+ Schema.TaggedStruct("Literal", { char: Schema.String.check(Schema.isBetweenCodePoints(1, 1)) }),
96
+ /** `?` */
97
+ Schema.TaggedStruct("One", {}),
98
+ /** `*` */
99
+ Schema.TaggedStruct("Star", {}),
100
+ ]);
101
+ export const PathToken = Schema.Union([
102
+ Schema.TaggedStruct("Segment", { tokens: Schema.Array(SegmentToken) }),
103
+ /** `**` */
104
+ Schema.TaggedStruct("Globstar", {}),
105
+ ]);
106
+ export const Selector = Schema.Union([
107
+ Schema.TaggedStruct("Glob", { tokens: Schema.Array(PathToken) }),
108
+ Schema.TaggedStruct("Package", { name: Schema.optionalKey(Schema.NonEmptyString) }),
109
+ Schema.TaggedStruct("Builtin", { runtime: Runtime, name: Schema.optionalKey(Schema.NonEmptyString) }),
110
+ Schema.TaggedStruct("Unresolved", {}),
111
+ Schema.TaggedStruct("Computed", {}),
112
+ Schema.TaggedStruct("Any", { selectors: Schema.Array(Schema.suspend(() => Selector)) }),
113
+ Schema.TaggedStruct("All", { selectors: Schema.Array(Schema.suspend(() => Selector)) }),
114
+ Schema.TaggedStruct("Not", { selector: Schema.suspend(() => Selector) }),
115
+ ]);
116
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../src/core/model.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Port of `Archer.Pattern.accepts` (lean/Archer/Pattern.lean), specialized to
3
+ * strings: code points for segments, segments for paths. Correspondence is
4
+ * obligation T1 in docs/verification.md.
5
+ */
6
+ export type Token = {
7
+ readonly _tag: "Sat";
8
+ readonly test: (value: string) => boolean;
9
+ } | {
10
+ readonly _tag: "Many";
11
+ };
12
+ export declare const accepts: (pattern: ReadonlyArray<Token>, list: ReadonlyArray<string>) => boolean;
13
+ //# sourceMappingURL=pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.d.ts","sourceRoot":"","sources":["../../src/core/pattern.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,MAAM,KAAK,GACb;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAA;CAAE,GACnE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAA;AA6B7B,eAAO,MAAM,OAAO,YAAa,aAAa,CAAC,KAAK,CAAC,QAAQ,aAAa,CAAC,MAAM,CAAC,KAAG,OACnD,CAAA"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Port of `Archer.Pattern.accepts` (lean/Archer/Pattern.lean), specialized to
3
+ * strings: code points for segments, segments for paths. Correspondence is
4
+ * obligation T1 in docs/verification.md.
5
+ */
6
+ import { Match } from "effect";
7
+ const acceptsFrom = (pattern, patternIndex, list, listIndex) => {
8
+ const token = pattern[patternIndex];
9
+ if (token === undefined) {
10
+ return listIndex === list.length;
11
+ }
12
+ return Match.valueTags(token, {
13
+ Sat: ({ test }) => {
14
+ const value = list[listIndex];
15
+ return value !== undefined && test(value) && acceptsFrom(pattern, patternIndex + 1, list, listIndex + 1);
16
+ },
17
+ // Lean `anySuffix`: suffixes from the longest
18
+ Many: () => {
19
+ for (let suffix = listIndex; suffix <= list.length; suffix++) {
20
+ if (acceptsFrom(pattern, patternIndex + 1, list, suffix)) {
21
+ return true;
22
+ }
23
+ }
24
+ return false;
25
+ },
26
+ });
27
+ };
28
+ export const accepts = (pattern, list) => acceptsFrom(pattern, 0, list, 0);
29
+ //# sourceMappingURL=pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pattern.js","sourceRoot":"","sources":["../../src/core/pattern.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAM9B,MAAM,WAAW,GAAG,CAClB,OAA6B,EAC7B,YAAoB,EACpB,IAA2B,EAC3B,SAAiB,EACR,EAAE;IACX,MAAM,KAAK,GAAG,OAAO,CAAC,YAAY,CAAC,CAAA;IACnC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,KAAK,IAAI,CAAC,MAAM,CAAA;IAClC,CAAC;IACD,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE;QAC5B,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;YAChB,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,CAAA;YAC7B,OAAO,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC,CAAA;QAC1G,CAAC;QACD,8CAA8C;QAC9C,IAAI,EAAE,GAAG,EAAE;YACT,KAAK,IAAI,MAAM,GAAG,SAAS,EAAE,MAAM,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,CAAC;gBAC7D,IAAI,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,CAAC;oBACzD,OAAO,IAAI,CAAA;gBACb,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAA;QACd,CAAC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,OAA6B,EAAE,IAA2B,EAAW,EAAE,CAC7F,WAAW,CAAC,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA"}
@@ -0,0 +1,10 @@
1
+ import { type EdgeFilter, type FilePath, type Graph, type SourceFile, type Target } from "./model.ts";
2
+ import type { Edge } from "./rule.ts";
3
+ export type Found = ReadonlyArray<readonly [Target, ReadonlyArray<Edge>]>;
4
+ export type ReachFn = (graph: Graph, filter: EdgeFilter, source: FilePath) => Found;
5
+ /** Lean `Graph.find?`: the first file with the path. */
6
+ export declare const find: (graph: Graph, path: FilePath) => SourceFile | undefined;
7
+ export declare const reach: ReachFn;
8
+ /** The witness `reach` reports for `target`, found without searching past it. */
9
+ export declare const reachTarget: (graph: Graph, filter: EdgeFilter, source: FilePath, target: Target) => ReadonlyArray<Edge> | undefined;
10
+ //# sourceMappingURL=reach.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reach.d.ts","sourceRoot":"","sources":["../../src/core/reach.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,YAAY,CAAA;AAC9H,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,MAAM,KAAK,GAAG,aAAa,CAAC,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AAEzE,MAAM,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,QAAQ,KAAK,KAAK,CAAA;AAInF,wDAAwD;AACxD,eAAO,MAAM,IAAI,UAAW,KAAK,QAAQ,QAAQ,KAAG,UAAU,GAAG,SAWhE,CAAA;AAqED,eAAO,MAAM,KAAK,EAAE,OACsB,CAAA;AAE1C,iFAAiF;AACjF,eAAO,MAAM,WAAW,UACf,KAAK,UACJ,UAAU,UACV,QAAQ,UACR,MAAM,KACb,aAAa,CAAC,IAAI,CAAC,GAAG,SAIxB,CAAA"}
@@ -0,0 +1,81 @@
1
+ /** Port of lean/Archer/Impl/Reach.lean. Output order: breadth-first discovery, as documented there. */
2
+ import { pathKey, targetKey } from "./keys.js";
3
+ import { admits } from "./model.js";
4
+ const indexes = new WeakMap();
5
+ /** Lean `Graph.find?`: the first file with the path. */
6
+ export const find = (graph, path) => {
7
+ let index = indexes.get(graph);
8
+ if (index === undefined) {
9
+ index = new Map();
10
+ for (const file of graph.files) {
11
+ const key = pathKey(file.path);
12
+ if (!index.has(key))
13
+ index.set(key, file);
14
+ }
15
+ indexes.set(graph, index);
16
+ }
17
+ return index.get(pathKey(path));
18
+ };
19
+ const stepsByGraph = new WeakMap();
20
+ const steps = (graph, file) => {
21
+ let byFile = stepsByGraph.get(graph);
22
+ if (byFile === undefined) {
23
+ byFile = new WeakMap();
24
+ stepsByGraph.set(graph, byFile);
25
+ }
26
+ const cached = byFile.get(file);
27
+ if (cached !== undefined)
28
+ return cached;
29
+ const computed = file.dependencies.map((dependency) => ({
30
+ dependency,
31
+ key: targetKey(dependency.target),
32
+ next: dependency.target._tag === "File" ? find(graph, dependency.target.path) : undefined,
33
+ }));
34
+ byFile.set(file, computed);
35
+ return computed;
36
+ };
37
+ /**
38
+ * The breadth-first search of Lean's `reach`. With `stopAt`, it returns as
39
+ * soon as that target is discovered; discovery happens once per target, so
40
+ * the witness is the one the whole search would report.
41
+ */
42
+ const search = (graph, filter, source, stopAt) => {
43
+ const found = [];
44
+ const continuations = [];
45
+ const seen = new Set();
46
+ const start = find(graph, source);
47
+ let front = start === undefined ? [] : [[start, []]];
48
+ for (let fuel = graph.files.length + 1; fuel > 0 && front.length > 0; fuel--) {
49
+ const before = found.length;
50
+ for (const [file, witness] of front) {
51
+ for (const step of steps(graph, file)) {
52
+ if (!admits(filter, step.dependency) || seen.has(step.key))
53
+ continue;
54
+ seen.add(step.key);
55
+ found.push([step.dependency.target, [...witness, { source: file.path, dependency: step.dependency }]]);
56
+ continuations.push(step.next);
57
+ if (step.key === stopAt)
58
+ return found;
59
+ }
60
+ }
61
+ if (!filter.transitive)
62
+ break;
63
+ const round = [];
64
+ for (let index = before; index < found.length; index++) {
65
+ const next = continuations[index];
66
+ const entry = found[index];
67
+ if (next !== undefined && entry !== undefined)
68
+ round.push([next, entry[1]]);
69
+ }
70
+ front = round;
71
+ }
72
+ return found;
73
+ };
74
+ export const reach = (graph, filter, source) => search(graph, filter, source, undefined);
75
+ /** The witness `reach` reports for `target`, found without searching past it. */
76
+ export const reachTarget = (graph, filter, source, target) => {
77
+ const key = targetKey(target);
78
+ const last = search(graph, filter, source, key).at(-1);
79
+ return last !== undefined && targetKey(last[0]) === key ? last[1] : undefined;
80
+ };
81
+ //# sourceMappingURL=reach.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reach.js","sourceRoot":"","sources":["../../src/core/reach.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,200 @@
1
+ /** Schemas and semantics of lean/Archer/Rule.lean. */
2
+ import { Schema } from "effect";
3
+ import { type Declaration, DeclarationKind, Dependency, EdgeFilter, FilePath, type Graph, Location, Selector, Target, Use, Visibility } from "./model.ts";
4
+ export type Severity = "error" | "warning" | "info";
5
+ export declare const Severity: Schema.Codec<Severity>;
6
+ export type Direction = "outgoing" | "incoming";
7
+ export declare const Direction: Schema.Codec<Direction>;
8
+ export type Relation = "forbid" | "require";
9
+ export declare const Relation: Schema.Codec<Relation>;
10
+ export type Quantifier = "every" | "none";
11
+ export declare const Quantifier: Schema.Codec<Quantifier>;
12
+ export type DeclarationPredicate = {
13
+ readonly _tag: "Kind";
14
+ readonly kinds: ReadonlyArray<DeclarationKind>;
15
+ } | {
16
+ readonly _tag: "Abstract";
17
+ } | {
18
+ readonly _tag: "Exported";
19
+ } | {
20
+ readonly _tag: "ReadonlyProperties";
21
+ } | {
22
+ readonly _tag: "Extends";
23
+ readonly name: string;
24
+ } | {
25
+ readonly _tag: "Implements";
26
+ readonly name: string;
27
+ } | {
28
+ readonly _tag: "Decorator";
29
+ readonly name: string;
30
+ }
31
+ /** Declares every named method, with the visibility when one is given. */
32
+ | {
33
+ readonly _tag: "HasMethods";
34
+ readonly names: ReadonlyArray<string>;
35
+ readonly visibility?: Visibility;
36
+ } | {
37
+ readonly _tag: "OnlyPublicMethods";
38
+ } | {
39
+ readonly _tag: "All";
40
+ readonly predicates: ReadonlyArray<DeclarationPredicate>;
41
+ };
42
+ export declare const DeclarationPredicate: Schema.Codec<DeclarationPredicate>;
43
+ export declare const holds: (predicate: DeclarationPredicate, declaration: Declaration) => boolean;
44
+ export type UseSpec = {
45
+ readonly _tag: "LooseEquality";
46
+ } | {
47
+ readonly _tag: "Globals";
48
+ readonly names: ReadonlyArray<string>;
49
+ } | {
50
+ readonly _tag: "Imported";
51
+ readonly source: string;
52
+ readonly names: ReadonlyArray<string>;
53
+ };
54
+ export declare const UseSpec: Schema.Codec<UseSpec>;
55
+ export declare const matchesUse: (spec: UseSpec, use: Use) => boolean;
56
+ export type Affix = "prefix" | "suffix";
57
+ export declare const Affix: Schema.Codec<Affix>;
58
+ /** Compares code points, as Lean's `String.toList`. */
59
+ export declare const affixHolds: (affix: Affix, value: string, name: string) => boolean;
60
+ /** `S` is `Selector` in a checked policy and `ConfigSelector` in a configuration. */
61
+ export type Assertion<S> = {
62
+ readonly _tag: "Reach";
63
+ readonly direction: Direction;
64
+ readonly relation: Relation;
65
+ readonly object: S;
66
+ readonly edges: EdgeFilter;
67
+ }
68
+ /** With `folderDepth`, files collapse to their folder prefix before cycles are detected. */
69
+ | {
70
+ readonly _tag: "Acyclic";
71
+ readonly edges: EdgeFilter;
72
+ readonly folderDepth?: number;
73
+ } | {
74
+ readonly _tag: "Resolvable";
75
+ readonly allowComputed: boolean;
76
+ } | {
77
+ readonly _tag: "Declares";
78
+ readonly quantifier: Quantifier;
79
+ readonly predicate: DeclarationPredicate;
80
+ } | {
81
+ readonly _tag: "ExportsOnly";
82
+ readonly names: ReadonlyArray<string>;
83
+ } | {
84
+ readonly _tag: "Uses";
85
+ readonly relation: Relation;
86
+ readonly use: UseSpec;
87
+ } | {
88
+ readonly _tag: "Named";
89
+ readonly relation: Relation;
90
+ readonly affix: Affix;
91
+ readonly value: string;
92
+ } | {
93
+ readonly _tag: "MaxLines";
94
+ readonly max: number;
95
+ }
96
+ /** A closure from the configuration, named here so the rule stays data. */
97
+ | {
98
+ readonly _tag: "Custom";
99
+ readonly name: string;
100
+ };
101
+ export declare const assertionOf: <S>(selector: Schema.Codec<S>) => Schema.Codec<Assertion<S>>;
102
+ export interface RuleOf<S> {
103
+ readonly id: string;
104
+ readonly severity: Severity;
105
+ readonly subject: S;
106
+ readonly assertion: Assertion<S>;
107
+ }
108
+ export declare const ruleOf: <S>(selector: Schema.Codec<S>) => Schema.Codec<RuleOf<S>>;
109
+ export type Rule = RuleOf<Selector>;
110
+ export declare const Rule: Schema.Codec<Rule>;
111
+ export type Policy = ReadonlyArray<Rule>;
112
+ export interface Edge {
113
+ readonly source: FilePath;
114
+ readonly dependency: Dependency;
115
+ }
116
+ export declare const Edge: Schema.Codec<Edge>;
117
+ export type Evidence = {
118
+ readonly _tag: "Walk";
119
+ readonly target: Target;
120
+ readonly edges: ReadonlyArray<Edge>;
121
+ } | {
122
+ readonly _tag: "Missing";
123
+ } | {
124
+ readonly _tag: "Cycle";
125
+ readonly edges: ReadonlyArray<Edge>;
126
+ } | {
127
+ readonly _tag: "Dependency";
128
+ readonly edge: Edge;
129
+ } | {
130
+ readonly _tag: "Declaration";
131
+ readonly name: string;
132
+ readonly location: Location;
133
+ } | {
134
+ readonly _tag: "Export";
135
+ readonly name: string;
136
+ } | {
137
+ readonly _tag: "Use";
138
+ readonly use: Use;
139
+ } | {
140
+ readonly _tag: "Name";
141
+ readonly basename: string;
142
+ } | {
143
+ readonly _tag: "Lines";
144
+ readonly count: number;
145
+ } | {
146
+ readonly _tag: "Custom";
147
+ readonly message: string;
148
+ };
149
+ export declare const Evidence: Schema.Codec<Evidence>;
150
+ /** What identifies a violation within one rule and subject: walks and cycles without their edges. */
151
+ export type EvidenceKey = {
152
+ readonly _tag: "Target";
153
+ readonly target: Target;
154
+ } | {
155
+ readonly _tag: "Missing";
156
+ } | {
157
+ readonly _tag: "Cycle";
158
+ } | {
159
+ readonly _tag: "Dependency";
160
+ readonly edge: Edge;
161
+ } | {
162
+ readonly _tag: "Declaration";
163
+ readonly name: string;
164
+ readonly location: Location;
165
+ } | {
166
+ readonly _tag: "Export";
167
+ readonly name: string;
168
+ } | {
169
+ readonly _tag: "Use";
170
+ readonly use: Use;
171
+ } | {
172
+ readonly _tag: "Name";
173
+ } | {
174
+ readonly _tag: "Lines";
175
+ } | {
176
+ readonly _tag: "Custom";
177
+ readonly message: string;
178
+ };
179
+ export declare const EvidenceKey: Schema.Codec<EvidenceKey>;
180
+ export declare const evidenceKey: (evidence: Evidence) => EvidenceKey;
181
+ export interface Violation {
182
+ readonly ruleId: string;
183
+ readonly severity: Severity;
184
+ /** A source file, or a folder for a collapsed cycle rule. */
185
+ readonly subject: FilePath;
186
+ readonly evidence: Evidence;
187
+ }
188
+ export declare const Violation: Schema.Codec<Violation>;
189
+ export declare const violationKey: (violation: Violation) => readonly [string, FilePath, EvidenceKey];
190
+ export type CustomRules = (name: string, graph: Graph, subject: FilePath) => ReadonlyArray<string>;
191
+ export declare const basename: (path: FilePath) => string;
192
+ /** Lean `Graph.restrict`: the given files, and only the dependencies between them. */
193
+ export declare const restrict: (graph: Graph, keep: (path: FilePath) => boolean) => Graph;
194
+ /** Lean `folderOf`: the first `depth` segments of the file's directory. */
195
+ export declare const folderOf: (depth: number, path: FilePath) => FilePath;
196
+ /** Lean `Graph.collapse`: one node per folder, an edge per dependency that crosses folders. */
197
+ export declare const collapse: (graph: Graph, depth: number) => Graph;
198
+ export declare const assertionSelectors: <S>(assertion: Assertion<S>) => Array<S>;
199
+ export declare const mapAssertion: <S, T>(assertion: Assertion<S>, f: (selector: S) => T) => Assertion<T>;
200
+ //# sourceMappingURL=rule.d.ts.map