flowlint 0.5.3 → 0.6.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.
- package/README.md +45 -355
- package/dist/cli.js +163 -21
- package/dist/cli.js.map +1 -1
- package/package.json +52 -57
- package/dist/cli.d.ts +0 -8
- package/dist/commands/init.d.ts +0 -8
- package/dist/commands/init.js +0 -34
- package/dist/commands/init.js.map +0 -1
- package/dist/commands/scan.d.ts +0 -11
- package/dist/commands/scan.js +0 -104
- package/dist/commands/scan.js.map +0 -1
- package/dist/packages/config/flowlint-config.d.ts +0 -73
- package/dist/packages/config/flowlint-config.js +0 -120
- package/dist/packages/config/flowlint-config.js.map +0 -1
- package/dist/packages/config/index.d.ts +0 -4
- package/dist/packages/config/index.js +0 -21
- package/dist/packages/config/index.js.map +0 -1
- package/dist/packages/github/client.d.ts +0 -2
- package/dist/packages/github/client.js +0 -94
- package/dist/packages/github/client.js.map +0 -1
- package/dist/packages/logger/index.d.ts +0 -11
- package/dist/packages/logger/index.js +0 -40
- package/dist/packages/logger/index.js.map +0 -1
- package/dist/packages/observability/collectors.d.ts +0 -40
- package/dist/packages/observability/collectors.js +0 -75
- package/dist/packages/observability/collectors.js.map +0 -1
- package/dist/packages/observability/index.d.ts +0 -10
- package/dist/packages/observability/index.js +0 -35
- package/dist/packages/observability/index.js.map +0 -1
- package/dist/packages/observability/metrics.d.ts +0 -119
- package/dist/packages/observability/metrics.js +0 -194
- package/dist/packages/observability/metrics.js.map +0 -1
- package/dist/packages/observability/middleware.d.ts +0 -32
- package/dist/packages/observability/middleware.js +0 -58
- package/dist/packages/observability/middleware.js.map +0 -1
- package/dist/packages/review/analysis-engine.d.ts +0 -19
- package/dist/packages/review/analysis-engine.js +0 -111
- package/dist/packages/review/analysis-engine.js.map +0 -1
- package/dist/packages/review/index.d.ts +0 -12
- package/dist/packages/review/index.js +0 -29
- package/dist/packages/review/index.js.map +0 -1
- package/dist/packages/review/parser-n8n.d.ts +0 -2
- package/dist/packages/review/parser-n8n.js +0 -122
- package/dist/packages/review/parser-n8n.js.map +0 -1
- package/dist/packages/review/providers/github.d.ts +0 -62
- package/dist/packages/review/providers/github.js +0 -275
- package/dist/packages/review/providers/github.js.map +0 -1
- package/dist/packages/review/providers.d.ts +0 -106
- package/dist/packages/review/providers.js +0 -12
- package/dist/packages/review/providers.js.map +0 -1
- package/dist/packages/review/reporter.d.ts +0 -17
- package/dist/packages/review/reporter.js +0 -59
- package/dist/packages/review/reporter.js.map +0 -1
- package/dist/packages/review/rules/index.d.ts +0 -9
- package/dist/packages/review/rules/index.js +0 -415
- package/dist/packages/review/rules/index.js.map +0 -1
- package/dist/packages/review/rules/rule-utils.d.ts +0 -36
- package/dist/packages/review/rules/rule-utils.js +0 -75
- package/dist/packages/review/rules/rule-utils.js.map +0 -1
- package/dist/packages/review/schemas/index.d.ts +0 -17
- package/dist/packages/review/schemas/index.js +0 -167
- package/dist/packages/review/schemas/index.js.map +0 -1
- package/dist/packages/review/schemas/n8n-workflow.schema.json +0 -177
- package/dist/packages/review/sniffer.d.ts +0 -15
- package/dist/packages/review/sniffer.js +0 -47
- package/dist/packages/review/sniffer.js.map +0 -1
- package/dist/packages/review/types.d.ts +0 -40
- package/dist/packages/review/types.js +0 -3
- package/dist/packages/review/types.js.map +0 -1
- package/dist/packages/review/utils/findings.d.ts +0 -23
- package/dist/packages/review/utils/findings.js +0 -34
- package/dist/packages/review/utils/findings.js.map +0 -1
- package/dist/packages/review/utils/merge.d.ts +0 -12
- package/dist/packages/review/utils/merge.js +0 -40
- package/dist/packages/review/utils/merge.js.map +0 -1
- package/dist/packages/review/utils.d.ts +0 -60
- package/dist/packages/review/utils.js +0 -214
- package/dist/packages/review/utils.js.map +0 -1
- package/dist/packages/tracing/github-tracer.d.ts +0 -38
- package/dist/packages/tracing/github-tracer.js +0 -79
- package/dist/packages/tracing/github-tracer.js.map +0 -1
- package/dist/packages/tracing/index.d.ts +0 -81
- package/dist/packages/tracing/index.js +0 -240
- package/dist/packages/tracing/index.js.map +0 -1
- package/dist/packages/tracing/tracer.d.ts +0 -30
- package/dist/packages/tracing/tracer.js +0 -141
- package/dist/packages/tracing/tracer.js.map +0 -1
- package/dist/providers/local-config-provider.d.ts +0 -11
- package/dist/providers/local-config-provider.js +0 -39
- package/dist/providers/local-config-provider.js.map +0 -1
- package/dist/providers/local-file-source.d.ts +0 -13
- package/dist/providers/local-file-source.js +0 -47
- package/dist/providers/local-file-source.js.map +0 -1
- package/dist/reporters/console-reporter.d.ts +0 -8
- package/dist/reporters/console-reporter.js +0 -75
- package/dist/reporters/console-reporter.js.map +0 -1
- package/dist/reporters/github-actions-reporter.d.ts +0 -30
- package/dist/reporters/github-actions-reporter.js +0 -104
- package/dist/reporters/github-actions-reporter.js.map +0 -1
- package/dist/reporters/json-reporter.d.ts +0 -14
- package/dist/reporters/json-reporter.js +0 -57
- package/dist/reporters/json-reporter.js.map +0 -1
- package/dist/reporters/junit-reporter.d.ts +0 -25
- package/dist/reporters/junit-reporter.js +0 -142
- package/dist/reporters/junit-reporter.js.map +0 -1
- package/dist/reporters/sarif-reporter.d.ts +0 -21
- package/dist/reporters/sarif-reporter.js +0 -125
- package/dist/reporters/sarif-reporter.js.map +0 -1
|
@@ -1,240 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* FlowLint Distributed Tracing Package
|
|
4
|
-
*
|
|
5
|
-
* Provides OpenTelemetry-based distributed tracing for FlowLint.
|
|
6
|
-
* Tracks request flow from webhook reception through job processing to Check Run creation.
|
|
7
|
-
*
|
|
8
|
-
* @module packages/tracing
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.GitHubApiAttributes = exports.traceGitHubApiCall = exports.shutdownTracing = exports.initTracing = exports.propagation = exports.context = exports.trace = exports.SpanStatusCode = exports.SpanNames = void 0;
|
|
12
|
-
exports.getTracerInstance = getTracerInstance;
|
|
13
|
-
exports.startSpan = startSpan;
|
|
14
|
-
exports.startServerSpan = startServerSpan;
|
|
15
|
-
exports.startClientSpan = startClientSpan;
|
|
16
|
-
exports.withSpan = withSpan;
|
|
17
|
-
exports.withSpanSync = withSpanSync;
|
|
18
|
-
exports.withServerSpan = withServerSpan;
|
|
19
|
-
exports.withClientSpan = withClientSpan;
|
|
20
|
-
exports.addSpanEvent = addSpanEvent;
|
|
21
|
-
exports.setSpanAttributes = setSpanAttributes;
|
|
22
|
-
exports.recordSpanException = recordSpanException;
|
|
23
|
-
exports.getActiveSpan = getActiveSpan;
|
|
24
|
-
exports.getActiveContext = getActiveContext;
|
|
25
|
-
const api_1 = require("@opentelemetry/api");
|
|
26
|
-
Object.defineProperty(exports, "SpanStatusCode", { enumerable: true, get: function () { return api_1.SpanStatusCode; } });
|
|
27
|
-
Object.defineProperty(exports, "context", { enumerable: true, get: function () { return api_1.context; } });
|
|
28
|
-
Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return api_1.trace; } });
|
|
29
|
-
Object.defineProperty(exports, "propagation", { enumerable: true, get: function () { return api_1.propagation; } });
|
|
30
|
-
const tracer_1 = require("./tracer");
|
|
31
|
-
/**
|
|
32
|
-
* Trace span names following OpenTelemetry semantic conventions
|
|
33
|
-
*/
|
|
34
|
-
exports.SpanNames = {
|
|
35
|
-
WEBHOOK_RECEIVED: 'webhook.received',
|
|
36
|
-
WEBHOOK_VERIFY_SIGNATURE: 'webhook.verify_signature',
|
|
37
|
-
JOB_ENQUEUED: 'job.enqueued',
|
|
38
|
-
JOB_PROCESSED: 'job.processed',
|
|
39
|
-
JOB_FETCH_FILES: 'job.fetch_files',
|
|
40
|
-
JOB_LOAD_CONFIG: 'job.load_config',
|
|
41
|
-
JOB_PARSE_WORKFLOW: 'job.parse_workflow',
|
|
42
|
-
JOB_RUN_RULES: 'job.run_rules',
|
|
43
|
-
JOB_CREATE_CHECK_RUN: 'job.create_check_run',
|
|
44
|
-
GITHUB_API_CALL: 'github.api_call',
|
|
45
|
-
LINT_RULE_EXECUTE: 'lint.rule.execute',
|
|
46
|
-
REDIS_OPERATION: 'redis.operation',
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* Get the configured tracer instance
|
|
50
|
-
*/
|
|
51
|
-
function getTracerInstance() {
|
|
52
|
-
return (0, tracer_1.getTracer)();
|
|
53
|
-
}
|
|
54
|
-
/**
|
|
55
|
-
* Start a new span with the given name and attributes
|
|
56
|
-
*/
|
|
57
|
-
function startSpan(name, attributes, parentContext) {
|
|
58
|
-
const tracer = (0, tracer_1.getTracer)();
|
|
59
|
-
const ctx = parentContext || api_1.context.active();
|
|
60
|
-
return tracer.startSpan(name, {
|
|
61
|
-
kind: api_1.SpanKind.INTERNAL,
|
|
62
|
-
attributes,
|
|
63
|
-
}, ctx);
|
|
64
|
-
}
|
|
65
|
-
/**
|
|
66
|
-
* Start a server span (for incoming requests)
|
|
67
|
-
*/
|
|
68
|
-
function startServerSpan(name, attributes, parentContext) {
|
|
69
|
-
const tracer = (0, tracer_1.getTracer)();
|
|
70
|
-
const ctx = parentContext || api_1.context.active();
|
|
71
|
-
return tracer.startSpan(name, {
|
|
72
|
-
kind: api_1.SpanKind.SERVER,
|
|
73
|
-
attributes,
|
|
74
|
-
}, ctx);
|
|
75
|
-
}
|
|
76
|
-
/**
|
|
77
|
-
* Start a client span (for outgoing requests)
|
|
78
|
-
*/
|
|
79
|
-
function startClientSpan(name, attributes, parentContext) {
|
|
80
|
-
const tracer = (0, tracer_1.getTracer)();
|
|
81
|
-
const ctx = parentContext || api_1.context.active();
|
|
82
|
-
return tracer.startSpan(name, {
|
|
83
|
-
kind: api_1.SpanKind.CLIENT,
|
|
84
|
-
attributes,
|
|
85
|
-
}, ctx);
|
|
86
|
-
}
|
|
87
|
-
/**
|
|
88
|
-
* Execute a function within a span context
|
|
89
|
-
*/
|
|
90
|
-
async function withSpan(name, fn, attributes, parentContext) {
|
|
91
|
-
const baseContext = parentContext || api_1.context.active();
|
|
92
|
-
const span = startSpan(name, attributes, parentContext);
|
|
93
|
-
const ctxWithSpan = api_1.trace.setSpan(baseContext, span);
|
|
94
|
-
try {
|
|
95
|
-
const result = await api_1.context.with(ctxWithSpan, () => fn(span));
|
|
96
|
-
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
97
|
-
return result;
|
|
98
|
-
}
|
|
99
|
-
catch (error) {
|
|
100
|
-
span.setStatus({
|
|
101
|
-
code: api_1.SpanStatusCode.ERROR,
|
|
102
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
103
|
-
});
|
|
104
|
-
if (error instanceof Error) {
|
|
105
|
-
span.recordException(error);
|
|
106
|
-
}
|
|
107
|
-
throw error;
|
|
108
|
-
}
|
|
109
|
-
finally {
|
|
110
|
-
span.end();
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
/**
|
|
114
|
-
* Execute a synchronous function within a span context
|
|
115
|
-
*/
|
|
116
|
-
function withSpanSync(name, fn, attributes, parentContext) {
|
|
117
|
-
const baseContext = parentContext || api_1.context.active();
|
|
118
|
-
const span = startSpan(name, attributes, parentContext);
|
|
119
|
-
const ctxWithSpan = api_1.trace.setSpan(baseContext, span);
|
|
120
|
-
try {
|
|
121
|
-
const result = api_1.context.with(ctxWithSpan, () => fn(span));
|
|
122
|
-
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
123
|
-
return result;
|
|
124
|
-
}
|
|
125
|
-
catch (error) {
|
|
126
|
-
span.setStatus({
|
|
127
|
-
code: api_1.SpanStatusCode.ERROR,
|
|
128
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
129
|
-
});
|
|
130
|
-
if (error instanceof Error) {
|
|
131
|
-
span.recordException(error);
|
|
132
|
-
}
|
|
133
|
-
throw error;
|
|
134
|
-
}
|
|
135
|
-
finally {
|
|
136
|
-
span.end();
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
/**
|
|
140
|
-
* Execute a function within a server span context (for incoming requests)
|
|
141
|
-
*/
|
|
142
|
-
async function withServerSpan(name, fn, attributes, parentContext) {
|
|
143
|
-
const baseContext = parentContext || api_1.context.active();
|
|
144
|
-
const span = startServerSpan(name, attributes, parentContext);
|
|
145
|
-
const ctxWithSpan = api_1.trace.setSpan(baseContext, span);
|
|
146
|
-
try {
|
|
147
|
-
const result = await api_1.context.with(ctxWithSpan, () => fn(span));
|
|
148
|
-
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
149
|
-
return result;
|
|
150
|
-
}
|
|
151
|
-
catch (error) {
|
|
152
|
-
span.setStatus({
|
|
153
|
-
code: api_1.SpanStatusCode.ERROR,
|
|
154
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
155
|
-
});
|
|
156
|
-
if (error instanceof Error) {
|
|
157
|
-
span.recordException(error);
|
|
158
|
-
}
|
|
159
|
-
throw error;
|
|
160
|
-
}
|
|
161
|
-
finally {
|
|
162
|
-
span.end();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
/**
|
|
166
|
-
* Execute a function within a client span context (for outgoing requests)
|
|
167
|
-
*/
|
|
168
|
-
async function withClientSpan(name, fn, attributes, parentContext) {
|
|
169
|
-
const baseContext = parentContext || api_1.context.active();
|
|
170
|
-
const span = startClientSpan(name, attributes, parentContext);
|
|
171
|
-
const ctxWithSpan = api_1.trace.setSpan(baseContext, span);
|
|
172
|
-
try {
|
|
173
|
-
const result = await api_1.context.with(ctxWithSpan, () => fn(span));
|
|
174
|
-
span.setStatus({ code: api_1.SpanStatusCode.OK });
|
|
175
|
-
return result;
|
|
176
|
-
}
|
|
177
|
-
catch (error) {
|
|
178
|
-
span.setStatus({
|
|
179
|
-
code: api_1.SpanStatusCode.ERROR,
|
|
180
|
-
message: error instanceof Error ? error.message : 'Unknown error',
|
|
181
|
-
});
|
|
182
|
-
if (error instanceof Error) {
|
|
183
|
-
span.recordException(error);
|
|
184
|
-
}
|
|
185
|
-
throw error;
|
|
186
|
-
}
|
|
187
|
-
finally {
|
|
188
|
-
span.end();
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Add an event to the current active span
|
|
193
|
-
*/
|
|
194
|
-
function addSpanEvent(name, attributes) {
|
|
195
|
-
const span = api_1.trace.getActiveSpan();
|
|
196
|
-
if (span) {
|
|
197
|
-
span.addEvent(name, attributes);
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
/**
|
|
201
|
-
* Set attributes on the current active span
|
|
202
|
-
*/
|
|
203
|
-
function setSpanAttributes(attributes) {
|
|
204
|
-
const span = api_1.trace.getActiveSpan();
|
|
205
|
-
if (span) {
|
|
206
|
-
span.setAttributes(attributes);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
/**
|
|
210
|
-
* Record an exception on the current active span
|
|
211
|
-
*/
|
|
212
|
-
function recordSpanException(error) {
|
|
213
|
-
const span = api_1.trace.getActiveSpan();
|
|
214
|
-
if (span) {
|
|
215
|
-
span.recordException(error);
|
|
216
|
-
span.setStatus({
|
|
217
|
-
code: api_1.SpanStatusCode.ERROR,
|
|
218
|
-
message: error.message,
|
|
219
|
-
});
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
/**
|
|
223
|
-
* Get the current active span
|
|
224
|
-
*/
|
|
225
|
-
function getActiveSpan() {
|
|
226
|
-
return api_1.trace.getActiveSpan();
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Get the current trace context
|
|
230
|
-
*/
|
|
231
|
-
function getActiveContext() {
|
|
232
|
-
return api_1.context.active();
|
|
233
|
-
}
|
|
234
|
-
var tracer_2 = require("./tracer");
|
|
235
|
-
Object.defineProperty(exports, "initTracing", { enumerable: true, get: function () { return tracer_2.initTracing; } });
|
|
236
|
-
Object.defineProperty(exports, "shutdownTracing", { enumerable: true, get: function () { return tracer_2.shutdownTracing; } });
|
|
237
|
-
var github_tracer_1 = require("./github-tracer");
|
|
238
|
-
Object.defineProperty(exports, "traceGitHubApiCall", { enumerable: true, get: function () { return github_tracer_1.traceGitHubApiCall; } });
|
|
239
|
-
Object.defineProperty(exports, "GitHubApiAttributes", { enumerable: true, get: function () { return github_tracer_1.GitHubApiAttributes; } });
|
|
240
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../packages/tracing/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import { Span } from '@opentelemetry/api';
|
|
2
|
-
import { getNodeAutoInstrumentations } from '@opentelemetry/auto-instrumentations-node';
|
|
3
|
-
type AutoInstrumentationOptions = Parameters<typeof getNodeAutoInstrumentations>[0];
|
|
4
|
-
/**
|
|
5
|
-
* Initialize OpenTelemetry tracing for FlowLint
|
|
6
|
-
*/
|
|
7
|
-
export declare function initTracing(options: {
|
|
8
|
-
serviceName: string;
|
|
9
|
-
serviceNamespace?: string;
|
|
10
|
-
serviceVersion?: string;
|
|
11
|
-
environment?: string;
|
|
12
|
-
exporter?: 'otlp-http' | 'otlp-grpc' | 'console' | 'none';
|
|
13
|
-
otlpEndpoint?: string;
|
|
14
|
-
otlpHeaders?: Record<string, string>;
|
|
15
|
-
otlpTimeoutMs?: number;
|
|
16
|
-
instrumentationOptions?: AutoInstrumentationOptions;
|
|
17
|
-
}): Promise<void>;
|
|
18
|
-
/**
|
|
19
|
-
* Shutdown OpenTelemetry
|
|
20
|
-
*/
|
|
21
|
-
export declare function shutdownTracing(): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* Get tracer instance
|
|
24
|
-
*/
|
|
25
|
-
export declare function getTracer(): import("@opentelemetry/api").Tracer;
|
|
26
|
-
/**
|
|
27
|
-
* Set custom span attributes (helper)
|
|
28
|
-
*/
|
|
29
|
-
export declare function setSpanAttributes(span: Span | undefined, attributes: Record<string, string | number | boolean>): void;
|
|
30
|
-
export {};
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.initTracing = initTracing;
|
|
4
|
-
exports.shutdownTracing = shutdownTracing;
|
|
5
|
-
exports.getTracer = getTracer;
|
|
6
|
-
exports.setSpanAttributes = setSpanAttributes;
|
|
7
|
-
const api_1 = require("@opentelemetry/api");
|
|
8
|
-
const sdk_node_1 = require("@opentelemetry/sdk-node");
|
|
9
|
-
const resources_1 = require("@opentelemetry/resources");
|
|
10
|
-
const semantic_conventions_1 = require("@opentelemetry/semantic-conventions");
|
|
11
|
-
const exporter_trace_otlp_http_1 = require("@opentelemetry/exporter-trace-otlp-http");
|
|
12
|
-
const exporter_trace_otlp_grpc_1 = require("@opentelemetry/exporter-trace-otlp-grpc");
|
|
13
|
-
const instrumentation_http_1 = require("@opentelemetry/instrumentation-http");
|
|
14
|
-
const instrumentation_express_1 = require("@opentelemetry/instrumentation-express");
|
|
15
|
-
const auto_instrumentations_node_1 = require("@opentelemetry/auto-instrumentations-node");
|
|
16
|
-
const logger_1 = require("../logger");
|
|
17
|
-
let sdk;
|
|
18
|
-
let initPromise;
|
|
19
|
-
const DEFAULT_SERVICE_VERSION = process.env.npm_package_version || '0.0.0';
|
|
20
|
-
const DEFAULT_ENVIRONMENT = process.env.NODE_ENV || 'development';
|
|
21
|
-
/**
|
|
22
|
-
* Initialize OpenTelemetry tracing for FlowLint
|
|
23
|
-
*/
|
|
24
|
-
function initTracing(options) {
|
|
25
|
-
if (initPromise) {
|
|
26
|
-
return initPromise;
|
|
27
|
-
}
|
|
28
|
-
api_1.diag.setLogger(new api_1.DiagConsoleLogger(), api_1.DiagLogLevel.ERROR);
|
|
29
|
-
const { serviceName, serviceNamespace, serviceVersion = DEFAULT_SERVICE_VERSION, environment = DEFAULT_ENVIRONMENT, exporter = process.env.OTEL_EXPORTER || 'otlp-http', otlpEndpoint = process.env.OTEL_EXPORTER_OTLP_ENDPOINT, otlpHeaders = parseHeaders(process.env.OTEL_EXPORTER_OTLP_HEADERS), otlpTimeoutMs = process.env.OTEL_EXPORTER_OTLP_TIMEOUT ? Number(process.env.OTEL_EXPORTER_OTLP_TIMEOUT) : undefined, instrumentationOptions = {}, } = options;
|
|
30
|
-
const resource = (0, resources_1.resourceFromAttributes)({
|
|
31
|
-
[semantic_conventions_1.ATTR_SERVICE_NAME]: serviceName,
|
|
32
|
-
[semantic_conventions_1.ATTR_SERVICE_VERSION]: serviceVersion,
|
|
33
|
-
'service.namespace': serviceNamespace || 'flowlint',
|
|
34
|
-
'deployment.environment': environment,
|
|
35
|
-
});
|
|
36
|
-
const instrumentations = [
|
|
37
|
-
new instrumentation_http_1.HttpInstrumentation({
|
|
38
|
-
ignoreIncomingRequestHook: (req) => {
|
|
39
|
-
const path = req.url || '';
|
|
40
|
-
return ['/metrics', '/livez', '/readyz', '/healthz', '/openapi.json', '/api-docs'].some((ignorePath) => path.startsWith(ignorePath));
|
|
41
|
-
},
|
|
42
|
-
}),
|
|
43
|
-
new instrumentation_express_1.ExpressInstrumentation(),
|
|
44
|
-
];
|
|
45
|
-
const autoInstrumentations = (0, auto_instrumentations_node_1.getNodeAutoInstrumentations)({
|
|
46
|
-
'@opentelemetry/instrumentation-fs': { enabled: false },
|
|
47
|
-
...instrumentationOptions,
|
|
48
|
-
});
|
|
49
|
-
const exporters = createExporter({ exporter, otlpEndpoint, otlpHeaders, otlpTimeoutMs });
|
|
50
|
-
sdk = new sdk_node_1.NodeSDK({
|
|
51
|
-
resource,
|
|
52
|
-
traceExporter: exporters.traceExporter,
|
|
53
|
-
instrumentations: [...instrumentations, ...Object.values(autoInstrumentations)],
|
|
54
|
-
});
|
|
55
|
-
initPromise = (async () => {
|
|
56
|
-
await sdk.start();
|
|
57
|
-
logger_1.logger.info({ serviceName }, 'OpenTelemetry tracing initialized');
|
|
58
|
-
})().catch((error) => {
|
|
59
|
-
logger_1.logger.error({ error }, 'failed to initialize OpenTelemetry tracing');
|
|
60
|
-
});
|
|
61
|
-
return initPromise;
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Shutdown OpenTelemetry
|
|
65
|
-
*/
|
|
66
|
-
async function shutdownTracing() {
|
|
67
|
-
if (!sdk) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
try {
|
|
71
|
-
await sdk.shutdown();
|
|
72
|
-
logger_1.logger.info('OpenTelemetry tracing shut down');
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
logger_1.logger.error({ error }, 'failed to shut down OpenTelemetry');
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
sdk = undefined;
|
|
79
|
-
initPromise = undefined;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
/**
|
|
83
|
-
* Get tracer instance
|
|
84
|
-
*/
|
|
85
|
-
function getTracer() {
|
|
86
|
-
return api_1.trace.getTracer('flowlint');
|
|
87
|
-
}
|
|
88
|
-
/**
|
|
89
|
-
* Set custom span attributes (helper)
|
|
90
|
-
*/
|
|
91
|
-
function setSpanAttributes(span, attributes) {
|
|
92
|
-
if (!span) {
|
|
93
|
-
return;
|
|
94
|
-
}
|
|
95
|
-
span.setAttributes(attributes);
|
|
96
|
-
}
|
|
97
|
-
function parseHeaders(headersInput) {
|
|
98
|
-
if (!headersInput) {
|
|
99
|
-
return {};
|
|
100
|
-
}
|
|
101
|
-
try {
|
|
102
|
-
const entries = headersInput.split(',').map((entry) => {
|
|
103
|
-
const [key, value] = entry.split('=').map((item) => item.trim());
|
|
104
|
-
return [key, value];
|
|
105
|
-
});
|
|
106
|
-
return Object.fromEntries(entries);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
logger_1.logger.warn({ error }, 'failed to parse OTLP headers');
|
|
110
|
-
return {};
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
function createExporter(options) {
|
|
114
|
-
const { exporter, otlpEndpoint, otlpHeaders, otlpTimeoutMs } = options;
|
|
115
|
-
switch (exporter) {
|
|
116
|
-
case 'otlp-http':
|
|
117
|
-
return {
|
|
118
|
-
traceExporter: new exporter_trace_otlp_http_1.OTLPTraceExporter({
|
|
119
|
-
url: otlpEndpoint,
|
|
120
|
-
headers: otlpHeaders,
|
|
121
|
-
timeoutMillis: otlpTimeoutMs,
|
|
122
|
-
}),
|
|
123
|
-
};
|
|
124
|
-
case 'otlp-grpc':
|
|
125
|
-
return {
|
|
126
|
-
traceExporter: new exporter_trace_otlp_grpc_1.OTLPTraceExporter({
|
|
127
|
-
url: otlpEndpoint,
|
|
128
|
-
}),
|
|
129
|
-
};
|
|
130
|
-
case 'console':
|
|
131
|
-
return {
|
|
132
|
-
traceExporter: undefined,
|
|
133
|
-
};
|
|
134
|
-
case 'none':
|
|
135
|
-
default:
|
|
136
|
-
return {
|
|
137
|
-
traceExporter: undefined,
|
|
138
|
-
};
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
//# sourceMappingURL=tracer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.js","sourceRoot":"","sources":["../../../packages/tracing/tracer.ts"],"names":[],"mappings":";;AAsBA,kCAqEC;AAKD,0CAcC;AAKD,8BAEC;AAKD,8CAKC;AA/HD,4CAAwF;AACxF,sDAAkD;AAClD,wDAAkE;AAClE,8EAA8F;AAC9F,sFAAqG;AACrG,sFAAqG;AACrG,8EAA0E;AAC1E,oFAAgF;AAChF,0FAAwF;AACxF,sCAAmC;AAEnC,IAAI,GAAwB,CAAC;AAC7B,IAAI,WAAsC,CAAC;AAI3C,MAAM,uBAAuB,GAAG,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC;AAC3E,MAAM,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,aAAa,CAAC;AAElE;;GAEG;AACH,SAAgB,WAAW,CAAC,OAU3B;IACC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,UAAI,CAAC,SAAS,CAAC,IAAI,uBAAiB,EAAE,EAAE,kBAAY,CAAC,KAAK,CAAC,CAAC;IAE5D,MAAM,EACJ,WAAW,EACX,gBAAgB,EAChB,cAAc,GAAG,uBAAuB,EACxC,WAAW,GAAG,mBAAmB,EACjC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,WAAW,EACnD,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,EACtD,WAAW,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,EAClE,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC,CAAC,CAAC,SAAS,EACnH,sBAAsB,GAAG,EAAE,GAC5B,GAAG,OAAO,CAAC;IAEZ,MAAM,QAAQ,GAAG,IAAA,kCAAsB,EAAC;QACtC,CAAC,wCAAiB,CAAC,EAAE,WAAW;QAChC,CAAC,2CAAoB,CAAC,EAAE,cAAc;QACtC,mBAAmB,EAAE,gBAAgB,IAAI,UAAU;QACnD,wBAAwB,EAAE,WAAW;KACtC,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG;QACvB,IAAI,0CAAmB,CAAC;YACtB,yBAAyB,EAAE,CAAC,GAAG,EAAE,EAAE;gBACjC,MAAM,IAAI,GAAG,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC;gBAC3B,OAAO,CAAC,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,UAAU,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CACrG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAC5B,CAAC;YACJ,CAAC;SACF,CAAC;QACF,IAAI,gDAAsB,EAAE;KAC7B,CAAC;IAEF,MAAM,oBAAoB,GAAG,IAAA,wDAA2B,EAAC;QACvD,mCAAmC,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE;QACvD,GAAG,sBAAsB;KAC1B,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,cAAc,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;IAEzF,GAAG,GAAG,IAAI,kBAAO,CAAC;QAChB,QAAQ;QACR,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,gBAAgB,EAAE,CAAC,GAAG,gBAAgB,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;KAChF,CAAC,CAAC;IAEH,WAAW,GAAG,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,GAAI,CAAC,KAAK,EAAE,CAAC;QACnB,eAAM,CAAC,IAAI,CAAC,EAAE,WAAW,EAAE,EAAE,mCAAmC,CAAC,CAAC;IACpE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,KAAY,EAAE,EAAE;QAC1B,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,4CAA4C,CAAC,CAAC;IACxE,CAAC,CAAC,CAAC;IAEH,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;GAEG;AACI,KAAK,UAAU,eAAe;IACnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,eAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,mCAAmC,CAAC,CAAC;IAC/D,CAAC;YAAS,CAAC;QACT,GAAG,GAAG,SAAS,CAAC;QAChB,WAAW,GAAG,SAAS,CAAC;IAC1B,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS;IACvB,OAAO,WAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,IAAsB,EAAE,UAAqD;IAC7G,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO;IACT,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,YAAY,CAAC,YAAqB;IACzC,IAAI,CAAC,YAAY,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YACpD,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACtB,CAAC,CAAC,CAAC;QAEH,OAAO,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,eAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,EAAE,8BAA8B,CAAC,CAAC;QACvD,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAKvB;IACC,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC;IAEvE,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,OAAO;gBACL,aAAa,EAAE,IAAI,4CAAqB,CAAC;oBACvC,GAAG,EAAE,YAAY;oBACjB,OAAO,EAAE,WAAW;oBACpB,aAAa,EAAE,aAAa;iBAC7B,CAAC;aACH,CAAC;QACJ,KAAK,WAAW;YACd,OAAO;gBACL,aAAa,EAAE,IAAI,4CAAqB,CAAC;oBACvC,GAAG,EAAE,YAAY;iBAClB,CAAC;aACH,CAAC;QACJ,KAAK,SAAS;YACZ,OAAO;gBACL,aAAa,EAAE,SAAS;aACzB,CAAC;QACJ,KAAK,MAAM,CAAC;QACZ;YACE,OAAO;gBACL,aAAa,EAAE,SAAS;aACzB,CAAC;IACN,CAAC;AACH,CAAC"}
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Local Config Provider
|
|
3
|
-
* Loads .flowlint.yml from the local filesystem
|
|
4
|
-
*/
|
|
5
|
-
import { type FlowLintConfig } from 'packages/config/flowlint-config';
|
|
6
|
-
import type { ConfigProvider } from 'packages/review/providers';
|
|
7
|
-
export declare class LocalConfigProvider implements ConfigProvider {
|
|
8
|
-
private configPath?;
|
|
9
|
-
constructor(configPath?: string | undefined);
|
|
10
|
-
load(): Promise<FlowLintConfig>;
|
|
11
|
-
}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Local Config Provider
|
|
4
|
-
* Loads .flowlint.yml from the local filesystem
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.LocalConfigProvider = void 0;
|
|
11
|
-
const fs_1 = __importDefault(require("fs"));
|
|
12
|
-
const path_1 = __importDefault(require("path"));
|
|
13
|
-
const yaml_1 = __importDefault(require("yaml"));
|
|
14
|
-
const flowlint_config_1 = require("../packages/config/flowlint-config");
|
|
15
|
-
const merge_1 = require("../packages/review/utils/merge");
|
|
16
|
-
class LocalConfigProvider {
|
|
17
|
-
constructor(configPath) {
|
|
18
|
-
this.configPath = configPath;
|
|
19
|
-
}
|
|
20
|
-
async load() {
|
|
21
|
-
// Determine config file path
|
|
22
|
-
const configFile = this.configPath || path_1.default.join(process.cwd(), '.flowlint.yml');
|
|
23
|
-
// If config doesn't exist, return defaults
|
|
24
|
-
if (!fs_1.default.existsSync(configFile)) {
|
|
25
|
-
return flowlint_config_1.defaultConfig;
|
|
26
|
-
}
|
|
27
|
-
try {
|
|
28
|
-
const content = fs_1.default.readFileSync(configFile, 'utf8');
|
|
29
|
-
const parsed = yaml_1.default.parse(content) || {};
|
|
30
|
-
return (0, merge_1.deepMerge)(flowlint_config_1.defaultConfig, parsed);
|
|
31
|
-
}
|
|
32
|
-
catch (error) {
|
|
33
|
-
console.warn(`Failed to load config from ${configFile}: ${error}`);
|
|
34
|
-
return flowlint_config_1.defaultConfig;
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
exports.LocalConfigProvider = LocalConfigProvider;
|
|
39
|
-
//# sourceMappingURL=local-config-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-config-provider.js","sourceRoot":"","sources":["../../../../../apps/cli/src/providers/local-config-provider.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AACxB,gDAAwB;AACxB,qEAAqF;AAErF,uDAAwD;AAExD,MAAa,mBAAmB;IAC9B,YAAoB,UAAmB;QAAnB,eAAU,GAAV,UAAU,CAAS;IAAG,CAAC;IAE3C,KAAK,CAAC,IAAI;QACR,6BAA6B;QAC7B,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,IAAI,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;QAEhF,2CAA2C;QAC3C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,+BAAa,CAAC;QACvB,CAAC;QAED,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;YACpD,MAAM,MAAM,GAAI,cAAI,CAAC,KAAK,CAAC,OAAO,CAA6B,IAAI,EAAE,CAAC;YACtE,OAAO,IAAA,iBAAS,EAAC,+BAAa,EAAE,MAAM,CAAC,CAAC;QAC1C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,IAAI,CAAC,8BAA8B,UAAU,KAAK,KAAK,EAAE,CAAC,CAAC;YACnE,OAAO,+BAAa,CAAC;QACvB,CAAC;IACH,CAAC;CACF;AArBD,kDAqBC"}
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Local File Source Provider
|
|
3
|
-
* Reads workflow files from the local filesystem
|
|
4
|
-
*/
|
|
5
|
-
import type { FileSource, LintableFile } from 'packages/review/providers';
|
|
6
|
-
export declare class LocalFileSource implements FileSource {
|
|
7
|
-
private basePath;
|
|
8
|
-
constructor(basePath: string);
|
|
9
|
-
getFiles(patterns: {
|
|
10
|
-
include: string[];
|
|
11
|
-
ignore: string[];
|
|
12
|
-
}): Promise<LintableFile[]>;
|
|
13
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Local File Source Provider
|
|
4
|
-
* Reads workflow files from the local filesystem
|
|
5
|
-
*/
|
|
6
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
7
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
8
|
-
};
|
|
9
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
|
-
exports.LocalFileSource = void 0;
|
|
11
|
-
const fs_1 = __importDefault(require("fs"));
|
|
12
|
-
const path_1 = __importDefault(require("path"));
|
|
13
|
-
const glob_1 = require("glob");
|
|
14
|
-
class LocalFileSource {
|
|
15
|
-
constructor(basePath) {
|
|
16
|
-
this.basePath = basePath;
|
|
17
|
-
}
|
|
18
|
-
async getFiles(patterns) {
|
|
19
|
-
const files = [];
|
|
20
|
-
for (const pattern of patterns.include) {
|
|
21
|
-
// Construct glob pattern relative to basePath
|
|
22
|
-
const globPattern = path_1.default.join(this.basePath, pattern);
|
|
23
|
-
const matches = (0, glob_1.globSync)(globPattern, {
|
|
24
|
-
ignore: patterns.ignore.map((ignorePattern) => path_1.default.join(this.basePath, ignorePattern)),
|
|
25
|
-
nodir: true,
|
|
26
|
-
});
|
|
27
|
-
for (const filePath of matches) {
|
|
28
|
-
try {
|
|
29
|
-
const content = fs_1.default.readFileSync(filePath, 'utf8');
|
|
30
|
-
const relativePath = path_1.default.relative(this.basePath, filePath);
|
|
31
|
-
files.push({
|
|
32
|
-
path: relativePath,
|
|
33
|
-
content,
|
|
34
|
-
});
|
|
35
|
-
}
|
|
36
|
-
catch (error) {
|
|
37
|
-
console.warn(`Failed to read file ${filePath}: ${error}`);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
// Remove duplicates (same file matched multiple patterns)
|
|
42
|
-
const uniqueFiles = Array.from(new Map(files.map((f) => [f.path, f])).values());
|
|
43
|
-
return uniqueFiles;
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
exports.LocalFileSource = LocalFileSource;
|
|
47
|
-
//# sourceMappingURL=local-file-source.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"local-file-source.js","sourceRoot":"","sources":["../../../../../apps/cli/src/providers/local-file-source.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,4CAAoB;AACpB,gDAAwB;AACxB,+BAAgC;AAGhC,MAAa,eAAe;IAC1B,YAAoB,QAAgB;QAAhB,aAAQ,GAAR,QAAQ,CAAQ;IAAG,CAAC;IAExC,KAAK,CAAC,QAAQ,CAAC,QAAiD;QAC9D,MAAM,KAAK,GAAmB,EAAE,CAAC;QAEjC,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;YACvC,8CAA8C;YAC9C,MAAM,WAAW,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YAEtD,MAAM,OAAO,GAAG,IAAA,eAAQ,EAAC,WAAW,EAAE;gBACpC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,cAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;gBACvF,KAAK,EAAE,IAAI;aACZ,CAAC,CAAC;YAEH,KAAK,MAAM,QAAQ,IAAI,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC;oBACH,MAAM,OAAO,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;oBAClD,MAAM,YAAY,GAAG,cAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;oBAE5D,KAAK,CAAC,IAAI,CAAC;wBACT,IAAI,EAAE,YAAY;wBAClB,OAAO;qBACR,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,uBAAuB,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC;gBAC5D,CAAC;YACH,CAAC;QACH,CAAC;QAED,0DAA0D;QAC1D,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAC5B,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAChD,CAAC;QAEF,OAAO,WAAW,CAAC;IACrB,CAAC;CACF;AArCD,0CAqCC"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Console Reporter
|
|
3
|
-
* Outputs findings to the terminal with colors and formatting
|
|
4
|
-
*/
|
|
5
|
-
import type { AnalysisResult, Reporter } from 'packages/review/providers';
|
|
6
|
-
export declare class ConsoleReporter implements Reporter {
|
|
7
|
-
report(results: AnalysisResult[]): Promise<void>;
|
|
8
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Console Reporter
|
|
4
|
-
* Outputs findings to the terminal with colors and formatting
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.ConsoleReporter = void 0;
|
|
8
|
-
const findings_1 = require("../packages/review/utils/findings");
|
|
9
|
-
const colors = {
|
|
10
|
-
reset: '\x1b[0m',
|
|
11
|
-
bold: '\x1b[1m',
|
|
12
|
-
red: '\x1b[31m',
|
|
13
|
-
yellow: '\x1b[33m',
|
|
14
|
-
blue: '\x1b[36m',
|
|
15
|
-
gray: '\x1b[90m',
|
|
16
|
-
};
|
|
17
|
-
class ConsoleReporter {
|
|
18
|
-
async report(results) {
|
|
19
|
-
const allFindings = results.flatMap((r) => r.findings);
|
|
20
|
-
// Print header
|
|
21
|
-
console.log();
|
|
22
|
-
console.log(`${colors.blue}${colors.bold}FlowLint Analysis Report${colors.reset} ${colors.gray}${new Date().toLocaleTimeString()}${colors.reset}`);
|
|
23
|
-
console.log(colors.gray + '─'.repeat(80) + colors.reset);
|
|
24
|
-
console.log();
|
|
25
|
-
// Print findings grouped by file
|
|
26
|
-
for (const result of results) {
|
|
27
|
-
if (result.findings.length === 0 && !result.errors)
|
|
28
|
-
continue;
|
|
29
|
-
const { path } = result.file;
|
|
30
|
-
console.log(`${colors.bold}${path}${colors.reset}`);
|
|
31
|
-
const sortedFindings = (0, findings_1.sortFindingsBySeverity)(result.findings);
|
|
32
|
-
for (const finding of sortedFindings) {
|
|
33
|
-
const severityColor = finding.severity === 'must'
|
|
34
|
-
? colors.red
|
|
35
|
-
: finding.severity === 'should'
|
|
36
|
-
? colors.yellow
|
|
37
|
-
: colors.gray;
|
|
38
|
-
const line = finding.line ? `:${finding.line}` : '';
|
|
39
|
-
const severity = finding.severity.toUpperCase();
|
|
40
|
-
console.log(` ${severityColor}${severity}${colors.reset} ${colors.bold}${finding.rule}${colors.reset} ${finding.message}`);
|
|
41
|
-
console.log(` at ${colors.gray}${path}${line}${colors.reset}`);
|
|
42
|
-
if (finding.documentationUrl) {
|
|
43
|
-
console.log(` ${colors.blue}→ See examples: ${finding.documentationUrl}${colors.reset}`);
|
|
44
|
-
}
|
|
45
|
-
if (finding.raw_details) {
|
|
46
|
-
const details = finding.raw_details.split('\n').slice(0, 3);
|
|
47
|
-
for (const detail of details) {
|
|
48
|
-
console.log(` ${colors.gray}${detail}${colors.reset}`);
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
console.log();
|
|
53
|
-
}
|
|
54
|
-
// Print summary
|
|
55
|
-
const summary = (0, findings_1.countFindingsBySeverity)(allFindings);
|
|
56
|
-
console.log(colors.gray + '─'.repeat(80) + colors.reset);
|
|
57
|
-
console.log();
|
|
58
|
-
if (summary.total === 0) {
|
|
59
|
-
console.log(`${colors.bold}✓ No issues found${colors.reset}`);
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
const summaryParts = [];
|
|
63
|
-
if (summary.must > 0)
|
|
64
|
-
summaryParts.push(`${colors.red}${summary.must} must-fix${colors.reset}`);
|
|
65
|
-
if (summary.should > 0)
|
|
66
|
-
summaryParts.push(`${colors.yellow}${summary.should} should-fix${colors.reset}`);
|
|
67
|
-
if (summary.nit > 0)
|
|
68
|
-
summaryParts.push(`${colors.gray}${summary.nit} nit${colors.reset}`);
|
|
69
|
-
console.log(`${colors.bold}Found: ${summaryParts.join(', ')}${colors.reset}`);
|
|
70
|
-
}
|
|
71
|
-
console.log();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
exports.ConsoleReporter = ConsoleReporter;
|
|
75
|
-
//# sourceMappingURL=console-reporter.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"console-reporter.js","sourceRoot":"","sources":["../../../../../apps/cli/src/reporters/console-reporter.ts"],"names":[],"mappings":"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"}
|