@elisra-devops/docgen-data-provider 1.75.0 → 1.76.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.
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const logger_1 = require("./logger");
4
+ class MewpExternalIngestionUtils {
5
+ constructor(externalTableUtils) {
6
+ this.externalTableUtils = externalTableUtils;
7
+ }
8
+ async loadExternalBugsByTestCase(externalBugsFile, adapters) {
9
+ const rows = await this.externalTableUtils.loadExternalTableRows(externalBugsFile, 'bugs');
10
+ if (rows.length === 0)
11
+ return new Map();
12
+ const map = new Map();
13
+ let parsedRows = 0;
14
+ for (const row of rows) {
15
+ const testCaseId = this.toPositiveNumber(this.externalTableUtils.readExternalCell(row, [
16
+ 'Elisra_SortIndex',
17
+ 'Elisra SortIndex',
18
+ 'ElisraSortIndex',
19
+ ]));
20
+ if (!testCaseId)
21
+ continue;
22
+ const requirementBaseKey = adapters.toRequirementKey(adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['SR'])));
23
+ if (!requirementBaseKey)
24
+ continue;
25
+ const bugId = this.toPositiveNumber(this.externalTableUtils.readExternalCell(row, [
26
+ 'TargetWorkItemId',
27
+ 'Bug ID',
28
+ 'BugId',
29
+ 'Links.TargetWorkItem.WorkItemId',
30
+ 'Links TargetWorkItem WorkItemId',
31
+ ])) || 0;
32
+ if (!bugId)
33
+ continue;
34
+ const bugState = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['TargetState', 'State']));
35
+ if (!adapters.isExternalStateInScope(bugState, 'bug'))
36
+ continue;
37
+ const bugTitle = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['Bug Title', 'Title', 'Links.TargetWorkItem.Title']));
38
+ const bugResponsibilityRaw = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, [
39
+ 'Responsibility',
40
+ 'Division',
41
+ 'SAPWBS',
42
+ 'TargetSapWbs',
43
+ ]));
44
+ const bug = {
45
+ id: bugId,
46
+ title: bugTitle,
47
+ responsibility: adapters.resolveBugResponsibility({
48
+ 'Custom.SAPWBS': bugResponsibilityRaw,
49
+ }),
50
+ requirementBaseKey,
51
+ };
52
+ if (!map.has(testCaseId))
53
+ map.set(testCaseId, []);
54
+ map.get(testCaseId).push(bug);
55
+ parsedRows += 1;
56
+ }
57
+ const deduped = new Map();
58
+ for (const [testCaseId, bugs] of map.entries()) {
59
+ const byId = new Map();
60
+ for (const bug of bugs || []) {
61
+ const bugId = Number((bug === null || bug === void 0 ? void 0 : bug.id) || 0);
62
+ if (!Number.isFinite(bugId) || bugId <= 0)
63
+ continue;
64
+ const baseKey = String((bug === null || bug === void 0 ? void 0 : bug.requirementBaseKey) || '').trim();
65
+ const compositeKey = `${bugId}|${baseKey}`;
66
+ const existing = byId.get(compositeKey);
67
+ if (!existing) {
68
+ byId.set(compositeKey, bug);
69
+ continue;
70
+ }
71
+ byId.set(compositeKey, {
72
+ id: bugId,
73
+ requirementBaseKey: baseKey,
74
+ title: String((existing === null || existing === void 0 ? void 0 : existing.title) || (bug === null || bug === void 0 ? void 0 : bug.title) || '').trim(),
75
+ responsibility: String((existing === null || existing === void 0 ? void 0 : existing.responsibility) || (bug === null || bug === void 0 ? void 0 : bug.responsibility) || '').trim(),
76
+ });
77
+ }
78
+ deduped.set(testCaseId, [...byId.values()].sort((a, b) => {
79
+ const idCompare = Number(a.id) - Number(b.id);
80
+ if (idCompare !== 0)
81
+ return idCompare;
82
+ return String(a.requirementBaseKey || '').localeCompare(String(b.requirementBaseKey || ''));
83
+ }));
84
+ }
85
+ if (parsedRows === 0) {
86
+ logger_1.default.warn(`External bugs source was loaded but no valid rows were parsed. ` +
87
+ `Expected columns include Elisra_SortIndex, SR and bug ID fields.`);
88
+ }
89
+ return deduped;
90
+ }
91
+ async loadExternalL3L4ByBaseKey(externalL3L4File, adapters) {
92
+ var _a;
93
+ const rows = await this.externalTableUtils.loadExternalTableRows(externalL3L4File, 'l3l4');
94
+ if (rows.length === 0)
95
+ return new Map();
96
+ const linksByBaseKey = new Map();
97
+ const addLink = (baseKey, level, id, title) => {
98
+ if (!baseKey || !id)
99
+ return;
100
+ if (!linksByBaseKey.has(baseKey)) {
101
+ linksByBaseKey.set(baseKey, new Map());
102
+ }
103
+ const idKey = String(id).trim();
104
+ const dedupeKey = `${level}:${idKey}`;
105
+ linksByBaseKey.get(baseKey).set(dedupeKey, {
106
+ id: idKey,
107
+ title: String(title || '').trim(),
108
+ level,
109
+ });
110
+ };
111
+ let parsedRows = 0;
112
+ for (const row of rows) {
113
+ const srRaw = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['SR']));
114
+ const baseKey = adapters.toRequirementKey(srRaw);
115
+ if (!baseKey)
116
+ continue;
117
+ const requirementSapWbsFallback = ((_a = adapters.resolveRequirementSapWbsByBaseKey) === null || _a === void 0 ? void 0 : _a.call(adapters, baseKey)) || '';
118
+ const area = adapters
119
+ .toComparableText(this.externalTableUtils.readExternalCell(row, ['AREA 34', 'AREA34']))
120
+ .toLowerCase();
121
+ const targetIdLevel3 = this.toPositiveNumber(this.externalTableUtils.readExternalCell(row, [
122
+ 'TargetWorkItemId Level 3',
123
+ 'TargetWorkItemIdLevel 3',
124
+ 'TargetWorkItemIdLevel3',
125
+ ]));
126
+ const targetTitleLevel3 = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, [
127
+ 'TargetTitleLevel3',
128
+ 'TargetTitleLevel 3',
129
+ 'TargetTitle Level 3',
130
+ ]));
131
+ const targetStateLevel3 = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['TargetStateLevel 3', 'TargetStateLevel3']));
132
+ const targetSapWbsLevel3 = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, [
133
+ 'TargetSapWbsLevel 3',
134
+ 'TargetSapWbsLevel3',
135
+ 'TargetSapWbs Level 3',
136
+ ]));
137
+ const targetIdLevel4 = this.toPositiveNumber(this.externalTableUtils.readExternalCell(row, [
138
+ 'TargetWorkItemIdLevel 4',
139
+ 'TargetWorkItemId Level 4',
140
+ 'TargetWorkItemIdLevel4',
141
+ ]));
142
+ const targetTitleLevel4 = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, [
143
+ 'TargetTitleLevel4',
144
+ 'TargetTitleLevel 4',
145
+ 'TargetTitle Level 4',
146
+ ]));
147
+ const targetStateLevel4 = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, ['TargetStateLevel 4', 'TargetStateLevel4']));
148
+ const targetSapWbsLevel4 = adapters.toComparableText(this.externalTableUtils.readExternalCell(row, [
149
+ 'TargetSapWbsLevel 4',
150
+ 'TargetSapWbsLevel4',
151
+ 'TargetSapWbs Level 4',
152
+ ]));
153
+ if (area.includes('level 4')) {
154
+ const effectiveSapWbsLevel3 = targetSapWbsLevel3 || requirementSapWbsFallback;
155
+ if (targetIdLevel3 &&
156
+ adapters.isExternalStateInScope(targetStateLevel3, 'requirement') &&
157
+ !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
158
+ addLink(baseKey, 'L4', targetIdLevel3, targetTitleLevel3);
159
+ }
160
+ parsedRows += 1;
161
+ continue;
162
+ }
163
+ const effectiveSapWbsLevel3 = targetSapWbsLevel3 || requirementSapWbsFallback;
164
+ if (targetIdLevel3 &&
165
+ adapters.isExternalStateInScope(targetStateLevel3, 'requirement') &&
166
+ !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel3)) {
167
+ addLink(baseKey, 'L3', targetIdLevel3, targetTitleLevel3);
168
+ }
169
+ const effectiveSapWbsLevel4 = targetSapWbsLevel4 || requirementSapWbsFallback;
170
+ if (targetIdLevel4 &&
171
+ adapters.isExternalStateInScope(targetStateLevel4, 'requirement') &&
172
+ !adapters.isExcludedL3L4BySapWbs(effectiveSapWbsLevel4)) {
173
+ addLink(baseKey, 'L4', targetIdLevel4, targetTitleLevel4);
174
+ }
175
+ parsedRows += 1;
176
+ }
177
+ const out = new Map();
178
+ for (const [baseKey, linksById] of linksByBaseKey.entries()) {
179
+ out.set(baseKey, [...linksById.values()].sort((a, b) => {
180
+ if (a.level !== b.level)
181
+ return a.level === 'L3' ? -1 : 1;
182
+ return a.id.localeCompare(b.id);
183
+ }));
184
+ }
185
+ if (parsedRows === 0) {
186
+ logger_1.default.warn(`External L3/L4 source was loaded but no valid rows were parsed. ` +
187
+ `Expected columns include SR, AREA 34, target IDs/titles/states.`);
188
+ }
189
+ return out;
190
+ }
191
+ toPositiveNumber(value) {
192
+ const parsed = Number(String(value || '').replace(/[^\d]/g, ''));
193
+ return Number.isFinite(parsed) && parsed > 0 ? parsed : 0;
194
+ }
195
+ }
196
+ exports.default = MewpExternalIngestionUtils;
197
+ //# sourceMappingURL=mewpExternalIngestionUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mewpExternalIngestionUtils.js","sourceRoot":"","sources":["../../src/utils/mewpExternalIngestionUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import type { MewpExternalFileRef, MewpExternalTableValidationResult } from '../models/mewp-reporting';
2
+ export type MewpExternalTableType = 'bugs' | 'l3l4';
3
+ export interface MewpExternalRowsWithMeta {
4
+ rows: Array<Record<string, any>>;
5
+ meta: {
6
+ sourceName: string;
7
+ headerRow: 'A3' | 'A1' | '';
8
+ matchedRequiredColumns: number;
9
+ totalRequiredColumns: number;
10
+ };
11
+ }
12
+ export declare class MewpExternalFileValidationError extends Error {
13
+ readonly statusCode: number;
14
+ readonly code: string;
15
+ readonly details: MewpExternalTableValidationResult;
16
+ constructor(message: string, details: MewpExternalTableValidationResult);
17
+ }
18
+ export default class MewpExternalTableUtils {
19
+ private static readonly EXTERNAL_BUGS_REQUIRED_COLUMNS;
20
+ private static readonly EXTERNAL_L3L4_REQUIRED_COLUMNS;
21
+ private static readonly ALLOWED_EXTERNAL_FILE_EXTENSIONS;
22
+ private static readonly DEFAULT_EXTERNAL_FILE_MAX_BYTES;
23
+ getRequiredColumnLabels(tableType: MewpExternalTableType): string[];
24
+ getRequiredColumnCount(tableType: MewpExternalTableType): number;
25
+ readExternalCell(row: Record<string, any>, aliases: string[]): any;
26
+ loadExternalTableRows(source: MewpExternalFileRef | null | undefined, tableType: MewpExternalTableType): Promise<Array<Record<string, any>>>;
27
+ loadExternalTableRowsWithMeta(source: MewpExternalFileRef | null | undefined, tableType: MewpExternalTableType): Promise<MewpExternalRowsWithMeta>;
28
+ private getRequiredColumns;
29
+ private createMewpExternalValidationError;
30
+ private resolveMewpExternalSourceUrl;
31
+ private validateMewpExternalSourceIsolation;
32
+ private extractMewpBucketAndObjectFromUrl;
33
+ private resolveMewpExternalSourceExtension;
34
+ private resolveMewpExternalMaxFileSize;
35
+ private normalizeExternalColumnKey;
36
+ }
@@ -0,0 +1,320 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MewpExternalFileValidationError = void 0;
4
+ const axios_1 = require("axios");
5
+ const XLSX = require("xlsx");
6
+ const logger_1 = require("./logger");
7
+ class MewpExternalFileValidationError extends Error {
8
+ constructor(message, details) {
9
+ super(message);
10
+ this.name = 'MewpExternalFileValidationError';
11
+ this.statusCode = 422;
12
+ this.code = 'MEWP_EXTERNAL_FILE_VALIDATION_FAILED';
13
+ this.details = details;
14
+ }
15
+ }
16
+ exports.MewpExternalFileValidationError = MewpExternalFileValidationError;
17
+ class MewpExternalTableUtils {
18
+ getRequiredColumnLabels(tableType) {
19
+ return this.getRequiredColumns(tableType).map((item) => item.label);
20
+ }
21
+ getRequiredColumnCount(tableType) {
22
+ return this.getRequiredColumns(tableType).length;
23
+ }
24
+ readExternalCell(row, aliases) {
25
+ if (!row || typeof row !== 'object')
26
+ return '';
27
+ const byNormalizedKey = new Map();
28
+ for (const [key, value] of Object.entries(row)) {
29
+ byNormalizedKey.set(this.normalizeExternalColumnKey(key), value);
30
+ }
31
+ for (const alias of aliases) {
32
+ const value = byNormalizedKey.get(this.normalizeExternalColumnKey(alias));
33
+ if (value !== undefined && value !== null && String(value).trim() !== '') {
34
+ return value;
35
+ }
36
+ }
37
+ return '';
38
+ }
39
+ async loadExternalTableRows(source, tableType) {
40
+ const { rows } = await this.loadExternalTableRowsWithMeta(source, tableType);
41
+ return rows;
42
+ }
43
+ async loadExternalTableRowsWithMeta(source, tableType) {
44
+ var _a, _b;
45
+ const sourceName = String((source === null || source === void 0 ? void 0 : source.name) || (source === null || source === void 0 ? void 0 : source.objectName) || (source === null || source === void 0 ? void 0 : source.text) || (source === null || source === void 0 ? void 0 : source.url) || '').trim();
46
+ const sourceUrl = this.resolveMewpExternalSourceUrl(source);
47
+ const extension = this.resolveMewpExternalSourceExtension(source);
48
+ const sourceIsolationCheck = this.validateMewpExternalSourceIsolation(source, sourceUrl);
49
+ const requiredColumns = this.getRequiredColumns(tableType);
50
+ if (!sourceName && !sourceUrl) {
51
+ return {
52
+ rows: [],
53
+ meta: {
54
+ sourceName: '',
55
+ headerRow: '',
56
+ matchedRequiredColumns: 0,
57
+ totalRequiredColumns: requiredColumns.length,
58
+ },
59
+ };
60
+ }
61
+ if (!sourceUrl) {
62
+ throw this.createMewpExternalValidationError(tableType, sourceName || 'unknown', '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), `Missing file URL/object reference for '${sourceName || tableType}'`);
63
+ }
64
+ if (!sourceIsolationCheck.valid) {
65
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), sourceIsolationCheck.message);
66
+ }
67
+ if (!MewpExternalTableUtils.ALLOWED_EXTERNAL_FILE_EXTENSIONS.has(extension)) {
68
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), `Unsupported file type '${extension || 'unknown'}'. Allowed: .xlsx, .xls, .csv`);
69
+ }
70
+ const parseRows = (sheet, startRowZeroBased) => XLSX.utils.sheet_to_json(sheet, {
71
+ defval: '',
72
+ raw: false,
73
+ range: startRowZeroBased,
74
+ });
75
+ const parseHeaderKeys = (sheet, startRowZeroBased) => {
76
+ const matrix = XLSX.utils.sheet_to_json(sheet, {
77
+ header: 1,
78
+ raw: false,
79
+ range: startRowZeroBased,
80
+ });
81
+ const firstRow = Array.isArray(matrix === null || matrix === void 0 ? void 0 : matrix[0]) ? matrix[0] : [];
82
+ const normalized = firstRow
83
+ .map((item) => this.normalizeExternalColumnKey(item))
84
+ .filter((item) => !!item);
85
+ return new Set(normalized);
86
+ };
87
+ const validateHeaders = (headerKeys) => {
88
+ const missingLabels = [];
89
+ let matched = 0;
90
+ for (const requiredColumn of requiredColumns) {
91
+ const hasMatch = requiredColumn.aliases
92
+ .map((alias) => this.normalizeExternalColumnKey(alias))
93
+ .some((alias) => headerKeys.has(alias));
94
+ if (hasMatch) {
95
+ matched += 1;
96
+ }
97
+ else {
98
+ missingLabels.push(requiredColumn.label);
99
+ }
100
+ }
101
+ return {
102
+ matched,
103
+ total: requiredColumns.length,
104
+ missingLabels,
105
+ isValid: missingLabels.length === 0,
106
+ };
107
+ };
108
+ try {
109
+ const response = await axios_1.default.get(sourceUrl, {
110
+ responseType: 'arraybuffer',
111
+ timeout: 45000,
112
+ });
113
+ const maxBytes = this.resolveMewpExternalMaxFileSize();
114
+ const declaredLength = Number(((_a = response === null || response === void 0 ? void 0 : response.headers) === null || _a === void 0 ? void 0 : _a['content-length']) || 0);
115
+ if (Number.isFinite(declaredLength) && declaredLength > maxBytes) {
116
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), `File exceeds maximum allowed size (${maxBytes} bytes).`);
117
+ }
118
+ const buffer = Buffer.from((response === null || response === void 0 ? void 0 : response.data) || []);
119
+ if (!buffer.length) {
120
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), 'File is empty');
121
+ }
122
+ if (buffer.length > maxBytes) {
123
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), `File exceeds maximum allowed size (${maxBytes} bytes).`);
124
+ }
125
+ const workbook = XLSX.read(buffer, { type: 'buffer' });
126
+ const firstSheetName = (_b = workbook === null || workbook === void 0 ? void 0 : workbook.SheetNames) === null || _b === void 0 ? void 0 : _b[0];
127
+ if (!firstSheetName) {
128
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), 'No worksheet was found in the uploaded file');
129
+ }
130
+ const sheet = workbook.Sheets[firstSheetName];
131
+ if (!sheet) {
132
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), 'Worksheet data could not be read');
133
+ }
134
+ // Expected header row is A3, but keep A1 fallback for backward compatibility.
135
+ const headerA3 = parseHeaderKeys(sheet, 2);
136
+ const headerA1 = parseHeaderKeys(sheet, 0);
137
+ const rowsFromA3 = parseRows(sheet, 2);
138
+ const rowsFromA1 = parseRows(sheet, 0);
139
+ const validationA3 = validateHeaders(headerA3);
140
+ const validationA1 = validateHeaders(headerA1);
141
+ if (validationA3.isValid) {
142
+ return {
143
+ rows: rowsFromA3,
144
+ meta: {
145
+ sourceName: sourceName || sourceUrl,
146
+ headerRow: 'A3',
147
+ matchedRequiredColumns: validationA3.matched,
148
+ totalRequiredColumns: validationA3.total,
149
+ },
150
+ };
151
+ }
152
+ if (validationA1.isValid) {
153
+ return {
154
+ rows: rowsFromA1,
155
+ meta: {
156
+ sourceName: sourceName || sourceUrl,
157
+ headerRow: 'A1',
158
+ matchedRequiredColumns: validationA1.matched,
159
+ totalRequiredColumns: validationA1.total,
160
+ },
161
+ };
162
+ }
163
+ const best = validationA3.matched >= validationA1.matched ? validationA3 : validationA1;
164
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', best.matched, best.total, best.missingLabels, `Missing required columns: ${best.missingLabels.join(', ')}. Expected header row at A3 (fallback A1 was also checked).`);
165
+ }
166
+ catch (error) {
167
+ if (error instanceof MewpExternalFileValidationError) {
168
+ throw error;
169
+ }
170
+ const msg = String((error === null || error === void 0 ? void 0 : error.message) || error || '').trim();
171
+ logger_1.default.warn(`Could not load external MEWP source '${sourceUrl}': ${msg}`);
172
+ throw this.createMewpExternalValidationError(tableType, sourceName || sourceUrl, '', 0, requiredColumns.length, requiredColumns.map((item) => item.label), `Unable to load or parse the file: ${msg}`);
173
+ }
174
+ }
175
+ getRequiredColumns(tableType) {
176
+ return tableType === 'bugs'
177
+ ? MewpExternalTableUtils.EXTERNAL_BUGS_REQUIRED_COLUMNS
178
+ : MewpExternalTableUtils.EXTERNAL_L3L4_REQUIRED_COLUMNS;
179
+ }
180
+ createMewpExternalValidationError(tableType, sourceName, headerRow, matchedRequiredColumns, totalRequiredColumns, missingRequiredColumns, message) {
181
+ const details = {
182
+ tableType,
183
+ sourceName,
184
+ valid: false,
185
+ headerRow,
186
+ matchedRequiredColumns,
187
+ totalRequiredColumns,
188
+ missingRequiredColumns,
189
+ rowCount: 0,
190
+ message,
191
+ };
192
+ return new MewpExternalFileValidationError(message, details);
193
+ }
194
+ resolveMewpExternalSourceUrl(source) {
195
+ const directUrl = String((source === null || source === void 0 ? void 0 : source.url) || '').trim();
196
+ if (directUrl)
197
+ return directUrl;
198
+ const bucketName = String((source === null || source === void 0 ? void 0 : source.bucketName) || '').trim();
199
+ const objectName = String((source === null || source === void 0 ? void 0 : source.objectName) || (source === null || source === void 0 ? void 0 : source.text) || '').trim();
200
+ const minioBase = String(process.env.MINIOSERVER || '').trim().replace(/\/+$/g, '');
201
+ if (!bucketName || !objectName || !minioBase)
202
+ return '';
203
+ const encodedObjectName = objectName
204
+ .split('/')
205
+ .map((segment) => encodeURIComponent(segment))
206
+ .join('/');
207
+ return `${minioBase}/${bucketName}/${encodedObjectName}`;
208
+ }
209
+ validateMewpExternalSourceIsolation(source, sourceUrl) {
210
+ const dedicatedBucket = String(process.env.MEWP_EXTERNAL_INGESTION_BUCKET || 'mewp-external-ingestion').trim();
211
+ const declaredSourceType = String((source === null || source === void 0 ? void 0 : source.sourceType) || '').trim().toLowerCase();
212
+ if (declaredSourceType && declaredSourceType !== 'mewpexternalingestion') {
213
+ return {
214
+ valid: false,
215
+ message: `Unsupported sourceType '${source === null || source === void 0 ? void 0 : source.sourceType}'. Expected 'mewpExternalIngestion'.`,
216
+ };
217
+ }
218
+ const inferred = this.extractMewpBucketAndObjectFromUrl(sourceUrl);
219
+ const bucketName = String((source === null || source === void 0 ? void 0 : source.bucketName) || inferred.bucketName || '').trim();
220
+ const objectName = String((source === null || source === void 0 ? void 0 : source.objectName) || (source === null || source === void 0 ? void 0 : source.text) || inferred.objectName || '').trim();
221
+ if (bucketName && bucketName !== dedicatedBucket) {
222
+ return {
223
+ valid: false,
224
+ message: `Invalid storage bucket '${bucketName}'. Expected '${dedicatedBucket}'.`,
225
+ };
226
+ }
227
+ if (objectName) {
228
+ const normalizedObject = objectName.toLowerCase();
229
+ if (!normalizedObject.includes('/mewp-external-ingestion/')) {
230
+ return {
231
+ valid: false,
232
+ message: `Invalid object path '${objectName}'. Expected '/mewp-external-ingestion/' prefix segment.`,
233
+ };
234
+ }
235
+ }
236
+ return { valid: true, message: '' };
237
+ }
238
+ extractMewpBucketAndObjectFromUrl(url) {
239
+ try {
240
+ const parsed = new URL(String(url || '').trim());
241
+ const segments = decodeURIComponent(parsed.pathname || '')
242
+ .replace(/^\/+/g, '')
243
+ .split('/')
244
+ .filter((item) => !!item);
245
+ if (segments.length < 2)
246
+ return { bucketName: '', objectName: '' };
247
+ return {
248
+ bucketName: String(segments[0] || '').trim(),
249
+ objectName: segments.slice(1).join('/'),
250
+ };
251
+ }
252
+ catch (_a) {
253
+ return { bucketName: '', objectName: '' };
254
+ }
255
+ }
256
+ resolveMewpExternalSourceExtension(source) {
257
+ const candidates = [source === null || source === void 0 ? void 0 : source.name, source === null || source === void 0 ? void 0 : source.objectName, source === null || source === void 0 ? void 0 : source.text, source === null || source === void 0 ? void 0 : source.url]
258
+ .map((value) => String(value || '').trim())
259
+ .filter((value) => !!value);
260
+ for (const candidate of candidates) {
261
+ const clean = candidate.split('?')[0].split('#')[0];
262
+ const match = /\.([a-z0-9]+)$/i.exec(clean);
263
+ if (!match)
264
+ continue;
265
+ return `.${String(match[1] || '').toLowerCase()}`;
266
+ }
267
+ return '';
268
+ }
269
+ resolveMewpExternalMaxFileSize() {
270
+ const configured = Number(process.env.MEWP_EXTERNAL_MAX_FILE_SIZE_BYTES || 0);
271
+ if (Number.isFinite(configured) && configured > 0)
272
+ return configured;
273
+ return MewpExternalTableUtils.DEFAULT_EXTERNAL_FILE_MAX_BYTES;
274
+ }
275
+ normalizeExternalColumnKey(value) {
276
+ return String(value || '')
277
+ .trim()
278
+ .toLowerCase()
279
+ .replace(/[^a-z0-9]+/g, '');
280
+ }
281
+ }
282
+ MewpExternalTableUtils.EXTERNAL_BUGS_REQUIRED_COLUMNS = [
283
+ { label: 'Elisra_SortIndex', aliases: ['elisrasortindex', 'elisra sortindex', 'elisra_sortindex'] },
284
+ { label: 'SR', aliases: ['sr'] },
285
+ { label: 'TargetWorkItemId', aliases: ['targetworkitemid', 'bugid', 'bug id'] },
286
+ { label: 'Title', aliases: ['title', 'bugtitle', 'bug title'] },
287
+ { label: 'TargetState', aliases: ['targetstate', 'state'] },
288
+ ];
289
+ MewpExternalTableUtils.EXTERNAL_L3L4_REQUIRED_COLUMNS = [
290
+ { label: 'SR', aliases: ['sr'] },
291
+ { label: 'AREA 34', aliases: ['area34', 'area 34'] },
292
+ {
293
+ label: 'TargetWorkItemId Level 3',
294
+ aliases: ['targetworkitemidlevel3', 'targetworkitemid level 3', 'targetworkitemidlevel 3'],
295
+ },
296
+ {
297
+ label: 'TargetTitleLevel3',
298
+ aliases: ['targettitlelevel3', 'targettitlelevel 3', 'targettitle level 3'],
299
+ },
300
+ {
301
+ label: 'TargetStateLevel 3',
302
+ aliases: ['targetstatelevel3', 'targetstatelevel 3', 'targetstate level 3'],
303
+ },
304
+ {
305
+ label: 'TargetWorkItemIdLevel 4',
306
+ aliases: ['targetworkitemidlevel4', 'targetworkitemid level 4', 'targetworkitemidlevel 4'],
307
+ },
308
+ {
309
+ label: 'TargetTitleLevel4',
310
+ aliases: ['targettitlelevel4', 'targettitlelevel 4', 'targettitle level 4'],
311
+ },
312
+ {
313
+ label: 'TargetStateLevel 4',
314
+ aliases: ['targetstatelevel4', 'targetstatelevel 4', 'targetstate level 4'],
315
+ },
316
+ ];
317
+ MewpExternalTableUtils.ALLOWED_EXTERNAL_FILE_EXTENSIONS = new Set(['.xlsx', '.xls', '.csv']);
318
+ MewpExternalTableUtils.DEFAULT_EXTERNAL_FILE_MAX_BYTES = 20 * 1024 * 1024;
319
+ exports.default = MewpExternalTableUtils;
320
+ //# sourceMappingURL=mewpExternalTableUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mewpExternalTableUtils.js","sourceRoot":"","sources":["../../src/utils/mewpExternalTableUtils.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elisra-devops/docgen-data-provider",
3
- "version": "1.75.0",
3
+ "version": "1.76.0",
4
4
  "description": "A document generator data provider, aimed to retrive data from azure devops",
5
5
  "repository": {
6
6
  "type": "git",
@@ -36,6 +36,7 @@
36
36
  "p-limit": "^3.1.0",
37
37
  "winston": "^3.13.1",
38
38
  "winston-transport-browserconsole": "^1.0.5",
39
+ "xlsx": "^0.18.5",
39
40
  "xml2js": "^0.6.2"
40
41
  },
41
42
  "jest": {
@@ -47,6 +48,14 @@
47
48
  "src/**/*.ts",
48
49
  "!src/tests/**"
49
50
  ],
51
+ "coverageThreshold": {
52
+ "global": {
53
+ "branches": 25,
54
+ "functions": 30,
55
+ "lines": 30,
56
+ "statements": 30
57
+ }
58
+ },
50
59
  "testPathIgnorePatterns": [
51
60
  "/bin/"
52
61
  ],