optiprune 1.0.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 (57) hide show
  1. package/LICENSE +7 -0
  2. package/README.md +49 -0
  3. package/dist/cache.d.ts +14 -0
  4. package/dist/cache.js +36 -0
  5. package/dist/cache.js.map +1 -0
  6. package/dist/cli.d.ts +2 -0
  7. package/dist/cli.js +53 -0
  8. package/dist/cli.js.map +1 -0
  9. package/dist/config-loader.d.ts +4 -0
  10. package/dist/config-loader.js +68 -0
  11. package/dist/config-loader.js.map +1 -0
  12. package/dist/coverage-tracker.d.ts +39 -0
  13. package/dist/coverage-tracker.js +61 -0
  14. package/dist/coverage-tracker.js.map +1 -0
  15. package/dist/fs-utils.d.ts +33 -0
  16. package/dist/fs-utils.js +334 -0
  17. package/dist/fs-utils.js.map +1 -0
  18. package/dist/graph.d.ts +28 -0
  19. package/dist/graph.js +331 -0
  20. package/dist/graph.js.map +1 -0
  21. package/dist/index.d.ts +3 -0
  22. package/dist/index.js +313 -0
  23. package/dist/index.js.map +1 -0
  24. package/dist/instrument.d.ts +1 -0
  25. package/dist/instrument.js +20 -0
  26. package/dist/instrument.js.map +1 -0
  27. package/dist/instrumentation-plugin.d.ts +6 -0
  28. package/dist/instrumentation-plugin.js +84 -0
  29. package/dist/instrumentation-plugin.js.map +1 -0
  30. package/dist/layer2.d.ts +6 -0
  31. package/dist/layer2.js +227 -0
  32. package/dist/layer2.js.map +1 -0
  33. package/dist/layer3.d.ts +7 -0
  34. package/dist/layer3.js +244 -0
  35. package/dist/layer3.js.map +1 -0
  36. package/dist/layer4.d.ts +7 -0
  37. package/dist/layer4.js +90 -0
  38. package/dist/layer4.js.map +1 -0
  39. package/dist/layer5.d.ts +6 -0
  40. package/dist/layer5.js +141 -0
  41. package/dist/layer5.js.map +1 -0
  42. package/dist/layer6.d.ts +25 -0
  43. package/dist/layer6.js +183 -0
  44. package/dist/layer6.js.map +1 -0
  45. package/dist/parser.d.ts +24 -0
  46. package/dist/parser.js +481 -0
  47. package/dist/parser.js.map +1 -0
  48. package/dist/reporters.d.ts +3 -0
  49. package/dist/reporters.js +75 -0
  50. package/dist/reporters.js.map +1 -0
  51. package/dist/types.d.ts +205 -0
  52. package/dist/types.js +11 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/workspace.d.ts +6 -0
  55. package/dist/workspace.js +114 -0
  56. package/dist/workspace.js.map +1 -0
  57. package/package.json +112 -0
