@studyportals/domain-client 3.17.1 → 3.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. package/.eslintignore +3 -0
  2. package/.eslintrc.js +13 -0
  3. package/.github/dependabot.yml +17 -0
  4. package/.github/stale.yml +10 -0
  5. package/.mocharc.yml +3 -0
  6. package/.nycrc +15 -0
  7. package/README.md +117 -0
  8. package/{index.d.ts → bin/index.d.ts} +73 -73
  9. package/{index.js → bin/index.js} +53 -53
  10. package/bin/package.json +55 -0
  11. package/{src → bin/src}/domain-client.d.ts +14 -14
  12. package/{src → bin/src}/domain-client.js +60 -60
  13. package/{src → bin/src}/exceptions/bad-request-exception.d.ts +2 -2
  14. package/{src → bin/src}/exceptions/bad-request-exception.js +6 -6
  15. package/{src → bin/src}/exceptions/client-exception.d.ts +2 -2
  16. package/{src → bin/src}/exceptions/client-exception.js +6 -6
  17. package/{src → bin/src}/exceptions/internal-server-exception.d.ts +2 -2
  18. package/{src → bin/src}/exceptions/internal-server-exception.js +6 -6
  19. package/{src → bin/src}/exceptions/not-found-exception.d.ts +2 -2
  20. package/{src → bin/src}/exceptions/not-found-exception.js +6 -6
  21. package/{src → bin/src}/exceptions/property-not-available-exception.d.ts +2 -2
  22. package/{src → bin/src}/exceptions/property-not-available-exception.js +6 -6
  23. package/{src → bin/src}/factories/DateFactory.d.ts +5 -5
  24. package/{src → bin/src}/factories/DateFactory.js +9 -9
  25. package/{src → bin/src}/factories/InternalLinkFactory.d.ts +9 -9
  26. package/{src → bin/src}/factories/InternalLinkFactory.js +19 -19
  27. package/{src → bin/src}/i-api-response.d.ts +6 -6
  28. package/bin/src/i-api-response.js +3 -0
  29. package/{src → bin/src}/i-class-factory.d.ts +4 -4
  30. package/{src/models/bestfit-programme/i-living-cost.js → bin/src/i-class-factory.js} +3 -3
  31. package/{src → bin/src}/i-model-description.d.ts +7 -7
  32. package/{src → bin/src}/i-model-description.js +9 -9
  33. package/{src → bin/src}/model-client.d.ts +16 -16
  34. package/{src → bin/src}/model-client.js +45 -45
  35. package/{src → bin/src}/model-factory.d.ts +11 -11
  36. package/{src → bin/src}/model-factory.js +71 -71
  37. package/{src → bin/src}/models/bestfit-programme/bestfit-programme-client.d.ts +7 -7
  38. package/{src → bin/src}/models/bestfit-programme/bestfit-programme-client.js +16 -16
  39. package/{src → bin/src}/models/bestfit-programme/i-best-fit-programme.d.ts +82 -82
  40. package/bin/src/models/bestfit-programme/i-best-fit-programme.js +3 -0
  41. package/{src → bin/src}/models/bestfit-programme/i-city.d.ts +14 -14
  42. package/{src/models/common → bin/src/models/bestfit-programme}/i-city.js +2 -2
  43. package/{src → bin/src}/models/bestfit-programme/i-living-cost.d.ts +20 -20
  44. package/bin/src/models/bestfit-programme/i-living-cost.js +3 -0
  45. package/{src → bin/src}/models/common/i-city.d.ts +14 -14
  46. package/{src/models/bestfit-programme → bin/src/models/common}/i-city.js +2 -2
  47. package/{src → bin/src}/models/common/i-country.d.ts +20 -20
  48. package/{src/models/programme-card/i-cover.js → bin/src/models/common/i-country.js} +3 -3
  49. package/{src → bin/src}/models/common/i-english-requirements.d.ts +44 -44
  50. package/{src/models/bestfit-programme/i-best-fit-programme.js → bin/src/models/common/i-english-requirements.js} +3 -3
  51. package/{src → bin/src}/models/common/i-g-p-a-requirement.d.ts +20 -20
  52. package/bin/src/models/common/i-g-p-a-requirement.js +3 -0
  53. package/{src/models/dotdigital-programme → bin/src/models/common}/i-internal-link.d.ts +28 -28
  54. package/bin/src/models/common/i-internal-link.js +3 -0
  55. package/{src/models/programme-card → bin/src/models/common}/i-logo.d.ts +14 -14
  56. package/{src/models/programme-card → bin/src/models/common}/i-logo.js +2 -2
  57. package/{src/models/programme-card → bin/src/models/common}/i-tuition-fee.d.ts +50 -50
  58. package/bin/src/models/common/i-tuition-fee.js +3 -0
  59. package/{src → bin/src}/models/compare-programme/compare-programme-client.d.ts +7 -7
  60. package/{src → bin/src}/models/compare-programme/compare-programme-client.js +16 -16
  61. package/{src → bin/src}/models/compare-programme/i-compare-programme.d.ts +108 -108
  62. package/bin/src/models/compare-programme/i-compare-programme.js +3 -0
  63. package/{src → bin/src}/models/dotdigital-organisation/dotdigital-organisation-client.d.ts +7 -7
  64. package/{src → bin/src}/models/dotdigital-organisation/dotdigital-organisation-client.js +16 -16
  65. package/{src → bin/src}/models/dotdigital-organisation/i-dot-digital-organisation.d.ts +35 -35
  66. package/bin/src/models/dotdigital-organisation/i-dot-digital-organisation.js +3 -0
  67. package/{src → bin/src}/models/dotdigital-organisation/i-review.d.ts +7 -7
  68. package/bin/src/models/dotdigital-organisation/i-review.js +3 -0
  69. package/{src → bin/src}/models/dotdigital-programme/dotdigital-programme-client.d.ts +7 -7
  70. package/{src → bin/src}/models/dotdigital-programme/dotdigital-programme-client.js +16 -16
  71. package/{src → bin/src}/models/dotdigital-programme/i-dot-digital-programme.d.ts +101 -101
  72. package/bin/src/models/dotdigital-programme/i-dot-digital-programme.js +3 -0
  73. package/{src/models/common → bin/src/models/dotdigital-programme}/i-internal-link.d.ts +28 -28
  74. package/bin/src/models/dotdigital-programme/i-internal-link.js +3 -0
  75. package/{src → bin/src}/models/programme-card/i-click-tracking-data.d.ts +5 -5
  76. package/bin/src/models/programme-card/i-click-tracking-data.js +3 -0
  77. package/{src → bin/src}/models/programme-card/i-cover.d.ts +14 -14
  78. package/bin/src/models/programme-card/i-cover.js +3 -0
  79. package/{src → bin/src}/models/programme-card/i-deadline.d.ts +20 -20
  80. package/{src/models/dotdigital-organisation/i-review.js → bin/src/models/programme-card/i-deadline.js} +3 -3
  81. package/{src → bin/src}/models/programme-card/i-duration.d.ts +40 -40
  82. package/bin/src/models/programme-card/i-duration.js +3 -0
  83. package/{src → bin/src}/models/programme-card/i-internal-link.d.ts +28 -28
  84. package/bin/src/models/programme-card/i-internal-link.js +3 -0
  85. package/{src → bin/src}/models/programme-card/i-link.d.ts +22 -22
  86. package/{src → bin/src}/models/programme-card/i-link.js +2 -2
  87. package/{src → bin/src}/models/programme-card/i-location.d.ts +12 -12
  88. package/bin/src/models/programme-card/i-location.js +3 -0
  89. package/{src/models/common → bin/src/models/programme-card}/i-logo.d.ts +14 -14
  90. package/{src/models/common → bin/src/models/programme-card}/i-logo.js +2 -2
  91. package/{src → bin/src}/models/programme-card/i-optional-link.d.ts +23 -23
  92. package/bin/src/models/programme-card/i-optional-link.js +3 -0
  93. package/{src → bin/src}/models/programme-card/i-programme-card.d.ts +178 -178
  94. package/{src/i-api-response.js → bin/src/models/programme-card/i-programme-card.js} +3 -3
  95. package/{src → bin/src}/models/programme-card/i-start-date.d.ts +33 -33
  96. package/{src/models/common/i-country.js → bin/src/models/programme-card/i-start-date.js} +3 -3
  97. package/{src → bin/src}/models/programme-card/i-timing.d.ts +45 -45
  98. package/bin/src/models/programme-card/i-timing.js +3 -0
  99. package/{src → bin/src}/models/programme-card/i-tracked-link.d.ts +29 -29
  100. package/bin/src/models/programme-card/i-tracked-link.js +3 -0
  101. package/{src → bin/src}/models/programme-card/i-tracking.d.ts +46 -46
  102. package/bin/src/models/programme-card/i-tracking.js +3 -0
  103. package/{src/models/common → bin/src/models/programme-card}/i-tuition-fee.d.ts +50 -50
  104. package/bin/src/models/programme-card/i-tuition-fee.js +3 -0
  105. package/{src → bin/src}/models/programme-card/programme-card-client.d.ts +7 -7
  106. package/{src → bin/src}/models/programme-card/programme-card-client.js +16 -16
  107. package/{src → bin/src}/models/ranking-cards/i-ranking-card.d.ts +63 -63
  108. package/bin/src/models/ranking-cards/i-ranking-card.js +3 -0
  109. package/{src → bin/src}/models/ranking-cards/i-ranking-cards.d.ts +15 -15
  110. package/bin/src/models/ranking-cards/i-ranking-cards.js +3 -0
  111. package/{src → bin/src}/models/ranking-cards/i-ranking.d.ts +18 -18
  112. package/bin/src/models/ranking-cards/i-ranking.js +3 -0
  113. package/{src → bin/src}/models/ranking-cards/public-ranking-cards-client.d.ts +7 -7
  114. package/{src → bin/src}/models/ranking-cards/public-ranking-cards-client.js +16 -16
  115. package/{src → bin/src}/models/scholarship-card/i-scholarship-card.d.ts +14 -46
  116. package/{src/i-class-factory.js → bin/src/models/scholarship-card/i-scholarship-card.js} +3 -3
  117. package/{src → bin/src}/models/scholarship-card/public-scholarship-card-client.d.ts +7 -7
  118. package/{src → bin/src}/models/scholarship-card/public-scholarship-card-client.js +16 -16
  119. package/{src → bin/src}/models/search-country-faq/i-search-country-faq.d.ts +18 -18
  120. package/bin/src/models/search-country-faq/i-search-country-faq.js +3 -0
  121. package/{src → bin/src}/models/search-country-faq/public-search-country-faq-client.d.ts +7 -7
  122. package/{src → bin/src}/models/search-country-faq/public-search-country-faq-client.js +16 -16
  123. package/{src → bin/src}/models/search-discipline/i-search-discipline.d.ts +26 -26
  124. package/bin/src/models/search-discipline/i-search-discipline.js +3 -0
  125. package/{src → bin/src}/models/search-discipline/public-search-discipline-client.d.ts +7 -7
  126. package/{src → bin/src}/models/search-discipline/public-search-discipline-client.js +16 -16
  127. package/{src → bin/src}/models/search-projection/i-geo-targeting-configuration.d.ts +38 -38
  128. package/bin/src/models/search-projection/i-geo-targeting-configuration.js +3 -0
  129. package/{src → bin/src}/models/search-projection/i-geo-targeting-values.d.ts +30 -30
  130. package/bin/src/models/search-projection/i-geo-targeting-values.js +3 -0
  131. package/{src → bin/src}/models/search-projection/i-organisation-values.d.ts +40 -40
  132. package/bin/src/models/search-projection/i-organisation-values.js +3 -0
  133. package/{src → bin/src}/models/search-projection/i-premium-values.d.ts +35 -35
  134. package/bin/src/models/search-projection/i-premium-values.js +3 -0
  135. package/{src → bin/src}/models/search-projection/i-search-projection.d.ts +180 -180
  136. package/bin/src/models/search-projection/i-search-projection.js +3 -0
  137. package/{src → bin/src}/models/search-projection/i-tuition-values.d.ts +50 -50
  138. package/bin/src/models/search-projection/i-tuition-values.js +3 -0
  139. package/{src → bin/src}/models/search-projection/search-projection-client.d.ts +7 -7
  140. package/{src → bin/src}/models/search-projection/search-projection-client.js +16 -16
  141. package/{src → bin/src}/models/sitemap-articles-info/i-sitemap-article-info.d.ts +14 -14
  142. package/bin/src/models/sitemap-articles-info/i-sitemap-article-info.js +3 -0
  143. package/{src → bin/src}/models/sitemap-articles-info/sitemap-articles-info-client.d.ts +7 -7
  144. package/{src → bin/src}/models/sitemap-articles-info/sitemap-articles-info-client.js +16 -16
  145. package/{src → bin/src}/models/sitemap-cities-info/i-sitemap-city-info.d.ts +14 -14
  146. package/bin/src/models/sitemap-cities-info/i-sitemap-city-info.js +3 -0
  147. package/{src → bin/src}/models/sitemap-cities-info/sitemap-cities-info-client.d.ts +7 -7
  148. package/{src → bin/src}/models/sitemap-cities-info/sitemap-cities-info-client.js +16 -16
  149. package/{src → bin/src}/models/sitemap-countries-info/i-sitemap-country-info.d.ts +14 -14
  150. package/bin/src/models/sitemap-countries-info/i-sitemap-country-info.js +3 -0
  151. package/{src → bin/src}/models/sitemap-countries-info/sitemap-countries-info-client.d.ts +7 -7
  152. package/{src → bin/src}/models/sitemap-countries-info/sitemap-countries-info-client.js +16 -16
  153. package/{src → bin/src}/models/sitemap-country-degree-info/i-degree-info.d.ts +14 -14
  154. package/bin/src/models/sitemap-country-degree-info/i-degree-info.js +3 -0
  155. package/{src → bin/src}/models/sitemap-country-degree-info/i-sitemap-country-degree-info.d.ts +11 -11
  156. package/bin/src/models/sitemap-country-degree-info/i-sitemap-country-degree-info.js +3 -0
  157. package/{src → bin/src}/models/sitemap-country-degree-info/sitemap-country-degree-info-client.d.ts +7 -7
  158. package/{src → bin/src}/models/sitemap-country-degree-info/sitemap-country-degree-info-client.js +16 -16
  159. package/{src → bin/src}/models/sitemap-disciplines-info/i-sitemap-discipline-info.d.ts +14 -14
  160. package/bin/src/models/sitemap-disciplines-info/i-sitemap-discipline-info.js +3 -0
  161. package/{src → bin/src}/models/sitemap-disciplines-info/sitemap-disciplines-info-client.d.ts +7 -7
  162. package/{src → bin/src}/models/sitemap-disciplines-info/sitemap-disciplines-info-client.js +16 -16
  163. package/{src → bin/src}/models/sitemap-organisations-info/i-sitemap-organisation-info.d.ts +26 -26
  164. package/bin/src/models/sitemap-organisations-info/i-sitemap-organisation-info.js +3 -0
  165. package/{src → bin/src}/models/sitemap-organisations-info/sitemap-organisations-info-client.d.ts +7 -7
  166. package/{src → bin/src}/models/sitemap-organisations-info/sitemap-organisations-info-client.js +16 -16
  167. package/{src → bin/src}/models/sitemap-programme-info/i-sitemap-programme-info.d.ts +26 -26
  168. package/bin/src/models/sitemap-programme-info/i-sitemap-programme-info.js +3 -0
  169. package/{src → bin/src}/models/sitemap-programme-info/sitemap-programme-info-client.d.ts +7 -7
  170. package/{src → bin/src}/models/sitemap-programme-info/sitemap-programme-info-client.js +16 -16
  171. package/{src → bin/src}/models/sitemap-rankings-info/i-sitemap-rankings-info.d.ts +14 -14
  172. package/bin/src/models/sitemap-rankings-info/i-sitemap-rankings-info.js +3 -0
  173. package/{src → bin/src}/models/sitemap-rankings-info/sitemap-rankings-info-client.d.ts +7 -7
  174. package/{src → bin/src}/models/sitemap-rankings-info/sitemap-rankings-info-client.js +16 -16
  175. package/{src → bin/src}/types/portal-map.d.ts +2 -2
  176. package/bin/src/types/portal-map.js +3 -0
  177. package/{src → bin/src}/types/portal-type.d.ts +7 -7
  178. package/{src → bin/src}/types/portal-type.js +11 -11
  179. package/{src → bin/src}/types.d.ts +4 -4
  180. package/{src → bin/src}/types.js +2 -2
  181. package/index.ts +147 -0
  182. package/package.json +55 -55
  183. package/src/domain-client.ts +70 -0
  184. package/src/exceptions/bad-request-exception.ts +2 -0
  185. package/src/exceptions/client-exception.ts +2 -0
  186. package/src/exceptions/internal-server-exception.ts +2 -0
  187. package/src/exceptions/not-found-exception.ts +2 -0
  188. package/src/exceptions/property-not-available-exception.ts +2 -0
  189. package/src/factories/DateFactory.ts +8 -0
  190. package/src/factories/InternalLinkFactory.ts +27 -0
  191. package/src/i-api-response.ts +7 -0
  192. package/src/i-class-factory.ts +5 -0
  193. package/src/i-model-description.ts +13 -0
  194. package/src/model-client.ts +77 -0
  195. package/src/model-factory.ts +94 -0
  196. package/src/models/bestfit-programme/bestfit-programme-client.ts +16 -0
  197. package/src/models/bestfit-programme/i-best-fit-programme.ts +102 -0
  198. package/src/models/bestfit-programme/i-city.ts +16 -0
  199. package/src/models/bestfit-programme/i-living-cost.ts +23 -0
  200. package/src/models/common/i-city.ts +16 -0
  201. package/src/models/common/i-country.ts +23 -0
  202. package/src/models/common/i-english-requirements.ts +56 -0
  203. package/src/models/common/i-g-p-a-requirement.ts +23 -0
  204. package/src/models/common/i-internal-link.ts +32 -0
  205. package/src/models/common/i-logo.ts +16 -0
  206. package/src/models/common/i-tuition-fee.ts +57 -0
  207. package/src/models/compare-programme/compare-programme-client.ts +16 -0
  208. package/src/models/compare-programme/i-compare-programme.ts +126 -0
  209. package/src/models/dotdigital-organisation/dotdigital-organisation-client.ts +16 -0
  210. package/src/models/dotdigital-organisation/i-dot-digital-organisation.ts +62 -0
  211. package/src/models/dotdigital-organisation/i-review.ts +12 -0
  212. package/src/models/dotdigital-programme/dotdigital-programme-client.ts +16 -0
  213. package/src/models/dotdigital-programme/i-dot-digital-programme.ts +122 -0
  214. package/src/models/dotdigital-programme/i-internal-link.ts +32 -0
  215. package/src/models/programme-card/i-click-tracking-data.ts +8 -0
  216. package/src/models/programme-card/i-cover.ts +16 -0
  217. package/src/models/programme-card/i-deadline.ts +23 -0
  218. package/src/models/programme-card/i-duration.ts +46 -0
  219. package/src/models/programme-card/i-internal-link.ts +32 -0
  220. package/src/models/programme-card/i-link.ts +25 -0
  221. package/src/models/programme-card/i-location.ts +22 -0
  222. package/src/models/programme-card/i-logo.ts +16 -0
  223. package/src/models/programme-card/i-optional-link.ts +27 -0
  224. package/src/models/programme-card/i-programme-card.ts +212 -0
  225. package/src/models/programme-card/i-start-date.ts +39 -0
  226. package/src/models/programme-card/i-timing.ts +53 -0
  227. package/src/models/programme-card/i-tracked-link.ts +34 -0
  228. package/src/models/programme-card/i-tracking.ts +55 -0
  229. package/src/models/programme-card/i-tuition-fee.ts +57 -0
  230. package/src/models/programme-card/programme-card-client.ts +16 -0
  231. package/src/models/ranking-cards/i-ranking-card.ts +74 -0
  232. package/src/models/ranking-cards/i-ranking-cards.ts +18 -0
  233. package/src/models/ranking-cards/i-ranking.ts +22 -0
  234. package/src/models/ranking-cards/public-ranking-cards-client.ts +16 -0
  235. package/src/models/scholarship-card/i-scholarship-card.ts +26 -0
  236. package/src/models/scholarship-card/public-scholarship-card-client.ts +16 -0
  237. package/src/models/search-country-faq/i-search-country-faq.ts +22 -0
  238. package/src/models/search-country-faq/public-search-country-faq-client.ts +16 -0
  239. package/src/models/search-discipline/i-search-discipline.ts +32 -0
  240. package/src/models/search-discipline/public-search-discipline-client.ts +16 -0
  241. package/src/models/search-projection/i-geo-targeting-configuration.ts +44 -0
  242. package/src/models/search-projection/i-geo-targeting-values.ts +38 -0
  243. package/src/models/search-projection/i-organisation-values.ts +46 -0
  244. package/src/models/search-projection/i-premium-values.ts +43 -0
  245. package/src/models/search-projection/i-search-projection.ts +216 -0
  246. package/src/models/search-projection/i-tuition-values.ts +63 -0
  247. package/src/models/search-projection/search-projection-client.ts +16 -0
  248. package/src/models/sitemap-articles-info/i-sitemap-article-info.ts +17 -0
  249. package/src/models/sitemap-articles-info/sitemap-articles-info-client.ts +16 -0
  250. package/src/models/sitemap-cities-info/i-sitemap-city-info.ts +17 -0
  251. package/src/models/sitemap-cities-info/sitemap-cities-info-client.ts +16 -0
  252. package/src/models/sitemap-countries-info/i-sitemap-country-info.ts +17 -0
  253. package/src/models/sitemap-countries-info/sitemap-countries-info-client.ts +16 -0
  254. package/src/models/sitemap-country-degree-info/i-degree-info.ts +17 -0
  255. package/src/models/sitemap-country-degree-info/i-sitemap-country-degree-info.ts +14 -0
  256. package/src/models/sitemap-country-degree-info/sitemap-country-degree-info-client.ts +16 -0
  257. package/src/models/sitemap-disciplines-info/i-sitemap-discipline-info.ts +17 -0
  258. package/src/models/sitemap-disciplines-info/sitemap-disciplines-info-client.ts +16 -0
  259. package/src/models/sitemap-organisations-info/i-sitemap-organisation-info.ts +32 -0
  260. package/src/models/sitemap-organisations-info/sitemap-organisations-info-client.ts +16 -0
  261. package/src/models/sitemap-programme-info/i-sitemap-programme-info.ts +32 -0
  262. package/src/models/sitemap-programme-info/sitemap-programme-info-client.ts +16 -0
  263. package/src/models/sitemap-rankings-info/i-sitemap-rankings-info.ts +17 -0
  264. package/src/models/sitemap-rankings-info/sitemap-rankings-info-client.ts +16 -0
  265. package/src/types/portal-map.ts +3 -0
  266. package/src/types/portal-type.ts +7 -0
  267. package/src/types.ts +4 -0
  268. package/tsconfig.json +40 -0
  269. package/src/models/common/i-english-requirements.js +0 -3
  270. package/src/models/common/i-g-p-a-requirement.js +0 -3
  271. package/src/models/common/i-internal-link.js +0 -3
  272. package/src/models/common/i-tuition-fee.js +0 -3
  273. package/src/models/compare-programme/i-compare-programme.js +0 -3
  274. package/src/models/dotdigital-organisation/i-dot-digital-organisation.js +0 -3
  275. package/src/models/dotdigital-programme/i-dot-digital-programme.js +0 -3
  276. package/src/models/dotdigital-programme/i-internal-link.js +0 -3
  277. package/src/models/programme-card/i-click-tracking-data.js +0 -3
  278. package/src/models/programme-card/i-deadline.js +0 -3
  279. package/src/models/programme-card/i-duration.js +0 -3
  280. package/src/models/programme-card/i-internal-link.js +0 -3
  281. package/src/models/programme-card/i-location.js +0 -3
  282. package/src/models/programme-card/i-optional-link.js +0 -3
  283. package/src/models/programme-card/i-programme-card.js +0 -3
  284. package/src/models/programme-card/i-start-date.js +0 -3
  285. package/src/models/programme-card/i-timing.js +0 -3
  286. package/src/models/programme-card/i-tracked-link.js +0 -3
  287. package/src/models/programme-card/i-tracking.js +0 -3
  288. package/src/models/programme-card/i-tuition-fee.js +0 -3
  289. package/src/models/ranking-cards/i-ranking-card.js +0 -3
  290. package/src/models/ranking-cards/i-ranking-cards.js +0 -3
  291. package/src/models/ranking-cards/i-ranking.js +0 -3
  292. package/src/models/scholarship-card/i-scholarship-card.js +0 -3
  293. package/src/models/search-country-faq/i-search-country-faq.js +0 -3
  294. package/src/models/search-discipline/i-search-discipline.js +0 -3
  295. package/src/models/search-projection/i-geo-targeting-configuration.js +0 -3
  296. package/src/models/search-projection/i-geo-targeting-values.js +0 -3
  297. package/src/models/search-projection/i-organisation-values.js +0 -3
  298. package/src/models/search-projection/i-premium-values.js +0 -3
  299. package/src/models/search-projection/i-search-projection.js +0 -3
  300. package/src/models/search-projection/i-tuition-values.js +0 -3
  301. package/src/models/sitemap-articles-info/i-sitemap-article-info.js +0 -3
  302. package/src/models/sitemap-cities-info/i-sitemap-city-info.js +0 -3
  303. package/src/models/sitemap-countries-info/i-sitemap-country-info.js +0 -3
  304. package/src/models/sitemap-country-degree-info/i-degree-info.js +0 -3
  305. package/src/models/sitemap-country-degree-info/i-sitemap-country-degree-info.js +0 -3
  306. package/src/models/sitemap-disciplines-info/i-sitemap-discipline-info.js +0 -3
  307. package/src/models/sitemap-organisations-info/i-sitemap-organisation-info.js +0 -3
  308. package/src/models/sitemap-programme-info/i-sitemap-programme-info.js +0 -3
  309. package/src/models/sitemap-rankings-info/i-sitemap-rankings-info.js +0 -3
  310. package/src/types/portal-map.js +0 -3
  311. /package/{index.js.map → bin/index.js.map} +0 -0
  312. /package/{src → bin/src}/domain-client.js.map +0 -0
  313. /package/{src → bin/src}/exceptions/bad-request-exception.js.map +0 -0
  314. /package/{src → bin/src}/exceptions/client-exception.js.map +0 -0
  315. /package/{src → bin/src}/exceptions/internal-server-exception.js.map +0 -0
  316. /package/{src → bin/src}/exceptions/not-found-exception.js.map +0 -0
  317. /package/{src → bin/src}/exceptions/property-not-available-exception.js.map +0 -0
  318. /package/{src → bin/src}/factories/DateFactory.js.map +0 -0
  319. /package/{src → bin/src}/factories/InternalLinkFactory.js.map +0 -0
  320. /package/{src → bin/src}/i-api-response.js.map +0 -0
  321. /package/{src → bin/src}/i-class-factory.js.map +0 -0
  322. /package/{src → bin/src}/i-model-description.js.map +0 -0
  323. /package/{src → bin/src}/model-client.js.map +0 -0
  324. /package/{src → bin/src}/model-factory.js.map +0 -0
  325. /package/{src → bin/src}/models/bestfit-programme/bestfit-programme-client.js.map +0 -0
  326. /package/{src → bin/src}/models/bestfit-programme/i-best-fit-programme.js.map +0 -0
  327. /package/{src → bin/src}/models/bestfit-programme/i-city.js.map +0 -0
  328. /package/{src → bin/src}/models/bestfit-programme/i-living-cost.js.map +0 -0
  329. /package/{src → bin/src}/models/common/i-city.js.map +0 -0
  330. /package/{src → bin/src}/models/common/i-country.js.map +0 -0
  331. /package/{src → bin/src}/models/common/i-english-requirements.js.map +0 -0
  332. /package/{src → bin/src}/models/common/i-g-p-a-requirement.js.map +0 -0
  333. /package/{src → bin/src}/models/common/i-internal-link.js.map +0 -0
  334. /package/{src → bin/src}/models/common/i-logo.js.map +0 -0
  335. /package/{src → bin/src}/models/common/i-tuition-fee.js.map +0 -0
  336. /package/{src → bin/src}/models/compare-programme/compare-programme-client.js.map +0 -0
  337. /package/{src → bin/src}/models/compare-programme/i-compare-programme.js.map +0 -0
  338. /package/{src → bin/src}/models/dotdigital-organisation/dotdigital-organisation-client.js.map +0 -0
  339. /package/{src → bin/src}/models/dotdigital-organisation/i-dot-digital-organisation.js.map +0 -0
  340. /package/{src → bin/src}/models/dotdigital-organisation/i-review.js.map +0 -0
  341. /package/{src → bin/src}/models/dotdigital-programme/dotdigital-programme-client.js.map +0 -0
  342. /package/{src → bin/src}/models/dotdigital-programme/i-dot-digital-programme.js.map +0 -0
  343. /package/{src → bin/src}/models/dotdigital-programme/i-internal-link.js.map +0 -0
  344. /package/{src → bin/src}/models/programme-card/i-click-tracking-data.js.map +0 -0
  345. /package/{src → bin/src}/models/programme-card/i-cover.js.map +0 -0
  346. /package/{src → bin/src}/models/programme-card/i-deadline.js.map +0 -0
  347. /package/{src → bin/src}/models/programme-card/i-duration.js.map +0 -0
  348. /package/{src → bin/src}/models/programme-card/i-internal-link.js.map +0 -0
  349. /package/{src → bin/src}/models/programme-card/i-link.js.map +0 -0
  350. /package/{src → bin/src}/models/programme-card/i-location.js.map +0 -0
  351. /package/{src → bin/src}/models/programme-card/i-logo.js.map +0 -0
  352. /package/{src → bin/src}/models/programme-card/i-optional-link.js.map +0 -0
  353. /package/{src → bin/src}/models/programme-card/i-programme-card.js.map +0 -0
  354. /package/{src → bin/src}/models/programme-card/i-start-date.js.map +0 -0
  355. /package/{src → bin/src}/models/programme-card/i-timing.js.map +0 -0
  356. /package/{src → bin/src}/models/programme-card/i-tracked-link.js.map +0 -0
  357. /package/{src → bin/src}/models/programme-card/i-tracking.js.map +0 -0
  358. /package/{src → bin/src}/models/programme-card/i-tuition-fee.js.map +0 -0
  359. /package/{src → bin/src}/models/programme-card/programme-card-client.js.map +0 -0
  360. /package/{src → bin/src}/models/ranking-cards/i-ranking-card.js.map +0 -0
  361. /package/{src → bin/src}/models/ranking-cards/i-ranking-cards.js.map +0 -0
  362. /package/{src → bin/src}/models/ranking-cards/i-ranking.js.map +0 -0
  363. /package/{src → bin/src}/models/ranking-cards/public-ranking-cards-client.js.map +0 -0
  364. /package/{src → bin/src}/models/scholarship-card/i-scholarship-card.js.map +0 -0
  365. /package/{src → bin/src}/models/scholarship-card/public-scholarship-card-client.js.map +0 -0
  366. /package/{src → bin/src}/models/search-country-faq/i-search-country-faq.js.map +0 -0
  367. /package/{src → bin/src}/models/search-country-faq/public-search-country-faq-client.js.map +0 -0
  368. /package/{src → bin/src}/models/search-discipline/i-search-discipline.js.map +0 -0
  369. /package/{src → bin/src}/models/search-discipline/public-search-discipline-client.js.map +0 -0
  370. /package/{src → bin/src}/models/search-projection/i-geo-targeting-configuration.js.map +0 -0
  371. /package/{src → bin/src}/models/search-projection/i-geo-targeting-values.js.map +0 -0
  372. /package/{src → bin/src}/models/search-projection/i-organisation-values.js.map +0 -0
  373. /package/{src → bin/src}/models/search-projection/i-premium-values.js.map +0 -0
  374. /package/{src → bin/src}/models/search-projection/i-search-projection.js.map +0 -0
  375. /package/{src → bin/src}/models/search-projection/i-tuition-values.js.map +0 -0
  376. /package/{src → bin/src}/models/search-projection/search-projection-client.js.map +0 -0
  377. /package/{src → bin/src}/models/sitemap-articles-info/i-sitemap-article-info.js.map +0 -0
  378. /package/{src → bin/src}/models/sitemap-articles-info/sitemap-articles-info-client.js.map +0 -0
  379. /package/{src → bin/src}/models/sitemap-cities-info/i-sitemap-city-info.js.map +0 -0
  380. /package/{src → bin/src}/models/sitemap-cities-info/sitemap-cities-info-client.js.map +0 -0
  381. /package/{src → bin/src}/models/sitemap-countries-info/i-sitemap-country-info.js.map +0 -0
  382. /package/{src → bin/src}/models/sitemap-countries-info/sitemap-countries-info-client.js.map +0 -0
  383. /package/{src → bin/src}/models/sitemap-country-degree-info/i-degree-info.js.map +0 -0
  384. /package/{src → bin/src}/models/sitemap-country-degree-info/i-sitemap-country-degree-info.js.map +0 -0
  385. /package/{src → bin/src}/models/sitemap-country-degree-info/sitemap-country-degree-info-client.js.map +0 -0
  386. /package/{src → bin/src}/models/sitemap-disciplines-info/i-sitemap-discipline-info.js.map +0 -0
  387. /package/{src → bin/src}/models/sitemap-disciplines-info/sitemap-disciplines-info-client.js.map +0 -0
  388. /package/{src → bin/src}/models/sitemap-organisations-info/i-sitemap-organisation-info.js.map +0 -0
  389. /package/{src → bin/src}/models/sitemap-organisations-info/sitemap-organisations-info-client.js.map +0 -0
  390. /package/{src → bin/src}/models/sitemap-programme-info/i-sitemap-programme-info.js.map +0 -0
  391. /package/{src → bin/src}/models/sitemap-programme-info/sitemap-programme-info-client.js.map +0 -0
  392. /package/{src → bin/src}/models/sitemap-rankings-info/i-sitemap-rankings-info.js.map +0 -0
  393. /package/{src → bin/src}/models/sitemap-rankings-info/sitemap-rankings-info-client.js.map +0 -0
  394. /package/{src → bin/src}/types/portal-map.js.map +0 -0
  395. /package/{src → bin/src}/types/portal-type.js.map +0 -0
  396. /package/{src → bin/src}/types.js.map +0 -0
