@sparted/shared-library 1.9.3 → 1.9.5

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 (479) hide show
  1. package/.circleci/config.yml +40 -0
  2. package/.eslintignore +1 -0
  3. package/.eslintrc.json +25 -0
  4. package/.gitignore +37 -0
  5. package/.prettierrc.json +6 -0
  6. package/CHANGELOG.md +457 -0
  7. package/README.md +26 -0
  8. package/{business → dist/business}/types/content.js +4 -4
  9. package/{business → dist/business}/types/content.js.map +1 -1
  10. package/{business → dist/business}/types/multilingual.d.ts +1 -0
  11. package/{business → dist/business}/types/multilingual.js +1 -0
  12. package/dist/business/types/multilingual.js.map +1 -0
  13. package/dist/package.json +25 -0
  14. package/global.d.ts +2 -0
  15. package/package.json +6 -3
  16. package/rollup.config.ts +19 -0
  17. package/sparted-shared-library-v1.7.93.tgz +0 -0
  18. package/src/array/__tests__/array-to-map.test.ts +50 -0
  19. package/src/array/__tests__/get-values-from-keys.test.ts +14 -0
  20. package/src/array/__tests__/inner-join.test.ts +55 -0
  21. package/src/array/__tests__/left-outter-join.test.ts +55 -0
  22. package/src/array/array-to-map.ts +32 -0
  23. package/src/array/get-values-from-keys.ts +3 -0
  24. package/src/array/index.ts +4 -0
  25. package/src/array/inner-join.ts +10 -0
  26. package/src/array/left-outter-join.ts +10 -0
  27. package/src/business/campaign/__tests__/compute-current-session.test.ts +189 -0
  28. package/src/business/campaign/__tests__/compute-intense-calendar.test.ts +134 -0
  29. package/src/business/campaign/__tests__/find-next-available-date.test.ts +82 -0
  30. package/src/business/campaign/__tests__/get-calendar-dession-dates-from-campaign.test.ts +123 -0
  31. package/src/business/campaign/index.ts +1 -0
  32. package/src/business/campaign/live-campaign.ts +133 -0
  33. package/src/business/course/index.ts +1 -0
  34. package/src/business/course/microknowledge-max-lengths.ts +12 -0
  35. package/src/business/index.ts +4 -0
  36. package/src/business/picture-spot/index.ts +3 -0
  37. package/src/business/types/achievement.ts +41 -0
  38. package/src/business/types/activity.ts +64 -0
  39. package/src/business/types/audience.ts +23 -0
  40. package/src/business/types/battle.ts +17 -0
  41. package/src/business/types/breaking-news.ts +43 -0
  42. package/src/business/types/campaign.ts +163 -0
  43. package/src/business/types/content.ts +261 -0
  44. package/src/business/types/document.ts +17 -0
  45. package/src/business/types/index.ts +14 -0
  46. package/src/business/types/media.ts +18 -0
  47. package/src/business/types/multilingual.ts +47 -0
  48. package/src/business/types/player.ts +28 -0
  49. package/src/business/types/score.ts +61 -0
  50. package/src/business/types/thematic.ts +12 -0
  51. package/src/business/types/user-engagement.ts +11 -0
  52. package/src/cdn/__tests__/cdn.factory.test.ts +150 -0
  53. package/src/cdn/__tests__/utils.test.ts +528 -0
  54. package/src/cdn/cdn.factory.ts +70 -0
  55. package/src/cdn/index.ts +2 -0
  56. package/src/cdn/types/cdn-factory.type.ts +49 -0
  57. package/src/cdn/types/index.ts +1 -0
  58. package/src/cdn/utils/extract-info-from-url.util.ts +25 -0
  59. package/src/cdn/utils/get-cdn-from-s3-url.util.ts +20 -0
  60. package/src/cdn/utils/get-cdn-url.util.ts +31 -0
  61. package/src/cdn/utils/twicpics-transformations.util.ts +9 -0
  62. package/src/chrono/get-approximated-session-time.ts +27 -0
  63. package/src/chrono/index.ts +1 -0
  64. package/src/color/__tests__/get-contrast-color.test.ts +22 -0
  65. package/src/color/get-contrast-color.ts +18 -0
  66. package/src/color/index.ts +1 -0
  67. package/src/crypto/__tests__/aes256.test.ts +23 -0
  68. package/src/crypto/aes256.ts +22 -0
  69. package/src/crypto/index.ts +1 -0
  70. package/src/date/__tests__/get-iso-day-number.test.ts +34 -0
  71. package/src/date/__tests__/get-remaining-time.test.ts +78 -0
  72. package/src/date/__tests__/get-start-of-day.test.ts +92 -0
  73. package/src/date/__tests__/is-same-date.test.ts +50 -0
  74. package/src/date/__tests__/shift-date-by.test.ts +76 -0
  75. package/src/date/__tests__/to-utc-date-string.test.ts +28 -0
  76. package/src/date/add-days.ts +5 -0
  77. package/src/date/difference-in-days.ts +6 -0
  78. package/src/date/get-iso-day-number.ts +1 -0
  79. package/src/date/get-next-day.ts +6 -0
  80. package/src/date/get-remaining-time.ts +24 -0
  81. package/src/date/get-start-of-day.ts +11 -0
  82. package/src/date/index.ts +10 -0
  83. package/src/date/is-same-date.ts +7 -0
  84. package/src/date/shift-date-by.ts +17 -0
  85. package/src/date/to-plain-date-string.ts +1 -0
  86. package/src/date/to-utc-date-string.ts +3 -0
  87. package/src/formatting/__tests__/format-number.test.ts +11 -0
  88. package/src/formatting/format-number.ts +14 -0
  89. package/src/formatting/index.ts +1 -0
  90. package/src/fp/__tests__/run-while.test.ts +29 -0
  91. package/src/fp/index.ts +1 -0
  92. package/src/fp/run-while.ts +54 -0
  93. package/src/http/__tests__/build-search-params.test.ts +17 -0
  94. package/src/http/__tests__/encode-search-object.test.ts +34 -0
  95. package/src/http/__tests__/fetch-with-timeout.test.ts +50 -0
  96. package/src/http/build-search-params.ts +16 -0
  97. package/src/http/encode-search-object.ts +42 -0
  98. package/src/http/fetch-with-timeout.ts +27 -0
  99. package/src/http/index.ts +3 -0
  100. package/src/index.ts +19 -0
  101. package/src/linked-list/__tests__/apply-diff-linked-list.test.ts +103 -0
  102. package/src/linked-list/__tests__/create-linked-list.test.ts +204 -0
  103. package/src/linked-list/__tests__/find-linked-list.test.ts +40 -0
  104. package/src/linked-list/__tests__/get-linked-list.test.ts +28 -0
  105. package/src/linked-list/__tests__/insert-linked-list.test.ts +186 -0
  106. package/src/linked-list/__tests__/linked-list-utils.test.ts +252 -0
  107. package/src/linked-list/__tests__/reduce-linked-list.test.ts +31 -0
  108. package/src/linked-list/__tests__/remove-linked-list.test.ts +129 -0
  109. package/src/linked-list/__tests__/update-linked-list.test.ts +53 -0
  110. package/src/linked-list/__tests__/while-linked-list.test.ts +58 -0
  111. package/src/linked-list/apply-diff-linked-list.ts +35 -0
  112. package/src/linked-list/create-linked-list.ts +79 -0
  113. package/src/linked-list/find-linked-list.ts +26 -0
  114. package/src/linked-list/get-linked-list.ts +9 -0
  115. package/src/linked-list/index.ts +2 -0
  116. package/src/linked-list/insert-linked-list.ts +50 -0
  117. package/src/linked-list/linked-list-utils.ts +143 -0
  118. package/src/linked-list/reduce-linked-list.ts +18 -0
  119. package/src/linked-list/remove-linked-list.ts +36 -0
  120. package/src/linked-list/type.ts +38 -0
  121. package/src/linked-list/update-linked-list.ts +30 -0
  122. package/src/linked-list/while-linked-list.ts +33 -0
  123. package/src/math/__tests__/clamp-number.test.ts +30 -0
  124. package/src/math/__tests__/interpolate.test.ts +28 -0
  125. package/src/math/__tests__/median.test.ts +27 -0
  126. package/src/math/__tests__/number-range.test.ts +59 -0
  127. package/src/math/__tests__/random-number.test.ts +11 -0
  128. package/src/math/clamp-number.ts +8 -0
  129. package/src/math/index.ts +5 -0
  130. package/src/math/interpolate.ts +18 -0
  131. package/src/math/median.ts +21 -0
  132. package/src/math/number-range.ts +16 -0
  133. package/src/math/random-number.ts +10 -0
  134. package/src/object/__tests__/merge-deep.test.ts +56 -0
  135. package/src/object/__tests__/strip-properties-from-object.test.ts +65 -0
  136. package/src/object/index.ts +2 -0
  137. package/src/object/merge-deep.ts +26 -0
  138. package/src/object/strip-properties-from-object.ts +26 -0
  139. package/src/parsing/__tests__/parse-boolean.test.ts +15 -0
  140. package/src/parsing/__tests__/parse-enum.test.ts +19 -0
  141. package/src/parsing/__tests__/parse-number.test.ts +20 -0
  142. package/src/parsing/index.ts +3 -0
  143. package/src/parsing/parse-boolean.ts +10 -0
  144. package/src/parsing/parse-enum.ts +16 -0
  145. package/src/parsing/parse-number.ts +12 -0
  146. package/src/predicates/__tests__/is-function.test.ts +11 -0
  147. package/src/predicates/__tests__/is-null.test.ts +11 -0
  148. package/src/predicates/__tests__/is-object.test.ts +11 -0
  149. package/src/predicates/__tests__/is-primitive.test.ts +42 -0
  150. package/src/predicates/__tests__/is-undefined.test.ts +11 -0
  151. package/src/predicates/__tests__/is-uuid.test.ts +13 -0
  152. package/src/predicates/index.ts +5 -0
  153. package/src/predicates/is-function.ts +3 -0
  154. package/src/predicates/is-null.ts +1 -0
  155. package/src/predicates/is-object.ts +3 -0
  156. package/src/predicates/is-primitive.ts +19 -0
  157. package/src/predicates/is-undefined.ts +3 -0
  158. package/src/predicates/is-uuid.ts +3 -0
  159. package/src/promise/__tests__/delay.test.ts +13 -0
  160. package/src/promise/__tests__/execute-or-resolve-default.test.ts +25 -0
  161. package/src/promise/__tests__/execute-with-delay.test.ts +24 -0
  162. package/src/promise/delay.ts +3 -0
  163. package/src/promise/execute-or-resolve-default.ts +14 -0
  164. package/src/promise/execute-with-delay.ts +6 -0
  165. package/src/promise/index.ts +3 -0
  166. package/src/string/__tests__/is-string-length-within-range.test.ts +23 -0
  167. package/src/string/__tests__/replace-in-template.test.ts +52 -0
  168. package/src/string/index.ts +2 -0
  169. package/src/string/is-string-length-within-range.ts +10 -0
  170. package/src/string/replace-in-template.ts +45 -0
  171. package/src/time/__tests__/convert.test.ts +14 -0
  172. package/src/time/__tests__/format-minutes.test.ts +10 -0
  173. package/src/time/__tests__/get-time-diff-as-string.test.ts +128 -0
  174. package/src/time/constants.ts +4 -0
  175. package/src/time/convert.ts +5 -0
  176. package/src/time/format-minutes.ts +9 -0
  177. package/src/time/get-time-diff-as-string.ts +196 -0
  178. package/src/time/index.ts +4 -0
  179. package/src/types/function.ts +1 -0
  180. package/src/types/general.ts +15 -0
  181. package/src/types/index.ts +4 -0
  182. package/src/types/object.ts +33 -0
  183. package/src/types/search.ts +36 -0
  184. package/tmp-lib.tgz +0 -0
  185. package/tsconfig.json +25 -0
  186. package/yarn.lock +4280 -0
  187. package/business/types/multilingual.js.map +0 -1
  188. /package/{_virtual → dist/_virtual}/_tslib.js +0 -0
  189. /package/{_virtual → dist/_virtual}/_tslib.js.map +0 -0
  190. /package/{array → dist/array}/array-to-map.d.ts +0 -0
  191. /package/{array → dist/array}/array-to-map.js +0 -0
  192. /package/{array → dist/array}/array-to-map.js.map +0 -0
  193. /package/{array → dist/array}/get-values-from-keys.d.ts +0 -0
  194. /package/{array → dist/array}/get-values-from-keys.js +0 -0
  195. /package/{array → dist/array}/get-values-from-keys.js.map +0 -0
  196. /package/{array → dist/array}/index.d.ts +0 -0
  197. /package/{array → dist/array}/index.js +0 -0
  198. /package/{array → dist/array}/index.js.map +0 -0
  199. /package/{array → dist/array}/inner-join.d.ts +0 -0
  200. /package/{array → dist/array}/inner-join.js +0 -0
  201. /package/{array → dist/array}/inner-join.js.map +0 -0
  202. /package/{array → dist/array}/left-outter-join.d.ts +0 -0
  203. /package/{array → dist/array}/left-outter-join.js +0 -0
  204. /package/{array → dist/array}/left-outter-join.js.map +0 -0
  205. /package/{business → dist/business}/campaign/index.d.ts +0 -0
  206. /package/{business → dist/business}/campaign/index.js +0 -0
  207. /package/{business → dist/business}/campaign/index.js.map +0 -0
  208. /package/{business → dist/business}/campaign/live-campaign.d.ts +0 -0
  209. /package/{business → dist/business}/campaign/live-campaign.js +0 -0
  210. /package/{business → dist/business}/campaign/live-campaign.js.map +0 -0
  211. /package/{business → dist/business}/course/index.d.ts +0 -0
  212. /package/{business → dist/business}/course/index.js +0 -0
  213. /package/{business → dist/business}/course/index.js.map +0 -0
  214. /package/{business → dist/business}/course/microknowledge-max-lengths.d.ts +0 -0
  215. /package/{business → dist/business}/course/microknowledge-max-lengths.js +0 -0
  216. /package/{business → dist/business}/course/microknowledge-max-lengths.js.map +0 -0
  217. /package/{business → dist/business}/index.d.ts +0 -0
  218. /package/{business → dist/business}/index.js +0 -0
  219. /package/{business → dist/business}/index.js.map +0 -0
  220. /package/{business → dist/business}/picture-spot/index.d.ts +0 -0
  221. /package/{business → dist/business}/picture-spot/index.js +0 -0
  222. /package/{business → dist/business}/picture-spot/index.js.map +0 -0
  223. /package/{business → dist/business}/types/achievement.d.ts +0 -0
  224. /package/{business → dist/business}/types/activity.d.ts +0 -0
  225. /package/{business → dist/business}/types/activity.js +0 -0
  226. /package/{business → dist/business}/types/activity.js.map +0 -0
  227. /package/{business → dist/business}/types/audience.d.ts +0 -0
  228. /package/{business → dist/business}/types/battle.d.ts +0 -0
  229. /package/{business → dist/business}/types/breaking-news.d.ts +0 -0
  230. /package/{business → dist/business}/types/campaign.d.ts +0 -0
  231. /package/{business → dist/business}/types/campaign.js +0 -0
  232. /package/{business → dist/business}/types/campaign.js.map +0 -0
  233. /package/{business → dist/business}/types/content.d.ts +0 -0
  234. /package/{business → dist/business}/types/document.d.ts +0 -0
  235. /package/{business → dist/business}/types/index.d.ts +0 -0
  236. /package/{business → dist/business}/types/index.js +0 -0
  237. /package/{business → dist/business}/types/index.js.map +0 -0
  238. /package/{business → dist/business}/types/media.d.ts +0 -0
  239. /package/{business → dist/business}/types/player.d.ts +0 -0
  240. /package/{business → dist/business}/types/score.d.ts +0 -0
  241. /package/{business → dist/business}/types/score.js +0 -0
  242. /package/{business → dist/business}/types/score.js.map +0 -0
  243. /package/{business → dist/business}/types/thematic.d.ts +0 -0
  244. /package/{business → dist/business}/types/user-engagement.d.ts +0 -0
  245. /package/{cdn → dist/cdn}/cdn.factory.d.ts +0 -0
  246. /package/{cdn → dist/cdn}/cdn.factory.js +0 -0
  247. /package/{cdn → dist/cdn}/cdn.factory.js.map +0 -0
  248. /package/{cdn → dist/cdn}/index.d.ts +0 -0
  249. /package/{cdn → dist/cdn}/index.js +0 -0
  250. /package/{cdn → dist/cdn}/index.js.map +0 -0
  251. /package/{cdn → dist/cdn}/types/cdn-factory.type.d.ts +0 -0
  252. /package/{cdn → dist/cdn}/types/index.d.ts +0 -0
  253. /package/{cdn → dist/cdn}/types/index.js +0 -0
  254. /package/{cdn → dist/cdn}/types/index.js.map +0 -0
  255. /package/{cdn → dist/cdn}/utils/extract-info-from-url.util.d.ts +0 -0
  256. /package/{cdn → dist/cdn}/utils/extract-info-from-url.util.js +0 -0
  257. /package/{cdn → dist/cdn}/utils/extract-info-from-url.util.js.map +0 -0
  258. /package/{cdn → dist/cdn}/utils/get-cdn-from-s3-url.util.d.ts +0 -0
  259. /package/{cdn → dist/cdn}/utils/get-cdn-from-s3-url.util.js +0 -0
  260. /package/{cdn → dist/cdn}/utils/get-cdn-from-s3-url.util.js.map +0 -0
  261. /package/{cdn → dist/cdn}/utils/get-cdn-url.util.d.ts +0 -0
  262. /package/{cdn → dist/cdn}/utils/get-cdn-url.util.js +0 -0
  263. /package/{cdn → dist/cdn}/utils/get-cdn-url.util.js.map +0 -0
  264. /package/{cdn → dist/cdn}/utils/twicpics-transformations.util.d.ts +0 -0
  265. /package/{cdn → dist/cdn}/utils/twicpics-transformations.util.js +0 -0
  266. /package/{cdn → dist/cdn}/utils/twicpics-transformations.util.js.map +0 -0
  267. /package/{chrono → dist/chrono}/get-approximated-session-time.d.ts +0 -0
  268. /package/{chrono → dist/chrono}/get-approximated-session-time.js +0 -0
  269. /package/{chrono → dist/chrono}/get-approximated-session-time.js.map +0 -0
  270. /package/{chrono → dist/chrono}/index.d.ts +0 -0
  271. /package/{chrono → dist/chrono}/index.js +0 -0
  272. /package/{chrono → dist/chrono}/index.js.map +0 -0
  273. /package/{color → dist/color}/get-contrast-color.d.ts +0 -0
  274. /package/{color → dist/color}/get-contrast-color.js +0 -0
  275. /package/{color → dist/color}/get-contrast-color.js.map +0 -0
  276. /package/{color → dist/color}/index.d.ts +0 -0
  277. /package/{color → dist/color}/index.js +0 -0
  278. /package/{color → dist/color}/index.js.map +0 -0
  279. /package/{crypto → dist/crypto}/aes256.d.ts +0 -0
  280. /package/{crypto → dist/crypto}/aes256.js +0 -0
  281. /package/{crypto → dist/crypto}/aes256.js.map +0 -0
  282. /package/{crypto → dist/crypto}/index.d.ts +0 -0
  283. /package/{crypto → dist/crypto}/index.js +0 -0
  284. /package/{crypto → dist/crypto}/index.js.map +0 -0
  285. /package/{date → dist/date}/add-days.d.ts +0 -0
  286. /package/{date → dist/date}/add-days.js +0 -0
  287. /package/{date → dist/date}/add-days.js.map +0 -0
  288. /package/{date → dist/date}/difference-in-days.d.ts +0 -0
  289. /package/{date → dist/date}/difference-in-days.js +0 -0
  290. /package/{date → dist/date}/difference-in-days.js.map +0 -0
  291. /package/{date → dist/date}/get-iso-day-number.d.ts +0 -0
  292. /package/{date → dist/date}/get-iso-day-number.js +0 -0
  293. /package/{date → dist/date}/get-iso-day-number.js.map +0 -0
  294. /package/{date → dist/date}/get-next-day.d.ts +0 -0
  295. /package/{date → dist/date}/get-next-day.js +0 -0
  296. /package/{date → dist/date}/get-next-day.js.map +0 -0
  297. /package/{date → dist/date}/get-remaining-time.d.ts +0 -0
  298. /package/{date → dist/date}/get-remaining-time.js +0 -0
  299. /package/{date → dist/date}/get-remaining-time.js.map +0 -0
  300. /package/{date → dist/date}/get-start-of-day.d.ts +0 -0
  301. /package/{date → dist/date}/get-start-of-day.js +0 -0
  302. /package/{date → dist/date}/get-start-of-day.js.map +0 -0
  303. /package/{date → dist/date}/index.d.ts +0 -0
  304. /package/{date → dist/date}/index.js +0 -0
  305. /package/{date → dist/date}/index.js.map +0 -0
  306. /package/{date → dist/date}/is-same-date.d.ts +0 -0
  307. /package/{date → dist/date}/is-same-date.js +0 -0
  308. /package/{date → dist/date}/is-same-date.js.map +0 -0
  309. /package/{date → dist/date}/shift-date-by.d.ts +0 -0
  310. /package/{date → dist/date}/shift-date-by.js +0 -0
  311. /package/{date → dist/date}/shift-date-by.js.map +0 -0
  312. /package/{date → dist/date}/to-plain-date-string.d.ts +0 -0
  313. /package/{date → dist/date}/to-plain-date-string.js +0 -0
  314. /package/{date → dist/date}/to-plain-date-string.js.map +0 -0
  315. /package/{date → dist/date}/to-utc-date-string.d.ts +0 -0
  316. /package/{date → dist/date}/to-utc-date-string.js +0 -0
  317. /package/{date → dist/date}/to-utc-date-string.js.map +0 -0
  318. /package/{formatting → dist/formatting}/format-number.d.ts +0 -0
  319. /package/{formatting → dist/formatting}/format-number.js +0 -0
  320. /package/{formatting → dist/formatting}/format-number.js.map +0 -0
  321. /package/{formatting → dist/formatting}/index.d.ts +0 -0
  322. /package/{formatting → dist/formatting}/index.js +0 -0
  323. /package/{formatting → dist/formatting}/index.js.map +0 -0
  324. /package/{fp → dist/fp}/index.d.ts +0 -0
  325. /package/{fp → dist/fp}/index.js +0 -0
  326. /package/{fp → dist/fp}/index.js.map +0 -0
  327. /package/{fp → dist/fp}/run-while.d.ts +0 -0
  328. /package/{fp → dist/fp}/run-while.js +0 -0
  329. /package/{fp → dist/fp}/run-while.js.map +0 -0
  330. /package/{http → dist/http}/build-search-params.d.ts +0 -0
  331. /package/{http → dist/http}/build-search-params.js +0 -0
  332. /package/{http → dist/http}/build-search-params.js.map +0 -0
  333. /package/{http → dist/http}/encode-search-object.d.ts +0 -0
  334. /package/{http → dist/http}/encode-search-object.js +0 -0
  335. /package/{http → dist/http}/encode-search-object.js.map +0 -0
  336. /package/{http → dist/http}/fetch-with-timeout.d.ts +0 -0
  337. /package/{http → dist/http}/fetch-with-timeout.js +0 -0
  338. /package/{http → dist/http}/fetch-with-timeout.js.map +0 -0
  339. /package/{http → dist/http}/index.d.ts +0 -0
  340. /package/{http → dist/http}/index.js +0 -0
  341. /package/{http → dist/http}/index.js.map +0 -0
  342. /package/{index.d.ts → dist/index.d.ts} +0 -0
  343. /package/{index.js → dist/index.js} +0 -0
  344. /package/{index.js.map → dist/index.js.map} +0 -0
  345. /package/{linked-list → dist/linked-list}/apply-diff-linked-list.d.ts +0 -0
  346. /package/{linked-list → dist/linked-list}/apply-diff-linked-list.js +0 -0
  347. /package/{linked-list → dist/linked-list}/apply-diff-linked-list.js.map +0 -0
  348. /package/{linked-list → dist/linked-list}/create-linked-list.d.ts +0 -0
  349. /package/{linked-list → dist/linked-list}/create-linked-list.js +0 -0
  350. /package/{linked-list → dist/linked-list}/create-linked-list.js.map +0 -0
  351. /package/{linked-list → dist/linked-list}/find-linked-list.d.ts +0 -0
  352. /package/{linked-list → dist/linked-list}/find-linked-list.js +0 -0
  353. /package/{linked-list → dist/linked-list}/find-linked-list.js.map +0 -0
  354. /package/{linked-list → dist/linked-list}/get-linked-list.d.ts +0 -0
  355. /package/{linked-list → dist/linked-list}/get-linked-list.js +0 -0
  356. /package/{linked-list → dist/linked-list}/get-linked-list.js.map +0 -0
  357. /package/{linked-list → dist/linked-list}/index.d.ts +0 -0
  358. /package/{linked-list → dist/linked-list}/index.js +0 -0
  359. /package/{linked-list → dist/linked-list}/index.js.map +0 -0
  360. /package/{linked-list → dist/linked-list}/insert-linked-list.d.ts +0 -0
  361. /package/{linked-list → dist/linked-list}/insert-linked-list.js +0 -0
  362. /package/{linked-list → dist/linked-list}/insert-linked-list.js.map +0 -0
  363. /package/{linked-list → dist/linked-list}/linked-list-utils.d.ts +0 -0
  364. /package/{linked-list → dist/linked-list}/linked-list-utils.js +0 -0
  365. /package/{linked-list → dist/linked-list}/linked-list-utils.js.map +0 -0
  366. /package/{linked-list → dist/linked-list}/reduce-linked-list.d.ts +0 -0
  367. /package/{linked-list → dist/linked-list}/reduce-linked-list.js +0 -0
  368. /package/{linked-list → dist/linked-list}/reduce-linked-list.js.map +0 -0
  369. /package/{linked-list → dist/linked-list}/remove-linked-list.d.ts +0 -0
  370. /package/{linked-list → dist/linked-list}/remove-linked-list.js +0 -0
  371. /package/{linked-list → dist/linked-list}/remove-linked-list.js.map +0 -0
  372. /package/{linked-list → dist/linked-list}/type.d.ts +0 -0
  373. /package/{linked-list → dist/linked-list}/update-linked-list.d.ts +0 -0
  374. /package/{linked-list → dist/linked-list}/update-linked-list.js +0 -0
  375. /package/{linked-list → dist/linked-list}/update-linked-list.js.map +0 -0
  376. /package/{linked-list → dist/linked-list}/while-linked-list.d.ts +0 -0
  377. /package/{linked-list → dist/linked-list}/while-linked-list.js +0 -0
  378. /package/{linked-list → dist/linked-list}/while-linked-list.js.map +0 -0
  379. /package/{math → dist/math}/clamp-number.d.ts +0 -0
  380. /package/{math → dist/math}/clamp-number.js +0 -0
  381. /package/{math → dist/math}/clamp-number.js.map +0 -0
  382. /package/{math → dist/math}/index.d.ts +0 -0
  383. /package/{math → dist/math}/index.js +0 -0
  384. /package/{math → dist/math}/index.js.map +0 -0
  385. /package/{math → dist/math}/interpolate.d.ts +0 -0
  386. /package/{math → dist/math}/interpolate.js +0 -0
  387. /package/{math → dist/math}/interpolate.js.map +0 -0
  388. /package/{math → dist/math}/median.d.ts +0 -0
  389. /package/{math → dist/math}/median.js +0 -0
  390. /package/{math → dist/math}/median.js.map +0 -0
  391. /package/{math → dist/math}/number-range.d.ts +0 -0
  392. /package/{math → dist/math}/number-range.js +0 -0
  393. /package/{math → dist/math}/number-range.js.map +0 -0
  394. /package/{math → dist/math}/random-number.d.ts +0 -0
  395. /package/{math → dist/math}/random-number.js +0 -0
  396. /package/{math → dist/math}/random-number.js.map +0 -0
  397. /package/{object → dist/object}/index.d.ts +0 -0
  398. /package/{object → dist/object}/index.js +0 -0
  399. /package/{object → dist/object}/index.js.map +0 -0
  400. /package/{object → dist/object}/merge-deep.d.ts +0 -0
  401. /package/{object → dist/object}/merge-deep.js +0 -0
  402. /package/{object → dist/object}/merge-deep.js.map +0 -0
  403. /package/{object → dist/object}/strip-properties-from-object.d.ts +0 -0
  404. /package/{object → dist/object}/strip-properties-from-object.js +0 -0
  405. /package/{object → dist/object}/strip-properties-from-object.js.map +0 -0
  406. /package/{parsing → dist/parsing}/index.d.ts +0 -0
  407. /package/{parsing → dist/parsing}/index.js +0 -0
  408. /package/{parsing → dist/parsing}/index.js.map +0 -0
  409. /package/{parsing → dist/parsing}/parse-boolean.d.ts +0 -0
  410. /package/{parsing → dist/parsing}/parse-boolean.js +0 -0
  411. /package/{parsing → dist/parsing}/parse-boolean.js.map +0 -0
  412. /package/{parsing → dist/parsing}/parse-enum.d.ts +0 -0
  413. /package/{parsing → dist/parsing}/parse-enum.js +0 -0
  414. /package/{parsing → dist/parsing}/parse-enum.js.map +0 -0
  415. /package/{parsing → dist/parsing}/parse-number.d.ts +0 -0
  416. /package/{parsing → dist/parsing}/parse-number.js +0 -0
  417. /package/{parsing → dist/parsing}/parse-number.js.map +0 -0
  418. /package/{predicates → dist/predicates}/index.d.ts +0 -0
  419. /package/{predicates → dist/predicates}/index.js +0 -0
  420. /package/{predicates → dist/predicates}/index.js.map +0 -0
  421. /package/{predicates → dist/predicates}/is-function.d.ts +0 -0
  422. /package/{predicates → dist/predicates}/is-function.js +0 -0
  423. /package/{predicates → dist/predicates}/is-function.js.map +0 -0
  424. /package/{predicates → dist/predicates}/is-null.d.ts +0 -0
  425. /package/{predicates → dist/predicates}/is-null.js +0 -0
  426. /package/{predicates → dist/predicates}/is-null.js.map +0 -0
  427. /package/{predicates → dist/predicates}/is-object.d.ts +0 -0
  428. /package/{predicates → dist/predicates}/is-object.js +0 -0
  429. /package/{predicates → dist/predicates}/is-object.js.map +0 -0
  430. /package/{predicates → dist/predicates}/is-primitive.d.ts +0 -0
  431. /package/{predicates → dist/predicates}/is-primitive.js +0 -0
  432. /package/{predicates → dist/predicates}/is-primitive.js.map +0 -0
  433. /package/{predicates → dist/predicates}/is-undefined.d.ts +0 -0
  434. /package/{predicates → dist/predicates}/is-undefined.js +0 -0
  435. /package/{predicates → dist/predicates}/is-undefined.js.map +0 -0
  436. /package/{predicates → dist/predicates}/is-uuid.d.ts +0 -0
  437. /package/{promise → dist/promise}/delay.d.ts +0 -0
  438. /package/{promise → dist/promise}/delay.js +0 -0
  439. /package/{promise → dist/promise}/delay.js.map +0 -0
  440. /package/{promise → dist/promise}/execute-or-resolve-default.d.ts +0 -0
  441. /package/{promise → dist/promise}/execute-or-resolve-default.js +0 -0
  442. /package/{promise → dist/promise}/execute-or-resolve-default.js.map +0 -0
  443. /package/{promise → dist/promise}/execute-with-delay.d.ts +0 -0
  444. /package/{promise → dist/promise}/execute-with-delay.js +0 -0
  445. /package/{promise → dist/promise}/execute-with-delay.js.map +0 -0
  446. /package/{promise → dist/promise}/index.d.ts +0 -0
  447. /package/{promise → dist/promise}/index.js +0 -0
  448. /package/{promise → dist/promise}/index.js.map +0 -0
  449. /package/{string → dist/string}/index.d.ts +0 -0
  450. /package/{string → dist/string}/index.js +0 -0
  451. /package/{string → dist/string}/index.js.map +0 -0
  452. /package/{string → dist/string}/is-string-length-within-range.d.ts +0 -0
  453. /package/{string → dist/string}/is-string-length-within-range.js +0 -0
  454. /package/{string → dist/string}/is-string-length-within-range.js.map +0 -0
  455. /package/{string → dist/string}/replace-in-template.d.ts +0 -0
  456. /package/{string → dist/string}/replace-in-template.js +0 -0
  457. /package/{string → dist/string}/replace-in-template.js.map +0 -0
  458. /package/{time → dist/time}/constants.d.ts +0 -0
  459. /package/{time → dist/time}/constants.js +0 -0
  460. /package/{time → dist/time}/constants.js.map +0 -0
  461. /package/{time → dist/time}/convert.d.ts +0 -0
  462. /package/{time → dist/time}/convert.js +0 -0
  463. /package/{time → dist/time}/convert.js.map +0 -0
  464. /package/{time → dist/time}/format-minutes.d.ts +0 -0
  465. /package/{time → dist/time}/format-minutes.js +0 -0
  466. /package/{time → dist/time}/format-minutes.js.map +0 -0
  467. /package/{time → dist/time}/get-time-diff-as-string.d.ts +0 -0
  468. /package/{time → dist/time}/get-time-diff-as-string.js +0 -0
  469. /package/{time → dist/time}/get-time-diff-as-string.js.map +0 -0
  470. /package/{time → dist/time}/index.d.ts +0 -0
  471. /package/{time → dist/time}/index.js +0 -0
  472. /package/{time → dist/time}/index.js.map +0 -0
  473. /package/{types → dist/types}/function.d.ts +0 -0
  474. /package/{types → dist/types}/general.d.ts +0 -0
  475. /package/{types → dist/types}/index.d.ts +0 -0
  476. /package/{types → dist/types}/index.js +0 -0
  477. /package/{types → dist/types}/index.js.map +0 -0
  478. /package/{types → dist/types}/object.d.ts +0 -0
  479. /package/{types → dist/types}/search.d.ts +0 -0
