@memberjunction/testing-cli 0.0.1 → 2.118.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,266 @@
1
+ "use strict";
2
+ /**
3
+ * @fileoverview Validate command implementation
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.ValidateCommand = void 0;
34
+ const testing_engine_1 = require("@memberjunction/testing-engine");
35
+ const output_formatter_1 = require("../utils/output-formatter");
36
+ const spinner_manager_1 = require("../utils/spinner-manager");
37
+ const mj_provider_1 = require("../lib/mj-provider");
38
+ const chalk_1 = __importDefault(require("chalk"));
39
+ const fs = __importStar(require("fs"));
40
+ /**
41
+ * Validate command - Validate test definitions without executing
42
+ */
43
+ class ValidateCommand {
44
+ constructor() {
45
+ this.spinner = new spinner_manager_1.SpinnerManager();
46
+ }
47
+ /**
48
+ * Execute the validate command
49
+ *
50
+ * @param testId - Optional test ID to validate
51
+ * @param flags - Command flags
52
+ * @param contextUser - Optional user context (will be fetched if not provided)
53
+ */
54
+ async execute(testId, flags, contextUser) {
55
+ try {
56
+ // Initialize MJ provider (database connection and metadata)
57
+ await (0, mj_provider_1.initializeMJProvider)();
58
+ // Get context user after initialization if not provided
59
+ if (!contextUser) {
60
+ contextUser = await (0, mj_provider_1.getContextUser)();
61
+ }
62
+ const engine = testing_engine_1.TestEngine.Instance;
63
+ await engine.Config(false, contextUser);
64
+ let testsToValidate;
65
+ if (testId) {
66
+ // Validate specific test
67
+ const test = engine.GetTestByID(testId);
68
+ if (!test) {
69
+ console.error(output_formatter_1.OutputFormatter.formatError(`Test not found: ${testId}`));
70
+ process.exit(1);
71
+ }
72
+ testsToValidate = [test];
73
+ }
74
+ else if (flags.all) {
75
+ // Validate all tests
76
+ testsToValidate = engine.Tests;
77
+ }
78
+ else if (flags.type) {
79
+ // Validate tests by type
80
+ const type = engine.GetTestTypeByName(flags.type);
81
+ if (!type) {
82
+ console.error(output_formatter_1.OutputFormatter.formatError(`Test type not found: ${flags.type}`));
83
+ process.exit(1);
84
+ }
85
+ testsToValidate = engine.Tests.filter(t => t.TypeID === type.ID);
86
+ }
87
+ else {
88
+ console.error(output_formatter_1.OutputFormatter.formatError('Must specify test ID, --all, or --type'));
89
+ process.exit(1);
90
+ }
91
+ // Validate tests
92
+ this.spinner.start(`Validating ${testsToValidate.length} test(s)...`);
93
+ const results = testsToValidate.map(test => this.validateTest(test, engine));
94
+ this.spinner.stop();
95
+ // Display results
96
+ this.displayResults(results);
97
+ // Save report if requested
98
+ if (flags.saveReport || flags.output) {
99
+ const reportPath = flags.output || 'validation-report.md';
100
+ this.saveReport(results, reportPath);
101
+ }
102
+ // Clean up resources
103
+ await (0, mj_provider_1.closeMJProvider)();
104
+ // Exit with appropriate code
105
+ const hasErrors = results.some(r => !r.valid);
106
+ process.exit(hasErrors ? 1 : 0);
107
+ }
108
+ catch (error) {
109
+ this.spinner.fail();
110
+ console.error(output_formatter_1.OutputFormatter.formatError('Failed to validate tests', error));
111
+ // Clean up resources before exit
112
+ try {
113
+ await (0, mj_provider_1.closeMJProvider)();
114
+ }
115
+ catch {
116
+ // Ignore cleanup errors
117
+ }
118
+ process.exit(1);
119
+ }
120
+ }
121
+ /**
122
+ * Validate a single test
123
+ */
124
+ validateTest(test, engine) {
125
+ const result = {
126
+ testName: test.Name,
127
+ testId: test.ID,
128
+ valid: true,
129
+ warnings: [],
130
+ errors: []
131
+ };
132
+ // Check test type exists
133
+ const testType = engine.GetTestTypeByID(test.TypeID);
134
+ if (!testType) {
135
+ result.errors.push(`Test type not found: ${test.TypeID}`);
136
+ result.valid = false;
137
+ }
138
+ // Check status
139
+ if (test.Status !== 'Active') {
140
+ result.warnings.push(`Test is not active (status: ${test.Status})`);
141
+ }
142
+ // Validate InputDefinition
143
+ if (test.InputDefinition) {
144
+ try {
145
+ JSON.parse(test.InputDefinition);
146
+ }
147
+ catch {
148
+ result.errors.push('InputDefinition is not valid JSON');
149
+ result.valid = false;
150
+ }
151
+ }
152
+ else {
153
+ result.warnings.push('No InputDefinition provided');
154
+ }
155
+ // Validate ExpectedOutcomes
156
+ if (test.ExpectedOutcomes) {
157
+ try {
158
+ JSON.parse(test.ExpectedOutcomes);
159
+ }
160
+ catch {
161
+ result.errors.push('ExpectedOutcomes is not valid JSON');
162
+ result.valid = false;
163
+ }
164
+ }
165
+ else {
166
+ result.warnings.push('No ExpectedOutcomes defined');
167
+ }
168
+ // Validate Configuration (OracleConfiguration and TestConfiguration combined)
169
+ if (test.Configuration) {
170
+ try {
171
+ JSON.parse(test.Configuration);
172
+ }
173
+ catch {
174
+ result.errors.push('Configuration is not valid JSON');
175
+ result.valid = false;
176
+ }
177
+ }
178
+ else {
179
+ result.warnings.push('No Configuration defined');
180
+ }
181
+ return result;
182
+ }
183
+ /**
184
+ * Display validation results
185
+ */
186
+ displayResults(results) {
187
+ console.log(chalk_1.default.bold('\nValidating Tests...\n'));
188
+ for (const result of results) {
189
+ const symbol = result.valid ? chalk_1.default.green('✓') : chalk_1.default.red('✗');
190
+ console.log(`${symbol} ${result.testName}`);
191
+ if (result.valid && result.warnings.length === 0) {
192
+ console.log(chalk_1.default.gray(' - No issues found'));
193
+ }
194
+ for (const error of result.errors) {
195
+ console.log(chalk_1.default.red(` ✗ Error: ${error}`));
196
+ }
197
+ for (const warning of result.warnings) {
198
+ console.log(chalk_1.default.yellow(` ⚠ Warning: ${warning}`));
199
+ }
200
+ console.log('');
201
+ }
202
+ // Summary
203
+ const validCount = results.filter(r => r.valid).length;
204
+ const warningCount = results.filter(r => r.warnings.length > 0).length;
205
+ console.log(chalk_1.default.bold('[SUMMARY]'));
206
+ if (validCount === results.length && warningCount === 0) {
207
+ console.log(chalk_1.default.green(`All ${results.length} test(s) are valid with no warnings`));
208
+ }
209
+ else if (validCount === results.length) {
210
+ console.log(chalk_1.default.yellow(`${validCount}/${results.length} test(s) valid, ${warningCount} with warnings`));
211
+ }
212
+ else {
213
+ console.log(chalk_1.default.red(`${validCount}/${results.length} test(s) valid, ${results.length - validCount} with errors`));
214
+ }
215
+ console.log('');
216
+ }
217
+ /**
218
+ * Save validation report to file
219
+ */
220
+ saveReport(results, filePath) {
221
+ const lines = [];
222
+ lines.push('# Test Validation Report');
223
+ lines.push(`Generated: ${new Date().toISOString()}\n`);
224
+ lines.push('## Summary\n');
225
+ const validCount = results.filter(r => r.valid).length;
226
+ const warningCount = results.filter(r => r.warnings.length > 0).length;
227
+ lines.push(`- **Total Tests:** ${results.length}`);
228
+ lines.push(`- **Valid:** ${validCount}`);
229
+ lines.push(`- **Invalid:** ${results.length - validCount}`);
230
+ lines.push(`- **With Warnings:** ${warningCount}\n`);
231
+ lines.push('## Test Results\n');
232
+ for (const result of results) {
233
+ const status = result.valid ? '✓ Valid' : '✗ Invalid';
234
+ lines.push(`### ${result.testName}`);
235
+ lines.push(`**Status:** ${status}`);
236
+ lines.push(`**ID:** ${result.testId}\n`);
237
+ if (result.errors.length > 0) {
238
+ lines.push('**Errors:**');
239
+ for (const error of result.errors) {
240
+ lines.push(`- ${error}`);
241
+ }
242
+ lines.push('');
243
+ }
244
+ if (result.warnings.length > 0) {
245
+ lines.push('**Warnings:**');
246
+ for (const warning of result.warnings) {
247
+ lines.push(`- ${warning}`);
248
+ }
249
+ lines.push('');
250
+ }
251
+ if (result.valid && result.warnings.length === 0) {
252
+ lines.push('No issues found.\n');
253
+ }
254
+ }
255
+ const report = lines.join('\n');
256
+ try {
257
+ fs.writeFileSync(filePath, report, 'utf-8');
258
+ console.log(output_formatter_1.OutputFormatter.formatSuccess(`Validation report saved to ${filePath}`));
259
+ }
260
+ catch (error) {
261
+ console.error(output_formatter_1.OutputFormatter.formatError(`Failed to save report to ${filePath}`, error));
262
+ }
263
+ }
264
+ }
265
+ exports.ValidateCommand = ValidateCommand;
266
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * MemberJunction Testing CLI
3
+ *
4
+ * Command-line interface for the Testing Framework.
5
+ * Provides thin wrappers around Testing Engine for CLI execution.
6
+ */
7
+ export { RunCommand } from './commands/run';
8
+ export { SuiteCommand } from './commands/suite';
9
+ export { ListCommand } from './commands/list';
10
+ export { ValidateCommand } from './commands/validate';
11
+ export { ReportCommand } from './commands/report';
12
+ export { HistoryCommand } from './commands/history';
13
+ export { CompareCommand } from './commands/compare';
14
+ export { OutputFormatter } from './utils/output-formatter';
15
+ export { loadCLIConfig } from './utils/config-loader';
16
+ export { SpinnerManager } from './utils/spinner-manager';
17
+ export { getContextUser } from './lib/mj-provider';
18
+ export * from './types';
19
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGpD,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD,cAAc,SAAS,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ /**
3
+ * MemberJunction Testing CLI
4
+ *
5
+ * Command-line interface for the Testing Framework.
6
+ * Provides thin wrappers around Testing Engine for CLI execution.
7
+ */
8
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
9
+ if (k2 === undefined) k2 = k;
10
+ var desc = Object.getOwnPropertyDescriptor(m, k);
11
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
12
+ desc = { enumerable: true, get: function() { return m[k]; } };
13
+ }
14
+ Object.defineProperty(o, k2, desc);
15
+ }) : (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ o[k2] = m[k];
18
+ }));
19
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
20
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
21
+ };
22
+ Object.defineProperty(exports, "__esModule", { value: true });
23
+ exports.getContextUser = exports.SpinnerManager = exports.loadCLIConfig = exports.OutputFormatter = exports.CompareCommand = exports.HistoryCommand = exports.ReportCommand = exports.ValidateCommand = exports.ListCommand = exports.SuiteCommand = exports.RunCommand = void 0;
24
+ // Command implementations
25
+ var run_1 = require("./commands/run");
26
+ Object.defineProperty(exports, "RunCommand", { enumerable: true, get: function () { return run_1.RunCommand; } });
27
+ var suite_1 = require("./commands/suite");
28
+ Object.defineProperty(exports, "SuiteCommand", { enumerable: true, get: function () { return suite_1.SuiteCommand; } });
29
+ var list_1 = require("./commands/list");
30
+ Object.defineProperty(exports, "ListCommand", { enumerable: true, get: function () { return list_1.ListCommand; } });
31
+ var validate_1 = require("./commands/validate");
32
+ Object.defineProperty(exports, "ValidateCommand", { enumerable: true, get: function () { return validate_1.ValidateCommand; } });
33
+ var report_1 = require("./commands/report");
34
+ Object.defineProperty(exports, "ReportCommand", { enumerable: true, get: function () { return report_1.ReportCommand; } });
35
+ var history_1 = require("./commands/history");
36
+ Object.defineProperty(exports, "HistoryCommand", { enumerable: true, get: function () { return history_1.HistoryCommand; } });
37
+ var compare_1 = require("./commands/compare");
38
+ Object.defineProperty(exports, "CompareCommand", { enumerable: true, get: function () { return compare_1.CompareCommand; } });
39
+ // Utilities
40
+ var output_formatter_1 = require("./utils/output-formatter");
41
+ Object.defineProperty(exports, "OutputFormatter", { enumerable: true, get: function () { return output_formatter_1.OutputFormatter; } });
42
+ var config_loader_1 = require("./utils/config-loader");
43
+ Object.defineProperty(exports, "loadCLIConfig", { enumerable: true, get: function () { return config_loader_1.loadCLIConfig; } });
44
+ var spinner_manager_1 = require("./utils/spinner-manager");
45
+ Object.defineProperty(exports, "SpinnerManager", { enumerable: true, get: function () { return spinner_manager_1.SpinnerManager; } });
46
+ var mj_provider_1 = require("./lib/mj-provider");
47
+ Object.defineProperty(exports, "getContextUser", { enumerable: true, get: function () { return mj_provider_1.getContextUser; } });
48
+ // Types
49
+ __exportStar(require("./types"), exports);
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;;;;;;;;;;;;;;;AAEH,0BAA0B;AAC1B,sCAA4C;AAAnC,iGAAA,UAAU,OAAA;AACnB,0CAAgD;AAAvC,qGAAA,YAAY,OAAA;AACrB,wCAA8C;AAArC,mGAAA,WAAW,OAAA;AACpB,gDAAsD;AAA7C,2GAAA,eAAe,OAAA;AACxB,4CAAkD;AAAzC,uGAAA,aAAa,OAAA;AACtB,8CAAoD;AAA3C,yGAAA,cAAc,OAAA;AACvB,8CAAoD;AAA3C,yGAAA,cAAc,OAAA;AAEvB,YAAY;AACZ,6DAA2D;AAAlD,mHAAA,eAAe,OAAA;AACxB,uDAAsD;AAA7C,8GAAA,aAAa,OAAA;AACtB,2DAAyD;AAAhD,iHAAA,cAAc,OAAA;AACvB,iDAAmD;AAA1C,6GAAA,cAAc,OAAA;AAEvB,QAAQ;AACR,0CAAwB"}
@@ -0,0 +1,10 @@
1
+ import sql from 'mssql';
2
+ export declare function initializeMJProvider(): Promise<void>;
3
+ export declare function getConnectionPool(): sql.ConnectionPool;
4
+ export declare function closeMJProvider(): Promise<void>;
5
+ /**
6
+ * Get a context user for CLI operations
7
+ * Tries to get the "System" user first, falls back to first available user
8
+ */
9
+ export declare function getContextUser(): Promise<import('@memberjunction/core').UserInfo>;
10
+ //# sourceMappingURL=mj-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mj-provider.d.ts","sourceRoot":"","sources":["../../src/lib/mj-provider.ts"],"names":[],"mappings":"AAEA,OAAO,GAAG,MAAM,OAAO,CAAC;AAaxB,wBAAsB,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC,CAoJ1D;AAED,wBAAgB,iBAAiB,IAAI,GAAG,CAAC,cAAc,CAUtD;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAMrD;AAED;;;GAGG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,OAAO,sBAAsB,EAAE,QAAQ,CAAC,CA4BvF"}
@@ -0,0 +1,205 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getContextUser = exports.closeMJProvider = exports.getConnectionPool = exports.initializeMJProvider = void 0;
7
+ const core_1 = require("@memberjunction/core");
8
+ const sqlserver_dataprovider_1 = require("@memberjunction/sqlserver-dataprovider");
9
+ const mssql_1 = __importDefault(require("mssql"));
10
+ const dotenv_1 = __importDefault(require("dotenv"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const config_loader_1 = require("../utils/config-loader");
13
+ // Load environment variables from .env file
14
+ // Note: config-loader.ts also loads dotenv with override:true, but we include it here
15
+ // for completeness in case mj-provider is used standalone
16
+ dotenv_1.default.config({ path: path_1.default.resolve(process.cwd(), '.env'), override: true });
17
+ let isInitialized = false;
18
+ let connectionPool = null;
19
+ async function initializeMJProvider() {
20
+ if (isInitialized) {
21
+ return;
22
+ }
23
+ // Check if MJ provider is already initialized
24
+ if (core_1.Metadata.Provider) {
25
+ console.log('MJ Provider already initialized');
26
+ isInitialized = true;
27
+ return;
28
+ }
29
+ try {
30
+ const config = await (0, config_loader_1.loadMJConfig)();
31
+ // Debug: Check what's in process.env and config
32
+ console.log(`process.env.DB_DATABASE: ${process.env.DB_DATABASE}`);
33
+ console.log(`config.dbDatabase: ${config.dbDatabase}`);
34
+ // Get database config from either legacy or new format
35
+ const dbName = config.database?.name || config.dbDatabase;
36
+ const dbHost = config.database?.host || config.dbHost;
37
+ const dbPort = config.database?.port || config.dbPort;
38
+ const dbUsername = config.database?.username || config.dbUsername;
39
+ const dbPassword = config.database?.password || config.dbPassword;
40
+ const dbSchema = config.database?.schema || config.coreSchema;
41
+ // Validate required configuration
42
+ if (!dbName) {
43
+ throw new Error(`❌ Database configuration missing
44
+
45
+ Problem: Database name not specified in configuration
46
+ Required: Database name must be set in mj.config.cjs
47
+
48
+ Next steps:
49
+ 1. Check your mj.config.cjs file
50
+ 2. Set dbDatabase property to your MJ database name
51
+ 3. Verify other database settings (dbHost, dbUsername, dbPassword)
52
+
53
+ Example configuration:
54
+ module.exports = {
55
+ dbDatabase: 'MemberJunction_Dev',
56
+ dbHost: 'localhost',
57
+ dbUsername: process.env.DB_USERNAME,
58
+ dbPassword: process.env.DB_PASSWORD
59
+ }`);
60
+ }
61
+ if (!dbUsername || !dbPassword) {
62
+ throw new Error(`❌ Database credentials missing
63
+
64
+ Problem: Database username or password not configured
65
+ Required: Both dbUsername and dbPassword must be set
66
+
67
+ Next steps:
68
+ 1. Check your mj.config.cjs file
69
+ 2. Set dbUsername and dbPassword properties
70
+ 3. Verify credentials are correct for your SQL Server
71
+
72
+ For security, use environment variables:
73
+ module.exports = {
74
+ dbUsername: process.env.DB_USERNAME,
75
+ dbPassword: process.env.DB_PASSWORD
76
+ }`);
77
+ }
78
+ // Create SQL Server connection
79
+ console.log(`Connecting to database: ${dbName} on ${dbHost || 'localhost'}`);
80
+ const sqlConfig = {
81
+ server: dbHost || 'localhost',
82
+ port: typeof dbPort === 'string' ? parseInt(dbPort) : (dbPort || 1433),
83
+ database: dbName,
84
+ user: dbUsername,
85
+ password: dbPassword,
86
+ options: {
87
+ encrypt: true,
88
+ trustServerCertificate: true,
89
+ enableArithAbort: true,
90
+ },
91
+ pool: {
92
+ max: 10,
93
+ min: 2,
94
+ idleTimeoutMillis: 30000,
95
+ },
96
+ };
97
+ connectionPool = new mssql_1.default.ConnectionPool(sqlConfig);
98
+ await connectionPool.connect();
99
+ const providerConfig = new sqlserver_dataprovider_1.SQLServerProviderConfigData(connectionPool, dbSchema || '__mj', 180000);
100
+ await (0, sqlserver_dataprovider_1.setupSQLServerClient)(providerConfig);
101
+ // Debug: Log entity counts
102
+ const md = new core_1.Metadata();
103
+ console.log(`Total entities loaded: ${md.Entities.length}`);
104
+ const testEntities = md.Entities.filter(e => e.Name.toLowerCase().includes('test'));
105
+ console.log(`Test-related entities found: ${testEntities.length}`);
106
+ testEntities.forEach(e => console.log(` - ${e.Name}`));
107
+ // Show first 10 entities as sample
108
+ console.log(`First 10 entities loaded:`);
109
+ md.Entities.slice(0, 10).forEach(e => console.log(` - ${e.Name}`));
110
+ isInitialized = true;
111
+ }
112
+ catch (error) {
113
+ if (error?.message?.startsWith('❌')) {
114
+ // Already formatted error, re-throw as is
115
+ throw error;
116
+ }
117
+ else if (error?.code === 'ECONNREFUSED') {
118
+ throw new Error(`❌ Failed to connect to database server
119
+
120
+ Problem: Connection refused to ${error.address}:${error.port}
121
+ Likely cause: Database server not running or incorrect host/port
122
+
123
+ Next steps:
124
+ 1. Verify SQL Server is running on the specified host/port
125
+ 2. Check firewall settings allow connections
126
+ 3. Verify host and port in mj.config.cjs`);
127
+ }
128
+ else if (error?.code === 'ELOGIN') {
129
+ throw new Error(`❌ Database authentication failed
130
+
131
+ Problem: Invalid username or password
132
+ User: ${error.userName}
133
+
134
+ Next steps:
135
+ 1. Verify username and password in mj.config.cjs
136
+ 2. Check user has permission to access the database
137
+ 3. Ensure SQL Server authentication is enabled`);
138
+ }
139
+ else {
140
+ throw new Error(`❌ Failed to initialize MJ data provider
141
+
142
+ Problem: ${error?.message || 'Unknown error'}
143
+ Context: Setting up SQL Server connection and MJ infrastructure
144
+
145
+ Next steps:
146
+ 1. Check your mj.config.cjs database settings
147
+ 2. Verify SQL Server is accessible
148
+ 3. Ensure MJ core packages are built: npm run build
149
+
150
+ For debugging, run with --verbose flag for detailed error information.`);
151
+ }
152
+ }
153
+ }
154
+ exports.initializeMJProvider = initializeMJProvider;
155
+ function getConnectionPool() {
156
+ if (!connectionPool) {
157
+ throw new Error(`❌ MJ Provider not initialized
158
+
159
+ Problem: Database connection not established
160
+ Likely cause: initializeMJProvider() was not called
161
+
162
+ This is an internal error. Please report this issue.`);
163
+ }
164
+ return connectionPool;
165
+ }
166
+ exports.getConnectionPool = getConnectionPool;
167
+ async function closeMJProvider() {
168
+ if (connectionPool) {
169
+ await connectionPool.close();
170
+ connectionPool = null;
171
+ isInitialized = false;
172
+ }
173
+ }
174
+ exports.closeMJProvider = closeMJProvider;
175
+ /**
176
+ * Get a context user for CLI operations
177
+ * Tries to get the "System" user first, falls back to first available user
178
+ */
179
+ async function getContextUser() {
180
+ // Try to get the System user like other CLIs do
181
+ let user = sqlserver_dataprovider_1.UserCache.Instance.UserByName("System", false);
182
+ if (!user) {
183
+ // Fallback to first available user if System user doesn't exist
184
+ if (!sqlserver_dataprovider_1.UserCache.Instance.Users || sqlserver_dataprovider_1.UserCache.Instance.Users.length === 0) {
185
+ throw new Error(`❌ No users found in UserCache
186
+
187
+ Problem: UserCache is empty or not properly initialized
188
+ Likely cause: Database connection or UserCache refresh issue
189
+
190
+ Next steps:
191
+ 1. Verify database connection is working
192
+ 2. Check that Users table has data
193
+ 3. Ensure UserCache.Refresh() was called during initialization
194
+
195
+ This is typically a configuration or database setup issue.`);
196
+ }
197
+ user = sqlserver_dataprovider_1.UserCache.Instance.Users[0];
198
+ }
199
+ if (!user) {
200
+ throw new Error('No valid user found for execution context');
201
+ }
202
+ return user;
203
+ }
204
+ exports.getContextUser = getContextUser;
205
+ //# sourceMappingURL=mj-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mj-provider.js","sourceRoot":"","sources":["../../src/lib/mj-provider.ts"],"names":[],"mappings":"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"}