@ploaness/governance 1.1.0 → 1.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 (236) hide show
  1. package/dist/a11y-hit-target.d.ts.map +1 -1
  2. package/dist/a11y-hit-target.js +1 -21
  3. package/dist/a11y-hit-target.js.map +1 -1
  4. package/dist/a11y-incomplete.d.ts.map +1 -1
  5. package/dist/a11y-incomplete.js +1 -18
  6. package/dist/a11y-incomplete.js.map +1 -1
  7. package/dist/access-boundary.d.ts +43 -1
  8. package/dist/access-boundary.d.ts.map +1 -1
  9. package/dist/access-boundary.js +146 -5
  10. package/dist/access-boundary.js.map +1 -1
  11. package/dist/admin-view-coverage.d.ts.map +1 -1
  12. package/dist/admin-view-coverage.js +1 -17
  13. package/dist/admin-view-coverage.js.map +1 -1
  14. package/dist/asset-policy.d.ts.map +1 -1
  15. package/dist/asset-policy.js +1 -23
  16. package/dist/asset-policy.js.map +1 -1
  17. package/dist/axe-coverage.d.ts +3 -4
  18. package/dist/axe-coverage.d.ts.map +1 -1
  19. package/dist/axe-coverage.js +18 -51
  20. package/dist/axe-coverage.js.map +1 -1
  21. package/dist/blocklist-entries.d.ts +36 -0
  22. package/dist/blocklist-entries.d.ts.map +1 -0
  23. package/dist/blocklist-entries.js +338 -0
  24. package/dist/blocklist-entries.js.map +1 -0
  25. package/dist/blocklist.d.ts +91 -0
  26. package/dist/blocklist.d.ts.map +1 -0
  27. package/dist/blocklist.js +187 -0
  28. package/dist/blocklist.js.map +1 -0
  29. package/dist/checkov-check.d.ts +9 -0
  30. package/dist/checkov-check.d.ts.map +1 -0
  31. package/dist/checkov-check.js +4 -0
  32. package/dist/checkov-check.js.map +1 -0
  33. package/dist/checkov-checks-aws.d.ts +4 -0
  34. package/dist/checkov-checks-aws.d.ts.map +1 -0
  35. package/dist/checkov-checks-aws.js +93 -0
  36. package/dist/checkov-checks-aws.js.map +1 -0
  37. package/dist/checkov-checks-azure.d.ts +4 -0
  38. package/dist/checkov-checks-azure.d.ts.map +1 -0
  39. package/dist/checkov-checks-azure.js +32 -0
  40. package/dist/checkov-checks-azure.js.map +1 -0
  41. package/dist/checkov-checks-google.d.ts +6 -0
  42. package/dist/checkov-checks-google.d.ts.map +1 -0
  43. package/dist/checkov-checks-google.js +53 -0
  44. package/dist/checkov-checks-google.js.map +1 -0
  45. package/dist/checkov-policy.d.ts +63 -0
  46. package/dist/checkov-policy.d.ts.map +1 -0
  47. package/dist/checkov-policy.js +105 -0
  48. package/dist/checkov-policy.js.map +1 -0
  49. package/dist/container-failure.d.ts.map +1 -1
  50. package/dist/container-failure.js +1 -18
  51. package/dist/container-failure.js.map +1 -1
  52. package/dist/container-files.d.ts +16 -0
  53. package/dist/container-files.d.ts.map +1 -1
  54. package/dist/container-files.js +23 -8
  55. package/dist/container-files.js.map +1 -1
  56. package/dist/container-images.d.ts +43 -0
  57. package/dist/container-images.d.ts.map +1 -0
  58. package/dist/container-images.js +157 -0
  59. package/dist/container-images.js.map +1 -0
  60. package/dist/dependency-freshness.d.ts +8 -0
  61. package/dist/dependency-freshness.d.ts.map +1 -1
  62. package/dist/dependency-freshness.js +2 -18
  63. package/dist/dependency-freshness.js.map +1 -1
  64. package/dist/doc-blocks.d.ts.map +1 -1
  65. package/dist/doc-blocks.js +1 -13
  66. package/dist/doc-blocks.js.map +1 -1
  67. package/dist/editorconfig-policy.d.ts +7 -0
  68. package/dist/editorconfig-policy.d.ts.map +1 -1
  69. package/dist/editorconfig-policy.js +19 -12
  70. package/dist/editorconfig-policy.js.map +1 -1
  71. package/dist/environment-coherence.d.ts +59 -5
  72. package/dist/environment-coherence.d.ts.map +1 -1
  73. package/dist/environment-coherence.js +107 -27
  74. package/dist/environment-coherence.js.map +1 -1
  75. package/dist/environment-files.d.ts.map +1 -1
  76. package/dist/environment-files.js +1 -19
  77. package/dist/environment-files.js.map +1 -1
  78. package/dist/file-roles.d.ts +7 -2
  79. package/dist/file-roles.d.ts.map +1 -1
  80. package/dist/file-roles.js +10 -9
  81. package/dist/file-roles.js.map +1 -1
  82. package/dist/freshness-repair.d.ts +82 -0
  83. package/dist/freshness-repair.d.ts.map +1 -0
  84. package/dist/freshness-repair.js +91 -0
  85. package/dist/freshness-repair.js.map +1 -0
  86. package/dist/generated-denial.d.ts.map +1 -1
  87. package/dist/generated-denial.js +1 -9
  88. package/dist/generated-denial.js.map +1 -1
  89. package/dist/generated-drift.d.ts.map +1 -1
  90. package/dist/generated-drift.js +1 -12
  91. package/dist/generated-drift.js.map +1 -1
  92. package/dist/harness-package.d.ts +13 -0
  93. package/dist/harness-package.d.ts.map +1 -0
  94. package/dist/harness-package.js +20 -0
  95. package/dist/harness-package.js.map +1 -0
  96. package/dist/history-policy.d.ts.map +1 -1
  97. package/dist/history-policy.js +1 -7
  98. package/dist/history-policy.js.map +1 -1
  99. package/dist/image-assets.d.ts.map +1 -1
  100. package/dist/image-assets.js +1 -10
  101. package/dist/image-assets.js.map +1 -1
  102. package/dist/index.d.ts +20 -0
  103. package/dist/index.d.ts.map +1 -1
  104. package/dist/index.js +20 -0
  105. package/dist/index.js.map +1 -1
  106. package/dist/install-policy.d.ts +21 -0
  107. package/dist/install-policy.d.ts.map +1 -1
  108. package/dist/install-policy.js +53 -1
  109. package/dist/install-policy.js.map +1 -1
  110. package/dist/jsx-accessibility-scope.d.ts +17 -0
  111. package/dist/jsx-accessibility-scope.d.ts.map +1 -0
  112. package/dist/jsx-accessibility-scope.js +36 -0
  113. package/dist/jsx-accessibility-scope.js.map +1 -0
  114. package/dist/jsx-accessibility.d.ts +13 -0
  115. package/dist/jsx-accessibility.d.ts.map +1 -0
  116. package/dist/jsx-accessibility.js +188 -0
  117. package/dist/jsx-accessibility.js.map +1 -0
  118. package/dist/network-policy.d.ts.map +1 -1
  119. package/dist/network-policy.js +1 -12
  120. package/dist/network-policy.js.map +1 -1
  121. package/dist/oxlint-policy.d.ts +16 -0
  122. package/dist/oxlint-policy.d.ts.map +1 -0
  123. package/dist/oxlint-policy.js +28 -0
  124. package/dist/oxlint-policy.js.map +1 -0
  125. package/dist/oxlint-report.d.ts +29 -0
  126. package/dist/oxlint-report.d.ts.map +1 -0
  127. package/dist/oxlint-report.js +84 -0
  128. package/dist/oxlint-report.js.map +1 -0
  129. package/dist/oxlint-scope.d.ts +13 -0
  130. package/dist/oxlint-scope.d.ts.map +1 -0
  131. package/dist/oxlint-scope.js +46 -0
  132. package/dist/oxlint-scope.js.map +1 -0
  133. package/dist/oxlint-suppressions.d.ts +17 -0
  134. package/dist/oxlint-suppressions.d.ts.map +1 -0
  135. package/dist/oxlint-suppressions.js +72 -0
  136. package/dist/oxlint-suppressions.js.map +1 -0
  137. package/dist/paired-assets.d.ts.map +1 -1
  138. package/dist/paired-assets.js.map +1 -1
  139. package/dist/payload-access.d.ts +6 -0
  140. package/dist/payload-access.d.ts.map +1 -1
  141. package/dist/payload-access.js +166 -9
  142. package/dist/payload-access.js.map +1 -1
  143. package/dist/payload-bootstrap.d.ts +52 -0
  144. package/dist/payload-bootstrap.d.ts.map +1 -0
  145. package/dist/payload-bootstrap.js +195 -0
  146. package/dist/payload-bootstrap.js.map +1 -0
  147. package/dist/payload-configs.d.ts +0 -1
  148. package/dist/payload-configs.d.ts.map +1 -1
  149. package/dist/payload-configs.js +36 -17
  150. package/dist/payload-configs.js.map +1 -1
  151. package/dist/payload-database.d.ts +80 -0
  152. package/dist/payload-database.d.ts.map +1 -0
  153. package/dist/payload-database.js +164 -0
  154. package/dist/payload-database.js.map +1 -0
  155. package/dist/payload-defaults.d.ts +128 -0
  156. package/dist/payload-defaults.d.ts.map +1 -0
  157. package/dist/payload-defaults.js +295 -0
  158. package/dist/payload-defaults.js.map +1 -0
  159. package/dist/payload-policy.d.ts +21 -0
  160. package/dist/payload-policy.d.ts.map +1 -1
  161. package/dist/payload-policy.js +92 -43
  162. package/dist/payload-policy.js.map +1 -1
  163. package/dist/relationship-cleanup.d.ts.map +1 -1
  164. package/dist/relationship-cleanup.js +16 -16
  165. package/dist/relationship-cleanup.js.map +1 -1
  166. package/dist/release-age.d.ts.map +1 -1
  167. package/dist/release-age.js +1 -16
  168. package/dist/release-age.js.map +1 -1
  169. package/dist/request-limits.d.ts.map +1 -1
  170. package/dist/request-limits.js +1 -11
  171. package/dist/request-limits.js.map +1 -1
  172. package/dist/route-map.d.ts.map +1 -1
  173. package/dist/route-map.js +1 -16
  174. package/dist/route-map.js.map +1 -1
  175. package/dist/run-plan.d.ts.map +1 -1
  176. package/dist/run-plan.js +1 -19
  177. package/dist/run-plan.js.map +1 -1
  178. package/dist/secret-policy.d.ts.map +1 -1
  179. package/dist/secret-policy.js +1 -11
  180. package/dist/secret-policy.js.map +1 -1
  181. package/dist/settings-layering.d.ts +8 -30
  182. package/dist/settings-layering.d.ts.map +1 -1
  183. package/dist/settings-layering.js +19 -48
  184. package/dist/settings-layering.js.map +1 -1
  185. package/dist/settings.d.ts +9 -2
  186. package/dist/settings.d.ts.map +1 -1
  187. package/dist/settings.js.map +1 -1
  188. package/dist/shell-files.d.ts +45 -0
  189. package/dist/shell-files.d.ts.map +1 -0
  190. package/dist/shell-files.js +105 -0
  191. package/dist/shell-files.js.map +1 -0
  192. package/dist/source-security.d.ts +10 -0
  193. package/dist/source-security.d.ts.map +1 -1
  194. package/dist/source-security.js +88 -1
  195. package/dist/source-security.js.map +1 -1
  196. package/dist/source-text.d.ts +2 -0
  197. package/dist/source-text.d.ts.map +1 -1
  198. package/dist/source-text.js +7 -16
  199. package/dist/source-text.js.map +1 -1
  200. package/dist/terraform-files.d.ts +29 -0
  201. package/dist/terraform-files.d.ts.map +1 -0
  202. package/dist/terraform-files.js +50 -0
  203. package/dist/terraform-files.js.map +1 -0
  204. package/dist/terraform-policy.d.ts +13 -0
  205. package/dist/terraform-policy.d.ts.map +1 -0
  206. package/dist/terraform-policy.js +261 -0
  207. package/dist/terraform-policy.js.map +1 -0
  208. package/dist/terraform-providers.d.ts +28 -0
  209. package/dist/terraform-providers.d.ts.map +1 -0
  210. package/dist/terraform-providers.js +68 -0
  211. package/dist/terraform-providers.js.map +1 -0
  212. package/dist/toolchain-pins.d.ts +1 -1
  213. package/dist/toolchain-pins.d.ts.map +1 -1
  214. package/dist/toolchain-pins.js +11 -21
  215. package/dist/toolchain-pins.js.map +1 -1
  216. package/dist/version-policy.d.ts +7 -8
  217. package/dist/version-policy.d.ts.map +1 -1
  218. package/dist/version-policy.js +15 -26
  219. package/dist/version-policy.js.map +1 -1
  220. package/dist/vulnerability-policy.d.ts.map +1 -1
  221. package/dist/vulnerability-policy.js +1 -11
  222. package/dist/vulnerability-policy.js.map +1 -1
  223. package/dist/wiring-policy.d.ts.map +1 -1
  224. package/dist/wiring-policy.js +4 -1
  225. package/dist/wiring-policy.js.map +1 -1
  226. package/dist/wiring-violation.d.ts.map +1 -1
  227. package/dist/wiring-violation.js +1 -6
  228. package/dist/wiring-violation.js.map +1 -1
  229. package/dist/workspace-policy.d.ts.map +1 -1
  230. package/dist/workspace-policy.js +3 -9
  231. package/dist/workspace-policy.js.map +1 -1
  232. package/dist/yaml-blocks.d.ts +10 -0
  233. package/dist/yaml-blocks.d.ts.map +1 -1
  234. package/dist/yaml-blocks.js +20 -0
  235. package/dist/yaml-blocks.js.map +1 -1
  236. package/package.json +2 -2
