@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.
- package/dist/helpers/build-fetch-url/index.js +2 -2
- package/dist/helpers/fetch-image/index.js +1 -1
- package/dist/helpers/fetch-image-for-pdf-generator-service/index.js +9 -9
- package/dist/helpers/fetch-image-for-web/index.js +3 -14
- package/dist/helpers/get-audit-entry-details/index.js +2 -0
- package/dist/helpers/get-issue-details/index.js +2 -0
- package/dist/helpers/get-task-entry-details/index.js +3 -1
- package/dist/pdf/helpers/fields/index.js +2 -2
- package/dist/scheduling/scheduling.types.js +9 -9
- package/dist/service-hours/schema.js +12 -12
- package/lib/errors/DomainError.js +7 -8
- package/lib/errors/DomainError.js.map +1 -1
- package/lib/errors/ValidationError.js +11 -9
- package/lib/errors/ValidationError.js.map +1 -1
- package/lib/helpers/build-fetch-url/index.js +2 -2
- package/lib/helpers/build-fetch-url/index.js.map +1 -1
- package/lib/helpers/fetch-image/index.js +1 -1
- package/lib/helpers/fetch-image/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js +174 -180
- package/lib/helpers/fetch-image-for-pdf-generator-service/index.js.map +1 -1
- package/lib/helpers/fetch-image-for-web/index.js +60 -74
- package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
- package/lib/helpers/fetch-lighthouse-logo/index.js +41 -43
- package/lib/helpers/fetch-lighthouse-logo/index.js.map +1 -1
- package/lib/helpers/get-audit-entry-details/index.js +2 -0
- package/lib/helpers/get-audit-entry-details/index.js.map +1 -1
- package/lib/helpers/get-audit-items-data/index.js +8 -8
- package/lib/helpers/get-audit-items-data/index.js.map +1 -1
- package/lib/helpers/get-issue-details/index.js +2 -0
- package/lib/helpers/get-issue-details/index.js.map +1 -1
- package/lib/helpers/get-job-details/index.js.map +1 -1
- package/lib/helpers/get-location-reference/index.js +6 -4
- package/lib/helpers/get-location-reference/index.js.map +1 -1
- package/lib/helpers/get-reference-details/index.js.map +1 -1
- package/lib/helpers/get-task-entry-details/index.js +3 -1
- package/lib/helpers/get-task-entry-details/index.js.map +1 -1
- package/lib/helpers/get-timezone-datetime/index.js.map +1 -1
- package/lib/pdf/activity-report/index.js +299 -311
- package/lib/pdf/activity-report/index.js.map +1 -1
- package/lib/pdf/audit/index.js.map +1 -1
- package/lib/pdf/helpers/build-audit-content/index.js.map +1 -1
- package/lib/pdf/helpers/build-audit-follow-ups/index.js.map +1 -1
- package/lib/pdf/helpers/build-location-scans-content/index.js.map +1 -1
- package/lib/pdf/helpers/build-template-content/index.js.map +1 -1
- package/lib/pdf/helpers/fields/index.js +14 -14
- package/lib/pdf/helpers/fields/index.js.map +1 -1
- package/lib/pdf/helpers/generate-definition/index.js.map +1 -1
- package/lib/pdf/helpers/horizontal-line/index.js.map +1 -1
- package/lib/pdf/helpers/html-transformer/index.js +1 -2
- package/lib/pdf/helpers/html-transformer/index.js.map +1 -1
- package/lib/pdf/helpers/table/index.js +63 -65
- package/lib/pdf/helpers/table/index.js.map +1 -1
- package/lib/pdf/issue/index.js.map +1 -1
- package/lib/pdf/job/index.js.map +1 -1
- package/lib/pdf/shift-report/index.js +275 -291
- package/lib/pdf/shift-report/index.js.map +1 -1
- package/lib/pdf/task/index.js.map +1 -1
- package/lib/scheduling/generators/occurrenceIntervalsGenerator.js +27 -30
- package/lib/scheduling/generators/occurrenceIntervalsGenerator.js.map +1 -1
- package/lib/scheduling/generators/scheduleIntervalsGenerator.js +19 -21
- package/lib/scheduling/generators/scheduleIntervalsGenerator.js.map +1 -1
- package/lib/scheduling/generators/serviceIntervalsGenerator.js +134 -136
- package/lib/scheduling/generators/serviceIntervalsGenerator.js.map +1 -1
- package/lib/scheduling/helpers/generateNonRepeatingSchedule.js +81 -83
- package/lib/scheduling/helpers/generateNonRepeatingSchedule.js.map +1 -1
- package/lib/scheduling/helpers/generateRepeatingSchedule.js +104 -106
- package/lib/scheduling/helpers/generateRepeatingSchedule.js.map +1 -1
- package/lib/scheduling/helpers/generateScheduleEnd.js.map +1 -1
- package/lib/scheduling/helpers/mergeIntervals.js.map +1 -1
- package/lib/scheduling/scheduling.types.js +9 -9
- package/lib/scheduling/scheduling.types.js.map +1 -1
- package/lib/scheduling/strategies/getNext.js +21 -17
- package/lib/scheduling/strategies/getNext.js.map +1 -1
- package/lib/scheduling/strategies/getNextExactDateOfMonth.js +21 -18
- package/lib/scheduling/strategies/getNextExactDateOfMonth.js.map +1 -1
- package/lib/scheduling/strategies/getNextLastDayOfMonth.js +20 -17
- package/lib/scheduling/strategies/getNextLastDayOfMonth.js.map +1 -1
- package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js +20 -17
- package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js.map +1 -1
- package/lib/scheduling/strategies/getNextNoRepeat.js +15 -14
- package/lib/scheduling/strategies/getNextNoRepeat.js.map +1 -1
- package/lib/scheduling/strategies/getNextWeekday.js +36 -33
- package/lib/scheduling/strategies/getNextWeekday.js.map +1 -1
- package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +20 -17
- package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js.map +1 -1
- package/lib/schema/schema.js +21 -23
- package/lib/schema/schema.js.map +1 -1
- package/lib/service-hours/schema.js +15 -13
- package/lib/service-hours/schema.js.map +1 -1
- package/package.json +2 -2
- 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++)
|
|
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
|
|
18
|
-
while (1) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
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
|
-
|
|
61
|
-
|
|
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
|
-
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
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
|
-
|
|
76
|
-
|
|
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
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
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, [[
|
|
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":";;oDA6BiBA,yBAAyB;AAAA,SAAAC,2BAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,yBAAAC,MAAA,IAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,CAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,CAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,CAAA,IAAAD,CAAA,uBAAAA,CAAA,CAAAQ,MAAA,IAAAN,CAAA,KAAAF,CAAA,GAAAE,CAAA,OAAAO,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,WAAAH,EAAA,IAAAT,CAAA,CAAAQ,MAAA,KAAAK,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAAd,CAAA,CAAAS,EAAA,UAAAR,CAAA,WAAAA,EAAAD,CAAA,UAAAA,CAAA,KAAAe,CAAA,EAAAL,CAAA,gBAAAM,SAAA,iJAAAC,CAAA,EAAAC,CAAA,OAAAC,CAAA,gBAAAR,CAAA,WAAAA,EAAA,IAAAT,CAAA,GAAAA,CAAA,CAAAkB,IAAA,CAAApB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAZ,CAAA,GAAAE,CAAA,CAAAmB,IAAA,WAAAH,CAAA,GAAAlB,CAAA,CAAAa,IAAA,EAAAb,CAAA,KAAAC,CAAA,WAAAA,EAAAD,CAAA,IAAAmB,CAAA,OAAAF,CAAA,GAAAjB,CAAA,KAAAe,CAAA,WAAAA,EAAA,UAAAG,CAAA,YAAAhB,CAAA,CAAAoB,MAAA,IAAApB,CAAA,CAAAoB,MAAA,oBAAAH,CAAA,QAAAF,CAAA;AAAA,SAAAV,4BAAAP,CAAA,EAAAkB,CAAA,QAAAlB,CAAA,2BAAAA,CAAA,SAAAuB,iBAAA,CAAAvB,CAAA,EAAAkB,CAAA,OAAAhB,CAAA,MAAAsB,QAAA,CAAAJ,IAAA,CAAApB,CAAA,EAAAyB,KAAA,6BAAAvB,CAAA,IAAAF,CAAA,CAAA0B,WAAA,KAAAxB,CAAA,GAAAF,CAAA,CAAA0B,WAAA,CAAAC,IAAA,aAAAzB,CAAA,cAAAA,CAAA,GAAAG,KAAA,CAAAuB,IAAA,CAAA5B,CAAA,oBAAAE,CAAA,+CAAA2B,IAAA,CAAA3B,CAAA,IAAAqB,iBAAA,CAAAvB,CAAA,EAAAkB,CAAA;AAAA,SAAAK,kBAAAvB,CAAA,EAAAkB,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAAlB,CAAA,CAAAQ,MAAA,MAAAU,CAAA,GAAAlB,CAAA,CAAAQ,MAAA,YAAAP,CAAA,MAAAW,CAAA,GAAAP,KAAA,CAAAa,CAAA,GAAAjB,CAAA,GAAAiB,CAAA,EAAAjB,CAAA,MAAAW,CAAA,CAAAX,CAAA,IAAAD,CAAA,CAAAC,CAAA,YAAAW,CAAA;AA7B1C,SAASkB,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,QAAQ,WAAW;AAC9D,OAAOC,MAAM,MAAM,iBAAiB;AAEpC,SACEC,UAAU,EACVC,SAAS,EAETC,KAAK,QACA,qBAAqB;AAC5B,SAAmBC,IAAI,QAAQ,qBAAqB;AACpD,SACEC,iBAAiB,EACjBC,cAAc,EACdC,yBAAyB,EACzBC,2BAA2B,EAC3BC,cAAc,EACdC,cAAc,EACdC,cAAc,QACT,YAAY;AAQnB;AACA;AACA;AACA,OAAO,SAAUhD,yBAAyBA,CAACiD,KAAgC;EAAA,IAAAC,GAAA,EAAAC,YAAA,EAAAC,KAAA,EAAAC,QAAA,EAAAC,mBAAA,EAAAC,MAAA,EAAAC,IAAA,EAAAC,WAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAC,aAAA,EAAAC,kBAAA,EAAAC,YAAA,EAAAC,iBAAA,EAAAC,cAAA,EAAAC,aAAA,EAAAC,SAAA,EAAAC,gBAAA,EAAAC,4BAAA,EAAAC,kBAAA,EAAAC,mBAAA,EAAAC,eAAA,EAAAC,gBAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAC,QAAA;EAAA,OAAAC,mBAAA,CAAAC,IAAA,UAAAC,2BAAAC,QAAA;IAAA;MAAA,QAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAxD,IAAA;QAAA;UACjE2B,GAAG,GAA0BD,KAAK,CAAlCC,GAAG,EAAEC,YAAY,GAAYF,KAAK,CAA7BE,YAAY,EAAEC,KAAK,GAAKH,KAAK,CAAfG,KAAK;UACxBC,QAAQ,GAAKF,YAAY,CAAzBE,QAAQ;UAEVC,mBAAmB,GAAGJ,GAAG,GAAGE,KAAK,IAAIA,KAAK,GAAGF,GAAG;UAAA,IAEjDI,mBAAmB;YAAAyB,QAAA,CAAAxD,IAAA;YAAA;UAAA;UAAA,OAAAwD,QAAA,CAAAE,MAAA,WAAS,EAAE;QAAA;UAE7B1B,MAAM,GAAGlB,MAAM,CAAC6C,EAAE,CAAC9B,KAAK,EAAEC,QAAQ,CAAC;UACnCG,IAAI,GAAGnB,MAAM,CAAC6C,EAAE,CAAChC,GAAG,EAAEG,QAAQ,CAAC;UAC/BI,WAAW,GAAGF,MAAM,CAAC4B,OAAO,CAAC,CAAC;UAC9BzB,SAAS,GAAGF,IAAI,CAAC2B,OAAO,CAAC,CAAC;UAAA,MAE5B,CAAC1B,WAAW,IAAI,CAACC,SAAS;YAAAqB,QAAA,CAAAxD,IAAA;YAAA;UAAA;UAAA,OAAAwD,QAAA,CAAAE,MAAA,WAAS,EAAE;QAAA;UAEjCtB,KAAK,GAAKR,YAAY,CAAtBQ,KAAK;UACPC,aAAa,GAAG,CAACR,KAAK,EAAEF,GAAG,CAAC;UAE5BW,kBAAkB,GAAG7B,MAAM,CAC/B;YAAEoD,SAAS,EAAE9C,UAAU,CAAC+C,KAAK;YAAEC,IAAI,EAAE9C,KAAK,CAAC+C;UAAS,CAAC,EACrD5B,KACF,CAAC;UACKG,YAAY,GAAG9B,MAAM,CAAC;YAAEsD,IAAI,EAAE9C,KAAK,CAACgD;UAAQ,CAAC,EAAE7B,KAAK,CAAC;UACrDI,iBAAiB,GAAG/B,MAAM,CAC9B;YAAEoD,SAAS,EAAE9C,UAAU,CAACmD,IAAI;YAAEH,IAAI,EAAE9C,KAAK,CAAC+C;UAAS,CAAC,EACpD5B,KACF,CAAC,EAED;UACA;UACMK,cAAc,GAAG5B,MAAM,CAC3B,UAACsD,IAAI,EAAEC,QAAQ,EAAK;YAClB,IAAMC,cAAc,GAAGvD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;YAC1D,IAAMwC,YAAY,GAAGxD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;YAEtD,IAAMyC,QAAQ,GAAGD,YAAY,CAACE,QAAQ,CAACxC,MAAM,CAAC;YAC9C,IAAMyC,UAAU,GAAGJ,cAAc,CAACK,OAAO,CAACzC,IAAI,CAAC;;YAE/C;YACA,IAAIsC,QAAQ,IAAIE,UAAU,EAAE;cAC1B,OAAON,IAAI;YACb;YAEA,IAAMtC,KAAK,GAAGV,iBAAiB,CAACiD,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;YACzD,IAAMH,GAAG,GAAGR,iBAAiB,CAACiD,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;YAErDqC,IAAI,CAACQ,IAAI,CAAC,CAAC9C,KAAK,EAAEF,GAAG,CAAC,CAAC;YAEvB,OAAOwC,IAAI;UACb,CAAC,EACD,EAAE,EACF7B,kBACF,CAAC;UAEKI,aAAa,GAAG7B,MAAM,CAC1B,UAACsD,IAAI,EAAEC,QAAQ,EAAK;YAClB,IAAMC,cAAc,GAAGvD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;YAC1D,IAAMwC,YAAY,GAAGxD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;YAEtD,IAAMyC,QAAQ,GAAGD,YAAY,CAACE,QAAQ,CAACxC,MAAM,CAAC;YAC9C,IAAMyC,UAAU,GAAGJ,cAAc,CAACK,OAAO,CAACzC,IAAI,CAAC;;YAE/C;YACA,IAAIsC,QAAQ,IAAIE,UAAU,EAAE;cAC1B,OAAON,IAAI;YACb;YAEA,IAAMtC,KAAK,GAAGV,iBAAiB,CAACiD,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;YACzD,IAAMH,GAAG,GAAGR,iBAAiB,CAACiD,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;YAErDqC,IAAI,CAACQ,IAAI,CAAC,CAAC9C,KAAK,EAAEF,GAAG,CAAC,CAAC;YAEvB,OAAOwC,IAAI;UACb,CAAC,EACD,EAAE,EACF3B,iBACF,CAAC;UAEGG,SAAS,GAAGX,MAAM,CAAC4C,OAAO,CAAC1D,IAAI,CAAC2D,IAAI,CAAC,CAACC,OAAO,CAAC,CAAC;UAE7ClC,gBAAgB,GAAG,EAAE;UAE3B,OAAOD,SAAS,GAAGhB,GAAG,EAAE;YACtBhB,OAAO,CAAC,UAAAoE,IAAI,EAAI;cACd;cACA;cAAA,IACaC,SAAS,GAAyBD,IAAI,CAA3CpD,GAAG;gBAAoBsD,WAAW,GAAKF,IAAI,CAA3BlD,KAAK;cAC7B,IAAMqD,SAAS,GAAGvC,SAAS,GAAGsC,WAAW;cACzC,IAAME,OAAO,GAAGxC,SAAS,GAAGqC,SAAS;cAErC,IAAM5B,QAAQ,GAAG,CAAC8B,SAAS,EAAEC,OAAO,CAAC;cAErC,IAAMC,8BAA8B,GAAG/D,yBAAyB,CAC9D+B,QAAQ,EACRf,aACF,CAAC;cACD,IAAMgD,gCAAgC,GAAG/D,2BAA2B,CAClE8B,QAAQ,EACRf,aACF,CAAC;cACD,IAAMiD,qBAAqB,GAAG/D,cAAc,CAAC6B,QAAQ,EAAEf,aAAa,CAAC;cACrE,IAAMkD,qBAAqB,GAAGhE,cAAc,CAACc,aAAa,EAAEe,QAAQ,CAAC;cAErE,IAAMoC,UAAU,GACd,CAACF,qBAAqB,IACtB,CAACC,qBAAqB,IACtB,CAACF,gCAAgC,IACjC,CAACD,8BAA8B;cAEjC,IAAII,UAAU,EAAE;cAEhB,IAAMC,SAAS,GACbF,qBAAqB,IAAIF,gCAAgC,GACrDxD,KAAK,GACLqD,SAAS;cAEf,IAAMQ,OAAO,GACXH,qBAAqB,IAAIH,8BAA8B,GAAGzD,GAAG,GAAGwD,OAAO;cAEzEvC,gBAAgB,CAAC+B,IAAI,CAAC,CAACc,SAAS,EAAEC,OAAO,CAAC,CAAC;YAC7C,CAAC,EAAEnD,YAAY,CAAC;YAEhBI,SAAS,GAAGA,SAAS,GAAG3B,SAAS,CAAC6D,IAAI;UACxC;;UAEA;UACA;UACMhC,4BAA4B,GAAGnC,IAAI,CACvCD,MAAM,CACJ,UAAC2C,QAAkB;YAAA,OACjBA,QAAQ,CAAC,CAAC,CAAC,IAAIf,aAAa,CAAC,CAAC,CAAC,IAAIe,QAAQ,CAAC,CAAC,CAAC,IAAIf,aAAa,CAAC,CAAC,CAAC;UAAA,CACtE,CAAC,EACDzB,GAAG,CACD,UAACwC,QAAkB,EAAe;YAChC,IAAMuC,mBAAmB,GAAGvE,cAAc,CAACgC,QAAQ,EAAEf,aAAa,CAAC;YACnE,IAAMuD,0BAA0B,GAAGvE,yBAAyB,CAC1D+B,QAAQ,EACRf,aACF,CAAC;YACD,IAAMwD,4BAA4B,GAAGvE,2BAA2B,CAC9D8B,QAAQ,EACRf,aACF,CAAC;YAED,IAAMyD,aAAa,GAAGD,4BAA4B,GAC9CxD,aAAa,CAAC,CAAC,CAAC,GAChBe,QAAQ,CAAC,CAAC,CAAC;YACf,IAAM2C,WAAW,GAAGH,0BAA0B,GAC1CvD,aAAa,CAAC,CAAC,CAAC,GAChBe,QAAQ,CAAC,CAAC,CAAC;YAEf,OAAOuC,mBAAmB,GACtBtD,aAAa,GACb,CAACyD,aAAa,EAAEC,WAAW,CAAC;UAClC,CACF,CACF,CAAC,EAED;UACA;UACA;UACA;UACMjD,kBAAkB,GAAGD,4BAA4B,CAACH,aAAa,CAAC;UAChEK,mBAAmB,GAAGF,4BAA4B,CAACJ,cAAc,CAAC;UAElEO,eAAe,GAAGxB,cAAc,IAAAwE,MAAA,CACjCpD,gBAAgB,EAAAqD,kBAAA,CAChBnD,kBAAkB,EACtB,CAAC;UACIG,gBAAgB,GAAGxB,cAAc,CAACuB,eAAe,EAAED,mBAAmB,CAAC;UAAAG,SAAA,GAAAxE,0BAAA,CAExDuE,gBAAgB;UAAAO,QAAA,CAAAC,IAAA;UAAAP,SAAA,CAAA5D,CAAA;QAAA;UAAA,KAAA6D,KAAA,GAAAD,SAAA,CAAA3D,CAAA,IAAAC,IAAA;YAAAgE,QAAA,CAAAxD,IAAA;YAAA;UAAA;UAA5BoD,QAAQ,GAAAD,KAAA,CAAA1D,KAAA;UAAA+D,QAAA,CAAAxD,IAAA;UAAsB,OAAMoD,QAAQ;QAAA;UAAAI,QAAA,CAAAxD,IAAA;UAAA;QAAA;UAAAwD,QAAA,CAAAxD,IAAA;UAAA;QAAA;UAAAwD,QAAA,CAAAC,IAAA;UAAAD,QAAA,CAAA0C,EAAA,GAAA1C,QAAA;UAAAN,SAAA,CAAAtE,CAAA,CAAA4E,QAAA,CAAA0C,EAAA;QAAA;UAAA1C,QAAA,CAAAC,IAAA;UAAAP,SAAA,CAAAxD,CAAA;UAAA,OAAA8D,QAAA,CAAA2C,MAAA;QAAA;QAAA;UAAA,OAAA3C,QAAA,CAAA4C,IAAA;MAAA;IAAA;EAAA,GAAAC,OAAA;AAAA","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":";;oDA8BiBA,yBAAyB;AAAA,SAAAC,2BAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,yBAAAC,MAAA,IAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,CAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,CAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,CAAA,IAAAD,CAAA,uBAAAA,CAAA,CAAAQ,MAAA,IAAAN,CAAA,KAAAF,CAAA,GAAAE,CAAA,OAAAO,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,WAAAH,EAAA,IAAAT,CAAA,CAAAQ,MAAA,KAAAK,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAAd,CAAA,CAAAS,EAAA,UAAAR,CAAA,WAAAA,EAAAD,CAAA,UAAAA,CAAA,KAAAe,CAAA,EAAAL,CAAA,gBAAAM,SAAA,iJAAAC,CAAA,EAAAC,CAAA,OAAAC,CAAA,gBAAAR,CAAA,WAAAA,EAAA,IAAAT,CAAA,GAAAA,CAAA,CAAAkB,IAAA,CAAApB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAZ,CAAA,GAAAE,CAAA,CAAAmB,IAAA,WAAAH,CAAA,GAAAlB,CAAA,CAAAa,IAAA,EAAAb,CAAA,KAAAC,CAAA,WAAAA,EAAAD,CAAA,IAAAmB,CAAA,OAAAF,CAAA,GAAAjB,CAAA,KAAAe,CAAA,WAAAA,EAAA,UAAAG,CAAA,YAAAhB,CAAA,CAAAoB,MAAA,IAAApB,CAAA,CAAAoB,MAAA,oBAAAH,CAAA,QAAAF,CAAA;AAAA,SAAAV,4BAAAP,CAAA,EAAAkB,CAAA,QAAAlB,CAAA,2BAAAA,CAAA,SAAAuB,iBAAA,CAAAvB,CAAA,EAAAkB,CAAA,OAAAhB,CAAA,MAAAsB,QAAA,CAAAJ,IAAA,CAAApB,CAAA,EAAAyB,KAAA,6BAAAvB,CAAA,IAAAF,CAAA,CAAA0B,WAAA,KAAAxB,CAAA,GAAAF,CAAA,CAAA0B,WAAA,CAAAC,IAAA,aAAAzB,CAAA,cAAAA,CAAA,GAAAG,KAAA,CAAAuB,IAAA,CAAA5B,CAAA,oBAAAE,CAAA,+CAAA2B,IAAA,CAAA3B,CAAA,IAAAqB,iBAAA,CAAAvB,CAAA,EAAAkB,CAAA;AAAA,SAAAK,kBAAAvB,CAAA,EAAAkB,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAAlB,CAAA,CAAAQ,MAAA,MAAAU,CAAA,GAAAlB,CAAA,CAAAQ,MAAA,YAAAP,CAAA,MAAAW,CAAA,GAAAP,KAAA,CAAAa,CAAA,GAAAjB,CAAA,GAAAiB,CAAA,EAAAjB,CAAA,IAAAW,CAAA,CAAAX,CAAA,IAAAD,CAAA,CAAAC,CAAA,UAAAW,CAAA;AA9B1C,SAASkB,MAAM,EAAEC,IAAI,EAAEC,OAAO,EAAEC,GAAG,EAAEC,MAAM,QAAQ,WAAW;AAC9D,OAAOC,MAAM,MAAM,iBAAiB;AAEpC,SACEC,UAAU,EACVC,SAAS,EAGTC,KAAK,QACA,qBAAqB;AAC5B,SAAmBC,IAAI,QAAQ,qBAAqB;AACpD,SACEC,iBAAiB,EACjBC,cAAc,EACdC,yBAAyB,EACzBC,2BAA2B,EAC3BC,cAAc,EACdC,cAAc,EACdC,cAAc,QACT,YAAY;AAQnB;AACA;AACA;AACA,OAAO,SAAUhD,yBAAyBA,CAACiD,KAAgC;EAAA,IAAAC,GAAA,EAAAC,YAAA,EAAAC,KAAA,EAAAC,QAAA,EAAAC,mBAAA,EAAAC,MAAA,EAAAC,IAAA,EAAAC,WAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAC,aAAA,EAAAC,kBAAA,EAAAC,YAAA,EAAAC,iBAAA,EAAAC,cAAA,EAAAC,aAAA,EAAAC,SAAA,EAAAC,gBAAA,EAAAC,4BAAA,EAAAC,kBAAA,EAAAC,mBAAA,EAAAC,eAAA,EAAAC,gBAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAC,QAAA,EAAAC,EAAA;EAAA,OAAAC,mBAAA,CAAAC,IAAA,WAAAC,QAAA;IAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAxD,IAAA;MAAA;QACjE2B,GAAG,GAA0BD,KAAK,CAAlCC,GAAG,EAAEC,YAAY,GAAYF,KAAK,CAA7BE,YAAY,EAAEC,KAAK,GAAKH,KAAK,CAAfG,KAAK;QACxBC,QAAQ,GAAKF,YAAY,CAAzBE,QAAQ;QAEVC,mBAAmB,GAAGJ,GAAG,GAAGE,KAAK,IAAIA,KAAK,GAAGF,GAAG;QAAA,IAEjDI,mBAAmB;UAAAyB,QAAA,CAAAxD,IAAA;UAAA;QAAA;QAAA,OAAAwD,QAAA,CAAAE,MAAA,WAAS,EAAE;MAAA;QAE7B1B,MAAM,GAAGlB,MAAM,CAAC6C,EAAE,CAAC9B,KAAK,EAAEC,QAAQ,CAAC;QACnCG,IAAI,GAAGnB,MAAM,CAAC6C,EAAE,CAAChC,GAAG,EAAEG,QAAQ,CAAC;QAC/BI,WAAW,GAAGF,MAAM,CAAC4B,OAAO,CAAC,CAAC;QAC9BzB,SAAS,GAAGF,IAAI,CAAC2B,OAAO,CAAC,CAAC;QAAA,MAE5B,CAAC1B,WAAW,IAAI,CAACC,SAAS;UAAAqB,QAAA,CAAAxD,IAAA;UAAA;QAAA;QAAA,OAAAwD,QAAA,CAAAE,MAAA,WAAS,EAAE;MAAA;QAEjCtB,KAAK,GAAKR,YAAY,CAAtBQ,KAAK;QACPC,aAAa,GAAG,CAACR,KAAK,EAAEF,GAAG,CAAC;QAE5BW,kBAAiC,GAAG7B,MAAM,CAC9C;UAAEoD,SAAS,EAAE9C,UAAU,CAAC+C,KAAK;UAAEC,IAAI,EAAE9C,KAAK,CAAC+C;QAAS,CAAC,EACrD5B,KACF,CAAC;QACKG,YAA2B,GAAG9B,MAAM,CAAC;UAAEsD,IAAI,EAAE9C,KAAK,CAACgD;QAAQ,CAAC,EAAE7B,KAAK,CAAC;QACpEI,iBAAgC,GAAG/B,MAAM,CAC7C;UAAEoD,SAAS,EAAE9C,UAAU,CAACmD,IAAI;UAAEH,IAAI,EAAE9C,KAAK,CAAC+C;QAAS,CAAC,EACpD5B,KACF,CAAC,EAED;QACA;QACMK,cAAc,GAAG5B,MAAM,CAC3B,UAACsD,IAAI,EAAEC,QAAQ,EAAK;UAClB,IAAMC,cAAc,GAAGvD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;UAC1D,IAAMwC,YAAY,GAAGxD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;UAEtD,IAAMyC,QAAQ,GAAGD,YAAY,CAACE,QAAQ,CAACxC,MAAM,CAAC;UAC9C,IAAMyC,UAAU,GAAGJ,cAAc,CAACK,OAAO,CAACzC,IAAI,CAAC;;UAE/C;UACA,IAAIsC,QAAQ,IAAIE,UAAU,EAAE;YAC1B,OAAON,IAAI;UACb;UAEA,IAAMtC,KAAK,GAAGV,iBAAiB,CAACiD,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;UACzD,IAAMH,GAAG,GAAGR,iBAAiB,CAACiD,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;UAErDqC,IAAI,CAACQ,IAAI,CAAC,CAAC9C,KAAK,EAAEF,GAAG,CAAC,CAAC;UAEvB,OAAOwC,IAAI;QACb,CAAC,EACD,EAAE,EACF7B,kBACF,CAAC;QAEKI,aAAa,GAAG7B,MAAM,CAC1B,UAACsD,IAAI,EAAEC,QAAQ,EAAK;UAClB,IAAMC,cAAc,GAAGvD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;UAC1D,IAAMwC,YAAY,GAAGxD,MAAM,CAAC6C,EAAE,CAACS,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;UAEtD,IAAMyC,QAAQ,GAAGD,YAAY,CAACE,QAAQ,CAACxC,MAAM,CAAC;UAC9C,IAAMyC,UAAU,GAAGJ,cAAc,CAACK,OAAO,CAACzC,IAAI,CAAC;;UAE/C;UACA,IAAIsC,QAAQ,IAAIE,UAAU,EAAE;YAC1B,OAAON,IAAI;UACb;UAEA,IAAMtC,KAAK,GAAGV,iBAAiB,CAACiD,QAAQ,CAACvC,KAAK,EAAEC,QAAQ,CAAC;UACzD,IAAMH,GAAG,GAAGR,iBAAiB,CAACiD,QAAQ,CAACzC,GAAG,EAAEG,QAAQ,CAAC;UAErDqC,IAAI,CAACQ,IAAI,CAAC,CAAC9C,KAAK,EAAEF,GAAG,CAAC,CAAC;UAEvB,OAAOwC,IAAI;QACb,CAAC,EACD,EAAE,EACF3B,iBACF,CAAC;QAEGG,SAAS,GAAGX,MAAM,CAAC4C,OAAO,CAAC1D,IAAI,CAAC2D,IAAI,CAAC,CAACC,OAAO,CAAC,CAAC;QAE7ClC,gBAAgB,GAAG,EAAE;QAE3B,OAAOD,SAAS,GAAGhB,GAAG,EAAE;UACtBhB,OAAO,CAAC,UAAAoE,IAAI,EAAI;YACd;YACA;YACA,IAAaC,SAAS,GAAyBD,IAAI,CAA3CpD,GAAG;cAAoBsD,WAAW,GAAKF,IAAI,CAA3BlD,KAAK;YAC7B,IAAMqD,SAAS,GAAGvC,SAAS,GAAGsC,WAAW;YACzC,IAAME,OAAO,GAAGxC,SAAS,GAAGqC,SAAS;YAErC,IAAM5B,QAAQ,GAAG,CAAC8B,SAAS,EAAEC,OAAO,CAAC;YAErC,IAAMC,8BAA8B,GAAG/D,yBAAyB,CAC9D+B,QAAQ,EACRf,aACF,CAAC;YACD,IAAMgD,gCAAgC,GAAG/D,2BAA2B,CAClE8B,QAAQ,EACRf,aACF,CAAC;YACD,IAAMiD,qBAAqB,GAAG/D,cAAc,CAAC6B,QAAQ,EAAEf,aAAa,CAAC;YACrE,IAAMkD,qBAAqB,GAAGhE,cAAc,CAACc,aAAa,EAAEe,QAAQ,CAAC;YAErE,IAAMoC,UAAU,GACd,CAACF,qBAAqB,IACtB,CAACC,qBAAqB,IACtB,CAACF,gCAAgC,IACjC,CAACD,8BAA8B;YAEjC,IAAII,UAAU,EAAE;YAEhB,IAAMC,SAAS,GACbF,qBAAqB,IAAIF,gCAAgC,GACrDxD,KAAK,GACLqD,SAAS;YAEf,IAAMQ,OAAO,GACXH,qBAAqB,IAAIH,8BAA8B,GAAGzD,GAAG,GAAGwD,OAAO;YAEzEvC,gBAAgB,CAAC+B,IAAI,CAAC,CAACc,SAAS,EAAEC,OAAO,CAAC,CAAC;UAC7C,CAAC,EAAEnD,YAAY,CAAC;UAEhBI,SAAS,GAAGA,SAAS,GAAG3B,SAAS,CAAC6D,IAAI;QACxC;;QAEA;QACA;QACMhC,4BAA4B,GAAGnC,IAAI,CACvCD,MAAM,CACJ,UAAC2C,QAAkB;UAAA,OACjBA,QAAQ,CAAC,CAAC,CAAC,IAAIf,aAAa,CAAC,CAAC,CAAC,IAAIe,QAAQ,CAAC,CAAC,CAAC,IAAIf,aAAa,CAAC,CAAC,CAAC;QAAA,CACtE,CAAC,EACDzB,GAAG,CACD,UAACwC,QAAkB,EAAe;UAChC,IAAMuC,mBAAmB,GAAGvE,cAAc,CAACgC,QAAQ,EAAEf,aAAa,CAAC;UACnE,IAAMuD,0BAA0B,GAAGvE,yBAAyB,CAC1D+B,QAAQ,EACRf,aACF,CAAC;UACD,IAAMwD,4BAA4B,GAAGvE,2BAA2B,CAC9D8B,QAAQ,EACRf,aACF,CAAC;UAED,IAAMyD,aAAa,GAAGD,4BAA4B,GAC9CxD,aAAa,CAAC,CAAC,CAAC,GAChBe,QAAQ,CAAC,CAAC,CAAC;UACf,IAAM2C,WAAW,GAAGH,0BAA0B,GAC1CvD,aAAa,CAAC,CAAC,CAAC,GAChBe,QAAQ,CAAC,CAAC,CAAC;UAEf,OAAOuC,mBAAmB,GACtBtD,aAAa,GACb,CAACyD,aAAa,EAAEC,WAAW,CAAC;QAClC,CACF,CACF,CAAC,EAED;QACA;QACA;QACA;QACMjD,kBAAkB,GAAGD,4BAA4B,CAACH,aAAa,CAAC;QAChEK,mBAAmB,GAAGF,4BAA4B,CAACJ,cAAc,CAAC;QAElEO,eAAe,GAAGxB,cAAc,IAAAwE,MAAA,CACjCpD,gBAAgB,EAAAqD,kBAAA,CAChBnD,kBAAkB,EACtB,CAAC;QACIG,gBAAgB,GAAGxB,cAAc,CAACuB,eAAe,EAAED,mBAAmB,CAAC;QAAAG,SAAA,GAAAxE,0BAAA,CAExDuE,gBAAgB;QAAAO,QAAA,CAAAC,IAAA;QAAAP,SAAA,CAAA5D,CAAA;MAAA;QAAA,KAAA6D,KAAA,GAAAD,SAAA,CAAA3D,CAAA,IAAAC,IAAA;UAAAgE,QAAA,CAAAxD,IAAA;UAAA;QAAA;QAA5BoD,QAAQ,GAAAD,KAAA,CAAA1D,KAAA;QAAA+D,QAAA,CAAAxD,IAAA;QAAsB,OAAMoD,QAAQ;MAAA;QAAAI,QAAA,CAAAxD,IAAA;QAAA;MAAA;QAAAwD,QAAA,CAAAxD,IAAA;QAAA;MAAA;QAAAwD,QAAA,CAAAC,IAAA;QAAAJ,EAAA,GAAAG,QAAA;QAAAN,SAAA,CAAAtE,CAAA,CAAAyE,EAAA;MAAA;QAAAG,QAAA,CAAAC,IAAA;QAAAP,SAAA,CAAAxD,CAAA;QAAA,OAAA8D,QAAA,CAAA0C,MAAA;MAAA;MAAA;QAAA,OAAA1C,QAAA,CAAA2C,IAAA;IAAA;EAAA,GAAAC,OAAA;AAAA","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++)
|
|
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
|
|
18
|
-
while (1) {
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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
|
-
|
|
81
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
-
|
|
96
|
-
|
|
97
|
-
|
|
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, [[
|
|
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","
|
|
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":";;oDAYiBA,4BAA4B;AAAA,SAAAC,2BAAAC,CAAA,EAAAC,CAAA,QAAAC,CAAA,yBAAAC,MAAA,IAAAH,CAAA,CAAAG,MAAA,CAAAC,QAAA,KAAAJ,CAAA,qBAAAE,CAAA,QAAAG,KAAA,CAAAC,OAAA,CAAAN,CAAA,MAAAE,CAAA,GAAAK,2BAAA,CAAAP,CAAA,MAAAC,CAAA,IAAAD,CAAA,uBAAAA,CAAA,CAAAQ,MAAA,IAAAN,CAAA,KAAAF,CAAA,GAAAE,CAAA,OAAAO,EAAA,MAAAC,CAAA,YAAAA,EAAA,eAAAC,CAAA,EAAAD,CAAA,EAAAE,CAAA,WAAAA,EAAA,WAAAH,EAAA,IAAAT,CAAA,CAAAQ,MAAA,KAAAK,IAAA,WAAAA,IAAA,MAAAC,KAAA,EAAAd,CAAA,CAAAS,EAAA,UAAAR,CAAA,WAAAA,EAAAD,CAAA,UAAAA,CAAA,KAAAe,CAAA,EAAAL,CAAA,gBAAAM,SAAA,iJAAAC,CAAA,EAAAC,CAAA,OAAAC,CAAA,gBAAAR,CAAA,WAAAA,EAAA,IAAAT,CAAA,GAAAA,CAAA,CAAAkB,IAAA,CAAApB,CAAA,MAAAY,CAAA,WAAAA,EAAA,QAAAZ,CAAA,GAAAE,CAAA,CAAAmB,IAAA,WAAAH,CAAA,GAAAlB,CAAA,CAAAa,IAAA,EAAAb,CAAA,KAAAC,CAAA,WAAAA,EAAAD,CAAA,IAAAmB,CAAA,OAAAF,CAAA,GAAAjB,CAAA,KAAAe,CAAA,WAAAA,EAAA,UAAAG,CAAA,YAAAhB,CAAA,CAAAoB,MAAA,IAAApB,CAAA,CAAAoB,MAAA,oBAAAH,CAAA,QAAAF,CAAA;AAAA,SAAAV,4BAAAP,CAAA,EAAAkB,CAAA,QAAAlB,CAAA,2BAAAA,CAAA,SAAAuB,iBAAA,CAAAvB,CAAA,EAAAkB,CAAA,OAAAhB,CAAA,MAAAsB,QAAA,CAAAJ,IAAA,CAAApB,CAAA,EAAAyB,KAAA,6BAAAvB,CAAA,IAAAF,CAAA,CAAA0B,WAAA,KAAAxB,CAAA,GAAAF,CAAA,CAAA0B,WAAA,CAAAC,IAAA,aAAAzB,CAAA,cAAAA,CAAA,GAAAG,KAAA,CAAAuB,IAAA,CAAA5B,CAAA,oBAAAE,CAAA,+CAAA2B,IAAA,CAAA3B,CAAA,IAAAqB,iBAAA,CAAAvB,CAAA,EAAAkB,CAAA;AAAA,SAAAK,kBAAAvB,CAAA,EAAAkB,CAAA,aAAAA,CAAA,IAAAA,CAAA,GAAAlB,CAAA,CAAAQ,MAAA,MAAAU,CAAA,GAAAlB,CAAA,CAAAQ,MAAA,YAAAP,CAAA,MAAAW,CAAA,GAAAP,KAAA,CAAAa,CAAA,GAAAjB,CAAA,GAAAiB,CAAA,EAAAjB,CAAA,IAAAW,CAAA,CAAAX,CAAA,IAAAD,CAAA,CAAAC,CAAA,UAAAW,CAAA;AAZ7C,SAASkB,OAAO,EAAEC,KAAK,EAAEC,IAAI,QAAQ,WAAW;AAEhD,SAASC,mBAAmB,QAAQ,GAAG;AACvC,SAASC,aAAa,QAAoC,qBAAqB;AAC/E,SACEC,4BAA4B,EAC5BC,yBAAyB,QACpB,eAAe;;AAEtB;AACA;AACA;AACA,OAAO,SAAUtC,4BAA4BA,CAC3CuC,KAAiC;EAAA,IAAAC,GAAA,EAAAC,YAAA,EAAAC,KAAA,EAAAC,QAAA,EAAAC,kBAAA,EAAAC,uBAAA,EAAAC,KAAA,EAAAC,QAAA,EAAAC,eAAA,EAAAC,SAAA,EAAAC,gBAAA,EAAAC,EAAA,EAAAC,iBAAA,EAAAC,eAAA,EAAAC,2BAAA,EAAAC,SAAA,EAAAC,KAAA,EAAAC,kBAAA,EAAAC,EAAA;EAAA,OAAAC,mBAAA,CAAAC,IAAA,WAAAC,QAAA;IAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAtC,IAAA;MAAA;QAEzBiB,GAAG,GAAoCD,KAAK,CAA5CC,GAAG,EAAEC,YAAY,GAAsBF,KAAK,CAAvCE,YAAY,EAAEC,KAAK,GAAeH,KAAK,CAAzBG,KAAK,EAAEC,QAAQ,GAAKJ,KAAK,CAAlBI,QAAQ;QAEpCC,kBAAkB,GAAGT,mBAAmB,CAAC;UAAEK,GAAG,EAAHA,GAAG;UAAEE,KAAK,EAALA;QAAM,CAAC,CAAC;QAAA,IACzDE,kBAAkB;UAAAiB,QAAA,CAAAtC,IAAA;UAAA;QAAA;QAAA,OAAAsC,QAAA,CAAAE,MAAA,WAAS,EAAE;MAAA;QAE5BlB,uBAAuB,GAAGP,yBAAyB,CAAC;UACxDE,GAAG,EAAHA,GAAG;UACHC,YAAY,EAAZA,YAAY;UACZC,KAAK,EAALA;QACF,CAAC,CAAC;QAEMI,KAAK,GAAeL,YAAY,CAAhCK,KAAK,EAAEC,QAAQ,GAAKN,YAAY,CAAzBM,QAAQ;QACjBC,eAAe,GAAG,CAAChB,OAAO,CAACc,KAAK,CAAC;QACjCG,SAAS,GAAAe,kBAAA,CAAOnB,uBAAuB,GAE7C;QACA;QACMK,gBAAgB,GAAG,CAACF,eAAe,GACrC,CAAC,CAACN,KAAK,EAAEF,GAAG,CAAC,CAAC,GACd,CAACR,OAAO,CAACiB,SAAS,CAAC,GACnB,CAAC,CAAChB,KAAK,CAACgB,SAAS,CAAC,CAAC,CAAC,CAAC,EAAEf,IAAI,CAACe,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAC3C,EAAE;QAAAE,EAAA,MAAAC,iBAAA,GAEwBF,gBAAgB;MAAA;QAAA,MAAAC,EAAA,GAAAC,iBAAA,CAAA1C,MAAA;UAAAmD,QAAA,CAAAtC,IAAA;UAAA;QAAA;QAAnC8B,eAAe,GAAAD,iBAAA,CAAAD,EAAA;QAAAU,QAAA,CAAAtC,IAAA;QACxB,OAAM;UAAE0C,QAAQ,EAAEZ,eAAe;UAAEa,IAAI,EAAE9B,aAAa,CAAC+B;QAAQ,CAAC;MAAA;QAE1Db,2BAA2B,GAAGjB,4BAA4B,CAAC;UAC/D;UACA;UACA+B,SAAS,EAAE,IAAI;UACff,eAAe,EAAfA,eAAe;UACfV,QAAQ,EAARA,QAAQ;UACRI,QAAQ,EAARA;QACF,CAAC,CAAC;QAAAQ,SAAA,GAAAtD,0BAAA,CAE+BqD,2BAA2B;QAAAO,QAAA,CAAAC,IAAA;QAAAP,SAAA,CAAA1C,CAAA;MAAA;QAAA,KAAA2C,KAAA,GAAAD,SAAA,CAAAzC,CAAA,IAAAC,IAAA;UAAA8C,QAAA,CAAAtC,IAAA;UAAA;QAAA;QAAjDkC,kBAAkB,GAAAD,KAAA,CAAAxC,KAAA;QAAA6C,QAAA,CAAAtC,IAAA;QAC3B,OAAM;UAAE0C,QAAQ,EAAER,kBAAkB;UAAES,IAAI,EAAE9B,aAAa,CAACiC;QAAW,CAAC;MAAA;QAAAR,QAAA,CAAAtC,IAAA;QAAA;MAAA;QAAAsC,QAAA,CAAAtC,IAAA;QAAA;MAAA;QAAAsC,QAAA,CAAAC,IAAA;QAAAJ,EAAA,GAAAG,QAAA;QAAAN,SAAA,CAAApD,CAAA,CAAAuD,EAAA;MAAA;QAAAG,QAAA,CAAAC,IAAA;QAAAP,SAAA,CAAAtC,CAAA;QAAA,OAAA4C,QAAA,CAAAS,MAAA;MAAA;QAAAnB,EAAA;QAAAU,QAAA,CAAAtC,IAAA;QAAA;MAAA;MAAA;QAAA,OAAAsC,QAAA,CAAAU,IAAA;IAAA;EAAA,GAAAC,OAAA;AAAA","ignoreList":[]}
|