@lighthouse/common 6.10.0 → 6.10.1-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (229) hide show
  1. package/.mise.toml +6 -6
  2. package/CHANGELOG.md +758 -758
  3. package/README.md +1 -1
  4. package/dist/errors/FetchImageError.js +3 -3
  5. package/dist/helpers/fetch-image-for-pdf-generator-service/index.js +7 -7
  6. package/dist/helpers/floatify/index.js +6 -6
  7. package/dist/helpers/get-audit-items-data/index.js +47 -36
  8. package/dist/helpers/validate-url/index.js +4 -4
  9. package/dist/pdf/activity-report/index.js +32 -32
  10. package/dist/pdf/audit/index.js +23 -23
  11. package/dist/pdf/helpers/fields/index.js +47 -27
  12. package/dist/pdf/issue/index.js +23 -23
  13. package/dist/pdf/job/index.js +22 -22
  14. package/dist/pdf/shift-report/index.js +28 -28
  15. package/dist/pdf/task/index.js +23 -23
  16. package/dist/scheduling/generators/occurrenceIntervalsGenerator.js +2 -2
  17. package/dist/scheduling/generators/scheduleIntervalsGenerator.js +2 -2
  18. package/dist/scheduling/generators/serviceIntervalsGenerator.js +2 -2
  19. package/dist/scheduling/helpers/convertToTimezone.js +6 -6
  20. package/dist/scheduling/helpers/generateNonRepeatingSchedule.js +2 -2
  21. package/dist/scheduling/helpers/generateRepeatingSchedule.js +2 -2
  22. package/dist/scheduling/helpers/generateScheduleEnd.js +2 -2
  23. package/dist/scheduling/helpers/hasValidStartAndEnd.js +5 -5
  24. package/dist/scheduling/helpers/intervalCovers.js +6 -6
  25. package/dist/scheduling/helpers/intervalIntersectsEnd.js +6 -6
  26. package/dist/scheduling/helpers/intervalIntersectsStart.js +6 -6
  27. package/dist/scheduling/helpers/intervalOnlyIntersectsEnd.js +6 -6
  28. package/dist/scheduling/helpers/intervalOnlyIntersectsStart.js +6 -6
  29. package/dist/scheduling/helpers/intervalOutside.js +6 -6
  30. package/dist/scheduling/helpers/intervalWithin.js +6 -6
  31. package/dist/scheduling/helpers/mergeIntervals.js +6 -6
  32. package/dist/scheduling/helpers/splitIntervals.js +6 -6
  33. package/dist/scheduling/strategies/getNext.js +2 -2
  34. package/dist/scheduling/strategies/getNextExactDateOfMonth.js +2 -2
  35. package/dist/scheduling/strategies/getNextLastDayOfMonth.js +2 -2
  36. package/dist/scheduling/strategies/getNextLastWeekdayOfMonth.js +2 -2
  37. package/dist/scheduling/strategies/getNextNoRepeat.js +2 -2
  38. package/dist/scheduling/strategies/getNextWeekday.js +2 -2
  39. package/dist/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +2 -2
  40. package/dist/service-hours/__helpers__/calculate-hours.js +4 -4
  41. package/dist/service-hours/__helpers__/isOpen.js +2 -2
  42. package/dist/service-hours/schema.js +4 -4
  43. package/lib/constants.js +12 -6
  44. package/lib/constants.js.map +1 -1
  45. package/lib/errors/DomainError.js +14 -21
  46. package/lib/errors/DomainError.js.map +1 -1
  47. package/lib/errors/FetchImageError.js +17 -24
  48. package/lib/errors/FetchImageError.js.map +1 -1
  49. package/lib/errors/ValidationError.js +30 -36
  50. package/lib/errors/ValidationError.js.map +1 -1
  51. package/lib/errors/index.js +23 -5
  52. package/lib/errors/index.js.map +1 -1
  53. package/lib/helpers/build-fetch-url/index.js +43 -47
  54. package/lib/helpers/build-fetch-url/index.js.map +1 -1
  55. package/lib/helpers/fetch-image/index.js +83 -82
  56. package/lib/helpers/fetch-image/index.js.map +1 -1
  57. package/lib/helpers/fetch-image-for-pdf-generator-service/index.js +168 -243
  58. package/lib/helpers/fetch-image-for-pdf-generator-service/index.js.map +1 -1
  59. package/lib/helpers/fetch-image-for-web/index.js +71 -94
  60. package/lib/helpers/fetch-image-for-web/index.js.map +1 -1
  61. package/lib/helpers/fetch-lighthouse-logo/index.js +36 -61
  62. package/lib/helpers/fetch-lighthouse-logo/index.js.map +1 -1
  63. package/lib/helpers/floatify/index.js +13 -7
  64. package/lib/helpers/floatify/index.js.map +1 -1
  65. package/lib/helpers/get-assignees-full-names/index.js +11 -7
  66. package/lib/helpers/get-assignees-full-names/index.js.map +1 -1
  67. package/lib/helpers/get-audit-entry-details/index.js +42 -32
  68. package/lib/helpers/get-audit-entry-details/index.js.map +1 -1
  69. package/lib/helpers/get-audit-items-data/index.js +104 -83
  70. package/lib/helpers/get-audit-items-data/index.js.map +1 -1
  71. package/lib/helpers/get-geometry-geocoded-string/index.js +10 -5
  72. package/lib/helpers/get-geometry-geocoded-string/index.js.map +1 -1
  73. package/lib/helpers/get-issue-details/index.js +53 -43
  74. package/lib/helpers/get-issue-details/index.js.map +1 -1
  75. package/lib/helpers/get-job-details/index.js +49 -41
  76. package/lib/helpers/get-job-details/index.js.map +1 -1
  77. package/lib/helpers/get-location-reference/index.js +32 -34
  78. package/lib/helpers/get-location-reference/index.js.map +1 -1
  79. package/lib/helpers/get-pretty-duration/index.js +16 -10
  80. package/lib/helpers/get-pretty-duration/index.js.map +1 -1
  81. package/lib/helpers/get-reference-details/index.js +20 -10
  82. package/lib/helpers/get-reference-details/index.js.map +1 -1
  83. package/lib/helpers/get-status-details/index.js +8 -2
  84. package/lib/helpers/get-status-details/index.js.map +1 -1
  85. package/lib/helpers/get-task-entry-details/index.js +32 -23
  86. package/lib/helpers/get-task-entry-details/index.js.map +1 -1
  87. package/lib/helpers/get-timezone-abbr/index.js +11 -4
  88. package/lib/helpers/get-timezone-abbr/index.js.map +1 -1
  89. package/lib/helpers/get-timezone-datetime/index.js +20 -13
  90. package/lib/helpers/get-timezone-datetime/index.js.map +1 -1
  91. package/lib/helpers/get-user-full-name/index.js +9 -3
  92. package/lib/helpers/get-user-full-name/index.js.map +1 -1
  93. package/lib/helpers/get-value-as-percentage/index.js +9 -4
  94. package/lib/helpers/get-value-as-percentage/index.js.map +1 -1
  95. package/lib/helpers/image-validators/index.js +18 -12
  96. package/lib/helpers/image-validators/index.js.map +1 -1
  97. package/lib/helpers/index.js +130 -18
  98. package/lib/helpers/index.js.map +1 -1
  99. package/lib/helpers/validate-url/index.js +11 -5
  100. package/lib/helpers/validate-url/index.js.map +1 -1
  101. package/lib/images/index.js +10 -4
  102. package/lib/images/index.js.map +1 -1
  103. package/lib/index.js +66 -10
  104. package/lib/index.js.map +1 -1
  105. package/lib/pdf/activity-report/index.js +407 -537
  106. package/lib/pdf/activity-report/index.js.map +1 -1
  107. package/lib/pdf/audit/index.js +137 -134
  108. package/lib/pdf/audit/index.js.map +1 -1
  109. package/lib/pdf/fonts/index.js +4 -2
  110. package/lib/pdf/fonts/index.js.map +1 -1
  111. package/lib/pdf/helpers/build-audit-content/index.js +57 -51
  112. package/lib/pdf/helpers/build-audit-content/index.js.map +1 -1
  113. package/lib/pdf/helpers/build-audit-follow-ups/index.js +52 -50
  114. package/lib/pdf/helpers/build-audit-follow-ups/index.js.map +1 -1
  115. package/lib/pdf/helpers/build-location-scans-content/index.js +22 -16
  116. package/lib/pdf/helpers/build-location-scans-content/index.js.map +1 -1
  117. package/lib/pdf/helpers/build-template-content/index.js +52 -51
  118. package/lib/pdf/helpers/build-template-content/index.js.map +1 -1
  119. package/lib/pdf/helpers/default-footer/index.js +38 -35
  120. package/lib/pdf/helpers/default-footer/index.js.map +1 -1
  121. package/lib/pdf/helpers/default-header/index.js +40 -35
  122. package/lib/pdf/helpers/default-header/index.js.map +1 -1
  123. package/lib/pdf/helpers/default-styles/index.js +7 -1
  124. package/lib/pdf/helpers/default-styles/index.js.map +1 -1
  125. package/lib/pdf/helpers/fields/index.js +225 -214
  126. package/lib/pdf/helpers/fields/index.js.map +1 -1
  127. package/lib/pdf/helpers/format-location-address/index.js +14 -8
  128. package/lib/pdf/helpers/format-location-address/index.js.map +1 -1
  129. package/lib/pdf/helpers/generate-definition/index.js +60 -65
  130. package/lib/pdf/helpers/generate-definition/index.js.map +1 -1
  131. package/lib/pdf/helpers/horizontal-line/index.js +14 -14
  132. package/lib/pdf/helpers/horizontal-line/index.js.map +1 -1
  133. package/lib/pdf/helpers/html-transformer/index.js +45 -35
  134. package/lib/pdf/helpers/html-transformer/index.js.map +1 -1
  135. package/lib/pdf/helpers/index.js +194 -15
  136. package/lib/pdf/helpers/index.js.map +1 -1
  137. package/lib/pdf/helpers/parse-value/index.js +10 -4
  138. package/lib/pdf/helpers/parse-value/index.js.map +1 -1
  139. package/lib/pdf/helpers/table/index.js +136 -205
  140. package/lib/pdf/helpers/table/index.js.map +1 -1
  141. package/lib/pdf/helpers/text/index.js +11 -8
  142. package/lib/pdf/helpers/text/index.js.map +1 -1
  143. package/lib/pdf/icons/index.js +8 -2
  144. package/lib/pdf/icons/index.js.map +1 -1
  145. package/lib/pdf/index.js +47 -6
  146. package/lib/pdf/index.js.map +1 -1
  147. package/lib/pdf/issue/index.js +141 -135
  148. package/lib/pdf/issue/index.js.map +1 -1
  149. package/lib/pdf/job/index.js +95 -81
  150. package/lib/pdf/job/index.js.map +1 -1
  151. package/lib/pdf/shift-report/emptyFixtures.js +8 -2
  152. package/lib/pdf/shift-report/emptyFixtures.js.map +1 -1
  153. package/lib/pdf/shift-report/index.js +399 -521
  154. package/lib/pdf/shift-report/index.js.map +1 -1
  155. package/lib/pdf/task/index.js +89 -83
  156. package/lib/pdf/task/index.js.map +1 -1
  157. package/lib/scheduling/generators/index.js +38 -3
  158. package/lib/scheduling/generators/index.js.map +1 -1
  159. package/lib/scheduling/generators/occurrenceIntervalsGenerator.js +44 -37
  160. package/lib/scheduling/generators/occurrenceIntervalsGenerator.js.map +1 -1
  161. package/lib/scheduling/generators/scheduleIntervalsGenerator.js +20 -28
  162. package/lib/scheduling/generators/scheduleIntervalsGenerator.js.map +1 -1
  163. package/lib/scheduling/generators/serviceIntervalsGenerator.js +120 -150
  164. package/lib/scheduling/generators/serviceIntervalsGenerator.js.map +1 -1
  165. package/lib/scheduling/helpers/convertToTimezone.js +18 -11
  166. package/lib/scheduling/helpers/convertToTimezone.js.map +1 -1
  167. package/lib/scheduling/helpers/generateNonRepeatingSchedule.js +57 -95
  168. package/lib/scheduling/helpers/generateNonRepeatingSchedule.js.map +1 -1
  169. package/lib/scheduling/helpers/generateRepeatingSchedule.js +80 -119
  170. package/lib/scheduling/helpers/generateRepeatingSchedule.js.map +1 -1
  171. package/lib/scheduling/helpers/generateScheduleEnd.js +24 -14
  172. package/lib/scheduling/helpers/generateScheduleEnd.js.map +1 -1
  173. package/lib/scheduling/helpers/hasValidStartAndEnd.js +19 -11
  174. package/lib/scheduling/helpers/hasValidStartAndEnd.js.map +1 -1
  175. package/lib/scheduling/helpers/index.js +159 -14
  176. package/lib/scheduling/helpers/index.js.map +1 -1
  177. package/lib/scheduling/helpers/intervalCovers.js +13 -7
  178. package/lib/scheduling/helpers/intervalCovers.js.map +1 -1
  179. package/lib/scheduling/helpers/intervalIntersectsEnd.js +13 -7
  180. package/lib/scheduling/helpers/intervalIntersectsEnd.js.map +1 -1
  181. package/lib/scheduling/helpers/intervalIntersectsStart.js +13 -7
  182. package/lib/scheduling/helpers/intervalIntersectsStart.js.map +1 -1
  183. package/lib/scheduling/helpers/intervalOnlyIntersectsEnd.js +15 -10
  184. package/lib/scheduling/helpers/intervalOnlyIntersectsEnd.js.map +1 -1
  185. package/lib/scheduling/helpers/intervalOnlyIntersectsStart.js +15 -10
  186. package/lib/scheduling/helpers/intervalOnlyIntersectsStart.js.map +1 -1
  187. package/lib/scheduling/helpers/intervalOutside.js +15 -9
  188. package/lib/scheduling/helpers/intervalOutside.js.map +1 -1
  189. package/lib/scheduling/helpers/intervalWithin.js +13 -7
  190. package/lib/scheduling/helpers/intervalWithin.js.map +1 -1
  191. package/lib/scheduling/helpers/mergeIntervals.js +21 -17
  192. package/lib/scheduling/helpers/mergeIntervals.js.map +1 -1
  193. package/lib/scheduling/helpers/splitIntervals.js +24 -23
  194. package/lib/scheduling/helpers/splitIntervals.js.map +1 -1
  195. package/lib/scheduling/index.js +38 -3
  196. package/lib/scheduling/index.js.map +1 -1
  197. package/lib/scheduling/scheduling.types.js +9 -3
  198. package/lib/scheduling/scheduling.types.js.map +1 -1
  199. package/lib/scheduling/strategies/getNext.js +57 -63
  200. package/lib/scheduling/strategies/getNext.js.map +1 -1
  201. package/lib/scheduling/strategies/getNextExactDateOfMonth.js +47 -56
  202. package/lib/scheduling/strategies/getNextExactDateOfMonth.js.map +1 -1
  203. package/lib/scheduling/strategies/getNextLastDayOfMonth.js +43 -51
  204. package/lib/scheduling/strategies/getNextLastDayOfMonth.js.map +1 -1
  205. package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js +49 -56
  206. package/lib/scheduling/strategies/getNextLastWeekdayOfMonth.js.map +1 -1
  207. package/lib/scheduling/strategies/getNextNoRepeat.js +25 -36
  208. package/lib/scheduling/strategies/getNextNoRepeat.js.map +1 -1
  209. package/lib/scheduling/strategies/getNextWeekday.js +47 -79
  210. package/lib/scheduling/strategies/getNextWeekday.js.map +1 -1
  211. package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js +52 -58
  212. package/lib/scheduling/strategies/getNextXDayOfXWeekOfMonth.js.map +1 -1
  213. package/lib/scheduling/strategies/index.js +82 -7
  214. package/lib/scheduling/strategies/index.js.map +1 -1
  215. package/lib/schema/index.js +16 -1
  216. package/lib/schema/index.js.map +1 -1
  217. package/lib/schema/schema.js +28 -34
  218. package/lib/schema/schema.js.map +1 -1
  219. package/lib/service-hours/__helpers__/calculate-hours.js +24 -22
  220. package/lib/service-hours/__helpers__/calculate-hours.js.map +1 -1
  221. package/lib/service-hours/__helpers__/isOpen.js +25 -24
  222. package/lib/service-hours/__helpers__/isOpen.js.map +1 -1
  223. package/lib/service-hours/index.js +27 -2
  224. package/lib/service-hours/index.js.map +1 -1
  225. package/lib/service-hours/schema.js +68 -55
  226. package/lib/service-hours/schema.js.map +1 -1
  227. package/package.json +86 -86
  228. package/vitest.config.ts +23 -23
  229. package/vitest.setup.js +7 -7
