@memberjunction/testing-cli 0.0.1 → 2.119.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 (54) hide show
  1. package/README.md +486 -29
  2. package/dist/commands/compare.d.ts +24 -0
  3. package/dist/commands/compare.d.ts.map +1 -0
  4. package/dist/commands/compare.js +50 -0
  5. package/dist/commands/compare.js.map +1 -0
  6. package/dist/commands/history.d.ts +23 -0
  7. package/dist/commands/history.d.ts.map +1 -0
  8. package/dist/commands/history.js +47 -0
  9. package/dist/commands/history.js.map +1 -0
  10. package/dist/commands/list.d.ts +39 -0
  11. package/dist/commands/list.d.ts.map +1 -0
  12. package/dist/commands/list.js +177 -0
  13. package/dist/commands/list.js.map +1 -0
  14. package/dist/commands/report.d.ts +22 -0
  15. package/dist/commands/report.d.ts.map +1 -0
  16. package/dist/commands/report.js +46 -0
  17. package/dist/commands/report.js.map +1 -0
  18. package/dist/commands/run.d.ts +21 -0
  19. package/dist/commands/run.d.ts.map +1 -0
  20. package/dist/commands/run.js +139 -0
  21. package/dist/commands/run.js.map +1 -0
  22. package/dist/commands/suite.d.ts +21 -0
  23. package/dist/commands/suite.d.ts.map +1 -0
  24. package/dist/commands/suite.js +105 -0
  25. package/dist/commands/suite.js.map +1 -0
  26. package/dist/commands/validate.d.ts +33 -0
  27. package/dist/commands/validate.d.ts.map +1 -0
  28. package/dist/commands/validate.js +266 -0
  29. package/dist/commands/validate.js.map +1 -0
  30. package/dist/index.d.ts +19 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +50 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/lib/mj-provider.d.ts +10 -0
  35. package/dist/lib/mj-provider.d.ts.map +1 -0
  36. package/dist/lib/mj-provider.js +205 -0
  37. package/dist/lib/mj-provider.js.map +1 -0
  38. package/dist/types.d.ts +103 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +7 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/utils/config-loader.d.ts +42 -0
  43. package/dist/utils/config-loader.d.ts.map +1 -0
  44. package/dist/utils/config-loader.js +70 -0
  45. package/dist/utils/config-loader.js.map +1 -0
  46. package/dist/utils/output-formatter.d.ts +64 -0
  47. package/dist/utils/output-formatter.d.ts.map +1 -0
  48. package/dist/utils/output-formatter.js +280 -0
  49. package/dist/utils/output-formatter.js.map +1 -0
  50. package/dist/utils/spinner-manager.d.ts +43 -0
  51. package/dist/utils/spinner-manager.d.ts.map +1 -0
  52. package/dist/utils/spinner-manager.js +89 -0
  53. package/dist/utils/spinner-manager.js.map +1 -0
  54. package/package.json +38 -7
