@sparted/shared-library 1.0.29 → 1.1.0-rc0

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 (366) 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/.idea/.gitignore +8 -0
  6. package/.idea/codeStyles/Project.xml +35 -0
  7. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  8. package/.idea/inspectionProfiles/Project_Default.xml +6 -0
  9. package/.idea/jsLinters/eslint.xml +6 -0
  10. package/.idea/misc.xml +6 -0
  11. package/.idea/modules.xml +8 -0
  12. package/.idea/shared-library.iml +11 -0
  13. package/.idea/vcs.xml +6 -0
  14. package/.idea/workspace.xml +100 -0
  15. package/.prettierrc.json +6 -0
  16. package/CHANGELOG.md +97 -0
  17. package/README.md +26 -0
  18. package/{_virtual → dist/_virtual}/_tslib.js +6 -1
  19. package/{_virtual → dist/_virtual}/_tslib.js.map +1 -1
  20. package/{array → dist/array}/array-to-map.d.ts +1 -1
  21. package/dist/business/picture-spot/index.d.ts +2 -0
  22. package/dist/business/picture-spot/index.js +8 -0
  23. package/dist/business/picture-spot/index.js.map +1 -0
  24. package/dist/business/types/content.d.ts +84 -0
  25. package/dist/business/types/index.d.ts +4 -0
  26. package/dist/business/types/media.d.ts +16 -0
  27. package/dist/business/types/multilingual.d.ts +3 -0
  28. package/dist/business/types/thematic.d.ts +9 -0
  29. package/dist/cdn/types/cdn-factory.type.d.ts +37 -0
  30. package/{cdn → dist/cdn}/utils/extract-info-from-url.util.d.ts +1 -1
  31. package/{cdn → dist/cdn}/utils/get-cdn-from-s3-url.util.d.ts +1 -1
  32. package/{cdn → dist/cdn}/utils/get-cdn-url.util.d.ts +1 -1
  33. package/{fp → dist/fp}/run-while.d.ts +2 -2
  34. package/{http → dist/http}/encode-search-object.d.ts +1 -1
  35. package/{http → dist/http}/fetch-with-timeout.d.ts +1 -1
  36. package/{index.d.ts → dist/index.d.ts} +0 -1
  37. package/{index.js → dist/index.js} +0 -2
  38. package/{index.js.map → dist/index.js.map} +1 -1
  39. package/{linked-list → dist/linked-list}/linked-list-utils.d.ts +4 -4
  40. package/{linked-list → dist/linked-list}/type.d.ts +7 -7
  41. package/{math → dist/math}/interpolate.d.ts +1 -1
  42. package/{math → dist/math}/number-range.d.ts +1 -1
  43. package/dist/package.json +65 -0
  44. package/{promise → dist/promise}/execute-or-resolve-default.d.ts +1 -1
  45. package/{string → dist/string}/replace-in-template.d.ts +1 -1
  46. package/{time → dist/time}/get-time-diff-as-string.d.ts +2 -2
  47. package/dist/types/function.d.ts +1 -0
  48. package/dist/types/general.d.ts +8 -0
  49. package/dist/types/index.js +3 -0
  50. package/dist/types/index.js.map +1 -0
  51. package/{types → dist/types}/object.d.ts +11 -11
  52. package/dist/types/search.d.ts +24 -0
  53. package/global.d.ts +2 -0
  54. package/package.json +2 -3
  55. package/rollup.config.ts +19 -0
  56. package/src/array/__tests__/array-to-map.test.ts +50 -0
  57. package/src/array/__tests__/get-values-from-keys.test.ts +14 -0
  58. package/src/array/__tests__/inner-join.test.ts +55 -0
  59. package/src/array/__tests__/left-outter-join.test.ts +55 -0
  60. package/src/array/array-to-map.ts +32 -0
  61. package/src/array/get-values-from-keys.ts +3 -0
  62. package/src/array/index.ts +4 -0
  63. package/src/array/inner-join.ts +10 -0
  64. package/src/array/left-outter-join.ts +10 -0
  65. package/src/business/picture-spot/index.ts +3 -0
  66. package/src/business/types/content.ts +110 -0
  67. package/src/business/types/index.ts +4 -0
  68. package/src/business/types/media.ts +18 -0
  69. package/src/business/types/multilingual.ts +3 -0
  70. package/src/business/types/thematic.ts +10 -0
  71. package/src/cdn/__tests__/cdn.factory.test.ts +150 -0
  72. package/src/cdn/__tests__/utils.test.ts +528 -0
  73. package/src/cdn/cdn.factory.ts +70 -0
  74. package/src/cdn/index.ts +2 -0
  75. package/src/cdn/types/cdn-factory.type.ts +49 -0
  76. package/src/cdn/types/index.ts +1 -0
  77. package/src/cdn/utils/extract-info-from-url.util.ts +25 -0
  78. package/src/cdn/utils/get-cdn-from-s3-url.util.ts +20 -0
  79. package/src/cdn/utils/get-cdn-url.util.ts +31 -0
  80. package/src/cdn/utils/twicpics-transformations.util.ts +9 -0
  81. package/src/formatting/__tests__/format-number.test.ts +11 -0
  82. package/src/formatting/format-number.ts +14 -0
  83. package/src/formatting/index.ts +1 -0
  84. package/src/fp/__tests__/run-while.test.ts +29 -0
  85. package/src/fp/index.ts +1 -0
  86. package/src/fp/run-while.ts +54 -0
  87. package/src/http/__tests__/build-search-params.test.ts +17 -0
  88. package/src/http/__tests__/encode-search-object.test.ts +34 -0
  89. package/src/http/__tests__/fetch-with-timeout.test.ts +50 -0
  90. package/src/http/build-search-params.ts +18 -0
  91. package/src/http/encode-search-object.ts +39 -0
  92. package/src/http/fetch-with-timeout.ts +24 -0
  93. package/src/http/index.ts +3 -0
  94. package/src/index.ts +14 -0
  95. package/src/linked-list/__tests__/apply-diff-linked-list.test.ts +103 -0
  96. package/src/linked-list/__tests__/create-linked-list.test.ts +204 -0
  97. package/src/linked-list/__tests__/find-linked-list.test.ts +40 -0
  98. package/src/linked-list/__tests__/get-linked-list.test.ts +28 -0
  99. package/src/linked-list/__tests__/insert-linked-list.test.ts +186 -0
  100. package/src/linked-list/__tests__/linked-list-utils.test.ts +252 -0
  101. package/src/linked-list/__tests__/reduce-linked-list.test.ts +31 -0
  102. package/src/linked-list/__tests__/remove-linked-list.test.ts +129 -0
  103. package/src/linked-list/__tests__/update-linked-list.test.ts +53 -0
  104. package/src/linked-list/__tests__/while-linked-list.test.ts +58 -0
  105. package/src/linked-list/apply-diff-linked-list.ts +35 -0
  106. package/src/linked-list/create-linked-list.ts +79 -0
  107. package/src/linked-list/find-linked-list.ts +26 -0
  108. package/src/linked-list/get-linked-list.ts +9 -0
  109. package/src/linked-list/index.ts +2 -0
  110. package/src/linked-list/insert-linked-list.ts +50 -0
  111. package/src/linked-list/linked-list-utils.ts +143 -0
  112. package/src/linked-list/reduce-linked-list.ts +18 -0
  113. package/src/linked-list/remove-linked-list.ts +36 -0
  114. package/src/linked-list/type.ts +38 -0
  115. package/src/linked-list/update-linked-list.ts +30 -0
  116. package/src/linked-list/while-linked-list.ts +33 -0
  117. package/src/math/__tests__/clamp-number.test.ts +30 -0
  118. package/src/math/__tests__/interpolate.test.ts +28 -0
  119. package/src/math/__tests__/median.test.ts +27 -0
  120. package/src/math/__tests__/number-range.test.ts +59 -0
  121. package/src/math/__tests__/random-number.test.ts +11 -0
  122. package/src/math/clamp-number.ts +8 -0
  123. package/src/math/index.ts +5 -0
  124. package/src/math/interpolate.ts +18 -0
  125. package/src/math/median.ts +21 -0
  126. package/src/math/number-range.ts +16 -0
  127. package/src/math/random-number.ts +10 -0
  128. package/src/object/__tests__/merge-deep.test.ts +56 -0
  129. package/src/object/__tests__/strip-properties-from-object.test.ts +65 -0
  130. package/src/object/index.ts +2 -0
  131. package/src/object/merge-deep.ts +26 -0
  132. package/src/object/strip-properties-from-object.ts +26 -0
  133. package/src/parsing/__tests__/parse-boolean.test.ts +15 -0
  134. package/src/parsing/__tests__/parse-enum.test.ts +19 -0
  135. package/src/parsing/__tests__/parse-number.test.ts +20 -0
  136. package/src/parsing/index.ts +3 -0
  137. package/src/parsing/parse-boolean.ts +10 -0
  138. package/src/parsing/parse-enum.ts +16 -0
  139. package/src/parsing/parse-number.ts +12 -0
  140. package/src/predicates/__tests__/is-function.test.ts +11 -0
  141. package/src/predicates/__tests__/is-null.test.ts +11 -0
  142. package/src/predicates/__tests__/is-object.test.ts +11 -0
  143. package/src/predicates/__tests__/is-primitive.test.ts +42 -0
  144. package/src/predicates/__tests__/is-undefined.test.ts +11 -0
  145. package/src/predicates/__tests__/is-uuid.test.ts +13 -0
  146. package/src/predicates/index.ts +5 -0
  147. package/src/predicates/is-function.ts +3 -0
  148. package/src/predicates/is-null.ts +1 -0
  149. package/src/predicates/is-object.ts +3 -0
  150. package/src/predicates/is-primitive.ts +19 -0
  151. package/src/predicates/is-undefined.ts +3 -0
  152. package/src/predicates/is-uuid.ts +3 -0
  153. package/src/promise/__tests__/delay.test.ts +13 -0
  154. package/src/promise/__tests__/execute-or-resolve-default.test.ts +25 -0
  155. package/src/promise/__tests__/execute-with-delay.test.ts +24 -0
  156. package/src/promise/delay.ts +3 -0
  157. package/src/promise/execute-or-resolve-default.ts +14 -0
  158. package/src/promise/execute-with-delay.ts +6 -0
  159. package/src/promise/index.ts +3 -0
  160. package/src/string/__tests__/is-string-length-within-range.test.ts +23 -0
  161. package/src/string/__tests__/replace-in-template.test.ts +52 -0
  162. package/src/string/index.ts +2 -0
  163. package/src/string/is-string-length-within-range.ts +10 -0
  164. package/src/string/replace-in-template.ts +45 -0
  165. package/src/time/__tests__/convert.test.ts +14 -0
  166. package/src/time/__tests__/format-minutes.test.ts +10 -0
  167. package/src/time/__tests__/get-time-diff-as-string.test.ts +128 -0
  168. package/src/time/constants.ts +4 -0
  169. package/src/time/convert.ts +5 -0
  170. package/src/time/format-minutes.ts +9 -0
  171. package/src/time/get-time-diff-as-string.ts +196 -0
  172. package/src/time/index.ts +4 -0
  173. package/src/types/function.ts +1 -0
  174. package/src/types/general.ts +15 -0
  175. package/src/types/index.ts +4 -0
  176. package/src/types/object.ts +33 -0
  177. package/src/types/search.ts +29 -0
  178. package/tsconfig.json +25 -0
  179. package/yarn.lock +4040 -0
  180. package/cdn/types/cdn-factory.type.d.ts +0 -37
  181. package/color/get-contrast-color.d.ts +0 -1
  182. package/color/get-contrast-color.js +0 -21
  183. package/color/get-contrast-color.js.map +0 -1
  184. package/color/index.d.ts +0 -1
  185. package/color/index.js +0 -10
  186. package/linked-list/index.js.map +0 -1
  187. package/types/function.d.ts +0 -1
  188. package/types/general.d.ts +0 -8
  189. package/types/search.d.ts +0 -24
  190. /package/{array → dist/array}/array-to-map.js +0 -0
  191. /package/{array → dist/array}/array-to-map.js.map +0 -0
  192. /package/{array → dist/array}/get-values-from-keys.d.ts +0 -0
  193. /package/{array → dist/array}/get-values-from-keys.js +0 -0
  194. /package/{array → dist/array}/get-values-from-keys.js.map +0 -0
  195. /package/{array → dist/array}/index.d.ts +0 -0
  196. /package/{array → dist/array}/index.js +0 -0
  197. /package/{array → dist/array}/index.js.map +0 -0
  198. /package/{array → dist/array}/inner-join.d.ts +0 -0
  199. /package/{array → dist/array}/inner-join.js +0 -0
  200. /package/{array → dist/array}/inner-join.js.map +0 -0
  201. /package/{array → dist/array}/left-outter-join.d.ts +0 -0
  202. /package/{array → dist/array}/left-outter-join.js +0 -0
  203. /package/{array → dist/array}/left-outter-join.js.map +0 -0
  204. /package/{cdn → dist/business}/types/index.js +0 -0
  205. /package/{cdn → dist/business}/types/index.js.map +0 -0
  206. /package/{cdn → dist/cdn}/cdn.factory.d.ts +0 -0
  207. /package/{cdn → dist/cdn}/cdn.factory.js +0 -0
  208. /package/{cdn → dist/cdn}/cdn.factory.js.map +0 -0
  209. /package/{cdn → dist/cdn}/index.d.ts +0 -0
  210. /package/{cdn → dist/cdn}/index.js +0 -0
  211. /package/{cdn → dist/cdn}/index.js.map +0 -0
  212. /package/{cdn → dist/cdn}/types/index.d.ts +0 -0
  213. /package/{types → dist/cdn/types}/index.js +0 -0
  214. /package/{types → dist/cdn/types}/index.js.map +0 -0
  215. /package/{cdn → dist/cdn}/utils/extract-info-from-url.util.js +0 -0
  216. /package/{cdn → dist/cdn}/utils/extract-info-from-url.util.js.map +0 -0
  217. /package/{cdn → dist/cdn}/utils/get-cdn-from-s3-url.util.js +0 -0
  218. /package/{cdn → dist/cdn}/utils/get-cdn-from-s3-url.util.js.map +0 -0
  219. /package/{cdn → dist/cdn}/utils/get-cdn-url.util.js +0 -0
  220. /package/{cdn → dist/cdn}/utils/get-cdn-url.util.js.map +0 -0
  221. /package/{cdn → dist/cdn}/utils/twicpics-transformations.util.d.ts +0 -0
  222. /package/{cdn → dist/cdn}/utils/twicpics-transformations.util.js +0 -0
  223. /package/{cdn → dist/cdn}/utils/twicpics-transformations.util.js.map +0 -0
  224. /package/{formatting → dist/formatting}/format-number.d.ts +0 -0
  225. /package/{formatting → dist/formatting}/format-number.js +0 -0
  226. /package/{formatting → dist/formatting}/format-number.js.map +0 -0
  227. /package/{formatting → dist/formatting}/index.d.ts +0 -0
  228. /package/{formatting → dist/formatting}/index.js +0 -0
  229. /package/{color → dist/formatting}/index.js.map +0 -0
  230. /package/{fp → dist/fp}/index.d.ts +0 -0
  231. /package/{fp → dist/fp}/index.js +0 -0
  232. /package/{formatting → dist/fp}/index.js.map +0 -0
  233. /package/{fp → dist/fp}/run-while.js +0 -0
  234. /package/{fp → dist/fp}/run-while.js.map +0 -0
  235. /package/{http → dist/http}/build-search-params.d.ts +0 -0
  236. /package/{http → dist/http}/build-search-params.js +0 -0
  237. /package/{http → dist/http}/build-search-params.js.map +0 -0
  238. /package/{http → dist/http}/encode-search-object.js +0 -0
  239. /package/{http → dist/http}/encode-search-object.js.map +0 -0
  240. /package/{http → dist/http}/fetch-with-timeout.js +0 -0
  241. /package/{http → dist/http}/fetch-with-timeout.js.map +0 -0
  242. /package/{http → dist/http}/index.d.ts +0 -0
  243. /package/{http → dist/http}/index.js +0 -0
  244. /package/{http → dist/http}/index.js.map +0 -0
  245. /package/{linked-list → dist/linked-list}/apply-diff-linked-list.d.ts +0 -0
  246. /package/{linked-list → dist/linked-list}/apply-diff-linked-list.js +0 -0
  247. /package/{linked-list → dist/linked-list}/apply-diff-linked-list.js.map +0 -0
  248. /package/{linked-list → dist/linked-list}/create-linked-list.d.ts +0 -0
  249. /package/{linked-list → dist/linked-list}/create-linked-list.js +0 -0
  250. /package/{linked-list → dist/linked-list}/create-linked-list.js.map +0 -0
  251. /package/{linked-list → dist/linked-list}/find-linked-list.d.ts +0 -0
  252. /package/{linked-list → dist/linked-list}/find-linked-list.js +0 -0
  253. /package/{linked-list → dist/linked-list}/find-linked-list.js.map +0 -0
  254. /package/{linked-list → dist/linked-list}/get-linked-list.d.ts +0 -0
  255. /package/{linked-list → dist/linked-list}/get-linked-list.js +0 -0
  256. /package/{linked-list → dist/linked-list}/get-linked-list.js.map +0 -0
  257. /package/{linked-list → dist/linked-list}/index.d.ts +0 -0
  258. /package/{linked-list → dist/linked-list}/index.js +0 -0
  259. /package/{fp → dist/linked-list}/index.js.map +0 -0
  260. /package/{linked-list → dist/linked-list}/insert-linked-list.d.ts +0 -0
  261. /package/{linked-list → dist/linked-list}/insert-linked-list.js +0 -0
  262. /package/{linked-list → dist/linked-list}/insert-linked-list.js.map +0 -0
  263. /package/{linked-list → dist/linked-list}/linked-list-utils.js +0 -0
  264. /package/{linked-list → dist/linked-list}/linked-list-utils.js.map +0 -0
  265. /package/{linked-list → dist/linked-list}/reduce-linked-list.d.ts +0 -0
  266. /package/{linked-list → dist/linked-list}/reduce-linked-list.js +0 -0
  267. /package/{linked-list → dist/linked-list}/reduce-linked-list.js.map +0 -0
  268. /package/{linked-list → dist/linked-list}/remove-linked-list.d.ts +0 -0
  269. /package/{linked-list → dist/linked-list}/remove-linked-list.js +0 -0
  270. /package/{linked-list → dist/linked-list}/remove-linked-list.js.map +0 -0
  271. /package/{linked-list → dist/linked-list}/update-linked-list.d.ts +0 -0
  272. /package/{linked-list → dist/linked-list}/update-linked-list.js +0 -0
  273. /package/{linked-list → dist/linked-list}/update-linked-list.js.map +0 -0
  274. /package/{linked-list → dist/linked-list}/while-linked-list.d.ts +0 -0
  275. /package/{linked-list → dist/linked-list}/while-linked-list.js +0 -0
  276. /package/{linked-list → dist/linked-list}/while-linked-list.js.map +0 -0
  277. /package/{math → dist/math}/clamp-number.d.ts +0 -0
  278. /package/{math → dist/math}/clamp-number.js +0 -0
  279. /package/{math → dist/math}/clamp-number.js.map +0 -0
  280. /package/{math → dist/math}/index.d.ts +0 -0
  281. /package/{math → dist/math}/index.js +0 -0
  282. /package/{math → dist/math}/index.js.map +0 -0
  283. /package/{math → dist/math}/interpolate.js +0 -0
  284. /package/{math → dist/math}/interpolate.js.map +0 -0
  285. /package/{math → dist/math}/median.d.ts +0 -0
  286. /package/{math → dist/math}/median.js +0 -0
  287. /package/{math → dist/math}/median.js.map +0 -0
  288. /package/{math → dist/math}/number-range.js +0 -0
  289. /package/{math → dist/math}/number-range.js.map +0 -0
  290. /package/{math → dist/math}/random-number.d.ts +0 -0
  291. /package/{math → dist/math}/random-number.js +0 -0
  292. /package/{math → dist/math}/random-number.js.map +0 -0
  293. /package/{object → dist/object}/index.d.ts +0 -0
  294. /package/{object → dist/object}/index.js +0 -0
  295. /package/{object → dist/object}/index.js.map +0 -0
  296. /package/{object → dist/object}/merge-deep.d.ts +0 -0
  297. /package/{object → dist/object}/merge-deep.js +0 -0
  298. /package/{object → dist/object}/merge-deep.js.map +0 -0
  299. /package/{object → dist/object}/strip-properties-from-object.d.ts +0 -0
  300. /package/{object → dist/object}/strip-properties-from-object.js +0 -0
  301. /package/{object → dist/object}/strip-properties-from-object.js.map +0 -0
  302. /package/{parsing → dist/parsing}/index.d.ts +0 -0
  303. /package/{parsing → dist/parsing}/index.js +0 -0
  304. /package/{parsing → dist/parsing}/index.js.map +0 -0
  305. /package/{parsing → dist/parsing}/parse-boolean.d.ts +0 -0
  306. /package/{parsing → dist/parsing}/parse-boolean.js +0 -0
  307. /package/{parsing → dist/parsing}/parse-boolean.js.map +0 -0
  308. /package/{parsing → dist/parsing}/parse-enum.d.ts +0 -0
  309. /package/{parsing → dist/parsing}/parse-enum.js +0 -0
  310. /package/{parsing → dist/parsing}/parse-enum.js.map +0 -0
  311. /package/{parsing → dist/parsing}/parse-number.d.ts +0 -0
  312. /package/{parsing → dist/parsing}/parse-number.js +0 -0
  313. /package/{parsing → dist/parsing}/parse-number.js.map +0 -0
  314. /package/{predicates → dist/predicates}/index.d.ts +0 -0
  315. /package/{predicates → dist/predicates}/index.js +0 -0
  316. /package/{predicates → dist/predicates}/index.js.map +0 -0
  317. /package/{predicates → dist/predicates}/is-function.d.ts +0 -0
  318. /package/{predicates → dist/predicates}/is-function.js +0 -0
  319. /package/{predicates → dist/predicates}/is-function.js.map +0 -0
  320. /package/{predicates → dist/predicates}/is-null.d.ts +0 -0
  321. /package/{predicates → dist/predicates}/is-null.js +0 -0
  322. /package/{predicates → dist/predicates}/is-null.js.map +0 -0
  323. /package/{predicates → dist/predicates}/is-object.d.ts +0 -0
  324. /package/{predicates → dist/predicates}/is-object.js +0 -0
  325. /package/{predicates → dist/predicates}/is-object.js.map +0 -0
  326. /package/{predicates → dist/predicates}/is-primitive.d.ts +0 -0
  327. /package/{predicates → dist/predicates}/is-primitive.js +0 -0
  328. /package/{predicates → dist/predicates}/is-primitive.js.map +0 -0
  329. /package/{predicates → dist/predicates}/is-undefined.d.ts +0 -0
  330. /package/{predicates → dist/predicates}/is-undefined.js +0 -0
  331. /package/{predicates → dist/predicates}/is-undefined.js.map +0 -0
  332. /package/{predicates → dist/predicates}/is-uuid.d.ts +0 -0
  333. /package/{promise → dist/promise}/delay.d.ts +0 -0
  334. /package/{promise → dist/promise}/delay.js +0 -0
  335. /package/{promise → dist/promise}/delay.js.map +0 -0
  336. /package/{promise → dist/promise}/execute-or-resolve-default.js +0 -0
  337. /package/{promise → dist/promise}/execute-or-resolve-default.js.map +0 -0
  338. /package/{promise → dist/promise}/execute-with-delay.d.ts +0 -0
  339. /package/{promise → dist/promise}/execute-with-delay.js +0 -0
  340. /package/{promise → dist/promise}/execute-with-delay.js.map +0 -0
  341. /package/{promise → dist/promise}/index.d.ts +0 -0
  342. /package/{promise → dist/promise}/index.js +0 -0
  343. /package/{promise → dist/promise}/index.js.map +0 -0
  344. /package/{string → dist/string}/index.d.ts +0 -0
  345. /package/{string → dist/string}/index.js +0 -0
  346. /package/{string → dist/string}/index.js.map +0 -0
  347. /package/{string → dist/string}/is-string-length-within-range.d.ts +0 -0
  348. /package/{string → dist/string}/is-string-length-within-range.js +0 -0
  349. /package/{string → dist/string}/is-string-length-within-range.js.map +0 -0
  350. /package/{string → dist/string}/replace-in-template.js +0 -0
  351. /package/{string → dist/string}/replace-in-template.js.map +0 -0
  352. /package/{time → dist/time}/constants.d.ts +0 -0
  353. /package/{time → dist/time}/constants.js +0 -0
  354. /package/{time → dist/time}/constants.js.map +0 -0
  355. /package/{time → dist/time}/convert.d.ts +0 -0
  356. /package/{time → dist/time}/convert.js +0 -0
  357. /package/{time → dist/time}/convert.js.map +0 -0
  358. /package/{time → dist/time}/format-minutes.d.ts +0 -0
  359. /package/{time → dist/time}/format-minutes.js +0 -0
  360. /package/{time → dist/time}/format-minutes.js.map +0 -0
  361. /package/{time → dist/time}/get-time-diff-as-string.js +0 -0
  362. /package/{time → dist/time}/get-time-diff-as-string.js.map +0 -0
  363. /package/{time → dist/time}/index.d.ts +0 -0
  364. /package/{time → dist/time}/index.js +0 -0
  365. /package/{time → dist/time}/index.js.map +0 -0
  366. /package/{types → dist/types}/index.d.ts +0 -0