@@ -1,12 +1,12 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PortalType = void 0;
4
- var PortalType;
5
- (function (PortalType) {
6
- PortalType["MASTER"] = "master";
7
- PortalType["BACHELOR"] = "bachelor";
8
- PortalType["PHD"] = "phd";
9
- PortalType["SHORT"] = "short";
10
- PortalType["DISTANCE_LEARNING"] = "distance_learning";
11
- })(PortalType = exports.PortalType || (exports.PortalType = {}));
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PortalType = void 0;
4
+ var PortalType;
5
+ (function (PortalType) {
6
+ PortalType["MASTER"] = "master";
7
+ PortalType["BACHELOR"] = "bachelor";
8
+ PortalType["PHD"] = "phd";
9
+ PortalType["SHORT"] = "short";
10
+ PortalType["DISTANCE_LEARNING"] = "distance_learning";
11
+ })(PortalType = exports.PortalType || (exports.PortalType = {}));
12
12
  //# sourceMappingURL=portal-type.js.map
@@ -1,4 +1,4 @@
1
- export type Model = Record<string, Callable>;
2
- export type Callable = () => CallableReturnType | CallableReturnType[];
3
- export type CallableReturnType = AcceptedType | Model;
4
- export type AcceptedType = string | string[] | number | number[] | boolean | null | Date;
1
+ export type Model = Record<string, Callable>;
2
+ export type Callable = () => CallableReturnType | CallableReturnType[];
3
+ export type CallableReturnType = AcceptedType | Model;
4
+ export type AcceptedType = string | string[] | number | number[] | boolean | null | Date;
@@ -1,3 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  //# sourceMappingURL=types.js.map
package/index.ts ADDED
@@ -0,0 +1,147 @@
1
+ import { BadRequestException } from "./src/exceptions/bad-request-exception"
2
+ import { ClientException } from "./src/exceptions/client-exception"
3
+ import { InternalServerException } from "./src/exceptions/internal-server-exception"
4
+ import { NotFoundException } from "./src/exceptions/not-found-exception"
5
+ import { PropertyNotAvailableException } from "./src/exceptions/property-not-available-exception"
6
+ import { ICover } from "./src/models/programme-card/i-cover";
7
+ import { ILink } from "./src/models/programme-card/i-link";
8
+ import { IOptionalLink } from "./src/models/programme-card/i-optional-link";
9
+ import { ILocation } from "./src/models/programme-card/i-location";
10
+ import { IClickTrackingData } from "./src/models/programme-card/i-click-tracking-data";
11
+ import { ITracking } from "./src/models/programme-card/i-tracking";
12
+ import { IDuration } from "./src/models/programme-card/i-duration";
13
+ import { IDeadline } from "./src/models/programme-card/i-deadline";
14
+ import { IStartDate } from "./src/models/programme-card/i-start-date";
15
+ import { ITiming } from "./src/models/programme-card/i-timing";
16
+ import { ITrackedLink } from "./src/models/programme-card/i-tracked-link";
17
+ import { IProgrammeCard } from "./src/models/programme-card/i-programme-card";
18
+ import { ProgrammeCardClient } from "./src/models/programme-card/programme-card-client";
19
+ import { ITuitionValues } from "./src/models/search-projection/i-tuition-values";
20
+ import { IPremiumValues } from "./src/models/search-projection/i-premium-values";
21
+ import { IOrganisationValues } from "./src/models/search-projection/i-organisation-values";
22
+ import { IGeoTargetingConfiguration } from "./src/models/search-projection/i-geo-targeting-configuration";
23
+ import { IGeoTargetingValues } from "./src/models/search-projection/i-geo-targeting-values";
24
+ import { ISearchProjection } from "./src/models/search-projection/i-search-projection";
25
+ import { SearchProjectionClient } from "./src/models/search-projection/search-projection-client";
26
+ import { ILivingCost } from "./src/models/bestfit-programme/i-living-cost";
27
+ import { IGPARequirement } from "./src/models/common/i-g-p-a-requirement";
28
+ import { IBestFitProgramme } from "./src/models/bestfit-programme/i-best-fit-programme";
29
+ import { BestfitProgrammeClient } from "./src/models/bestfit-programme/bestfit-programme-client";
30
+ import { ILogo } from "./src/models/common/i-logo";
31
+ import { ITuitionFee } from "./src/models/common/i-tuition-fee";
32
+ import { IEnglishRequirements } from "./src/models/common/i-english-requirements";
33
+ import { IInternalLink } from "./src/models/dotdigital-programme/i-internal-link";
34
+ import { IDotDigitalProgramme } from "./src/models/dotdigital-programme/i-dot-digital-programme";
35
+ import { DotdigitalProgrammeClient } from "./src/models/dotdigital-programme/dotdigital-programme-client";
36
+ import { ISitemapProgrammeInfo } from "./src/models/sitemap-programme-info/i-sitemap-programme-info";
37
+ import { SitemapProgrammeInfoClient } from "./src/models/sitemap-programme-info/sitemap-programme-info-client";
38
+ import { ISearchCountryFaq } from "./src/models/search-country-faq/i-search-country-faq";
39
+ import { PublicSearchCountryFaqClient } from "./src/models/search-country-faq/public-search-country-faq-client";
40
+ import { ISitemapCountryInfo } from "./src/models/sitemap-countries-info/i-sitemap-country-info";
41
+ import { SitemapCountriesInfoClient } from "./src/models/sitemap-countries-info/sitemap-countries-info-client";
42
+ import { IDegreeInfo } from "./src/models/sitemap-country-degree-info/i-degree-info";
43
+ import { ISitemapCountryDegreeInfo } from "./src/models/sitemap-country-degree-info/i-sitemap-country-degree-info";
44
+ import { SitemapCountryDegreeInfoClient } from "./src/models/sitemap-country-degree-info/sitemap-country-degree-info-client";
45
+ import { ISearchDiscipline } from "./src/models/search-discipline/i-search-discipline";
46
+ import { PublicSearchDisciplineClient } from "./src/models/search-discipline/public-search-discipline-client";
47
+ import { ISitemapDisciplineInfo } from "./src/models/sitemap-disciplines-info/i-sitemap-discipline-info";
48
+ import { SitemapDisciplinesInfoClient } from "./src/models/sitemap-disciplines-info/sitemap-disciplines-info-client";
49
+ import { ICountry } from "./src/models/common/i-country";
50
+ import { ICity } from "./src/models/common/i-city";
51
+ import { IReview } from "./src/models/dotdigital-organisation/i-review";
52
+ import { IDotDigitalOrganisation } from "./src/models/dotdigital-organisation/i-dot-digital-organisation";
53
+ import { DotdigitalOrganisationClient } from "./src/models/dotdigital-organisation/dotdigital-organisation-client";
54
+ import { ISitemapOrganisationInfo } from "./src/models/sitemap-organisations-info/i-sitemap-organisation-info";
55
+ import { SitemapOrganisationsInfoClient } from "./src/models/sitemap-organisations-info/sitemap-organisations-info-client";
56
+ import { ISitemapRankingsInfo } from "./src/models/sitemap-rankings-info/i-sitemap-rankings-info";
57
+ import { SitemapRankingsInfoClient } from "./src/models/sitemap-rankings-info/sitemap-rankings-info-client";
58
+ import { ISitemapArticleInfo } from "./src/models/sitemap-articles-info/i-sitemap-article-info";
59
+ import { SitemapArticlesInfoClient } from "./src/models/sitemap-articles-info/sitemap-articles-info-client";
60
+ import { ISitemapCityInfo } from "./src/models/sitemap-cities-info/i-sitemap-city-info";
61
+ import { SitemapCitiesInfoClient } from "./src/models/sitemap-cities-info/sitemap-cities-info-client";
62
+ import { IScholarshipCard } from "./src/models/scholarship-card/i-scholarship-card";
63
+ import { PublicScholarshipCardClient } from "./src/models/scholarship-card/public-scholarship-card-client";
64
+ import { IRankingCards } from './src/models/ranking-cards/i-ranking-cards';
65
+ import { IRankingCard } from './src/models/ranking-cards/i-ranking-card';
66
+ import { IRanking } from './src/models/ranking-cards/i-ranking';
67
+ import { PublicRankingCardsClient } from './src/models/ranking-cards/public-ranking-cards-client';
68
+ import { PortalType } from "./src/types/portal-type";
69
+ import { PortalMap } from "./src/types/portal-map";
70
+ import { ModelClient } from "./src/model-client";
71
+ import { ICompareProgramme } from "./src/models/compare-programme/i-compare-programme"
72
+ import { CompareProgrammeClient } from "./src/models/compare-programme/compare-programme-client"
73
+
74
+ export {
75
+ BadRequestException,
76
+ ClientException,
77
+ InternalServerException,
78
+ NotFoundException,
79
+ PropertyNotAvailableException,
80
+ ICover,
81
+ ILink,
82
+ IOptionalLink,
83
+ ILocation,
84
+ IClickTrackingData,
85
+ ITracking,
86
+ IDuration,
87
+ IDeadline,
88
+ IStartDate,
89
+ ITiming,
90
+ ITrackedLink,
91
+ IProgrammeCard,
92
+ ProgrammeCardClient,
93
+ ITuitionValues,
94
+ IPremiumValues,
95
+ IOrganisationValues,
96
+ IGeoTargetingConfiguration,
97
+ IGeoTargetingValues,
98
+ ISearchProjection,
99
+ SearchProjectionClient,
100
+ ILivingCost,
101
+ IGPARequirement,
102
+ IBestFitProgramme,
103
+ BestfitProgrammeClient,
104
+ ILogo,
105
+ ITuitionFee,
106
+ IEnglishRequirements,
107
+ IInternalLink,
108
+ IDotDigitalProgramme,
109
+ DotdigitalProgrammeClient,
110
+ ISitemapProgrammeInfo,
111
+ SitemapProgrammeInfoClient,
112
+ ISearchCountryFaq,
113
+ PublicSearchCountryFaqClient,
114
+ ISitemapCountryInfo,
115
+ SitemapCountriesInfoClient,
116
+ IDegreeInfo,
117
+ ISitemapCountryDegreeInfo,
118
+ SitemapCountryDegreeInfoClient,
119
+ ISearchDiscipline,
120
+ PublicSearchDisciplineClient,
121
+ ISitemapDisciplineInfo,
122
+ SitemapDisciplinesInfoClient,
123
+ ICountry,
124
+ ICity,
125
+ IReview,
126
+ IDotDigitalOrganisation,
127
+ DotdigitalOrganisationClient,
128
+ ISitemapOrganisationInfo,
129
+ SitemapOrganisationsInfoClient,
130
+ ISitemapRankingsInfo,
131
+ SitemapRankingsInfoClient,
132
+ ISitemapArticleInfo,
133
+ SitemapArticlesInfoClient,
134
+ ISitemapCityInfo,
135
+ SitemapCitiesInfoClient,
136
+ IScholarshipCard,
137
+ PublicScholarshipCardClient,
138
+ IRankingCards,
139
+ IRankingCard,
140
+ IRanking,
141
+ PublicRankingCardsClient,
142
+ ICompareProgramme,
143
+ CompareProgrammeClient,
144
+ PortalType,
145
+ PortalMap,
146
+ ModelClient
147
+ }
package/package.json CHANGED
@@ -1,55 +1,55 @@
1
- {
2
- "name": "@studyportals/domain-client",
3
- "version": "3.17.1",
4
- "description": "Responsible for fetching data from the Domain API",
5
- "main": "bin/index.js",
6
- "author": "StudyPortals B.V.",
7
- "contributors": [
8
- "braaibander <danny@studyportals.com>"
9
- ],
10
- "license": "BSD-3-Clause",
11
- "scripts": {
12
- "test": "mocha --reporter spec \"tests/**/*.test.ts\"",
13
- "coverage": "nyc mocha --reporter dot \"tests/**/*.test.ts\"",
14
- "lint": "eslint . --ext .ts --max-warnings=0",
15
- "lint:fix": "eslint . --ext .ts --fix",
16
- "pre-push": "npm run test && npm run coverage && npm run lint",
17
- "prepare-dist": "npm run test && rm -fR bin && npx tsc && cp package.json bin/package.json && rm -fR bin/tests",
18
- "publish-beta": "npm version prerelease --preid=beta && npm run prepare-dist && npm publish ./bin --tag beta",
19
- "publish-major": "npm version major && npm run prepare-dist && npm publish ./bin",
20
- "publish-minor": "npm version minor && npm run prepare-dist && npm publish ./bin",
21
- "publish-patch": "npm version patch && npm run prepare-dist && npm publish ./bin",
22
- "publish-current": "npm run prepare-dist && npm publish ./bin"
23
- },
24
- "husky": {
25
- "hooks": {
26
- "pre-push": "npm run pre-push"
27
- }
28
- },
29
- "dependencies": {
30
- "axios": "^0.21.0"
31
- },
32
- "devDependencies": {
33
- "@studyportals/code-style": "^1.8.1",
34
- "@testdeck/mocha": "^0.3.3",
35
- "@types/axios": "^0.14.0",
36
- "@types/mocha": "^10.0.0",
37
- "@types/moxios": "^0.4.9",
38
- "@types/node": "^14.14.8",
39
- "@types/reflect-metadata": "^0.1.0",
40
- "@typescript-eslint/eslint-plugin": "^4.8.1",
41
- "@typescript-eslint/parser": "^4.8.1",
42
- "eslint": "^7.13.0",
43
- "eslint-plugin-import": "^2.22.1",
44
- "eslint-plugin-mocha": "^10.1.0",
45
- "husky": "^4.3.0",
46
- "mocha": "^10.1.0",
47
- "moxios": "^0.4.0",
48
- "nyc": "^15.1.0",
49
- "source-map-support": "^0.5.19",
50
- "ts-node": "^10.9.1",
51
- "tslint": "^6.1.3",
52
- "typemoq": "^2.1.0",
53
- "typescript": "^4.9.3"
54
- }
55
- }
1
+ {
2
+ "name": "@studyportals/domain-client",
3
+ "version": "3.18.0",
4
+ "description": "Responsible for fetching data from the Domain API",
5
+ "main": "bin/index.js",
6
+ "author": "StudyPortals B.V.",
7
+ "contributors": [
8
+ "braaibander <danny@studyportals.com>"
9
+ ],
10
+ "license": "BSD-3-Clause",
11
+ "scripts": {
12
+ "test": "mocha --reporter spec \"tests/**/*.test.ts\"",
13
+ "coverage": "nyc mocha --reporter dot \"tests/**/*.test.ts\"",
14
+ "lint": "eslint . --ext .ts --max-warnings=0",
15
+ "lint:fix": "eslint . --ext .ts --fix",
16
+ "pre-push": "npm run test && npm run coverage && npm run lint",
17
+ "prepare-dist": "npm run test && rm -fR bin && npx tsc && cp package.json bin/package.json && rm -fR bin/tests",
18
+ "publish-beta": "npm version prerelease --preid=beta && npm run prepare-dist && npm publish ./bin --tag beta",
19
+ "publish-major": "npm version major && npm run prepare-dist && npm publish ./bin",
20
+ "publish-minor": "npm version minor && npm run prepare-dist && npm publish ./bin",
21
+ "publish-patch": "npm version patch && npm run prepare-dist && npm publish ./bin",
22
+ "publish-current": "npm run prepare-dist && npm publish ./bin"
23
+ },
24
+ "husky": {
25
+ "hooks": {
26
+ "pre-push": "npm run pre-push"
27
+ }
28
+ },
29
+ "dependencies": {
30
+ "axios": "^0.21.0"
31
+ },
32
+ "devDependencies": {
33
+ "@studyportals/code-style": "^1.8.1",
34
+ "@testdeck/mocha": "^0.3.3",
35
+ "@types/axios": "^0.14.0",
36
+ "@types/mocha": "^10.0.0",
37
+ "@types/moxios": "^0.4.9",
38
+ "@types/node": "^14.14.8",
39
+ "@types/reflect-metadata": "^0.1.0",
40
+ "@typescript-eslint/eslint-plugin": "^4.8.1",
41
+ "@typescript-eslint/parser": "^4.8.1",
42
+ "eslint": "^7.13.0",
43
+ "eslint-plugin-import": "^2.22.1",
44
+ "eslint-plugin-mocha": "^10.1.0",
45
+ "husky": "^4.3.0",
46
+ "mocha": "^10.1.0",
47
+ "moxios": "^0.4.0",
48
+ "nyc": "^15.1.0",
49
+ "source-map-support": "^0.5.19",
50
+ "ts-node": "^10.9.1",
51
+ "tslint": "^6.1.3",
52
+ "typemoq": "^2.1.0",
53
+ "typescript": "^4.9.3"
54
+ }
55
+ }
@@ -0,0 +1,70 @@
1
+ import Axios, { AxiosRequestConfig } from "axios";
2
+
3
+ import { BadRequestException } from "./exceptions/bad-request-exception";
4
+ import { InternalServerException } from "./exceptions/internal-server-exception";
5
+ import { NotFoundException } from "./exceptions/not-found-exception";
6
+ import { IApiResponse } from "./i-api-response";
7
+ import { IModelDescription } from "./i-model-description";
8
+
9
+
10
+ export class DomainClient {
11
+
12
+ constructor(
13
+ public readonly baseUrl: string,
14
+ public readonly apiKey: string | undefined,
15
+ public readonly model: string,
16
+ public readonly version: string,
17
+ public readonly isPublic: boolean,
18
+ public readonly seed: number
19
+ ) {
20
+ }
21
+
22
+ public async doRequest(ids: number[]): Promise<IModelDescription[]> {
23
+ const url = this.buildUrl(ids);
24
+ const config: AxiosRequestConfig = { baseURL: this.baseUrl }
25
+ if (this.apiKey !== undefined) {
26
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
27
+ config["headers"] = {'x-api-key': this.apiKey}
28
+ }
29
+ const axiosResponse = await Axios.get(url, config);
30
+ const response = axiosResponse.data as IApiResponse;
31
+ this.handleErrors(response);
32
+
33
+ const models: IModelDescription[] = [];
34
+ for (const id of ids) {
35
+ const modelData = response.data[id];
36
+ if (!modelData) {
37
+ continue;
38
+ }
39
+ models.push(modelData);
40
+ }
41
+ return models;
42
+ }
43
+
44
+ private handleErrors(response: IApiResponse): void {
45
+ if (!response.status) {
46
+ throw new InternalServerException(response.message);
47
+ }
48
+
49
+ if (response.status === 400) {
50
+ throw new BadRequestException(response.message);
51
+ }
52
+
53
+ if (response.status === 404) {
54
+ throw new NotFoundException(response.message);
55
+ }
56
+ }
57
+
58
+ private buildUrl(ids: number[]): string {
59
+ const publicPrefix = this.shouldAddPublicPrefix() ? 'public/' : '';
60
+ let query = `${publicPrefix}${this.model}/${this.version}/?seed=${this.seed}`;
61
+ for (const id of ids) {
62
+ query += `&id=${id}`;
63
+ }
64
+ return query;
65
+ }
66
+
67
+ private shouldAddPublicPrefix(): boolean {
68
+ return this.isPublic && this.apiKey === undefined;
69
+ }
70
+ }
@@ -0,0 +1,2 @@
1
+ export class BadRequestException extends Error {
2
+ }
@@ -0,0 +1,2 @@
1
+ export class ClientException extends Error {
2
+ }
@@ -0,0 +1,2 @@
1
+ export class InternalServerException extends Error {
2
+ }
@@ -0,0 +1,2 @@
1
+ export class NotFoundException extends Error {
2
+ }
@@ -0,0 +1,2 @@
1
+ export class PropertyNotAvailableException extends Error {
2
+ }
@@ -0,0 +1,8 @@
1
+ import { IClassFactory } from "../i-class-factory";
2
+ import { CallableReturnType, Model } from "../types";
3
+
4
+ export class DateFactory implements IClassFactory {
5
+ public create(data: Model, parameters: string[]): CallableReturnType {
6
+ return new Date(parameters[0]);
7
+ }
8
+ }
@@ -0,0 +1,27 @@
1
+ import { IClassFactory } from "../i-class-factory";
2
+ import { PortalType } from "../types/portal-type";
3
+ import { CallableReturnType, Model } from "../types";
4
+ import { PortalMap } from "../types/portal-map";
5
+
6
+ export class InternalLinkFactory implements IClassFactory {
7
+ private portalMap: PortalMap;
8
+
9
+ constructor(portalMap: PortalMap) {
10
+ this.portalMap = portalMap;
11
+ }
12
+
13
+ public create(link: Model): CallableReturnType {
14
+ const portalBaseUrl = this.getPortalBaseUrl(link.getPortalType() as PortalType);
15
+
16
+ const path = link['getUrl']() as string;
17
+ link['getUrl'] = (): string => portalBaseUrl + path;
18
+
19
+ return link;
20
+ }
21
+
22
+ private getPortalBaseUrl(portalType: PortalType): string {
23
+ const url = this.portalMap.get(portalType);
24
+ return url || '';
25
+ }
26
+
27
+ }
@@ -0,0 +1,7 @@
1
+ import { IModelDescription } from "./i-model-description";
2
+
3
+ export interface IApiResponse {
4
+ status: number;
5
+ data: Record<number, IModelDescription>;
6
+ message: string
7
+ }
@@ -0,0 +1,5 @@
1
+ import { CallableReturnType, Model } from "./types";
2
+
3
+ export interface IClassFactory {
4
+ create(data: Model, parameters?: any[]): CallableReturnType
5
+ }
@@ -0,0 +1,13 @@
1
+ import { AcceptedType } from "./types";
2
+
3
+ export interface IModelDescription {
4
+ class: string;
5
+ func: Record<string, AcceptedType | IModelDescription>;
6
+ parameters?: any[];
7
+ }
8
+
9
+ // eslint-disable-next-line
10
+ export function isModelDescription(arg: any): arg is IModelDescription {
11
+ // eslint-disable-next-line
12
+ return arg && arg.class && (arg.func || arg.parameters);
13
+ }
@@ -0,0 +1,77 @@
1
+ import { DomainClient } from "./domain-client";
2
+ import { ClientException } from "./exceptions/client-exception";
3
+ import { IModelDescription } from "./i-model-description";
4
+ import { ModelFactory } from "./model-factory";
5
+ import { PortalMap } from "./types/portal-map";
6
+
7
+
8
+ export abstract class ModelClient<T> {
9
+ private readonly domainClient: DomainClient | null;
10
+ private readonly modelFactory: ModelFactory<T>;
11
+
12
+ constructor(
13
+ baseUrl?: string,
14
+ apiKey?: string,
15
+ seed?: number,
16
+ portalMap?: PortalMap
17
+ ) {
18
+ if (!baseUrl || !seed) {
19
+ return;
20
+ }
21
+
22
+ this.modelFactory = new ModelFactory<T>(portalMap);
23
+ this.domainClient = new DomainClient(
24
+ baseUrl,
25
+ apiKey,
26
+ this.getModelName(),
27
+ this.getVersion(),
28
+ this.isPublic(),
29
+ seed
30
+ );
31
+ }
32
+
33
+ public async fetch(id: number): Promise<T> {
34
+ const modelDescriptions = await this.fetchDescription(id);
35
+ return this.modelFactory.fromDescription(modelDescriptions);
36
+ }
37
+
38
+ public async fetchDescription(id: number): Promise<IModelDescription> {
39
+ if (!this.domainClient) {
40
+ throw new ClientException(
41
+ "Offline mode active: did you provide all parameters " +
42
+ "in the constructor?"
43
+ );
44
+ }
45
+ const result = await this.domainClient.doRequest([id]);
46
+ return result[0];
47
+ }
48
+
49
+ public async fetchMultiple(ids: number[]): Promise<T[]> {
50
+ const descriptions = await this.fetchMultipleDescriptions(ids);
51
+ return this.modelFactory.fromDescriptions(descriptions);
52
+ }
53
+
54
+ public async fetchMultipleDescriptions(ids: number[]): Promise<IModelDescription[]> {
55
+ if (!this.domainClient) {
56
+ throw new ClientException(
57
+ 'Offline mode active: did you provide all parameters ' +
58
+ 'in the constructor?'
59
+ );
60
+ }
61
+ return await this.domainClient.doRequest(ids);
62
+ }
63
+
64
+ public fromDescription(description: IModelDescription): T {
65
+ return this.modelFactory.fromDescription(description);
66
+ }
67
+
68
+ public fromDescriptions(descriptions: IModelDescription[]): T[] {
69
+ return this.modelFactory.fromDescriptions(descriptions);
70
+ }
71
+
72
+ protected abstract getModelName(): string;
73
+
74
+ protected abstract getVersion(): string;
75
+
76
+ public abstract isPublic(): boolean;
77
+ }
@@ -0,0 +1,94 @@
1
+ import { InternalLinkFactory } from "./factories/InternalLinkFactory";
2
+ import { DateFactory } from "./factories/DateFactory";
3
+ import { IClassFactory } from "./i-class-factory";
4
+ import { IModelDescription, isModelDescription } from "./i-model-description";
5
+ import { PropertyNotAvailableException } from "./exceptions/property-not-available-exception";
6
+ import { Callable, CallableReturnType, Model } from "./types";
7
+ import { PortalMap } from "./types/portal-map";
8
+ import { PortalType } from "./types/portal-type";
9
+
10
+ export class ModelFactory<T> {
11
+
12
+ private customClassFactories: Map<string, IClassFactory>;
13
+
14
+ constructor(portalMap: PortalMap = new Map<PortalType, string>()) {
15
+ const factories = new Map<string, IClassFactory>();
16
+ factories.set('IInternalLink', new InternalLinkFactory(portalMap));
17
+ factories.set('SerializableDateTime', new DateFactory());
18
+
19
+ this.customClassFactories = factories;
20
+ }
21
+
22
+ public fromDescription(data: IModelDescription): T {
23
+ return this.unpackClass(data) as unknown as T;
24
+ }
25
+
26
+ public fromDescriptions(data: IModelDescription[]): T[] {
27
+ const models: T[] = [];
28
+ for (const modelDescription of data) {
29
+ models.push(this.unpackClass(modelDescription) as unknown as T);
30
+ }
31
+ return models;
32
+ }
33
+
34
+ private unpackClass(data: IModelDescription): CallableReturnType {
35
+
36
+
37
+ const unpacked: Model = {};
38
+ for (const functionName in data.func) {
39
+ unpacked[functionName] = this.getCallable(functionName, data);
40
+ }
41
+
42
+ const factory = this.customClassFactories.get(data.class);
43
+ if (factory !== undefined) {
44
+ return factory.create(unpacked, data.parameters);
45
+ }
46
+
47
+ return unpacked;
48
+ }
49
+
50
+ private getCallable(
51
+ functionName: string,
52
+ data: IModelDescription
53
+ ): Callable {
54
+ const propertyName = functionName.substr(3);
55
+ const canShowFunction = 'canShow' + propertyName;
56
+
57
+ const value: unknown = data.func[functionName];
58
+ let returnValue: CallableReturnType|CallableReturnType[];
59
+
60
+ if (isModelDescription(value)) {
61
+ returnValue = this.unpackClass(value);
62
+ } else if (Array.isArray(value)) {
63
+ returnValue = this.unpackArray(value);
64
+ } else {
65
+ returnValue = value as CallableReturnType;
66
+ }
67
+
68
+ if (canShowFunction in data.func) {
69
+ return (): any => {
70
+ if (data.func[canShowFunction] === false) {
71
+ throw new PropertyNotAvailableException(
72
+ `Property '${propertyName}' not available`
73
+ );
74
+ }
75
+ return returnValue;
76
+ };
77
+ }
78
+ return (): any => {
79
+ return returnValue;
80
+ };
81
+ }
82
+
83
+ private unpackArray(list: any[]): CallableReturnType[] {
84
+ return list.map(
85
+ item => {
86
+ if (isModelDescription(item)) {
87
+ return this.unpackClass(item)
88
+ }
89
+
90
+ return item as CallableReturnType;
91
+ }
92
+ );
93
+ }
94
+ }
@@ -0,0 +1,16 @@
1
+ import { IBestFitProgramme } from "../../..";
2
+ import { ModelClient } from "../../model-client";
3
+
4
+ export class BestfitProgrammeClient extends ModelClient<IBestFitProgramme> {
5
+ protected getModelName(): string {
6
+ return 'bestfit-programme';
7
+ }
8
+
9
+ protected getVersion(): string {
10
+ return 'v1';
11
+ }
12
+
13
+ public isPublic(): boolean {
14
+ return false;
15
+ }
16
+ }