uapi-json 1.14.6 → 1.14.8

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uapi-json",
3
- "version": "1.14.6",
3
+ "version": "1.14.8",
4
4
  "description": "Travelport Universal API",
5
5
  "main": "src/",
6
6
  "files": [
@@ -32,7 +32,7 @@
32
32
  "Artem Pylypchuk <articicejuice@gmail.com>",
33
33
  "Yevhenii Huselietov <d46k16@gmail.com>",
34
34
  "Mark Omarov <dev.mark.omarov@gmail.com>",
35
- "Oleksii Duvanov <kommandant@web-hata.com>"
35
+ "Oleksii Duvanov <colden.aid@gmail.com>"
36
36
  ],
37
37
  "license": "MIT",
38
38
  "dependencies": {
@@ -88,6 +88,7 @@ Object.assign(AirParsingError, createErrorsList({
88
88
  ReservationProviderInfoMissing: 'Can\'t find provider information about reservation',
89
89
  CancelResponseNotFound: 'Cancel response not found',
90
90
  InvalidServiceSegmentFormat: 'Service segment format is invalid',
91
+ NoProviderSegmentOrder: 'Segment is missing ProviderSegmentOrder field',
91
92
  }, AirParsingError));
92
93
 
93
94
  // Runtime errors
@@ -2,14 +2,6 @@ const moment = require('moment');
2
2
  const parsers = require('../../utils/parsers');
3
3
  const { AirParsingError } = require('./AirErrors');
4
4
 
5
- function ProviderSegmentOrderReducer(acc, { ProviderSegmentOrder }) {
6
- const x = parseInt(ProviderSegmentOrder, 10);
7
- if (x > acc) {
8
- return x;
9
- }
10
- return acc;
11
- }
12
-
13
5
  /**
14
6
  * getBaggage -- get baggage information from LFS search
15
7
  * @param baggageAllowance
@@ -446,6 +438,24 @@ function formatLowFaresSearch(searchRequest, searchResult) {
446
438
  return fares;
447
439
  }
448
440
 
441
+ const getSegmentsData = segmentsObject => (segmentsObject
442
+ ? Object.values(segmentsObject)
443
+ : null);
444
+
445
+ const setIndexes = segments => segments.map(
446
+ (segment) => {
447
+ const { ProviderSegmentOrder: index } = segment;
448
+ if (index === undefined) {
449
+ throw new AirParsingError.NoProviderSegmentOrder({
450
+ segment,
451
+ });
452
+ }
453
+
454
+ return { ...segment, index: parseInt(index, 10) };
455
+ }
456
+ );
457
+
458
+
449
459
  /**
450
460
  * This function used to transform segments and service segments objects
451
461
  * to arrays. After that this function try to set indexes with same as in
@@ -459,58 +469,20 @@ function setIndexesForSegments(
459
469
  segmentsObject = null,
460
470
  serviceSegmentsObject = null
461
471
  ) {
462
- const segments = segmentsObject
463
- ? Object.keys(segmentsObject).map(k => segmentsObject[k])
464
- : null;
472
+ const segmentsData = getSegmentsData(segmentsObject);
473
+ const serviceSegmentsData = getSegmentsData(serviceSegmentsObject);
465
474
 
466
- const serviceSegments = serviceSegmentsObject
467
- ? Object.keys(serviceSegmentsObject).map(k => serviceSegmentsObject[k])
475
+ const segments = segmentsData
476
+ ? setIndexes(segmentsData)
468
477
  : null;
469
478
 
470
- if (segments === null && serviceSegments === null) {
471
- return { segments, serviceSegments };
472
- }
473
-
474
- if (segments !== null && serviceSegments === null) {
475
- const segmentsNew = segments.map((segment, key) => ({
476
- ...segment,
477
- index: key + 1,
478
- }));
479
- return { segments: segmentsNew, serviceSegments };
480
- }
481
-
482
- if (segments === null && serviceSegments !== null) {
483
- const serviceSegmentsNew = serviceSegments.map(
484
- (segment, key) => ({
485
- ...segment,
486
- index: key + 1,
487
- })
488
- );
489
- return { segments, serviceSegments: serviceSegmentsNew };
490
- }
491
-
492
- const maxSegmentsSegmentOrder = segments.reduce(ProviderSegmentOrderReducer, 0);
493
- const maxServiceSegmentsSegmentOrder = serviceSegments.reduce(ProviderSegmentOrderReducer, 0);
494
-
495
- const maxOrder = Math.max(
496
- maxSegmentsSegmentOrder,
497
- maxServiceSegmentsSegmentOrder
498
- );
499
-
500
- const allSegments = [];
501
-
502
- for (let i = 1; i <= maxOrder; i += 1) {
503
- segments.forEach(s => (Number(s.ProviderSegmentOrder) === i ? allSegments.push(s) : null));
504
- serviceSegments.forEach(s => (
505
- Number(s.ProviderSegmentOrder) === i ? allSegments.push(s) : null
506
- ));
507
- }
508
-
509
- const indexedSegments = allSegments.map((s, k) => ({ ...s, index: k + 1 }));
479
+ const serviceSegments = serviceSegmentsData
480
+ ? setIndexes(serviceSegmentsData)
481
+ : null;
510
482
 
511
483
  return {
512
- segments: indexedSegments.filter(s => s.SegmentType === undefined),
513
- serviceSegments: indexedSegments.filter(s => s.SegmentType === 'Service'),
484
+ segments,
485
+ serviceSegments,
514
486
  };
515
487
  }
516
488
 
@@ -5,7 +5,7 @@ module.exports = (airPricingInfo, coupon) => {
5
5
  ? `${coupon.FareBasis}/${couponTicketDesignator}`
6
6
  : coupon.FareBasis;
7
7
 
8
- if (!airPricingInfo) {
8
+ if (!airPricingInfo || !airPricingInfo['air:FareInfo']) {
9
9
  return couponFareBasisResult;
10
10
  }
11
11