@lighthouse/common 5.0.0-canary-11 → 5.0.0-canary-13

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 (91) hide show
  1. package/dist/helpers/build-fetch-url/index.js +2 -2
  2. package/dist/helpers/fetch-image/index.js +1 -1
  3. package/dist/helpers/fetch-image-for-pdf-generator-service/index.js +9 -9
  4. package/dist/helpers/fetch-image-for-web/index.js +3 -14
  5. package/dist/helpers/get-audit-entry-details/index.js +2 -0
  6. package/dist/helpers/get-issue-details/index.js +2 -0
  7. package/dist/helpers/get-task-entry-details/index.js +3 -1
  8. package/dist/pdf/helpers/fields/index.js +2 -2
  9. package/dist/scheduling/scheduling.types.js +9 -9
  10. package/dist/service-hours/schema.js +12 -12
  11. package/lib/errors/DomainError.js +7 -8
  12. package/lib/errors/DomainError.js.map +1 -1
  13. package/lib/errors/ValidationError.js +11 -9
  14. package/lib/errors/ValidationError.js.map +1 -1
  15. package/lib/helpers/build-fetch-url/index.js +2 -2
  16. package/lib/helpers/build-fetch-url/index.js.map +1 -1
  17. package/lib/helpers/fetch-image/index.js +1 -1
  18. package/lib/helpers/fetch-image/index.js.map +1 -1
  19. package/lib/helpers/fetch-image-for-pdf-generator-service/index.js +174 -180
  20. package/lib/helpers/fetch-image-for-pdf-generator-service/index.js.map +1 -1
  21. package/lib/helpers/fetch-image-for-web/index.js +60 -74
  22. package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
  23. package/lib/helpers/fetch-lighthouse-logo/index.js +41 -43
  24. package/lib/helpers/fetch-lighthouse-logo/index.js.map +1 -1
  25. package/lib/helpers/get-audit-entry-details/index.js +2 -0
  26. package/lib/helpers/get-audit-entry-details/index.js.map +1 -1
  27. package/lib/helpers/get-audit-items-data/index.js +8 -8
  28. package/lib/helpers/get-audit-items-data/index.js.map +1 -1
  29. package/lib/helpers/get-issue-details/index.js +2 -0
  30. package/lib/helpers/get-issue-details/index.js.map +1 -1
  31. package/lib/helpers/get-job-details/index.js.map +1 -1
  32. package/lib/helpers/get-location-reference/index.js +6 -4
  33. package/lib/helpers/get-location-reference/index.js.map +1 -1
  34. package/lib/helpers/get-reference-details/index.js.map +1 -1
  35. package/lib/helpers/get-task-entry-details/index.js +3 -1
  36. package/lib/helpers/get-task-entry-details/index.js.map +1 -1
  37. package/lib/helpers/get-timezone-datetime/index.js.map +1 -1
  38. package/lib/pdf/activity-report/index.js +299 -311
  39. package/lib/pdf/activity-report/index.js.map +1 -1
  40. package/lib/pdf/audit/index.js.map +1 -1
  41. package/lib/pdf/helpers/build-audit-content/index.js.map +1 -1
  42. package/lib/pdf/helpers/build-audit-follow-ups/index.js.map +1 -1
  43. package/lib/pdf/helpers/build-location-scans-content/index.js.map +1 -1
  44. package/lib/pdf/helpers/build-template-content/index.js.map +1 -1
  45. package/lib/pdf/helpers/fields/index.js +14 -14
  46. package/lib/pdf/helpers/fields/index.js.map +1 -1
  47. package/lib/pdf/helpers/generate-definition/index.js.map +1 -1
  48. package/lib/pdf/helpers/horizontal-line/index.js.map +1 -1
  49. package/lib/pdf/helpers/html-transformer/index.js +1 -2
  50. package/lib/pdf/helpers/html-transformer/index.js.map +1 -1
  51. package/lib/pdf/helpers/table/index.js +63 -65
  52. package/lib/pdf/helpers/table/index.js.map +1 -1
  53. package/lib/pdf/issue/index.js.map +1 -1
  54. package/lib/pdf/job/index.js.map +1 -1
  55. package/lib/pdf/shift-report/index.js +275 -291
  56. package/lib/pdf/shift-report/index.js.map +1 -1
  57. package/lib/pdf/task/index.js.map +1 -1
  58. package/lib/scheduling/generators/occurrenceIntervalsGenerator.js +27 -30
  59. package/lib/scheduling/generators/occurrenceIntervalsGenerator.js.map +1 -1
  60. package/lib/scheduling/generators/scheduleIntervalsGenerator.js +19 -21
  61. package/lib/scheduling/generators/scheduleIntervalsGenerator.js.map +1 -1
  62. package/lib/scheduling/generators/serviceIntervalsGenerator.js +134 -136
  63. package/lib/scheduling/generators/serviceIntervalsGenerator.js.map +1 -1
  64. package/lib/scheduling/helpers/generateNonRepeatingSchedule.js +81 -83
  65. package/lib/scheduling/helpers/generateNonRepeatingSchedule.js.map +1 -1
  66. package/lib/scheduling/helpers/generateRepeatingSchedule.js +104 -106
  67. package/lib/scheduling/helpers/generateRepeatingSchedule.js.map +1 -1
  68. package/lib/scheduling/helpers/generateScheduleEnd.js.map +1 -1
  69. package/lib/scheduling/helpers/mergeIntervals.js.map +1 -1
  70. package/lib/scheduling/scheduling.types.js +9 -9
  71. package/lib/scheduling/scheduling.types.js.map +1 -1
  72. package/lib/scheduling/strategies/getNext.js +21 -17
  73. package/lib/scheduling/strategies/getNext.js.map +1 -1
  74. package/lib/scheduling/strategies/getNextExactDateOfMonth.js +21 -18
  75. package/lib/scheduling/strategies/getNextExactDateOfMonth.js.map +1 -1
  76. package/lib/scheduling/strategies/getNextLastDayOfMonth.js +20 -17
  77. package/lib/scheduling/strategies/getNextLastDayOfMonth.js.map +1 -1
  78. package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js +20 -17
  79. package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js.map +1 -1
  80. package/lib/scheduling/strategies/getNextNoRepeat.js +15 -14
  81. package/lib/scheduling/strategies/getNextNoRepeat.js.map +1 -1
  82. package/lib/scheduling/strategies/getNextWeekday.js +36 -33
  83. package/lib/scheduling/strategies/getNextWeekday.js.map +1 -1
  84. package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +20 -17
  85. package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js.map +1 -1
  86. package/lib/schema/schema.js +21 -23
  87. package/lib/schema/schema.js.map +1 -1
  88. package/lib/service-hours/schema.js +15 -13
  89. package/lib/service-hours/schema.js.map +1 -1
  90. package/package.json +2 -2
  91. package/yarn-error.log +0 -13549
