@testomatio/reporter 2.3.7-beta.3-xml-import β†’ 2.3.7-beta.4-stack-artifacts

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -13,7 +13,7 @@ Testomat.io Reporter (this npm package) supports:
13
13
  - πŸ”Ž [Stack traces](./docs/stacktrace.md) and error messages
14
14
  - πŸ™ [GitHub](./docs/pipes/github.md), [GitLab](./docs/pipes/gitlab.md) & [Bitbucket](./docs/pipes/bitbucket.md) integration
15
15
  - πŸš… Realtime reports
16
- - πŸ—ƒοΈ Other test frameworks supported via [JUnit XML](./docs/junit.md) with [XML import configuration](./docs/xml-imports.md)
16
+ - πŸ—ƒοΈ Other test frameworks supported via [JUNit XML](./docs/junit.md)
17
17
  - πŸšΆβ€β™€οΈ Steps _(work in progress)_
18
18
  - πŸ“„ [Logger](./docs/logger.md) _(work in progress, supports Jest for now)_
19
19
  - ☁️ Custom properties and metadata _(work in progress)_
package/lib/bin/cli.js CHANGED
@@ -145,7 +145,7 @@ program
145
145
  .option('--lang <lang>', 'Language used (python, ruby, java)')
146
146
  .option('--timelimit <time>', 'default time limit in seconds to kill a stuck process')
