flowlint 0.1.2 → 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 (99) hide show
  1. package/package.json +26 -30
  2. package/README.md +0 -45
  3. package/dist/apps/cli/src/cli.d.ts +0 -8
  4. package/dist/apps/cli/src/cli.js +0 -27
  5. package/dist/apps/cli/src/cli.js.map +0 -1
  6. package/dist/apps/cli/src/commands/init.d.ts +0 -8
  7. package/dist/apps/cli/src/commands/init.js +0 -34
  8. package/dist/apps/cli/src/commands/init.js.map +0 -1
  9. package/dist/apps/cli/src/commands/scan.d.ts +0 -11
  10. package/dist/apps/cli/src/commands/scan.js +0 -59
  11. package/dist/apps/cli/src/commands/scan.js.map +0 -1
  12. package/dist/apps/cli/src/providers/local-config-provider.d.ts +0 -11
  13. package/dist/apps/cli/src/providers/local-config-provider.js +0 -39
  14. package/dist/apps/cli/src/providers/local-config-provider.js.map +0 -1
  15. package/dist/apps/cli/src/providers/local-file-source.d.ts +0 -13
  16. package/dist/apps/cli/src/providers/local-file-source.js +0 -47
  17. package/dist/apps/cli/src/providers/local-file-source.js.map +0 -1
  18. package/dist/apps/cli/src/reporters/console-reporter.d.ts +0 -8
  19. package/dist/apps/cli/src/reporters/console-reporter.js +0 -72
  20. package/dist/apps/cli/src/reporters/console-reporter.js.map +0 -1
  21. package/dist/apps/cli/src/reporters/json-reporter.d.ts +0 -14
  22. package/dist/apps/cli/src/reporters/json-reporter.js +0 -57
  23. package/dist/apps/cli/src/reporters/json-reporter.js.map +0 -1
  24. package/dist/packages/config/flowlint-config.d.ts +0 -64
  25. package/dist/packages/config/flowlint-config.js +0 -103
  26. package/dist/packages/config/flowlint-config.js.map +0 -1
  27. package/dist/packages/config/index.d.ts +0 -4
  28. package/dist/packages/config/index.js +0 -21
  29. package/dist/packages/config/index.js.map +0 -1
  30. package/dist/packages/github/client.d.ts +0 -2
  31. package/dist/packages/github/client.js +0 -94
  32. package/dist/packages/github/client.js.map +0 -1
  33. package/dist/packages/logger/index.d.ts +0 -11
  34. package/dist/packages/logger/index.js +0 -40
  35. package/dist/packages/logger/index.js.map +0 -1
  36. package/dist/packages/observability/collectors.d.ts +0 -40
  37. package/dist/packages/observability/collectors.js +0 -75
  38. package/dist/packages/observability/collectors.js.map +0 -1
  39. package/dist/packages/observability/index.d.ts +0 -10
  40. package/dist/packages/observability/index.js +0 -35
  41. package/dist/packages/observability/index.js.map +0 -1
  42. package/dist/packages/observability/metrics.d.ts +0 -119
  43. package/dist/packages/observability/metrics.js +0 -194
  44. package/dist/packages/observability/metrics.js.map +0 -1
  45. package/dist/packages/observability/middleware.d.ts +0 -32
  46. package/dist/packages/observability/middleware.js +0 -58
  47. package/dist/packages/observability/middleware.js.map +0 -1
  48. package/dist/packages/review/analysis-engine.d.ts +0 -19
  49. package/dist/packages/review/analysis-engine.js +0 -106
  50. package/dist/packages/review/analysis-engine.js.map +0 -1
  51. package/dist/packages/review/index.d.ts +0 -12
  52. package/dist/packages/review/index.js +0 -29
  53. package/dist/packages/review/index.js.map +0 -1
  54. package/dist/packages/review/parser-n8n.d.ts +0 -2
  55. package/dist/packages/review/parser-n8n.js +0 -118
  56. package/dist/packages/review/parser-n8n.js.map +0 -1
  57. package/dist/packages/review/providers/github.d.ts +0 -62
  58. package/dist/packages/review/providers/github.js +0 -275
  59. package/dist/packages/review/providers/github.js.map +0 -1
  60. package/dist/packages/review/providers.d.ts +0 -106
  61. package/dist/packages/review/providers.js +0 -12
  62. package/dist/packages/review/providers.js.map +0 -1
  63. package/dist/packages/review/reporter.d.ts +0 -17
  64. package/dist/packages/review/reporter.js +0 -53
  65. package/dist/packages/review/reporter.js.map +0 -1
  66. package/dist/packages/review/rules/index.d.ts +0 -9
  67. package/dist/packages/review/rules/index.js +0 -313
  68. package/dist/packages/review/rules/index.js.map +0 -1
  69. package/dist/packages/review/rules/rule-utils.d.ts +0 -36
  70. package/dist/packages/review/rules/rule-utils.js +0 -75
  71. package/dist/packages/review/rules/rule-utils.js.map +0 -1
  72. package/dist/packages/review/schemas/index.d.ts +0 -17
  73. package/dist/packages/review/schemas/index.js +0 -139
  74. package/dist/packages/review/schemas/index.js.map +0 -1
  75. package/dist/packages/review/schemas/n8n-workflow.schema.json +0 -177
  76. package/dist/packages/review/sniffer.d.ts +0 -15
  77. package/dist/packages/review/sniffer.js +0 -47
  78. package/dist/packages/review/sniffer.js.map +0 -1
  79. package/dist/packages/review/types.d.ts +0 -37
  80. package/dist/packages/review/types.js +0 -3
  81. package/dist/packages/review/types.js.map +0 -1
  82. package/dist/packages/review/utils/findings.d.ts +0 -23
  83. package/dist/packages/review/utils/findings.js +0 -34
  84. package/dist/packages/review/utils/findings.js.map +0 -1
  85. package/dist/packages/review/utils/merge.d.ts +0 -12
  86. package/dist/packages/review/utils/merge.js +0 -40
  87. package/dist/packages/review/utils/merge.js.map +0 -1
  88. package/dist/packages/review/utils.d.ts +0 -58
  89. package/dist/packages/review/utils.js +0 -208
  90. package/dist/packages/review/utils.js.map +0 -1
  91. package/dist/packages/tracing/github-tracer.d.ts +0 -38
  92. package/dist/packages/tracing/github-tracer.js +0 -79
  93. package/dist/packages/tracing/github-tracer.js.map +0 -1
  94. package/dist/packages/tracing/index.d.ts +0 -81
  95. package/dist/packages/tracing/index.js +0 -240
  96. package/dist/packages/tracing/index.js.map +0 -1
  97. package/dist/packages/tracing/tracer.d.ts +0 -30
  98. package/dist/packages/tracing/tracer.js +0 -141
  99. package/dist/packages/tracing/tracer.js.map +0 -1