@@ -1,9 +1,9 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  var _marked = /*#__PURE__*/_regeneratorRuntime.mark(serviceIntervalsGenerator);
4
4
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
5
5
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
7
  import { filter, flow, forEach, map, reduce } from 'lodash/fp';
8
8
  import moment from 'moment-timezone';
9
9
  import { Behaviours, Durations, Types } from '../../service-hours';
@@ -13,147 +13,145 @@ import { convertToTimezone, intervalCovers, intervalOnlyIntersectsEnd, intervalO
13
13
  * Generates service intervals between start and end range for service hours
14
14
  */
15
15
  export function serviceIntervalsGenerator(props) {
16
- var end, serviceHours, start, timezone, hasValidStartAndEnd, mStart, mEnd, mStartValid, mEndValid, hours, rangeInterval, closeOverrideHours, defaultHours, openOverrideHours, closeIntervals, openIntervals, weekStart, defaultIntervals, getOverrideIntervalsForRange, rangeOpenIntervals, rangeCloseIntervals, mergedIntervals, serviceIntervals, _iterator, _step, interval;
17
- return _regeneratorRuntime.wrap(function serviceIntervalsGenerator$(_context) {
18
- while (1) {
19
- switch (_context.prev = _context.next) {
20
- case 0:
21
- end = props.end, serviceHours = props.serviceHours, start = props.start;
22
- timezone = serviceHours.timezone;
23
- hasValidStartAndEnd = end > start && start < end;
24
- if (hasValidStartAndEnd) {
25
- _context.next = 5;
26
- break;
27
- }
28
- return _context.abrupt("return", []);
29
- case 5:
30
- mStart = moment.tz(start, timezone);
31
- mEnd = moment.tz(end, timezone);
32
- mStartValid = mStart.isValid();
33
- mEndValid = mEnd.isValid();
34
- if (!(!mStartValid || !mEndValid)) {
35
- _context.next = 11;
36
- break;
37
- }
38
- return _context.abrupt("return", []);
39
- case 11:
40
- hours = serviceHours.hours;
41
- rangeInterval = [start, end];
42
- closeOverrideHours = filter({
43
- behaviour: Behaviours.Close,
44
- type: Types.Override
45
- }, hours);
46
- defaultHours = filter({
47
- type: Types.Default
48
- }, hours);
49
- openOverrideHours = filter({
50
- behaviour: Behaviours.Open,
51
- type: Types.Override
52
- }, hours); // NOTE: we must apply the timezone to overrides as they are stored in UTC
53
- // and must be converted to timestamps in the timezone before processing
54
- closeIntervals = reduce(function (memo, override) {
55
- var mIntervalStart = moment.tz(override.start, timezone);
56
- var mIntervalEnd = moment.tz(override.end, timezone);
57
- var isInPast = mIntervalEnd.isBefore(mStart);
58
- var isInFuture = mIntervalStart.isAfter(mEnd);
16
+ var end, serviceHours, start, timezone, hasValidStartAndEnd, mStart, mEnd, mStartValid, mEndValid, hours, rangeInterval, closeOverrideHours, defaultHours, openOverrideHours, closeIntervals, openIntervals, weekStart, defaultIntervals, getOverrideIntervalsForRange, rangeOpenIntervals, rangeCloseIntervals, mergedIntervals, serviceIntervals, _iterator, _step, interval, _t;
17
+ return _regeneratorRuntime.wrap(function (_context) {
18
+ while (1) switch (_context.prev = _context.next) {
19
+ case 0:
20
+ end = props.end, serviceHours = props.serviceHours, start = props.start;
21
+ timezone = serviceHours.timezone;
22
+ hasValidStartAndEnd = end > start && start < end;
23
+ if (hasValidStartAndEnd) {
24
+ _context.next = 1;
25
+ break;
26
+ }
27
+ return _context.abrupt("return", []);
28
+ case 1:
29
+ mStart = moment.tz(start, timezone);
30
+ mEnd = moment.tz(end, timezone);
31
+ mStartValid = mStart.isValid();
32
+ mEndValid = mEnd.isValid();
33
+ if (!(!mStartValid || !mEndValid)) {
34
+ _context.next = 2;
35
+ break;
36
+ }
37
+ return _context.abrupt("return", []);
38
+ case 2:
39
+ hours = serviceHours.hours;
40
+ rangeInterval = [start, end];
41
+ closeOverrideHours = filter({
42
+ behaviour: Behaviours.Close,
43
+ type: Types.Override
44
+ }, hours);
45
+ defaultHours = filter({
46
+ type: Types.Default
47
+ }, hours);
48
+ openOverrideHours = filter({
49
+ behaviour: Behaviours.Open,
50
+ type: Types.Override
51
+ }, hours); // NOTE: we must apply the timezone to overrides as they are stored in UTC
52
+ // and must be converted to timestamps in the timezone before processing
53
+ closeIntervals = reduce(function (memo, override) {
54
+ var mIntervalStart = moment.tz(override.start, timezone);
55
+ var mIntervalEnd = moment.tz(override.end, timezone);
56
+ var isInPast = mIntervalEnd.isBefore(mStart);
57
+ var isInFuture = mIntervalStart.isAfter(mEnd);
59
58
 
60
- // NOTE: filter out any interval not relevant
61
- if (isInPast || isInFuture) {
62
- return memo;
63
- }
64
- var start = convertToTimezone(override.start, timezone);
65
- var end = convertToTimezone(override.end, timezone);
66
- memo.push([start, end]);
59
+ // NOTE: filter out any interval not relevant
60
+ if (isInPast || isInFuture) {
67
61
  return memo;
68
- }, [], closeOverrideHours);
69
- openIntervals = reduce(function (memo, override) {
70
- var mIntervalStart = moment.tz(override.start, timezone);
71
- var mIntervalEnd = moment.tz(override.end, timezone);
72
- var isInPast = mIntervalEnd.isBefore(mStart);
73
- var isInFuture = mIntervalStart.isAfter(mEnd);
62
+ }
63
+ var start = convertToTimezone(override.start, timezone);
64
+ var end = convertToTimezone(override.end, timezone);
65
+ memo.push([start, end]);
66
+ return memo;
67
+ }, [], closeOverrideHours);
68
+ openIntervals = reduce(function (memo, override) {
69
+ var mIntervalStart = moment.tz(override.start, timezone);
70
+ var mIntervalEnd = moment.tz(override.end, timezone);
71
+ var isInPast = mIntervalEnd.isBefore(mStart);
72
+ var isInFuture = mIntervalStart.isAfter(mEnd);
74
73
 
75
- // NOTE: filter out any interval not relevant
76
- if (isInPast || isInFuture) {
77
- return memo;
78
- }
79
- var start = convertToTimezone(override.start, timezone);
80
- var end = convertToTimezone(override.end, timezone);
81
- memo.push([start, end]);
74
+ // NOTE: filter out any interval not relevant
75
+ if (isInPast || isInFuture) {
82
76
  return memo;
83
- }, [], openOverrideHours);
84
- weekStart = mStart.startOf(Unit.Week).valueOf();
85
- defaultIntervals = [];
86
- while (weekStart < end) {
87
- forEach(function (hour) {
88
- // NOTE: hour start and end values are the number of minutes from the
89
- // start of the week so are simply offsets
90
- var endOffset = hour.end,
91
- startOffset = hour.start;
92
- var hourStart = weekStart + startOffset;
93
- var hourEnd = weekStart + endOffset;
94
- var interval = [hourStart, hourEnd];
95
- var isIntervalIntersectingRangeEnd = intervalOnlyIntersectsEnd(interval, rangeInterval);
96
- var isIntervalIntersectingRangeStart = intervalOnlyIntersectsStart(interval, rangeInterval);
97
- var isIntervalInsideRange = intervalWithin(interval, rangeInterval);
98
- var isRangeInsideInterval = intervalWithin(rangeInterval, interval);
99
- var shouldSkip = !isIntervalInsideRange && !isRangeInsideInterval && !isIntervalIntersectingRangeStart && !isIntervalIntersectingRangeEnd;
100
- if (shouldSkip) return;
101
- var nextStart = isRangeInsideInterval || isIntervalIntersectingRangeStart ? start : hourStart;
102
- var nextEnd = isRangeInsideInterval || isIntervalIntersectingRangeEnd ? end : hourEnd;
103
- defaultIntervals.push([nextStart, nextEnd]);
104
- }, defaultHours);
105
- weekStart = weekStart + Durations.Week;
106
77
  }
78
+ var start = convertToTimezone(override.start, timezone);
79
+ var end = convertToTimezone(override.end, timezone);
80
+ memo.push([start, end]);
81
+ return memo;
82
+ }, [], openOverrideHours);
83
+ weekStart = mStart.startOf(Unit.Week).valueOf();
84
+ defaultIntervals = [];
85
+ while (weekStart < end) {
86
+ forEach(function (hour) {
87
+ // NOTE: hour start and end values are the number of minutes from the
88
+ // start of the week so are simply offsets
89
+ var endOffset = hour.end,
90
+ startOffset = hour.start;
91
+ var hourStart = weekStart + startOffset;
92
+ var hourEnd = weekStart + endOffset;
93
+ var interval = [hourStart, hourEnd];
94
+ var isIntervalIntersectingRangeEnd = intervalOnlyIntersectsEnd(interval, rangeInterval);
95
+ var isIntervalIntersectingRangeStart = intervalOnlyIntersectsStart(interval, rangeInterval);
96
+ var isIntervalInsideRange = intervalWithin(interval, rangeInterval);
97
+ var isRangeInsideInterval = intervalWithin(rangeInterval, interval);
98
+ var shouldSkip = !isIntervalInsideRange && !isRangeInsideInterval && !isIntervalIntersectingRangeStart && !isIntervalIntersectingRangeEnd;
99
+ if (shouldSkip) return;
100
+ var nextStart = isRangeInsideInterval || isIntervalIntersectingRangeStart ? start : hourStart;
101
+ var nextEnd = isRangeInsideInterval || isIntervalIntersectingRangeEnd ? end : hourEnd;
102
+ defaultIntervals.push([nextStart, nextEnd]);
103
+ }, defaultHours);
104
+ weekStart = weekStart + Durations.Week;
105
+ }
107
106
 
108
- // NOTE: only include intervals which intersect our range and then map to
109
- // ensure the intervals conform to the range interval
110
- getOverrideIntervalsForRange = flow(filter(function (interval) {
111
- return interval[0] >= rangeInterval[0] || interval[0] <= rangeInterval[1];
112
- }), map(function (interval) {
113
- var intervalCoversRange = intervalCovers(interval, rangeInterval);
114
- var intervalIntersectsRangeEnd = intervalOnlyIntersectsEnd(interval, rangeInterval);
115
- var intervalIntersectsRangeStart = intervalOnlyIntersectsStart(interval, rangeInterval);
116
- var intervalStart = intervalIntersectsRangeStart ? rangeInterval[0] : interval[0];
117
- var intervalEnd = intervalIntersectsRangeEnd ? rangeInterval[1] : interval[1];
118
- return intervalCoversRange ? rangeInterval : [intervalStart, intervalEnd];
119
- })); // NOTE: for simplicity we calculate all default service intervals and then
120
- // apply the open and closed overrides, we can't do this as we iterate
121
- // through the weeks as open and close overrides can potentially intersect
122
- // across weeks
123
- rangeOpenIntervals = getOverrideIntervalsForRange(openIntervals);
124
- rangeCloseIntervals = getOverrideIntervalsForRange(closeIntervals);
125
- mergedIntervals = mergeIntervals([].concat(defaultIntervals, _toConsumableArray(rangeOpenIntervals)));
126
- serviceIntervals = splitIntervals(mergedIntervals, rangeCloseIntervals);
127
- _iterator = _createForOfIteratorHelper(serviceIntervals);
128
- _context.prev = 27;
129
- _iterator.s();
130
- case 29:
131
- if ((_step = _iterator.n()).done) {
132
- _context.next = 35;
133
- break;
134
- }
135
- interval = _step.value;
136
- _context.next = 33;
137
- return interval;
138
- case 33:
139
- _context.next = 29;
140
- break;
141
- case 35:
142
- _context.next = 40;
107
+ // NOTE: only include intervals which intersect our range and then map to
108
+ // ensure the intervals conform to the range interval
109
+ getOverrideIntervalsForRange = flow(filter(function (interval) {
110
+ return interval[0] >= rangeInterval[0] || interval[0] <= rangeInterval[1];
111
+ }), map(function (interval) {
112
+ var intervalCoversRange = intervalCovers(interval, rangeInterval);
113
+ var intervalIntersectsRangeEnd = intervalOnlyIntersectsEnd(interval, rangeInterval);
114
+ var intervalIntersectsRangeStart = intervalOnlyIntersectsStart(interval, rangeInterval);
115
+ var intervalStart = intervalIntersectsRangeStart ? rangeInterval[0] : interval[0];
116
+ var intervalEnd = intervalIntersectsRangeEnd ? rangeInterval[1] : interval[1];
117
+ return intervalCoversRange ? rangeInterval : [intervalStart, intervalEnd];
118
+ })); // NOTE: for simplicity we calculate all default service intervals and then
119
+ // apply the open and closed overrides, we can't do this as we iterate
120
+ // through the weeks as open and close overrides can potentially intersect
121
+ // across weeks
122
+ rangeOpenIntervals = getOverrideIntervalsForRange(openIntervals);
123
+ rangeCloseIntervals = getOverrideIntervalsForRange(closeIntervals);
124
+ mergedIntervals = mergeIntervals([].concat(defaultIntervals, _toConsumableArray(rangeOpenIntervals)));
125
+ serviceIntervals = splitIntervals(mergedIntervals, rangeCloseIntervals);
126
+ _iterator = _createForOfIteratorHelper(serviceIntervals);
127
+ _context.prev = 3;
128
+ _iterator.s();
129
+ case 4:
130
+ if ((_step = _iterator.n()).done) {
131
+ _context.next = 6;
143
132
  break;
144
- case 37:
145
- _context.prev = 37;
146
- _context.t0 = _context["catch"](27);
147
- _iterator.e(_context.t0);
148
- case 40:
149
- _context.prev = 40;
150
- _iterator.f();
151
- return _context.finish(40);
152
- case 43:
153
- case "end":
154
- return _context.stop();
155
- }
133
+ }
134
+ interval = _step.value;
135
+ _context.next = 5;
136
+ return interval;
137
+ case 5:
138
+ _context.next = 4;
139
+ break;
140
+ case 6:
141
+ _context.next = 8;
142
+ break;
143
+ case 7:
144
+ _context.prev = 7;
145
+ _t = _context["catch"](3);
146
+ _iterator.e(_t);
147
+ case 8:
148
+ _context.prev = 8;
149
+ _iterator.f();
150
+ return _context.finish(8);
151
+ case 9:
152
+ case "end":
153
+ return _context.stop();
156
154
  }
157
- }, _marked, null, [[27, 37, 40, 43]]);
155
+ }, _marked, null, [[3, 7, 8, 9]]);
158
156
  }
159
157
  //# sourceMappingURL=serviceIntervalsGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serviceIntervalsGenerator.js","names":["serviceIntervalsGenerator","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","from","test","filter","flow","forEach","map","reduce","moment","Behaviours","Durations","Types","Unit","convertToTimezone","intervalCovers","intervalOnlyIntersectsEnd","intervalOnlyIntersectsStart","intervalWithin","mergeIntervals","splitIntervals","props","end","serviceHours","start","timezone","hasValidStartAndEnd","mStart","mEnd","mStartValid","mEndValid","hours","rangeInterval","closeOverrideHours","defaultHours","openOverrideHours","closeIntervals","openIntervals","weekStart","defaultIntervals","getOverrideIntervalsForRange","rangeOpenIntervals","rangeCloseIntervals","mergedIntervals","serviceIntervals","_iterator","_step","interval","_regeneratorRuntime","wrap","serviceIntervalsGenerator$","_context","prev","abrupt","tz","isValid","behaviour","Close","type","Override","Default","Open","memo","override","mIntervalStart","mIntervalEnd","isInPast","isBefore","isInFuture","isAfter","push","startOf","Week","valueOf","hour","endOffset","startOffset","hourStart","hourEnd","isIntervalIntersectingRangeEnd","isIntervalIntersectingRangeStart","isIntervalInsideRange","isRangeInsideInterval","shouldSkip","nextStart","nextEnd","intervalCoversRange","intervalIntersectsRangeEnd","intervalIntersectsRangeStart","intervalStart","intervalEnd","concat","_toConsumableArray","t0","finish","stop","_marked"],"sources":["../../../src/scheduling/generators/serviceIntervalsGenerator.ts"],"sourcesContent":["import { filter, flow, forEach, map, reduce } from 'lodash/fp'\nimport moment from 'moment-timezone'\n\nimport {\n Behaviours,\n Durations,\n Schema as ServiceHoursSchema,\n Types,\n} from '../../service-hours'\nimport { Interval, Unit } from '../scheduling.types'\nimport {\n convertToTimezone,\n intervalCovers,\n intervalOnlyIntersectsEnd,\n intervalOnlyIntersectsStart,\n intervalWithin,\n mergeIntervals,\n splitIntervals,\n} from '../helpers'\n\ninterface ServiceIntervalsGenerator {\n readonly end: number\n readonly serviceHours: ServiceHoursSchema\n readonly start: number\n}\n\n/**\n * Generates service intervals between start and end range for service hours\n */\nexport function* serviceIntervalsGenerator(props: ServiceIntervalsGenerator) {\n const { end, serviceHours, start } = props\n const { timezone } = serviceHours\n\n const hasValidStartAndEnd = end > start && start < end\n\n if (!hasValidStartAndEnd) return []\n\n const mStart = moment.tz(start, timezone)\n const mEnd = moment.tz(end, timezone)\n const mStartValid = mStart.isValid()\n const mEndValid = mEnd.isValid()\n\n if (!mStartValid || !mEndValid) return []\n\n const { hours } = serviceHours\n const rangeInterval = [start, end]\n\n const closeOverrideHours = filter(\n { behaviour: Behaviours.Close, type: Types.Override },\n hours\n )\n const defaultHours = filter({ type: Types.Default }, hours)\n const openOverrideHours = filter(\n { behaviour: Behaviours.Open, type: Types.Override },\n hours\n )\n\n // NOTE: we must apply the timezone to overrides as they are stored in UTC\n // and must be converted to timestamps in the timezone before processing\n const closeIntervals = reduce(\n (memo, override) => {\n const mIntervalStart = moment.tz(override.start, timezone)\n const mIntervalEnd = moment.tz(override.end, timezone)\n\n const isInPast = mIntervalEnd.isBefore(mStart)\n const isInFuture = mIntervalStart.isAfter(mEnd)\n\n // NOTE: filter out any interval not relevant\n if (isInPast || isInFuture) {\n return memo\n }\n\n const start = convertToTimezone(override.start, timezone)\n const end = convertToTimezone(override.end, timezone)\n\n memo.push([start, end])\n\n return memo\n },\n [],\n closeOverrideHours\n )\n\n const openIntervals = reduce(\n (memo, override) => {\n const mIntervalStart = moment.tz(override.start, timezone)\n const mIntervalEnd = moment.tz(override.end, timezone)\n\n const isInPast = mIntervalEnd.isBefore(mStart)\n const isInFuture = mIntervalStart.isAfter(mEnd)\n\n // NOTE: filter out any interval not relevant\n if (isInPast || isInFuture) {\n return memo\n }\n\n const start = convertToTimezone(override.start, timezone)\n const end = convertToTimezone(override.end, timezone)\n\n memo.push([start, end])\n\n return memo\n },\n [],\n openOverrideHours\n )\n\n let weekStart = mStart.startOf(Unit.Week).valueOf()\n\n const defaultIntervals = []\n\n while (weekStart < end) {\n forEach(hour => {\n // NOTE: hour start and end values are the number of minutes from the\n // start of the week so are simply offsets\n const { end: endOffset, start: startOffset } = hour\n const hourStart = weekStart + startOffset\n const hourEnd = weekStart + endOffset\n\n const interval = [hourStart, hourEnd]\n\n const isIntervalIntersectingRangeEnd = intervalOnlyIntersectsEnd(\n interval,\n rangeInterval\n )\n const isIntervalIntersectingRangeStart = intervalOnlyIntersectsStart(\n interval,\n rangeInterval\n )\n const isIntervalInsideRange = intervalWithin(interval, rangeInterval)\n const isRangeInsideInterval = intervalWithin(rangeInterval, interval)\n\n const shouldSkip =\n !isIntervalInsideRange &&\n !isRangeInsideInterval &&\n !isIntervalIntersectingRangeStart &&\n !isIntervalIntersectingRangeEnd\n\n if (shouldSkip) return\n\n const nextStart =\n isRangeInsideInterval || isIntervalIntersectingRangeStart\n ? start\n : hourStart\n\n const nextEnd =\n isRangeInsideInterval || isIntervalIntersectingRangeEnd ? end : hourEnd\n\n defaultIntervals.push([nextStart, nextEnd])\n }, defaultHours)\n\n weekStart = weekStart + Durations.Week\n }\n\n // NOTE: only include intervals which intersect our range and then map to\n // ensure the intervals conform to the range interval\n const getOverrideIntervalsForRange = flow(\n filter(\n (interval: Interval): boolean =>\n interval[0] >= rangeInterval[0] || interval[0] <= rangeInterval[1]\n ),\n map(\n (interval: Interval): Interval => {\n const intervalCoversRange = intervalCovers(interval, rangeInterval)\n const intervalIntersectsRangeEnd = intervalOnlyIntersectsEnd(\n interval,\n rangeInterval\n )\n const intervalIntersectsRangeStart = intervalOnlyIntersectsStart(\n interval,\n rangeInterval\n )\n\n const intervalStart = intervalIntersectsRangeStart\n ? rangeInterval[0]\n : interval[0]\n const intervalEnd = intervalIntersectsRangeEnd\n ? rangeInterval[1]\n : interval[1]\n\n return intervalCoversRange\n ? rangeInterval\n : [intervalStart, intervalEnd]\n }\n )\n )\n\n // NOTE: for simplicity we calculate all default service intervals and then\n // apply the open and closed overrides, we can't do this as we iterate\n // through the weeks as open and close overrides can potentially intersect\n // across weeks\n const rangeOpenIntervals = getOverrideIntervalsForRange(openIntervals)\n const rangeCloseIntervals = getOverrideIntervalsForRange(closeIntervals)\n\n const mergedIntervals = mergeIntervals([\n ...defaultIntervals,\n ...rangeOpenIntervals,\n ])\n const serviceIntervals = splitIntervals(mergedIntervals, rangeCloseIntervals)\n\n for (let interval of serviceIntervals) yield interval\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"serviceIntervalsGenerator.js","names":["serviceIntervalsGenerator","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","from","test","filter","flow","forEach","map","reduce","moment","Behaviours","Durations","Types","Unit","convertToTimezone","intervalCovers","intervalOnlyIntersectsEnd","intervalOnlyIntersectsStart","intervalWithin","mergeIntervals","splitIntervals","props","end","serviceHours","start","timezone","hasValidStartAndEnd","mStart","mEnd","mStartValid","mEndValid","hours","rangeInterval","closeOverrideHours","defaultHours","openOverrideHours","closeIntervals","openIntervals","weekStart","defaultIntervals","getOverrideIntervalsForRange","rangeOpenIntervals","rangeCloseIntervals","mergedIntervals","serviceIntervals","_iterator","_step","interval","_t","_regeneratorRuntime","wrap","_context","prev","abrupt","tz","isValid","behaviour","Close","type","Override","Default","Open","memo","override","mIntervalStart","mIntervalEnd","isInPast","isBefore","isInFuture","isAfter","push","startOf","Week","valueOf","hour","endOffset","startOffset","hourStart","hourEnd","isIntervalIntersectingRangeEnd","isIntervalIntersectingRangeStart","isIntervalInsideRange","isRangeInsideInterval","shouldSkip","nextStart","nextEnd","intervalCoversRange","intervalIntersectsRangeEnd","intervalIntersectsRangeStart","intervalStart","intervalEnd","concat","_toConsumableArray","finish","stop","_marked"],"sources":["../../../src/scheduling/generators/serviceIntervalsGenerator.ts"],"sourcesContent":["import { filter, flow, forEach, map, reduce } from 'lodash/fp'\nimport moment from 'moment-timezone'\n\nimport {\n Behaviours,\n Durations,\n HoursSchema,\n Schema as ServiceHoursSchema,\n Types,\n} from '../../service-hours'\nimport { Interval, Unit } from '../scheduling.types'\nimport {\n convertToTimezone,\n intervalCovers,\n intervalOnlyIntersectsEnd,\n intervalOnlyIntersectsStart,\n intervalWithin,\n mergeIntervals,\n splitIntervals,\n} from '../helpers'\n\ninterface ServiceIntervalsGenerator {\n readonly end: number\n readonly serviceHours: ServiceHoursSchema\n readonly start: number\n}\n\n/**\n * Generates service intervals between start and end range for service hours\n */\nexport function* serviceIntervalsGenerator(props: ServiceIntervalsGenerator) {\n const { end, serviceHours, start } = props\n const { timezone } = serviceHours\n\n const hasValidStartAndEnd = end > start && start < end\n\n if (!hasValidStartAndEnd) return []\n\n const mStart = moment.tz(start, timezone)\n const mEnd = moment.tz(end, timezone)\n const mStartValid = mStart.isValid()\n const mEndValid = mEnd.isValid()\n\n if (!mStartValid || !mEndValid) return []\n\n const { hours } = serviceHours\n const rangeInterval = [start, end]\n\n const closeOverrideHours: HoursSchema[] = filter(\n { behaviour: Behaviours.Close, type: Types.Override },\n hours\n )\n const defaultHours: HoursSchema[] = filter({ type: Types.Default }, hours)\n const openOverrideHours: HoursSchema[] = filter(\n { behaviour: Behaviours.Open, type: Types.Override },\n hours\n )\n\n // NOTE: we must apply the timezone to overrides as they are stored in UTC\n // and must be converted to timestamps in the timezone before processing\n const closeIntervals = reduce(\n (memo, override) => {\n const mIntervalStart = moment.tz(override.start, timezone)\n const mIntervalEnd = moment.tz(override.end, timezone)\n\n const isInPast = mIntervalEnd.isBefore(mStart)\n const isInFuture = mIntervalStart.isAfter(mEnd)\n\n // NOTE: filter out any interval not relevant\n if (isInPast || isInFuture) {\n return memo\n }\n\n const start = convertToTimezone(override.start, timezone)\n const end = convertToTimezone(override.end, timezone)\n\n memo.push([start, end])\n\n return memo\n },\n [],\n closeOverrideHours\n )\n\n const openIntervals = reduce(\n (memo, override) => {\n const mIntervalStart = moment.tz(override.start, timezone)\n const mIntervalEnd = moment.tz(override.end, timezone)\n\n const isInPast = mIntervalEnd.isBefore(mStart)\n const isInFuture = mIntervalStart.isAfter(mEnd)\n\n // NOTE: filter out any interval not relevant\n if (isInPast || isInFuture) {\n return memo\n }\n\n const start = convertToTimezone(override.start, timezone)\n const end = convertToTimezone(override.end, timezone)\n\n memo.push([start, end])\n\n return memo\n },\n [],\n openOverrideHours\n )\n\n let weekStart = mStart.startOf(Unit.Week).valueOf()\n\n const defaultIntervals = []\n\n while (weekStart < end) {\n forEach(hour => {\n // NOTE: hour start and end values are the number of minutes from the\n // start of the week so are simply offsets\n const { end: endOffset, start: startOffset } = hour\n const hourStart = weekStart + startOffset\n const hourEnd = weekStart + endOffset\n\n const interval = [hourStart, hourEnd]\n\n const isIntervalIntersectingRangeEnd = intervalOnlyIntersectsEnd(\n interval,\n rangeInterval\n )\n const isIntervalIntersectingRangeStart = intervalOnlyIntersectsStart(\n interval,\n rangeInterval\n )\n const isIntervalInsideRange = intervalWithin(interval, rangeInterval)\n const isRangeInsideInterval = intervalWithin(rangeInterval, interval)\n\n const shouldSkip =\n !isIntervalInsideRange &&\n !isRangeInsideInterval &&\n !isIntervalIntersectingRangeStart &&\n !isIntervalIntersectingRangeEnd\n\n if (shouldSkip) return\n\n const nextStart =\n isRangeInsideInterval || isIntervalIntersectingRangeStart\n ? start\n : hourStart\n\n const nextEnd =\n isRangeInsideInterval || isIntervalIntersectingRangeEnd ? end : hourEnd\n\n defaultIntervals.push([nextStart, nextEnd])\n }, defaultHours)\n\n weekStart = weekStart + Durations.Week\n }\n\n // NOTE: only include intervals which intersect our range and then map to\n // ensure the intervals conform to the range interval\n const getOverrideIntervalsForRange = flow(\n filter(\n (interval: Interval): boolean =>\n interval[0] >= rangeInterval[0] || interval[0] <= rangeInterval[1]\n ),\n map(\n (interval: Interval): Interval => {\n const intervalCoversRange = intervalCovers(interval, rangeInterval)\n const intervalIntersectsRangeEnd = intervalOnlyIntersectsEnd(\n interval,\n rangeInterval\n )\n const intervalIntersectsRangeStart = intervalOnlyIntersectsStart(\n interval,\n rangeInterval\n )\n\n const intervalStart = intervalIntersectsRangeStart\n ? rangeInterval[0]\n : interval[0]\n const intervalEnd = intervalIntersectsRangeEnd\n ? rangeInterval[1]\n : interval[1]\n\n return intervalCoversRange\n ? rangeInterval\n : [intervalStart, intervalEnd]\n }\n )\n )\n\n // NOTE: for simplicity we calculate all default service intervals and then\n // apply the open and closed overrides, we can't do this as we iterate\n // through the weeks as open and close overrides can potentially intersect\n // across weeks\n const rangeOpenIntervals = getOverrideIntervalsForRange(openIntervals)\n const rangeCloseIntervals = getOverrideIntervalsForRange(closeIntervals)\n\n const mergedIntervals = mergeIntervals([\n ...defaultIntervals,\n ...rangeOpenIntervals,\n ])\n const serviceIntervals = splitIntervals(mergedIntervals, rangeCloseIntervals)\n\n for (let interval of serviceIntervals) yield interval\n}\n"],"mappings":"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","ignoreList":[]}
@@ -1,9 +1,9 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
1
  import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
+ import _regeneratorRuntime from "@babel/runtime/regenerator";
3
3
  var _marked = /*#__PURE__*/_regeneratorRuntime.mark(generateNonRepeatingSchedule);
4
4
  function _createForOfIteratorHelper(r, e) { var t = "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (!t) { if (Array.isArray(r) || (t = _unsupportedIterableToArray(r)) || e && r && "number" == typeof r.length) { t && (r = t); var _n = 0, F = function F() {}; return { s: F, n: function n() { return _n >= r.length ? { done: !0 } : { done: !1, value: r[_n++] }; }, e: function e(r) { throw r; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var o, a = !0, u = !1; return { s: function s() { t = t.call(r); }, n: function n() { var r = t.next(); return a = r.done, r; }, e: function e(r) { u = !0, o = r; }, f: function f() { try { a || null == t.return || t.return(); } finally { if (u) throw o; } } }; }
5
5
  function _unsupportedIterableToArray(r, a) { if (r) { if ("string" == typeof r) return _arrayLikeToArray(r, a); var t = {}.toString.call(r).slice(8, -1); return "Object" === t && r.constructor && (t = r.constructor.name), "Map" === t || "Set" === t ? Array.from(r) : "Arguments" === t || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(t) ? _arrayLikeToArray(r, a) : void 0; } }
6
- function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) { n[e] = r[e]; } return n; }
6
+ function _arrayLikeToArray(r, a) { (null == a || a > r.length) && (a = r.length); for (var e = 0, n = Array(a); e < a; e++) n[e] = r[e]; return n; }
7
7
  import { isEmpty, first, last } from 'lodash/fp';
8
8
  import { hasValidStartAndEnd } from '.';
9
9
  import { IntervalTypes } from '../scheduling.types';
@@ -13,90 +13,88 @@ import { occurrenceIntervalsGenerator, serviceIntervalsGenerator } from '../gene
13
13
  * Generates non repeating schedule service and occurrence intervals
14
14
  */
15
15
  export function generateNonRepeatingSchedule(props) {
16
- var end, serviceHours, start, strategy, isStartAndEndValid, serviceIntervalSequence, hours, timezone, hasServiceHours, intervals, serviceIntervals, _i, _serviceIntervals, serviceInterval, occurrenceIntervalsSequence, _iterator, _step, occurrenceInterval;
17
- return _regeneratorRuntime.wrap(function generateNonRepeatingSchedule$(_context) {
18
- while (1) {
19
- switch (_context.prev = _context.next) {
20
- case 0:
21
- end = props.end, serviceHours = props.serviceHours, start = props.start, strategy = props.strategy;
22
- isStartAndEndValid = hasValidStartAndEnd({
23
- end: end,
24
- start: start
25
- });
26
- if (isStartAndEndValid) {
27
- _context.next = 4;
28
- break;
29
- }
30
- return _context.abrupt("return", []);
31
- case 4:
32
- serviceIntervalSequence = serviceIntervalsGenerator({
33
- end: end,
34
- serviceHours: serviceHours,
35
- start: start
36
- });
37
- hours = serviceHours.hours, timezone = serviceHours.timezone;
38
- hasServiceHours = !isEmpty(hours);
39
- intervals = _toConsumableArray(serviceIntervalSequence); // NOTE: when non repeating and has service hours the service interval is
40
- // from the first and last service interval otherwise from the start and end
41
- serviceIntervals = !hasServiceHours ? [[start, end]] : !isEmpty(intervals) ? [[first(intervals)[0], last(intervals)[1]]] : [];
42
- _i = 0, _serviceIntervals = serviceIntervals;
43
- case 10:
44
- if (!(_i < _serviceIntervals.length)) {
45
- _context.next = 35;
46
- break;
47
- }
48
- serviceInterval = _serviceIntervals[_i];
49
- _context.next = 14;
50
- return {
51
- interval: serviceInterval,
52
- type: IntervalTypes.Service
53
- };
54
- case 14:
55
- occurrenceIntervalsSequence = occurrenceIntervalsGenerator({
56
- // NOTE: as we only have one interval we should always set isInitial to
57
- // true
58
- isInitial: true,
59
- serviceInterval: serviceInterval,
60
- strategy: strategy,
61
- timezone: timezone
62
- });
63
- _iterator = _createForOfIteratorHelper(occurrenceIntervalsSequence);
64
- _context.prev = 16;
65
- _iterator.s();
66
- case 18:
67
- if ((_step = _iterator.n()).done) {
68
- _context.next = 24;
69
- break;
70
- }
71
- occurrenceInterval = _step.value;
72
- _context.next = 22;
73
- return {
74
- interval: occurrenceInterval,
75
- type: IntervalTypes.Occurrence
76
- };
77
- case 22:
78
- _context.next = 18;
16
+ var end, serviceHours, start, strategy, isStartAndEndValid, serviceIntervalSequence, hours, timezone, hasServiceHours, intervals, serviceIntervals, _i, _serviceIntervals, serviceInterval, occurrenceIntervalsSequence, _iterator, _step, occurrenceInterval, _t;
17
+ return _regeneratorRuntime.wrap(function (_context) {
18
+ while (1) switch (_context.prev = _context.next) {
19
+ case 0:
20
+ end = props.end, serviceHours = props.serviceHours, start = props.start, strategy = props.strategy;
21
+ isStartAndEndValid = hasValidStartAndEnd({
22
+ end: end,
23
+ start: start
24
+ });
25
+ if (isStartAndEndValid) {
26
+ _context.next = 1;
79
27
  break;
80
- case 24:
81
- _context.next = 29;
28
+ }
29
+ return _context.abrupt("return", []);
30
+ case 1:
31
+ serviceIntervalSequence = serviceIntervalsGenerator({
32
+ end: end,
33
+ serviceHours: serviceHours,
34
+ start: start
35
+ });
36
+ hours = serviceHours.hours, timezone = serviceHours.timezone;
37
+ hasServiceHours = !isEmpty(hours);
38
+ intervals = _toConsumableArray(serviceIntervalSequence); // NOTE: when non repeating and has service hours the service interval is
39
+ // from the first and last service interval otherwise from the start and end
40
+ serviceIntervals = !hasServiceHours ? [[start, end]] : !isEmpty(intervals) ? [[first(intervals)[0], last(intervals)[1]]] : [];
41
+ _i = 0, _serviceIntervals = serviceIntervals;
42
+ case 2:
43
+ if (!(_i < _serviceIntervals.length)) {
44
+ _context.next = 11;
82
45
  break;
83
- case 26:
84
- _context.prev = 26;
85
- _context.t0 = _context["catch"](16);
86
- _iterator.e(_context.t0);
87
- case 29:
88
- _context.prev = 29;
89
- _iterator.f();
90
- return _context.finish(29);
91
- case 32:
92
- _i++;
93
- _context.next = 10;
46
+ }
47
+ serviceInterval = _serviceIntervals[_i];
48
+ _context.next = 3;
49
+ return {
50
+ interval: serviceInterval,
51
+ type: IntervalTypes.Service
52
+ };
53
+ case 3:
54
+ occurrenceIntervalsSequence = occurrenceIntervalsGenerator({
55
+ // NOTE: as we only have one interval we should always set isInitial to
56
+ // true
57
+ isInitial: true,
58
+ serviceInterval: serviceInterval,
59
+ strategy: strategy,
60
+ timezone: timezone
61
+ });
62
+ _iterator = _createForOfIteratorHelper(occurrenceIntervalsSequence);
63
+ _context.prev = 4;
64
+ _iterator.s();
65
+ case 5:
66
+ if ((_step = _iterator.n()).done) {
67
+ _context.next = 7;
94
68
  break;
95
- case 35:
96
- case "end":
97
- return _context.stop();
98
- }
69
+ }
70
+ occurrenceInterval = _step.value;
71
+ _context.next = 6;
72
+ return {
73
+ interval: occurrenceInterval,
74
+ type: IntervalTypes.Occurrence
75
+ };
76
+ case 6:
77
+ _context.next = 5;
78
+ break;
79
+ case 7:
80
+ _context.next = 9;
81
+ break;
82
+ case 8:
83
+ _context.prev = 8;
84
+ _t = _context["catch"](4);
85
+ _iterator.e(_t);
86
+ case 9:
87
+ _context.prev = 9;
88
+ _iterator.f();
89
+ return _context.finish(9);
90
+ case 10:
91
+ _i++;
92
+ _context.next = 2;
93
+ break;
94
+ case 11:
95
+ case "end":
96
+ return _context.stop();
99
97
  }
100
- }, _marked, null, [[16, 26, 29, 32]]);
98
+ }, _marked, null, [[4, 8, 9, 10]]);
101
99
  }
102
100
  //# sourceMappingURL=generateNonRepeatingSchedule.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"generateNonRepeatingSchedule.js","names":["generateNonRepeatingSchedule","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","from","test","isEmpty","first","last","hasValidStartAndEnd","IntervalTypes","occurrenceIntervalsGenerator","serviceIntervalsGenerator","props","end","serviceHours","start","strategy","isStartAndEndValid","serviceIntervalSequence","hours","timezone","hasServiceHours","intervals","serviceIntervals","_i","_serviceIntervals","serviceInterval","occurrenceIntervalsSequence","_iterator","_step","occurrenceInterval","_regeneratorRuntime","wrap","generateNonRepeatingSchedule$","_context","prev","abrupt","_toConsumableArray","interval","type","Service","isInitial","Occurrence","t0","finish","stop","_marked"],"sources":["../../../src/scheduling/helpers/generateNonRepeatingSchedule.ts"],"sourcesContent":["import { isEmpty, first, last } from 'lodash/fp'\n\nimport { hasValidStartAndEnd } from '.'\nimport { IntervalTypes, ScheduleIntervalsGenerator } from '../scheduling.types'\nimport {\n occurrenceIntervalsGenerator,\n serviceIntervalsGenerator,\n} from '../generators'\n\n/**\n * Generates non repeating schedule service and occurrence intervals\n */\nexport function* generateNonRepeatingSchedule(\n props: ScheduleIntervalsGenerator\n) {\n const { end, serviceHours, start, strategy } = props\n\n const isStartAndEndValid = hasValidStartAndEnd({ end, start })\n if (!isStartAndEndValid) return []\n\n const serviceIntervalSequence = serviceIntervalsGenerator({\n end,\n serviceHours,\n start,\n })\n\n const { hours, timezone } = serviceHours\n const hasServiceHours = !isEmpty(hours)\n const intervals = [...serviceIntervalSequence]\n\n // NOTE: when non repeating and has service hours the service interval is\n // from the first and last service interval otherwise from the start and end\n const serviceIntervals = !hasServiceHours\n ? [[start, end]]\n : !isEmpty(intervals)\n ? [[first(intervals)[0], last(intervals)[1]]]\n : []\n\n for (const serviceInterval of serviceIntervals) {\n yield { interval: serviceInterval, type: IntervalTypes.Service }\n\n const occurrenceIntervalsSequence = occurrenceIntervalsGenerator({\n // NOTE: as we only have one interval we should always set isInitial to\n // true\n isInitial: true,\n serviceInterval,\n strategy,\n timezone,\n })\n\n for (const occurrenceInterval of occurrenceIntervalsSequence) {\n yield { interval: occurrenceInterval, type: IntervalTypes.Occurrence }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"generateNonRepeatingSchedule.js","names":["generateNonRepeatingSchedule","_createForOfIteratorHelper","r","e","t","Symbol","iterator","Array","isArray","_unsupportedIterableToArray","length","_n","F","s","n","done","value","f","TypeError","o","a","u","call","next","return","_arrayLikeToArray","toString","slice","constructor","name","from","test","isEmpty","first","last","hasValidStartAndEnd","IntervalTypes","occurrenceIntervalsGenerator","serviceIntervalsGenerator","props","end","serviceHours","start","strategy","isStartAndEndValid","serviceIntervalSequence","hours","timezone","hasServiceHours","intervals","serviceIntervals","_i","_serviceIntervals","serviceInterval","occurrenceIntervalsSequence","_iterator","_step","occurrenceInterval","_t","_regeneratorRuntime","wrap","_context","prev","abrupt","_toConsumableArray","interval","type","Service","isInitial","Occurrence","finish","stop","_marked"],"sources":["../../../src/scheduling/helpers/generateNonRepeatingSchedule.ts"],"sourcesContent":["import { isEmpty, first, last } from 'lodash/fp'\n\nimport { hasValidStartAndEnd } from '.'\nimport { IntervalTypes, ScheduleIntervalsGenerator } from '../scheduling.types'\nimport {\n occurrenceIntervalsGenerator,\n serviceIntervalsGenerator,\n} from '../generators'\n\n/**\n * Generates non repeating schedule service and occurrence intervals\n */\nexport function* generateNonRepeatingSchedule(\n props: ScheduleIntervalsGenerator\n) {\n const { end, serviceHours, start, strategy } = props\n\n const isStartAndEndValid = hasValidStartAndEnd({ end, start })\n if (!isStartAndEndValid) return []\n\n const serviceIntervalSequence = serviceIntervalsGenerator({\n end,\n serviceHours,\n start,\n })\n\n const { hours, timezone } = serviceHours\n const hasServiceHours = !isEmpty(hours)\n const intervals = [...serviceIntervalSequence]\n\n // NOTE: when non repeating and has service hours the service interval is\n // from the first and last service interval otherwise from the start and end\n const serviceIntervals = !hasServiceHours\n ? [[start, end]]\n : !isEmpty(intervals)\n ? [[first(intervals)[0], last(intervals)[1]]]\n : []\n\n for (const serviceInterval of serviceIntervals) {\n yield { interval: serviceInterval, type: IntervalTypes.Service }\n\n const occurrenceIntervalsSequence = occurrenceIntervalsGenerator({\n // NOTE: as we only have one interval we should always set isInitial to\n // true\n isInitial: true,\n serviceInterval,\n strategy,\n timezone,\n })\n\n for (const occurrenceInterval of occurrenceIntervalsSequence) {\n yield { interval: occurrenceInterval, type: IntervalTypes.Occurrence }\n }\n }\n}\n"],"mappings":"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","ignoreList":[]}