@@ -0,0 +1,103 @@
1
+ /**
2
+ * @fileoverview CLI-specific types and interfaces
3
+ * @module @memberjunction/testing-cli
4
+ */
5
+ /**
6
+ * Output format options for CLI commands
7
+ */
8
+ export type OutputFormat = 'console' | 'json' | 'markdown';
9
+ /**
10
+ * CLI configuration loaded from mj.config.cjs
11
+ */
12
+ export interface CLIConfig {
13
+ defaultEnvironment?: string;
14
+ defaultFormat?: OutputFormat;
15
+ failFast?: boolean;
16
+ parallel?: boolean;
17
+ maxParallelTests?: number;
18
+ timeout?: number;
19
+ database?: {
20
+ host?: string;
21
+ name?: string;
22
+ port?: number;
23
+ username?: string;
24
+ password?: string;
25
+ schema?: string;
26
+ };
27
+ }
28
+ /**
29
+ * Common flags shared across commands
30
+ */
31
+ export interface CommonFlags {
32
+ format?: OutputFormat;
33
+ output?: string;
34
+ verbose?: boolean;
35
+ }
36
+ /**
37
+ * Flags for run command
38
+ */
39
+ export interface RunFlags extends CommonFlags {
40
+ name?: string;
41
+ suite?: string;
42
+ tag?: string;
43
+ category?: string;
44
+ difficulty?: string;
45
+ all?: boolean;
46
+ dryRun?: boolean;
47
+ environment?: string;
48
+ }
49
+ /**
50
+ * Flags for suite command
51
+ */
52
+ export interface SuiteFlags extends CommonFlags {
53
+ name?: string;
54
+ parallel?: boolean;
55
+ failFast?: boolean;
56
+ sequence?: string;
57
+ }
58
+ /**
59
+ * Flags for list command
60
+ */
61
+ export interface ListFlags extends CommonFlags {
62
+ type?: string;
63
+ suites?: boolean;
64
+ types?: boolean;
65
+ tag?: string;
66
+ status?: string;
67
+ }
68
+ /**
69
+ * Flags for validate command
70
+ */
71
+ export interface ValidateFlags extends CommonFlags {
72
+ all?: boolean;
73
+ type?: string;
74
+ saveReport?: boolean;
75
+ }
76
+ /**
77
+ * Flags for report command
78
+ */
79
+ export interface ReportFlags extends CommonFlags {
80
+ suite?: string;
81
+ test?: string;
82
+ from?: string;
83
+ to?: string;
84
+ includeCosts?: boolean;
85
+ includeTrends?: boolean;
86
+ }
87
+ /**
88
+ * Flags for history command
89
+ */
90
+ export interface HistoryFlags extends CommonFlags {
91
+ recent?: number;
92
+ from?: string;
93
+ status?: string;
94
+ }
95
+ /**
96
+ * Flags for compare command
97
+ */
98
+ export interface CompareFlags extends CommonFlags {
99
+ version?: string[];
100
+ commit?: string[];
101
+ diffOnly?: boolean;
102
+ }
103
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,SAAS;IACtB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC;IAC7B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,QAAS,SAAQ,WAAW;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,WAAW;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC1C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAc,SAAQ,WAAW;IAC9C,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,WAAY,SAAQ,WAAW;IAC5C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,YAAa,SAAQ,WAAW;IAC7C,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACtB"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview CLI-specific types and interfaces
4
+ * @module @memberjunction/testing-cli
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;GAGG"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @fileoverview Configuration loader for CLI
3
+ * @module @memberjunction/testing-cli
4
+ */
5
+ import { CLIConfig } from '../types';
6
+ export interface MJConfig {
7
+ dbHost?: string;
8
+ dbDatabase?: string;
9
+ dbPort?: number | string;
10
+ dbUsername?: string;
11
+ dbPassword?: string;
12
+ coreSchema?: string;
13
+ testing?: {
14
+ defaultEnvironment?: string;
15
+ defaultFormat?: 'console' | 'json' | 'markdown';
16
+ failFast?: boolean;
17
+ parallel?: boolean;
18
+ maxParallelTests?: number;
19
+ timeout?: number;
20
+ };
21
+ database?: {
22
+ host?: string;
23
+ name?: string;
24
+ port?: number;
25
+ username?: string;
26
+ password?: string;
27
+ schema?: string;
28
+ };
29
+ }
30
+ /**
31
+ * Load MJ configuration from mj.config.cjs
32
+ *
33
+ * @returns Full MJ configuration
34
+ */
35
+ export declare function loadMJConfig(): Promise<MJConfig>;
36
+ /**
37
+ * Load testing CLI configuration with defaults
38
+ *
39
+ * @returns CLI configuration
40
+ */
41
+ export declare function loadCLIConfig(): CLIConfig;
42
+ //# sourceMappingURL=config-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.d.ts","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAMrC,MAAM,WAAW,QAAQ;IAErB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,OAAO,CAAC,EAAE;QACN,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,aAAa,CAAC,EAAE,SAAS,GAAG,MAAM,GAAG,UAAU,CAAC;QAChD,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;QACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,OAAO,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;IAGF,QAAQ,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACL;AAID;;;;GAIG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,QAAQ,CAAC,CAsBtD;AAED;;;;GAIG;AACH,wBAAgB,aAAa,IAAI,SAAS,CAqBzC"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Configuration loader for CLI
4
+ * @module @memberjunction/testing-cli
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.loadCLIConfig = exports.loadMJConfig = void 0;
11
+ const cosmiconfig_1 = require("cosmiconfig");
12
+ const dotenv_1 = __importDefault(require("dotenv"));
13
+ const path_1 = __importDefault(require("path"));
14
+ // Load environment variables BEFORE loading config
15
+ // This ensures process.env is populated when mj.config.cjs is evaluated
16
+ dotenv_1.default.config({ path: path_1.default.resolve(process.cwd(), '.env'), override: true });
17
+ let cachedConfig = null;
18
+ /**
19
+ * Load MJ configuration from mj.config.cjs
20
+ *
21
+ * @returns Full MJ configuration
22
+ */
23
+ async function loadMJConfig() {
24
+ if (cachedConfig) {
25
+ return cachedConfig;
26
+ }
27
+ // Clear any existing require cache for mj.config.cjs to ensure env vars are re-evaluated
28
+ // This is necessary because mj.config.cjs uses process.env.DB_DATABASE directly
29
+ const configPath = path_1.default.resolve(process.cwd(), 'mj.config.cjs');
30
+ delete require.cache[configPath];
31
+ // Create a new explorer instance to ensure fresh config load with current env vars
32
+ const explorer = (0, cosmiconfig_1.cosmiconfig)('mj', {
33
+ cache: false // Disable caching to ensure fresh load
34
+ });
35
+ const result = await explorer.search();
36
+ if (!result) {
37
+ throw new Error(`No mj.config.cjs configuration found. Ensure you're running from the MJ repository root.`);
38
+ }
39
+ cachedConfig = result.config;
40
+ return cachedConfig;
41
+ }
42
+ exports.loadMJConfig = loadMJConfig;
43
+ /**
44
+ * Load testing CLI configuration with defaults
45
+ *
46
+ * @returns CLI configuration
47
+ */
48
+ function loadCLIConfig() {
49
+ // Synchronous version for backward compatibility
50
+ // Uses cached config if available, otherwise returns defaults
51
+ const testingConfig = cachedConfig?.testing || {};
52
+ return {
53
+ defaultEnvironment: testingConfig.defaultEnvironment || process.env.MJ_TEST_ENV || 'dev',
54
+ defaultFormat: testingConfig.defaultFormat || 'console',
55
+ failFast: testingConfig.failFast ?? false,
56
+ parallel: testingConfig.parallel ?? false,
57
+ maxParallelTests: testingConfig.maxParallelTests || 5,
58
+ timeout: testingConfig.timeout || 300000, // 5 minutes
59
+ database: cachedConfig?.database || {
60
+ host: cachedConfig?.dbHost || 'localhost',
61
+ name: cachedConfig?.dbDatabase,
62
+ port: typeof cachedConfig?.dbPort === 'string' ? parseInt(cachedConfig.dbPort) : cachedConfig?.dbPort,
63
+ username: cachedConfig?.dbUsername,
64
+ password: cachedConfig?.dbPassword,
65
+ schema: cachedConfig?.coreSchema || '__mj'
66
+ }
67
+ };
68
+ }
69
+ exports.loadCLIConfig = loadCLIConfig;
70
+ //# sourceMappingURL=config-loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-loader.js","sourceRoot":"","sources":["../../src/utils/config-loader.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;AAEH,6CAA0C;AAC1C,oDAA4B;AAC5B,gDAAwB;AAGxB,mDAAmD;AACnD,wEAAwE;AACxE,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;AAgC7E,IAAI,YAAY,GAAoB,IAAI,CAAC;AAEzC;;;;GAIG;AACI,KAAK,UAAU,YAAY;IAC9B,IAAI,YAAY,EAAE,CAAC;QACf,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,yFAAyF;IACzF,gFAAgF;IAChF,MAAM,UAAU,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,eAAe,CAAC,CAAC;IAChE,OAAO,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEjC,mFAAmF;IACnF,MAAM,QAAQ,GAAG,IAAA,yBAAW,EAAC,IAAI,EAAE;QAC/B,KAAK,EAAE,KAAK,CAAE,uCAAuC;KACxD,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,MAAM,EAAE,CAAC;IAEvC,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;IAChH,CAAC;IAED,YAAY,GAAG,MAAM,CAAC,MAAM,CAAC;IAC7B,OAAO,YAAY,CAAC;AACxB,CAAC;AAtBD,oCAsBC;AAED;;;;GAIG;AACH,SAAgB,aAAa;IACzB,iDAAiD;IACjD,8DAA8D;IAC9D,MAAM,aAAa,GAAG,YAAY,EAAE,OAAO,IAAI,EAAE,CAAC;IAElD,OAAO;QACH,kBAAkB,EAAE,aAAa,CAAC,kBAAkB,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,KAAK;QACxF,aAAa,EAAE,aAAa,CAAC,aAAa,IAAI,SAAS;QACvD,QAAQ,EAAE,aAAa,CAAC,QAAQ,IAAI,KAAK;QACzC,QAAQ,EAAE,aAAa,CAAC,QAAQ,IAAI,KAAK;QACzC,gBAAgB,EAAE,aAAa,CAAC,gBAAgB,IAAI,CAAC;QACrD,OAAO,EAAE,aAAa,CAAC,OAAO,IAAI,MAAM,EAAG,YAAY;QACvD,QAAQ,EAAE,YAAY,EAAE,QAAQ,IAAI;YAChC,IAAI,EAAE,YAAY,EAAE,MAAM,IAAI,WAAW;YACzC,IAAI,EAAE,YAAY,EAAE,UAAU;YAC9B,IAAI,EAAE,OAAO,YAAY,EAAE,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,EAAE,MAAM;YACrG,QAAQ,EAAE,YAAY,EAAE,UAAU;YAClC,QAAQ,EAAE,YAAY,EAAE,UAAU;YAClC,MAAM,EAAE,YAAY,EAAE,UAAU,IAAI,MAAM;SAC7C;KACJ,CAAC;AACN,CAAC;AArBD,sCAqBC"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @fileoverview Output formatting utilities for CLI
3
+ * @module @memberjunction/testing-cli
4
+ */
5
+ import { TestRunResult, TestSuiteRunResult } from '@memberjunction/testing-engine';
6
+ import { OutputFormat } from '../types';
7
+ /**
8
+ * Format test result for display
9
+ */
10
+ export declare class OutputFormatter {
11
+ /**
12
+ * Format test run result based on output format
13
+ */
14
+ static formatTestResult(result: TestRunResult, format: OutputFormat): string;
15
+ /**
16
+ * Format suite result based on output format
17
+ */
18
+ static formatSuiteResult(result: TestSuiteRunResult, format: OutputFormat): string;
19
+ /**
20
+ * Format test result as JSON
21
+ */
22
+ private static formatJSON;
23
+ /**
24
+ * Format test result as Markdown
25
+ */
26
+ private static formatMarkdown;
27
+ /**
28
+ * Format test result for console output
29
+ */
30
+ private static formatConsole;
31
+ /**
32
+ * Format suite result as JSON
33
+ */
34
+ private static formatSuiteJSON;
35
+ /**
36
+ * Format suite result as Markdown
37
+ */
38
+ private static formatSuiteMarkdown;
39
+ /**
40
+ * Format suite result for console output
41
+ */
42
+ private static formatSuiteConsole;
43
+ /**
44
+ * Write output to file if specified
45
+ */
46
+ static writeToFile(content: string, filePath?: string): void;
47
+ /**
48
+ * Format error message
49
+ */
50
+ static formatError(message: string, error?: Error): string;
51
+ /**
52
+ * Format success message
53
+ */
54
+ static formatSuccess(message: string): string;
55
+ /**
56
+ * Format warning message
57
+ */
58
+ static formatWarning(message: string): string;
59
+ /**
60
+ * Format info message
61
+ */
62
+ static formatInfo(message: string): string;
63
+ }
64
+ //# sourceMappingURL=output-formatter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.d.ts","sourceRoot":"","sources":["../../src/utils/output-formatter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACnF,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGxC;;GAEG;AACH,qBAAa,eAAe;IACxB;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAY5E;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,MAAM,EAAE,kBAAkB,EAAE,MAAM,EAAE,YAAY,GAAG,MAAM;IAYlF;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,UAAU;IAIzB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,cAAc;IAyB7B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,aAAa;IAkD5B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,eAAe;IAI9B;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;IA4ClC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,kBAAkB;IAgDjC;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAa5D;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM;IAiB1D;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAI7C;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;CAG7C"}
@@ -0,0 +1,280 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Output formatting utilities for CLI
4
+ * @module @memberjunction/testing-cli
5
+ */
6
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
7
+ if (k2 === undefined) k2 = k;
8
+ var desc = Object.getOwnPropertyDescriptor(m, k);
9
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10
+ desc = { enumerable: true, get: function() { return m[k]; } };
11
+ }
12
+ Object.defineProperty(o, k2, desc);
13
+ }) : (function(o, m, k, k2) {
14
+ if (k2 === undefined) k2 = k;
15
+ o[k2] = m[k];
16
+ }));
17
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
18
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
19
+ }) : function(o, v) {
20
+ o["default"] = v;
21
+ });
22
+ var __importStar = (this && this.__importStar) || function (mod) {
23
+ if (mod && mod.__esModule) return mod;
24
+ var result = {};
25
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
26
+ __setModuleDefault(result, mod);
27
+ return result;
28
+ };
29
+ var __importDefault = (this && this.__importDefault) || function (mod) {
30
+ return (mod && mod.__esModule) ? mod : { "default": mod };
31
+ };
32
+ Object.defineProperty(exports, "__esModule", { value: true });
33
+ exports.OutputFormatter = void 0;
34
+ const chalk_1 = __importDefault(require("chalk"));
35
+ const fs = __importStar(require("fs"));
36
+ /**
37
+ * Format test result for display
38
+ */
39
+ class OutputFormatter {
40
+ /**
41
+ * Format test run result based on output format
42
+ */
43
+ static formatTestResult(result, format) {
44
+ switch (format) {
45
+ case 'json':
46
+ return this.formatJSON(result);
47
+ case 'markdown':
48
+ return this.formatMarkdown(result);
49
+ case 'console':
50
+ default:
51
+ return this.formatConsole(result);
52
+ }
53
+ }
54
+ /**
55
+ * Format suite result based on output format
56
+ */
57
+ static formatSuiteResult(result, format) {
58
+ switch (format) {
59
+ case 'json':
60
+ return this.formatSuiteJSON(result);
61
+ case 'markdown':
62
+ return this.formatSuiteMarkdown(result);
63
+ case 'console':
64
+ default:
65
+ return this.formatSuiteConsole(result);
66
+ }
67
+ }
68
+ /**
69
+ * Format test result as JSON
70
+ */
71
+ static formatJSON(result) {
72
+ return JSON.stringify(result, null, 2);
73
+ }
74
+ /**
75
+ * Format test result as Markdown
76
+ */
77
+ static formatMarkdown(result) {
78
+ const passed = result.status === 'Passed';
79
+ const status = passed ? 'PASSED ✓' : 'FAILED ✗';
80
+ const scorePercent = (result.score * 100).toFixed(1);
81
+ let md = `# Test Run: ${result.testName}\n`;
82
+ md += `**Status:** ${status}\n`;
83
+ md += `**Score:** ${result.score.toFixed(4)} (${scorePercent}%)\n`;
84
+ md += `**Duration:** ${(result.durationMs / 1000).toFixed(1)}s\n`;
85
+ md += `**Cost:** $${result.totalCost.toFixed(4)}\n`;
86
+ md += '\n## Oracle Results\n';
87
+ for (const oracle of result.oracleResults) {
88
+ const symbol = oracle.passed ? '✓' : '✗';
89
+ md += `- ${symbol} ${oracle.oracleType}: ${oracle.message}\n`;
90
+ }
91
+ if (result.errorMessage) {
92
+ md += '\n## Error\n';
93
+ md += `\`\`\`\n${result.errorMessage}\n\`\`\`\n`;
94
+ }
95
+ return md;
96
+ }
97
+ /**
98
+ * Format test result for console output
99
+ */
100
+ static formatConsole(result) {
101
+ const lines = [];
102
+ // Header
103
+ lines.push(chalk_1.default.bold(`\n[TEST_START] ${result.testName}`));
104
+ lines.push(chalk_1.default.gray(`[TARGET] ${result.targetType}`));
105
+ if (result.targetLogId) {
106
+ lines.push(chalk_1.default.cyan(`[TARGET_ID] ${result.targetLogId}`));
107
+ }
108
+ lines.push('');
109
+ // Oracle results
110
+ if (result.oracleResults.length > 0) {
111
+ lines.push(chalk_1.default.bold(`[ORACLES] Running ${result.oracleResults.length} validation(s)`));
112
+ for (const oracle of result.oracleResults) {
113
+ const symbol = oracle.passed ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
114
+ const scoreStr = oracle.score != null ? ` (score: ${oracle.score.toFixed(4)})` : '';
115
+ lines.push(`${symbol} ${oracle.oracleType}${scoreStr}: ${oracle.message}`);
116
+ }
117
+ lines.push('');
118
+ }
119
+ // Score
120
+ const scorePercent = (result.score * 100).toFixed(1);
121
+ lines.push(chalk_1.default.bold('[SCORE]'));
122
+ lines.push(` Overall: ${result.score.toFixed(4)} (${scorePercent}%)`);
123
+ lines.push(` Checks: ${result.passedChecks}/${result.totalChecks} passed`);
124
+ lines.push(` Duration: ${(result.durationMs / 1000).toFixed(1)}s`);
125
+ lines.push(` Cost: $${result.totalCost.toFixed(4)}`);
126
+ // Final status
127
+ lines.push('');
128
+ const passed = result.status === 'Passed';
129
+ if (passed) {
130
+ lines.push(chalk_1.default.green.bold(`[TEST_PASS] ${result.testName}`));
131
+ }
132
+ else {
133
+ lines.push(chalk_1.default.red.bold(`[TEST_FAIL] ${result.testName}`));
134
+ }
135
+ if (result.errorMessage) {
136
+ lines.push('');
137
+ lines.push(chalk_1.default.red.bold('[ERROR]'));
138
+ lines.push(chalk_1.default.red(result.errorMessage));
139
+ }
140
+ return lines.join('\n');
141
+ }
142
+ /**
143
+ * Format suite result as JSON
144
+ */
145
+ static formatSuiteJSON(result) {
146
+ return JSON.stringify(result, null, 2);
147
+ }
148
+ /**
149
+ * Format suite result as Markdown
150
+ */
151
+ static formatSuiteMarkdown(result) {
152
+ const passRate = result.totalTests > 0 ? (result.passedTests / result.totalTests * 100).toFixed(1) : '0.0';
153
+ let md = `# Test Suite: ${result.suiteName}\n`;
154
+ md += `**Total Tests:** ${result.totalTests}\n`;
155
+ md += `**Passed:** ${result.passedTests}\n`;
156
+ md += `**Failed:** ${result.failedTests}\n`;
157
+ md += `**Pass Rate:** ${passRate}%\n`;
158
+ md += `**Duration:** ${(result.durationMs / 1000).toFixed(1)}s\n`;
159
+ md += `**Total Cost:** $${result.totalCost.toFixed(4)}\n`;
160
+ md += '\n## Test Results\n';
161
+ md += '| Test | Status | Score | Duration | Cost |\n';
162
+ md += '|------|--------|-------|----------|------|\n';
163
+ for (const testResult of result.testResults) {
164
+ const passed = testResult.status === 'Passed';
165
+ const status = passed ? '✓ PASS' : '✗ FAIL';
166
+ const cost = `$${testResult.totalCost.toFixed(4)}`;
167
+ md += `| ${testResult.testName} | ${status} | ${testResult.score.toFixed(4)} | ${(testResult.durationMs / 1000).toFixed(1)}s | ${cost} |\n`;
168
+ }
169
+ const failedTests = result.testResults.filter(t => t.status !== 'Passed');
170
+ if (failedTests.length > 0) {
171
+ md += '\n## Failures\n';
172
+ for (const testResult of failedTests) {
173
+ md += `\n### ${testResult.testName}\n`;
174
+ md += `- **Score:** ${testResult.score.toFixed(4)}\n`;
175
+ for (const oracle of testResult.oracleResults) {
176
+ if (!oracle.passed) {
177
+ md += `- **Failed Oracle:** ${oracle.oracleType} - ${oracle.message}\n`;
178
+ }
179
+ }
180
+ if (testResult.errorMessage) {
181
+ md += `- **Error:** ${testResult.errorMessage}\n`;
182
+ }
183
+ }
184
+ }
185
+ return md;
186
+ }
187
+ /**
188
+ * Format suite result for console output
189
+ */
190
+ static formatSuiteConsole(result) {
191
+ const lines = [];
192
+ // Header
193
+ lines.push(chalk_1.default.bold(`\n[SUITE_START] ${result.suiteName}`));
194
+ lines.push(chalk_1.default.gray(`[TESTS] ${result.totalTests} tests queued`));
195
+ lines.push('');
196
+ // Individual test results
197
+ for (let i = 0; i < result.testResults.length; i++) {
198
+ const testResult = result.testResults[i];
199
+ const number = chalk_1.default.gray(`[${i + 1}/${result.totalTests}]`);
200
+ const passed = testResult.status === 'Passed';
201
+ const symbol = passed ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
202
+ const status = passed ? chalk_1.default.green('PASSED') : chalk_1.default.red('FAILED');
203
+ const cost = `$${testResult.totalCost.toFixed(4)}`;
204
+ lines.push(`${number} ${testResult.testName}`);
205
+ lines.push(`${symbol} ${status} (${(testResult.durationMs / 1000).toFixed(1)}s, score: ${testResult.score.toFixed(4)}, cost: ${cost})`);
206
+ if (!passed) {
207
+ for (const oracle of testResult.oracleResults) {
208
+ if (!oracle.passed) {
209
+ lines.push(chalk_1.default.red(` - Oracle '${oracle.oracleType}' failed: ${oracle.message}`));
210
+ }
211
+ }
212
+ if (testResult.errorMessage) {
213
+ lines.push(chalk_1.default.red(` - Error: ${testResult.errorMessage}`));
214
+ }
215
+ }
216
+ lines.push('');
217
+ }
218
+ // Summary
219
+ const passRate = result.totalTests > 0 ? (result.passedTests / result.totalTests * 100).toFixed(1) : '0.0';
220
+ lines.push(chalk_1.default.bold('[SUITE_COMPLETE] ' + result.suiteName));
221
+ lines.push(chalk_1.default.bold(`[SUMMARY] ${result.passedTests}/${result.totalTests} passed (${passRate}%)`));
222
+ lines.push(chalk_1.default.bold(`[DURATION] ${(result.durationMs / 1000).toFixed(1)}s`));
223
+ lines.push(chalk_1.default.bold(`[COST] $${result.totalCost.toFixed(4)}`));
224
+ if (result.failedTests > 0) {
225
+ lines.push(chalk_1.default.red.bold(`[FAILURES] ${result.failedTests} test(s) failed - see details above`));
226
+ }
227
+ return lines.join('\n');
228
+ }
229
+ /**
230
+ * Write output to file if specified
231
+ */
232
+ static writeToFile(content, filePath) {
233
+ if (!filePath) {
234
+ return;
235
+ }
236
+ try {
237
+ fs.writeFileSync(filePath, content, 'utf-8');
238
+ console.log(chalk_1.default.green(`✓ Output saved to ${filePath}`));
239
+ }
240
+ catch (error) {
241
+ console.error(chalk_1.default.red(`✗ Failed to write to ${filePath}: ${error.message}`));
242
+ }
243
+ }
244
+ /**
245
+ * Format error message
246
+ */
247
+ static formatError(message, error) {
248
+ const lines = [];
249
+ lines.push(chalk_1.default.red.bold('✗ Error: ' + message));
250
+ if (error) {
251
+ lines.push('');
252
+ lines.push(chalk_1.default.red(error.message));
253
+ if (error.stack) {
254
+ lines.push('');
255
+ lines.push(chalk_1.default.gray(error.stack));
256
+ }
257
+ }
258
+ return lines.join('\n');
259
+ }
260
+ /**
261
+ * Format success message
262
+ */
263
+ static formatSuccess(message) {
264
+ return chalk_1.default.green.bold('✓ ' + message);
265
+ }
266
+ /**
267
+ * Format warning message
268
+ */
269
+ static formatWarning(message) {
270
+ return chalk_1.default.yellow.bold('⚠ ' + message);
271
+ }
272
+ /**
273
+ * Format info message
274
+ */
275
+ static formatInfo(message) {
276
+ return chalk_1.default.blue.bold('ℹ ' + message);
277
+ }
278
+ }
279
+ exports.OutputFormatter = OutputFormatter;
280
+ //# sourceMappingURL=output-formatter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-formatter.js","sourceRoot":"","sources":["../../src/utils/output-formatter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @fileoverview Spinner management for CLI progress indication
3
+ * @module @memberjunction/testing-cli
4
+ */
5
+ /**
6
+ * Spinner manager for CLI operations
7
+ */
8
+ export declare class SpinnerManager {
9
+ private spinner;
10
+ /**
11
+ * Start a spinner with the given message
12
+ */
13
+ start(message: string): void;
14
+ /**
15
+ * Update spinner message
16
+ */
17
+ update(message: string): void;
18
+ /**
19
+ * Stop spinner with success message
20
+ */
21
+ succeed(message?: string): void;
22
+ /**
23
+ * Stop spinner with failure message
24
+ */
25
+ fail(message?: string): void;
26
+ /**
27
+ * Stop spinner with warning message
28
+ */
29
+ warn(message?: string): void;
30
+ /**
31
+ * Stop spinner with info message
32
+ */
33
+ info(message?: string): void;
34
+ /**
35
+ * Stop spinner without any message
36
+ */
37
+ stop(): void;
38
+ /**
39
+ * Check if spinner is currently running
40
+ */
41
+ get isSpinning(): boolean;
42
+ }
43
+ //# sourceMappingURL=spinner-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner-manager.d.ts","sourceRoot":"","sources":["../../src/utils/spinner-manager.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH;;GAEG;AACH,qBAAa,cAAc;IACvB,OAAO,CAAC,OAAO,CAAoB;IAEnC;;OAEG;IACH,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAO5B;;OAEG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAM7B;;OAEG;IACH,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAO/B;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAO5B;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAO5B;;OAEG;IACH,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI;IAO5B;;OAEG;IACH,IAAI,IAAI,IAAI;IAOZ;;OAEG;IACH,IAAI,UAAU,IAAI,OAAO,CAExB;CACJ"}