@@ -1,5 +1,5 @@
1
1
  import type { GetCdnFromS3Url, GetCdnUrl } from '../types';
2
- declare type FactoryConfig = {
2
+ type FactoryConfig = {
3
3
  getCdnUrl: GetCdnUrl;
4
4
  };
5
5
  export declare function getCdnFromS3UrlFactory(config: FactoryConfig): GetCdnFromS3Url;
@@ -1,5 +1,5 @@
1
1
  import type { GetCdnUrl, InstanceMapper, TransformationQueries } from '../types';
2
- declare type FactoryConfig = {
2
+ type FactoryConfig = {
3
3
  domain: `https://${string}`;
4
4
  instanceMapper: InstanceMapper;
5
5
  transformationQueries: TransformationQueries;
@@ -1,4 +1,4 @@
1
- export declare type RunWhileConfig<T> = {
1
+ export type RunWhileConfig<T> = {
2
2
  /**
3
3
  * Return a boolean to keep running the callback or not.
4
4
  */
@@ -17,7 +17,7 @@ export declare type RunWhileConfig<T> = {
17
17
  */
18
18
  initialValue: T;
19
19
  };
20
- export declare type RunWhileFn = <T>(config: RunWhileConfig<T>) => {
20
+ export type RunWhileFn = <T>(config: RunWhileConfig<T>) => {
21
21
  /**
22
22
  * The callback last result.
23
23
  */
@@ -1,5 +1,5 @@
1
1
  import { SearchObject } from '../types';
2
- export declare type EncodingConfig = {
2
+ export type EncodingConfig = {
3
3
  keyValueDelimiter: string;
4
4
  pairDelimiter: string;
5
5
  };
@@ -1,4 +1,4 @@
1
- export declare type RequestInitWithTimeout = RequestInit & {
1
+ export type RequestInitWithTimeout = RequestInit & {
2
2
  timeout?: number;
3
3
  };
4
4
  /**
@@ -12,4 +12,3 @@ export * from './predicates';
12
12
  export * from './promise';
13
13
  export * from './string';
14
14
  export * from './types';
15
- export * from './color';
@@ -37,7 +37,6 @@ var executeWithDelay = require('./promise/execute-with-delay.js');
37
37
  var delay = require('./promise/delay.js');
38
38
  var replaceInTemplate = require('./string/replace-in-template.js');
39
39
  var isStringLengthWithinRange = require('./string/is-string-length-within-range.js');
40
- var getContrastColor = require('./color/get-contrast-color.js');
41
40
 
42
41
 
43
42
 
@@ -83,5 +82,4 @@ exports.executeWithDelay = executeWithDelay.executeWithDelay;
83
82
  exports.delay = delay.delay;
84
83
  exports.replaceInTemplate = replaceInTemplate.replaceInTemplate;
85
84
  exports.isStringLengthWithinRange = isStringLengthWithinRange.isStringLengthWithinRange;
86
- exports.getContrastColor = getContrastColor.getContrastColor;
87
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,21 +1,21 @@
1
1
  import { LinkedListFormat, LinkedListItem, SimpleLinkedList } from './type';
2
- export declare type WalkConfig<T extends LinkedListItem, Result> = {
2
+ export type WalkConfig<T extends LinkedListItem, Result> = {
3
3
  startId: string | null;
4
4
  items: Record<string, T>;
5
5
  initValue: Result;
6
6
  };
7
- declare type WalkCallbackResult<R> = {
7
+ type WalkCallbackResult<R> = {
8
8
  result: R;
9
9
  control?: {
10
10
  stop?: boolean;
11
11
  };
12
12
  };
13
- export declare type WalkCallback<Item, Result> = (accumulator: Result, current: Item) => WalkCallbackResult<Result>;
13
+ export type WalkCallback<Item, Result> = (accumulator: Result, current: Item) => WalkCallbackResult<Result>;
14
14
  export declare const walkListItemRecord: <T extends LinkedListItem, Result>(callback: WalkCallback<T, Result>, config: WalkConfig<T, Result>) => Result;
15
15
  export declare const findPreviousId: <T extends LinkedListItem>(id: string | null, list: SimpleLinkedList<T>) => string | null;
16
16
  export declare const assertItemCompatibility: <T extends LinkedListItem>(item: T, format: LinkedListFormat | null) => void;
17
17
  export declare const assertPresence: (id: string | null | undefined, items: Record<string, unknown>) => void;
18
- declare type PositionAssertionConfig = {
18
+ type PositionAssertionConfig = {
19
19
  previousId: string | null;
20
20
  list: SimpleLinkedList<LinkedListItem>;
21
21
  };
@@ -1,23 +1,23 @@
1
- export declare type LinkedListItem = {
1
+ export type LinkedListItem = {
2
2
  id: string;
3
3
  nextId: string | null;
4
4
  previousId?: string | null;
5
5
  };
6
- export declare type SimpleLinkedList<T extends LinkedListItem> = {
6
+ export type SimpleLinkedList<T extends LinkedListItem> = {
7
7
  headId: string | null;
8
8
  items: {
9
9
  [id: string]: T;
10
10
  };
11
11
  };
12
- export declare type ReduceCallback<Item, Result> = (accumulator: Result, current: Item) => Result;
13
- export declare type ItemPredicate<Item> = (item: Item) => boolean;
14
- export declare type LinkedListFormat = 'double' | 'single';
15
- export declare type ManipulationConfig<T extends LinkedListItem> = {
12
+ export type ReduceCallback<Item, Result> = (accumulator: Result, current: Item) => Result;
13
+ export type ItemPredicate<Item> = (item: Item) => boolean;
14
+ export type LinkedListFormat = 'double' | 'single';
15
+ export type ManipulationConfig<T extends LinkedListItem> = {
16
16
  format: LinkedListFormat | null;
17
17
  list: SimpleLinkedList<T>;
18
18
  factory: (list: SimpleLinkedList<T>) => LinkedList<T>;
19
19
  };
20
- export declare type LinkedList<T extends LinkedListItem> = {
20
+ export type LinkedList<T extends LinkedListItem> = {
21
21
  readonly head: T | null;
22
22
  readonly items: {
23
23
  [id: string]: T;
@@ -1,2 +1,2 @@
1
- export declare type RangeArray = [number, number];
1
+ export type RangeArray = [number, number];
2
2
  export declare const interpolate: (num: number, inputRange: RangeArray, outputRange: RangeArray) => number;
@@ -1,4 +1,4 @@
1
- export declare type NumberRange = {
1
+ export type NumberRange = {
2
2
  min: number;
3
3
  max: number;
4
4
  };
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@sparted/shared-library",
3
+ "version": "1.0.28",
4
+ "repository": "git@github.com:Sparted/shared-library.git",
5
+ "author": {
6
+ "name": "Sparted",
7
+ "email": "developer@sparted.com",
8
+ "url": "https://www.sparted.com"
9
+ },
10
+ "license": "MIT",
11
+ "sideEffets": false,
12
+ "main": "cjs/index.js",
13
+ "files": [
14
+ "**/*",
15
+ "**/**"
16
+ ],
17
+ "scripts": {
18
+ "test": "jest",
19
+ "lint": "eslint .",
20
+ "clean": "rm -rf ./dist",
21
+ "build": "yarn clean && rollup --config rollup.config.ts --configPlugin typescript2 && cp package.json ./dist/package.json",
22
+ "build-and-publish": "yarn test && yarn build && (cd ./dist && NPM_CONFIG_REGISTRY=undefined npm publish)"
23
+ },
24
+ "devDependencies": {
25
+ "@types/glob": "^8.0.0",
26
+ "@types/jest": "^29.0.3",
27
+ "@types/ungap__structured-clone": "^0.3.0",
28
+ "@typescript-eslint/eslint-plugin": "^6.0.0",
29
+ "@typescript-eslint/parser": "^6.0.0",
30
+ "eslint": "^7.32.0",
31
+ "eslint-config-prettier": "^8.8.0",
32
+ "eslint-plugin-import": "^2.27.5",
33
+ "eslint-plugin-prettier": "^4.2.1",
34
+ "glob": "^8.0.3",
35
+ "jest": "^29.6.1",
36
+ "jest-environment-jsdom": "^29.0.3",
37
+ "jest-extended": "^3.1.0",
38
+ "jest-fetch-mock": "^3.0.3",
39
+ "prettier": "2",
40
+ "rollup": "^2.79.1",
41
+ "rollup-plugin-typescript2": "^0.34.0",
42
+ "ts-jest": "^29.0.2",
43
+ "tslib": "^2.4.0",
44
+ "typescript": "^4.8.3"
45
+ },
46
+ "jest": {
47
+ "moduleFileExtensions": [
48
+ "js",
49
+ "ts"
50
+ ],
51
+ "setupFilesAfterEnv": [
52
+ "jest-extended/all"
53
+ ],
54
+ "rootDir": ".",
55
+ "testRegex": [
56
+ ".*\\.test\\.ts$"
57
+ ],
58
+ "transform": {
59
+ "^.+\\.(t|j)s$": "ts-jest"
60
+ }
61
+ },
62
+ "dependencies": {
63
+ "@ungap/structured-clone": "^1.2.0"
64
+ }
65
+ }
@@ -1,4 +1,4 @@
1
- export declare type ExecutionConfig<Default> = {
1
+ export type ExecutionConfig<Default> = {
2
2
  execute: boolean;
3
3
  defaultValue: Default;
4
4
  };
@@ -1,4 +1,4 @@
1
- export declare type ReplaceConfig = {
1
+ export type ReplaceConfig = {
2
2
  delimiter: string | {
3
3
  left: string;
4
4
  right: string;
@@ -1,4 +1,4 @@
1
- export declare type MonthLocaleLabels = [
1
+ export type MonthLocaleLabels = [
2
2
  string,
3
3
  string,
4
4
  string,
@@ -12,7 +12,7 @@ export declare type MonthLocaleLabels = [
12
12
  string,
13
13
  string
14
14
  ];
15
- export declare type DiffTemplate = {
15
+ export type DiffTemplate = {
16
16
  /**
17
17
  * e.g.: ("%time% %timelabel% blabla")
18
18
  */
@@ -0,0 +1 @@
1
+ export type GenericFunction<TS extends any[], R> = (...args: TS) => R;
@@ -0,0 +1,8 @@
1
+ export type Primitive = string | number | boolean;
2
+ export type Nullable<T> = T | null;
3
+ export type ValueType = Primitive | null | void | Array<any> | ReadonlyArray<any>;
4
+ export type ValueOf<T> = T[keyof T];
5
+ export type Range = {
6
+ min: number;
7
+ max: number;
8
+ };
@@ -0,0 +1,3 @@
1
+ 'use strict';
2
+
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;"}
@@ -1,30 +1,30 @@
1
1
  import { ValueType } from './general';
2
- export declare type NonMethodKeys<T> = {
2
+ export type NonMethodKeys<T> = {
3
3
  [P in keyof T]: T[P] extends Function ? never : P;
4
4
  }[keyof T];
5
- export declare type Attributes<T> = {
5
+ export type Attributes<T> = {
6
6
  [K in NonMethodKeys<T>]: T[K];
7
7
  };
8
- export declare type PartialAttributes<T> = {
8
+ export type PartialAttributes<T> = {
9
9
  [K in NonMethodKeys<T>]?: T[K];
10
10
  };
11
- export declare type MethodKeys<T> = {
11
+ export type MethodKeys<T> = {
12
12
  [P in keyof T]: T[P] extends Function ? P : never;
13
13
  }[keyof T];
14
- export declare type Methods<T> = {
14
+ export type Methods<T> = {
15
15
  [K in MethodKeys<T>]: T[K];
16
16
  };
17
- export declare type PartialMethods<T> = {
17
+ export type PartialMethods<T> = {
18
18
  [K in MethodKeys<T>]?: T[K];
19
19
  };
20
- export declare type ClassType<T, Params extends Array<any> = Array<any>> = {
20
+ export type ClassType<T, Params extends Array<any> = Array<any>> = {
21
21
  new (...args: Params): T;
22
22
  };
23
- export declare type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
24
- export declare type DeepPartial<T> = T extends ValueType ? T : {
23
+ export type PartialBy<T, K extends keyof T> = Omit<T, K> & Partial<Pick<T, K>>;
24
+ export type DeepPartial<T> = T extends ValueType ? T : {
25
25
  [P in keyof T]?: DeepPartial<T[P]>;
26
26
  };
27
- export declare type Intersection<A, B> = {
27
+ export type Intersection<A, B> = {
28
28
  [P in keyof A & keyof B]: A[P] | B[P];
29
29
  };
30
30
  /**
@@ -32,4 +32,4 @@ export declare type Intersection<A, B> = {
32
32
  * "widen" the type by accident if it is a generic that should be inferred
33
33
  * from elsewhere.
34
34
  */
35
- export declare type NoInfer<T> = [T][T extends any ? 0 : never];
35
+ export type NoInfer<T> = [T][T extends any ? 0 : never];
@@ -0,0 +1,24 @@
1
+ export type SearchSortBy = string;
2
+ export type SearchSortOrder = 'asc' | 'desc';
3
+ export type SearchSort = {
4
+ [by: SearchSortBy]: SearchSortOrder;
5
+ };
6
+ export type SearchQueryProperty = string;
7
+ export type SearchQueryValue = string;
8
+ export type SearchQuery = {
9
+ [property: SearchQueryProperty]: SearchQueryValue;
10
+ };
11
+ export type SearchObject = {
12
+ offset: number;
13
+ limit: number;
14
+ sort?: Record<string, SearchSortOrder>;
15
+ query?: SearchQuery;
16
+ };
17
+ export type SearchResponse<T> = {
18
+ items: ReadonlyArray<T>;
19
+ offset: number;
20
+ limit: number;
21
+ total: number;
22
+ next: string | null;
23
+ previous: string | null;
24
+ };
package/global.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ // eslint-disable-next-line import/no-extraneous-dependencies -- only needed during development
2
+ import 'jest-extended';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sparted/shared-library",
3
- "version": "1.0.29",
3
+ "version": "1.1.0-rc0",
4
4
  "repository": "git@github.com:Sparted/shared-library.git",
5
5
  "author": {
6
6
  "name": "Sparted",
@@ -9,8 +9,7 @@
9
9
  },
10
10
  "license": "MIT",
11
11
  "sideEffets": false,
12
- "main": "index.js",
13
- "module": "index.js",
12
+ "main": "cjs/index.js",
14
13
  "files": [
15
14
  "**/*",
16
15
  "**/**"
@@ -0,0 +1,19 @@
1
+ import { glob } from 'glob';
2
+ import typescript from 'rollup-plugin-typescript2';
3
+
4
+ export default {
5
+ input: glob.sync('./src/**/index.ts'),
6
+ plugins: [
7
+ typescript({
8
+ exclude: ['**/__tests__', '**/*.test.ts'],
9
+ }),
10
+ ],
11
+ output: [
12
+ {
13
+ dir: 'dist',
14
+ format: 'cjs',
15
+ sourcemap: true,
16
+ preserveModules: true, // Keep directory structure and files
17
+ },
18
+ ],
19
+ };
@@ -0,0 +1,50 @@
1
+ import { arrayToMap } from '../array-to-map';
2
+
3
+ type Item = {
4
+ id: string,
5
+ bar: number,
6
+ };
7
+
8
+ describe('arrayToMap', () => {
9
+ it('should convert array to map with item containing one key', () => {
10
+ const array = [{ id: 'toto' }, { id: 'bonjour' }];
11
+ const map = arrayToMap(array, { selectKey: ({ id }) => id });
12
+
13
+ expect(map).toStrictEqual({
14
+ bonjour: { id: 'bonjour' },
15
+ toto: { id: 'toto' },
16
+ });
17
+ });
18
+
19
+ it('should convert array to map and select right key in item', () => {
20
+ const array = [{ id: 'toto', bar: 1 }, { id: 'bonjour', bar: 2 }];
21
+ const map = arrayToMap(array, { selectKey: ({ bar }) => bar.toString() });
22
+
23
+ expect(map).toStrictEqual({
24
+ 1: { id: 'toto', bar: 1 },
25
+ 2: { id: 'bonjour', bar: 2 },
26
+ });
27
+ });
28
+
29
+ it('should handle data transformation', () => {
30
+ const item1: Item = { id: 'toto', bar: 1 };
31
+ const item2: Item = { id: 'bonjour', bar: 2 };
32
+ const array = [item1, item2];
33
+
34
+ const modifierFn = jest.fn();
35
+ const map = arrayToMap<Item, string>(array, {
36
+ selectKey: ({ bar }) => bar.toString(),
37
+ dataModifier: ({ id }, currentMap) => {
38
+ modifierFn(currentMap);
39
+ return id;
40
+ },
41
+ });
42
+
43
+ expect(modifierFn).toHaveBeenNthCalledWith(1, {});
44
+ expect(modifierFn).toHaveBeenNthCalledWith(2, { 1: 'toto' });
45
+ expect(map).toStrictEqual({
46
+ 1: 'toto',
47
+ 2: 'bonjour',
48
+ });
49
+ });
50
+ });
@@ -0,0 +1,14 @@
1
+ import { valuesFromKeys } from '../get-values-from-keys';
2
+
3
+ describe('valuesFromKeys', () => {
4
+ it('should transform a map to an array with only selected keys', () => {
5
+ const map = {
6
+ uno: 1,
7
+ dos: 2,
8
+ tres: 3,
9
+ quatro: 4,
10
+ };
11
+
12
+ expect(valuesFromKeys(['uno', 'tres'], map)).toStrictEqual([1, 3]);
13
+ });
14
+ });
@@ -0,0 +1,55 @@
1
+ import { innerJoin } from '../inner-join';
2
+
3
+ describe('innerJoin', () => {
4
+ it('should return an inner join of simple arrays', () => {
5
+ const arr1 = [1, 2, 3];
6
+ const arr2 = [3, 4, 5];
7
+
8
+ const innerJoinedArr = innerJoin(
9
+ arr1,
10
+ arr2,
11
+ (item) => item,
12
+ (item) => item,
13
+ );
14
+
15
+ expect(innerJoinedArr).toEqual([3]);
16
+ });
17
+
18
+ it('should return an inner join of complex array', () => {
19
+ const arr1 = [
20
+ { id: 1, name: 'John' },
21
+ { id: 2, name: 'Doe' },
22
+ { id: 3, name: 'Jane' },
23
+ { id: 4, name: 'Jack' },
24
+ { id: 5, name: 'Jill' },
25
+ { id: 6, name: 'Maurice' },
26
+ ];
27
+ const arr2 = [
28
+ { id: 3, name: 'Jane' },
29
+ { id: 4, name: 'Jack' },
30
+ { id: 5, name: 'Jill' },
31
+ ];
32
+
33
+ const innerJoinedArr = innerJoin(
34
+ arr1,
35
+ arr2,
36
+ (item) => item.id,
37
+ (item) => item.id,
38
+ );
39
+
40
+ expect(innerJoinedArr).toEqual([
41
+ {
42
+ id: 3,
43
+ name: 'Jane',
44
+ },
45
+ {
46
+ id: 4,
47
+ name: 'Jack',
48
+ },
49
+ {
50
+ id: 5,
51
+ name: 'Jill',
52
+ },
53
+ ]);
54
+ });
55
+ });
@@ -0,0 +1,55 @@
1
+ import { leftOutterJoin } from '../left-outter-join';
2
+
3
+ describe('leftOutterJoin', () => {
4
+ it('should return left outter joined of simple arrays', () => {
5
+ const arr1 = [1, 2, 3];
6
+ const arr2 = [3, 4, 5];
7
+
8
+ const leftOutterJoinedArr = leftOutterJoin(
9
+ arr1,
10
+ arr2,
11
+ (item) => item,
12
+ (item) => item,
13
+ );
14
+
15
+ expect(leftOutterJoinedArr).toEqual([1, 2]);
16
+ });
17
+
18
+ it('should return left outter joined of complex array', () => {
19
+ const arr1 = [
20
+ { id: 1, name: 'John' },
21
+ { id: 2, name: 'Doe' },
22
+ { id: 3, name: 'Jane' },
23
+ { id: 4, name: 'Jack' },
24
+ { id: 5, name: 'Jill' },
25
+ { id: 6, name: 'Maurice' },
26
+ ];
27
+ const arr2 = [
28
+ { id: 3, name: 'Jane' },
29
+ { id: 4, name: 'Jack' },
30
+ { id: 5, name: 'Jill' },
31
+ ];
32
+
33
+ const leftOutterJoinedArr = leftOutterJoin(
34
+ arr1,
35
+ arr2,
36
+ (item) => item.id,
37
+ (item) => item.id,
38
+ );
39
+
40
+ expect(leftOutterJoinedArr).toEqual([
41
+ {
42
+ id: 1,
43
+ name: 'John',
44
+ },
45
+ {
46
+ id: 2,
47
+ name: 'Doe',
48
+ },
49
+ {
50
+ id: 6,
51
+ name: 'Maurice',
52
+ },
53
+ ]);
54
+ });
55
+ });
@@ -0,0 +1,32 @@
1
+ export type ArrayToMapOptions<InitialValue, ModifiedValue = InitialValue> = {
2
+ /**
3
+ * Function to return the key used in the map.
4
+ */
5
+ selectKey: (value: InitialValue) => string,
6
+ /**
7
+ * Transform the initial data into another value
8
+ */
9
+ dataModifier?: (value: InitialValue, map: Readonly<Record<string, ModifiedValue>>) => ModifiedValue;
10
+ };
11
+
12
+ /**
13
+ * Transform an array to a map.
14
+ */
15
+ export const arrayToMap = <InitialValue, ModifiedValue = InitialValue>(
16
+ array: ReadonlyArray<InitialValue>,
17
+ options: ArrayToMapOptions<InitialValue, ModifiedValue>,
18
+ ) => {
19
+ const { selectKey } = options;
20
+
21
+ return array.reduce<Record<string, ModifiedValue>>((acc, current) => {
22
+ const key = selectKey(current);
23
+ const value = options.dataModifier
24
+ ? options.dataModifier(current, acc)
25
+ : current;
26
+
27
+ return {
28
+ ...acc,
29
+ [key]: value as ModifiedValue,
30
+ };
31
+ }, {});
32
+ };
@@ -0,0 +1,3 @@
1
+ export const valuesFromKeys = <T>(keys: string[], map: Record<string, T>) => (
2
+ keys.map((key) => map[key])
3
+ );
@@ -0,0 +1,4 @@
1
+ export * from './array-to-map';
2
+ export * from './get-values-from-keys';
3
+ export * from './left-outter-join';
4
+ export * from './inner-join';
@@ -0,0 +1,10 @@
1
+ export const innerJoin = <T, U>(
2
+ arr1: T[],
3
+ arr2: U[],
4
+ selectKey1: (item: T) => string | number,
5
+ selectKey2: (item: U) => string | number,
6
+ ) => {
7
+ const arr2Set = new Set(arr2.map(selectKey2));
8
+
9
+ return arr1.filter((item) => arr2Set.has(selectKey1(item)));
10
+ };
@@ -0,0 +1,10 @@
1
+ export const leftOutterJoin = <T, U>(
2
+ arr1: T[],
3
+ arr2: U[],
4
+ selectKey1: (item: T) => string | number,
5
+ selectKey2: (item: U) => string | number,
6
+ ) => {
7
+ const arr2Set = new Set(arr2.map(selectKey2));
8
+
9
+ return arr1.filter((item) => !arr2Set.has(selectKey1(item)));
10
+ };
@@ -0,0 +1,3 @@
1
+ import { PictureSpot } from '../types';
2
+
3
+ export const getQuestions = (content: PictureSpot) => content.items?.map(({ question }) => question);