@elisra-devops/docgen-data-provider 1.63.12 → 1.67.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 (94) hide show
  1. package/.github/workflows/ci.yml +26 -9
  2. package/.github/workflows/release.yml +9 -10
  3. package/bin/helpers/tfs.d.ts +3 -0
  4. package/bin/helpers/tfs.js +44 -7
  5. package/bin/helpers/tfs.js.map +1 -1
  6. package/bin/modules/GitDataProvider.d.ts +10 -0
  7. package/bin/modules/GitDataProvider.js +10 -0
  8. package/bin/modules/GitDataProvider.js.map +1 -1
  9. package/bin/modules/MangementDataProvider.js +7 -1
  10. package/bin/modules/MangementDataProvider.js.map +1 -1
  11. package/bin/modules/TestDataProvider.js +0 -1
  12. package/bin/modules/TestDataProvider.js.map +1 -1
  13. package/bin/modules/TicketsDataProvider.d.ts +63 -27
  14. package/bin/modules/TicketsDataProvider.js +226 -122
  15. package/bin/modules/TicketsDataProvider.js.map +1 -1
  16. package/bin/tests/helpers/helper.test.js +279 -0
  17. package/bin/tests/helpers/helper.test.js.map +1 -0
  18. package/bin/{helpers/test → tests/helpers}/tfs.test.js +312 -49
  19. package/bin/tests/helpers/tfs.test.js.map +1 -0
  20. package/bin/tests/index.test.js +25 -0
  21. package/bin/tests/index.test.js.map +1 -0
  22. package/bin/tests/models/tfs-data.test.js +160 -0
  23. package/bin/tests/models/tfs-data.test.js.map +1 -0
  24. package/bin/{modules/test → tests/modules}/JfrogDataProvider.test.js +9 -9
  25. package/bin/tests/modules/JfrogDataProvider.test.js.map +1 -0
  26. package/bin/tests/modules/ResultDataProvider.test.js +1942 -0
  27. package/bin/tests/modules/ResultDataProvider.test.js.map +1 -0
  28. package/bin/tests/modules/gitDataProvider.test.js +1888 -0
  29. package/bin/tests/modules/gitDataProvider.test.js.map +1 -0
  30. package/bin/{modules/test → tests/modules}/managmentDataProvider.test.js +39 -31
  31. package/bin/tests/modules/managmentDataProvider.test.js.map +1 -0
  32. package/bin/tests/modules/pipelineDataProvider.test.d.ts +1 -0
  33. package/bin/tests/modules/pipelineDataProvider.test.js +783 -0
  34. package/bin/tests/modules/pipelineDataProvider.test.js.map +1 -0
  35. package/bin/tests/modules/testDataProvider.test.d.ts +1 -0
  36. package/bin/tests/modules/testDataProvider.test.js +717 -0
  37. package/bin/tests/modules/testDataProvider.test.js.map +1 -0
  38. package/bin/tests/modules/ticketsDataProvider.test.d.ts +1 -0
  39. package/bin/tests/modules/ticketsDataProvider.test.js +1681 -0
  40. package/bin/tests/modules/ticketsDataProvider.test.js.map +1 -0
  41. package/bin/tests/utils/DataProviderUtils.test.d.ts +1 -0
  42. package/bin/tests/utils/DataProviderUtils.test.js +61 -0
  43. package/bin/tests/utils/DataProviderUtils.test.js.map +1 -0
  44. package/bin/tests/utils/testStepParserHelper.test.d.ts +1 -0
  45. package/bin/tests/utils/testStepParserHelper.test.js +359 -0
  46. package/bin/tests/utils/testStepParserHelper.test.js.map +1 -0
  47. package/package.json +10 -1
  48. package/src/helpers/tfs.ts +51 -7
  49. package/src/modules/GitDataProvider.ts +10 -0
  50. package/src/modules/MangementDataProvider.ts +6 -1
  51. package/src/modules/TestDataProvider.ts +0 -1
  52. package/src/modules/TicketsDataProvider.ts +311 -151
  53. package/src/tests/helpers/helper.test.ts +337 -0
  54. package/src/tests/helpers/tfs.test.ts +1092 -0
  55. package/src/tests/index.test.ts +28 -0
  56. package/src/tests/models/tfs-data.test.ts +203 -0
  57. package/src/tests/modules/JfrogDataProvider.test.ts +167 -0
  58. package/src/tests/modules/ResultDataProvider.test.ts +2571 -0
  59. package/src/tests/modules/gitDataProvider.test.ts +2628 -0
  60. package/src/{modules/test → tests/modules}/managmentDataProvider.test.ts +63 -32
  61. package/src/tests/modules/pipelineDataProvider.test.ts +1038 -0
  62. package/src/tests/modules/testDataProvider.test.ts +1046 -0
  63. package/src/tests/modules/ticketsDataProvider.test.ts +2204 -0
  64. package/src/tests/utils/DataProviderUtils.test.ts +76 -0
  65. package/src/tests/utils/testStepParserHelper.test.ts +437 -0
  66. package/tsconfig.json +1 -0
  67. package/bin/helpers/test/tfs.test.js.map +0 -1
  68. package/bin/modules/test/JfrogDataProvider.test.js.map +0 -1
  69. package/bin/modules/test/ResultDataProvider.test.js +0 -444
  70. package/bin/modules/test/ResultDataProvider.test.js.map +0 -1
  71. package/bin/modules/test/gitDataProvider.test.js +0 -433
  72. package/bin/modules/test/gitDataProvider.test.js.map +0 -1
  73. package/bin/modules/test/managmentDataProvider.test.js.map +0 -1
  74. package/bin/modules/test/pipelineDataProvider.test.js +0 -237
  75. package/bin/modules/test/pipelineDataProvider.test.js.map +0 -1
  76. package/bin/modules/test/testDataProvider.test.js +0 -234
  77. package/bin/modules/test/testDataProvider.test.js.map +0 -1
  78. package/bin/modules/test/ticketsDataProvider.test.js +0 -322
  79. package/bin/modules/test/ticketsDataProvider.test.js.map +0 -1
  80. package/src/helpers/test/tfs.test.ts +0 -748
  81. package/src/modules/test/JfrogDataProvider.test.ts +0 -171
  82. package/src/modules/test/ResultDataProvider.test.ts +0 -542
  83. package/src/modules/test/gitDataProvider.test.ts +0 -691
  84. package/src/modules/test/pipelineDataProvider.test.ts +0 -292
  85. package/src/modules/test/testDataProvider.test.ts +0 -318
  86. package/src/modules/test/ticketsDataProvider.test.ts +0 -434
  87. /package/bin/{helpers/test/tfs.test.d.ts → tests/helpers/helper.test.d.ts} +0 -0
  88. /package/bin/{modules/test/JfrogDataProvider.test.d.ts → tests/helpers/tfs.test.d.ts} +0 -0
  89. /package/bin/{modules/test/ResultDataProvider.test.d.ts → tests/index.test.d.ts} +0 -0
  90. /package/bin/{modules/test/gitDataProvider.test.d.ts → tests/models/tfs-data.test.d.ts} +0 -0
  91. /package/bin/{modules/test/managmentDataProvider.test.d.ts → tests/modules/JfrogDataProvider.test.d.ts} +0 -0
  92. /package/bin/{modules/test/pipelineDataProvider.test.d.ts → tests/modules/ResultDataProvider.test.d.ts} +0 -0
  93. /package/bin/{modules/test/testDataProvider.test.d.ts → tests/modules/gitDataProvider.test.d.ts} +0 -0
  94. /package/bin/{modules/test/ticketsDataProvider.test.d.ts → tests/modules/managmentDataProvider.test.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elisra-devops/docgen-data-provider",
3
- "version": "1.63.12",
3
+ "version": "1.67.0",
4
4
  "description": "A document generator data provider, aimed to retrive data from azure devops",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,8 +19,10 @@
19
19
  "@types/caseless": "^0.12.5",
20
20
  "@types/istanbul-lib-report": "^3.0.3",
21
21
  "@types/jest": "^29.5.12",
22
+ "@types/node": "^24.10.1",
22
23
  "@types/tough-cookie": "^4.0.5",
23
24
  "@types/yargs-parser": "^21.0.3",
25
+ "baseline-browser-mapping": "^2.9.0",
24
26
  "dotenv": "^16.4.5",
25
27
  "jest": "^29.7.0",
26
28
  "jest-junit": "^16.0.0",
@@ -38,6 +40,13 @@
38
40
  },