package/dist/parser.js ADDED
@@ -0,0 +1,481 @@
1
+ import { parse } from "@babel/parser";
2
+ function isNode(value) {
3
+ return value !== null && typeof value === "object" && typeof value.type === "string";
4
+ }
5
+ function asArray(value) {
6
+ return Array.isArray(value) ? value : [];
7
+ }
8
+ function positionRange(node) {
9
+ const start = node?.loc?.start;
10
+ const end = node?.loc?.end;
11
+ if (!start || !end) {
12
+ return undefined;
13
+ }
14
+ return {
15
+ start: { line: start.line, column: start.column },
16
+ end: { line: end.line, column: end.column },
17
+ };
18
+ }
19
+ function locationAtOffset(source, offset) {
20
+ const before = source.slice(0, Math.max(0, offset));
21
+ const line = before.split("\n").length;
22
+ const lastNewline = before.lastIndexOf("\n");
23
+ const column = lastNewline === -1 ? before.length : before.length - lastNewline - 1;
24
+ return {
25
+ start: { line, column },
26
+ end: { line, column: column + 1 },
27
+ };
28
+ }
29
+ function nodeStringValue(node) {
30
+ if (!isNode(node)) {
31
+ return undefined;
32
+ }
33
+ if ((node.type === "StringLiteral" || node.type === "Literal") && typeof node.value === "string") {
34
+ return node.value;
35
+ }
36
+ return undefined;
37
+ }
38
+ function nodeIdentifierName(node) {
39
+ if (!isNode(node)) {
40
+ return undefined;
41
+ }
42
+ if (node.type === "Identifier" && typeof node.name === "string") {
43
+ return node.name;
44
+ }
45
+ return undefined;
46
+ }
47
+ function propertyKeyName(node) {
48
+ if (!isNode(node)) {
49
+ return undefined;
50
+ }
51
+ if (node.type === "Identifier" && typeof node.name === "string") {
52
+ return node.name;
53
+ }
54
+ if ((node.type === "StringLiteral" || node.type === "NumericLiteral" || node.type === "Literal") && node.value !== undefined) {
55
+ return String(node.value);
56
+ }
57
+ return undefined;
58
+ }
59
+ function bindingNames(node) {
60
+ if (!isNode(node)) {
61
+ return [];
62
+ }
63
+ if (node.type === "Identifier") {
64
+ return typeof node.name === "string" ? [node.name] : [];
65
+ }
66
+ if (node.type === "ObjectPattern") {
67
+ return asArray(node.properties).flatMap((property) => {
68
+ if (!isNode(property)) {
69
+ return [];
70
+ }
71
+ if (property.type === "RestElement") {
72
+ return bindingNames(property.argument);
73
+ }
74
+ return bindingNames(property.value);
75
+ });
76
+ }
77
+ if (node.type === "ArrayPattern") {
78
+ return asArray(node.elements).flatMap((element) => bindingNames(element));
79
+ }
80
+ if (node.type === "RestElement" || node.type === "AssignmentPattern") {
81
+ return bindingNames(node.left ?? node.argument);
82
+ }
83
+ return [];
84
+ }
85
+ function addExport(exportsList, exportedAs, node, options = {}) {
86
+ const candidate = {
87
+ name: options.name ?? exportedAs,
88
+ exportedAs,
89
+ isDefault: options.isDefault ?? false,
90
+ isReExport: options.isReExport ?? false,
91
+ isWildcard: options.isWildcard ?? false,
92
+ isTypeOnly: options.isTypeOnly ?? false,
93
+ };
94
+ const location = positionRange(node);
95
+ if (location) {
96
+ candidate.location = location;
97
+ }
98
+ if (!exportsList.some((item) => item.exportedAs === candidate.exportedAs && item.name === candidate.name)) {
99
+ exportsList.push(candidate);
100
+ }
101
+ }
102
+ function addEdge(edges, sourceFile, rawSpecifier, kind, node, importedNames = [], isTypeOnly = false) {
103
+ const edge = {
104
+ source: sourceFile,
105
+ rawSpecifier,
106
+ kind,
107
+ importedNames,
108
+ resolution: "unknown",
109
+ isTypeOnly,
110
+ };
111
+ const location = positionRange(node);
112
+ if (location) {
113
+ edge.location = location;
114
+ }
115
+ edges.push(edge);
116
+ }
117
+ function importSpecifierNames(specifiers) {
118
+ const names = [];
119
+ for (const specifier of specifiers) {
120
+ if (!isNode(specifier)) {
121
+ continue;
122
+ }
123
+ if (specifier.type === "ImportDefaultSpecifier") {
124
+ names.push("default");
125
+ }
126
+ else if (specifier.type === "ImportNamespaceSpecifier") {
127
+ names.push("*");
128
+ }
129
+ else if (specifier.type === "ImportSpecifier") {
130
+ names.push(propertyKeyName(specifier.imported) ?? "*");
131
+ }
132
+ }
133
+ return names;
134
+ }
135
+ function exportSpecifierNames(specifiers) {
136
+ const names = [];
137
+ for (const specifier of specifiers) {
138
+ if (isNode(specifier)) {
139
+ names.push(propertyKeyName(specifier.exported) ?? "*");
140
+ }
141
+ }
142
+ return names;
143
+ }
144
+ function isRequireCall(node) {
145
+ return node.type === "CallExpression" && nodeIdentifierName(node.callee) === "require";
146
+ }
147
+ function isDynamicImportCall(node) {
148
+ return (node.type === "ImportExpression" ||
149
+ (node.type === "CallExpression" && isNode(node.callee) && node.callee.type === "Import"));
150
+ }
151
+ function dynamicArgument(node) {
152
+ if (node.type === "ImportExpression") {
153
+ return node.source;
154
+ }
155
+ return asArray(node.arguments)[0];
156
+ }
157
+ function templateParts(node) {
158
+ if (!isNode(node) || node.type !== "TemplateLiteral") {
159
+ return undefined;
160
+ }
161
+ const expressions = asArray(node.expressions);
162
+ const quasis = asArray(node.quasis);
163
+ if (expressions.length === 0 || quasis.length < 2) {
164
+ return undefined;
165
+ }
166
+ const first = quasis[0];
167
+ const last = quasis[quasis.length - 1];
168
+ const firstValue = isNode(first) && isNode(first.value) && typeof first.value.cooked === "string" ? first.value.cooked : "";
169
+ const lastValue = isNode(last) && isNode(last.value) && typeof last.value.cooked === "string" ? last.value.cooked : "";
170
+ return { prefix: firstValue, suffix: lastValue };
171
+ }
172
+ function walk(node, visitor) {
173
+ if (Array.isArray(node)) {
174
+ for (const item of node) {
175
+ walk(item, visitor);
176
+ }
177
+ return;
178
+ }
179
+ if (!isNode(node)) {
180
+ return;
181
+ }
182
+ visitor(node);
183
+ for (const [key, value] of Object.entries(node)) {
184
+ if (key === "loc" ||
185
+ key === "start" ||
186
+ key === "end" ||
187
+ key === "tokens" ||
188
+ key === "comments" ||
189
+ key === "errors" ||
190
+ key === "extra") {
191
+ continue;
192
+ }
193
+ if (Array.isArray(value) || isNode(value)) {
194
+ walk(value, visitor);
195
+ }
196
+ }
197
+ }
198
+ function extractAstModule(sourceText, file, ast, parserErrors) {
199
+ const exportsList = [];
200
+ const edges = [];
201
+ const parseDiagnostics = parserErrors.map((error) => {
202
+ const candidate = error;
203
+ const diagnostic = {
204
+ message: typeof candidate.message === "string" ? candidate.message : "Recoverable parser error",
205
+ file,
206
+ recovered: true,
207
+ };
208
+ if (typeof candidate.loc?.line === "number" && typeof candidate.loc?.column === "number") {
209
+ diagnostic.location = {
210
+ start: { line: candidate.loc.line, column: candidate.loc.column },
211
+ end: { line: candidate.loc.line, column: candidate.loc.column + 1 },
212
+ };
213
+ }
214
+ return diagnostic;
215
+ });
216
+ let hasUnknownDynamicBoundary = false;
217
+ let hasUnresolvedCommonJsExports = false;
218
+ walk(ast, (node) => {
219
+ if (node.type === "ImportDeclaration") {
220
+ const specifier = nodeStringValue(node.source);
221
+ if (specifier) {
222
+ const isTypeOnly = node.importKind === "type";
223
+ addEdge(edges, file, specifier, "import", node, importSpecifierNames(asArray(node.specifiers)), isTypeOnly);
224
+ }
225
+ return;
226
+ }
227
+ if (node.type === "ExportNamedDeclaration") {
228
+ const specifier = nodeStringValue(node.source);
229
+ if (specifier) {
230
+ const names = exportSpecifierNames(asArray(node.specifiers));
231
+ const isTypeOnly = node.exportKind === "type";
232
+ addEdge(edges, file, specifier, "export-from", node, names, isTypeOnly);
233
+ for (const exportedName of names) {
234
+ addExport(exportsList, exportedName, node, { name: exportedName, isReExport: true, isTypeOnly: node.exportKind === "type" });
235
+ }
236
+ }
237
+ else if (isNode(node.declaration)) {
238
+ const declaration = node.declaration;
239
+ if ((declaration.type === "FunctionDeclaration" || declaration.type === "ClassDeclaration" || declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || declaration.type === "TSEnumDeclaration") && nodeIdentifierName(declaration.id)) {
240
+ const isType = declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || node.exportKind === "type";
241
+ addExport(exportsList, nodeIdentifierName(declaration.id) ?? "unknown", node, { isTypeOnly: isType });
242
+ }
243
+ else if (declaration.type === "VariableDeclaration") {
244
+ for (const declarator of asArray(declaration.declarations)) {
245
+ if (isNode(declarator)) {
246
+ for (const name of bindingNames(declarator.id)) {
247
+ addExport(exportsList, name, node, { isTypeOnly: node.exportKind === "type" });
248
+ }
249
+ }
250
+ }
251
+ }
252
+ }
253
+ else {
254
+ for (const exportedName of exportSpecifierNames(asArray(node.specifiers))) {
255
+ addExport(exportsList, exportedName, node, { isTypeOnly: node.exportKind === "type" });
256
+ }
257
+ }
258
+ return;
259
+ }
260
+ if (node.type === "ExportDefaultDeclaration") {
261
+ addExport(exportsList, "default", node, { name: "default", isDefault: true, isTypeOnly: node.exportKind === "type" });
262
+ return;
263
+ }
264
+ if (node.type === "ExportAllDeclaration") {
265
+ const specifier = nodeStringValue(node.source);
266
+ if (specifier) {
267
+ addEdge(edges, file, specifier, "export-all", node, ["*"], node.exportKind === "type");
268
+ addExport(exportsList, "*", node, { name: "*", isReExport: true, isWildcard: true, isTypeOnly: node.exportKind === "type" });
269
+ }
270
+ return;
271
+ }
272
+ if (isRequireCall(node)) {
273
+ const specifier = nodeStringValue(asArray(node.arguments)[0]);
274
+ if (specifier) {
275
+ addEdge(edges, file, specifier, "require", node, ["*"]);
276
+ }
277
+ else {
278
+ hasUnknownDynamicBoundary = true;
279
+ }
280
+ return;
281
+ }
282
+ if (isDynamicImportCall(node)) {
283
+ const argument = dynamicArgument(node);
284
+ const literal = nodeStringValue(argument);
285
+ if (literal) {
286
+ addEdge(edges, file, literal, "dynamic-literal", node, ["*"]);
287
+ }
288
+ else {
289
+ const parts = templateParts(argument);
290
+ if (parts) {
291
+ addEdge(edges, file, `${parts.prefix}${"${…}"}${parts.suffix}`, "dynamic-pattern", node, ["*"]);
292
+ }
293
+ else {
294
+ hasUnknownDynamicBoundary = true;
295
+ addEdge(edges, file, "<unknown dynamic import>", "unknown-dynamic", node, ["*"]);
296
+ }
297
+ }
298
+ return;
299
+ }
300
+ if (node.type === "AssignmentExpression" && isNode(node.left) && node.left.type === "MemberExpression") {
301
+ const objectName = nodeIdentifierName(node.left.object);
302
+ const property = node.left.computed ? propertyKeyName(node.left.property) : nodeIdentifierName(node.left.property);
303
+ if (objectName === "exports" && property) {
304
+ addExport(exportsList, property, node);
305
+ }
306
+ else if (objectName === "exports") {
307
+ // This means `exports = ...` or `exports[dynamicKey] = ...`
308
+ hasUnresolvedCommonJsExports = true;
309
+ }
310
+ else if (objectName === "module" && property === "exports") {
311
+ // This means `module.exports = ...`
312
+ hasUnresolvedCommonJsExports = true;
313
+ }
314
+ else if (isNode(node.left.object) && node.left.object.type === "MemberExpression") {
315
+ const moduleName = nodeIdentifierName(node.left.object.object);
316
+ const moduleProperty = nodeIdentifierName(node.left.object.property);
317
+ if (moduleName === "module" && moduleProperty === "exports" && property) {
318
+ // This means `module.exports.foo = ...`
319
+ addExport(exportsList, property, node);
320
+ }
321
+ }
322
+ else if (node.left.name === "exports") {
323
+ // This handles `exports = { ... }`
324
+ hasUnresolvedCommonJsExports = true;
325
+ }
326
+ }
327
+ });
328
+ const module = {
329
+ id: file,
330
+ relativePath: file,
331
+ parseStatus: parserErrors.length > 0 ? "recovered" : "parsed",
332
+ parseDiagnostics,
333
+ ast,
334
+ sourceText,
335
+ exports: exportsList,
336
+ edges,
337
+ hasUnknownDynamicBoundary,
338
+ hasUnresolvedCommonJsExports,
339
+ };
340
+ return module;
341
+ }
342
+ function fallbackExports(sourceText, file) {
343
+ const found = [];
344
+ const regex = /\bexport\s+(?:async\s+)?(?:function|class|const|let|var)\s+([A-Za-z_$][\w$]*)|\bexport\s+default\b|\bexport\s*\{([^}]+)\}/g;
345
+ for (const match of sourceText.matchAll(regex)) {
346
+ const location = locationAtOffset(sourceText, match.index ?? 0);
347
+ if (match[1]) {
348
+ found.push({ name: match[1], exportedAs: match[1], isDefault: false, isReExport: false, isWildcard: false, location });
349
+ }
350
+ else if (match[0].includes("export default")) {
351
+ found.push({ name: "default", exportedAs: "default", isDefault: true, isReExport: false, isWildcard: false, location });
352
+ }
353
+ else if (match[2]) {
354
+ for (const part of match[2].split(",")) {
355
+ const exportedAs = part.trim().split(/\s+as\s+/i).at(-1)?.trim();
356
+ if (exportedAs) {
357
+ found.push({ name: exportedAs, exportedAs, isDefault: exportedAs === "default", isReExport: false, isWildcard: false, location });
358
+ }
359
+ }
360
+ }
361
+ }
362
+ return found;
363
+ }
364
+ function fallbackEdges(sourceText, file) {
365
+ const edges = [];
366
+ const patterns = [
367
+ { regex: /\bimport\s+(?:[\w*$\s{},]+\s+from\s+)?["']([^"'\n]+)["']/g, kind: "import" },
368
+ { regex: /\bexport\s+(?:\*|\{[^}]*\})\s+from\s+["']([^"'\n]+)["']/g, kind: "export-from" },
369
+ { regex: /\brequire\s*\(\s*["']([^"'\n]+)["']\s*\)/g, kind: "require" },
370
+ { regex: /\bimport\s*\(\s*["']([^"'\n]+)["']\s*\)/g, kind: "dynamic-literal" },
371
+ ];
372
+ for (const { regex, kind } of patterns) {
373
+ for (const match of sourceText.matchAll(regex)) {
374
+ const edge = {
375
+ source: file,
376
+ rawSpecifier: match[1] ?? "<unknown>",
377
+ kind,
378
+ importedNames: ["*"],
379
+ resolution: "unknown",
380
+ location: locationAtOffset(sourceText, match.index ?? 0),
381
+ };
382
+ edges.push(edge);
383
+ }
384
+ }
385
+ for (const match of sourceText.matchAll(/\bimport\s*\(\s*`([^`]*)`\s*\)/g)) {
386
+ const raw = match[1] ?? "";
387
+ const expressionIndex = raw.indexOf("${");
388
+ const closeIndex = raw.lastIndexOf("}");
389
+ if (expressionIndex >= 0 && closeIndex > expressionIndex) {
390
+ edges.push({
391
+ source: file,
392
+ rawSpecifier: `${raw.slice(0, expressionIndex)}${"${…}"}${raw.slice(closeIndex + 1)}`,
393
+ kind: "dynamic-pattern",
394
+ importedNames: ["*"],
395
+ resolution: "unknown",
396
+ location: locationAtOffset(sourceText, match.index ?? 0),
397
+ });
398
+ }
399
+ }
400
+ return edges;
401
+ }
402
+ function fallbackModule(sourceText, file, reason) {
403
+ const message = reason instanceof Error ? reason.message : "Parser could not recover this file";
404
+ return {
405
+ id: file,
406
+ relativePath: file,
407
+ parseStatus: "fallback",
408
+ parseDiagnostics: [
409
+ {
410
+ message,
411
+ file,
412
+ recovered: false,
413
+ },
414
+ ],
415
+ sourceText,
416
+ exports: fallbackExports(sourceText, file),
417
+ edges: fallbackEdges(sourceText, file),
418
+ hasUnknownDynamicBoundary: /\b(?:import|require)\s*\(\s*(?!["'`])/.test(sourceText),
419
+ hasUnresolvedCommonJsExports: /\bmodule\.exports\s*=|\bexports\s*\[/.test(sourceText),
420
+ };
421
+ }
422
+ /**
423
+ * Parse a module without executing it. Recoverable Babel diagnostics retain AST analysis;
424
+ * unrecoverable input uses a lexical fallback so a bad file cannot sever graph traversal.
425
+ */
426
+ export function parseModule(sourceText, file) {
427
+ try {
428
+ const parsed = parse(sourceText, {
429
+ sourceType: "unambiguous",
430
+ errorRecovery: true,
431
+ attachComment: true,
432
+ allowReturnOutsideFunction: true,
433
+ allowAwaitOutsideFunction: true,
434
+ plugins: [
435
+ "typescript",
436
+ "jsx",
437
+ ["decorators", { decoratorsBeforeExport: true }],
438
+ "classProperties",
439
+ "classPrivateProperties",
440
+ "classPrivateMethods",
441
+ "topLevelAwait",
442
+ "dynamicImport",
443
+ "importMeta",
444
+ "optionalChaining",
445
+ "nullishCoalescingOperator",
446
+ "objectRestSpread",
447
+ "numericSeparator",
448
+ "logicalAssignment",
449
+ "asyncGenerators",
450
+ "exportDefaultFrom",
451
+ "exportNamespaceFrom",
452
+ ],
453
+ });
454
+ return extractAstModule(sourceText, file, parsed, Array.isArray(parsed.errors) ? parsed.errors : []);
455
+ }
456
+ catch (error) {
457
+ return fallbackModule(sourceText, file, error);
458
+ }
459
+ }
460
+ export function getNodeRange(node) {
461
+ return isNode(node) ? positionRange(node) : undefined;
462
+ }
463
+ export function getNodeType(node) {
464
+ return isNode(node) ? node.type : undefined;
465
+ }
466
+ export function getNodeProperty(node, property) {
467
+ return isNode(node) ? node[property] : undefined;
468
+ }
469
+ export function getStringLiteral(node) {
470
+ return nodeStringValue(node);
471
+ }
472
+ export function getIdentifier(node) {
473
+ return nodeIdentifierName(node);
474
+ }
475
+ export function isAstNode(node) {
476
+ return isNode(node);
477
+ }
478
+ export function walkAst(node, visitor) {
479
+ walk(node, visitor);
480
+ }
481
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAqBtC,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAQ,KAAiB,CAAC,IAAI,KAAK,QAAQ,CAAC;AACpG,CAAC;AAED,SAAS,OAAO,CAAC,KAAc;IAC7B,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;AAC3C,CAAC;AAED,SAAS,aAAa,CAAC,IAAyB;IAC9C,MAAM,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC;IAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;QACnB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,OAAO;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;QACjD,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,MAAc,EAAE,MAAc;IACtD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC7C,MAAM,MAAM,GAAG,WAAW,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC;IACpF,OAAO;QACL,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE;QACvB,GAAG,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,CAAC,EAAE;KAClC,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;QACjG,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAa;IACvC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAChE,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,eAAe,IAAI,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;QAC7H,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,IAAa;IACjC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QAC/B,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;YACnD,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACtB,OAAO,EAAE,CAAC;YACZ,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;gBACpC,OAAO,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACzC,CAAC;YACD,OAAO,YAAY,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;IAC5E,CAAC;IACD,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;QACrE,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,SAAS,SAAS,CAChB,WAA2B,EAC3B,UAAkB,EAClB,IAAa,EACb,UAA0G,EAAE;IAE5G,MAAM,SAAS,GAAiB;QAC9B,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,UAAU;QAChC,UAAU;QACV,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK;QACrC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;QACvC,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,KAAK;KACxC,CAAC;IACF,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,SAAS,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAChC,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1G,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,SAAS,OAAO,CACd,KAAuB,EACvB,UAAkB,EAClB,YAAoB,EACpB,IAA4B,EAC5B,IAAa,EACb,gBAA0B,EAAE,EAC5B,aAAsB,KAAK;IAE3B,MAAM,IAAI,GAAmB;QAC3B,MAAM,EAAE,UAAU;QAClB,YAAY;QACZ,IAAI;QACJ,aAAa;QACb,UAAU,EAAE,SAAS;QACrB,UAAU;KACX,CAAC;IACF,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IACrC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC3B,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAqB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACvB,SAAS;QACX,CAAC;QACD,IAAI,SAAS,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxB,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;aAAM,IAAI,SAAS,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;YAChD,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,oBAAoB,CAAC,UAAqB;IACjD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,IAAI,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC;YACtB,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,OAAO,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,SAAS,CAAC;AACzF,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAa;IACxC,OAAO,CACL,IAAI,CAAC,IAAI,KAAK,kBAAkB;QAChC,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAa;IACpC,IAAI,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,aAAa,CAAC,IAAa;IAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,KAAK,iBAAiB,EAAE,CAAC;QACrD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,OAAO,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5H,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IACvH,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC;AACnD,CAAC;AAED,SAAS,IAAI,CAAC,IAAa,EAAE,OAAgC;IAC3D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE,CAAC;YACxB,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QACtB,CAAC;QACD,OAAO;IACT,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QAClB,OAAO;IACT,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC;IACd,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QAChD,IACE,GAAG,KAAK,KAAK;YACb,GAAG,KAAK,OAAO;YACf,GAAG,KAAK,KAAK;YACb,GAAG,KAAK,QAAQ;YAChB,GAAG,KAAK,UAAU;YAClB,GAAG,KAAK,QAAQ;YAChB,GAAG,KAAK,OAAO,EACf,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,UAAkB,EAAE,IAAY,EAAE,GAAY,EAAE,YAAuB;IAC/F,MAAM,WAAW,GAAmB,EAAE,CAAC;IACvC,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,gBAAgB,GAAsB,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACrE,MAAM,SAAS,GAAG,KAA0E,CAAC;QAC7F,MAAM,UAAU,GAAoB;YAClC,OAAO,EAAE,OAAO,SAAS,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B;YAC/F,IAAI;YACJ,SAAS,EAAE,IAAI;SAChB,CAAC;QACF,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,KAAK,QAAQ,IAAI,OAAO,SAAS,CAAC,GAAG,EAAE,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzF,UAAU,CAAC,QAAQ,GAAG;gBACpB,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE;gBACjE,GAAG,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,EAAE;aACpE,CAAC;QACJ,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;IACH,IAAI,yBAAyB,GAAG,KAAK,CAAC;IACtC,IAAI,4BAA4B,GAAG,KAAK,CAAC;IAEzC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;QACjB,IAAI,IAAI,CAAC,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACtC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC;gBAC9C,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;YAC9G,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,wBAAwB,EAAE,CAAC;YAC3C,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;gBAC7D,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC;gBAC9C,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;gBACxE,KAAK,MAAM,YAAY,IAAI,KAAK,EAAE,CAAC;oBACjC,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;gBAC/H,CAAC;YACH,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpC,MAAM,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;gBACrC,IAAI,CAAC,WAAW,CAAC,IAAI,KAAK,qBAAqB,IAAI,WAAW,CAAC,IAAI,KAAK,kBAAkB,IAAI,WAAW,CAAC,IAAI,KAAK,wBAAwB,IAAI,WAAW,CAAC,IAAI,KAAK,wBAAwB,IAAI,WAAW,CAAC,IAAI,KAAK,mBAAmB,CAAC,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,EAAE,CAAC;oBAChR,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,KAAK,wBAAwB,IAAI,WAAW,CAAC,IAAI,KAAK,wBAAwB,IAAI,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC;oBAC5I,SAAS,CAAC,WAAW,EAAE,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,IAAI,SAAS,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;gBACxG,CAAC;qBAAM,IAAI,WAAW,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;oBACtD,KAAK,MAAM,UAAU,IAAI,OAAO,CAAC,WAAW,CAAC,YAAY,CAAC,EAAE,CAAC;wBAC3D,IAAI,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC;4BACvB,KAAK,MAAM,IAAI,IAAI,YAAY,CAAC,UAAU,CAAC,EAAE,CAAC,EAAE,CAAC;gCAC/C,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;4BACjF,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,KAAK,MAAM,YAAY,IAAI,oBAAoB,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC;oBAC1E,SAAS,CAAC,WAAW,EAAE,YAAY,EAAE,IAAI,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;gBACzF,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,0BAA0B,EAAE,CAAC;YAC7C,SAAS,CAAC,WAAW,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;YACtH,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,EAAE,CAAC;YACzC,MAAM,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC/C,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC;gBACvF,SAAS,CAAC,WAAW,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,KAAK,MAAM,EAAE,CAAC,CAAC;YAC/H,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC;YACxB,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9D,IAAI,SAAS,EAAE,CAAC;gBACd,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,yBAAyB,GAAG,IAAI,CAAC;YACnC,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,mBAAmB,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;YACvC,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YAC1C,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;YAChE,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;gBACtC,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBAClG,CAAC;qBAAM,CAAC;oBACN,yBAAyB,GAAG,IAAI,CAAC;oBACjC,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,0BAA0B,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;gBACnF,CAAC;YACH,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAsB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACvG,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACnH,IAAI,UAAU,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;gBACzC,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;YACzC,CAAC;iBAAM,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;gBACpC,4DAA4D;gBAC5D,4BAA4B,GAAG,IAAI,CAAC;YACtC,CAAC;iBAAM,IAAI,UAAU,KAAK,QAAQ,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC7D,oCAAoC;gBACpC,4BAA4B,GAAG,IAAI,CAAC;YACtC,CAAC;iBAAM,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;gBACpF,MAAM,UAAU,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC/D,MAAM,cAAc,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;gBACrE,IAAI,UAAU,KAAK,QAAQ,IAAI,cAAc,KAAK,SAAS,IAAI,QAAQ,EAAE,CAAC;oBACxE,wCAAwC;oBACxC,SAAS,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;iBAAM,IAAK,IAAI,CAAC,IAAY,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBACjD,mCAAmC;gBACnC,4BAA4B,GAAG,IAAI,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,MAAM,GAAiB;QAC3B,EAAE,EAAE,IAAI;QACR,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,QAAQ;QAC7D,gBAAgB;QAChB,GAAG;QACH,UAAU;QACV,OAAO,EAAE,WAAW;QACpB,KAAK;QACL,yBAAyB;QACzB,4BAA4B;KAC7B,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,eAAe,CAAC,UAAkB,EAAE,IAAY;IACvD,MAAM,KAAK,GAAmB,EAAE,CAAC;IACjC,MAAM,KAAK,GAAG,4HAA4H,CAAC;IAC3I,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GAAG,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;QAChE,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzH,CAAC;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,CAAC;YAC/C,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC1H,CAAC;aAAM,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;gBACjE,IAAI,UAAU,EAAE,CAAC;oBACf,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,UAAU,KAAK,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpI,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,aAAa,CAAC,UAAkB,EAAE,IAAY;IACrD,MAAM,KAAK,GAAqB,EAAE,CAAC;IACnC,MAAM,QAAQ,GAA2D;QACvE,EAAE,KAAK,EAAE,2DAA2D,EAAE,IAAI,EAAE,QAAQ,EAAE;QACtF,EAAE,KAAK,EAAE,0DAA0D,EAAE,IAAI,EAAE,aAAa,EAAE;QAC1F,EAAE,KAAK,EAAE,2CAA2C,EAAE,IAAI,EAAE,SAAS,EAAE;QACvE,EAAE,KAAK,EAAE,0CAA0C,EAAE,IAAI,EAAE,iBAAiB,EAAE;KAC/E,CAAC;IACF,KAAK,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,QAAQ,EAAE,CAAC;QACvC,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,GAAmB;gBAC3B,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,WAAW;gBACrC,IAAI;gBACJ,aAAa,EAAE,CAAC,GAAG,CAAC;gBACpB,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACzD,CAAC;YACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnB,CAAC;IACH,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,QAAQ,CAAC,iCAAiC,CAAC,EAAE,CAAC;QAC3E,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3B,MAAM,eAAe,GAAG,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,UAAU,GAAG,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,eAAe,IAAI,CAAC,IAAI,UAAU,GAAG,eAAe,EAAE,CAAC;YACzD,KAAK,CAAC,IAAI,CAAC;gBACT,MAAM,EAAE,IAAI;gBACZ,YAAY,EAAE,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,eAAe,CAAC,GAAG,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC,EAAE;gBACrF,IAAI,EAAE,iBAAiB;gBACvB,aAAa,EAAE,CAAC,GAAG,CAAC;gBACpB,UAAU,EAAE,SAAS;gBACrB,QAAQ,EAAE,gBAAgB,CAAC,UAAU,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC;aACzD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,UAAkB,EAAE,IAAY,EAAE,MAAe;IACvE,MAAM,OAAO,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,oCAAoC,CAAC;IAChG,OAAO;QACL,EAAE,EAAE,IAAI;QACR,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,UAAU;QACvB,gBAAgB,EAAE;YAChB;gBACE,OAAO;gBACP,IAAI;gBACJ,SAAS,EAAE,KAAK;aACjB;SACF;QACD,UAAU;QACV,OAAO,EAAE,eAAe,CAAC,UAAU,EAAE,IAAI,CAAC;QAC1C,KAAK,EAAE,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC;QACtC,yBAAyB,EAAE,uCAAuC,CAAC,IAAI,CAAC,UAAU,CAAC;QACnF,4BAA4B,EAAE,sCAAsC,CAAC,IAAI,CAAC,UAAU,CAAC;KACtF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,IAAY;IAC1D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,EAAE;YAC/B,UAAU,EAAE,aAAa;YACzB,aAAa,EAAE,IAAI;YACnB,aAAa,EAAE,IAAI;YACnB,0BAA0B,EAAE,IAAI;YAChC,yBAAyB,EAAE,IAAI;YAC/B,OAAO,EAAE;gBACP,YAAY;gBACZ,KAAK;gBACL,CAAC,YAAY,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC;gBAChD,iBAAiB;gBACjB,wBAAwB;gBACxB,qBAAqB;gBACrB,eAAe;gBACf,eAAe;gBACf,YAAY;gBACZ,kBAAkB;gBAClB,2BAA2B;gBAC3B,kBAAkB;gBAClB,kBAAkB;gBAClB,mBAAmB;gBACnB,iBAAiB;gBACjB,mBAAmB;gBACnB,qBAAqB;aACb;SACX,CAAgD,CAAC;QAClD,OAAO,gBAAgB,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,cAAc,CAAC,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,IAAa;IACxC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAa;IACvC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,QAAgB;IAC7D,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAa;IAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,kBAAkB,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAa;IACrC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,IAAa,EAAE,OAAgC;IACrE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACtB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { AnalysisReport } from "./types.js";
2
+ export declare function formatTerminal(report: AnalysisReport): string;
3
+ export declare function formatSarif(report: AnalysisReport): string;
@@ -0,0 +1,75 @@
1
+ export function formatTerminal(report) {
2
+ const lines = [];
3
+ lines.push(`\x1b[1mOptiprune Analysis Report v${report.version}\x1b[0m`);
4
+ lines.push(`Root: ${report.rootDir}`);
5
+ lines.push("");
6
+ const summary = report.summary;
7
+ lines.push(`\x1b[1mSummary:\x1b[0m`);
8
+ lines.push(` Files: ${summary.filesDiscovered} discovered, ${summary.filesParsed} parsed`);
9
+ lines.push(` Findings: ${summary.findings} total (\x1b[31m${summary.errors} errors\x1b[0m, \x1b[33m${summary.warnings} warnings\x1b[0m)`);
10
+ lines.push("");
11
+ if (report.findings.length === 0) {
12
+ lines.push("\x1b[32m✔ No issues found!\x1b[0m");
13
+ return lines.join("\n");
14
+ }
15
+ let currentFile = "";
16
+ for (const finding of report.findings) {
17
+ if (finding.file !== currentFile) {
18
+ currentFile = finding.file;
19
+ lines.push(`\x1b[1m\x1b[4m${currentFile}\x1b[0m`);
20
+ }
21
+ const severityColor = finding.severity === "error" ? "\x1b[31m" : "\x1b[33m";
22
+ const loc = finding.location ? `:${finding.location.start.line}:${finding.location.start.column}` : "";
23
+ lines.push(` ${severityColor}${finding.severity.toUpperCase()}\x1b[0m [${finding.rule}] ${finding.message}`);
24
+ if (finding.location) {
25
+ // Simple snippet display (in a real CLI, we'd read the file and show the line)
26
+ lines.push(` at ${finding.file}${loc} (Confidence: ${finding.confidence})`);
27
+ }
28
+ }
29
+ return lines.join("\n");
30
+ }
31
+ export function formatSarif(report) {
32
+ const sarif = {
33
+ $schema: "https://schemastore.azurewebsites.net/schemas/json/sarif-2.1.0-rtm.5.json",
34
+ version: "2.1.0",
35
+ runs: [
36
+ {
37
+ tool: {
38
+ driver: {
39
+ name: "Optiprune",
40
+ version: report.version,
41
+ informationUri: "https://github.com/manus/optiprune",
42
+ rules: Array.from(new Set(report.findings.map(f => f.rule))).map(ruleId => ({
43
+ id: ruleId,
44
+ shortDescription: { text: `Optiprune rule: ${ruleId}` }
45
+ }))
46
+ }
47
+ },
48
+ results: report.findings.map(finding => ({
49
+ ruleId: finding.rule,
50
+ level: finding.severity === "error" ? "error" : "warning",
51
+ message: { text: finding.message },
52
+ locations: [
53
+ {
54
+ physicalLocation: {
55
+ artifactLocation: { uri: finding.file },
56
+ region: finding.location ? {
57
+ startLine: finding.location.start.line,
58
+ startColumn: finding.location.start.column,
59
+ endLine: finding.location.end.line,
60
+ endColumn: finding.location.end.column
61
+ } : undefined
62
+ }
63
+ }
64
+ ],
65
+ properties: {
66
+ confidence: finding.confidence,
67
+ evidence: finding.evidence
68
+ }
69
+ }))
70
+ }
71
+ ]
72
+ };
73
+ return JSON.stringify(sarif, null, 2);
74
+ }
75
+ //# sourceMappingURL=reporters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reporters.js","sourceRoot":"","sources":["../src/reporters.ts"],"names":[],"mappings":"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"}