@@ -0,0 +1,45 @@
1
+ /** The extensions ShellCheck recognises as naming a dialect it reads. */
2
+ export declare const SHELL_EXTENSIONS: readonly string[];
3
+ /**
4
+ * Whether a first line names an interpreter ShellCheck reads.
5
+ * @param firstLine the file's first line.
6
+ * @returns true for a shell shebang, false for any other interpreter and for no shebang at all.
7
+ */
8
+ export declare const isShellShebang: (firstLine: string) => boolean;
9
+ /**
10
+ * Whether a path's extension names a shell dialect.
11
+ * @param file the repo-relative path.
12
+ * @returns true when the extension is one ShellCheck reads.
13
+ */
14
+ export declare const isShellScript: (file: string) => boolean;
15
+ /**
16
+ * Whether a path's first line is worth reading to classify it.
17
+ *
18
+ * Only an extensionless basename: anything carrying a dot has already been answered by its extension,
19
+ * and reading it would be an I/O cost with no question behind it.
20
+ * @param file the repo-relative path.
21
+ * @returns true when only the shebang can decide.
22
+ */
23
+ export declare const requiresShebangRead: (file: string) => boolean;
24
+ /**
25
+ * Every shell script the repository tracks.
26
+ *
27
+ * A shebang DECIDES where one is present, so a `.sh` file written for zsh leaves scope rather than
28
+ * being sent to an analyzer that refuses it. Where none is present the extension stands.
29
+ * @param tracked the repo-relative paths of the tracked files.
30
+ * @param firstLineOf reads one file's first line; called only for paths that could be shell.
31
+ * @returns the scripts, ordered so a report reads the same on every machine.
32
+ */
33
+ export declare const shellScriptsIn: (tracked: readonly string[], firstLineOf: (file: string) => string) => readonly string[];
34
+ /** One blanket suppression: the line it sits on, and what it disables. */
35
+ export interface ShellDirective {
36
+ readonly line: number;
37
+ readonly directive: string;
38
+ }
39
+ /**
40
+ * Report every blanket ShellCheck suppression a script applies to itself.
41
+ * @param text the script's contents.
42
+ * @returns one entry per blanket directive, in the order they appear.
43
+ */
44
+ export declare const findBlanketShellDirectives: (text: string) => readonly ShellDirective[];
45
+ //# sourceMappingURL=shell-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-files.d.ts","sourceRoot":"","sources":["../src/shell-files.ts"],"names":[],"mappings":"AAQA,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,EAAE,SAAS,MAAM,EAA+C,CAAA;AAY7F;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAI,WAAW,MAAM,KAAG,OAWlD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,OACoC,CAAA;AAEjF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OAA0C,CAAA;AAE7F;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,GACzB,SAAS,SAAS,MAAM,EAAE,EAC1B,aAAa,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,KACpC,SAAS,MAAM,EAO+D,CAAA;AAEjF,0EAA0E;AAC1E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;CAC3B;AA8CD;;;;GAIG;AACH,eAAO,MAAM,0BAA0B,GAAI,MAAM,MAAM,KAAG,SAAS,cAAc,EAOtE,CAAA"}
@@ -0,0 +1,105 @@
1
+ // Which tracked files are shell scripts, and which suppressions inside them are blanket ones.
2
+ //
3
+ // Extension AND shebang. `scripts/deploy.sh` announces itself, but `hooks/pre-commit` and `bin/release`
4
+ // are shell too and carry no extension, so an extension-only rule would leave exactly the operational
5
+ // scripts unread. Reading the first line of every tracked file would be a sweep of the whole tree, so
6
+ // the read is bounded to the paths whose extension could not already have answered. The reader is
7
+ // injected rather than imported, which is what keeps this layer free of the filesystem.
8
+ /** The extensions ShellCheck recognises as naming a dialect it reads. */
9
+ export const SHELL_EXTENSIONS = ['.sh', '.bash', '.ksh', '.dash', '.bats'];
10
+ // The interpreters ShellCheck can analyse. zsh and fish are deliberately absent: ShellCheck refuses a
11
+ // zsh script with SC1071 and exits non-zero, so treating one as in scope would manufacture a finding
12
+ // about a file written in a dialect it never claimed to read.
13
+ const SHELL_INTERPRETERS = new Set(['sh', 'bash', 'ksh', 'dash', 'bats']);
14
+ const SHEBANG = /^#!\s*(?<command>\S+)(?:[ \t]+(?<argument>\S+))?/;
15
+ const ENV_COMMAND = '/env';
16
+ const basenameOf = (file) => file.slice(file.lastIndexOf('/') + 1);
17
+ /**
18
+ * Whether a first line names an interpreter ShellCheck reads.
19
+ * @param firstLine the file's first line.
20
+ * @returns true for a shell shebang, false for any other interpreter and for no shebang at all.
21
+ */
22
+ export const isShellShebang = (firstLine) => {
23
+ const found = SHEBANG.exec(firstLine);
24
+ if (found === null) {
25
+ return false;
26
+ }
27
+ const command = found.groups?.['command'] ?? '';
28
+ // `#!/usr/bin/env bash` names the interpreter in the argument; everything else names it in the path.
29
+ const interpreter = command.endsWith(ENV_COMMAND)
30
+ ? (found.groups?.['argument'] ?? '')
31
+ : basenameOf(command);
32
+ return SHELL_INTERPRETERS.has(interpreter);
33
+ };
34
+ /**
35
+ * Whether a path's extension names a shell dialect.
36
+ * @param file the repo-relative path.
37
+ * @returns true when the extension is one ShellCheck reads.
38
+ */
39
+ export const isShellScript = (file) => SHELL_EXTENSIONS.some((extension) => file.endsWith(extension));
40
+ /**
41
+ * Whether a path's first line is worth reading to classify it.
42
+ *
43
+ * Only an extensionless basename: anything carrying a dot has already been answered by its extension,
44
+ * and reading it would be an I/O cost with no question behind it.
45
+ * @param file the repo-relative path.
46
+ * @returns true when only the shebang can decide.
47
+ */
48
+ export const requiresShebangRead = (file) => !basenameOf(file).includes('.');
49
+ /**
50
+ * Every shell script the repository tracks.
51
+ *
52
+ * A shebang DECIDES where one is present, so a `.sh` file written for zsh leaves scope rather than
53
+ * being sent to an analyzer that refuses it. Where none is present the extension stands.
54
+ * @param tracked the repo-relative paths of the tracked files.
55
+ * @param firstLineOf reads one file's first line; called only for paths that could be shell.
56
+ * @returns the scripts, ordered so a report reads the same on every machine.
57
+ */
58
+ export const shellScriptsIn = (tracked, firstLineOf) => tracked
59
+ .filter((file) => isShellScript(file) || requiresShebangRead(file))
60
+ .filter((file) => {
61
+ const first = firstLineOf(file);
62
+ return first.startsWith('#!') ? isShellShebang(first) : isShellScript(file);
63
+ })
64
+ .toSorted((left, right) => left.localeCompare(right));
65
+ // A directive that names its codes is the legitimate form, and ShellCheck offers no flag to refuse one.
66
+ // What is refused here is the in-file equivalent of an rc file: `disable=all`, and a range wide enough
67
+ // to mean the same thing. `--norc` removes the project-wide spelling; this removes the per-file one.
68
+ const DISABLE_DIRECTIVE = /#[ \t]*shellcheck[ \t]+disable=(?<codes>\S+)/;
69
+ const BLANKET_CODES = /^(?:all|SC\d+-SC\d+)$/;
70
+ const FIRST_LINE = 1;
71
+ // A heredoc body is data rather than script. A script that WRITES another script carries that script's
72
+ // directives inside it, and reading them as its own reports a repository for the contents of a file it
73
+ // generates. ShellCheck itself draws this line, so a rule that supplements it must draw it too - the
74
+ // same reason `stripComments` exists for source: prose naming a construct is not that construct.
75
+ const HEREDOC_OPEN = /<<-?[ \t]*(?<quote>['"]?)(?<delimiter>[a-z_]\w*)\k<quote>/i;
76
+ // `<<-` strips leading tabs from the terminator, which trimming covers without the scan needing to know
77
+ // which of the two forms opened the body.
78
+ const endsHeredoc = (line, delimiter) => line.trim() === delimiter;
79
+ const blanketDirectiveAt = (line, index) => {
80
+ const codes = DISABLE_DIRECTIVE.exec(line)?.groups?.['codes'];
81
+ return codes !== undefined && BLANKET_CODES.test(codes)
82
+ ? { line: index + FIRST_LINE, directive: codes }
83
+ : undefined;
84
+ };
85
+ const afterLine = (state, line, index) => {
86
+ // Inside a heredoc nothing is read but its terminator.
87
+ if (state.delimiter !== undefined) {
88
+ return endsHeredoc(line, state.delimiter) ? { ...state, delimiter: undefined } : state;
89
+ }
90
+ const opened = HEREDOC_OPEN.exec(line)?.groups?.['delimiter'];
91
+ if (opened !== undefined) {
92
+ return { ...state, delimiter: opened };
93
+ }
94
+ const directive = blanketDirectiveAt(line, index);
95
+ return directive === undefined ? state : { ...state, found: [...state.found, directive] };
96
+ };
97
+ /**
98
+ * Report every blanket ShellCheck suppression a script applies to itself.
99
+ * @param text the script's contents.
100
+ * @returns one entry per blanket directive, in the order they appear.
101
+ */
102
+ export const findBlanketShellDirectives = (text) => text
103
+ .split('\n')
104
+ .reduce((state, line, index) => afterLine(state, line, index), { delimiter: undefined, found: [] }).found;
105
+ //# sourceMappingURL=shell-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-files.js","sourceRoot":"","sources":["../src/shell-files.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,14 @@
1
1
  import type { PayloadViolation } from './payload-source.js';
2
2
  /** Report credential guards whose rejection disappears when the credential is absent. */
3
3
  export declare const findFailOpenSecretGuards: (source: string) => readonly PayloadViolation[];
4
+ /**
5
+ * Report guards that admit the caller when the credential is absent.
6
+ *
7
+ * The mirror of {@link findFailOpenSecretGuards}: that rule reads a rejection guarded by the
8
+ * credential's own truthiness, this one an acceptance guarded by its absence. The two never report the
9
+ * same line, because one requires a top-level `&&` in the condition and the other refuses it.
10
+ * @param source the file's text.
11
+ * @returns one violation per guard that opens on a missing credential.
12
+ */
13
+ export declare const findAbsentSecretAcceptances: (source: string) => readonly PayloadViolation[];
4
14
  //# sourceMappingURL=source-security.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-security.d.ts","sourceRoot":"","sources":["../src/source-security.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AA8C3D,yFAAyF;AACzF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,SAAS,gBAAgB,EAoBlF,CAAA"}
1
+ {"version":3,"file":"source-security.d.ts","sourceRoot":"","sources":["../src/source-security.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAA;AAqD3D,yFAAyF;AACzF,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,KAAG,SAAS,gBAAgB,EAoBlF,CAAA;AAmFD;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,GAAI,QAAQ,MAAM,KAAG,SAAS,gBAAgB,EAwBrF,CAAA"}
@@ -1,4 +1,4 @@
1
- import { balancedArguments, lineOf, maskLiterals } from './source-text.js';
1
+ import { balancedArguments, lineOf, maskLiterals, scanDelimited, } from './source-text.js';
2
2
  const GUARDED_IF = /\bif\s*\(\s*([a-z_$][\w$]*(?:\s*\.\s*[a-z_$][\w$]*)*)\s*&&/gi;
3
3
  const PENULTIMATE = -2;
4
4
  const credentialSegments = (name) => name
@@ -53,4 +53,91 @@ export const findFailOpenSecretGuards = (source) => {
53
53
  : [];
54
54
  });
55
55
  };
56
+ const IF_STATEMENT = /\bif\s*\(/g;
57
+ // An operator is top level when no bracket is open at it, which is what separates `a || (b && c)` -
58
+ // two disjuncts - from `(a || b) && c`, a conjunction. Both characters of the operator are found at
59
+ // the first, because the scan asks whether the operator STARTS here.
60
+ const OPERATOR_WIDTH = 2;
61
+ const topLevelOperators = (condition, operator) => scanDelimited(condition, 0, (found, step) => ({
62
+ state: step.depth === 0 && condition.startsWith(operator, step.index)
63
+ ? [...found, step.index]
64
+ : found,
65
+ stop: false,
66
+ }), []);
67
+ const splitTopLevel = (condition, operator) => {
68
+ const cuts = topLevelOperators(condition, operator);
69
+ const ends = [...cuts, condition.length];
70
+ return [0, ...cuts.map((cut) => cut + OPERATOR_WIDTH)].map((start, position) => condition.slice(start, ends[position] ?? condition.length).trim());
71
+ };
72
+ // The ways a value is tested for absence. `=== ''` is deliberately absent: `maskLiterals` fills a
73
+ // string literal INCLUDING its quotes, so an empty string is indistinguishable from an identifier by
74
+ // the time this reads the text. `.length === 0` expresses the same test and survives masking.
75
+ const ABSENCE_SHAPES = [
76
+ /^!\s*([\w$]+(?:\s*\??\.\s*[\w$]+)*)$/,
77
+ /^([\w$]+(?:\s*\??\.\s*[\w$]+)*)\s*===?\s*(?:undefined|null)$/,
78
+ /^([\w$]+(?:\s*\??\.\s*[\w$]+)*)\s*\.\s*length\s*===?\s*0$/,
79
+ ];
80
+ const absentNameIn = (disjunct) => {
81
+ const matched = ABSENCE_SHAPES.map((shape) => shape.exec(disjunct)).find((found) => found !== null);
82
+ return matched?.[1]?.replaceAll(/\s/g, '').replaceAll('?.', '.');
83
+ };
84
+ // The credential a condition admits on absence, or nothing when the condition is not that shape.
85
+ //
86
+ // A conjunction is refused outright: `if (secret === undefined && enabled)` narrows the branch to a
87
+ // case the project chose, and it is the fail-closed shape the sibling rule's tests already pin. Every
88
+ // disjunct must be an absence test, which is the conservative reading - `if (!secret || isDevelopment)`
89
+ // is fail-open too, but it is not PROVABLY this defect from text, and a false positive here costs more
90
+ // than the finding is worth.
91
+ const acceptedAbsence = (condition) => {
92
+ if (topLevelOperators(condition, '&&').length > 0) {
93
+ return undefined;
94
+ }
95
+ const names = splitTopLevel(condition, '||').map((disjunct) => absentNameIn(disjunct));
96
+ if (names.includes(undefined)) {
97
+ return undefined;
98
+ }
99
+ return names.find((name) => name !== undefined && isCredential(name));
100
+ };
101
+ // The returned VALUE decides, not the presence of a return: `if (!secret) { return unauthorized() }`
102
+ // refuses the caller and is correct, while `return true` admits them. `true` is not a string literal,
103
+ // so it survives masking intact and can be recognised here.
104
+ const ACCEPTANCE = /\breturn\s+true\b/;
105
+ const hasAcceptanceAfter = (masked, close) => {
106
+ const statementStart = masked.slice(close + 1).search(/\S/);
107
+ if (statementStart < 0) {
108
+ return false;
109
+ }
110
+ return ACCEPTANCE.test(statementAt(masked, close + 1 + statementStart));
111
+ };
112
+ /**
113
+ * Report guards that admit the caller when the credential is absent.
114
+ *
115
+ * The mirror of {@link findFailOpenSecretGuards}: that rule reads a rejection guarded by the
116
+ * credential's own truthiness, this one an acceptance guarded by its absence. The two never report the
117
+ * same line, because one requires a top-level `&&` in the condition and the other refuses it.
118
+ * @param source the file's text.
119
+ * @returns one violation per guard that opens on a missing credential.
120
+ */
121
+ export const findAbsentSecretAcceptances = (source) => {
122
+ const masked = maskLiterals(source);
123
+ return [...masked.matchAll(IF_STATEMENT)].flatMap((match) => {
124
+ const open = masked.indexOf('(', match.index);
125
+ const condition = balancedArguments(masked, open);
126
+ if (condition === undefined) {
127
+ return [];
128
+ }
129
+ const credential = acceptedAbsence(condition);
130
+ return credential !== undefined && hasAcceptanceAfter(masked, open + condition.length + 1)
131
+ ? [
132
+ {
133
+ line: lineOf(source, match.index),
134
+ rule: 'no-absent-secret-acceptance',
135
+ reason: `refuse the caller when ${credential} is absent; this admits them instead, so the ` +
136
+ 'endpoint is open exactly when the credential is unset and no request is ever ' +
137
+ 'refused - reject the absence and report the misconfiguration',
138
+ },
139
+ ]
140
+ : [];
141
+ });
142
+ };
56
143
  //# sourceMappingURL=source-security.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"source-security.js","sourceRoot":"","sources":["../src/source-security.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source-security.js","sourceRoot":"","sources":["../src/source-security.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,8 @@ export interface Folded<State> {
23
23
  * @returns the source with comments and regex literals replaced by spaces of equal length.
24
24
  */
25
25
  export declare const stripComments: (source: string) => string;
26
+ /** Remove comments while retaining route patterns written as regular expressions. */
27
+ export declare const withoutComments: (source: string) => string;
26
28
  /**
27
29
  * The source with every string literal replaced by filler of equal length, on top of what
28
30
  * {@link stripComments} erases.
@@ -1 +1 @@
1
- {"version":3,"file":"source-text.d.ts","sourceRoot":"","sources":["../src/source-text.ts"],"names":[],"mappings":"AAkBA,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,MAAW,CAAA;AAExC,8FAA8F;AAC9F,eAAO,MAAM,SAAS,EAAE,MAAW,CAAA;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MACZ,CAAA;AAqI3C,yEAAyE;AACzE,MAAM,WAAW,MAAM,CAAC,KAAK;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB;AAoED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,MAA8B,CAAA;AAE7E;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAA6B,CAAA;AAE3E,qGAAqG;AACrG,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AASD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,EACjC,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EACrD,SAAS,KAAK,KACb,KA0BF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAWzE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,cAAc,MAAM,KAAG,MAgBlD,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,SAAS,MAAM,EAGzE,CAAA;AAKH;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,SAAS,MAAM,EAY3E,CAAA;AA6BD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,SAYzE,CAAA"}
1
+ {"version":3,"file":"source-text.d.ts","sourceRoot":"","sources":["../src/source-text.ts"],"names":[],"mappings":"AAOA,wDAAwD;AACxD,eAAO,MAAM,cAAc,EAAE,MAAW,CAAA;AAExC,8FAA8F;AAC9F,eAAO,MAAM,SAAS,EAAE,MAAW,CAAA;AAEnC;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MACZ,CAAA;AAqI3C,yEAAyE;AACzE,MAAM,WAAW,MAAM,CAAC,KAAK;IAC3B,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;CACvB;AA6ED;;;;;;;GAOG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,MAA8B,CAAA;AAE7E,qFAAqF;AACrF,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,MAAoC,CAAA;AAErF;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,KAAG,MAA6B,CAAA;AAE3E,qGAAqG;AACrG,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AASD;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GAAI,KAAK,EACjC,QAAQ,MAAM,EACd,OAAO,MAAM,EACb,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,KAAK,MAAM,CAAC,KAAK,CAAC,EACrD,SAAS,KAAK,KACb,KA0BF,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,EAAE,MAAM,MAAM,KAAG,MAAM,GAAG,SAWzE,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,cAAc,MAAM,KAAG,MAgBlD,CAAA;AAEH;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,EAAE,QAAQ,MAAM,KAAG,SAAS,MAAM,EAGzE,CAAA;AAKH;;;;;GAKG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,SAAS,MAAM,EAY3E,CAAA;AA6BD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,GAAI,QAAQ,MAAM,EAAE,OAAO,MAAM,KAAG,MAAM,GAAG,SAYzE,CAAA"}
@@ -1,15 +1,4 @@
1
- // Reading source text without parsing it: comment stripping, balanced-delimiter scanning, and the
2
- // depth-aware key lookups that tell a literal's own key from a nested one.
3
- //
4
- // It is the generic half of what was `payload-policy.ts`, extracted when that file reached the size cap
5
- // and then again when a second layer needed it. Three readers share it now: the Payload rules in
6
- // `payload-source.ts`, and the JSONC reader in `json-shapes.ts` - a tsconfig legally carries comments,
7
- // so the rule that judges one has to strip them the same way, and a second stripper is a second set of
8
- // edge cases about string literals nobody would keep in step.
9
- //
10
- // The walk is deliberately conservative. A reader returns undefined wherever the answer is not
11
- // statically decidable, because a false positive in a build-failing gate costs far more than a dynamic
12
- // construct a reviewer would catch anyway.
1
+ // Scan comments, literals, and balanced delimiters while preserving source offsets for diagnostics.
13
2
  import { escapeForRegex } from './text-escapes.js';
14
3
  const OPENERS = new Set(['(', '[', '{']);
15
4
  const CLOSERS = new Set([')', ']', '}']);
@@ -146,7 +135,7 @@ const commentAt = (source, index) => {
146
135
  };
147
136
  // A string literal is kept because its contents are the only place a banned construct can legitimately
148
137
  // appear as data. Everything else here is erased, so prose naming a construct is never read as one.
149
- const constructAt = (source, index, output) => {
138
+ const constructAt = (source, index, output, shouldKeepRegex) => {
150
139
  const comment = commentAt(source, index);
151
140
  if (comment !== undefined) {
152
141
  return comment;
@@ -156,7 +145,7 @@ const constructAt = (source, index, output) => {
156
145
  return { stop: endOfStringLiteral(source, index), erased: false };
157
146
  }
158
147
  if (character === '/' && VALUE_POSITION.has(lastMeaningful(output))) {
159
- return { stop: endOfRegexLiteral(source, index), erased: true };
148
+ return { stop: endOfRegexLiteral(source, index), erased: !shouldKeepRegex };
160
149
  }
161
150
  return undefined;
162
151
  };
@@ -169,14 +158,14 @@ const replacementFor = (text, skipped, isStringMasked) => {
169
158
  }
170
159
  return isStringMasked ? fill(text, STRING_FILLER) : text;
171
160
  };
172
- const strip = (source, isStringMasked) => {
161
+ const strip = (source, isStringMasked, shouldKeepRegex = false) => {
173
162
  /* eslint-disable functional/no-let -- a whole source file is walked here, so recursion would risk
174
163
  the stack; the cursor and the output it builds are confined to this loop and escape as a value */
175
164
  let output = '';
176
165
  let index = 0;
177
166
  /* eslint-enable functional/no-let -- the walk above is the only place this file mutates */
178
167
  while (index < source.length) {
179
- const skipped = constructAt(source, index, output);
168
+ const skipped = constructAt(source, index, output, shouldKeepRegex);
180
169
  if (skipped === undefined) {
181
170
  output += source[index] ?? '';
182
171
  index += 1;
@@ -197,6 +186,8 @@ const strip = (source, isStringMasked) => {
197
186
  * @returns the source with comments and regex literals replaced by spaces of equal length.
198
187
  */
199
188
  export const stripComments = (source) => strip(source, false);
189
+ /** Remove comments while retaining route patterns written as regular expressions. */
190
+ export const withoutComments = (source) => strip(source, false, true);
200
191
  /**
201
192
  * The source with every string literal replaced by filler of equal length, on top of what
202
193
  * {@link stripComments} erases.
@@ -1 +1 @@
1
- {"version":3,"file":"source-text.js","sourceRoot":"","sources":["../src/source-text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"source-text.js","sourceRoot":"","sources":["../src/source-text.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Decide whether a path names an OpenTofu or Terraform source.
3
+ *
4
+ * An example file is not one. `terraform.tfvars.example` documents the variables an environment needs
5
+ * and is meant to carry placeholders, so reading it as configuration would report a project for the
6
+ * one file whose job is to hold the values it tells a reader to replace.
7
+ * @param file a repo-relative path.
8
+ * @returns true when the file is configuration the gate judges.
9
+ */
10
+ export declare const isTerraformFile: (file: string) => boolean;
11
+ /**
12
+ * Every OpenTofu or Terraform source the repository tracks.
13
+ * @param tracked the repo-relative paths of the tracked files.
14
+ * @returns the sources, ordered so a report reads the same on every machine.
15
+ */
16
+ export declare const terraformFilesIn: (tracked: readonly string[]) => readonly string[];
17
+ /**
18
+ * Decide whether a path names a checkov configuration.
19
+ * @param file a repo-relative path.
20
+ * @returns true for a configuration checkov would read on its own, at any depth.
21
+ */
22
+ export declare const isCheckovConfigFile: (file: string) => boolean;
23
+ /**
24
+ * Every checkov configuration the repository tracks.
25
+ * @param tracked the repo-relative paths of the tracked files.
26
+ * @returns the configurations, ordered so a report reads the same on every machine.
27
+ */
28
+ export declare const checkovConfigsIn: (tracked: readonly string[]) => readonly string[];
29
+ //# sourceMappingURL=terraform-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-files.d.ts","sourceRoot":"","sources":["../src/terraform-files.ts"],"names":[],"mappings":"AAaA;;;;;;;;GAQG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,MAAM,KAAG,OACsC,CAAA;AAErF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,SAAS,MAAM,EAAE,KAAG,SAAS,MAAM,EAGI,CAAA;AAUjF;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,OACH,CAAA;AAEhD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,SAAS,MAAM,EAAE,KAAG,SAAS,MAAM,EAGI,CAAA"}
@@ -0,0 +1,50 @@
1
+ // Identify OpenTofu and Terraform sources, and the analyzer configuration that would shadow the rules.
2
+ //
3
+ // The same shape as the container-file reader beside it: predicates over the working-tree inventory,
4
+ // so the gate discovers what a repository actually tracks rather than reading a list somebody wrote
5
+ // once. A `.tf` added later is analysed the day it appears rather than the day somebody remembers it.
6
+ const basenameOf = (file) => file.slice(file.lastIndexOf('/') + 1);
7
+ // `.tf` is the configuration and `.tfvars` carries the values a placeholder credential would sit in.
8
+ // `.tf.json` is deliberately absent: it is JSON rather than HCL, so the text rules would misread it,
9
+ // and the analyzer reads it anyway through the directory it is pointed at.
10
+ const TERRAFORM_EXTENSIONS = ['.tf', '.tfvars'];
11
+ /**
12
+ * Decide whether a path names an OpenTofu or Terraform source.
13
+ *
14
+ * An example file is not one. `terraform.tfvars.example` documents the variables an environment needs
15
+ * and is meant to carry placeholders, so reading it as configuration would report a project for the
16
+ * one file whose job is to hold the values it tells a reader to replace.
17
+ * @param file a repo-relative path.
18
+ * @returns true when the file is configuration the gate judges.
19
+ */
20
+ export const isTerraformFile = (file) => TERRAFORM_EXTENSIONS.some((extension) => file.endsWith(extension));
21
+ /**
22
+ * Every OpenTofu or Terraform source the repository tracks.
23
+ * @param tracked the repo-relative paths of the tracked files.
24
+ * @returns the sources, ordered so a report reads the same on every machine.
25
+ */
26
+ export const terraformFilesIn = (tracked) => tracked
27
+ .filter((file) => isTerraformFile(file))
28
+ .toSorted((left, right) => left.localeCompare(right));
29
+ // The names checkov reads on its own. A project that commits one can turn off the curated checks from
30
+ // inside the tree the gate judges, which is the shadowing the harness refuses for every other analyzer.
31
+ const CHECKOV_CONFIG_BASENAMES = new Set([
32
+ '.checkov.yaml',
33
+ '.checkov.yml',
34
+ '.checkov.json',
35
+ ]);
36
+ /**
37
+ * Decide whether a path names a checkov configuration.
38
+ * @param file a repo-relative path.
39
+ * @returns true for a configuration checkov would read on its own, at any depth.
40
+ */
41
+ export const isCheckovConfigFile = (file) => CHECKOV_CONFIG_BASENAMES.has(basenameOf(file));
42
+ /**
43
+ * Every checkov configuration the repository tracks.
44
+ * @param tracked the repo-relative paths of the tracked files.
45
+ * @returns the configurations, ordered so a report reads the same on every machine.
46
+ */
47
+ export const checkovConfigsIn = (tracked) => tracked
48
+ .filter((file) => isCheckovConfigFile(file))
49
+ .toSorted((left, right) => left.localeCompare(right));
50
+ //# sourceMappingURL=terraform-files.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-files.js","sourceRoot":"","sources":["../src/terraform-files.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,EAAE;AACF,qGAAqG;AACrG,oGAAoG;AACpG,sGAAsG;AAEtG,MAAM,UAAU,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAA;AAElF,qGAAqG;AACrG,qGAAqG;AACrG,2EAA2E;AAC3E,MAAM,oBAAoB,GAAsB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;AAElE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,IAAY,EAAW,EAAE,CACvD,oBAAoB,CAAC,IAAI,CAAC,CAAC,SAAiB,EAAW,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAA;AAErF;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAA0B,EAAqB,EAAE,CAChF,OAAO;KACJ,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;KACxD,QAAQ,CAAC,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA;AAEjF,sGAAsG;AACtG,wGAAwG;AACxG,MAAM,wBAAwB,GAAwB,IAAI,GAAG,CAAC;IAC5D,eAAe;IACf,cAAc;IACd,eAAe;CAChB,CAAC,CAAA;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAW,EAAE,CAC3D,wBAAwB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAA;AAEhD;;;;GAIG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAA0B,EAAqB,EAAE,CAChF,OAAO;KACJ,MAAM,CAAC,CAAC,IAAY,EAAW,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;KAC5D,QAAQ,CAAC,CAAC,IAAY,EAAE,KAAa,EAAU,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAA"}
@@ -0,0 +1,13 @@
1
+ /** An infrastructure defect found in a project's own configuration. */
2
+ export interface TerraformViolation {
3
+ readonly line: number;
4
+ readonly rule: string;
5
+ readonly reason: string;
6
+ }
7
+ /**
8
+ * Report every infrastructure defect a text reader can decide.
9
+ * @param source the file's text, as tracked.
10
+ * @returns one violation per defect, ordered by the line it sits on.
11
+ */
12
+ export declare const findTerraformViolations: (source: string) => readonly TerraformViolation[];
13
+ //# sourceMappingURL=terraform-policy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terraform-policy.d.ts","sourceRoot":"","sources":["../src/terraform-policy.ts"],"names":[],"mappings":"AAiBA,uEAAuE;AACvE,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAySD;;;;GAIG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,KAAG,SAAS,kBAAkB,EAcnF,CAAA"}