@@ -1,275 +0,0 @@
1
- "use strict";
2
- /**
3
- * GitHub-specific provider implementations.
4
- * These are used by the existing GitHub App workflow.
5
- */
6
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
- if (k2 === undefined) k2 = k;
8
- var desc = Object.getOwnPropertyDescriptor(m, k);
9
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
- desc = { enumerable: true, get: function() { return m[k]; } };
11
- }
12
- Object.defineProperty(o, k2, desc);
13
- }) : (function(o, m, k, k2) {
14
- if (k2 === undefined) k2 = k;
15
- o[k2] = m[k];
16
- }));
17
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
- Object.defineProperty(o, "default", { enumerable: true, value: v });
19
- }) : function(o, v) {
20
- o["default"] = v;
21
- });
22
- var __importStar = (this && this.__importStar) || (function () {
23
- var ownKeys = function(o) {
24
- ownKeys = Object.getOwnPropertyNames || function (o) {
25
- var ar = [];
26
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
27
- return ar;
28
- };
29
- return ownKeys(o);
30
- };
31
- return function (mod) {
32
- if (mod && mod.__esModule) return mod;
33
- var result = {};
34
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
35
- __setModuleDefault(result, mod);
36
- return result;
37
- };
38
- })();
39
- var __importDefault = (this && this.__importDefault) || function (mod) {
40
- return (mod && mod.__esModule) ? mod : { "default": mod };
41
- };
42
- Object.defineProperty(exports, "__esModule", { value: true });
43
- exports.GitHubCheckReporter = exports.GitHubConfigProvider = exports.GitHubPrFileSource = void 0;
44
- const logger_1 = require("../../logger");
45
- const micromatch_1 = __importDefault(require("micromatch"));
46
- /**
47
- * GitHub PR FileSource
48
- * Fetches changed files from a GitHub Pull Request
49
- */
50
- class GitHubPrFileSource {
51
- constructor(gh, repo, prNumber) {
52
- this.gh = gh;
53
- this.repo = repo;
54
- this.prNumber = prNumber;
55
- }
56
- async getFiles(patterns) {
57
- const [owner, repoName] = this.repo.split('/');
58
- const paginate = this.gh.paginate;
59
- if (typeof paginate !== 'function') {
60
- throw new Error('Octokit client is missing paginate(); ensure @octokit/plugin-paginate-rest is registered.');
61
- }
62
- // 1. List all files in the PR
63
- const allFiles = await paginate.call(this.gh, 'GET /repos/{owner}/{repo}/pulls/{pull_number}/files', {
64
- owner,
65
- repo: repoName,
66
- pull_number: this.prNumber,
67
- per_page: 100,
68
- });
69
- // 2. Filter for target files using globs
70
- const targets = this.pickTargets(allFiles, patterns);
71
- // 3. Fetch raw content
72
- const { contents } = await this.fetchRawFiles(targets);
73
- return Array.from(contents.entries()).map(([path, content]) => ({
74
- path,
75
- content,
76
- }));
77
- }
78
- /**
79
- * Filter PR files based on glob patterns
80
- */
81
- pickTargets(files, globs) {
82
- return files
83
- .filter((file) => file.status !== 'removed')
84
- .filter((file) => {
85
- const normalized = file.filename.replace(/\\/g, '/');
86
- const included = micromatch_1.default.isMatch(normalized, globs.include, { dot: true });
87
- const ignored = micromatch_1.default.isMatch(normalized, globs.ignore, { dot: true });
88
- return included && !ignored;
89
- });
90
- }
91
- /**
92
- * Fetch raw file content from GitHub
93
- */
94
- async fetchRawFiles(targets) {
95
- const [owner, repoName] = this.repo.split('/');
96
- const contents = new Map();
97
- const errors = [];
98
- for (const file of targets) {
99
- if (!file.sha) {
100
- errors.push({ filename: file.filename, error: 'Missing SHA (file may be removed)' });
101
- continue;
102
- }
103
- try {
104
- const { data: blob } = await this.gh.request('GET /repos/{owner}/{repo}/git/blobs/{file_sha}', {
105
- owner,
106
- repo: repoName,
107
- file_sha: file.sha,
108
- });
109
- const raw = Buffer.from(blob.content, 'base64').toString('utf8');
110
- contents.set(file.filename, raw);
111
- }
112
- catch (error) {
113
- const errorMsg = error instanceof Error ? error.message : String(error);
114
- logger_1.logger.warn({ filename: file.filename, error: errorMsg }, 'failed to fetch file');
115
- errors.push({ filename: file.filename, error: errorMsg });
116
- }
117
- }
118
- return { contents, errors };
119
- }
120
- }
121
- exports.GitHubPrFileSource = GitHubPrFileSource;
122
- /**
123
- * GitHub Remote ConfigProvider
124
- * Loads .flowlint.yml from a GitHub repository
125
- */
126
- class GitHubConfigProvider {
127
- constructor(gh, repo, sha) {
128
- this.gh = gh;
129
- this.repo = repo;
130
- this.sha = sha;
131
- }
132
- async load() {
133
- const { defaultConfig } = await Promise.resolve().then(() => __importStar(require('../../config/flowlint-config')));
134
- const YAML = (await Promise.resolve().then(() => __importStar(require('yaml')))).default;
135
- const [owner, repoName] = this.repo.split('/');
136
- try {
137
- const { data } = await this.gh.request('GET /repos/{owner}/{repo}/contents/{path}', {
138
- owner,
139
- repo: repoName,
140
- path: '.flowlint.yml',
141
- ref: this.sha,
142
- });
143
- if (!('content' in data))
144
- return defaultConfig;
145
- const content = Buffer.from(data.content, 'base64').toString('utf8');
146
- const parsed = YAML.parse(content) || {};
147
- return this.deepMerge(defaultConfig, parsed);
148
- }
149
- catch {
150
- return defaultConfig;
151
- }
152
- }
153
- /**
154
- * Deep merge default config with overrides
155
- */
156
- deepMerge(base, override) {
157
- const baseCopy = JSON.parse(JSON.stringify(base));
158
- if (!override)
159
- return baseCopy;
160
- return this.mergeInto(baseCopy, override);
161
- }
162
- mergeInto(target, source) {
163
- for (const [key, value] of Object.entries(source)) {
164
- if (value === undefined || value === null)
165
- continue;
166
- if (Array.isArray(value)) {
167
- target[key] = value;
168
- }
169
- else if (typeof value === 'object') {
170
- if (typeof target[key] !== 'object' || target[key] === null) {
171
- target[key] = {};
172
- }
173
- this.mergeInto(target[key], value);
174
- }
175
- else {
176
- target[key] = value;
177
- }
178
- }
179
- return target;
180
- }
181
- }
182
- exports.GitHubConfigProvider = GitHubConfigProvider;
183
- /**
184
- * GitHub Check Run Reporter
185
- * Sends results to GitHub Checks API
186
- */
187
- class GitHubCheckReporter {
188
- constructor(gh, repo, checkRunId, cfg) {
189
- this.gh = gh;
190
- this.repo = repo;
191
- this.checkRunId = checkRunId;
192
- this.cfg = cfg;
193
- this.BATCH_SIZE = 50;
194
- }
195
- async report(results) {
196
- const [owner, repoName] = this.repo.split('/');
197
- // Collect all findings
198
- const allFindings = results.flatMap((r) => r.findings);
199
- // Build output
200
- const summary = this.summarize(allFindings);
201
- const conclusion = this.inferConclusion(allFindings);
202
- // Send annotations if enabled
203
- if (this.cfg.report.annotations) {
204
- const annotations = this.buildAnnotations(allFindings);
205
- const limitedAnnotations = this.cfg.report.summary_limit > 0 && annotations.length > this.cfg.report.summary_limit
206
- ? annotations.slice(0, this.cfg.report.summary_limit)
207
- : annotations;
208
- for (let i = 0; i < limitedAnnotations.length; i += this.BATCH_SIZE) {
209
- const batch = limitedAnnotations.slice(i, i + this.BATCH_SIZE);
210
- await this.gh.request('PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}', {
211
- owner,
212
- repo: repoName,
213
- check_run_id: this.checkRunId,
214
- output: {
215
- title: process.env.CHECK_TITLE || 'FlowLint findings',
216
- summary,
217
- annotations: batch,
218
- },
219
- });
220
- }
221
- }
222
- // Finalize check run
223
- await this.gh.request('PATCH /repos/{owner}/{repo}/check-runs/{check_run_id}', {
224
- owner,
225
- repo: repoName,
226
- check_run_id: this.checkRunId,
227
- status: 'completed',
228
- conclusion,
229
- completed_at: new Date().toISOString(),
230
- output: {
231
- title: process.env.CHECK_TITLE || 'FlowLint findings',
232
- summary,
233
- },
234
- });
235
- }
236
- buildAnnotations(findings) {
237
- const severityOrder = ['must', 'should', 'nit'];
238
- const ordered = [...findings].sort((a, b) => severityOrder.indexOf(a.severity) - severityOrder.indexOf(b.severity));
239
- return ordered.map((finding) => {
240
- const line = finding.line ?? 1;
241
- return {
242
- path: finding.path,
243
- start_line: line,
244
- end_line: line,
245
- annotation_level: this.mapSeverity(finding.severity),
246
- message: `${finding.rule}: ${finding.message}`,
247
- raw_details: finding.raw_details?.slice(0, 64000),
248
- };
249
- });
250
- }
251
- inferConclusion(findings) {
252
- if (findings.some((f) => f.severity === 'must'))
253
- return 'failure';
254
- if (findings.some((f) => f.severity === 'should'))
255
- return 'neutral';
256
- return 'success';
257
- }
258
- summarize(findings) {
259
- if (findings.length === 0)
260
- return 'No issues found.';
261
- const must = findings.filter((f) => f.severity === 'must').length;
262
- const should = findings.filter((f) => f.severity === 'should').length;
263
- const nit = findings.filter((f) => f.severity === 'nit').length;
264
- return `${must} must-fix, ${should} should-fix, ${nit} nit.`;
265
- }
266
- mapSeverity(severity) {
267
- if (severity === 'must')
268
- return 'failure';
269
- if (severity === 'should')
270
- return 'warning';
271
- return 'notice';
272
- }
273
- }
274
- exports.GitHubCheckReporter = GitHubCheckReporter;
275
- //# sourceMappingURL=github.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../../packages/review/providers/github.ts"],"names":[],"mappings":"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"}
@@ -1,106 +0,0 @@
1
- /**
2
- * Provider Interfaces for FlowLint
3
- *
4
- * These abstractions decouple the core linting engine from specific data sources
5
- * and output formats, allowing FlowLint to be used in multiple contexts:
6
- * - GitHub App (existing)
7
- * - CLI (local file analysis)
8
- * - Future: Web Dashboard, CI/CD integrations
9
- */
10
- import type { Finding, Graph } from './types';
11
- import type { FlowLintConfig } from '../config/flowlint-config';
12
- export type { Finding } from './types';
13
- /**
14
- * LintableFile represents a single file that can be analyzed.
15
- * This replaces the GitHub-specific PRFile type for core linting operations.
16
- */
17
- export interface LintableFile {
18
- path: string;
19
- content: string;
20
- }
21
- /**
22
- * FileSource provides files for analysis.
23
- * Implementations can read from:
24
- * - Local filesystem (for CLI)
25
- * - GitHub PR (for App)
26
- * - Any other source
27
- */
28
- export interface FileSource {
29
- /**
30
- * Get files matching the provided glob patterns.
31
- * @param patterns Include/ignore patterns
32
- * @returns Array of lintable files
33
- */
34
- getFiles(patterns: {
35
- include: string[];
36
- ignore: string[];
37
- }): Promise<LintableFile[]>;
38
- }
39
- /**
40
- * ConfigProvider loads FlowLint configuration.
41
- * Implementations can load from:
42
- * - Local .flowlint.yml file (for CLI)
43
- * - Remote GitHub repository (for App)
44
- * - Default/hardcoded configuration
45
- */
46
- export interface ConfigProvider {
47
- /**
48
- * Load the FlowLint configuration.
49
- * Should return merged config (defaults + overrides).
50
- * @returns Loaded configuration
51
- */
52
- load(): Promise<FlowLintConfig>;
53
- }
54
- /**
55
- * Reporter generates output from analysis results.
56
- * Implementations can output to:
57
- * - GitHub Checks API (for App)
58
- * - Console/table (for CLI)
59
- * - JSON file (for integrations/Web Dashboard)
60
- */
61
- export interface Reporter {
62
- /**
63
- * Report analysis results.
64
- * @param results Array of findings from all files
65
- * @returns Promise that resolves when reporting is complete
66
- */
67
- report(results: AnalysisResult[]): Promise<void>;
68
- }
69
- /**
70
- * AnalysisResult represents the findings for a single analyzed file.
71
- * This is the data structure passed to reporters.
72
- */
73
- export interface AnalysisResult {
74
- file: LintableFile;
75
- graph: Graph;
76
- findings: Finding[];
77
- errors?: Array<{
78
- error: string;
79
- details?: string;
80
- }>;
81
- }
82
- /**
83
- * AnalysisEngine orchestrates the linting process.
84
- * It coordinates file source, config loading, rule execution, and reporting.
85
- */
86
- export interface AnalysisEngine {
87
- /**
88
- * Run a complete analysis on the provided scope.
89
- * @returns Summary of the analysis (e.g., total findings, errors)
90
- */
91
- analyze(): Promise<AnalysisSummary>;
92
- }
93
- /**
94
- * Summary of a completed analysis.
95
- */
96
- export interface AnalysisSummary {
97
- totalFiles: number;
98
- totalFindings: number;
99
- findingsBySeverity: {
100
- must: number;
101
- should: number;
102
- nit: number;
103
- };
104
- errors: number;
105
- hasBlockingIssues: boolean;
106
- }
@@ -1,12 +0,0 @@
1
- "use strict";
2
- /**
3
- * Provider Interfaces for FlowLint
4
- *
5
- * These abstractions decouple the core linting engine from specific data sources
6
- * and output formats, allowing FlowLint to be used in multiple contexts:
7
- * - GitHub App (existing)
8
- * - CLI (local file analysis)
9
- * - Future: Web Dashboard, CI/CD integrations
10
- */
11
- Object.defineProperty(exports, "__esModule", { value: true });
12
- //# sourceMappingURL=providers.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"providers.js","sourceRoot":"","sources":["../../../packages/review/providers.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG"}
@@ -1,17 +0,0 @@
1
- import type { Finding } from './types';
2
- import type { FlowLintConfig } from '../config/flowlint-config';
3
- type Conclusion = 'action_required' | 'neutral' | 'success' | 'failure';
4
- export declare function buildCheckOutput({ findings, cfg, summaryOverride, conclusionOverride, }: {
5
- findings: Finding[];
6
- cfg: FlowLintConfig;
7
- summaryOverride?: string;
8
- conclusionOverride?: Conclusion;
9
- }): {
10
- conclusion: Conclusion;
11
- output: {
12
- title: string;
13
- summary: string;
14
- };
15
- };
16
- export declare function buildAnnotations(findings: Finding[]): any[];
17
- export {};
@@ -1,53 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.buildCheckOutput = buildCheckOutput;
4
- exports.buildAnnotations = buildAnnotations;
5
- function buildCheckOutput({ findings, cfg, summaryOverride, conclusionOverride, }) {
6
- const summary = summaryOverride ?? summarize(findings);
7
- const conclusion = conclusionOverride ?? inferConclusion(findings);
8
- return {
9
- conclusion,
10
- output: {
11
- title: process.env.CHECK_TITLE || 'FlowLint findings',
12
- summary,
13
- },
14
- };
15
- }
16
- function buildAnnotations(findings) {
17
- const severityOrder = ['must', 'should', 'nit'];
18
- const ordered = [...findings].sort((a, b) => severityOrder.indexOf(a.severity) - severityOrder.indexOf(b.severity));
19
- return ordered.map((finding) => {
20
- const line = finding.line ?? 1;
21
- return {
22
- path: finding.path,
23
- start_line: line,
24
- end_line: line,
25
- annotation_level: mapSeverity(finding.severity),
26
- message: `${finding.rule}: ${finding.message}`,
27
- raw_details: finding.raw_details?.slice(0, 64000),
28
- };
29
- });
30
- }
31
- function inferConclusion(findings) {
32
- if (findings.some((f) => f.severity === 'must'))
33
- return 'failure';
34
- if (findings.some((f) => f.severity === 'should'))
35
- return 'neutral';
36
- return 'success';
37
- }
38
- function summarize(findings) {
39
- if (findings.length === 0)
40
- return 'No issues found.';
41
- const must = findings.filter((f) => f.severity === 'must').length;
42
- const should = findings.filter((f) => f.severity === 'should').length;
43
- const nit = findings.filter((f) => f.severity === 'nit').length;
44
- return `${must} must-fix, ${should} should-fix, ${nit} nit.`;
45
- }
46
- function mapSeverity(severity) {
47
- if (severity === 'must')
48
- return 'failure';
49
- if (severity === 'should')
50
- return 'warning';
51
- return 'notice';
52
- }
53
- //# sourceMappingURL=reporter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../../../packages/review/reporter.ts"],"names":[],"mappings":";;AAKA,4CAqBC;AAED,4CAeC;AAtCD,SAAgB,gBAAgB,CAAC,EAC/B,QAAQ,EACR,GAAG,EACH,eAAe,EACf,kBAAkB,GAMnB;IACC,MAAM,OAAO,GAAG,eAAe,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,kBAAkB,IAAI,eAAe,CAAC,QAAQ,CAAC,CAAC;IAEnE,OAAO;QACL,UAAU;QACV,MAAM,EAAE;YACN,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,mBAAmB;YACrD,OAAO;SACR;KACF,CAAC;AACJ,CAAC;AAED,SAAgB,gBAAgB,CAAC,QAAmB;IAClD,MAAM,aAAa,GAA0B,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,OAAO,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpH,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;QAC/B,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,UAAU,EAAE,IAAI;YAChB,QAAQ,EAAE,IAAI;YACd,gBAAgB,EAAE,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC;YAC/C,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE;YAC9C,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SAClD,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,eAAe,CAAC,QAAmB;IAC1C,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC;QAAE,OAAO,SAAS,CAAC;IAClE,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC;QAAE,OAAO,SAAS,CAAC;IACpE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,SAAS,CAAC,QAAmB;IACpC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,kBAAkB,CAAC;IACrD,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,MAAM,CAAC;IAClE,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,MAAM,CAAC;IACtE,MAAM,GAAG,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,KAAK,CAAC,CAAC,MAAM,CAAC;IAChE,OAAO,GAAG,IAAI,cAAc,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAC/D,CAAC;AAED,SAAS,WAAW,CAAC,QAA6B;IAChD,IAAI,QAAQ,KAAK,MAAM;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC5C,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1,9 +0,0 @@
1
- import type { Graph, Finding } from '../types';
2
- import type { FlowLintConfig } from '../../config/flowlint-config';
3
- type RuleContext = {
4
- path: string;
5
- cfg: FlowLintConfig;
6
- nodeLines?: Record<string, number>;
7
- };
8
- export declare function runAllRules(graph: Graph, ctx: RuleContext): Finding[];
9
- export {};