@@ -1,32 +1,24 @@
1
- import _regeneratorRuntime from "@babel/runtime/regenerator";
2
- var _marked = /*#__PURE__*/_regeneratorRuntime.mark(scheduleIntervalsGenerator);
3
- import { generateNonRepeatingSchedule, generateRepeatingSchedule } from '../helpers';
4
- import { StrategyTypes } from '../scheduling.types';
5
- /**
6
- * Generates schedule service and occurrence intervals
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.scheduleIntervalsGenerator = scheduleIntervalsGenerator;
7
+ var _helpers = require("../helpers");
8
+ var _scheduling = require("../scheduling.types");
9
+ /**
10
+ * Generates schedule service and occurrence intervals
7
11
  */
8
- export function scheduleIntervalsGenerator(props) {
9
- var type, isRepeating;
10
- return _regeneratorRuntime.wrap(function (_context) {
11
- while (1) switch (_context.prev = _context.next) {
12
- case 0:
13
- type = props.strategy.type;
14
- isRepeating = type !== StrategyTypes.NoRepeat;
15
- if (!isRepeating) {
16
- _context.next = 2;
17
- break;
18
- }
19
- return _context.delegateYield(generateRepeatingSchedule(props), "t0", 1);
20
- case 1:
21
- return _context.abrupt("return", _context.t0);
22
- case 2:
23
- return _context.delegateYield(generateNonRepeatingSchedule(props), "t1", 3);
24
- case 3:
25
- return _context.abrupt("return", _context.t1);
26
- case 4:
27
- case "end":
28
- return _context.stop();
12
+ function* scheduleIntervalsGenerator(props) {
13
+ const {
14
+ strategy: {
15
+ type
29
16
  }
30
- }, _marked);
17
+ } = props;
18
+ const isRepeating = type !== _scheduling.StrategyTypes.NoRepeat;
19
+ if (isRepeating) {
20
+ return yield* (0, _helpers.generateRepeatingSchedule)(props);
21
+ }
22
+ return yield* (0, _helpers.generateNonRepeatingSchedule)(props);
31
23
  }
32
24
  //# sourceMappingURL=scheduleIntervalsGenerator.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scheduleIntervalsGenerator.js","names":["scheduleIntervalsGenerator","generateNonRepeatingSchedule","generateRepeatingSchedule","StrategyTypes","props","type","isRepeating","_regeneratorRuntime","wrap","_context","prev","next","strategy","NoRepeat","delegateYield","abrupt","t0","t1","stop","_marked"],"sources":["../../../src/scheduling/generators/scheduleIntervalsGenerator.ts"],"sourcesContent":["import { Schema as ServiceHoursSchema } from '../../service-hours'\nimport {\n generateNonRepeatingSchedule,\n generateRepeatingSchedule,\n} from '../helpers'\nimport { Strategy, StrategyTypes } from '../scheduling.types'\n\ninterface ScheduleIntervalsGenerator {\n readonly end: number\n readonly isInitial: boolean\n readonly strategy: Strategy\n readonly serviceHours: ServiceHoursSchema\n readonly start: number\n}\n\n/**\n * Generates schedule service and occurrence intervals\n */\nexport function* scheduleIntervalsGenerator(props: ScheduleIntervalsGenerator) {\n const {\n strategy: { type },\n } = props\n const isRepeating = type !== StrategyTypes.NoRepeat\n\n if (isRepeating) {\n return yield* generateRepeatingSchedule(props)\n }\n\n return yield* generateNonRepeatingSchedule(props)\n}\n"],"mappings":";oDAkBiBA,0BAA0B;AAjB3C,SACEC,4BAA4B,EAC5BC,yBAAyB,QACpB,YAAY;AACnB,SAAmBC,aAAa,QAAQ,qBAAqB;AAU7D;AACA;AACA;AACA,OAAO,SAAUH,0BAA0BA,CAACI,KAAiC;EAAA,IAAAC,IAAA,EAAAC,WAAA;EAAA,OAAAC,mBAAA,CAAAC,IAAA,WAAAC,QAAA;IAAA,kBAAAA,QAAA,CAAAC,IAAA,GAAAD,QAAA,CAAAE,IAAA;MAAA;QAE7DN,IAAI,GACdD,KAAK,CADPQ,QAAQ,CAAIP,IAAI;QAEZC,WAAW,GAAGD,IAAI,KAAKF,aAAa,CAACU,QAAQ;QAAA,KAE/CP,WAAW;UAAAG,QAAA,CAAAE,IAAA;UAAA;QAAA;QACN,OAAAF,QAAA,CAAAK,aAAA,CAAOZ,yBAAyB,CAACE,KAAK,CAAC;MAAA;QAAA,OAAAK,QAAA,CAAAM,MAAA,WAAAN,QAAA,CAAAO,EAAA;MAAA;QAGzC,OAAAP,QAAA,CAAAK,aAAA,CAAOb,4BAA4B,CAACG,KAAK,CAAC;MAAA;QAAA,OAAAK,QAAA,CAAAM,MAAA,WAAAN,QAAA,CAAAQ,EAAA;MAAA;MAAA;QAAA,OAAAR,QAAA,CAAAS,IAAA;IAAA;EAAA,GAAAC,OAAA;AAAA","ignoreList":[]}
1
+ {"version":3,"file":"scheduleIntervalsGenerator.js","names":["_helpers","require","_scheduling","scheduleIntervalsGenerator","props","strategy","type","isRepeating","StrategyTypes","NoRepeat","generateRepeatingSchedule","generateNonRepeatingSchedule"],"sources":["../../../src/scheduling/generators/scheduleIntervalsGenerator.ts"],"sourcesContent":["import { Schema as ServiceHoursSchema } from '../../service-hours'\r\nimport {\r\n generateNonRepeatingSchedule,\r\n generateRepeatingSchedule,\r\n} from '../helpers'\r\nimport { Strategy, StrategyTypes } from '../scheduling.types'\r\n\r\ninterface ScheduleIntervalsGenerator {\r\n readonly end: number\r\n readonly isInitial: boolean\r\n readonly strategy: Strategy\r\n readonly serviceHours: ServiceHoursSchema\r\n readonly start: number\r\n}\r\n\r\n/**\r\n * Generates schedule service and occurrence intervals\r\n */\r\nexport function* scheduleIntervalsGenerator(props: ScheduleIntervalsGenerator) {\r\n const {\r\n strategy: { type },\r\n } = props\r\n const isRepeating = type !== StrategyTypes.NoRepeat\r\n\r\n if (isRepeating) {\r\n return yield* generateRepeatingSchedule(props)\r\n }\r\n\r\n return yield* generateNonRepeatingSchedule(props)\r\n}\r\n"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AAIA,IAAAC,WAAA,GAAAD,OAAA;AAUA;AACA;AACA;AACO,UAAUE,0BAA0BA,CAACC,KAAiC,EAAE;EAC7E,MAAM;IACJC,QAAQ,EAAE;MAAEC;IAAK;EACnB,CAAC,GAAGF,KAAK;EACT,MAAMG,WAAW,GAAGD,IAAI,KAAKE,yBAAa,CAACC,QAAQ;EAEnD,IAAIF,WAAW,EAAE;IACf,OAAO,OAAO,IAAAG,kCAAyB,EAACN,KAAK,CAAC;EAChD;EAEA,OAAO,OAAO,IAAAO,qCAA4B,EAACP,KAAK,CAAC;AACnD","ignoreList":[]}
@@ -1,157 +1,127 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import _regeneratorRuntime from "@babel/runtime/regenerator";
3
- var _marked = /*#__PURE__*/_regeneratorRuntime.mark(serviceIntervalsGenerator);
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
- 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; }
7
- import { filter, flow, forEach, map, reduce } from 'lodash/fp';
8
- import moment from 'moment-timezone';
9
- import { Behaviours, Durations, Types } from '../../service-hours';
10
- import { Unit } from '../scheduling.types';
11
- import { convertToTimezone, intervalCovers, intervalOnlyIntersectsEnd, intervalOnlyIntersectsStart, intervalWithin, mergeIntervals, splitIntervals } from '../helpers';
12
- /**
13
- * Generates service intervals between start and end range for service hours
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.serviceIntervalsGenerator = serviceIntervalsGenerator;
8
+ var _fp = require("lodash/fp");
9
+ var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
10
+ var _serviceHours = require("../../service-hours");
11
+ var _scheduling = require("../scheduling.types");
12
+ var _helpers = require("../helpers");
13
+ /**
14
+ * Generates service intervals between start and end range for service hours
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, _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);
16
+ function* serviceIntervalsGenerator(props) {
17
+ const {
18
+ end,
19
+ serviceHours,
20
+ start
21
+ } = props;
22
+ const {
23
+ timezone
24
+ } = serviceHours;
25
+ const hasValidStartAndEnd = end > start && start < end;
26
+ if (!hasValidStartAndEnd) return [];
27
+ const mStart = _momentTimezone.default.tz(start, timezone);
28
+ const mEnd = _momentTimezone.default.tz(end, timezone);
29
+ const mStartValid = mStart.isValid();
30
+ const mEndValid = mEnd.isValid();
31
+ if (!mStartValid || !mEndValid) return [];
32
+ const {
33
+ hours
34
+ } = serviceHours;
35
+ const rangeInterval = [start, end];
36
+ const closeOverrideHours = (0, _fp.filter)({
37
+ behaviour: _serviceHours.Behaviours.Close,
38
+ type: _serviceHours.Types.Override
39
+ }, hours);
40
+ const defaultHours = (0, _fp.filter)({
41
+ type: _serviceHours.Types.Default
42
+ }, hours);
43
+ const openOverrideHours = (0, _fp.filter)({
44
+ behaviour: _serviceHours.Behaviours.Open,
45
+ type: _serviceHours.Types.Override
46
+ }, hours);
58
47
 
59
- // NOTE: filter out any interval not relevant
60
- if (isInPast || isInFuture) {
61
- return memo;
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);
48
+ // NOTE: we must apply the timezone to overrides as they are stored in UTC
49
+ // and must be converted to timestamps in the timezone before processing
50
+ const closeIntervals = (0, _fp.reduce)((memo, override) => {
51
+ const mIntervalStart = _momentTimezone.default.tz(override.start, timezone);
52
+ const mIntervalEnd = _momentTimezone.default.tz(override.end, timezone);
53
+ const isInPast = mIntervalEnd.isBefore(mStart);
54
+ const isInFuture = mIntervalStart.isAfter(mEnd);
73
55
 
74
- // NOTE: filter out any interval not relevant
75
- if (isInPast || isInFuture) {
76
- return memo;
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
- }
56
+ // NOTE: filter out any interval not relevant
57
+ if (isInPast || isInFuture) {
58
+ return memo;
59
+ }
60
+ const start = (0, _helpers.convertToTimezone)(override.start, timezone);
61
+ const end = (0, _helpers.convertToTimezone)(override.end, timezone);
62
+ memo.push([start, end]);
63
+ return memo;
64
+ }, [], closeOverrideHours);
65
+ const openIntervals = (0, _fp.reduce)((memo, override) => {
66
+ const mIntervalStart = _momentTimezone.default.tz(override.start, timezone);
67
+ const mIntervalEnd = _momentTimezone.default.tz(override.end, timezone);
68
+ const isInPast = mIntervalEnd.isBefore(mStart);
69
+ const isInFuture = mIntervalStart.isAfter(mEnd);
106
70
 
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;
132
- break;
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();
71
+ // NOTE: filter out any interval not relevant
72
+ if (isInPast || isInFuture) {
73
+ return memo;
154
74
  }
155
- }, _marked, null, [[3, 7, 8, 9]]);
75
+ const start = (0, _helpers.convertToTimezone)(override.start, timezone);
76
+ const end = (0, _helpers.convertToTimezone)(override.end, timezone);
77
+ memo.push([start, end]);
78
+ return memo;
79
+ }, [], openOverrideHours);
80
+ let weekStart = mStart.startOf(_scheduling.Unit.Week).valueOf();
81
+ const defaultIntervals = [];
82
+ while (weekStart < end) {
83
+ (0, _fp.forEach)(hour => {
84
+ // NOTE: hour start and end values are the number of minutes from the
85
+ // start of the week so are simply offsets
86
+ const {
87
+ end: endOffset,
88
+ start: startOffset
89
+ } = hour;
90
+ const hourStart = weekStart + startOffset;
91
+ const hourEnd = weekStart + endOffset;
92
+ const interval = [hourStart, hourEnd];
93
+ const isIntervalIntersectingRangeEnd = (0, _helpers.intervalOnlyIntersectsEnd)(interval, rangeInterval);
94
+ const isIntervalIntersectingRangeStart = (0, _helpers.intervalOnlyIntersectsStart)(interval, rangeInterval);
95
+ const isIntervalInsideRange = (0, _helpers.intervalWithin)(interval, rangeInterval);
96
+ const isRangeInsideInterval = (0, _helpers.intervalWithin)(rangeInterval, interval);
97
+ const shouldSkip = !isIntervalInsideRange && !isRangeInsideInterval && !isIntervalIntersectingRangeStart && !isIntervalIntersectingRangeEnd;
98
+ if (shouldSkip) return;
99
+ const nextStart = isRangeInsideInterval || isIntervalIntersectingRangeStart ? start : hourStart;
100
+ const nextEnd = isRangeInsideInterval || isIntervalIntersectingRangeEnd ? end : hourEnd;
101
+ defaultIntervals.push([nextStart, nextEnd]);
102
+ }, defaultHours);
103
+ weekStart = weekStart + _serviceHours.Durations.Week;
104
+ }
105
+
106
+ // NOTE: only include intervals which intersect our range and then map to
107
+ // ensure the intervals conform to the range interval
108
+ const getOverrideIntervalsForRange = (0, _fp.flow)((0, _fp.filter)(interval => interval[0] >= rangeInterval[0] || interval[0] <= rangeInterval[1]), (0, _fp.map)(interval => {
109
+ const intervalCoversRange = (0, _helpers.intervalCovers)(interval, rangeInterval);
110
+ const intervalIntersectsRangeEnd = (0, _helpers.intervalOnlyIntersectsEnd)(interval, rangeInterval);
111
+ const intervalIntersectsRangeStart = (0, _helpers.intervalOnlyIntersectsStart)(interval, rangeInterval);
112
+ const intervalStart = intervalIntersectsRangeStart ? rangeInterval[0] : interval[0];
113
+ const intervalEnd = intervalIntersectsRangeEnd ? rangeInterval[1] : interval[1];
114
+ return intervalCoversRange ? rangeInterval : [intervalStart, intervalEnd];
115
+ }));
116
+
117
+ // NOTE: for simplicity we calculate all default service intervals and then
118
+ // apply the open and closed overrides, we can't do this as we iterate
119
+ // through the weeks as open and close overrides can potentially intersect
120
+ // across weeks
121
+ const rangeOpenIntervals = getOverrideIntervalsForRange(openIntervals);
122
+ const rangeCloseIntervals = getOverrideIntervalsForRange(closeIntervals);
123
+ const mergedIntervals = (0, _helpers.mergeIntervals)([...defaultIntervals, ...rangeOpenIntervals]);
124
+ const serviceIntervals = (0, _helpers.splitIntervals)(mergedIntervals, rangeCloseIntervals);
125
+ for (let interval of serviceIntervals) yield interval;
156
126
  }
157
127
  //# 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","_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
+ {"version":3,"file":"serviceIntervalsGenerator.js","names":["_fp","require","_momentTimezone","_interopRequireDefault","_serviceHours","_scheduling","_helpers","serviceIntervalsGenerator","props","end","serviceHours","start","timezone","hasValidStartAndEnd","mStart","moment","tz","mEnd","mStartValid","isValid","mEndValid","hours","rangeInterval","closeOverrideHours","filter","behaviour","Behaviours","Close","type","Types","Override","defaultHours","Default","openOverrideHours","Open","closeIntervals","reduce","memo","override","mIntervalStart","mIntervalEnd","isInPast","isBefore","isInFuture","isAfter","convertToTimezone","push","openIntervals","weekStart","startOf","Unit","Week","valueOf","defaultIntervals","forEach","hour","endOffset","startOffset","hourStart","hourEnd","interval","isIntervalIntersectingRangeEnd","intervalOnlyIntersectsEnd","isIntervalIntersectingRangeStart","intervalOnlyIntersectsStart","isIntervalInsideRange","intervalWithin","isRangeInsideInterval","shouldSkip","nextStart","nextEnd","Durations","getOverrideIntervalsForRange","flow","map","intervalCoversRange","intervalCovers","intervalIntersectsRangeEnd","intervalIntersectsRangeStart","intervalStart","intervalEnd","rangeOpenIntervals","rangeCloseIntervals","mergedIntervals","mergeIntervals","serviceIntervals","splitIntervals"],"sources":["../../../src/scheduling/generators/serviceIntervalsGenerator.ts"],"sourcesContent":["import { filter, flow, forEach, map, reduce } from 'lodash/fp'\r\nimport moment from 'moment-timezone'\r\n\r\nimport {\r\n Behaviours,\r\n Durations,\r\n HoursSchema,\r\n Schema as ServiceHoursSchema,\r\n Types,\r\n} from '../../service-hours'\r\nimport { Interval, Unit } from '../scheduling.types'\r\nimport {\r\n convertToTimezone,\r\n intervalCovers,\r\n intervalOnlyIntersectsEnd,\r\n intervalOnlyIntersectsStart,\r\n intervalWithin,\r\n mergeIntervals,\r\n splitIntervals,\r\n} from '../helpers'\r\n\r\ninterface ServiceIntervalsGenerator {\r\n readonly end: number\r\n readonly serviceHours: ServiceHoursSchema\r\n readonly start: number\r\n}\r\n\r\n/**\r\n * Generates service intervals between start and end range for service hours\r\n */\r\nexport function* serviceIntervalsGenerator(props: ServiceIntervalsGenerator) {\r\n const { end, serviceHours, start } = props\r\n const { timezone } = serviceHours\r\n\r\n const hasValidStartAndEnd = end > start && start < end\r\n\r\n if (!hasValidStartAndEnd) return []\r\n\r\n const mStart = moment.tz(start, timezone)\r\n const mEnd = moment.tz(end, timezone)\r\n const mStartValid = mStart.isValid()\r\n const mEndValid = mEnd.isValid()\r\n\r\n if (!mStartValid || !mEndValid) return []\r\n\r\n const { hours } = serviceHours\r\n const rangeInterval = [start, end]\r\n\r\n const closeOverrideHours: HoursSchema[] = filter(\r\n { behaviour: Behaviours.Close, type: Types.Override },\r\n hours\r\n )\r\n const defaultHours: HoursSchema[] = filter({ type: Types.Default }, hours)\r\n const openOverrideHours: HoursSchema[] = filter(\r\n { behaviour: Behaviours.Open, type: Types.Override },\r\n hours\r\n )\r\n\r\n // NOTE: we must apply the timezone to overrides as they are stored in UTC\r\n // and must be converted to timestamps in the timezone before processing\r\n const closeIntervals = reduce(\r\n (memo, override) => {\r\n const mIntervalStart = moment.tz(override.start, timezone)\r\n const mIntervalEnd = moment.tz(override.end, timezone)\r\n\r\n const isInPast = mIntervalEnd.isBefore(mStart)\r\n const isInFuture = mIntervalStart.isAfter(mEnd)\r\n\r\n // NOTE: filter out any interval not relevant\r\n if (isInPast || isInFuture) {\r\n return memo\r\n }\r\n\r\n const start = convertToTimezone(override.start, timezone)\r\n const end = convertToTimezone(override.end, timezone)\r\n\r\n memo.push([start, end])\r\n\r\n return memo\r\n },\r\n [],\r\n closeOverrideHours\r\n )\r\n\r\n const openIntervals = reduce(\r\n (memo, override) => {\r\n const mIntervalStart = moment.tz(override.start, timezone)\r\n const mIntervalEnd = moment.tz(override.end, timezone)\r\n\r\n const isInPast = mIntervalEnd.isBefore(mStart)\r\n const isInFuture = mIntervalStart.isAfter(mEnd)\r\n\r\n // NOTE: filter out any interval not relevant\r\n if (isInPast || isInFuture) {\r\n return memo\r\n }\r\n\r\n const start = convertToTimezone(override.start, timezone)\r\n const end = convertToTimezone(override.end, timezone)\r\n\r\n memo.push([start, end])\r\n\r\n return memo\r\n },\r\n [],\r\n openOverrideHours\r\n )\r\n\r\n let weekStart = mStart.startOf(Unit.Week).valueOf()\r\n\r\n const defaultIntervals = []\r\n\r\n while (weekStart < end) {\r\n forEach(hour => {\r\n // NOTE: hour start and end values are the number of minutes from the\r\n // start of the week so are simply offsets\r\n const { end: endOffset, start: startOffset } = hour\r\n const hourStart = weekStart + startOffset\r\n const hourEnd = weekStart + endOffset\r\n\r\n const interval = [hourStart, hourEnd]\r\n\r\n const isIntervalIntersectingRangeEnd = intervalOnlyIntersectsEnd(\r\n interval,\r\n rangeInterval\r\n )\r\n const isIntervalIntersectingRangeStart = intervalOnlyIntersectsStart(\r\n interval,\r\n rangeInterval\r\n )\r\n const isIntervalInsideRange = intervalWithin(interval, rangeInterval)\r\n const isRangeInsideInterval = intervalWithin(rangeInterval, interval)\r\n\r\n const shouldSkip =\r\n !isIntervalInsideRange &&\r\n !isRangeInsideInterval &&\r\n !isIntervalIntersectingRangeStart &&\r\n !isIntervalIntersectingRangeEnd\r\n\r\n if (shouldSkip) return\r\n\r\n const nextStart =\r\n isRangeInsideInterval || isIntervalIntersectingRangeStart\r\n ? start\r\n : hourStart\r\n\r\n const nextEnd =\r\n isRangeInsideInterval || isIntervalIntersectingRangeEnd ? end : hourEnd\r\n\r\n defaultIntervals.push([nextStart, nextEnd])\r\n }, defaultHours)\r\n\r\n weekStart = weekStart + Durations.Week\r\n }\r\n\r\n // NOTE: only include intervals which intersect our range and then map to\r\n // ensure the intervals conform to the range interval\r\n const getOverrideIntervalsForRange = flow(\r\n filter(\r\n (interval: Interval): boolean =>\r\n interval[0] >= rangeInterval[0] || interval[0] <= rangeInterval[1]\r\n ),\r\n map(\r\n (interval: Interval): Interval => {\r\n const intervalCoversRange = intervalCovers(interval, rangeInterval)\r\n const intervalIntersectsRangeEnd = intervalOnlyIntersectsEnd(\r\n interval,\r\n rangeInterval\r\n )\r\n const intervalIntersectsRangeStart = intervalOnlyIntersectsStart(\r\n interval,\r\n rangeInterval\r\n )\r\n\r\n const intervalStart = intervalIntersectsRangeStart\r\n ? rangeInterval[0]\r\n : interval[0]\r\n const intervalEnd = intervalIntersectsRangeEnd\r\n ? rangeInterval[1]\r\n : interval[1]\r\n\r\n return intervalCoversRange\r\n ? rangeInterval\r\n : [intervalStart, intervalEnd]\r\n }\r\n )\r\n )\r\n\r\n // NOTE: for simplicity we calculate all default service intervals and then\r\n // apply the open and closed overrides, we can't do this as we iterate\r\n // through the weeks as open and close overrides can potentially intersect\r\n // across weeks\r\n const rangeOpenIntervals = getOverrideIntervalsForRange(openIntervals)\r\n const rangeCloseIntervals = getOverrideIntervalsForRange(closeIntervals)\r\n\r\n const mergedIntervals = mergeIntervals([\r\n ...defaultIntervals,\r\n ...rangeOpenIntervals,\r\n ])\r\n const serviceIntervals = splitIntervals(mergedIntervals, rangeCloseIntervals)\r\n\r\n for (let interval of serviceIntervals) yield interval\r\n}\r\n"],"mappings":"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","ignoreList":[]}
@@ -1,16 +1,23 @@
1
- import moment from 'moment-timezone';
2
- var DATE_FORMAT = 'YYYY-MM-DD HH:mm';
1
+ "use strict";
3
2
 
4
- /**
5
- * Accepts a timestamp and returns the same timestamp but in the timezone
6
- * provided
7
- *
8
- * convertToTimezone(1561248000000, 'Australia/Melbourne') // 2019-06-23T00:00:00+00:00
9
- * returns 1561212000000 // 2019-06-23T00:00:00+10:00
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.convertToTimezone = convertToTimezone;
8
+ var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
9
+ const DATE_FORMAT = 'YYYY-MM-DD HH:mm';
10
+
11
+ /**
12
+ * Accepts a timestamp and returns the same timestamp but in the timezone
13
+ * provided
14
+ *
15
+ * convertToTimezone(1561248000000, 'Australia/Melbourne') // 2019-06-23T00:00:00+00:00
16
+ * returns 1561212000000 // 2019-06-23T00:00:00+10:00
10
17
  */
11
- export function convertToTimezone(timestamp, timezone) {
12
- var datestring = moment.utc(timestamp).format(DATE_FORMAT);
13
- var mTimestamp = moment.tz(datestring, timezone).valueOf();
18
+ function convertToTimezone(timestamp, timezone) {
19
+ const datestring = _momentTimezone.default.utc(timestamp).format(DATE_FORMAT);
20
+ const mTimestamp = _momentTimezone.default.tz(datestring, timezone).valueOf();
14
21
  return mTimestamp;
15
22
  }
16
23
  //# sourceMappingURL=convertToTimezone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"convertToTimezone.js","names":["moment","DATE_FORMAT","convertToTimezone","timestamp","timezone","datestring","utc","format","mTimestamp","tz","valueOf"],"sources":["../../../src/scheduling/helpers/convertToTimezone.ts"],"sourcesContent":["import moment from 'moment-timezone'\n\nconst DATE_FORMAT = 'YYYY-MM-DD HH:mm'\n\n/**\n * Accepts a timestamp and returns the same timestamp but in the timezone\n * provided\n *\n * convertToTimezone(1561248000000, 'Australia/Melbourne') // 2019-06-23T00:00:00+00:00\n * returns 1561212000000 // 2019-06-23T00:00:00+10:00\n */\nexport function convertToTimezone(timestamp: number, timezone: string): moment {\n const datestring: string = moment.utc(timestamp).format(DATE_FORMAT)\n const mTimestamp: number = moment.tz(datestring, timezone).valueOf()\n return mTimestamp\n}\n"],"mappings":"AAAA,OAAOA,MAAM,MAAM,iBAAiB;AAEpC,IAAMC,WAAW,GAAG,kBAAkB;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,iBAAiBA,CAACC,SAAiB,EAAEC,QAAgB,EAAU;EAC7E,IAAMC,UAAkB,GAAGL,MAAM,CAACM,GAAG,CAACH,SAAS,CAAC,CAACI,MAAM,CAACN,WAAW,CAAC;EACpE,IAAMO,UAAkB,GAAGR,MAAM,CAACS,EAAE,CAACJ,UAAU,EAAED,QAAQ,CAAC,CAACM,OAAO,CAAC,CAAC;EACpE,OAAOF,UAAU;AACnB","ignoreList":[]}
1
+ {"version":3,"file":"convertToTimezone.js","names":["_momentTimezone","_interopRequireDefault","require","DATE_FORMAT","convertToTimezone","timestamp","timezone","datestring","moment","utc","format","mTimestamp","tz","valueOf"],"sources":["../../../src/scheduling/helpers/convertToTimezone.ts"],"sourcesContent":["import moment from 'moment-timezone'\r\n\r\nconst DATE_FORMAT = 'YYYY-MM-DD HH:mm'\r\n\r\n/**\r\n * Accepts a timestamp and returns the same timestamp but in the timezone\r\n * provided\r\n *\r\n * convertToTimezone(1561248000000, 'Australia/Melbourne') // 2019-06-23T00:00:00+00:00\r\n * returns 1561212000000 // 2019-06-23T00:00:00+10:00\r\n */\r\nexport function convertToTimezone(timestamp: number, timezone: string): moment {\r\n const datestring: string = moment.utc(timestamp).format(DATE_FORMAT)\r\n const mTimestamp: number = moment.tz(datestring, timezone).valueOf()\r\n return mTimestamp\r\n}\r\n"],"mappings":";;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AAEA,MAAMC,WAAW,GAAG,kBAAkB;;AAEtC;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,iBAAiBA,CAACC,SAAiB,EAAEC,QAAgB,EAAU;EAC7E,MAAMC,UAAkB,GAAGC,uBAAM,CAACC,GAAG,CAACJ,SAAS,CAAC,CAACK,MAAM,CAACP,WAAW,CAAC;EACpE,MAAMQ,UAAkB,GAAGH,uBAAM,CAACI,EAAE,CAACL,UAAU,EAAED,QAAQ,CAAC,CAACO,OAAO,CAAC,CAAC;EACpE,OAAOF,UAAU;AACnB","ignoreList":[]}
@@ -1,100 +1,62 @@
1
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
2
- import _regeneratorRuntime from "@babel/runtime/regenerator";
3
- var _marked = /*#__PURE__*/_regeneratorRuntime.mark(generateNonRepeatingSchedule);
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
- 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; }
7
- import { isEmpty, first, last } from 'lodash/fp';
8
- import { hasValidStartAndEnd } from '.';
9
- import { IntervalTypes } from '../scheduling.types';
10
- import { occurrenceIntervalsGenerator, serviceIntervalsGenerator } from '../generators';
1
+ "use strict";
11
2
 
12
- /**
13
- * Generates non repeating schedule service and occurrence intervals
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.generateNonRepeatingSchedule = generateNonRepeatingSchedule;
7
+ var _fp = require("lodash/fp");
8
+ var _ = require(".");
9
+ var _scheduling = require("../scheduling.types");
10
+ var _generators = require("../generators");
11
+ /**
12
+ * Generates non repeating schedule service and occurrence intervals
14
13
  */
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, _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;
27
- break;
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;
45
- break;
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;
68
- break;
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();
14
+ function* generateNonRepeatingSchedule(props) {
15
+ const {
16
+ end,
17
+ serviceHours,
18
+ start,
19
+ strategy
20
+ } = props;
21
+ const isStartAndEndValid = (0, _.hasValidStartAndEnd)({
22
+ end,
23
+ start
24
+ });
25
+ if (!isStartAndEndValid) return [];
26
+ const serviceIntervalSequence = (0, _generators.serviceIntervalsGenerator)({
27
+ end,
28
+ serviceHours,
29
+ start
30
+ });
31
+ const {
32
+ hours,
33
+ timezone
34
+ } = serviceHours;
35
+ const hasServiceHours = !(0, _fp.isEmpty)(hours);
36
+ const intervals = [...serviceIntervalSequence];
37
+
38
+ // 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
+ const serviceIntervals = !hasServiceHours ? [[start, end]] : !(0, _fp.isEmpty)(intervals) ? [[(0, _fp.first)(intervals)[0], (0, _fp.last)(intervals)[1]]] : [];
41
+ for (const serviceInterval of serviceIntervals) {
42
+ yield {
43
+ interval: serviceInterval,
44
+ type: _scheduling.IntervalTypes.Service
45
+ };
46
+ const occurrenceIntervalsSequence = (0, _generators.occurrenceIntervalsGenerator)({
47
+ // NOTE: as we only have one interval we should always set isInitial to
48
+ // true
49
+ isInitial: true,
50
+ serviceInterval,
51
+ strategy,
52
+ timezone
53
+ });
54
+ for (const occurrenceInterval of occurrenceIntervalsSequence) {
55
+ yield {
56
+ interval: occurrenceInterval,
57
+ type: _scheduling.IntervalTypes.Occurrence
58
+ };
97
59
  }
98
- }, _marked, null, [[4, 8, 9, 10]]);
60
+ }
99
61
  }
100
62
  //# sourceMappingURL=generateNonRepeatingSchedule.js.map