39
41
  "jest": {
40
42
  "preset": "ts-jest",
43
+ "testMatch": [
44
+ "<rootDir>/src/tests/**/*.test.ts"
45
+ ],
46
+ "collectCoverageFrom": [
47
+ "src/**/*.ts",
48
+ "!src/tests/**"
49
+ ],
41
50
  "testPathIgnorePatterns": [
42
51
  "/bin/"
43
52
  ],
@@ -31,13 +31,53 @@ export class TFSServices {
31
31
  }
32
32
  );
33
33
 
34
+ private static getBearerToken(rawToken: string): string | null {
35
+ const token = String(rawToken || '').trim();
36
+ if (!token) return null;
37
+ if (/^bearer:/i.test(token)) {
38
+ return token.slice('bearer:'.length).trim() || null;
39
+ }
40
+ const m = /^bearer\s+(.+)$/i.exec(token);
41
+ if (m?.[1]) return m[1].trim() || null;
42
+ return null;
43
+ }
44
+
45
+ private static addAuthHeader(config: AxiosRequestConfig, headerName: string, value: string) {
46
+ const existing = (config.headers ?? {}) as any;
47
+ if (
48
+ existing &&
49
+ typeof existing === 'object' &&
50
+ existing.headers &&
51
+ typeof existing.headers === 'object'
52
+ ) {
53
+ config.headers = { ...existing, headers: { ...existing.headers, [headerName]: value } };
54
+ return;
55
+ }
56
+ config.headers = { ...existing, [headerName]: value };
57
+ }
58
+
59
+ private static applyAuth(config: AxiosRequestConfig, rawToken: string) {
60
+ const bearer = this.getBearerToken(rawToken);
61
+ if (bearer) {
62
+ this.addAuthHeader(config, 'Authorization', `Bearer ${bearer}`);
63
+ delete (config as any).auth;
64
+ return;
65
+ }
66
+
67
+ const token = String(rawToken || '').trim();
68
+ if (token) {
69
+ (config as any).auth = { username: '', password: token };
70
+ }
71
+ }
72
+
34
73
  public static async downloadZipFile(url: string, pat: string): Promise<any> {
35
74
  try {
36
- const res = await this.axiosInstance.request({
75
+ const config: AxiosRequestConfig = {
37
76
  url: url,
38
77
  headers: { 'Content-Type': 'application/zip' },
39
- auth: { username: '', password: pat },
40
- });
78
+ };
79
+ this.applyAuth(config, pat);
80
+ const res = await this.axiosInstance.request(config);
41
81
  return res;
42
82
  } catch (e) {
43
83
  logger.error(`error download zip file , url : ${url}`);
@@ -56,11 +96,12 @@ export class TFSServices {
56
96
  const config: AxiosRequestConfig = {
57
97
  headers: customHeaders,
58
98
  method: requestMethod,
59
- auth: { username: '', password: pat },
60
99
  data: data,
61
100
  responseType: 'arraybuffer', // Important for binary data
62
101
  };
63
102
 
103
+ this.applyAuth(config, pat);
104
+
64
105
  return this.executeWithRetry(url, config, printError, (response) => {
65
106
  // Convert binary data to Base64
66
107
  const base64String = Buffer.from(response.data, 'binary').toString('base64');
@@ -87,11 +128,12 @@ export class TFSServices {
87
128
  const config: AxiosRequestConfig = {
88
129
  headers: customHeaders,
89
130
  method: requestMethod,
90
- auth: { username: '', password: pat },
91
131
  data: data,
92
132
  timeout: requestMethod.toLocaleLowerCase() === 'get' ? 10000 : undefined, // More reasonable timeout
93
133
  };
94
134
 
135
+ this.applyAuth(config, pat);
136
+
95
137
  return this.executeWithRetry(cleanUrl, config, printError, (response) => {
96
138
  // Direct return of data without extra JSON parsing
97
139
  return response.data;
@@ -112,11 +154,12 @@ export class TFSServices {
112
154
  const config: AxiosRequestConfig = {
113
155
  headers: customHeaders,
114
156
  method: requestMethod,
115
- auth: { username: '', password: pat },
116
157
  data: data,
117
158
  timeout: requestMethod.toLocaleLowerCase() === 'get' ? 10000 : undefined,
118
159
  };
119
160
 
161
+ this.applyAuth(config, pat);
162
+
120
163
  return this.executeWithRetry(cleanUrl, config, printError, (response) => {
121
164
  return { data: response.data, headers: response.headers };
122
165
  });
@@ -149,10 +192,11 @@ export class TFSServices {
149
192
  url: url,
150
193
  headers: customHeaders,
151
194
  method: requestMethod,
152
- auth: { username: '', password: pat },
153
195
  data: data,
154
196
  };
155
197
 
198
+ this.applyAuth(config, pat);
199
+
156
200
  try {
157
201
  const result = await this.axiosInstance.request(config);
158
202
  return result;
@@ -74,6 +74,16 @@ export default class GitDataProvider {
74
74
  return null;
75
75
  } //GetBranch
76
76
 
77
+ /**
78
+ * Gets a file from a Git repository.
79
+ *
80
+ * @param projectName - The name of the project.
81
+ * @param repoId - The ID of the repository.
82
+ * @param fileName - The name of the file to retrieve.
83
+ * @param version - The version descriptor for the file.
84
+ * @param gitRepoUrl - Optional URL of the Git repository.
85
+ * @returns The file content as a string.
86
+ */
77
87
  async GetFileFromGitRepo(
78
88
  projectName: string,
79
89
  repoId: string,
@@ -27,12 +27,17 @@ export default class MangementDataProvider {
27
27
  async GetProjectByName(projectName: string): Promise<any> {
28
28
  try {
29
29
  let projects: any = await this.GetProjects();
30
+ // Safely handle cases where the projects payload is missing or malformed
31
+ if (!projects || !Array.isArray(projects.value)) {
32
+ logger.error('Projects response does not contain a valid value array');
33
+ return {};
34
+ }
30
35
  for (let i = 0; i < projects.value.length; i++) {
31
36
  if (projects.value[i].name === projectName) return projects.value[i];
32
37
  }
33
38
  return {};
34
39
  } catch (err) {
35
- console.log(err);
40
+ logger.error(err);
36
41
  return {};
37
42
  }
38
43
  }
@@ -381,7 +381,6 @@ export default class TestDataProvider {
381
381
  }
382
382
  } catch (fetchError) {
383
383
  // Log error silently or handle as needed
384
- console.error('Failed to fetch relation content', fetchError);
385
384
  logger.error(`Failed to fetch relation content for URL ${relation.url}: ${fetchError}`);
386
385
  }
387
386
  }