@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 +1 @@
1
- {"version":3,"file":"calculate-hours.js","names":["days","MON","TUE","WED","THU","FRI","SAT","SUN","MON2","TUE2","MINUTES","HOURS","DAYS","input","process","argv","Error","parts","split","length","startOffset","parse","endOffset","duration","output","type","start","end","description","console","dir","depth","def","day","time","undefined","timeParts","hour","minute","offset"],"sources":["../../../src/service-hours/__helpers__/calculate-hours.js"],"sourcesContent":["/**\n * Script to generate service hour definitions which is otherwise tedious to\n * calculate as we store them in millisecond offsets\n * Example Input: TUE 08:00 - TUE 17:00\n */\n\nconst days = {\n MON: 0,\n TUE: 1,\n WED: 2,\n THU: 3,\n FRI: 4,\n SAT: 5,\n SUN: 6,\n MON2: 7,\n TUE2: 8,\n}\n\nconst MINUTES = 60000\nconst HOURS = 60 * MINUTES\nconst DAYS = 24 * HOURS\n\nconst input = process.argv[2]\n\nif (!input) {\n throw new Error('invalid input')\n}\n\nconst parts = input.split(' - ')\n\nif (parts.length < 2) {\n throw new Error('invalid input')\n}\n\nconst startOffset = parse(parts[0])\nconst endOffset = parse(parts[1])\nconst duration = endOffset - startOffset\nconst output = {\n type: 'DEFAULT',\n start: startOffset,\n end: endOffset,\n duration,\n description: input,\n}\n\nconsole.dir(output, { depth: null })\n\nfunction parse(def) {\n const parts = def.split(' ')\n\n if (parts.length < 2) {\n throw new Error('invalid parts')\n }\n\n const day = days[parts[0]]\n const time = parts[1]\n\n if (day === undefined || day === null || !time) {\n throw new Error('invalid date/time')\n }\n\n const timeParts = time.split(':')\n const hour = timeParts[0]\n const minute = timeParts[1]\n\n if (!hour || !minute) {\n throw new Error('invalid end time')\n }\n\n // NOTE this isn't taking into account actual end of time if you target the\n // end of a minute, e.g. 23:59\n const offset = day * DAYS + hour * HOURS + minute * MINUTES\n\n return offset\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;;AAEA,IAAMA,IAAI,GAAG;EACXC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,IAAI,EAAE,CAAC;EACPC,IAAI,EAAE;AACR,CAAC;AAED,IAAMC,OAAO,GAAG,KAAK;AACrB,IAAMC,KAAK,GAAG,EAAE,GAAGD,OAAO;AAC1B,IAAME,IAAI,GAAG,EAAE,GAAGD,KAAK;AAEvB,IAAME,KAAK,GAAGC,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;AAE7B,IAAI,CAACF,KAAK,EAAE;EACV,MAAM,IAAIG,KAAK,CAAC,eAAe,CAAC;AAClC;AAEA,IAAMC,KAAK,GAAGJ,KAAK,CAACK,KAAK,CAAC,KAAK,CAAC;AAEhC,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;EACpB,MAAM,IAAIH,KAAK,CAAC,eAAe,CAAC;AAClC;AAEA,IAAMI,WAAW,GAAGC,KAAK,CAACJ,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAMK,SAAS,GAAGD,KAAK,CAACJ,KAAK,CAAC,CAAC,CAAC,CAAC;AACjC,IAAMM,QAAQ,GAAGD,SAAS,GAAGF,WAAW;AACxC,IAAMI,MAAM,GAAG;EACbC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAEN,WAAW;EAClBO,GAAG,EAAEL,SAAS;EACdC,QAAQ,EAARA,QAAQ;EACRK,WAAW,EAAEf;AACf,CAAC;AAEDgB,OAAO,CAACC,GAAG,CAACN,MAAM,EAAE;EAAEO,KAAK,EAAE;AAAK,CAAC,CAAC;AAEpC,SAASV,KAAKA,CAACW,GAAG,EAAE;EAClB,IAAMf,KAAK,GAAGe,GAAG,CAACd,KAAK,CAAC,GAAG,CAAC;EAE5B,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;IACpB,MAAM,IAAIH,KAAK,CAAC,eAAe,CAAC;EAClC;EAEA,IAAMiB,GAAG,GAAGjC,IAAI,CAACiB,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,IAAMiB,IAAI,GAAGjB,KAAK,CAAC,CAAC,CAAC;EAErB,IAAIgB,GAAG,KAAKE,SAAS,IAAIF,GAAG,KAAK,IAAI,IAAI,CAACC,IAAI,EAAE;IAC9C,MAAM,IAAIlB,KAAK,CAAC,mBAAmB,CAAC;EACtC;EAEA,IAAMoB,SAAS,GAAGF,IAAI,CAAChB,KAAK,CAAC,GAAG,CAAC;EACjC,IAAMmB,IAAI,GAAGD,SAAS,CAAC,CAAC,CAAC;EACzB,IAAME,MAAM,GAAGF,SAAS,CAAC,CAAC,CAAC;EAE3B,IAAI,CAACC,IAAI,IAAI,CAACC,MAAM,EAAE;IACpB,MAAM,IAAItB,KAAK,CAAC,kBAAkB,CAAC;EACrC;;EAEA;EACA;EACA,IAAMuB,MAAM,GAAGN,GAAG,GAAGrB,IAAI,GAAGyB,IAAI,GAAG1B,KAAK,GAAG2B,MAAM,GAAG5B,OAAO;EAE3D,OAAO6B,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"file":"calculate-hours.js","names":["days","MON","TUE","WED","THU","FRI","SAT","SUN","MON2","TUE2","MINUTES","HOURS","DAYS","input","process","argv","Error","parts","split","length","startOffset","parse","endOffset","duration","output","type","start","end","description","console","dir","depth","def","day","time","undefined","timeParts","hour","minute","offset"],"sources":["../../../src/service-hours/__helpers__/calculate-hours.js"],"sourcesContent":["/**\r\n * Script to generate service hour definitions which is otherwise tedious to\r\n * calculate as we store them in millisecond offsets\r\n * Example Input: TUE 08:00 - TUE 17:00\r\n */\r\n\r\nconst days = {\r\n MON: 0,\r\n TUE: 1,\r\n WED: 2,\r\n THU: 3,\r\n FRI: 4,\r\n SAT: 5,\r\n SUN: 6,\r\n MON2: 7,\r\n TUE2: 8,\r\n}\r\n\r\nconst MINUTES = 60000\r\nconst HOURS = 60 * MINUTES\r\nconst DAYS = 24 * HOURS\r\n\r\nconst input = process.argv[2]\r\n\r\nif (!input) {\r\n throw new Error('invalid input')\r\n}\r\n\r\nconst parts = input.split(' - ')\r\n\r\nif (parts.length < 2) {\r\n throw new Error('invalid input')\r\n}\r\n\r\nconst startOffset = parse(parts[0])\r\nconst endOffset = parse(parts[1])\r\nconst duration = endOffset - startOffset\r\nconst output = {\r\n type: 'DEFAULT',\r\n start: startOffset,\r\n end: endOffset,\r\n duration,\r\n description: input,\r\n}\r\n\r\nconsole.dir(output, { depth: null })\r\n\r\nfunction parse(def) {\r\n const parts = def.split(' ')\r\n\r\n if (parts.length < 2) {\r\n throw new Error('invalid parts')\r\n }\r\n\r\n const day = days[parts[0]]\r\n const time = parts[1]\r\n\r\n if (day === undefined || day === null || !time) {\r\n throw new Error('invalid date/time')\r\n }\r\n\r\n const timeParts = time.split(':')\r\n const hour = timeParts[0]\r\n const minute = timeParts[1]\r\n\r\n if (!hour || !minute) {\r\n throw new Error('invalid end time')\r\n }\r\n\r\n // NOTE this isn't taking into account actual end of time if you target the\r\n // end of a minute, e.g. 23:59\r\n const offset = day * DAYS + hour * HOURS + minute * MINUTES\r\n\r\n return offset\r\n}\r\n"],"mappings":";;AAAA;AACA;AACA;AACA;AACA;;AAEA,MAAMA,IAAI,GAAG;EACXC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,GAAG,EAAE,CAAC;EACNC,IAAI,EAAE,CAAC;EACPC,IAAI,EAAE;AACR,CAAC;AAED,MAAMC,OAAO,GAAG,KAAK;AACrB,MAAMC,KAAK,GAAG,EAAE,GAAGD,OAAO;AAC1B,MAAME,IAAI,GAAG,EAAE,GAAGD,KAAK;AAEvB,MAAME,KAAK,GAAGC,OAAO,CAACC,IAAI,CAAC,CAAC,CAAC;AAE7B,IAAI,CAACF,KAAK,EAAE;EACV,MAAM,IAAIG,KAAK,CAAC,eAAe,CAAC;AAClC;AAEA,MAAMC,KAAK,GAAGJ,KAAK,CAACK,KAAK,CAAC,KAAK,CAAC;AAEhC,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;EACpB,MAAM,IAAIH,KAAK,CAAC,eAAe,CAAC;AAClC;AAEA,MAAMI,WAAW,GAAGC,KAAK,CAACJ,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAMK,SAAS,GAAGD,KAAK,CAACJ,KAAK,CAAC,CAAC,CAAC,CAAC;AACjC,MAAMM,QAAQ,GAAGD,SAAS,GAAGF,WAAW;AACxC,MAAMI,MAAM,GAAG;EACbC,IAAI,EAAE,SAAS;EACfC,KAAK,EAAEN,WAAW;EAClBO,GAAG,EAAEL,SAAS;EACdC,QAAQ;EACRK,WAAW,EAAEf;AACf,CAAC;AAEDgB,OAAO,CAACC,GAAG,CAACN,MAAM,EAAE;EAAEO,KAAK,EAAE;AAAK,CAAC,CAAC;AAEpC,SAASV,KAAKA,CAACW,GAAG,EAAE;EAClB,MAAMf,KAAK,GAAGe,GAAG,CAACd,KAAK,CAAC,GAAG,CAAC;EAE5B,IAAID,KAAK,CAACE,MAAM,GAAG,CAAC,EAAE;IACpB,MAAM,IAAIH,KAAK,CAAC,eAAe,CAAC;EAClC;EAEA,MAAMiB,GAAG,GAAGjC,IAAI,CAACiB,KAAK,CAAC,CAAC,CAAC,CAAC;EAC1B,MAAMiB,IAAI,GAAGjB,KAAK,CAAC,CAAC,CAAC;EAErB,IAAIgB,GAAG,KAAKE,SAAS,IAAIF,GAAG,KAAK,IAAI,IAAI,CAACC,IAAI,EAAE;IAC9C,MAAM,IAAIlB,KAAK,CAAC,mBAAmB,CAAC;EACtC;EAEA,MAAMoB,SAAS,GAAGF,IAAI,CAAChB,KAAK,CAAC,GAAG,CAAC;EACjC,MAAMmB,IAAI,GAAGD,SAAS,CAAC,CAAC,CAAC;EACzB,MAAME,MAAM,GAAGF,SAAS,CAAC,CAAC,CAAC;EAE3B,IAAI,CAACC,IAAI,IAAI,CAACC,MAAM,EAAE;IACpB,MAAM,IAAItB,KAAK,CAAC,kBAAkB,CAAC;EACrC;;EAEA;EACA;EACA,MAAMuB,MAAM,GAAGN,GAAG,GAAGrB,IAAI,GAAGyB,IAAI,GAAG1B,KAAK,GAAG2B,MAAM,GAAG5B,OAAO;EAE3D,OAAO6B,MAAM;AACf","ignoreList":[]}
@@ -1,30 +1,31 @@
1
- import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
2
- import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
3
- import moment from 'moment-timezone';
4
- import { some } from 'lodash/fp';
5
- import { serviceIntervalsGenerator } from '../../scheduling/generators';
6
- import { Unit } from '../../scheduling/scheduling.types';
7
- /**
8
- * Checks whether timestamp is within service hours for start and end
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.isOpen = isOpen;
8
+ var _momentTimezone = _interopRequireDefault(require("moment-timezone"));
9
+ var _fp = require("lodash/fp");
10
+ var _generators = require("../../scheduling/generators");
11
+ var _scheduling = require("../../scheduling/scheduling.types");
12
+ /**
13
+ * Checks whether timestamp is within service hours for start and end
9
14
  */
10
- export function isOpen(_ref) {
11
- var serviceHours = _ref.serviceHours,
12
- timestamp = _ref.timestamp;
15
+ function isOpen({
16
+ serviceHours,
17
+ timestamp
18
+ }) {
13
19
  if (!timestamp) return false;
14
- var start = moment.utc(timestamp).subtract(1, Unit.Day).valueOf();
15
- var end = moment.utc(timestamp).add(1, Unit.Day).valueOf();
16
- var serviceIntervalSequence = serviceIntervalsGenerator({
17
- end: end,
18
- serviceHours: serviceHours,
19
- start: start
20
+ const start = _momentTimezone.default.utc(timestamp).subtract(1, _scheduling.Unit.Day).valueOf();
21
+ const end = _momentTimezone.default.utc(timestamp).add(1, _scheduling.Unit.Day).valueOf();
22
+ const serviceIntervalSequence = (0, _generators.serviceIntervalsGenerator)({
23
+ end,
24
+ serviceHours,
25
+ start
20
26
  });
21
- var serviceIntervals = _toConsumableArray(serviceIntervalSequence);
22
- var isOpen = some(function (_ref2) {
23
- var _ref3 = _slicedToArray(_ref2, 2),
24
- start = _ref3[0],
25
- end = _ref3[1];
26
- return timestamp >= start && timestamp <= end;
27
- })(serviceIntervals);
27
+ const serviceIntervals = [...serviceIntervalSequence];
28
+ const isOpen = (0, _fp.some)(([start, end]) => timestamp >= start && timestamp <= end)(serviceIntervals);
28
29
  return isOpen;
29
30
  }
30
31
  //# sourceMappingURL=isOpen.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"isOpen.js","names":["moment","some","serviceIntervalsGenerator","Unit","isOpen","_ref","serviceHours","timestamp","start","utc","subtract","Day","valueOf","end","add","serviceIntervalSequence","serviceIntervals","_toConsumableArray","_ref2","_ref3","_slicedToArray"],"sources":["../../../src/service-hours/__helpers__/isOpen.ts"],"sourcesContent":["import moment from 'moment-timezone'\nimport { some } from 'lodash/fp'\n\nimport { Schema as ServiceHoursSchema } from '..'\nimport { serviceIntervalsGenerator } from '../../scheduling/generators'\nimport { Unit } from '../../scheduling/scheduling.types'\n\ninterface IsOpen {\n serviceHours: ServiceHoursSchema\n timestamp: number\n}\n\n/**\n * Checks whether timestamp is within service hours for start and end\n */\nexport function isOpen({ serviceHours, timestamp }: IsOpen): boolean {\n if (!timestamp) return false\n\n const start = moment\n .utc(timestamp)\n .subtract(1, Unit.Day)\n .valueOf()\n const end = moment\n .utc(timestamp)\n .add(1, Unit.Day)\n .valueOf()\n\n const serviceIntervalSequence = serviceIntervalsGenerator({\n end,\n serviceHours,\n start,\n })\n\n const serviceIntervals = [...serviceIntervalSequence]\n const isOpen = some(([start, end]) => timestamp >= start && timestamp <= end)(\n serviceIntervals\n )\n\n return isOpen\n}\n"],"mappings":";;AAAA,OAAOA,MAAM,MAAM,iBAAiB;AACpC,SAASC,IAAI,QAAQ,WAAW;AAGhC,SAASC,yBAAyB,QAAQ,6BAA6B;AACvE,SAASC,IAAI,QAAQ,mCAAmC;AAOxD;AACA;AACA;AACA,OAAO,SAASC,MAAMA,CAAAC,IAAA,EAA+C;EAAA,IAA5CC,YAAY,GAAAD,IAAA,CAAZC,YAAY;IAAEC,SAAS,GAAAF,IAAA,CAATE,SAAS;EAC9C,IAAI,CAACA,SAAS,EAAE,OAAO,KAAK;EAE5B,IAAMC,KAAK,GAAGR,MAAM,CACjBS,GAAG,CAACF,SAAS,CAAC,CACdG,QAAQ,CAAC,CAAC,EAAEP,IAAI,CAACQ,GAAG,CAAC,CACrBC,OAAO,CAAC,CAAC;EACZ,IAAMC,GAAG,GAAGb,MAAM,CACfS,GAAG,CAACF,SAAS,CAAC,CACdO,GAAG,CAAC,CAAC,EAAEX,IAAI,CAACQ,GAAG,CAAC,CAChBC,OAAO,CAAC,CAAC;EAEZ,IAAMG,uBAAuB,GAAGb,yBAAyB,CAAC;IACxDW,GAAG,EAAHA,GAAG;IACHP,YAAY,EAAZA,YAAY;IACZE,KAAK,EAALA;EACF,CAAC,CAAC;EAEF,IAAMQ,gBAAgB,GAAAC,kBAAA,CAAOF,uBAAuB,CAAC;EACrD,IAAMX,MAAM,GAAGH,IAAI,CAAC,UAAAiB,KAAA;IAAA,IAAAC,KAAA,GAAAC,cAAA,CAAAF,KAAA;MAAEV,KAAK,GAAAW,KAAA;MAAEN,GAAG,GAAAM,KAAA;IAAA,OAAMZ,SAAS,IAAIC,KAAK,IAAID,SAAS,IAAIM,GAAG;EAAA,EAAC,CAC3EG,gBACF,CAAC;EAED,OAAOZ,MAAM;AACf","ignoreList":[]}
1
+ {"version":3,"file":"isOpen.js","names":["_momentTimezone","_interopRequireDefault","require","_fp","_generators","_scheduling","isOpen","serviceHours","timestamp","start","moment","utc","subtract","Unit","Day","valueOf","end","add","serviceIntervalSequence","serviceIntervalsGenerator","serviceIntervals","some"],"sources":["../../../src/service-hours/__helpers__/isOpen.ts"],"sourcesContent":["import moment from 'moment-timezone'\r\nimport { some } from 'lodash/fp'\r\n\r\nimport { Schema as ServiceHoursSchema } from '..'\r\nimport { serviceIntervalsGenerator } from '../../scheduling/generators'\r\nimport { Unit } from '../../scheduling/scheduling.types'\r\n\r\ninterface IsOpen {\r\n serviceHours: ServiceHoursSchema\r\n timestamp: number\r\n}\r\n\r\n/**\r\n * Checks whether timestamp is within service hours for start and end\r\n */\r\nexport function isOpen({ serviceHours, timestamp }: IsOpen): boolean {\r\n if (!timestamp) return false\r\n\r\n const start = moment\r\n .utc(timestamp)\r\n .subtract(1, Unit.Day)\r\n .valueOf()\r\n const end = moment\r\n .utc(timestamp)\r\n .add(1, Unit.Day)\r\n .valueOf()\r\n\r\n const serviceIntervalSequence = serviceIntervalsGenerator({\r\n end,\r\n serviceHours,\r\n start,\r\n })\r\n\r\n const serviceIntervals = [...serviceIntervalSequence]\r\n const isOpen = some(([start, end]) => timestamp >= start && timestamp <= end)(\r\n serviceIntervals\r\n )\r\n\r\n return isOpen\r\n}\r\n"],"mappings":";;;;;;;AAAA,IAAAA,eAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,GAAA,GAAAD,OAAA;AAGA,IAAAE,WAAA,GAAAF,OAAA;AACA,IAAAG,WAAA,GAAAH,OAAA;AAOA;AACA;AACA;AACO,SAASI,MAAMA,CAAC;EAAEC,YAAY;EAAEC;AAAkB,CAAC,EAAW;EACnE,IAAI,CAACA,SAAS,EAAE,OAAO,KAAK;EAE5B,MAAMC,KAAK,GAAGC,uBAAM,CACjBC,GAAG,CAACH,SAAS,CAAC,CACdI,QAAQ,CAAC,CAAC,EAAEC,gBAAI,CAACC,GAAG,CAAC,CACrBC,OAAO,CAAC,CAAC;EACZ,MAAMC,GAAG,GAAGN,uBAAM,CACfC,GAAG,CAACH,SAAS,CAAC,CACdS,GAAG,CAAC,CAAC,EAAEJ,gBAAI,CAACC,GAAG,CAAC,CAChBC,OAAO,CAAC,CAAC;EAEZ,MAAMG,uBAAuB,GAAG,IAAAC,qCAAyB,EAAC;IACxDH,GAAG;IACHT,YAAY;IACZE;EACF,CAAC,CAAC;EAEF,MAAMW,gBAAgB,GAAG,CAAC,GAAGF,uBAAuB,CAAC;EACrD,MAAMZ,MAAM,GAAG,IAAAe,QAAI,EAAC,CAAC,CAACZ,KAAK,EAAEO,GAAG,CAAC,KAAKR,SAAS,IAAIC,KAAK,IAAID,SAAS,IAAIQ,GAAG,CAAC,CAC3EI,gBACF,CAAC;EAED,OAAOd,MAAM;AACf","ignoreList":[]}
@@ -1,3 +1,28 @@
1
- export * from './schema';
2
- export * from './__helpers__/isOpen';
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ var _schema = require("./schema");
7
+ Object.keys(_schema).forEach(function (key) {
8
+ if (key === "default" || key === "__esModule") return;
9
+ if (key in exports && exports[key] === _schema[key]) return;
10
+ Object.defineProperty(exports, key, {
11
+ enumerable: true,
12
+ get: function () {
13
+ return _schema[key];
14
+ }
15
+ });
16
+ });
17
+ var _isOpen = require("./__helpers__/isOpen");
18
+ Object.keys(_isOpen).forEach(function (key) {
19
+ if (key === "default" || key === "__esModule") return;
20
+ if (key in exports && exports[key] === _isOpen[key]) return;
21
+ Object.defineProperty(exports, key, {
22
+ enumerable: true,
23
+ get: function () {
24
+ return _isOpen[key];
25
+ }
26
+ });
27
+ });
3
28
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/service-hours/index.ts"],"sourcesContent":["export * from './schema'\nexport * from './__helpers__/isOpen'\n"],"mappings":"AAAA,cAAc,UAAU;AACxB,cAAc,sBAAsB","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["_schema","require","Object","keys","forEach","key","exports","defineProperty","enumerable","get","_isOpen"],"sources":["../../src/service-hours/index.ts"],"sourcesContent":["export * from './schema'\r\nexport * from './__helpers__/isOpen'\r\n"],"mappings":";;;;;AAAA,IAAAA,OAAA,GAAAC,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAH,OAAA,EAAAI,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAL,OAAA,CAAAK,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAT,OAAA,CAAAK,GAAA;IAAA;EAAA;AAAA;AACA,IAAAK,OAAA,GAAAT,OAAA;AAAAC,MAAA,CAAAC,IAAA,CAAAO,OAAA,EAAAN,OAAA,WAAAC,GAAA;EAAA,IAAAA,GAAA,kBAAAA,GAAA;EAAA,IAAAA,GAAA,IAAAC,OAAA,IAAAA,OAAA,CAAAD,GAAA,MAAAK,OAAA,CAAAL,GAAA;EAAAH,MAAA,CAAAK,cAAA,CAAAD,OAAA,EAAAD,GAAA;IAAAG,UAAA;IAAAC,GAAA,WAAAA,CAAA;MAAA,OAAAC,OAAA,CAAAL,GAAA;IAAA;EAAA;AAAA","ignoreList":[]}
@@ -1,13 +1,20 @@
1
- import { array, number, object, string } from 'yup';
2
- import { filter, first, isEmpty, isNil, last, orderBy, values } from 'lodash/fp';
3
- import { some } from 'lodash';
4
- var MAX_OFFSET_MS = 604800000;
5
- export var Behaviours = /*#__PURE__*/function (Behaviours) {
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.schema = exports.default = exports.Weekdays = exports.Types = exports.Durations = exports.Behaviours = void 0;
7
+ exports.validateOverlappingHours = validateOverlappingHours;
8
+ var _yup = require("yup");
9
+ var _fp = require("lodash/fp");
10
+ var _lodash = require("lodash");
11
+ const MAX_OFFSET_MS = 604800000;
12
+ let Behaviours = exports.Behaviours = /*#__PURE__*/function (Behaviours) {
6
13
  Behaviours["Open"] = "OPEN";
7
14
  Behaviours["Close"] = "CLOSE";
8
15
  return Behaviours;
9
16
  }({});
10
- export var Durations = /*#__PURE__*/function (Durations) {
17
+ let Durations = exports.Durations = /*#__PURE__*/function (Durations) {
11
18
  Durations[Durations["Second"] = 1000] = "Second";
12
19
  Durations[Durations["Minute"] = 60000] = "Minute";
13
20
  Durations[Durations["Hour"] = 3600000] = "Hour";
@@ -15,12 +22,12 @@ export var Durations = /*#__PURE__*/function (Durations) {
15
22
  Durations[Durations["Week"] = 604800000] = "Week";
16
23
  return Durations;
17
24
  }({});
18
- export var Types = /*#__PURE__*/function (Types) {
25
+ let Types = exports.Types = /*#__PURE__*/function (Types) {
19
26
  Types["Default"] = "DEFAULT";
20
27
  Types["Override"] = "OVERRIDE";
21
28
  return Types;
22
29
  }({});
23
- export var Weekdays = /*#__PURE__*/function (Weekdays) {
30
+ let Weekdays = exports.Weekdays = /*#__PURE__*/function (Weekdays) {
24
31
  Weekdays["Monday"] = "MONDAY";
25
32
  Weekdays["Tuesday"] = "TUESDAY";
26
33
  Weekdays["Wednesday"] = "WEDNESDAY";
@@ -30,45 +37,43 @@ export var Weekdays = /*#__PURE__*/function (Weekdays) {
30
37
  Weekdays["Sunday"] = "SUNDAY";
31
38
  return Weekdays;
32
39
  }({});
33
- var hoursSchema = object({
34
- type: string().oneOf([Types.Default, Types.Override]).required(),
35
- start: number().min(0).required(),
36
- end: number().min(0).required().when('start', function (start, endSchema) {
40
+ const hoursSchema = (0, _yup.object)({
41
+ type: (0, _yup.string)().oneOf([Types.Default, Types.Override]).required(),
42
+ start: (0, _yup.number)().min(0).required(),
43
+ end: (0, _yup.number)().min(0).required().when('start', (start, endSchema) => {
37
44
  return endSchema.min(start);
38
45
  }),
39
- duration: number().integer().when(['start', 'end'], function (start, end, durationSchema) {
46
+ duration: (0, _yup.number)().integer().when(['start', 'end'], (start, end, durationSchema) => {
40
47
  // NOTE This is a bit of a hack to check the exact value, but I can't find
41
48
  // an API to check the exact value of a number
42
- var expectedDuration = end - start;
43
- var message = '${path} must be equal to ' + expectedDuration;
49
+ const expectedDuration = end - start;
50
+ const message = '${path} must be equal to ' + expectedDuration;
44
51
  return durationSchema.min(expectedDuration, message).max(expectedDuration, message);
45
52
  }),
46
- description: string(),
47
- behaviour: string().oneOf([Behaviours.Open, Behaviours.Close]).when('type', function (type, behaviourSchema) {
53
+ description: (0, _yup.string)(),
54
+ behaviour: (0, _yup.string)().oneOf([Behaviours.Open, Behaviours.Close]).when('type', (type, behaviourSchema) => {
48
55
  return type === Types.Override ? behaviourSchema.required() : behaviourSchema.strip(true);
49
56
  })
50
57
  });
51
- export var schema = object({
52
- timezone: string().required(),
53
- options: object({
54
- startWeekday: string().oneOf(values(Weekdays))
58
+ const schema = exports.schema = (0, _yup.object)({
59
+ timezone: (0, _yup.string)().required(),
60
+ options: (0, _yup.object)({
61
+ startWeekday: (0, _yup.string)().oneOf((0, _fp.values)(Weekdays))
55
62
  }),
56
- hours: array().of(hoursSchema).test('hasUndefinedHours', 'hours is a required field', function (value) {
57
- return !isNil(value);
58
- }).test('hasOverlappingDefaultHours', 'default hours must not overlap', function (value) {
59
- var defaultHours = filter({
63
+ hours: (0, _yup.array)().of(hoursSchema).test('hasUndefinedHours', 'hours is a required field', value => !(0, _fp.isNil)(value)).test('hasOverlappingDefaultHours', 'default hours must not overlap', value => {
64
+ const defaultHours = (0, _fp.filter)({
60
65
  type: Types.Default
61
66
  }, value);
62
- var hasOverlappingHours = validateOverlappingHours({
67
+ const hasOverlappingHours = validateOverlappingHours({
63
68
  hoursArr: defaultHours
64
69
  }) !== -1;
65
70
  if (hasOverlappingHours) return false;
66
71
  return true;
67
- }).test('hasOverlappingOverrideHours', 'override hours must not overlap', function (value) {
68
- var overrideHours = filter({
72
+ }).test('hasOverlappingOverrideHours', 'override hours must not overlap', value => {
73
+ const overrideHours = (0, _fp.filter)({
69
74
  type: Types.Override
70
75
  }, value);
71
- var hasOverlappingHours = validateOverlappingHours({
76
+ const hasOverlappingHours = validateOverlappingHours({
72
77
  hoursArr: overrideHours,
73
78
  isUnix: true
74
79
  }) !== -1;
@@ -76,46 +81,54 @@ export var schema = object({
76
81
  return true;
77
82
  })
78
83
  });
79
- /**
80
- * validateOverlappingHours
81
- * Validates that any hours do not overlap each other
82
- * Validates default hours are within a week range
84
+ /**
85
+ * validateOverlappingHours
86
+ * Validates that any hours do not overlap each other
87
+ * Validates default hours are within a week range
83
88
  */
84
- export function validateOverlappingHours(options) {
85
- var hoursArr = options.hoursArr,
86
- isUnix = options.isUnix;
87
- var failingIndex = -1;
88
- if (isEmpty(hoursArr)) {
89
+ function validateOverlappingHours(options) {
90
+ const {
91
+ hoursArr,
92
+ isUnix
93
+ } = options;
94
+ let failingIndex = -1;
95
+ if ((0, _fp.isEmpty)(hoursArr)) {
89
96
  return failingIndex;
90
97
  }
91
98
 
92
99
  // NOTE: when default hours and not override hours
93
100
  if (!isUnix) {
94
- var sortedHoursArr = orderBy(['start', 'end'], ['asc', 'asc'], hoursArr);
95
- var _first = first(sortedHoursArr),
96
- firstStart = _first.start;
97
- var _last = last(sortedHoursArr),
98
- lastEnd = _last.end;
101
+ const sortedHoursArr = (0, _fp.orderBy)(['start', 'end'], ['asc', 'asc'], hoursArr);
102
+ const {
103
+ start: firstStart
104
+ } = (0, _fp.first)(sortedHoursArr);
105
+ const {
106
+ end: lastEnd
107
+ } = (0, _fp.last)(sortedHoursArr);
99
108
 
100
109
  // NOTE: default service hour values are invalid if the first start and
101
110
  // last end exceed the MAX_OFFSET_MS which is a week
102
- var isRangeWithinWeek = lastEnd - firstStart <= MAX_OFFSET_MS;
111
+ const isRangeWithinWeek = lastEnd - firstStart <= MAX_OFFSET_MS;
103
112
  if (!isRangeWithinWeek) {
104
113
  failingIndex = 1;
105
114
  return failingIndex;
106
115
  }
107
116
  }
108
- some(hoursArr, function (thisHours, thisIndex) {
109
- var overlap = some(hoursArr, function (otherHours, otherIndex) {
117
+ (0, _lodash.some)(hoursArr, (thisHours, thisIndex) => {
118
+ const overlap = (0, _lodash.some)(hoursArr, (otherHours, otherIndex) => {
110
119
  if (otherIndex === thisIndex) return false;
111
- var thisStart = thisHours.start,
112
- thisEnd = thisHours.end;
113
- var otherStart = otherHours.start,
114
- otherEnd = otherHours.end;
115
- var isMatching = otherStart === thisStart && otherEnd === thisEnd;
116
- var isWithin = thisStart > otherStart && thisEnd < otherEnd;
117
- var overlappingStart = thisStart < otherStart && thisEnd > otherStart;
118
- var overlappingEnd = thisStart < otherEnd && thisEnd > otherEnd;
120
+ const {
121
+ start: thisStart,
122
+ end: thisEnd
123
+ } = thisHours;
124
+ const {
125
+ start: otherStart,
126
+ end: otherEnd
127
+ } = otherHours;
128
+ const isMatching = otherStart === thisStart && otherEnd === thisEnd;
129
+ const isWithin = thisStart > otherStart && thisEnd < otherEnd;
130
+ const overlappingStart = thisStart < otherStart && thisEnd > otherStart;
131
+ const overlappingEnd = thisStart < otherEnd && thisEnd > otherEnd;
119
132
  return isMatching || isWithin || overlappingStart || overlappingEnd;
120
133
  });
121
134
  if (overlap) {
@@ -125,5 +138,5 @@ export function validateOverlappingHours(options) {
125
138
  });
126
139
  return failingIndex;
127
140
  }
128
- export default schema;
141
+ var _default = exports.default = schema;
129
142
  //# sourceMappingURL=schema.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","names":["array","number","object","string","filter","first","isEmpty","isNil","last","orderBy","values","some","MAX_OFFSET_MS","Behaviours","Durations","Types","Weekdays","hoursSchema","type","oneOf","Default","Override","required","start","min","end","when","endSchema","duration","integer","durationSchema","expectedDuration","message","max","description","behaviour","Open","Close","behaviourSchema","strip","schema","timezone","options","startWeekday","hours","of","test","value","defaultHours","hasOverlappingHours","validateOverlappingHours","hoursArr","overrideHours","isUnix","failingIndex","sortedHoursArr","_first","firstStart","_last","lastEnd","isRangeWithinWeek","thisHours","thisIndex","overlap","otherHours","otherIndex","thisStart","thisEnd","otherStart","otherEnd","isMatching","isWithin","overlappingStart","overlappingEnd"],"sources":["../../src/service-hours/schema.ts"],"sourcesContent":["import {\n array,\n number,\n object,\n string,\n NumberSchema,\n StringSchema,\n} from 'yup'\n\nimport { filter, first, isEmpty, isNil, last, orderBy, values } from 'lodash/fp'\nimport { some } from 'lodash'\n\nconst MAX_OFFSET_MS = 604800000\n\nexport enum Behaviours {\n Open = 'OPEN',\n Close = 'CLOSE',\n}\n\nexport enum Durations {\n Second = 1000,\n Minute = 60000,\n Hour = 3600000,\n Day = 86400000,\n Week = 604800000,\n}\n\nexport enum Types {\n Default = 'DEFAULT',\n Override = 'OVERRIDE',\n}\n\nexport enum Weekdays {\n Monday = 'MONDAY',\n Tuesday = 'TUESDAY',\n Wednesday = 'WEDNESDAY',\n Thursday = 'THURSDAY',\n Friday = 'FRIDAY',\n Saturday = 'SATURDAY',\n Sunday = 'SUNDAY',\n}\n\nexport interface DefaultHoursSchema {\n description?: string\n duration?: number\n end: number\n start: number\n type: Types\n}\n\nexport interface OverrideHoursSchema extends DefaultHoursSchema {\n behaviour: Behaviours\n}\n\nexport type HoursSchema = DefaultHoursSchema | OverrideHoursSchema\n\nexport interface Schema {\n hours: Array<HoursSchema>\n options?: object\n timezone: string\n}\n\nconst hoursSchema = object({\n type: string()\n .oneOf([Types.Default, Types.Override])\n .required(),\n start: number()\n .min(0)\n .required(),\n end: number()\n .min(0)\n .required()\n .when('start', (start: number, endSchema: NumberSchema) => {\n return endSchema.min(start)\n }),\n duration: number()\n .integer()\n .when(['start', 'end'], (start: number, end: number, durationSchema: NumberSchema) => {\n // NOTE This is a bit of a hack to check the exact value, but I can't find\n // an API to check the exact value of a number\n const expectedDuration = end - start\n const message = '${path} must be equal to ' + expectedDuration\n return durationSchema\n .min(expectedDuration, message)\n .max(expectedDuration, message)\n }),\n description: string(),\n behaviour: string()\n .oneOf([Behaviours.Open, Behaviours.Close])\n .when('type', (type: Types, behaviourSchema: StringSchema) => {\n return type === Types.Override ? behaviourSchema.required() : behaviourSchema.strip(true)\n }),\n})\n\nexport const schema = object({\n timezone: string()\n .required(),\n options: object({\n startWeekday: string()\n .oneOf(values(Weekdays))\n }),\n hours: array()\n .of(hoursSchema)\n .test('hasUndefinedHours', 'hours is a required field', value => !isNil(value))\n .test(\n 'hasOverlappingDefaultHours',\n 'default hours must not overlap',\n value => {\n const defaultHours: HoursSchema[] = filter({ type: Types.Default }, value)\n const hasOverlappingHours = validateOverlappingHours({\n hoursArr: defaultHours,\n }) !== -1\n\n if (hasOverlappingHours) return false\n\n return true\n }\n )\n .test(\n 'hasOverlappingOverrideHours',\n 'override hours must not overlap',\n value => {\n const overrideHours: HoursSchema[] = filter({ type: Types.Override }, value)\n const hasOverlappingHours = validateOverlappingHours({\n hoursArr: overrideHours,\n isUnix: true,\n }) !== -1\n\n if (hasOverlappingHours) return false\n\n return true\n }\n ),\n})\n\ninterface ValidateOverlappingHours {\n hoursArr: Array<HoursSchema>\n isUnix?: Boolean\n}\n\n/**\n * validateOverlappingHours\n * Validates that any hours do not overlap each other \n * Validates default hours are within a week range\n */\nexport function validateOverlappingHours(options: ValidateOverlappingHours): Number {\n const { hoursArr, isUnix } = options\n let failingIndex = -1\n\n if (isEmpty(hoursArr)) {\n return failingIndex\n }\n\n // NOTE: when default hours and not override hours\n if (!isUnix) {\n const sortedHoursArr = orderBy(['start', 'end'], ['asc', 'asc'], hoursArr)\n\n const { start: firstStart } = first(sortedHoursArr)\n const { end: lastEnd } = last(sortedHoursArr)\n\n // NOTE: default service hour values are invalid if the first start and\n // last end exceed the MAX_OFFSET_MS which is a week\n const isRangeWithinWeek = (lastEnd - firstStart) <= MAX_OFFSET_MS\n\n if (!isRangeWithinWeek) {\n failingIndex = 1\n return failingIndex\n }\n }\n\n some(hoursArr, (thisHours, thisIndex) => {\n const overlap = some(hoursArr, (otherHours, otherIndex) => {\n if (otherIndex === thisIndex) return false\n\n const { start: thisStart, end: thisEnd } = thisHours\n const { start: otherStart, end: otherEnd } = otherHours\n\n const isMatching = otherStart === thisStart && otherEnd === thisEnd\n const isWithin = thisStart > otherStart && thisEnd < otherEnd\n const overlappingStart = thisStart < otherStart && thisEnd > otherStart\n const overlappingEnd = thisStart < otherEnd && thisEnd > otherEnd\n\n return isMatching || isWithin || overlappingStart || overlappingEnd\n })\n\n if (overlap) {\n failingIndex = thisIndex\n return true\n }\n })\n\n return failingIndex\n}\n\nexport default schema\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"schema.js","names":["_yup","require","_fp","_lodash","MAX_OFFSET_MS","Behaviours","exports","Durations","Types","Weekdays","hoursSchema","object","type","string","oneOf","Default","Override","required","start","number","min","end","when","endSchema","duration","integer","durationSchema","expectedDuration","message","max","description","behaviour","Open","Close","behaviourSchema","strip","schema","timezone","options","startWeekday","values","hours","array","of","test","value","isNil","defaultHours","filter","hasOverlappingHours","validateOverlappingHours","hoursArr","overrideHours","isUnix","failingIndex","isEmpty","sortedHoursArr","orderBy","firstStart","first","lastEnd","last","isRangeWithinWeek","some","thisHours","thisIndex","overlap","otherHours","otherIndex","thisStart","thisEnd","otherStart","otherEnd","isMatching","isWithin","overlappingStart","overlappingEnd","_default","default"],"sources":["../../src/service-hours/schema.ts"],"sourcesContent":["import {\r\n array,\r\n number,\r\n object,\r\n string,\r\n NumberSchema,\r\n StringSchema,\r\n} from 'yup'\r\n\r\nimport { filter, first, isEmpty, isNil, last, orderBy, values } from 'lodash/fp'\r\nimport { some } from 'lodash'\r\n\r\nconst MAX_OFFSET_MS = 604800000\r\n\r\nexport enum Behaviours {\r\n Open = 'OPEN',\r\n Close = 'CLOSE',\r\n}\r\n\r\nexport enum Durations {\r\n Second = 1000,\r\n Minute = 60000,\r\n Hour = 3600000,\r\n Day = 86400000,\r\n Week = 604800000,\r\n}\r\n\r\nexport enum Types {\r\n Default = 'DEFAULT',\r\n Override = 'OVERRIDE',\r\n}\r\n\r\nexport enum Weekdays {\r\n Monday = 'MONDAY',\r\n Tuesday = 'TUESDAY',\r\n Wednesday = 'WEDNESDAY',\r\n Thursday = 'THURSDAY',\r\n Friday = 'FRIDAY',\r\n Saturday = 'SATURDAY',\r\n Sunday = 'SUNDAY',\r\n}\r\n\r\nexport interface DefaultHoursSchema {\r\n description?: string\r\n duration?: number\r\n end: number\r\n start: number\r\n type: Types\r\n}\r\n\r\nexport interface OverrideHoursSchema extends DefaultHoursSchema {\r\n behaviour: Behaviours\r\n}\r\n\r\nexport type HoursSchema = DefaultHoursSchema | OverrideHoursSchema\r\n\r\nexport interface Schema {\r\n hours: Array<HoursSchema>\r\n options?: object\r\n timezone: string\r\n}\r\n\r\nconst hoursSchema = object({\r\n type: string()\r\n .oneOf([Types.Default, Types.Override])\r\n .required(),\r\n start: number()\r\n .min(0)\r\n .required(),\r\n end: number()\r\n .min(0)\r\n .required()\r\n .when('start', (start: number, endSchema: NumberSchema) => {\r\n return endSchema.min(start)\r\n }),\r\n duration: number()\r\n .integer()\r\n .when(['start', 'end'], (start: number, end: number, durationSchema: NumberSchema) => {\r\n // NOTE This is a bit of a hack to check the exact value, but I can't find\r\n // an API to check the exact value of a number\r\n const expectedDuration = end - start\r\n const message = '${path} must be equal to ' + expectedDuration\r\n return durationSchema\r\n .min(expectedDuration, message)\r\n .max(expectedDuration, message)\r\n }),\r\n description: string(),\r\n behaviour: string()\r\n .oneOf([Behaviours.Open, Behaviours.Close])\r\n .when('type', (type: Types, behaviourSchema: StringSchema) => {\r\n return type === Types.Override ? behaviourSchema.required() : behaviourSchema.strip(true)\r\n }),\r\n})\r\n\r\nexport const schema = object({\r\n timezone: string()\r\n .required(),\r\n options: object({\r\n startWeekday: string()\r\n .oneOf(values(Weekdays))\r\n }),\r\n hours: array()\r\n .of(hoursSchema)\r\n .test('hasUndefinedHours', 'hours is a required field', value => !isNil(value))\r\n .test(\r\n 'hasOverlappingDefaultHours',\r\n 'default hours must not overlap',\r\n value => {\r\n const defaultHours: HoursSchema[] = filter({ type: Types.Default }, value)\r\n const hasOverlappingHours = validateOverlappingHours({\r\n hoursArr: defaultHours,\r\n }) !== -1\r\n\r\n if (hasOverlappingHours) return false\r\n\r\n return true\r\n }\r\n )\r\n .test(\r\n 'hasOverlappingOverrideHours',\r\n 'override hours must not overlap',\r\n value => {\r\n const overrideHours: HoursSchema[] = filter({ type: Types.Override }, value)\r\n const hasOverlappingHours = validateOverlappingHours({\r\n hoursArr: overrideHours,\r\n isUnix: true,\r\n }) !== -1\r\n\r\n if (hasOverlappingHours) return false\r\n\r\n return true\r\n }\r\n ),\r\n})\r\n\r\ninterface ValidateOverlappingHours {\r\n hoursArr: Array<HoursSchema>\r\n isUnix?: Boolean\r\n}\r\n\r\n/**\r\n * validateOverlappingHours\r\n * Validates that any hours do not overlap each other \r\n * Validates default hours are within a week range\r\n */\r\nexport function validateOverlappingHours(options: ValidateOverlappingHours): Number {\r\n const { hoursArr, isUnix } = options\r\n let failingIndex = -1\r\n\r\n if (isEmpty(hoursArr)) {\r\n return failingIndex\r\n }\r\n\r\n // NOTE: when default hours and not override hours\r\n if (!isUnix) {\r\n const sortedHoursArr = orderBy(['start', 'end'], ['asc', 'asc'], hoursArr)\r\n\r\n const { start: firstStart } = first(sortedHoursArr)\r\n const { end: lastEnd } = last(sortedHoursArr)\r\n\r\n // NOTE: default service hour values are invalid if the first start and\r\n // last end exceed the MAX_OFFSET_MS which is a week\r\n const isRangeWithinWeek = (lastEnd - firstStart) <= MAX_OFFSET_MS\r\n\r\n if (!isRangeWithinWeek) {\r\n failingIndex = 1\r\n return failingIndex\r\n }\r\n }\r\n\r\n some(hoursArr, (thisHours, thisIndex) => {\r\n const overlap = some(hoursArr, (otherHours, otherIndex) => {\r\n if (otherIndex === thisIndex) return false\r\n\r\n const { start: thisStart, end: thisEnd } = thisHours\r\n const { start: otherStart, end: otherEnd } = otherHours\r\n\r\n const isMatching = otherStart === thisStart && otherEnd === thisEnd\r\n const isWithin = thisStart > otherStart && thisEnd < otherEnd\r\n const overlappingStart = thisStart < otherStart && thisEnd > otherStart\r\n const overlappingEnd = thisStart < otherEnd && thisEnd > otherEnd\r\n\r\n return isMatching || isWithin || overlappingStart || overlappingEnd\r\n })\r\n\r\n if (overlap) {\r\n failingIndex = thisIndex\r\n return true\r\n }\r\n })\r\n\r\n return failingIndex\r\n}\r\n\r\nexport default schema\r\n"],"mappings":"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","ignoreList":[]}
package/package.json CHANGED
@@ -1,86 +1,86 @@
1
- {
2
- "name": "@lighthouse/common",
3
- "version": "6.10.0",
4
- "description": "",
5
- "main": "dist/index.js",
6
- "module": "lib/index.js",
7
- "scripts": {
8
- "build": "yarn clear && yarn build:es && yarn build:node",
9
- "build:es": "yarn clear:es && babel src --out-dir lib --extensions '.js,.ts' --ignore 'src/**/fixtures.js,src/**/fixtures/*,src/**/*.story.js,src/**/*.story.ts,src/**/*.test.js,src/**/*.test.ts' --source-maps",
10
- "build:node": "yarn clear:node && BABEL_ENV=node babel src --out-dir dist --extensions '.js,.ts' --ignore 'src/**/fixtures.js,src/**/fixtures/*,src/**/*.story.js,src/**/*.story.ts,src/**/*.test.js,src/**/*.test.ts'",
11
- "clear": "yarn clear:es && yarn clear:node",
12
- "clear:es": "rimraf lib/",
13
- "clear:node": "rimraf dist/",
14
- "format": "prettier --write \"src/**/*.js\"",
15
- "lint": "eslint src/",
16
- "lint:fix": " yarn lint --fix",
17
- "precommit": "lint-staged",
18
- "prepublishOnly": "yarn build",
19
- "preversion": "yarn test",
20
- "storybook:html": "sb dev -p 9001 -c .storybook-html",
21
- "storybook:react": "sb dev -p 9002 -c .storybook-react",
22
- "build-storybook:html": "sb build -c .storybook-html",
23
- "build-storybook:react": "sb build -c .storybook-react",
24
- "test": "TZ=UTC vitest run",
25
- "test:watch": "TZ=UTC vitest watch",
26
- "test:ci": "yarn lint && yarn type-check && yarn test --coverage",
27
- "type-check": "tsc --noEmit",
28
- "type-check:watch": "yarn type-check --watch",
29
- "validate:circleci": "circleci config validate -c .circleci/config.yml",
30
- "version": "yarn build"
31
- },
32
- "repository": {
33
- "type": "git",
34
- "url": "git+https://github.com/Lighthouse-io/common.git"
35
- },
36
- "author": "Will McClellan",
37
- "license": "UNLICENSED",
38
- "bugs": {
39
- "url": "https://github.com/Lighthouse-io/common/issues"
40
- },
41
- "homepage": "https://github.com/Lighthouse-io/common#readme",
42
- "dependencies": {
43
- "aws-sdk": "2.1361.0",
44
- "bluebird": "^3.7.2",
45
- "fetch-ponyfill": "^6.1.0",
46
- "lodash": "^4.17.15",
47
- "moment-timezone": "^0.5.35",
48
- "react-html-parser": "^2.0.2",
49
- "yup": "^0.32.11"
50
- },
51
- "devDependencies": {
52
- "@babel/cli": "^7.8.4",
53
- "@babel/core": "^7.8.7",
54
- "@babel/plugin-transform-runtime": "^7.8.3",
55
- "@babel/preset-env": "^7.12.1",
56
- "@babel/preset-react": "^7.8.3",
57
- "@babel/preset-typescript": "^7.8.3",
58
- "@storybook/addon-actions": "^7.6.20",
59
- "@storybook/addon-essentials": "^7.6.20",
60
- "@storybook/cli": "^7.6.20",
61
- "@storybook/html": "^7.6.20",
62
- "@storybook/html-webpack5": "^7.6.20",
63
- "@storybook/react": "^7.6.20",
64
- "@storybook/react-webpack5": "^7.6.20",
65
- "@types/lodash": "^4.14.149",
66
- "@types/node": "^12.7.5",
67
- "@types/yup": "^0.26.32",
68
- "@vitest/ui": "^2.1.0",
69
- "babel-eslint": "^10.1.0",
70
- "babel-loader": "^8.0.5",
71
- "eslint": "^9.0.0",
72
- "eslint-config-prettier": "^9.1.0",
73
- "husky": "^0.14.3",
74
- "lint-staged": "^15.2.0",
75
- "mockdate": "^2.0.2",
76
- "nock": "^12.0.2",
77
- "prettier": "^3.3.0",
78
- "react": "^18.3.1",
79
- "react-dom": "^18.3.1",
80
- "react-visjs-timeline": "^1.6.0",
81
- "rimraf": "^2.6.3",
82
- "typescript": "^3.8.3",
83
- "vis-timeline": "^7.4.4",
84
- "vitest": "^3.0.0"
85
- }
86
- }
1
+ {
2
+ "name": "@lighthouse/common",
3
+ "version": "6.10.1-canary.0",
4
+ "description": "",
5
+ "main": "dist/index.js",
6
+ "module": "lib/index.js",
7
+ "scripts": {
8
+ "build": "yarn clear && yarn build:es && yarn build:node",
9
+ "build:es": "yarn clear:es && babel src --out-dir lib --extensions '.js,.ts' --ignore 'src/**/fixtures.js,src/**/fixtures/*,src/**/*.story.js,src/**/*.story.ts,src/**/*.test.js,src/**/*.test.ts' --source-maps",
10
+ "build:node": "yarn clear:node && BABEL_ENV=node babel src --out-dir dist --extensions '.js,.ts' --ignore 'src/**/fixtures.js,src/**/fixtures/*,src/**/*.story.js,src/**/*.story.ts,src/**/*.test.js,src/**/*.test.ts'",
11
+ "clear": "yarn clear:es && yarn clear:node",
12
+ "clear:es": "rimraf lib/",
13
+ "clear:node": "rimraf dist/",
14
+ "format": "prettier --write \"src/**/*.js\"",
15
+ "lint": "eslint src/",
16
+ "lint:fix": " yarn lint --fix",
17
+ "precommit": "lint-staged",
18
+ "prepublishOnly": "yarn build",
19
+ "preversion": "yarn test",
20
+ "storybook:html": "sb dev -p 9001 -c .storybook-html",
21
+ "storybook:react": "sb dev -p 9002 -c .storybook-react",
22
+ "build-storybook:html": "sb build -c .storybook-html",
23
+ "build-storybook:react": "sb build -c .storybook-react",
24
+ "test": "TZ=UTC vitest run",
25
+ "test:watch": "TZ=UTC vitest watch",
26
+ "test:ci": "yarn lint && yarn type-check && yarn test --coverage",
27
+ "type-check": "tsc --noEmit",
28
+ "type-check:watch": "yarn type-check --watch",
29
+ "validate:circleci": "circleci config validate -c .circleci/config.yml",
30
+ "version": "yarn build"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/Lighthouse-io/common.git"
35
+ },
36
+ "author": "Will McClellan",
37
+ "license": "UNLICENSED",
38
+ "bugs": {
39
+ "url": "https://github.com/Lighthouse-io/common/issues"
40
+ },
41
+ "homepage": "https://github.com/Lighthouse-io/common#readme",
42
+ "dependencies": {
43
+ "aws-sdk": "2.1361.0",
44
+ "bluebird": "^3.7.2",
45
+ "fetch-ponyfill": "^6.1.0",
46
+ "lodash": "^4.17.15",
47
+ "moment-timezone": "^0.5.35",
48
+ "react-html-parser": "^2.0.2",
49
+ "yup": "^0.32.11"
50
+ },
51
+ "devDependencies": {
52
+ "@babel/cli": "^7.8.4",
53
+ "@babel/core": "^7.8.7",
54
+ "@babel/plugin-transform-runtime": "^7.8.3",
55
+ "@babel/preset-env": "^7.12.1",
56
+ "@babel/preset-react": "^7.8.3",
57
+ "@babel/preset-typescript": "^7.8.3",
58
+ "@storybook/addon-actions": "^7.6.20",
59
+ "@storybook/addon-essentials": "^7.6.20",
60
+ "@storybook/cli": "^7.6.20",
61
+ "@storybook/html": "^7.6.20",
62
+ "@storybook/html-webpack5": "^7.6.20",
63
+ "@storybook/react": "^7.6.20",
64
+ "@storybook/react-webpack5": "^7.6.20",
65
+ "@types/lodash": "^4.14.149",
66
+ "@types/node": "^12.7.5",
67
+ "@types/yup": "^0.26.32",
68
+ "@vitest/ui": "^2.1.0",
69
+ "babel-eslint": "^10.1.0",
70
+ "babel-loader": "^8.0.5",
71
+ "eslint": "^9.0.0",
72
+ "eslint-config-prettier": "^9.1.0",
73
+ "husky": "^0.14.3",
74
+ "lint-staged": "^15.2.0",
75
+ "mockdate": "^2.0.2",
76
+ "nock": "^12.0.2",
77
+ "prettier": "^3.3.0",
78
+ "react": "^18.3.1",
79
+ "react-dom": "^18.3.1",
80
+ "react-visjs-timeline": "^1.6.0",
81
+ "rimraf": "^2.6.3",
82
+ "typescript": "^3.8.3",
83
+ "vis-timeline": "^7.4.4",
84
+ "vitest": "^3.0.0"
85
+ }
86
+ }
package/vitest.config.ts CHANGED
@@ -1,23 +1,23 @@
1
- import { defineConfig } from 'vitest/config'
2
-
3
- export default defineConfig({
4
- test: {
5
- globals: true,
6
- environment: 'node',
7
- include: ['src/**/*.{test,spec}.{js,ts}'],
8
- exclude: ['**/node_modules/**', '**/dist/**', '**/lib/**'],
9
- setupFiles: ['./vitest.setup.js'],
10
- coverage: {
11
- provider: 'v8',
12
- reporter: ['text', 'json', 'html', 'lcov'],
13
- include: ['src/**/*.{js,ts}'],
14
- exclude: [
15
- 'src/**/*.test.{js,ts}',
16
- 'src/**/*.spec.{js,ts}',
17
- 'src/**/*.story.{js,ts}',
18
- 'src/**/fixtures.js',
19
- 'src/**/fixtures/*',
20
- ],
21
- },
22
- },
23
- })
1
+ import { defineConfig } from 'vitest/config'
2
+
3
+ export default defineConfig({
4
+ test: {
5
+ globals: true,
6
+ environment: 'node',
7
+ include: ['src/**/*.{test,spec}.{js,ts}'],
8
+ exclude: ['**/node_modules/**', '**/dist/**', '**/lib/**'],
9
+ setupFiles: ['./vitest.setup.js'],
10
+ coverage: {
11
+ provider: 'v8',
12
+ reporter: ['text', 'json', 'html', 'lcov'],
13
+ include: ['src/**/*.{js,ts}'],
14
+ exclude: [
15
+ 'src/**/*.test.{js,ts}',
16
+ 'src/**/*.spec.{js,ts}',
17
+ 'src/**/*.story.{js,ts}',
18
+ 'src/**/fixtures.js',
19
+ 'src/**/fixtures/*',
20
+ ],
21
+ },
22
+ },
23
+ })
package/vitest.setup.js CHANGED
@@ -1,7 +1,7 @@
1
- import { vi } from 'vitest'
2
-
3
- // disable debug logs
4
- console.debug = vi.fn()
5
- console.error = vi.fn()
6
- console.warn = vi.fn()
7
- console.info = vi.fn()
1
+ import { vi } from 'vitest'
2
+
3
+ // disable debug logs
4
+ console.debug = vi.fn()
5
+ console.error = vi.fn()
6
+ console.warn = vi.fn()
7
+ console.info = vi.fn()