147
147
  .action(async (pattern, opts) => {
148
- if (!pattern.endsWith('.xml') && !pattern.includes('*')) {
148
+ if (!pattern.endsWith('.xml')) {
149
149
  pattern += '.xml';
150
150
  }
151
151
  let { javaTests, lang } = opts;
@@ -25,7 +25,7 @@ program
25
25
  .option('--timelimit <time>', 'default time limit in seconds to kill a stuck process')
26
26
  .option('--env-file <envfile>', 'Load environment variables from env file')
27
27
  .action(async (pattern, opts) => {
28
- if (!pattern.endsWith('.xml') && !pattern.includes('*')) {
28
+ if (!pattern.endsWith('.xml')) {
29
29
  pattern += '.xml';
30
30
  }
31
31
  let { javaTests, lang } = opts;
@@ -37,10 +37,7 @@ program
37
37
  lang = lang?.toLowerCase();
38
38
  if (javaTests === true || (lang === 'java' && !javaTests))
39
39
  javaTests = 'src/test/java';
40
- const runReader = new xmlReader_js_1.default({
41
- javaTests,
42
- lang,
43
- });
40
+ const runReader = new xmlReader_js_1.default({ javaTests, lang });
44
41
  const files = glob_1.glob.sync(pattern, { cwd: opts.dir || process.cwd() });
45
42
  if (!files.length) {
46
43
  console.log(constants_js_1.APP_PREFIX, `Report can't be created. No XML files found πŸ˜₯`);
@@ -35,7 +35,7 @@ while (i < args.length) {
35
35
  newArgs[0] = 'start';
36
36
  }
37
37
  else if (arg === '--finish') {
38
- // Map --finish to finish command
38
+ // Map --finish to finish command
39
39
  newArgs[0] = 'finish';
40
40
  }
41
41
  else {
@@ -46,8 +46,8 @@ while (i < args.length) {
46
46
  }
47
47
  // Execute the main CLI with mapped arguments
48
48
  const child = (0, node_child_process_1.spawn)(process.execPath, [cliPath, ...newArgs], {
49
- stdio: 'inherit',
49
+ stdio: 'inherit'
50
50
  });
51
- child.on('exit', code => {
51
+ child.on('exit', (code) => {
52
52
  process.exit(code);
53
53
  });
package/lib/client.js CHANGED
@@ -70,8 +70,8 @@ class Client {
70
70
  this.pipeStore = {};
71
71
  this.runId = '';
72
72
  this.queue = Promise.resolve();
73
- // Get package.json path - use a simple approach that works in both environments
74
- const pathToPackageJSON = path_1.default.join(process.cwd(), 'package.json');
73
+ // @ts-ignore this line will be removed in compiled code, because __dirname is defined in commonjs
74
+ const pathToPackageJSON = path_1.default.join(__dirname, '../package.json');
75
75
  try {
76
76
  this.version = JSON.parse(fs_1.default.readFileSync(pathToPackageJSON).toString()).version;
77
77
  console.log(constants_js_1.APP_PREFIX, `Testomatio Reporter v${this.version}`);
@@ -158,17 +158,6 @@ class Client {
158
158
  * @returns {Promise<PipeResult[]>}
159
159
  */
160
160
  async addTestRun(status, testData) {
161
- if (!this.pipes || !this.pipes.length)
162
- this.pipes = await (0, index_js_1.pipesFactory)(this.paramsForPipesFactory || {}, this.pipeStore);
163
- // all pipes disabled, skipping
164
- if (!this.pipes?.filter(p => p.isEnabled).length)
165
- return [];
166
- if (isTestShouldBeExculedFromReport(testData))
167
- return [];
168
- if (status === constants_js_1.STATUS.SKIPPED && process.env.TESTOMATIO_EXCLUDE_SKIPPED) {
169
- debug('Skipping test from report', testData?.title);
170
- return []; // do not log skipped tests
171
- }
172
161
  if (!testData)
173
162
  testData = {
174
163
  title: 'Unknown test',
@@ -181,9 +170,37 @@ class Client {
181
170
  /**
182
171
  * @type {TestData}
183
172
  */
184
- const { rid, error = null, time = 0, example = null, files = [], filesBuffers = [], steps, code = null, title, file, suite_title, suite_id, test_id, timestamp, links, manuallyAttachedArtifacts, overwrite, tags, } = testData;
173
+ const { rid, error = null, steps: originalSteps, title, suite_title, } = testData;
174
+ let steps = originalSteps;
175
+ const uploadedFiles = [];
176
+ const stackArtifactsEnabled = (0, utils_js_1.transformEnvVarToBoolean)(process.env.TESTOMATIO_STACK_ARTIFACTS);
177
+ let formattedSteps;
178
+ if (stackArtifactsEnabled) {
179
+ const timestamp = +new Date;
180
+ formattedSteps = Array.isArray(steps) ? steps.map(step => (0, utils_js_1.formatStep)(step)).flat().join('\n') : '';
181
+ if (error?.stack?.length > 5000) {
182
+ uploadedFiles.push(this.uploader.uploadFileAsBuffer(Buffer.from(error.stack, 'utf8'), [this.runId, rid, `stack_${timestamp}.log`]));
183
+ }
184
+ if (formattedSteps?.length > 10000) {
185
+ uploadedFiles.push(this.uploader.uploadFileAsBuffer(Buffer.from(JSON.stringify(steps, null, 2), 'utf8'), [this.runId, rid, `steps_${timestamp}.json`]));
186
+ }
187
+ }
188
+ if (!this.pipes || !this.pipes.length)
189
+ this.pipes = await (0, index_js_1.pipesFactory)(this.paramsForPipesFactory || {}, this.pipeStore);
190
+ if (!this.pipes?.filter(p => p.isEnabled).length) {
191
+ if (uploadedFiles.length > 0) {
192
+ await Promise.all(uploadedFiles);
193
+ }
194
+ return [];
195
+ }
196
+ if (isTestShouldBeExculedFromReport(testData))
197
+ return [];
198
+ if (status === constants_js_1.STATUS.SKIPPED && process.env.TESTOMATIO_EXCLUDE_SKIPPED) {
199
+ debug('Skipping test from report', testData?.title);
200
+ return [];
201
+ }
202
+ const { time = 0, example = null, files = [], filesBuffers = [], code = null, file, suite_id, test_id, timestamp, links, manuallyAttachedArtifacts, overwrite, tags, } = testData;
185
203
  let { message = '', meta = {} } = testData;
186
- // stringify meta values and limit keys and values length to 255
187
204
  meta = Object.entries(meta)
188
205
  .filter(([, value]) => value !== null && value !== undefined)
189
206
  .reduce((acc, [key, value]) => {
@@ -191,19 +208,29 @@ class Client {
191
208
  acc[key] = value;
192
209
  return acc;
193
210
  }, {});
194
- // Get links from storage using the test context
195
211
  const testContext = suite_title ? `${suite_title} ${title}` : title;
196
212
  let errorFormatted = '';
197
213
  if (error) {
198
214
  errorFormatted += this.formatError(error) || '';
199
215
  message = error?.message;
200
216
  }
201
- // Attach logs
202
- const fullLogs = this.formatLogs({ error: errorFormatted, steps, logs: testData.logs });
203
- // add artifacts
217
+ if (stackArtifactsEnabled) {
218
+ if (error?.stack?.length > 5000)
219
+ errorFormatted = `[Large stack saved as artifact]`;
220
+ if (formattedSteps?.length > 10000)
221
+ steps = null;
222
+ }
223
+ else {
224
+ formattedSteps = Array.isArray(steps) ? steps.map(step => (0, utils_js_1.formatStep)(step)).flat().join('\n') : '';
225
+ }
226
+ let fullLogs = this.formatLogs({ error: errorFormatted, steps, logs: testData.logs });
227
+ if (stackArtifactsEnabled && fullLogs.length > 5000) {
228
+ const timestamp = +new Date;
229
+ uploadedFiles.push(this.uploader.uploadFileAsBuffer(Buffer.from(fullLogs, 'utf8'), [this.runId, rid, `logs_${timestamp}.log`]));
230
+ fullLogs = fullLogs.slice(0, 5000) + '\n\n[Full logs saved as artifact]';
231
+ }
204
232
  if (manuallyAttachedArtifacts?.length)
205
233
  files.push(...manuallyAttachedArtifacts);
206
- const uploadedFiles = [];
207
234
  for (let f of files) {
208
235
  if (!f)
209
236
  continue; // f === null
@@ -329,11 +356,7 @@ class Client {
329
356
  */
330
357
  formatLogs({ error, steps, logs }) {
331
358
  error = error?.trim();
332
- logs = logs
333
- ?.trim()
334
- .split('\n')
335
- .map(l => (0, utils_js_1.truncate)(l))
336
- .join('\n');
359
+ logs = logs?.trim().split('\n').map(l => (0, utils_js_1.truncate)(l)).join('\n');
337
360
  if (Array.isArray(steps)) {
338
361
  steps = steps
339
362
  .map(step => (0, utils_js_1.formatStep)(step))
@@ -1,4 +1,5 @@
1
1
  export default CSharpAdapter;
2
2
  declare class CSharpAdapter extends Adapter {
3
+ getFilePath(t: any): string;
3
4
  }
4
5
  import Adapter from './adapter.js';
@@ -7,57 +7,24 @@ const path_1 = __importDefault(require("path"));
7
7
  const adapter_js_1 = __importDefault(require("./adapter.js"));
8
8
  class CSharpAdapter extends adapter_js_1.default {
9
9
  formatTest(t) {
10
- // Extract example from title if not already present
11
- if (!t.example) {
12
- const exampleMatch = t.title.match(/\((.*?)\)/);
13
- if (exampleMatch) {
14
- // Extract parameters as object with numeric keys for API
15
- const params = exampleMatch[1].split(',').map(param => param.trim());
16
- t.example = {};
17
- params.forEach((param, index) => {
18
- t.example[index] = param;
19
- });
20
- }
21
- }
22
- // Remove parameters from title to avoid duplicates in Test Suite
23
- // The example field will be used for grouping on import
24
- t.title = t.title.replace(/\(.*?\)/, '').trim();
10
+ const title = t.title.replace(/\(.*?\)/, '').trim();
11
+ const example = t.title.match(/\((.*?)\)/);
12
+ if (example)
13
+ t.example = { ...example[1].split(',') };
25
14
  const suite = t.suite_title.split('.');
26
15
  t.suite_title = suite.pop();
27
16
  t.file = namespaceToFileName(t.file);
17
+ t.title = title.trim();
28
18
  return t;
29
19
  }
30
20
  getFilePath(t) {
31
- if (!t.file)
32
- return null;
33
- // Normalize path separators for cross-platform compatibility
34
- let filePath = t.file.replace(/\\/g, '/');
35
- // If file already has .cs extension, use it directly
36
- if (filePath.endsWith('.cs')) {
37
- // Make relative path if it's absolute
38
- if (path_1.default.isAbsolute(filePath)) {
39
- // Try to find project-relative path
40
- const cwd = process.cwd().replace(/\\/g, '/');
41
- if (filePath.startsWith(cwd)) {
42
- filePath = path_1.default.relative(cwd, filePath).replace(/\\/g, '/');
43
- }
44
- }
45
- return filePath;
46
- }
47
- // Convert namespace path to file path
48
- const fileName = namespaceToFileName(filePath);
21
+ const fileName = namespaceToFileName(t.file);
49
22
  return fileName;
50
23
  }
51
24
  }
52
25
  module.exports = CSharpAdapter;
53
26
  function namespaceToFileName(fileName) {
54
- if (!fileName)
55
- return '';
56
- // If already a .cs file path, clean it up
57
- if (fileName.endsWith('.cs')) {
58
- return fileName.replace(/\\/g, '/');
59
- }
60
27
  const fileParts = fileName.split('.');
61
28
  fileParts[fileParts.length - 1] = fileParts[fileParts.length - 1]?.replace(/\$.*/, '');
62
- return `${fileParts.join('/')}.cs`;
29
+ return `${fileParts.join(path_1.default.sep)}.cs`;
63
30
  }
package/lib/pipe/debug.js CHANGED
@@ -18,7 +18,7 @@ class DebugPipe {
18
18
  this.isEnabled = !!process.env.TESTOMATIO_DEBUG || !!process.env.DEBUG;
19
19
  if (this.isEnabled) {
20
20
  this.batch = {
21
- isEnabled: this.params.isBatchEnabled ?? (process.env.TESTOMATIO_DISABLE_BATCH_UPLOAD ? false : true),
21
+ isEnabled: this.params.isBatchEnabled ?? !process.env.TESTOMATIO_DISABLE_BATCH_UPLOAD ?? true,
22
22
  intervalFunction: null,
23
23
  intervalTime: 5000,
24
24
  tests: [],
@@ -23,7 +23,7 @@ if (process.env.TESTOMATIO_RUN)
23
23
  class TestomatioPipe {
24
24
  constructor(params, store) {
25
25
  this.batch = {
26
- isEnabled: params?.isBatchEnabled ?? (process.env.TESTOMATIO_DISABLE_BATCH_UPLOAD ? false : true),
26
+ isEnabled: params?.isBatchEnabled ?? !process.env.TESTOMATIO_DISABLE_BATCH_UPLOAD ?? true,
27
27
  intervalFunction: null, // will be created in createRun by setInterval function
28
28
  intervalTime: 5000, // how often tests are sent
29
29
  tests: [], // array of tests in batch
@@ -60,7 +60,7 @@ class TestomatioPipe {
60
60
  retry: constants_js_1.REPORTER_REQUEST_RETRIES.retriesPerRequest,
61
61
  retryDelay: constants_js_1.REPORTER_REQUEST_RETRIES.retryTimeout,
62
62
  httpMethodsToRetry: ['GET', 'PUT', 'HEAD', 'OPTIONS', 'DELETE', 'POST'],
63
- shouldRetry: error => {
63
+ shouldRetry: (error) => {
64
64
  if (!error.response)
65
65
  return false;
66
66
  switch (error.response?.status) {
@@ -73,8 +73,8 @@ class TestomatioPipe {
73
73
  break;
74
74
  }
75
75
  return error.response?.status >= 401; // Retry on 401+ and 5xx
76
- },
77
- },
76
+ }
77
+ }
78
78
  });
79
79
  this.isEnabled = true;
80
80
  // do not finish this run (for parallel testing)
@@ -193,7 +193,7 @@ class TestomatioPipe {
193
193
  method: 'PUT',
194
194
  url: `/api/reporter/${this.runId}`,
195
195
  data: runParams,
196
- responseType: 'json',
196
+ responseType: 'json'
197
197
  });
198
198
  if (resp.data.artifacts)
199
199
  (0, pipe_utils_js_1.setS3Credentials)(resp.data.artifacts);
@@ -206,7 +206,7 @@ class TestomatioPipe {
206
206
  url: '/api/reporter',
207
207
  data: runParams,
208
208
  maxContentLength: Infinity,
209
- responseType: 'json',
209
+ responseType: 'json'
210
210
  });
211
211
  this.runId = resp.data.uid;
212
212
  this.runUrl = `${this.url}/${resp.data.url.split('/').splice(3).join('/')}`;
@@ -259,17 +259,15 @@ class TestomatioPipe {
259
259
  this.#formatData(data);
260
260
  const json = json_cycle_1.default.stringify(data);
261
261
  debug('Adding test', json);
262
- return this.client
263
- .request({
262
+ return this.client.request({
264
263
  method: 'POST',
265
264
  url: `/api/reporter/${this.runId}/testrun`,
266
265
  data: json,
267
266
  headers: {
268
267
  'Content-Type': 'application/json',
269
268
  },
270
- maxContentLength: Infinity,
271
- })
272
- .catch(err => {
269
+ maxContentLength: Infinity
270
+ }).catch(err => {
273
271
  this.requestFailures++;
274
272
  this.notReportedTestsCount++;
275
273
  if (err.response) {
@@ -314,21 +312,19 @@ class TestomatioPipe {
314
312
  // get tests from batch and clear batch
315
313
  const testsToSend = this.batch.tests.splice(0);
316
314
  debug('πŸ“¨ Batch upload', testsToSend.length, 'tests');
317
- return this.client
318
- .request({
315
+ return this.client.request({
319
316
  method: 'POST',
320
317
  url: `/api/reporter/${this.runId}/testrun`,
321
318
  data: {
322
319
  api_key: this.apiKey,
323
320
  tests: testsToSend,
324
- batch_index: this.batch.batchIndex,
321
+ batch_index: this.batch.batchIndex
325
322
  },
326
323
  headers: {
327
324
  'Content-Type': 'application/json',
328
325
  },
329
- maxContentLength: Infinity,
330
- })
331
- .catch(err => {
326
+ maxContentLength: Infinity
327
+ }).catch(err => {
332
328
  this.requestFailures++;
333
329
  this.notReportedTestsCount += testsToSend.length;
334
330
  if (err.response) {
@@ -412,7 +408,7 @@ class TestomatioPipe {
412
408
  status_event,
413
409
  detach: params.detach,
414
410
  tests: params.tests,
415
- },
411
+ }
416
412
  });
417
413
  if (this.runUrl) {
418
414
  console.log(constants_js_1.APP_PREFIX, 'πŸ“Š Report Saved. Report URL:', picocolors_1.default.magenta(this.runUrl));
@@ -424,7 +420,7 @@ class TestomatioPipe {
424
420
  if (this.runUrl && this.proceed) {
425
421
  const notFinishedMessage = picocolors_1.default.yellow(picocolors_1.default.bold('Run was not finished because of $TESTOMATIO_PROCEED'));
426
422
  console.log(constants_js_1.APP_PREFIX, `πŸ“Š ${notFinishedMessage}. Report URL: ${picocolors_1.default.magenta(this.runUrl)}`);
427
- console.log(constants_js_1.APP_PREFIX, `πŸ›¬ Run to finish it: TESTOMATIO_RUN=${this.runId} npx @testomatio/reporter finish`);
423
+ console.log(constants_js_1.APP_PREFIX, `πŸ›¬ Run to finish it: TESTOMATIO_RUN=${this.runId} npx start-test-run --finish`);
428
424
  }
429
425
  if (this.hasUnmatchedTests) {
430
426
  console.log('');
package/lib/reporter.d.ts CHANGED
@@ -1,3 +1,10 @@
1
+ export { Client };
2
+ export const STATUS: {
3
+ PASSED: string;
4
+ FAILED: string;
5
+ SKIPPED: string;
6
+ FINISHED: string;
7
+ };
1
8
  export const artifact: (data: string | {
2
9
  path: string;
3
10
  type: string;
@@ -80,7 +87,7 @@ export const label: (key: string, value?: string | null) => void;
80
87
  export const linkTest: (...testIds: string[]) => void;
81
88
  export const linkJira: (...jiraIds: string[]) => void;
82
89
  declare namespace _default {
83
- let testomatioLogger: {
90
+ export let testomatioLogger: {
84
91
  "__#13@#originalUserLogger": {
85
92
  assert(condition?: boolean, ...data: any[]): void;
86
93
  assert(value: any, message?: string, ...optionalParams: any[]): void;
@@ -148,13 +155,13 @@ declare namespace _default {
148
155
  }): void;
149
156
  prettyObjects: boolean;
150
157
  };
151
- let artifact: (data: string | {
158
+ export let artifact: (data: string | {
152
159
  path: string;
153
160
  type: string;
154
161
  name: string;
155
162
  }, context?: any) => void;
156
- let log: (...args: any[]) => void;
157
- let logger: {
163
+ export let log: (...args: any[]) => void;
164
+ export let logger: {
158
165
  "__#13@#originalUserLogger": {
159
166
  assert(condition?: boolean, ...data: any[]): void;
160
167
  assert(value: any, message?: string, ...optionalParams: any[]): void;
@@ -222,13 +229,15 @@ declare namespace _default {
222
229
  }): void;
223
230
  prettyObjects: boolean;
224
231
  };
225
- let meta: (keyValue: {
232
+ export let meta: (keyValue: {
226
233
  [key: string]: string;
227
234
  } | string, value?: string | null) => void;
228
- let step: (message: string) => void;
229
- let label: (key: string, value?: string | null) => void;
230
- let linkTest: (...testIds: string[]) => void;
231
- let linkJira: (...jiraIds: string[]) => void;
235
+ export let step: (message: string) => void;
236
+ export let label: (key: string, value?: string | null) => void;
237
+ export let linkTest: (...testIds: string[]) => void;
238
+ export let linkJira: (...jiraIds: string[]) => void;
239
+ export { Client as TestomatioClient };
240
+ export { STATUS };
232
241
  }
233
242
  export default _default;
234
243
  export type ArtifactFunction = typeof import("./reporter-functions.js").default.artifact;
@@ -237,3 +246,4 @@ export type LoggerService = typeof import("./services/index.js").services.logger
237
246
  export type MetaFunction = typeof import("./reporter-functions.js").default.keyValue;
238
247
  export type StepFunction = typeof import("./reporter-functions.js").default.step;
239
248
  export type LabelFunction = typeof import("./reporter-functions.js").default.label;
249
+ import Client from './client.js';
package/lib/reporter.js CHANGED
@@ -1,13 +1,48 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  var __importDefault = (this && this.__importDefault) || function (mod) {
3
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
37
  };
5
38
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.linkJira = exports.linkTest = exports.label = exports.step = exports.meta = exports.logger = exports.log = exports.artifact = void 0;
7
- // import TestomatClient from './client.js';
8
- // import * as TRConstants from './constants.js';
39
+ exports.linkJira = exports.linkTest = exports.label = exports.step = exports.meta = exports.logger = exports.log = exports.artifact = exports.STATUS = exports.Client = void 0;
40
+ const client_js_1 = __importDefault(require("./client.js"));
41
+ exports.Client = client_js_1.default;
42
+ const TestomatioConstants = __importStar(require("./constants.js"));
9
43
  const index_js_1 = require("./services/index.js");
10
44
  const reporter_functions_js_1 = __importDefault(require("./reporter-functions.js"));
45
+ exports.STATUS = TestomatioConstants.STATUS;
11
46
  exports.artifact = reporter_functions_js_1.default.artifact;
12
47
  exports.log = reporter_functions_js_1.default.log;
13
48
  exports.logger = index_js_1.services.logger;
@@ -37,6 +72,6 @@ module.exports = {
37
72
  label: reporter_functions_js_1.default.label,
38
73
  linkTest: reporter_functions_js_1.default.linkTest,
39
74
  linkJira: reporter_functions_js_1.default.linkJira,
40
- // TestomatClient,
41
- // TRConstants,
75
+ TestomatioClient: client_js_1.default,
76
+ STATUS: exports.STATUS,
42
77
  };