@codometer/cli 0.0.1

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.
@@ -0,0 +1,658 @@
1
+ import { ConfigurationModule as e, ConfigurationService as t, FORMAT_NAMES as n } from "@codometer/configuration";
2
+ import { DiscoveryModule as r, MeasureModule as i, MeasureService as a } from "@codometer/measurement";
3
+ import { CODOMETER_MARKERS as o, ChangesModule as s, ChangesService as c, ConfigurationListingModule as l, ConfigurationListingService as u, DeliveryModule as d, DeliveryService as f, DestinationsModule as p, DestinationsService as m, DocumentsModule as ee, DocumentsService as h, JsonModule as g, MarkdownModule as _, RenderConfigurationService as v, RenderModule as y, RenderService as b, ReportModule as x, ReportService as S } from "@codometer/output";
4
+ import { ConsoleLogger as te, Global as ne, Injectable as C, Module as w, Scope as T } from "@nestjs/common";
5
+ import { ConfigModule as E } from "@nestjs/config";
6
+ import { DiscoveryModule as D } from "@nestjs/core";
7
+ import { existsSync as O, mkdirSync as k } from "node:fs";
8
+ import A from "node:path";
9
+ import j from "pino";
10
+ import { z as M } from "zod";
11
+ import { Command as N, CommandRunner as P, Option as F } from "nest-commander";
12
+ //#region packages/logger/src/modules/logger/logger.constants.ts
13
+ var re = /^(\p{Extended_Pictographic}️?(?:‍\p{Extended_Pictographic}️?)*)\s+/u, ie = /^([A-Za-z]+)/, ae = /* @__PURE__ */ new Set([
14
+ "built",
15
+ "cut",
16
+ "found",
17
+ "got",
18
+ "kept",
19
+ "left",
20
+ "lost",
21
+ "made",
22
+ "put",
23
+ "ran",
24
+ "read",
25
+ "rebuilt",
26
+ "sent",
27
+ "set",
28
+ "split",
29
+ "took",
30
+ "wrote"
31
+ ]), oe = /* @__PURE__ */ new Set([
32
+ "CommandFactory",
33
+ "ExceptionHandler",
34
+ "GraphQLModule",
35
+ "InstanceLoader",
36
+ "NestApplication",
37
+ "NestFactory",
38
+ "RouterExplorer",
39
+ "RoutesResolver",
40
+ "TypeOrmModule"
41
+ ]);
42
+ //#endregion
43
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/decorateMetadata.js
44
+ function I(e, t) {
45
+ if (typeof Reflect == "object" && typeof Reflect.metadata == "function") return Reflect.metadata(e, t);
46
+ }
47
+ //#endregion
48
+ //#region \0@oxc-project+runtime@0.151.0/helpers/esm/decorate.js
49
+ function L(e, t, n, r) {
50
+ var i = arguments.length, a = i < 3 ? t : r === null ? r = Object.getOwnPropertyDescriptor(t, n) : r, o;
51
+ if (typeof Reflect == "object" && typeof Reflect.decorate == "function") a = Reflect.decorate(e, t, n, r);
52
+ else for (var s = e.length - 1; s >= 0; s--) (o = e[s]) && (a = (i < 3 ? o(a) : i > 3 ? o(t, n, a) : o(t, n)) || a);
53
+ return i > 3 && a && Object.defineProperty(t, n, a), a;
54
+ }
55
+ //#endregion
56
+ //#region packages/logger/src/modules/logger/logger.service.ts
57
+ var R, z = class extends te {
58
+ static {
59
+ R = this;
60
+ }
61
+ constructor() {
62
+ super();
63
+ }
64
+ static isProduction = process.env.NODE_ENV === "production";
65
+ static rootLogger;
66
+ static writesToStandardError = !1;
67
+ child = R.root;
68
+ static createRootLogger() {
69
+ let e = process.env.LOG_LEVEL ?? "info";
70
+ return R.isProduction ? R.writesToStandardError ? j({ level: e }, j.destination(2)) : j({ level: e }) : j({
71
+ level: e,
72
+ transport: {
73
+ options: {
74
+ colorize: !0,
75
+ destination: R.writesToStandardError ? 2 : 1,
76
+ ignore: "pid,hostname,emoji",
77
+ messageFormat: "{emoji} {msg}",
78
+ singleLine: !0
79
+ },
80
+ target: "pino-pretty"
81
+ }
82
+ });
83
+ }
84
+ static logToStandardError() {
85
+ if (R.rootLogger !== void 0) {
86
+ process.emitWarning("LoggerService.logToStandardError() was called after the first log line, so log lines still go to standard output and anything piping that stream will read them as data. Call it as the first statement of the application's bootstrap.");
87
+ return;
88
+ }
89
+ R.writesToStandardError = !0;
90
+ }
91
+ assertConventionalMessage(e) {
92
+ if (R.isProduction || this.shouldSkipConventionalMessageValidation(e.context)) return;
93
+ let t = this.getConventionalMessageViolation(e.parsed);
94
+ if (t !== void 0) throw Error(t);
95
+ }
96
+ buildBindings(e) {
97
+ return this.assertConventionalMessage({
98
+ context: e.context,
99
+ parsed: e.parsed
100
+ }), {
101
+ ...e.data,
102
+ context: e.context,
103
+ ...R.isProduction ? {} : { emoji: e.parsed.emoji }
104
+ };
105
+ }
106
+ getConventionalMessageViolation(e) {
107
+ let t = e.emoji, n = e.text;
108
+ if (t === void 0) return `Log message must start with an emoji naming its subject, then a verb: "${n}"`;
109
+ let r = ie.exec(n)?.[1];
110
+ if (r === void 0 || !this.isConventionalVerb(r)) return `Log message must begin with a verb in present progressive or past tense, got "${r ?? ""}": "${t} ${n}"`;
111
+ }
112
+ isConventionalVerb(e) {
113
+ let t = e.toLowerCase();
114
+ return t.endsWith("ing") || t.endsWith("ed") || ae.has(t);
115
+ }
116
+ parseMessage(e) {
117
+ let t = String(e), n = re.exec(t), r = n?.[1];
118
+ return r === void 0 ? {
119
+ emoji: void 0,
120
+ text: t
121
+ } : {
122
+ emoji: r,
123
+ text: t.slice(n?.[0].length)
124
+ };
125
+ }
126
+ shouldSkipConventionalMessageValidation(e) {
127
+ return e !== void 0 && oe.has(e);
128
+ }
129
+ static get root() {
130
+ return R.rootLogger ??= R.createRootLogger(), R.rootLogger;
131
+ }
132
+ buildErrorLogEntry(e, t) {
133
+ let n = t instanceof Error ? t.stack || t.message : String(t);
134
+ return {
135
+ errorMessage: n,
136
+ logLine: `[${(/* @__PURE__ */ new Date()).toISOString()}] ${e}: ${n}\n`
137
+ };
138
+ }
139
+ createTimestampedOutputLogFilePath(e) {
140
+ let t = A.join(process.cwd(), "output");
141
+ return O(t) || k(t, { recursive: !0 }), A.join(t, `${e}-${(/* @__PURE__ */ new Date()).toISOString().replaceAll(/[:.]/g, "-")}.log`);
142
+ }
143
+ debug(e, t, n) {
144
+ let r = this.parseMessage(e);
145
+ this.child.debug(this.buildBindings({
146
+ context: t ?? this.context,
147
+ data: n,
148
+ parsed: r
149
+ }), r.text);
150
+ }
151
+ error(e, t, n) {
152
+ let r = this.parseMessage(e), i = typeof n == "object" ? n : void 0, a = typeof n == "string" ? n : this.context;
153
+ this.child.error({
154
+ ...this.buildBindings({
155
+ context: a,
156
+ data: i,
157
+ parsed: r
158
+ }),
159
+ stack: t
160
+ }, r.text);
161
+ }
162
+ info(e, t, n) {
163
+ let r = this.parseMessage(e);
164
+ this.child.info(this.buildBindings({
165
+ context: t ?? this.context,
166
+ data: n,
167
+ parsed: r
168
+ }), r.text);
169
+ }
170
+ log(e, t, n) {
171
+ this.info(e, t, n);
172
+ }
173
+ setContext(e) {
174
+ super.setContext(e), this.child = R.root.child({ context: e });
175
+ }
176
+ verbose(e, t, n) {
177
+ let r = this.parseMessage(e);
178
+ this.child.trace(this.buildBindings({
179
+ context: t ?? this.context,
180
+ data: n,
181
+ parsed: r
182
+ }), r.text);
183
+ }
184
+ warn(e, t, n) {
185
+ let r = this.parseMessage(e);
186
+ this.child.warn(this.buildBindings({
187
+ context: t ?? this.context,
188
+ data: n,
189
+ parsed: r
190
+ }), r.text);
191
+ }
192
+ };
193
+ z = R = L([C({ scope: T.TRANSIENT }), I("design:paramtypes", [])], z);
194
+ //#endregion
195
+ //#region packages/logger/src/modules/logger/logger.module.ts
196
+ var B = class {};
197
+ B = L([ne(), w({
198
+ controllers: [],
199
+ exports: [z],
200
+ imports: [],
201
+ providers: [z]
202
+ })], B);
203
+ //#endregion
204
+ //#region packages/ic-suite/codometer/codometer-cli/src/constants.ts
205
+ var V = M.object({}), H, U = H = class extends P {
206
+ configurationService;
207
+ changesService;
208
+ documentsService;
209
+ renderService;
210
+ logger;
211
+ constructor(e, t, n, r, i) {
212
+ super(), this.configurationService = e, this.changesService = t, this.documentsService = n, this.renderService = r, this.logger = i, this.logger.setContext(H.name);
213
+ }
214
+ parseBaseline(e) {
215
+ return this.configurationService.parseOptionalOption(e);
216
+ }
217
+ parseBaselineUrl(e) {
218
+ return this.configurationService.parseOptionalOption(e);
219
+ }
220
+ parseDirectory(e) {
221
+ return this.configurationService.parseDirectoryOption(e);
222
+ }
223
+ parseMarkdown(e) {
224
+ return this.configurationService.parseOptionalOption(e);
225
+ }
226
+ parseOutput(e) {
227
+ return this.configurationService.parseOptionalOption(e);
228
+ }
229
+ async run(e, t) {
230
+ let n = this.configurationService.parseOptionalOption(t.baseline), r = this.configurationService.parseDirectoryOption(t.directory), i = this.changesService.collect({
231
+ baselineDirectory: n,
232
+ workingDirectory: r
233
+ });
234
+ this.logger.info("⏲️ Collected the codometer change report", void 0, {
235
+ failures: i.failures.length,
236
+ rows: i.rows.length
237
+ });
238
+ let a = this.renderService.renderSection({
239
+ baselineUrl: this.configurationService.parseOptionalOption(t.baselineUrl),
240
+ failures: i.failures,
241
+ rows: i.rows
242
+ });
243
+ await this.documentsService.emit({
244
+ body: a,
245
+ destination: {
246
+ markdown: this.configurationService.parseOptionalOption(t.markdown),
247
+ output: this.configurationService.parseOptionalOption(t.output)
248
+ },
249
+ label: "codometer changes",
250
+ markers: o
251
+ });
252
+ }
253
+ };
254
+ L([
255
+ F({
256
+ description: "Directory holding a baseline snapshot of the reports",
257
+ flags: "--baseline [baseline]"
258
+ }),
259
+ I("design:type", Function),
260
+ I("design:paramtypes", [Object]),
261
+ I("design:returntype", Object)
262
+ ], U.prototype, "parseBaseline", null), L([
263
+ F({
264
+ description: "Run URL the baseline came from",
265
+ flags: "--baseline-url [baselineUrl]"
266
+ }),
267
+ I("design:type", Function),
268
+ I("design:paramtypes", [Object]),
269
+ I("design:returntype", Object)
270
+ ], U.prototype, "parseBaselineUrl", null), L([
271
+ F({
272
+ description: "Directory to look for codometer reports in",
273
+ flags: "-d, --directory [directory]"
274
+ }),
275
+ I("design:type", Function),
276
+ I("design:paramtypes", [Object]),
277
+ I("design:returntype", String)
278
+ ], U.prototype, "parseDirectory", null), L([
279
+ F({
280
+ description: "Markdown document to splice the report into",
281
+ flags: "--markdown [markdown]"
282
+ }),
283
+ I("design:type", Function),
284
+ I("design:paramtypes", [Object]),
285
+ I("design:returntype", Object)
286
+ ], U.prototype, "parseMarkdown", null), L([
287
+ F({
288
+ description: "File to write the report to",
289
+ flags: "--output [output]"
290
+ }),
291
+ I("design:type", Function),
292
+ I("design:paramtypes", [Object]),
293
+ I("design:returntype", Object)
294
+ ], U.prototype, "parseOutput", null), U = H = L([
295
+ N({
296
+ description: "Report codometer's changes against a baseline",
297
+ name: "changes"
298
+ }),
299
+ C(),
300
+ I("design:paramtypes", [
301
+ t === void 0 ? Object : t,
302
+ c === void 0 ? Object : c,
303
+ h === void 0 ? Object : h,
304
+ b === void 0 ? Object : b,
305
+ z === void 0 ? Object : z
306
+ ])
307
+ ], U);
308
+ //#endregion
309
+ //#region packages/ic-suite/codometer/codometer-cli/src/modules/changes/changes.module.ts
310
+ var W = class {};
311
+ W = L([w({
312
+ controllers: [],
313
+ exports: [U],
314
+ imports: [
315
+ s,
316
+ e,
317
+ ee,
318
+ B,
319
+ y
320
+ ],
321
+ providers: [U]
322
+ })], W);
323
+ //#endregion
324
+ //#region packages/ic-suite/codometer/codometer-cli/src/modules/configuration/configuration.constants.ts
325
+ var G = ["json", "markdown"], K = "markdown", q, J = q = class extends P {
326
+ codometerConfigurationService;
327
+ configurationService;
328
+ renderConfigurationService;
329
+ logger;
330
+ constructor(e, t, n, r) {
331
+ super(), this.codometerConfigurationService = e, this.configurationService = t, this.renderConfigurationService = n, this.logger = r, this.logger.setContext(q.name);
332
+ }
333
+ parseConfig(e) {
334
+ return e;
335
+ }
336
+ parseDirectory(e) {
337
+ return this.codometerConfigurationService.parseDirectoryOption(e);
338
+ }
339
+ parseFormat(e) {
340
+ return this.codometerConfigurationService.parseDefaultedOption(e, K);
341
+ }
342
+ parseLimits() {
343
+ return !0;
344
+ }
345
+ async run(e, t = {}) {
346
+ let n = t.format ?? "markdown";
347
+ if (!G.includes(n)) throw Error(`--format does not accept "${n}". It takes one of ${G.join(" and ")}.`);
348
+ let r = A.resolve(t.directory ?? process.cwd()), { described: i, rootError: a } = await this.configurationService.describeConfigurations({
349
+ configurationPath: t.config,
350
+ workingDirectory: r
351
+ });
352
+ this.logger.info("🔧 Listed the codometer configuration", void 0, {
353
+ configurationCount: i.length,
354
+ unreadableCount: i.filter((e) => e.error !== void 0).length
355
+ }), a !== void 0 && (this.logger.error("🔧 Found no configuration answering for the walk root", void 0, { reason: a }), process.exitCode = 1);
356
+ let o = this.renderConfigurationService.render({
357
+ described: i,
358
+ format: n,
359
+ limitRows: this.configurationService.toLimitRows(i),
360
+ limitsOnly: t.limits === !0,
361
+ rootError: a
362
+ });
363
+ process.stdout.write(`${o}\n`);
364
+ }
365
+ };
366
+ L([
367
+ F({
368
+ description: "Path to the configuration file answering for the directory being listed",
369
+ flags: "--config [config]"
370
+ }),
371
+ I("design:type", Function),
372
+ I("design:paramtypes", [Object]),
373
+ I("design:returntype", Object)
374
+ ], J.prototype, "parseConfig", null), L([
375
+ F({
376
+ description: "Directory to look for configuration files beneath",
377
+ flags: "-d, --directory [directory]"
378
+ }),
379
+ I("design:type", Function),
380
+ I("design:paramtypes", [Object]),
381
+ I("design:returntype", String)
382
+ ], J.prototype, "parseDirectory", null), L([
383
+ F({
384
+ description: `Output format, one of ${G.join(", ")}`,
385
+ flags: "-f, --format [format]"
386
+ }),
387
+ I("design:type", Function),
388
+ I("design:paramtypes", [Object]),
389
+ I("design:returntype", String)
390
+ ], J.prototype, "parseFormat", null), L([
391
+ F({
392
+ description: "List only the configured limits",
393
+ flags: "--limits"
394
+ }),
395
+ I("design:type", Function),
396
+ I("design:paramtypes", []),
397
+ I("design:returntype", Boolean)
398
+ ], J.prototype, "parseLimits", null), J = q = L([
399
+ N({
400
+ description: "List the codometer configuration found beneath a directory",
401
+ name: "configuration"
402
+ }),
403
+ C(),
404
+ I("design:paramtypes", [
405
+ t === void 0 ? Object : t,
406
+ u === void 0 ? Object : u,
407
+ v === void 0 ? Object : v,
408
+ z === void 0 ? Object : z
409
+ ])
410
+ ], J);
411
+ //#endregion
412
+ //#region packages/ic-suite/codometer/codometer-cli/src/modules/configuration/configuration.module.ts
413
+ var Y = class {};
414
+ Y = L([w({
415
+ controllers: [],
416
+ exports: [J],
417
+ imports: [e, l],
418
+ providers: [J]
419
+ })], Y);
420
+ //#endregion
421
+ //#region packages/ic-suite/codometer/codometer-cli/src/modules/measure/measure.command.ts
422
+ var X, Z = X = class extends P {
423
+ configurationService;
424
+ measureService;
425
+ deliveryService;
426
+ reportService;
427
+ destinationsService;
428
+ logger;
429
+ constructor(e, t, n, r, i, a) {
430
+ super(), this.configurationService = e, this.measureService = t, this.deliveryService = n, this.reportService = r, this.destinationsService = i, this.logger = a, this.logger.setContext(X.name);
431
+ }
432
+ announceOutputPaths(e) {
433
+ e.length !== 0 && this.logger.info("📊 Excluded the files codometer writes from what it measures", void 0, { paths: e });
434
+ }
435
+ applyInputsOverride(e, t) {
436
+ return t === void 0 ? e : {
437
+ ...e,
438
+ inputs: [{
439
+ analyses: ["language"],
440
+ compression: "none",
441
+ directory: ".",
442
+ exclude: [],
443
+ include: t,
444
+ name: "Command Line"
445
+ }]
446
+ };
447
+ }
448
+ async readConfiguration(e, t) {
449
+ try {
450
+ let n = await this.configurationService.loadConfiguration({
451
+ configurationPath: e.config,
452
+ searchDirectory: t
453
+ });
454
+ return this.logger.debug("🗂️ Loaded the configuration", void 0, { configuredPath: e.config }), n;
455
+ } catch (e) {
456
+ this.logger.error("📊 Rejected the configuration", void 0, { reason: e instanceof Error ? e.message : String(e) }), process.exitCode = 1;
457
+ return;
458
+ }
459
+ }
460
+ rejectCommandLine(e) {
461
+ this.logger.error("📊 Rejected the command line", void 0, { reasons: e }), process.exitCode = 1;
462
+ }
463
+ reportBreaches(e) {
464
+ let t = e.measurement.limits.filter((e) => e.breached), n = t.filter((e) => e.severity === "fail"), r = t.filter((e) => e.severity === "warn");
465
+ return r.length > 0 && this.logger.warn("📊 Breached a warning limit", void 0, { limits: r }), n.length > 0 && this.logger.error("📊 Breached a failing limit", void 0, { limits: n }), e.mode.checksLimits && n.length > 0;
466
+ }
467
+ reportFailures(e) {
468
+ return e.measurement.failures.length !== 0 && (this.logger.error("📊 Failed to measure part of the run", void 0, { failures: e.measurement.failures }), e.mode.checksLimits || e.mode.checksReports || e.mode.writesJson || e.mode.writesMarkdown);
469
+ }
470
+ reportFindings(e) {
471
+ let t = this.reportFailures(e), n = this.reportStaleness(e), r = this.reportBreaches(e);
472
+ (t || n || r) && (process.exitCode = 1), this.logger.info("✅ Finished the measurement run", void 0, {
473
+ breachCount: e.measurement.limits.filter((e) => e.breached).length,
474
+ inputCount: e.measurement.inputs.length
475
+ });
476
+ }
477
+ reportStaleness(e) {
478
+ return e.stalePaths.length !== 0 && (this.logger.error("📊 Found stale reports", void 0, { paths: e.stalePaths }), !0);
479
+ }
480
+ async resolveRunPlan(e, t) {
481
+ let { errors: n, mode: r } = this.configurationService.selectMode(e);
482
+ if (n.length > 0) {
483
+ this.rejectCommandLine(n);
484
+ return;
485
+ }
486
+ let i = await this.readConfiguration(e, t);
487
+ if (i === void 0) return;
488
+ let a = this.applyInputsOverride(i, e.inputs), o = [], s = this.configurationService.resolveFormat(e.format, a.format, o), { destinations: c, errors: l } = this.destinationsService.resolveDestinations({
489
+ configuration: a,
490
+ options: e,
491
+ workingDirectory: t
492
+ });
493
+ if (o.length > 0 || l.length > 0) {
494
+ this.rejectCommandLine([...o, ...l]);
495
+ return;
496
+ }
497
+ return {
498
+ configuration: a,
499
+ consoleMarkdown: this.destinationsService.resolveConsoleMarkdown({
500
+ configuration: a,
501
+ options: e,
502
+ workingDirectory: t
503
+ }),
504
+ destinations: c,
505
+ format: s,
506
+ mode: r
507
+ };
508
+ }
509
+ resolveWorkingDirectory() {
510
+ let e = A.resolve(process.cwd());
511
+ return this.logger.debug("🚀 Started the measurement run", void 0, { directory: e }), e;
512
+ }
513
+ parseCheck(e) {
514
+ return e;
515
+ }
516
+ parseConfig(e) {
517
+ return e;
518
+ }
519
+ parseFormat(e) {
520
+ return e;
521
+ }
522
+ parseInputs(e, t = []) {
523
+ return [...t, e];
524
+ }
525
+ parseOutputJson(e) {
526
+ return e;
527
+ }
528
+ parseOutputMarkdown(e) {
529
+ return e;
530
+ }
531
+ async run(e, t) {
532
+ let n = this.resolveWorkingDirectory(), r = await this.resolveRunPlan(t, n);
533
+ if (r === void 0) return;
534
+ let { configuration: i, consoleMarkdown: a, destinations: o, format: s, mode: c } = r, l = this.destinationsService.listOutputPaths({
535
+ destinations: o,
536
+ workingDirectory: n
537
+ });
538
+ this.announceOutputPaths(l);
539
+ let u = this.measureService.measure({
540
+ configuration: i,
541
+ outputPaths: l,
542
+ workingDirectory: n
543
+ }), d = this.reportService.build(u), f = this.deliveryService.deliver({
544
+ consoleMarkdown: a,
545
+ destinations: o,
546
+ format: s,
547
+ measurement: u,
548
+ mode: c,
549
+ report: d,
550
+ scope: this.destinationsService.selectScope(n)
551
+ });
552
+ this.reportFindings({
553
+ measurement: u,
554
+ mode: c,
555
+ stalePaths: f
556
+ });
557
+ }
558
+ };
559
+ L([
560
+ F({
561
+ description: "Fail on a comma-separated set drawn from \"reports\" and \"limits\"",
562
+ flags: "--check [check]"
563
+ }),
564
+ I("design:type", Function),
565
+ I("design:paramtypes", [String]),
566
+ I("design:returntype", String)
567
+ ], Z.prototype, "parseCheck", null), L([
568
+ F({
569
+ description: "Path to the codometer configuration file",
570
+ flags: "--config [config]"
571
+ }),
572
+ I("design:type", Function),
573
+ I("design:paramtypes", [Object]),
574
+ I("design:returntype", Object)
575
+ ], Z.prototype, "parseConfig", null), L([
576
+ F({
577
+ description: `What to print to standard output, one of ${n.join(" and ")}`,
578
+ flags: "-f, --format <format>"
579
+ }),
580
+ I("design:type", Function),
581
+ I("design:paramtypes", [String]),
582
+ I("design:returntype", String)
583
+ ], Z.prototype, "parseFormat", null), L([
584
+ F({
585
+ description: "Glob array measured in place of every configured input, with no configured input — not even the built-in codebase one — active",
586
+ flags: "--inputs [globs...]"
587
+ }),
588
+ I("design:type", Function),
589
+ I("design:paramtypes", [String, Array]),
590
+ I("design:returntype", Array)
591
+ ], Z.prototype, "parseInputs", null), L([
592
+ F({
593
+ description: "Write the JSON report, at the given path or the configured one",
594
+ flags: "--output-json [outputJson]"
595
+ }),
596
+ I("design:type", Function),
597
+ I("design:paramtypes", [Object]),
598
+ I("design:returntype", Object)
599
+ ], Z.prototype, "parseOutputJson", null), L([
600
+ F({
601
+ description: "Write the markdown badge block, at the given path or the configured one",
602
+ flags: "--output-markdown [outputMarkdown]"
603
+ }),
604
+ I("design:type", Function),
605
+ I("design:paramtypes", [Object]),
606
+ I("design:returntype", Object)
607
+ ], Z.prototype, "parseOutputMarkdown", null), Z = X = L([
608
+ N({
609
+ description: "Measure a directory and produce every resolved output",
610
+ name: "measure"
611
+ }),
612
+ C(),
613
+ I("design:paramtypes", [
614
+ t === void 0 ? Object : t,
615
+ a === void 0 ? Object : a,
616
+ f === void 0 ? Object : f,
617
+ S === void 0 ? Object : S,
618
+ m === void 0 ? Object : m,
619
+ z === void 0 ? Object : z
620
+ ])
621
+ ], Z);
622
+ //#endregion
623
+ //#region packages/ic-suite/codometer/codometer-cli/src/modules/measure/measure.module.ts
624
+ var Q = class {};
625
+ Q = L([w({
626
+ controllers: [],
627
+ exports: [Z],
628
+ imports: [
629
+ i,
630
+ e,
631
+ d,
632
+ p,
633
+ B,
634
+ x
635
+ ],
636
+ providers: [Z]
637
+ })], Q);
638
+ //#endregion
639
+ //#region packages/ic-suite/codometer/codometer-cli/src/main.module.ts
640
+ var $ = class {};
641
+ $ = L([w({ imports: [
642
+ E.forRoot({
643
+ envFilePath: ".env",
644
+ isGlobal: !0,
645
+ validate: (e) => V.parse(e)
646
+ }),
647
+ D,
648
+ B,
649
+ W,
650
+ Y,
651
+ Q,
652
+ r,
653
+ e,
654
+ g,
655
+ _
656
+ ] })], $);
657
+ //#endregion
658
+ export { J as a, z as c, Y as i, Q as n, W as o, Z as r, U as s, $ as t };