@@ -0,0 +1,82 @@
1
+ import { findNextAvailableDate } from '../live-campaign';
2
+
3
+ describe('findNextAvailableDate', () => {
4
+ it('should return the current date if it is enabled and not disabled', () => {
5
+ const currentDate = new Date('2024-04-22'); // Monday
6
+ const enabledWeekDays = [1, 2, 3, 4, 5]; // Monday to Friday
7
+ const disabledDates: Date[] = [];
8
+
9
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
10
+ expect(result).toEqual(currentDate);
11
+ });
12
+
13
+ it('should skip the current date if it is not an enabled weekday', () => {
14
+ const currentDate = new Date('2024-04-27'); // Saturday
15
+ const enabledWeekDays = [1, 2, 3, 4, 5]; // Monday to Friday
16
+ const disabledDates: Date[] = [];
17
+
18
+ const expectedDate = new Date('2024-04-29'); // Next Monday
19
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
20
+ expect(result).toEqual(expectedDate);
21
+ });
22
+
23
+ it('should skip the current date if it is disabled', () => {
24
+ const currentDate = new Date('2024-04-22'); // Monday
25
+ const enabledWeekDays = [1, 2, 3, 4, 5];
26
+ const disabledDates = [new Date('2024-04-22')];
27
+
28
+ const expectedDate = new Date('2024-04-23'); // Thuesday
29
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
30
+ expect(result).toEqual(expectedDate);
31
+ });
32
+
33
+ it('should recurse until a valid date is found', () => {
34
+ const currentDate = new Date('2024-04-26'); // Friday
35
+ const enabledWeekDays = [1, 2, 3, 4, 5]; // Monday to Friday
36
+ const disabledDates = [
37
+ new Date('2024-04-26'), // Friday
38
+ new Date('2024-04-29'), // Monday next
39
+ ];
40
+
41
+ const expectedDate = new Date('2024-04-30'); // Thuesday
42
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
43
+ expect(result).toEqual(expectedDate);
44
+ });
45
+
46
+ it('should return current date if it is the end date and valid', () => {
47
+ const currentDate = new Date('2024-04-30'); // Thuesday
48
+ const enabledWeekDays = [1, 2, 3, 4, 5];
49
+ const disabledDates: Date[] = [];
50
+
51
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
52
+ expect(result).toEqual(currentDate);
53
+ });
54
+
55
+ it('should return current date if currentDate is after endDate', () => {
56
+ const currentDate = new Date('2024-05-01'); // Wednesday
57
+ const enabledWeekDays = [1, 2, 3, 4, 5];
58
+ const disabledDates: Date[] = [];
59
+
60
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
61
+ expect(result).toEqual(currentDate);
62
+ });
63
+
64
+ it('should handle empty enabledWeekDays by treating no days as enabled', () => {
65
+ const currentDate = new Date('2024-04-22'); // Monday
66
+
67
+ const enabledWeekDays: number[] = []; // No days enabled
68
+ const disabledDates: Date[] = [];
69
+
70
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
71
+ expect(result).toBeNull();
72
+ });
73
+
74
+ it('should handle empty disabledDates', () => {
75
+ const currentDate = new Date('2024-04-22'); // Monday
76
+ const enabledWeekDays = [1, 2, 3, 4, 5];
77
+ const disabledDates: Date[] = [];
78
+
79
+ const result = findNextAvailableDate(currentDate, enabledWeekDays, disabledDates);
80
+ expect(result).toEqual(currentDate);
81
+ });
82
+ });
@@ -0,0 +1,123 @@
1
+ import { CampaignDetails } from '../../types';
2
+ import { getCalendarSessionDatesFromCampaign } from '../live-campaign';
3
+
4
+ describe('getCalendarSessionDatesFromCampaign', () => {
5
+ const formatDate = (date: Date): string => {
6
+ const year = date.getFullYear();
7
+ const month = `0${date.getMonth() + 1}`.slice(-2);
8
+ const day = `0${date.getDate()}`.slice(-2);
9
+ return `${year}-${month}-${day}`;
10
+ };
11
+
12
+ it('should generate the correct number of session dates', () => {
13
+ const campaign: Partial<CampaignDetails> = {
14
+ launchDate: '2024-04-22',
15
+ enabledWeekDays: [1, 2, 3, 4, 5],
16
+ disabledDates: [],
17
+ nbSessions: 5,
18
+ };
19
+
20
+ const result = getCalendarSessionDatesFromCampaign(campaign as CampaignDetails);
21
+ expect(Object.keys(result)).toHaveLength(5);
22
+ });
23
+
24
+ it('should correctly assign session dates considering enabledWeekDays and disabledDates', () => {
25
+ const campaign: Partial<CampaignDetails> = {
26
+ launchDate: '2024-04-22',
27
+ enabledWeekDays: [1, 3, 5],
28
+ disabledDates: [new Date('2024-04-25')],
29
+ nbSessions: 3,
30
+ };
31
+
32
+ const result = getCalendarSessionDatesFromCampaign(campaign as CampaignDetails);
33
+
34
+ expect(formatDate(result[1])).toBe('2024-04-22');
35
+ expect(formatDate(result[2])).toBe('2024-04-24');
36
+ expect(formatDate(result[3])).toBe('2024-04-26');
37
+ });
38
+
39
+ it('should skip disabled dates and enabledWeekDays accordingly', () => {
40
+ const campaign: Partial<CampaignDetails> = {
41
+ launchDate: '2024-04-22',
42
+ enabledWeekDays: [2, 4],
43
+ disabledDates: [new Date('2024-04-23'), new Date('2024-04-25')],
44
+ nbSessions: 2,
45
+ };
46
+
47
+ const result = getCalendarSessionDatesFromCampaign(campaign as CampaignDetails);
48
+
49
+ expect(formatDate(result[1])).toBe('2024-04-30');
50
+ expect(formatDate(result[2])).toBe('2024-05-02');
51
+ });
52
+
53
+ it('should handle campaigns with no disabled dates', () => {
54
+ const campaign: Partial<CampaignDetails> = {
55
+ launchDate: '2024-04-22',
56
+ enabledWeekDays: [1, 2, 3, 4, 5],
57
+ disabledDates: [],
58
+ nbSessions: 3,
59
+ };
60
+
61
+ const result = getCalendarSessionDatesFromCampaign(campaign as CampaignDetails);
62
+
63
+ expect(formatDate(result[1])).toBe('2024-04-22');
64
+ expect(formatDate(result[2])).toBe('2024-04-23');
65
+ expect(formatDate(result[3])).toBe('2024-04-24');
66
+ });
67
+
68
+ it('should handle campaigns where nbSessions is zero', () => {
69
+ const campaign: Partial<CampaignDetails> = {
70
+ launchDate: '2024-04-22',
71
+ enabledWeekDays: [1, 2, 3, 4, 5],
72
+ disabledDates: [],
73
+ nbSessions: 0,
74
+ };
75
+
76
+ const result = getCalendarSessionDatesFromCampaign(campaign as CampaignDetails);
77
+ expect(Object.keys(result)).toHaveLength(0);
78
+ });
79
+
80
+ it('should correctly handle multiple disabled dates and enabledWeekDays', () => {
81
+ const campaign: Partial<CampaignDetails> = {
82
+ launchDate: '2024-04-22',
83
+ enabledWeekDays: [1, 3, 5],
84
+ disabledDates: [new Date('2024-04-22'), new Date('2024-04-24'), new Date('2024-04-26')],
85
+ nbSessions: 3,
86
+ };
87
+
88
+ const result = getCalendarSessionDatesFromCampaign(campaign as CampaignDetails);
89
+
90
+ expect(formatDate(result[1])).toBe('2024-04-29');
91
+ expect(formatDate(result[2])).toBe('2024-05-01');
92
+ expect(formatDate(result[3])).toBe('2024-05-03');
93
+ });
94
+
95
+ it('should correctly handle extra days', () => {
96
+ const campaign: Partial<CampaignDetails> & { extraDays: number } = {
97
+ launchDate: '2024-11-27',
98
+ enabledWeekDays: [1, 2, 3, 4, 5],
99
+ disabledDates: [new Date('2025-03-11')],
100
+ nbSessions: 2,
101
+ extraDays: 100,
102
+ };
103
+
104
+ const result = getCalendarSessionDatesFromCampaign(campaign as CampaignDetails & { extraDays: number });
105
+
106
+ expect(formatDate(result[1])).toBe('2024-11-27');
107
+ expect(formatDate(result[102])).toBe('2025-04-18');
108
+ expect(Object.keys(result)).toHaveLength(102);
109
+
110
+ // Verify that none of the disabled dates are included in the result
111
+ const disabledDateFormatted = formatDate(new Date('2025-03-11'));
112
+ Object.values(result).forEach((date) => {
113
+ expect(formatDate(date)).not.toBe(disabledDateFormatted);
114
+ });
115
+
116
+ // Verify that all dates fall on enabled weekdays
117
+ const { enabledWeekDays } = campaign;
118
+ Object.values(result).forEach((date) => {
119
+ const day = date.getDay();
120
+ expect(enabledWeekDays).toContain(day);
121
+ });
122
+ });
123
+ });
@@ -0,0 +1 @@
1
+ export * from './live-campaign';
@@ -0,0 +1,133 @@
1
+ import { addDays, isSameDate } from '../../date';
2
+ import { CampaignDetails, LiveCampaign } from '../types';
3
+
4
+ export const computeIntenseCalendar = (card: LiveCampaign): Date[] => {
5
+ const { details } = card;
6
+
7
+ const startDate = new Date(details.utcStartDate);
8
+ const endDate = new Date(details.utcEndDate);
9
+
10
+ const calculateIntenseCalendarAux = (date: Date, calendar: Date[]): Date[] => {
11
+ if (date > endDate) {
12
+ return calendar;
13
+ }
14
+
15
+ const jsDay = date.getDay();
16
+ const day = jsDay === 0 ? 7 : jsDay;
17
+
18
+ if (details.enabledWeekDays.includes(day) && !details.disabledDates.includes(date.toISOString().slice(0, 10))) {
19
+ calendar.push(new Date(date));
20
+ }
21
+
22
+ date.setDate(date.getDate() + 1);
23
+
24
+ return calculateIntenseCalendarAux(date, calendar);
25
+ };
26
+
27
+ return calculateIntenseCalendarAux(startDate, []);
28
+ };
29
+
30
+ export const computeCurrentSession = (card: LiveCampaign, forceComputeCalendar?: boolean): number => {
31
+ const { details, achievement } = card;
32
+
33
+ if (details.type === 'flexible' && !forceComputeCalendar) {
34
+ return Math.min(achievement.lastSessionPlayed + 1, details.sessionCount);
35
+ }
36
+
37
+ const today = new Date();
38
+
39
+ if (today <= new Date(details.utcStartDate)) {
40
+ return 1;
41
+ }
42
+
43
+ if (today >= new Date(details.utcEndDate)) {
44
+ return details.sessionCount;
45
+ }
46
+
47
+ const calendar = computeIntenseCalendar(card);
48
+
49
+ const todayDate = today.toISOString().slice(0, 10);
50
+ const currentSession = calendar.findIndex((date) => date.toISOString().slice(0, 10) >= todayDate);
51
+
52
+ if (currentSession === -1) {
53
+ throw new Error('Current session not found');
54
+ }
55
+
56
+ return Math.min(currentSession + 1, details.sessionCount);
57
+ };
58
+
59
+ export const checkTodayPlayable = (card: LiveCampaign): boolean => {
60
+ const today = new Date();
61
+
62
+ const { details } = card;
63
+
64
+ const startDate = new Date(details.utcStartDate);
65
+ const endDate = new Date(details.utcEndDate);
66
+
67
+ if (today < startDate || today > endDate) {
68
+ return false;
69
+ }
70
+
71
+ const jsDay = today.getDay();
72
+ const day = jsDay === 0 ? 7 : jsDay;
73
+
74
+ if (!details.enabledWeekDays.includes(day)) {
75
+ return false;
76
+ }
77
+
78
+ if (details.disabledDates.includes(today.toISOString().slice(0, 10))) {
79
+ return false;
80
+ }
81
+
82
+ return true;
83
+ };
84
+
85
+ export const findNextAvailableDate = (
86
+ currentDate: Date,
87
+ enabledWeekDays: number[],
88
+ disabledDates: Date[],
89
+ ): Date | null => {
90
+ if (enabledWeekDays.length === 0) return null;
91
+ const dayofDate = currentDate.getDay();
92
+ const isEnabledDay = enabledWeekDays.includes(dayofDate === 0 ? 7 : dayofDate);
93
+ const isDisabledDate = disabledDates.some((d) => isSameDate(d, currentDate));
94
+
95
+ if (isEnabledDay && !isDisabledDate) {
96
+ return currentDate;
97
+ }
98
+
99
+ return findNextAvailableDate(addDays(currentDate, 1), enabledWeekDays, disabledDates);
100
+ };
101
+
102
+ type GetCalendarSessionDatesFromCampaignProps = Pick<
103
+ CampaignDetails,
104
+ 'launchDate' | 'enabledWeekDays' | 'disabledDates' | 'nbSessions'
105
+ > & {
106
+ extraDays?: number;
107
+ };
108
+
109
+ export const getCalendarSessionDatesFromCampaign = ({
110
+ launchDate,
111
+ enabledWeekDays,
112
+ disabledDates,
113
+ nbSessions,
114
+ extraDays = 0,
115
+ }: GetCalendarSessionDatesFromCampaignProps): Record<number, Date> => {
116
+ const sessionCount = nbSessions + extraDays;
117
+
118
+ const calendarDatesBySession = Array.from({ length: sessionCount }).reduce((acc: Record<number, Date>, _, index) => {
119
+ const session = index + 1;
120
+ const lastDate = session > 1 ? addDays(new Date(acc[session - 1]), 1) : new Date(launchDate);
121
+
122
+ const nextSessionDate = findNextAvailableDate(lastDate, enabledWeekDays, disabledDates);
123
+
124
+ if (!nextSessionDate) return acc;
125
+
126
+ return {
127
+ ...acc,
128
+ [session]: nextSessionDate,
129
+ };
130
+ }, {});
131
+
132
+ return calendarDatesBySession;
133
+ };
@@ -0,0 +1 @@
1
+ export * from './microknowledge-max-lengths';
@@ -0,0 +1,12 @@
1
+ export const MICROKNOWLEDGE_MAX_LENGTHS = {
2
+ IMAGE: {
3
+ MAX_TITLE_LENGTH: 40,
4
+ MAX_CONTENT_LENGTH: 500,
5
+ },
6
+ VIDEO: {
7
+ MAX_TITLE_LENGTH: 40,
8
+ },
9
+ CHAPTER: {
10
+ MAX_TITLE_LENGTH: 40,
11
+ },
12
+ };
@@ -0,0 +1,4 @@
1
+ export * from './campaign';
2
+ export * from './course';
3
+ export * from './picture-spot';
4
+ export * from './types';
@@ -0,0 +1,3 @@
1
+ import { PictureSpot } from '../types';
2
+
3
+ export const getQuestions = (content: PictureSpot) => content.items?.map(({ question }) => question);
@@ -0,0 +1,41 @@
1
+ import type { MultilingualLabel } from './multilingual';
2
+ import type { PlayerProfile } from './player';
3
+ import type { Image } from './media';
4
+
5
+ export type CampaignRanking = {
6
+ activityId: number;
7
+ playerProfile: PlayerProfile;
8
+ rank: number;
9
+ score: number;
10
+ numberSessionsPlayed: number;
11
+ lastPlayed: string;
12
+ favorite: boolean;
13
+ };
14
+
15
+ export type CampaignTeamRanking = {
16
+ activityId: number;
17
+ team: {
18
+ ambassadorId: number;
19
+ teamName: string | null;
20
+ ambassadorFirstName: string;
21
+ ambassadorLastName: string;
22
+ };
23
+ rank: number;
24
+ score: number;
25
+ image: Image | null;
26
+ };
27
+
28
+ export type MostFailedQuestion = {
29
+ title: MultilingualLabel;
30
+ correctAnswerRate: number;
31
+ };
32
+
33
+ export type CampaignStats = {
34
+ participationRate: number;
35
+ exposureRate: number;
36
+ masteryRate: number;
37
+ correctAnswerRate: number;
38
+ mostFailed: MostFailedQuestion[];
39
+ nbQuestions: number;
40
+ nbActivePlayers: number;
41
+ };
@@ -0,0 +1,64 @@
1
+ import type { AudienceInformation, Segment } from './audience';
2
+ import type { BreakingNewsActivity } from './breaking-news';
3
+ import type { Campaign } from './campaign';
4
+ import type { Media } from './media';
5
+ import type { LanguageCode, MultilingualLabel } from './multilingual';
6
+ import type { EventSummary } from './user-engagement';
7
+
8
+ export type ActivityAudience = {
9
+ groupId: number;
10
+ type: 'all' | 'segmentation' | 'magic-code' | 'email-list';
11
+ segments: Segment[];
12
+ };
13
+
14
+ export type ActivityStatus = (typeof ACTIVITY_STATUS)[number];
15
+
16
+ export type SharedActivityMetadata = {
17
+ status: ActivityStatus;
18
+ languages?: LanguageCode[];
19
+ audiences?: ActivityAudience[];
20
+ userEngagement?: {
21
+ viewCount?: number;
22
+ likeCount?: number;
23
+ };
24
+ };
25
+
26
+ export type CampaignActivity = SharedActivityMetadata & Campaign;
27
+
28
+ export type Activity = CampaignActivity | BreakingNewsActivity;
29
+
30
+ export type BoActivityCardDetails = {
31
+ identifier: string;
32
+ cover: Media;
33
+ title: MultilingualLabel;
34
+ utcStartDate: string;
35
+ utcEndDate?: string;
36
+ };
37
+
38
+ export type BoActivityCard = {
39
+ id: number;
40
+ type: 'campaign' | 'breaking-news';
41
+ status: ActivityStatus;
42
+ details: BoActivityCardDetails;
43
+ language: LanguageCode[];
44
+ eventSummary: EventSummary;
45
+ audience: AudienceInformation;
46
+ audienceGroupNames: string[];
47
+ };
48
+
49
+ export const ACTIVITY_STATUS = [
50
+ 'draft',
51
+ 'inactive',
52
+ 'archived',
53
+ 'upcoming',
54
+ 'live',
55
+ 'celebration',
56
+ 'finished',
57
+ ] as const;
58
+
59
+ export const isActivityCampaign = (activity: unknown): activity is CampaignActivity =>
60
+ typeof activity === 'object' && activity !== null && 'type' in activity && activity.type === 'campaign';
61
+
62
+ export const isActivityBreakingNews = (
63
+ activity: CampaignActivity | BreakingNewsActivity,
64
+ ): activity is BreakingNewsActivity => activity.type === 'breaking-news';
@@ -0,0 +1,23 @@
1
+ export type Segment = {
2
+ id: number;
3
+ label: string;
4
+ dimensionId: number;
5
+ };
6
+
7
+ export type AudienceType = 'all' | 'segmentation' | 'magic-code' | 'email-list' | 'audience';
8
+
9
+ export type AudienceInformation =
10
+ | {
11
+ type: 'all';
12
+ }
13
+ | {
14
+ type: 'segmentation';
15
+ segments: Segment[];
16
+ }
17
+ | {
18
+ type: 'magic-code';
19
+ code: string;
20
+ }
21
+ | {
22
+ type: 'email-list';
23
+ };
@@ -0,0 +1,17 @@
1
+ import type { PlayerProfile } from './player';
2
+
3
+ export type BattleStatus = 'ready-to-play' | 'awaiting-opponent' | 'watch-result' | 'finished' | 'declined';
4
+ export type BattleWinningStatus = 'winner' | 'loser' | 'draw';
5
+
6
+ export type BattleSummary = {
7
+ id: number;
8
+ player: PlayerProfile;
9
+ opponent: PlayerProfile;
10
+ isChallenged: boolean;
11
+ status: BattleStatus;
12
+ totalScores: {
13
+ player: number;
14
+ opponent: number;
15
+ };
16
+ winningStatus?: BattleWinningStatus;
17
+ };
@@ -0,0 +1,43 @@
1
+ import type { Media } from './media';
2
+ import type { MultilingualLabel } from './multilingual';
3
+ import type { UserEngagement } from './user-engagement';
4
+
5
+ export type BreakingNewsActivity = {
6
+ informations: {
7
+ name: MultilingualLabel;
8
+ description: MultilingualLabel;
9
+ isLongText: boolean;
10
+ text?: MultilingualLabel;
11
+ coverMedia?: Media;
12
+ };
13
+ notification: {
14
+ isRecurringNotification: boolean;
15
+ isNotificationActive: boolean;
16
+ notificationTime: string;
17
+ };
18
+ scheduling: {
19
+ startDate: string;
20
+ endDate: string;
21
+ };
22
+ userEngagement: UserEngagement;
23
+ id: number;
24
+ type: 'breaking-news';
25
+ };
26
+
27
+ export type BreakingNewsCardDetails = {
28
+ id: number;
29
+ coverMedia?: {
30
+ type: 'image' | 'video';
31
+ url: string;
32
+ };
33
+ name: MultilingualLabel;
34
+ description: MultilingualLabel;
35
+ text?: MultilingualLabel;
36
+ utcStartDate: string;
37
+ isRecurringNotification: boolean;
38
+ };
39
+
40
+ export type BreakingNewsCard = {
41
+ details: BreakingNewsCardDetails;
42
+ userEngagement: UserEngagement;
43
+ };