@hmcts/opal-frontend-common 0.0.2

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 (262) hide show
  1. package/README.md +24 -0
  2. package/esm2022/hmcts-opal-frontend-common.mjs +5 -0
  3. package/esm2022/lib/components/govuk/govuk-button/govuk-button.component.mjs +34 -0
  4. package/esm2022/lib/components/govuk/govuk-text-input/govuk-text-input.component.mjs +57 -0
  5. package/esm2022/lib/components/govuk/index.mjs +3 -0
  6. package/esm2022/lib/guards/auth/auth.guard.mjs +20 -0
  7. package/esm2022/lib/guards/auth/index.mjs +2 -0
  8. package/esm2022/lib/guards/can-deactivate/can-deactivate.guard.mjs +6 -0
  9. package/esm2022/lib/guards/can-deactivate/index.mjs +5 -0
  10. package/esm2022/lib/guards/can-deactivate/interfaces/can-deactivate-can-component-deactivate.interface.mjs +2 -0
  11. package/esm2022/lib/guards/can-deactivate/interfaces/index.mjs +2 -0
  12. package/esm2022/lib/guards/has-flow-state/has-flow-state.guard.mjs +16 -0
  13. package/esm2022/lib/guards/has-flow-state/index.mjs +2 -0
  14. package/esm2022/lib/guards/helpers/get-guard-with-dummy-url.mjs +19 -0
  15. package/esm2022/lib/guards/helpers/handle-observable-result.mjs +13 -0
  16. package/esm2022/lib/guards/helpers/index.mjs +5 -0
  17. package/esm2022/lib/guards/helpers/run-auth-guard-with-context.mjs +15 -0
  18. package/esm2022/lib/guards/helpers/run-has-flow-state-guard-with-context.mjs +9 -0
  19. package/esm2022/lib/guards/index.mjs +10 -0
  20. package/esm2022/lib/guards/route-permissions/index.mjs +2 -0
  21. package/esm2022/lib/guards/route-permissions/route-permissions.guard.mjs +25 -0
  22. package/esm2022/lib/guards/signed-in/index.mjs +3 -0
  23. package/esm2022/lib/guards/signed-in/signed-in.guard.mjs +20 -0
  24. package/esm2022/lib/guards/types/can-deactivate.type.mjs +2 -0
  25. package/esm2022/lib/guards/types/guard-return.type.mjs +2 -0
  26. package/esm2022/lib/guards/types/index.mjs +3 -0
  27. package/esm2022/lib/interceptors/http-error/http-error.interceptor.mjs +24 -0
  28. package/esm2022/lib/interceptors/index.mjs +3 -0
  29. package/esm2022/lib/opal-frontend-common.module.mjs +22 -0
  30. package/esm2022/lib/pages/access-denied/access-denied.component.mjs +18 -0
  31. package/esm2022/lib/pages/index.mjs +4 -0
  32. package/esm2022/lib/pages/routing/constants/routing-paths.constant.mjs +9 -0
  33. package/esm2022/lib/pages/routing/constants/routing-titles.constant.mjs +9 -0
  34. package/esm2022/lib/pages/routing/interfaces/routing-paths.interface.mjs +2 -0
  35. package/esm2022/lib/pages/routing/pages.routes.mjs +24 -0
  36. package/esm2022/lib/pages/sign-in/interfaces/index.mjs +2 -0
  37. package/esm2022/lib/pages/sign-in/interfaces/sign-in-stub-form.interface.mjs +2 -0
  38. package/esm2022/lib/pages/sign-in/sign-in-sso/sign-in-sso.component.mjs +23 -0
  39. package/esm2022/lib/pages/sign-in/sign-in-stub/sign-in-stub.component.mjs +39 -0
  40. package/esm2022/lib/pages/sign-in/sign-in.component.mjs +38 -0
  41. package/esm2022/lib/resolvers/index.mjs +3 -0
  42. package/esm2022/lib/resolvers/title/index.mjs +2 -0
  43. package/esm2022/lib/resolvers/title/title.resolver.mjs +22 -0
  44. package/esm2022/lib/resolvers/user-state/index.mjs +2 -0
  45. package/esm2022/lib/resolvers/user-state/user-state.resolver.mjs +12 -0
  46. package/esm2022/lib/routing/constants/index.mjs +2 -0
  47. package/esm2022/lib/routing/constants/sso-endpoints.constant.mjs +7 -0
  48. package/esm2022/lib/routing/index.mjs +3 -0
  49. package/esm2022/lib/routing/interfaces/child-routing-paths.interface.mjs +2 -0
  50. package/esm2022/lib/routing/interfaces/index.mjs +4 -0
  51. package/esm2022/lib/routing/interfaces/nested-routes.interface.mjs +2 -0
  52. package/esm2022/lib/routing/interfaces/sso-endpoints.interface.mjs +2 -0
  53. package/esm2022/lib/services/app-initializer-service/app-initializer.service.mjs +36 -0
  54. package/esm2022/lib/services/app-initializer-service/index.mjs +2 -0
  55. package/esm2022/lib/services/app-insights/app-insights.service.mjs +73 -0
  56. package/esm2022/lib/services/app-insights/index.mjs +4 -0
  57. package/esm2022/lib/services/auth-service/auth.service.mjs +36 -0
  58. package/esm2022/lib/services/auth-service/index.mjs +2 -0
  59. package/esm2022/lib/services/date-service/date.service.mjs +182 -0
  60. package/esm2022/lib/services/date-service/index.mjs +4 -0
  61. package/esm2022/lib/services/index.mjs +12 -0
  62. package/esm2022/lib/services/launch-darkly/index.mjs +5 -0
  63. package/esm2022/lib/services/launch-darkly/launch-darkly.service.mjs +94 -0
  64. package/esm2022/lib/services/launch-darkly/mocks/index.mjs +3 -0
  65. package/esm2022/lib/services/launch-darkly/mocks/launch-darkly-change-flags.mock.mjs +5 -0
  66. package/esm2022/lib/services/launch-darkly/mocks/launch-darkly-flags.mock.mjs +5 -0
  67. package/esm2022/lib/services/permissions-service/index.mjs +4 -0
  68. package/esm2022/lib/services/permissions-service/permissions.service.mjs +40 -0
  69. package/esm2022/lib/services/session-service/constants/index.mjs +2 -0
  70. package/esm2022/lib/services/session-service/constants/session-endpoints.constant.mjs +5 -0
  71. package/esm2022/lib/services/session-service/index.mjs +7 -0
  72. package/esm2022/lib/services/session-service/interfaces/index.mjs +4 -0
  73. package/esm2022/lib/services/session-service/interfaces/session-endpoints.interface.mjs +2 -0
  74. package/esm2022/lib/services/session-service/interfaces/session-token-expiry.interface.mjs +2 -0
  75. package/esm2022/lib/services/session-service/interfaces/session-user-state.interface.mjs +2 -0
  76. package/esm2022/lib/services/session-service/mocks/index.mjs +3 -0
  77. package/esm2022/lib/services/session-service/mocks/session-token-expiry.mock.mjs +5 -0
  78. package/esm2022/lib/services/session-service/mocks/session-user-state.mock.mjs +386 -0
  79. package/esm2022/lib/services/session-service/session.service.mjs +64 -0
  80. package/esm2022/lib/services/sort-service/index.mjs +6 -0
  81. package/esm2022/lib/services/sort-service/interfaces/index.mjs +3 -0
  82. package/esm2022/lib/services/sort-service/interfaces/sort-service-values.interface.mjs +2 -0
  83. package/esm2022/lib/services/sort-service/interfaces/sort-service.interface.mjs +2 -0
  84. package/esm2022/lib/services/sort-service/sort-service.mjs +90 -0
  85. package/esm2022/lib/services/sort-service/types/index.mjs +2 -0
  86. package/esm2022/lib/services/sort-service/types/sort-service.type.mjs +2 -0
  87. package/esm2022/lib/services/transfer-state-service/index.mjs +6 -0
  88. package/esm2022/lib/services/transfer-state-service/interfaces/index.mjs +4 -0
  89. package/esm2022/lib/services/transfer-state-service/interfaces/transfer-state-app-insights-config.interface.mjs +2 -0
  90. package/esm2022/lib/services/transfer-state-service/interfaces/transfer-state-launch-darkly-config.interface.mjs +2 -0
  91. package/esm2022/lib/services/transfer-state-service/interfaces/transfer-state-server-state.interface.mjs +2 -0
  92. package/esm2022/lib/services/transfer-state-service/mocks/index.mjs +4 -0
  93. package/esm2022/lib/services/transfer-state-service/mocks/transfer-state-app-insights-config.mock.mjs +6 -0
  94. package/esm2022/lib/services/transfer-state-service/mocks/transfer-state-launch-darkly-config.mock.mjs +6 -0
  95. package/esm2022/lib/services/transfer-state-service/mocks/transfer-state.mock.mjs +8 -0
  96. package/esm2022/lib/services/transfer-state-service/transfer-state.service.mjs +59 -0
  97. package/esm2022/lib/services/transformation-service/index.mjs +5 -0
  98. package/esm2022/lib/services/transformation-service/interfaces/index.mjs +2 -0
  99. package/esm2022/lib/services/transformation-service/interfaces/transform-item.interface.mjs +2 -0
  100. package/esm2022/lib/services/transformation-service/transformation.service.mjs +69 -0
  101. package/esm2022/lib/services/utils/index.mjs +4 -0
  102. package/esm2022/lib/services/utils/utils.service.mjs +86 -0
  103. package/esm2022/lib/stores/global/global.store.mjs +33 -0
  104. package/esm2022/lib/stores/global/index.mjs +6 -0
  105. package/esm2022/lib/stores/global/interfaces/error-state.interface.mjs +2 -0
  106. package/esm2022/lib/stores/global/interfaces/index.mjs +2 -0
  107. package/esm2022/lib/stores/global/types/global-store.type.mjs +2 -0
  108. package/esm2022/lib/stores/global/types/index.mjs +2 -0
  109. package/esm2022/lib/stores/index.mjs +2 -0
  110. package/esm2022/lib/validators/alphabetical-text/alphabetical-text.validator.mjs +10 -0
  111. package/esm2022/lib/validators/amount/amount.validator.mjs +15 -0
  112. package/esm2022/lib/validators/date-after-year/date-after-year.validator.mjs +12 -0
  113. package/esm2022/lib/validators/date-before/date-before.validator.mjs +15 -0
  114. package/esm2022/lib/validators/date-of-birth/date-of-birth.validator.mjs +18 -0
  115. package/esm2022/lib/validators/future-date/future-date.validator.mjs +15 -0
  116. package/esm2022/lib/validators/index.mjs +20 -0
  117. package/esm2022/lib/validators/invalid-value/invalid-value.validator.mjs +9 -0
  118. package/esm2022/lib/validators/national-insurance-number/national-insurance-number.validator.mjs +16 -0
  119. package/esm2022/lib/validators/numerical-only/numerical-only.validator.mjs +10 -0
  120. package/esm2022/lib/validators/optional-max-length/optional-max-length.validator.mjs +10 -0
  121. package/esm2022/lib/validators/optional-valid-date/optional-valid-date.validator.mjs +23 -0
  122. package/esm2022/lib/validators/optional-valid-email-address/optional-valid-email-address.validator.mjs +11 -0
  123. package/esm2022/lib/validators/optional-valid-telephone/optional-valid-telephone.validator.mjs +14 -0
  124. package/esm2022/lib/validators/over-eighteen/over-eighteen.validator.mjs +45 -0
  125. package/esm2022/lib/validators/past-date/past-date.validator.mjs +16 -0
  126. package/esm2022/lib/validators/special-characters/special-characters.validator.mjs +11 -0
  127. package/esm2022/lib/validators/two-decimal-places/two-decimal-places.validator.mjs +12 -0
  128. package/esm2022/lib/validators/valid-value/valid-value.validator.mjs +9 -0
  129. package/esm2022/public-api.mjs +11 -0
  130. package/fesm2022/hmcts-opal-frontend-common-sign-in-stub.component-CysPzJGJ.mjs +41 -0
  131. package/fesm2022/hmcts-opal-frontend-common-sign-in-stub.component-CysPzJGJ.mjs.map +1 -0
  132. package/fesm2022/hmcts-opal-frontend-common.mjs +1947 -0
  133. package/fesm2022/hmcts-opal-frontend-common.mjs.map +1 -0
  134. package/index.d.ts +5 -0
  135. package/lib/components/govuk/govuk-button/govuk-button.component.d.ts +14 -0
  136. package/lib/components/govuk/govuk-text-input/govuk-text-input.component.d.ts +17 -0
  137. package/lib/components/govuk/index.d.ts +2 -0
  138. package/lib/guards/auth/auth.guard.d.ts +6 -0
  139. package/lib/guards/auth/index.d.ts +1 -0
  140. package/lib/guards/can-deactivate/can-deactivate.guard.d.ts +3 -0
  141. package/lib/guards/can-deactivate/index.d.ts +2 -0
  142. package/lib/guards/can-deactivate/interfaces/can-deactivate-can-component-deactivate.interface.d.ts +4 -0
  143. package/lib/guards/can-deactivate/interfaces/index.d.ts +2 -0
  144. package/lib/guards/has-flow-state/has-flow-state.guard.d.ts +2 -0
  145. package/lib/guards/has-flow-state/index.d.ts +1 -0
  146. package/lib/guards/helpers/get-guard-with-dummy-url.d.ts +12 -0
  147. package/lib/guards/helpers/handle-observable-result.d.ts +8 -0
  148. package/lib/guards/helpers/index.d.ts +4 -0
  149. package/lib/guards/helpers/run-auth-guard-with-context.d.ts +9 -0
  150. package/lib/guards/helpers/run-has-flow-state-guard-with-context.d.ts +3 -0
  151. package/lib/guards/index.d.ts +7 -0
  152. package/lib/guards/route-permissions/index.d.ts +1 -0
  153. package/lib/guards/route-permissions/route-permissions.guard.d.ts +2 -0
  154. package/lib/guards/signed-in/index.d.ts +1 -0
  155. package/lib/guards/signed-in/signed-in.guard.d.ts +8 -0
  156. package/lib/guards/types/can-deactivate.type.d.ts +3 -0
  157. package/lib/guards/types/guard-return.type.d.ts +2 -0
  158. package/lib/guards/types/index.d.ts +2 -0
  159. package/lib/interceptors/http-error/http-error.interceptor.d.ts +2 -0
  160. package/lib/interceptors/index.d.ts +2 -0
  161. package/lib/opal-frontend-common.module.d.ts +14 -0
  162. package/lib/pages/access-denied/access-denied.component.d.ts +7 -0
  163. package/lib/pages/index.d.ts +3 -0
  164. package/lib/pages/routing/constants/routing-paths.constant.d.ts +2 -0
  165. package/lib/pages/routing/constants/routing-titles.constant.d.ts +2 -0
  166. package/lib/pages/routing/interfaces/routing-paths.interface.d.ts +8 -0
  167. package/lib/pages/routing/pages.routes.d.ts +2 -0
  168. package/lib/pages/sign-in/interfaces/index.d.ts +2 -0
  169. package/lib/pages/sign-in/interfaces/sign-in-stub-form.interface.d.ts +3 -0
  170. package/lib/pages/sign-in/sign-in-sso/sign-in-sso.component.d.ts +11 -0
  171. package/lib/pages/sign-in/sign-in-stub/sign-in-stub.component.d.ts +19 -0
  172. package/lib/pages/sign-in/sign-in.component.d.ts +51 -0
  173. package/lib/resolvers/index.d.ts +2 -0
  174. package/lib/resolvers/title/index.d.ts +1 -0
  175. package/lib/resolvers/title/title.resolver.d.ts +10 -0
  176. package/lib/resolvers/user-state/index.d.ts +1 -0
  177. package/lib/resolvers/user-state/user-state.resolver.d.ts +7 -0
  178. package/lib/routing/constants/index.d.ts +1 -0
  179. package/lib/routing/constants/sso-endpoints.constant.d.ts +2 -0
  180. package/lib/routing/index.d.ts +2 -0
  181. package/lib/routing/interfaces/child-routing-paths.interface.d.ts +6 -0
  182. package/lib/routing/interfaces/index.d.ts +3 -0
  183. package/lib/routing/interfaces/nested-routes.interface.d.ts +4 -0
  184. package/lib/routing/interfaces/sso-endpoints.interface.d.ts +6 -0
  185. package/lib/services/app-initializer-service/app-initializer.service.d.ts +20 -0
  186. package/lib/services/app-initializer-service/index.d.ts +1 -0
  187. package/lib/services/app-insights/app-insights.service.d.ts +33 -0
  188. package/lib/services/app-insights/index.d.ts +1 -0
  189. package/lib/services/auth-service/auth.service.d.ts +8 -0
  190. package/lib/services/auth-service/index.d.ts +1 -0
  191. package/lib/services/date-service/date.service.d.ts +123 -0
  192. package/lib/services/date-service/index.d.ts +1 -0
  193. package/lib/services/index.d.ts +11 -0
  194. package/lib/services/launch-darkly/index.d.ts +2 -0
  195. package/lib/services/launch-darkly/launch-darkly.service.d.ts +41 -0
  196. package/lib/services/launch-darkly/mocks/index.d.ts +2 -0
  197. package/lib/services/launch-darkly/mocks/launch-darkly-change-flags.mock.d.ts +10 -0
  198. package/lib/services/launch-darkly/mocks/launch-darkly-flags.mock.d.ts +4 -0
  199. package/lib/services/permissions-service/index.d.ts +1 -0
  200. package/lib/services/permissions-service/permissions.service.d.ts +14 -0
  201. package/lib/services/session-service/constants/index.d.ts +1 -0
  202. package/lib/services/session-service/constants/session-endpoints.constant.d.ts +2 -0
  203. package/lib/services/session-service/index.d.ts +4 -0
  204. package/lib/services/session-service/interfaces/index.d.ts +3 -0
  205. package/lib/services/session-service/interfaces/session-endpoints.interface.d.ts +4 -0
  206. package/lib/services/session-service/interfaces/session-token-expiry.interface.d.ts +4 -0
  207. package/lib/services/session-service/interfaces/session-user-state.interface.d.ts +15 -0
  208. package/lib/services/session-service/mocks/index.d.ts +2 -0
  209. package/lib/services/session-service/mocks/session-token-expiry.mock.d.ts +2 -0
  210. package/lib/services/session-service/mocks/session-user-state.mock.d.ts +2 -0
  211. package/lib/services/session-service/session.service.d.ts +30 -0
  212. package/lib/services/sort-service/index.d.ts +3 -0
  213. package/lib/services/sort-service/interfaces/index.d.ts +2 -0
  214. package/lib/services/sort-service/interfaces/sort-service-values.interface.d.ts +6 -0
  215. package/lib/services/sort-service/interfaces/sort-service.interface.d.ts +4 -0
  216. package/lib/services/sort-service/sort-service.d.ts +64 -0
  217. package/lib/services/sort-service/types/index.d.ts +1 -0
  218. package/lib/services/sort-service/types/sort-service.type.d.ts +1 -0
  219. package/lib/services/transfer-state-service/index.d.ts +3 -0
  220. package/lib/services/transfer-state-service/interfaces/index.d.ts +3 -0
  221. package/lib/services/transfer-state-service/interfaces/transfer-state-app-insights-config.interface.d.ts +5 -0
  222. package/lib/services/transfer-state-service/interfaces/transfer-state-launch-darkly-config.interface.d.ts +5 -0
  223. package/lib/services/transfer-state-service/interfaces/transfer-state-server-state.interface.d.ts +7 -0
  224. package/lib/services/transfer-state-service/mocks/index.d.ts +3 -0
  225. package/lib/services/transfer-state-service/mocks/transfer-state-app-insights-config.mock.d.ts +5 -0
  226. package/lib/services/transfer-state-service/mocks/transfer-state-launch-darkly-config.mock.d.ts +5 -0
  227. package/lib/services/transfer-state-service/mocks/transfer-state.mock.d.ts +2 -0
  228. package/lib/services/transfer-state-service/transfer-state.service.d.ts +23 -0
  229. package/lib/services/transformation-service/index.d.ts +2 -0
  230. package/lib/services/transformation-service/interfaces/index.d.ts +1 -0
  231. package/lib/services/transformation-service/interfaces/transform-item.interface.d.ts +6 -0
  232. package/lib/services/transformation-service/transformation.service.d.ts +30 -0
  233. package/lib/services/utils/index.d.ts +1 -0
  234. package/lib/services/utils/utils.service.d.ts +54 -0
  235. package/lib/stores/global/global.store.d.ts +35 -0
  236. package/lib/stores/global/index.d.ts +3 -0
  237. package/lib/stores/global/interfaces/error-state.interface.d.ts +4 -0
  238. package/lib/stores/global/interfaces/index.d.ts +1 -0
  239. package/lib/stores/global/types/global-store.type.d.ts +2 -0
  240. package/lib/stores/global/types/index.d.ts +1 -0
  241. package/lib/stores/index.d.ts +1 -0
  242. package/lib/validators/alphabetical-text/alphabetical-text.validator.d.ts +2 -0
  243. package/lib/validators/amount/amount.validator.d.ts +2 -0
  244. package/lib/validators/date-after-year/date-after-year.validator.d.ts +2 -0
  245. package/lib/validators/date-before/date-before.validator.d.ts +2 -0
  246. package/lib/validators/date-of-birth/date-of-birth.validator.d.ts +2 -0
  247. package/lib/validators/future-date/future-date.validator.d.ts +2 -0
  248. package/lib/validators/index.d.ts +19 -0
  249. package/lib/validators/invalid-value/invalid-value.validator.d.ts +2 -0
  250. package/lib/validators/national-insurance-number/national-insurance-number.validator.d.ts +2 -0
  251. package/lib/validators/numerical-only/numerical-only.validator.d.ts +2 -0
  252. package/lib/validators/optional-max-length/optional-max-length.validator.d.ts +2 -0
  253. package/lib/validators/optional-valid-date/optional-valid-date.validator.d.ts +2 -0
  254. package/lib/validators/optional-valid-email-address/optional-valid-email-address.validator.d.ts +2 -0
  255. package/lib/validators/optional-valid-telephone/optional-valid-telephone.validator.d.ts +2 -0
  256. package/lib/validators/over-eighteen/over-eighteen.validator.d.ts +14 -0
  257. package/lib/validators/past-date/past-date.validator.d.ts +2 -0
  258. package/lib/validators/special-characters/special-characters.validator.d.ts +2 -0
  259. package/lib/validators/two-decimal-places/two-decimal-places.validator.d.ts +2 -0
  260. package/lib/validators/valid-value/valid-value.validator.d.ts +2 -0
  261. package/package.json +28 -0
  262. package/public-api.d.ts +10 -0
@@ -0,0 +1,182 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { DateTime, Duration } from 'luxon';
3
+ import * as i0 from "@angular/core";
4
+ export class DateService {
5
+ /**
6
+ * Calculates the difference in minutes between two DateTime objects.
7
+ * @param startDate The start date and time.
8
+ * @param endDate The end date and time.
9
+ * @returns The difference in minutes between the start and end dates.
10
+ */
11
+ calculateMinutesDifference(startDate, endDate) {
12
+ const minuteDifference = endDate.diff(startDate, 'minutes');
13
+ return Math.max(0, Math.ceil(minuteDifference.minutes));
14
+ }
15
+ /**
16
+ * Converts milliseconds to minutes.
17
+ * @param milliseconds - The number of milliseconds to convert.
18
+ * @returns The equivalent number of minutes.
19
+ */
20
+ convertMillisecondsToMinutes(milliseconds) {
21
+ const minutes = Duration.fromMillis(milliseconds).as('minutes');
22
+ return Math.max(0, Math.ceil(minutes));
23
+ }
24
+ /**
25
+ * Calculates the age based on the given date of birth.
26
+ * @param dateOfBirth - The date of birth to calculate the age from.
27
+ * @param format - The format of the date of birth. Defaults to 'dd/MM/yyyy'.
28
+ * @returns The calculated age.
29
+ */
30
+ calculateAge(dateOfBirth, format = 'dd/MM/yyyy') {
31
+ const date = typeof dateOfBirth === 'string' ? this.getFromFormat(dateOfBirth, format) : dateOfBirth;
32
+ return Math.floor(DateTime.now().diff(date, 'years').years);
33
+ }
34
+ /**
35
+ * Checks if a given date is valid.
36
+ * @param dateInput - The date to be checked. It can be a DateTime object, a string, or null.
37
+ * @param format - The format of the date string (default: 'dd/MM/yyyy').
38
+ * @returns A boolean indicating whether the date is valid or not.
39
+ */
40
+ isValidDate(dateInput, format = 'dd/MM/yyyy') {
41
+ if (dateInput) {
42
+ const date = typeof dateInput === 'string' ? this.getFromFormat(dateInput, format) : dateInput;
43
+ return date.isValid;
44
+ }
45
+ return false;
46
+ }
47
+ /**
48
+ * Returns a string representation of a date subtracted by the given duration.
49
+ * @param duration A DurationLikeObject representing the amount of time to subtract from the current date.
50
+ * @returns A string representing the subtracted date in the format specified by the current locale.
51
+ */
52
+ getPreviousDate(duration) {
53
+ return DateTime.now().minus(duration).setLocale('en-gb').toLocaleString();
54
+ }
55
+ /**
56
+ * Parses a string value into a DateTime object based on the specified format.
57
+ * @param value - The string value to parse.
58
+ * @param format - The format of the string value.
59
+ * @returns A DateTime object representing the parsed value.
60
+ */
61
+ getFromFormat(value, format) {
62
+ return DateTime.fromFormat(value, format);
63
+ }
64
+ /**
65
+ * Parses a string value into a native JavaScript Date object based on the specified format.
66
+ * @param value - The string value to parse.
67
+ * @param format - The format of the string value.
68
+ * @returns A Date object representing the parsed value, or null if parsing fails.
69
+ */
70
+ getDateFromFormat(value, format) {
71
+ const dateTime = DateTime.fromFormat(value, format);
72
+ return dateTime.isValid ? dateTime.toJSDate() : null;
73
+ }
74
+ /**
75
+ * Converts a DateTime value to a formatted string.
76
+ *
77
+ * @param value - The DateTime value to format.
78
+ * @param format - The format string to apply to the DateTime value.
79
+ * @returns The formatted string representation of the DateTime value.
80
+ */
81
+ toFormat(value, format) {
82
+ return value.toFormat(format);
83
+ }
84
+ /**
85
+ * Converts a given Date object to a formatted string based on the specified format.
86
+ *
87
+ * @param value - The Date object to be formatted.
88
+ * @param format - The string format to apply to the Date object.
89
+ * @returns The formatted date string.
90
+ */
91
+ toDateStringFormat(value, format) {
92
+ return DateTime.fromJSDate(value).toFormat(format);
93
+ }
94
+ /**
95
+ * Converts a string in ISO format to a DateTime object.
96
+ * @param value - The string value in ISO format.
97
+ * @returns A DateTime object representing the given value.
98
+ */
99
+ getFromIso(value) {
100
+ return DateTime.fromISO(value);
101
+ }
102
+ /**
103
+ * Returns the current date and time.
104
+ * @returns {DateTime} The current date and time.
105
+ */
106
+ getDateNow() {
107
+ return DateTime.now();
108
+ }
109
+ /**
110
+ * Adds a duration to a given date and returns the result in the specified format.
111
+ * @param date - The date to which the duration will be added.
112
+ * @param years - The number of years to add to the date (default: 0).
113
+ * @param months - The number of months to add to the date (default: 0).
114
+ * @param weeks - The number of weeks to add to the date (default: 0).
115
+ * @param days - The number of days to add to the date (default: 0).
116
+ * @param format - The format in which the resulting date will be returned (default: 'dd/MM/yyyy').
117
+ * @returns The resulting date in the specified format.
118
+ */
119
+ addDurationToDate(date, years = 0, months = 0, weeks = 0, days = 0, format = 'dd/MM/yyyy') {
120
+ const dateObj = this.getFromFormat(date, format);
121
+ const newDate = dateObj.plus({ years, months, weeks, days });
122
+ return newDate.toFormat(format);
123
+ }
124
+ /**
125
+ * Calculates the number of days between two dates.
126
+ * @param startDate - The start date in the specified format.
127
+ * @param endDate - The end date in the specified format.
128
+ * @param format - The format of the dates (default: 'dd/MM/yyyy').
129
+ * @returns The number of days between the start and end dates.
130
+ */
131
+ calculateDaysBetweenDates(startDate, endDate, format = 'dd/MM/yyyy') {
132
+ const start = this.getFromFormat(startDate, format);
133
+ const end = this.getFromFormat(endDate, format);
134
+ const diff = end.diff(start, 'days');
135
+ return diff.days;
136
+ }
137
+ /**
138
+ * Checks if a given date is in the past.
139
+ * @param date - The date to check.
140
+ * @param format - The format of the date string. Defaults to 'dd/MM/yyyy'.
141
+ * @returns True if the date is in the past, false otherwise.
142
+ */
143
+ isDateInThePast(date, format = 'dd/MM/yyyy') {
144
+ return this.getFromFormat(date, format) < DateTime.now();
145
+ }
146
+ /**
147
+ * Checks if a given date is in the future.
148
+ * @param date - The date to check.
149
+ * @param yearsInTheFuture - Optional. The number of years in the future to compare against. If not provided, the current date is used.
150
+ * @param format - Optional. The format of the input date. Defaults to 'dd/MM/yyyy'.
151
+ * @returns True if the date is in the future, false otherwise.
152
+ */
153
+ isDateInTheFuture(date, yearsInTheFuture, format = 'dd/MM/yyyy') {
154
+ const now = DateTime.now();
155
+ const dateValue = this.getFromFormat(date, format);
156
+ if (yearsInTheFuture) {
157
+ const futureDate = now.plus({ years: yearsInTheFuture });
158
+ return dateValue > futureDate;
159
+ }
160
+ return dateValue > now;
161
+ }
162
+ /**
163
+ * Converts a date string from one format to another.
164
+ *
165
+ * @param date - The date string to be converted.
166
+ * @param fromFormat - The format of the input date string.
167
+ * @param toFormat - The desired format of the output date string.
168
+ * @returns The date string in the desired format.
169
+ */
170
+ getFromFormatToFormat(date, fromFormat, toFormat) {
171
+ return this.getFromFormat(date, fromFormat).toFormat(toFormat);
172
+ }
173
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
174
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateService, providedIn: 'root' });
175
+ }
176
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DateService, decorators: [{
177
+ type: Injectable,
178
+ args: [{
179
+ providedIn: 'root',
180
+ }]
181
+ }] });
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0ZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3BhbC1mcm9udGVuZC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9kYXRlLXNlcnZpY2UvZGF0ZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQXNCLE1BQU0sT0FBTyxDQUFDOztBQUsvRCxNQUFNLE9BQU8sV0FBVztJQUN0Qjs7Ozs7T0FLRztJQUNJLDBCQUEwQixDQUFDLFNBQW1CLEVBQUUsT0FBaUI7UUFDdEUsTUFBTSxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM1RCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLDRCQUE0QixDQUFDLFlBQW9CO1FBQ3RELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNJLFlBQVksQ0FBQyxXQUE4QixFQUFFLFNBQWlCLFlBQVk7UUFDL0UsTUFBTSxJQUFJLEdBQUcsT0FBTyxXQUFXLEtBQUssUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFD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cmUnO1xuaW1wb3J0IHsgRGF0ZVRpbWUsIER1cmF0aW9uLCBEdXJhdGlvbkxpa2VPYmplY3QgfSBmcm9tICdsdXhvbic7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBEYXRlU2VydmljZSB7XG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBkaWZmZXJlbmNlIGluIG1pbnV0ZXMgYmV0d2VlbiB0d28gRGF0ZVRpbWUgb2JqZWN0cy5cbiAgICogQHBhcmFtIHN0YXJ0RGF0ZSBUaGUgc3RhcnQgZGF0ZSBhbmQgdGltZS5cbiAgICogQHBhcmFtIGVuZERhdGUgVGhlIGVuZCBkYXRlIGFuZCB0aW1lLlxuICAgKiBAcmV0dXJucyBUaGUgZGlmZmVyZW5jZSBpbiBtaW51dGVzIGJldHdlZW4gdGhlIHN0YXJ0IGFuZCBlbmQgZGF0ZXMuXG4gICAqL1xuICBwdWJsaWMgY2FsY3VsYXRlTWludXRlc0RpZmZlcmVuY2Uoc3RhcnREYXRlOiBEYXRlVGltZSwgZW5kRGF0ZTogRGF0ZVRpbWUpOiBudW1iZXIge1xuICAgIGNvbnN0IG1pbnV0ZURpZmZlcmVuY2UgPSBlbmREYXRlLmRpZmYoc3RhcnREYXRlLCAnbWludXRlcycpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLmNlaWwobWludXRlRGlmZmVyZW5jZS5taW51dGVzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgbWlsbGlzZWNvbmRzIHRvIG1pbnV0ZXMuXG4gICAqIEBwYXJhbSBtaWxsaXNlY29uZHMgLSBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byBjb252ZXJ0LlxuICAgKiBAcmV0dXJucyBUaGUgZXF1aXZhbGVudCBudW1iZXIgb2YgbWludXRlcy5cbiAgICovXG4gIHB1YmxpYyBjb252ZXJ0TWlsbGlzZWNvbmRzVG9NaW51dGVzKG1pbGxpc2Vjb25kczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBtaW51dGVzID0gRHVyYXRpb24uZnJvbU1pbGxpcyhtaWxsaXNlY29uZHMpLmFzKCdtaW51dGVzJyk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGguY2VpbChtaW51dGVzKSk7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlcyB0aGUgYWdlIGJhc2VkIG9uIHRoZSBnaXZlbiBkYXRlIG9mIGJpcnRoLlxuICAgKiBAcGFyYW0gZGF0ZU9mQmlydGggLSBUaGUgZGF0ZSBvZiBiaXJ0aCB0byBjYWxjdWxhdGUgdGhlIGFnZSBmcm9tLlxuICAgKiBAcGFyYW0gZm9ybWF0IC0gVGhlIGZvcm1hdCBvZiB0aGUgZGF0ZSBvZiBiaXJ0aC4gRGVmYXVsdHMgdG8gJ2RkL01NL3l5eXknLlxuICAgKiBAcmV0dXJucyBUaGUgY2FsY3VsYXRlZCBhZ2UuXG4gICAqL1xuICBwdWJsaWMgY2FsY3VsYXRlQWdlKGRhdGVPZkJpcnRoOiBEYXRlVGltZSB8IHN0cmluZywgZm9ybWF0OiBzdHJpbmcgPSAnZGQvTU0veXl5eScpOiBudW1iZXIge1xuICAgIGNvbnN0IGRhdGUgPSB0eXBlb2YgZGF0ZU9mQmlydGggPT09ICdzdHJpbmcnID8gdGhpcy5nZXRGcm9tRm9ybWF0KGRhdGVPZkJpcnRoLCBmb3JtYXQpIDogZGF0ZU9mQmlydGg7XG5cbiAgICByZXR1cm4gTWF0aC5mbG9vcihEYXRlVGltZS5ub3coKS5kaWZmKGRhdGUsICd5ZWFycycpLnllYXJzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgYSBnaXZlbiBkYXRlIGlzIHZhbGlkLlxuICAgKiBAcGFyYW0gZGF0ZUlucHV0IC0gVGhlIGRhdGUgdG8gYmUgY2hlY2tlZC4gSXQgY2FuIGJlIGEgRGF0ZVRpbWUgb2JqZWN0LCBhIHN0cmluZywgb3IgbnVsbC5cbiAgICogQHBhcmFtIGZvcm1hdCAtIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGUgc3RyaW5nIChkZWZhdWx0OiAnZGQvTU0veXl5eScpLlxuICAgKiBAcmV0dXJucyBBIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBkYXRlIGlzIHZhbGlkIG9yIG5vdC5cbiAgICovXG4gIHB1YmxpYyBpc1ZhbGlkRGF0ZShkYXRlSW5wdXQ6IERhdGVUaW1lIHwgc3RyaW5nIHwgbnVsbCwgZm9ybWF0OiBzdHJpbmcgPSAnZGQvTU0veXl5eScpOiBib29sZWFuIHtcbiAgICBpZiAoZGF0ZUlucHV0KSB7XG4gICAgICBjb25zdCBkYXRlID0gdHlwZW9mIGRhdGVJbnB1dCA9PT0gJ3N0cmluZycgPyB0aGlzLmdldEZyb21Gb3JtYXQoZGF0ZUlucHV0LCBmb3JtYXQpIDogZGF0ZUlucHV0O1xuICAgICAgcmV0dXJuIGRhdGUuaXNWYWxpZDtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYSBkYXRlIHN1YnRyYWN0ZWQgYnkgdGhlIGdpdmVuIGR1cmF0aW9uLlxuICAgKiBAcGFyYW0gZHVyYXRpb24gQSBEdXJhdGlvbkxpa2VPYmplY3QgcmVwcmVzZW50aW5nIHRoZSBhbW91bnQgb2YgdGltZSB0byBzdWJ0cmFjdCBmcm9tIHRoZSBjdXJyZW50IGRhdGUuXG4gICAqIEByZXR1cm5zIEEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgc3VidHJhY3RlZCBkYXRlIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGJ5IHRoZSBjdXJyZW50IGxvY2FsZS5cbiAgICovXG4gIHB1YmxpYyBnZXRQcmV2aW91c0RhdGUoZHVyYXRpb246IER1cmF0aW9uTGlrZU9iamVjdCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIERhdGVUaW1lLm5vdygpLm1pbnVzKGR1cmF0aW9uKS5zZXRMb2NhbGUoJ2VuLWdiJykudG9Mb2NhbGVTdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBzdHJpbmcgdmFsdWUgaW50byBhIERhdGVUaW1lIG9iamVjdCBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGZvcm1hdC5cbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIHN0cmluZyB2YWx1ZSB0byBwYXJzZS5cbiAgICogQHBhcmFtIGZvcm1hdCAtIFRoZSBmb3JtYXQgb2YgdGhlIHN0cmluZyB2YWx1ZS5cbiAgICogQHJldHVybnMgQSBEYXRlVGltZSBvYmplY3QgcmVwcmVzZW50aW5nIHRoZSBwYXJzZWQgdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0RnJvbUZvcm1hdCh2YWx1ZTogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyk6IERhdGVUaW1lPHRydWU+IHwgRGF0ZVRpbWU8ZmFsc2U+IHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUZvcm1hdCh2YWx1ZSwgZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgYSBzdHJpbmcgdmFsdWUgaW50byBhIG5hdGl2ZSBKYXZhU2NyaXB0IERhdGUgb2JqZWN0IGJhc2VkIG9uIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHZhbHVlIHRvIHBhcnNlLlxuICAgKiBAcGFyYW0gZm9ybWF0IC0gVGhlIGZvcm1hdCBvZiB0aGUgc3RyaW5nIHZhbHVlLlxuICAgKiBAcmV0dXJucyBBIERhdGUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgcGFyc2VkIHZhbHVlLCBvciBudWxsIGlmIHBhcnNpbmcgZmFpbHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0RGF0ZUZyb21Gb3JtYXQodmFsdWU6IHN0cmluZywgZm9ybWF0OiBzdHJpbmcpOiBEYXRlIHwgbnVsbCB7XG4gICAgY29uc3QgZGF0ZVRpbWUgPSBEYXRlVGltZS5mcm9tRm9ybWF0KHZhbHVlLCBmb3JtYXQpO1xuICAgIHJldHVybiBkYXRlVGltZS5pc1ZhbGlkID8gZGF0ZVRpbWUudG9KU0RhdGUoKSA6IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogQ29udmVydHMgYSBEYXRlVGltZSB2YWx1ZSB0byBhIGZvcm1hdHRlZCBzdHJpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBEYXRlVGltZSB2YWx1ZSB0byBmb3JtYXQuXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBUaGUgZm9ybWF0IHN0cmluZyB0byBhcHBseSB0byB0aGUgRGF0ZVRpbWUgdmFsdWUuXG4gICAqIEByZXR1cm5zIFRoZSBmb3JtYXR0ZWQgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBEYXRlVGltZSB2YWx1ZS5cbiAgICovXG4gIHB1YmxpYyB0b0Zvcm1hdCh2YWx1ZTogRGF0ZVRpbWU8dHJ1ZT4gfCBEYXRlVGltZTxmYWxzZT4sIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdmFsdWUudG9Gb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIGdpdmVuIERhdGUgb2JqZWN0IHRvIGEgZm9ybWF0dGVkIHN0cmluZyBiYXNlZCBvbiB0aGUgc3BlY2lmaWVkIGZvcm1hdC5cbiAgICpcbiAgICogQHBhcmFtIHZhbHVlIC0gVGhlIERhdGUgb2JqZWN0IHRvIGJlIGZvcm1hdHRlZC5cbiAgICogQHBhcmFtIGZvcm1hdCAtIFRoZSBzdHJpbmcgZm9ybWF0IHRvIGFwcGx5IHRvIHRoZSBEYXRlIG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIGZvcm1hdHRlZCBkYXRlIHN0cmluZy5cbiAgICovXG4gIHB1YmxpYyB0b0RhdGVTdHJpbmdGb3JtYXQodmFsdWU6IERhdGUsIGZvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUpTRGF0ZSh2YWx1ZSkudG9Gb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBhIHN0cmluZyBpbiBJU08gZm9ybWF0IHRvIGEgRGF0ZVRpbWUgb2JqZWN0LlxuICAgKiBAcGFyYW0gdmFsdWUgLSBUaGUgc3RyaW5nIHZhbHVlIGluIElTTyBmb3JtYXQuXG4gICAqIEByZXR1cm5zIEEgRGF0ZVRpbWUgb2JqZWN0IHJlcHJlc2VudGluZyB0aGUgZ2l2ZW4gdmFsdWUuXG4gICAqL1xuICBwdWJsaWMgZ2V0RnJvbUlzbyh2YWx1ZTogc3RyaW5nKTogRGF0ZVRpbWUge1xuICAgIHJldHVybiBEYXRlVGltZS5mcm9tSVNPKHZhbHVlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUuXG4gICAqIEByZXR1cm5zIHtEYXRlVGltZX0gVGhlIGN1cnJlbnQgZGF0ZSBhbmQgdGltZS5cbiAgICovXG4gIHB1YmxpYyBnZXREYXRlTm93KCk6IERhdGVUaW1lIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUubm93KCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGR1cmF0aW9uIHRvIGEgZ2l2ZW4gZGF0ZSBhbmQgcmV0dXJucyB0aGUgcmVzdWx0IGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBAcGFyYW0gZGF0ZSAtIFRoZSBkYXRlIHRvIHdoaWNoIHRoZSBkdXJhdGlvbiB3aWxsIGJlIGFkZGVkLlxuICAgKiBAcGFyYW0geWVhcnMgLSBUaGUgbnVtYmVyIG9mIHllYXJzIHRvIGFkZCB0byB0aGUgZGF0ZSAoZGVmYXVsdDogMCkuXG4gICAqIEBwYXJhbSBtb250aHMgLSBUaGUgbnVtYmVyIG9mIG1vbnRocyB0byBhZGQgdG8gdGhlIGRhdGUgKGRlZmF1bHQ6IDApLlxuICAgKiBAcGFyYW0gd2Vla3MgLSBUaGUgbnVtYmVyIG9mIHdlZWtzIHRvIGFkZCB0byB0aGUgZGF0ZSAoZGVmYXVsdDogMCkuXG4gICAqIEBwYXJhbSBkYXlzIC0gVGhlIG51bWJlciBvZiBkYXlzIHRvIGFkZCB0byB0aGUgZGF0ZSAoZGVmYXVsdDogMCkuXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBUaGUgZm9ybWF0IGluIHdoaWNoIHRoZSByZXN1bHRpbmcgZGF0ZSB3aWxsIGJlIHJldHVybmVkIChkZWZhdWx0OiAnZGQvTU0veXl5eScpLlxuICAgKiBAcmV0dXJucyBUaGUgcmVzdWx0aW5nIGRhdGUgaW4gdGhlIHNwZWNpZmllZCBmb3JtYXQuXG4gICAqL1xuICBwdWJsaWMgYWRkRHVyYXRpb25Ub0RhdGUoXG4gICAgZGF0ZTogc3RyaW5nLFxuICAgIHllYXJzOiBudW1iZXIgPSAwLFxuICAgIG1vbnRoczogbnVtYmVyID0gMCxcbiAgICB3ZWVrczogbnVtYmVyID0gMCxcbiAgICBkYXlzOiBudW1iZXIgPSAwLFxuICAgIGZvcm1hdDogc3RyaW5nID0gJ2RkL01NL3l5eXknLFxuICApOiBzdHJpbmcge1xuICAgIGNvbnN0IGRhdGVPYmogPSB0aGlzLmdldEZyb21Gb3JtYXQoZGF0ZSwgZm9ybWF0KTtcbiAgICBjb25zdCBuZXdEYXRlID0gZGF0ZU9iai5wbHVzKHsgeWVhcnMsIG1vbnRocywgd2Vla3MsIGRheXMgfSk7XG4gICAgcmV0dXJuIG5ld0RhdGUudG9Gb3JtYXQoZm9ybWF0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxjdWxhdGVzIHRoZSBudW1iZXIgb2YgZGF5cyBiZXR3ZWVuIHR3byBkYXRlcy5cbiAgICogQHBhcmFtIHN0YXJ0RGF0ZSAtIFRoZSBzdGFydCBkYXRlIGluIHRoZSBzcGVjaWZpZWQgZm9ybWF0LlxuICAgKiBAcGFyYW0gZW5kRGF0ZSAtIFRoZSBlbmQgZGF0ZSBpbiB0aGUgc3BlY2lmaWVkIGZvcm1hdC5cbiAgICogQHBhcmFtIGZvcm1hdCAtIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGVzIChkZWZhdWx0OiAnZGQvTU0veXl5eScpLlxuICAgKiBAcmV0dXJucyBUaGUgbnVtYmVyIG9mIGRheXMgYmV0d2VlbiB0aGUgc3RhcnQgYW5kIGVuZCBkYXRlcy5cbiAgICovXG4gIHB1YmxpYyBjYWxjdWxhdGVEYXlzQmV0d2VlbkRhdGVzKHN0YXJ0RGF0ZTogc3RyaW5nLCBlbmREYXRlOiBzdHJpbmcsIGZvcm1hdDogc3RyaW5nID0gJ2RkL01NL3l5eXknKTogbnVtYmVyIHtcbiAgICBjb25zdCBzdGFydCA9IHRoaXMuZ2V0RnJvbUZvcm1hdChzdGFydERhdGUsIGZvcm1hdCk7XG4gICAgY29uc3QgZW5kID0gdGhpcy5nZXRGcm9tRm9ybWF0KGVuZERhdGUsIGZvcm1hdCk7XG4gICAgY29uc3QgZGlmZiA9IGVuZC5kaWZmKHN0YXJ0LCAnZGF5cycpO1xuICAgIHJldHVybiBkaWZmLmRheXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIGEgZ2l2ZW4gZGF0ZSBpcyBpbiB0aGUgcGFzdC5cbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVjay5cbiAgICogQHBhcmFtIGZvcm1hdCAtIFRoZSBmb3JtYXQgb2YgdGhlIGRhdGUgc3RyaW5nLiBEZWZhdWx0cyB0byAnZGQvTU0veXl5eScuXG4gICAqIEByZXR1cm5zIFRydWUgaWYgdGhlIGRhdGUgaXMgaW4gdGhlIHBhc3QsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc0RhdGVJblRoZVBhc3QoZGF0ZTogc3RyaW5nLCBmb3JtYXQ6IHN0cmluZyA9ICdkZC9NTS95eXl5Jyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmdldEZyb21Gb3JtYXQoZGF0ZSwgZm9ybWF0KSA8IERhdGVUaW1lLm5vdygpO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBhIGdpdmVuIGRhdGUgaXMgaW4gdGhlIGZ1dHVyZS5cbiAgICogQHBhcmFtIGRhdGUgLSBUaGUgZGF0ZSB0byBjaGVjay5cbiAgICogQHBhcmFtIHllYXJzSW5UaGVGdXR1cmUgLSBPcHRpb25hbC4gVGhlIG51bWJlciBvZiB5ZWFycyBpbiB0aGUgZnV0dXJlIHRvIGNvbXBhcmUgYWdhaW5zdC4gSWYgbm90IHByb3ZpZGVkLCB0aGUgY3VycmVudCBkYXRlIGlzIHVzZWQuXG4gICAqIEBwYXJhbSBmb3JtYXQgLSBPcHRpb25hbC4gVGhlIGZvcm1hdCBvZiB0aGUgaW5wdXQgZGF0ZS4gRGVmYXVsdHMgdG8gJ2RkL01NL3l5eXknLlxuICAgKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBkYXRlIGlzIGluIHRoZSBmdXR1cmUsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIHB1YmxpYyBpc0RhdGVJblRoZUZ1dHVyZShkYXRlOiBzdHJpbmcsIHllYXJzSW5UaGVGdXR1cmU/OiBudW1iZXIsIGZvcm1hdDogc3RyaW5nID0gJ2RkL01NL3l5eXknKTogYm9vbGVhbiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZVRpbWUubm93KCk7XG4gICAgY29uc3QgZGF0ZVZhbHVlID0gdGhpcy5nZXRGcm9tRm9ybWF0KGRhdGUsIGZvcm1hdCk7XG5cbiAgICBpZiAoeWVhcnNJblRoZUZ1dHVyZSkge1xuICAgICAgY29uc3QgZnV0dXJlRGF0ZSA9IG5vdy5wbHVzKHsgeWVhcnM6IHllYXJzSW5UaGVGdXR1cmUgfSk7XG4gICAgICByZXR1cm4gZGF0ZVZhbHVlID4gZnV0dXJlRGF0ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGF0ZVZhbHVlID4gbm93O1xuICB9XG5cbiAgLyoqXG4gICAqIENvbnZlcnRzIGEgZGF0ZSBzdHJpbmcgZnJvbSBvbmUgZm9ybWF0IHRvIGFub3RoZXIuXG4gICAqXG4gICAqIEBwYXJhbSBkYXRlIC0gVGhlIGRhdGUgc3RyaW5nIHRvIGJlIGNvbnZlcnRlZC5cbiAgICogQHBhcmFtIGZyb21Gb3JtYXQgLSBUaGUgZm9ybWF0IG9mIHRoZSBpbnB1dCBkYXRlIHN0cmluZy5cbiAgICogQHBhcmFtIHRvRm9ybWF0IC0gVGhlIGRlc2lyZWQgZm9ybWF0IG9mIHRoZSBvdXRwdXQgZGF0ZSBzdHJpbmcuXG4gICAqIEByZXR1cm5zIFRoZSBkYXRlIHN0cmluZyBpbiB0aGUgZGVzaXJlZCBmb3JtYXQuXG4gICAqL1xuICBwdWJsaWMgZ2V0RnJvbUZvcm1hdFRvRm9ybWF0KGRhdGU6IHN0cmluZywgZnJvbUZvcm1hdDogc3RyaW5nLCB0b0Zvcm1hdDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZXRGcm9tRm9ybWF0KGRhdGUsIGZyb21Gb3JtYXQpLnRvRm9ybWF0KHRvRm9ybWF0KTtcbiAgfVxufVxuIl19
@@ -0,0 +1,4 @@
1
+ // SERVICE
2
+ export * from './date.service';
3
+ // CONSTANTS, INTERFACES, AND MOCKS
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL2RhdGUtc2VydmljZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsY0FBYyxnQkFBZ0IsQ0FBQztBQUUvQixtQ0FBbUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTRVJWSUNFXG5leHBvcnQgKiBmcm9tICcuL2RhdGUuc2VydmljZSc7XG5cbi8vIENPTlNUQU5UUywgSU5URVJGQUNFUywgQU5EIE1PQ0tTXG4iXX0=
@@ -0,0 +1,12 @@
1
+ export * from './app-initializer-service';
2
+ export * from './app-insights';
3
+ export * from './auth-service';
4
+ export * from './date-service';
5
+ export * from './launch-darkly';
6
+ export * from './permissions-service';
7
+ export * from './session-service';
8
+ export * from './sort-service';
9
+ export * from './transfer-state-service';
10
+ export * from './transformation-service';
11
+ export * from './utils';
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMkJBQTJCLENBQUM7QUFDMUMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFDL0IsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLDBCQUEwQixDQUFDO0FBQ3pDLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2FwcC1pbml0aWFsaXplci1zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vYXBwLWluc2lnaHRzJztcbmV4cG9ydCAqIGZyb20gJy4vYXV0aC1zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZS1zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vbGF1bmNoLWRhcmtseSc7XG5leHBvcnQgKiBmcm9tICcuL3Blcm1pc3Npb25zLXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXNzaW9uLXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zb3J0LXNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi90cmFuc2Zlci1zdGF0ZS1zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vdHJhbnNmb3JtYXRpb24tc2VydmljZSc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ // SERVICE
2
+ export * from './launch-darkly.service';
3
+ // CONSTANTS, INTERFACES, AND MOCKS
4
+ export * from './mocks';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL2xhdW5jaC1kYXJrbHkvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLGNBQWMseUJBQXlCLENBQUM7QUFFeEMsbUNBQW1DO0FBQ25DLGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU0VSVklDRVxuZXhwb3J0ICogZnJvbSAnLi9sYXVuY2gtZGFya2x5LnNlcnZpY2UnO1xuXG4vLyBDT05TVEFOVFMsIElOVEVSRkFDRVMsIEFORCBNT0NLU1xuZXhwb3J0ICogZnJvbSAnLi9tb2Nrcyc7XG4iXX0=
@@ -0,0 +1,94 @@
1
+ import { inject, Injectable } from '@angular/core';
2
+ import { initialize } from 'launchdarkly-js-client-sdk';
3
+ import { GlobalStore } from '../../stores';
4
+ import * as i0 from "@angular/core";
5
+ export class LaunchDarklyService {
6
+ globalStore = inject(GlobalStore);
7
+ ldClient;
8
+ /**
9
+ * Sets the LaunchDarkly flags by updating the featureFlags in the state service.
10
+ */
11
+ setLaunchDarklyFlags() {
12
+ if (this.ldClient) {
13
+ this.globalStore.setFeatureFlags(this.ldClient.allFlags());
14
+ }
15
+ }
16
+ /**
17
+ * Formats the LDFlagChangeset into an LDFlagSet.
18
+ *
19
+ * @param flags - The LDFlagChangeset to be formatted.
20
+ * @returns The formatted LDFlagSet.
21
+ */
22
+ formatChangeFlags(flags) {
23
+ return Object.keys(flags).reduce((flag, key) => {
24
+ flag[key] = flags[key].current;
25
+ return flag;
26
+ }, {});
27
+ }
28
+ /**
29
+ * Closes the LaunchDarkly client if it is open.
30
+ */
31
+ closeLaunchDarklyClient() {
32
+ if (this.ldClient) {
33
+ this.ldClient.close();
34
+ }
35
+ }
36
+ /**
37
+ * Initializes the LaunchDarkly change listener.
38
+ * This method listens for changes in feature flags and updates the state accordingly.
39
+ */
40
+ initializeLaunchDarklyChangeListener() {
41
+ if (this.ldClient && this.globalStore.launchDarklyConfig().stream) {
42
+ this.ldClient.on('change', (flags) => {
43
+ const updatedFlags = {
44
+ ...this.globalStore.featureFlags(),
45
+ ...this.formatChangeFlags(flags),
46
+ };
47
+ this.globalStore.setFeatureFlags(updatedFlags);
48
+ });
49
+ }
50
+ }
51
+ /**
52
+ * Initializes the LaunchDarkly flags and sets them.
53
+ * If the LD client is already initialized, it waits for initialization and then sets the flags.
54
+ * If the LD client is not initialized, it returns a resolved promise.
55
+ * @returns A promise that resolves when the flags are set.
56
+ */
57
+ async initializeLaunchDarklyFlags() {
58
+ if (this.ldClient) {
59
+ return this.ldClient
60
+ .waitForInitialization()
61
+ .then(() => this.setLaunchDarklyFlags())
62
+ .catch((err) => {
63
+ throw err;
64
+ });
65
+ }
66
+ return Promise.resolve();
67
+ }
68
+ /**
69
+ * Initializes the LaunchDarkly client.
70
+ * If a stored LaunchDarkly client ID exists, it initializes the client with the ID and anonymous mode enabled.
71
+ */
72
+ initializeLaunchDarklyClient() {
73
+ if (this.globalStore.launchDarklyConfig()) {
74
+ const { enabled, clientId } = this.globalStore.launchDarklyConfig();
75
+ if (enabled && clientId) {
76
+ this.ldClient = initialize(clientId, {
77
+ anonymous: true,
78
+ });
79
+ }
80
+ }
81
+ }
82
+ ngOnDestroy() {
83
+ this.closeLaunchDarklyClient();
84
+ }
85
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LaunchDarklyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
86
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LaunchDarklyService, providedIn: 'root' });
87
+ }
88
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: LaunchDarklyService, decorators: [{
89
+ type: Injectable,
90
+ args: [{
91
+ providedIn: 'root',
92
+ }]
93
+ }] });
94
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLWRhcmtseS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3BhbC1mcm9udGVuZC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9sYXVuY2gtZGFya2x5L2xhdW5jaC1kYXJrbHkuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBYSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsVUFBVSxFQUF3QyxNQUFNLDRCQUE0QixDQUFDO0FBQzlGLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxjQUFjLENBQUM7O0FBSzNDLE1BQU0sT0FBTyxtQkFBbUI7SUFDYixXQUFXLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQzNDLFFBQVEsQ0FBWTtJQUU1Qjs7T0FFRztJQUNLLG9CQUFvQjtRQUMxQixJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFDN0QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLGlCQUFpQixDQUFDLEtBQXNCO1FBQzlDLE9BQU8sTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFlLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDeEQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUM7WUFDL0IsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDVCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx1QkFBdUI7UUFDN0IsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUN4QixDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNJLG9DQUFvQztRQUN6QyxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2xFLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQXNCLEVBQUUsRUFBRTtnQkFDcEQsTUFBTSxZQUFZLEdBQUc7b0JBQ25CLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUU7b0JBQ2xDLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQztpQkFDakMsQ0FBQztnQkFDRixJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxLQUFLLENBQUMsMkJBQTJCO1FBQ3RDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sSUFBSSxDQUFDLFFBQVE7aUJBQ2pCLHFCQUFxQixFQUFFO2lCQUN2QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG9CQUFvQixFQUFFLENBQUM7aUJBQ3ZDLEtBQUssQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNiLE1BQU0sR0FBRyxDQUFDO1lBQ1osQ0FBQyxDQUFDLENBQUM7UUFDUCxDQUFDO1FBRUQsT0FBTyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUVEOzs7T0FHRztJQUNJLDRCQUE0QjtRQUNqQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxDQUFDO1lBQzFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBRXBFLElBQUksT0FBTyxJQUFJLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsUUFBUSxHQUFHLFVBQVUsQ0FBQyxRQUFRLEVBQUU7b0JBQ25DLFNBQVMsRUFBRSxJQUFJO2lCQUNoQixDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQzt3R0F4RlUsbUJBQW1COzRHQUFuQixtQkFBbUIsY0FGbEIsTUFBTTs7NEZBRVAsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBpbml0aWFsaXplLCBMRENsaWVudCwgTERGbGFnQ2hhbmdlc2V0LCBMREZsYWdTZXQgfSBmcm9tICdsYXVuY2hkYXJrbHktanMtY2xpZW50LXNkayc7XG5pbXBvcnQgeyBHbG9iYWxTdG9yZSB9IGZyb20gJy4uLy4uL3N0b3Jlcyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBMYXVuY2hEYXJrbHlTZXJ2aWNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgcHJpdmF0ZSByZWFkb25seSBnbG9iYWxTdG9yZSA9IGluamVjdChHbG9iYWxTdG9yZSk7XG4gIHByaXZhdGUgbGRDbGllbnQhOiBMRENsaWVudDtcblxuICAvKipcbiAgICogU2V0cyB0aGUgTGF1bmNoRGFya2x5IGZsYWdzIGJ5IHVwZGF0aW5nIHRoZSBmZWF0dXJlRmxhZ3MgaW4gdGhlIHN0YXRlIHNlcnZpY2UuXG4gICAqL1xuICBwcml2YXRlIHNldExhdW5jaERhcmtseUZsYWdzKCkge1xuICAgIGlmICh0aGlzLmxkQ2xpZW50KSB7XG4gICAgICB0aGlzLmdsb2JhbFN0b3JlLnNldEZlYXR1cmVGbGFncyh0aGlzLmxkQ2xpZW50LmFsbEZsYWdzKCkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXRzIHRoZSBMREZsYWdDaGFuZ2VzZXQgaW50byBhbiBMREZsYWdTZXQuXG4gICAqXG4gICAqIEBwYXJhbSBmbGFncyAtIFRoZSBMREZsYWdDaGFuZ2VzZXQgdG8gYmUgZm9ybWF0dGVkLlxuICAgKiBAcmV0dXJucyBUaGUgZm9ybWF0dGVkIExERmxhZ1NldC5cbiAgICovXG4gIHByaXZhdGUgZm9ybWF0Q2hhbmdlRmxhZ3MoZmxhZ3M6IExERmxhZ0NoYW5nZXNldCk6IExERmxhZ1NldCB7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGZsYWdzKS5yZWR1Y2UoKGZsYWc6IExERmxhZ1NldCwga2V5KSA9PiB7XG4gICAgICBmbGFnW2tleV0gPSBmbGFnc1trZXldLmN1cnJlbnQ7XG4gICAgICByZXR1cm4gZmxhZztcbiAgICB9LCB7fSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBMYXVuY2hEYXJrbHkgY2xpZW50IGlmIGl0IGlzIG9wZW4uXG4gICAqL1xuICBwcml2YXRlIGNsb3NlTGF1bmNoRGFya2x5Q2xpZW50KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmxkQ2xpZW50KSB7XG4gICAgICB0aGlzLmxkQ2xpZW50LmNsb3NlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEluaXRpYWxpemVzIHRoZSBMYXVuY2hEYXJrbHkgY2hhbmdlIGxpc3RlbmVyLlxuICAgKiBUaGlzIG1ldGhvZCBsaXN0ZW5zIGZvciBjaGFuZ2VzIGluIGZlYXR1cmUgZmxhZ3MgYW5kIHVwZGF0ZXMgdGhlIHN0YXRlIGFjY29yZGluZ2x5LlxuICAgKi9cbiAgcHVibGljIGluaXRpYWxpemVMYXVuY2hEYXJrbHlDaGFuZ2VMaXN0ZW5lcigpIHtcbiAgICBpZiAodGhpcy5sZENsaWVudCAmJiB0aGlzLmdsb2JhbFN0b3JlLmxhdW5jaERhcmtseUNvbmZpZygpLnN0cmVhbSkge1xuICAgICAgdGhpcy5sZENsaWVudC5vbignY2hhbmdlJywgKGZsYWdzOiBMREZsYWdDaGFuZ2VzZXQpID0+IHtcbiAgICAgICAgY29uc3QgdXBkYXRlZEZsYWdzID0ge1xuICAgICAgICAgIC4uLnRoaXMuZ2xvYmFsU3RvcmUuZmVhdHVyZUZsYWdzKCksXG4gICAgICAgICAgLi4udGhpcy5mb3JtYXRDaGFuZ2VGbGFncyhmbGFncyksXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMuZ2xvYmFsU3RvcmUuc2V0RmVhdHVyZUZsYWdzKHVwZGF0ZWRGbGFncyk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZXMgdGhlIExhdW5jaERhcmtseSBmbGFncyBhbmQgc2V0cyB0aGVtLlxuICAgKiBJZiB0aGUgTEQgY2xpZW50IGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQsIGl0IHdhaXRzIGZvciBpbml0aWFsaXphdGlvbiBhbmQgdGhlbiBzZXRzIHRoZSBmbGFncy5cbiAgICogSWYgdGhlIExEIGNsaWVudCBpcyBub3QgaW5pdGlhbGl6ZWQsIGl0IHJldHVybnMgYSByZXNvbHZlZCBwcm9taXNlLlxuICAgKiBAcmV0dXJucyBBIHByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBmbGFncyBhcmUgc2V0LlxuICAgKi9cbiAgcHVibGljIGFzeW5jIGluaXRpYWxpemVMYXVuY2hEYXJrbHlGbGFncygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBpZiAodGhpcy5sZENsaWVudCkge1xuICAgICAgcmV0dXJuIHRoaXMubGRDbGllbnRcbiAgICAgICAgLndhaXRGb3JJbml0aWFsaXphdGlvbigpXG4gICAgICAgIC50aGVuKCgpID0+IHRoaXMuc2V0TGF1bmNoRGFya2x5RmxhZ3MoKSlcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplcyB0aGUgTGF1bmNoRGFya2x5IGNsaWVudC5cbiAgICogSWYgYSBzdG9yZWQgTGF1bmNoRGFya2x5IGNsaWVudCBJRCBleGlzdHMsIGl0IGluaXRpYWxpemVzIHRoZSBjbGllbnQgd2l0aCB0aGUgSUQgYW5kIGFub255bW91cyBtb2RlIGVuYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgaW5pdGlhbGl6ZUxhdW5jaERhcmtseUNsaWVudCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5nbG9iYWxTdG9yZS5sYXVuY2hEYXJrbHlDb25maWcoKSkge1xuICAgICAgY29uc3QgeyBlbmFibGVkLCBjbGllbnRJZCB9ID0gdGhpcy5nbG9iYWxTdG9yZS5sYXVuY2hEYXJrbHlDb25maWcoKTtcblxuICAgICAgaWYgKGVuYWJsZWQgJiYgY2xpZW50SWQpIHtcbiAgICAgICAgdGhpcy5sZENsaWVudCA9IGluaXRpYWxpemUoY2xpZW50SWQsIHtcbiAgICAgICAgICBhbm9ueW1vdXM6IHRydWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuY2xvc2VMYXVuY2hEYXJrbHlDbGllbnQoKTtcbiAgfVxufVxuIl19
@@ -0,0 +1,3 @@
1
+ export * from './launch-darkly-change-flags.mock';
2
+ export * from './launch-darkly-flags.mock';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL2xhdW5jaC1kYXJrbHkvbW9ja3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxtQ0FBbUMsQ0FBQztBQUNsRCxjQUFjLDRCQUE0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9sYXVuY2gtZGFya2x5LWNoYW5nZS1mbGFncy5tb2NrJztcbmV4cG9ydCAqIGZyb20gJy4vbGF1bmNoLWRhcmtseS1mbGFncy5tb2NrJztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ export const LAUNCH_DARKLY_CHANGE_FLAGS_MOCK = {
2
+ flag1: { current: true, previous: false },
3
+ flag2: { current: false, previous: true },
4
+ };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLWRhcmtseS1jaGFuZ2UtZmxhZ3MubW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29wYWwtZnJvbnRlbmQtY29tbW9uL3NyYy9saWIvc2VydmljZXMvbGF1bmNoLWRhcmtseS9tb2Nrcy9sYXVuY2gtZGFya2x5LWNoYW5nZS1mbGFncy5tb2NrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sQ0FBQyxNQUFNLCtCQUErQixHQUFHO0lBQzdDLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRTtJQUN6QyxLQUFLLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUU7Q0FDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBMQVVOQ0hfREFSS0xZX0NIQU5HRV9GTEFHU19NT0NLID0ge1xuICBmbGFnMTogeyBjdXJyZW50OiB0cnVlLCBwcmV2aW91czogZmFsc2UgfSxcbiAgZmxhZzI6IHsgY3VycmVudDogZmFsc2UsIHByZXZpb3VzOiB0cnVlIH0sXG59O1xuIl19
@@ -0,0 +1,5 @@
1
+ export const LAUNCH_DARKLY_FLAGS_MOCK = {
2
+ flag1: true,
3
+ flag2: false,
4
+ };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF1bmNoLWRhcmtseS1mbGFncy5tb2NrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3BhbC1mcm9udGVuZC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9sYXVuY2gtZGFya2x5L21vY2tzL2xhdW5jaC1kYXJrbHktZmxhZ3MubW9jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQUMsTUFBTSx3QkFBd0IsR0FBRztJQUN0QyxLQUFLLEVBQUUsSUFBSTtJQUNYLEtBQUssRUFBRSxLQUFLO0NBQ2IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBMQVVOQ0hfREFSS0xZX0ZMQUdTX01PQ0sgPSB7XG4gIGZsYWcxOiB0cnVlLFxuICBmbGFnMjogZmFsc2UsXG59O1xuIl19
@@ -0,0 +1,4 @@
1
+ // SERVICE
2
+ export * from './permissions.service';
3
+ // CONSTANTS, INTERFACES, AND MOCKS
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Blcm1pc3Npb25zLXNlcnZpY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsVUFBVTtBQUNWLGNBQWMsdUJBQXVCLENBQUM7QUFFdEMsbUNBQW1DIiwic291cmNlc0NvbnRlbnQiOlsiLy8gU0VSVklDRVxuZXhwb3J0ICogZnJvbSAnLi9wZXJtaXNzaW9ucy5zZXJ2aWNlJztcblxuLy8gQ09OU1RBTlRTLCBJTlRFUkZBQ0VTLCBBTkQgTU9DS1NcbiJdfQ==
@@ -0,0 +1,40 @@
1
+ import { Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class PermissionsService {
4
+ storedUniquePermissionIds = [];
5
+ /**
6
+ * Retrieves the unique permission IDs associated with the user.
7
+ * If the unique permission IDs have not been stored yet, it calculates them based on the user's roles and permissions.
8
+ * @returns An array of unique permission IDs.
9
+ */
10
+ getUniquePermissions(userState) {
11
+ const roles = userState ? userState['business_unit_user'] : null;
12
+ if (!this.storedUniquePermissionIds.length && roles) {
13
+ const permissionIds = roles.flatMap((role) => {
14
+ return role.permissions.map(({ permission_id: permissionId }) => permissionId);
15
+ });
16
+ this.storedUniquePermissionIds = [...new Set(permissionIds)];
17
+ }
18
+ return this.storedUniquePermissionIds;
19
+ }
20
+ hasPermissionAccess(permissionId, businessUnitId, roles) {
21
+ if (roles?.length) {
22
+ // First we need to find the matching role
23
+ const role = roles?.find((role) => role.business_unit_id === businessUnitId);
24
+ // Then we need to find the matching permission
25
+ const hasPermission = !!role?.permissions.find((permission) => permission.permission_id === permissionId);
26
+ return hasPermission;
27
+ }
28
+ // if we don't have any roles, we can't have any permissions
29
+ return true;
30
+ }
31
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
32
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionsService, providedIn: 'root' });
33
+ }
34
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PermissionsService, decorators: [{
35
+ type: Injectable,
36
+ args: [{
37
+ providedIn: 'root',
38
+ }]
39
+ }] });
40
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVybWlzc2lvbnMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29wYWwtZnJvbnRlbmQtY29tbW9uL3NyYy9saWIvc2VydmljZXMvcGVybWlzc2lvbnMtc2VydmljZS9wZXJtaXNzaW9ucy5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBTTNDLE1BQU0sT0FBTyxrQkFBa0I7SUFDckIseUJBQXlCLEdBQWEsRUFBRSxDQUFDO0lBRWpEOzs7O09BSUc7SUFDSSxvQkFBb0IsQ0FBQyxTQUFtQztRQUM3RCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFFakUsSUFBSSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLElBQUksS0FBSyxFQUFFLENBQUM7WUFDcEQsTUFBTSxhQUFhLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMzQyxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxhQUFhLEVBQUUsWUFBWSxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksQ0FBQyxDQUFDO1lBQ2pGLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLHlCQUF5QixHQUFHLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBQy9ELENBQUM7UUFFRCxPQUFPLElBQUksQ0FBQyx5QkFBeUIsQ0FBQztJQUN4QyxDQUFDO0lBRU0sbUJBQW1CLENBQUMsWUFBb0IsRUFBRSxjQUFzQixFQUFFLEtBQThCO1FBQ3JHLElBQUksS0FBSyxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ2xCLDBDQUEwQztZQUMxQyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEtBQUssY0FBYyxDQUFDLENBQUM7WUFFN0UsK0NBQStDO1lBQy9DLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLElBQUksQ0FDNUMsQ0FBQyxVQUF1QyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxLQUFLLFlBQVksQ0FDdkYsQ0FBQztZQUVGLE9BQU8sYUFBYSxDQUFDO1FBQ3ZCLENBQUM7UUFDRCw0REFBNEQ7UUFDNUQsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO3dHQXBDVSxrQkFBa0I7NEdBQWxCLGtCQUFrQixjQUZqQixNQUFNOzs0RkFFUCxrQkFBa0I7a0JBSDlCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVNlc3Npb25Vc2VyU3RhdGUsIElTZXNzaW9uVXNlclN0YXRlUGVybWlzc2lvbiwgSVNlc3Npb25Vc2VyU3RhdGVSb2xlIH0gZnJvbSAnLi4vc2Vzc2lvbi1zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIFBlcm1pc3Npb25zU2VydmljZSB7XG4gIHByaXZhdGUgc3RvcmVkVW5pcXVlUGVybWlzc2lvbklkczogbnVtYmVyW10gPSBbXTtcblxuICAvKipcbiAgICogUmV0cmlldmVzIHRoZSB1bmlxdWUgcGVybWlzc2lvbiBJRHMgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2VyLlxuICAgKiBJZiB0aGUgdW5pcXVlIHBlcm1pc3Npb24gSURzIGhhdmUgbm90IGJlZW4gc3RvcmVkIHlldCwgaXQgY2FsY3VsYXRlcyB0aGVtIGJhc2VkIG9uIHRoZSB1c2VyJ3Mgcm9sZXMgYW5kIHBlcm1pc3Npb25zLlxuICAgKiBAcmV0dXJucyBBbiBhcnJheSBvZiB1bmlxdWUgcGVybWlzc2lvbiBJRHMuXG4gICAqL1xuICBwdWJsaWMgZ2V0VW5pcXVlUGVybWlzc2lvbnModXNlclN0YXRlOiBJU2Vzc2lvblVzZXJTdGF0ZSB8IG51bGwpOiBudW1iZXJbXSB7XG4gICAgY29uc3Qgcm9sZXMgPSB1c2VyU3RhdGUgPyB1c2VyU3RhdGVbJ2J1c2luZXNzX3VuaXRfdXNlciddIDogbnVsbDtcblxuICAgIGlmICghdGhpcy5zdG9yZWRVbmlxdWVQZXJtaXNzaW9uSWRzLmxlbmd0aCAmJiByb2xlcykge1xuICAgICAgY29uc3QgcGVybWlzc2lvbklkcyA9IHJvbGVzLmZsYXRNYXAoKHJvbGUpID0+IHtcbiAgICAgICAgcmV0dXJuIHJvbGUucGVybWlzc2lvbnMubWFwKCh7IHBlcm1pc3Npb25faWQ6IHBlcm1pc3Npb25JZCB9KSA9PiBwZXJtaXNzaW9uSWQpO1xuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuc3RvcmVkVW5pcXVlUGVybWlzc2lvbklkcyA9IFsuLi5uZXcgU2V0KHBlcm1pc3Npb25JZHMpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5zdG9yZWRVbmlxdWVQZXJtaXNzaW9uSWRzO1xuICB9XG5cbiAgcHVibGljIGhhc1Blcm1pc3Npb25BY2Nlc3MocGVybWlzc2lvbklkOiBudW1iZXIsIGJ1c2luZXNzVW5pdElkOiBudW1iZXIsIHJvbGVzOiBJU2Vzc2lvblVzZXJTdGF0ZVJvbGVbXSk6IGJvb2xlYW4ge1xuICAgIGlmIChyb2xlcz8ubGVuZ3RoKSB7XG4gICAgICAvLyBGaXJzdCB3ZSBuZWVkIHRvIGZpbmQgdGhlIG1hdGNoaW5nIHJvbGVcbiAgICAgIGNvbnN0IHJvbGUgPSByb2xlcz8uZmluZCgocm9sZSkgPT4gcm9sZS5idXNpbmVzc191bml0X2lkID09PSBidXNpbmVzc1VuaXRJZCk7XG5cbiAgICAgIC8vIFRoZW4gd2UgbmVlZCB0byBmaW5kIHRoZSBtYXRjaGluZyBwZXJtaXNzaW9uXG4gICAgICBjb25zdCBoYXNQZXJtaXNzaW9uID0gISFyb2xlPy5wZXJtaXNzaW9ucy5maW5kKFxuICAgICAgICAocGVybWlzc2lvbjogSVNlc3Npb25Vc2VyU3RhdGVQZXJtaXNzaW9uKSA9PiBwZXJtaXNzaW9uLnBlcm1pc3Npb25faWQgPT09IHBlcm1pc3Npb25JZCxcbiAgICAgICk7XG5cbiAgICAgIHJldHVybiBoYXNQZXJtaXNzaW9uO1xuICAgIH1cbiAgICAvLyBpZiB3ZSBkb24ndCBoYXZlIGFueSByb2xlcywgd2UgY2FuJ3QgaGF2ZSBhbnkgcGVybWlzc2lvbnNcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export * from './session-endpoints.constant';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Nlc3Npb24tc2VydmljZS9jb25zdGFudHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyw4QkFBOEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2Vzc2lvbi1lbmRwb2ludHMuY29uc3RhbnQnO1xuIl19
@@ -0,0 +1,5 @@
1
+ export const SESSION_ENDPOINTS = {
2
+ userState: '/session/user-state',
3
+ expiry: '/session/expiry',
4
+ };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1lbmRwb2ludHMuY29uc3RhbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Nlc3Npb24tc2VydmljZS9jb25zdGFudHMvc2Vzc2lvbi1lbmRwb2ludHMuY29uc3RhbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0saUJBQWlCLEdBQXNCO0lBQ2xELFNBQVMsRUFBRSxxQkFBcUI7SUFDaEMsTUFBTSxFQUFFLGlCQUFpQjtDQUMxQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNlc3Npb25FbmRwb2ludHMgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcblxuZXhwb3J0IGNvbnN0IFNFU1NJT05fRU5EUE9JTlRTOiBJU2Vzc2lvbkVuZHBvaW50cyA9IHtcbiAgdXNlclN0YXRlOiAnL3Nlc3Npb24vdXNlci1zdGF0ZScsXG4gIGV4cGlyeTogJy9zZXNzaW9uL2V4cGlyeScsXG59O1xuIl19
@@ -0,0 +1,7 @@
1
+ // SERVICE
2
+ export * from './session.service';
3
+ // CONSTANTS, INTERFACES, AND MOCKS
4
+ export * from './constants';
5
+ export * from './interfaces';
6
+ export * from './mocks';
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Nlc3Npb24tc2VydmljZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxVQUFVO0FBQ1YsY0FBYyxtQkFBbUIsQ0FBQztBQUVsQyxtQ0FBbUM7QUFDbkMsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBTRVJWSUNFXG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24uc2VydmljZSc7XG5cbi8vIENPTlNUQU5UUywgSU5URVJGQUNFUywgQU5EIE1PQ0tTXG5leHBvcnQgKiBmcm9tICcuL2NvbnN0YW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2ludGVyZmFjZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9tb2Nrcyc7XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './session-endpoints.interface';
2
+ export * from './session-token-expiry.interface';
3
+ export * from './session-user-state.interface';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Nlc3Npb24tc2VydmljZS9pbnRlcmZhY2VzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyxrQ0FBa0MsQ0FBQztBQUNqRCxjQUFjLGdDQUFnQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zZXNzaW9uLWVuZHBvaW50cy5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXNzaW9uLXRva2VuLWV4cGlyeS5pbnRlcmZhY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXNzaW9uLXVzZXItc3RhdGUuaW50ZXJmYWNlJztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1lbmRwb2ludHMuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3BhbC1mcm9udGVuZC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLXNlcnZpY2UvaW50ZXJmYWNlcy9zZXNzaW9uLWVuZHBvaW50cy5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVNlc3Npb25FbmRwb2ludHMge1xuICB1c2VyU3RhdGU6IHN0cmluZztcbiAgZXhwaXJ5OiBzdHJpbmc7XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi10b2tlbi1leHBpcnkuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvb3BhbC1mcm9udGVuZC1jb21tb24vc3JjL2xpYi9zZXJ2aWNlcy9zZXNzaW9uLXNlcnZpY2UvaW50ZXJmYWNlcy9zZXNzaW9uLXRva2VuLWV4cGlyeS5pbnRlcmZhY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgSVNlc3Npb25Ub2tlbkV4cGlyeSB7XG4gIGV4cGlyeTogc3RyaW5nIHwgbnVsbDtcbiAgd2FybmluZ1RocmVzaG9sZEluTWlsbGlzZWNvbmRzOiBudW1iZXIgfCBudWxsO1xufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi11c2VyLXN0YXRlLmludGVyZmFjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29wYWwtZnJvbnRlbmQtY29tbW9uL3NyYy9saWIvc2VydmljZXMvc2Vzc2lvbi1zZXJ2aWNlL2ludGVyZmFjZXMvc2Vzc2lvbi11c2VyLXN0YXRlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJU2Vzc2lvblVzZXJTdGF0ZVBlcm1pc3Npb24ge1xuICBwZXJtaXNzaW9uX2lkOiBudW1iZXI7XG4gIHBlcm1pc3Npb25fbmFtZTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIElTZXNzaW9uVXNlclN0YXRlUm9sZSB7XG4gIGJ1c2luZXNzX3VuaXRfdXNlcl9pZDogc3RyaW5nO1xuICBidXNpbmVzc191bml0X2lkOiBudW1iZXI7XG4gIHBlcm1pc3Npb25zOiBJU2Vzc2lvblVzZXJTdGF0ZVBlcm1pc3Npb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJU2Vzc2lvblVzZXJTdGF0ZSB7XG4gIHVzZXJfaWQ6IHN0cmluZztcbiAgdXNlcl9uYW1lOiBzdHJpbmc7XG4gIG5hbWU6IHN0cmluZztcbiAgYnVzaW5lc3NfdW5pdF91c2VyOiBJU2Vzc2lvblVzZXJTdGF0ZVJvbGVbXTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ export * from './session-token-expiry.mock';
2
+ export * from './session-user-state.mock';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9vcGFsLWZyb250ZW5kLWNvbW1vbi9zcmMvbGliL3NlcnZpY2VzL3Nlc3Npb24tc2VydmljZS9tb2Nrcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMkJBQTJCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3Nlc3Npb24tdG9rZW4tZXhwaXJ5Lm1vY2snO1xuZXhwb3J0ICogZnJvbSAnLi9zZXNzaW9uLXVzZXItc3RhdGUubW9jayc7XG4iXX0=
@@ -0,0 +1,5 @@
1
+ export const SESSION_TOKEN_EXPIRY_MOCK = {
2
+ expiry: 'test',
3
+ warningThresholdInMilliseconds: 5,
4
+ };
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi10b2tlbi1leHBpcnkubW9jay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL29wYWwtZnJvbnRlbmQtY29tbW9uL3NyYy9saWIvc2VydmljZXMvc2Vzc2lvbi1zZXJ2aWNlL21vY2tzL3Nlc3Npb24tdG9rZW4tZXhwaXJ5Lm1vY2sudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQXdCO0lBQzVELE1BQU0sRUFBRSxNQUFNO0lBQ2QsOEJBQThCLEVBQUUsQ0FBQztDQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSVNlc3Npb25Ub2tlbkV4cGlyeSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuXG5leHBvcnQgY29uc3QgU0VTU0lPTl9UT0tFTl9FWFBJUllfTU9DSzogSVNlc3Npb25Ub2tlbkV4cGlyeSA9IHtcbiAgZXhwaXJ5OiAndGVzdCcsXG4gIHdhcm5pbmdUaHJlc2hvbGRJbk1pbGxpc2Vjb25kczogNSxcbn07XG4iXX0=