@studyportals/fawkes 8.0.1-0 → 8.0.1-1

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 (374) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.js +1 -0
  3. package/dist/organisations-seo/index.d.ts +4 -0
  4. package/dist/organisations-seo/index.js +2 -0
  5. package/dist/programmes-seo/index.d.ts +6 -0
  6. package/dist/programmes-seo/index.js +2 -0
  7. package/dist/scholarships-seo/index.d.ts +5 -0
  8. package/dist/scholarships-seo/index.js +3 -0
  9. package/dist/sitemap-generator-seo/index.d.ts +13 -0
  10. package/dist/sitemap-generator-seo/index.js +4 -0
  11. package/dist/src/common/FilterKeyValuesMap.d.ts +2 -0
  12. package/dist/src/common/FilterKeyValuesMap.js +1 -0
  13. package/dist/src/common/IDependencies.d.ts +4 -0
  14. package/dist/src/common/IDependencies.js +1 -0
  15. package/dist/src/common/IDocumentationManager.d.ts +5 -0
  16. package/dist/src/common/IDocumentationManager.js +1 -0
  17. package/dist/src/common/IPresenter.d.ts +6 -0
  18. package/dist/src/common/IPresenter.js +1 -0
  19. package/dist/src/common/IRule.d.ts +8 -0
  20. package/dist/src/common/IRule.js +1 -0
  21. package/dist/src/common/ISearchApplicationState.d.ts +4 -0
  22. package/dist/src/common/ISearchApplicationState.js +1 -0
  23. package/dist/src/common/ISearchDependencies.d.ts +7 -0
  24. package/dist/src/common/ISearchDependencies.js +1 -0
  25. package/dist/src/common/ISearchIndexabilityManager.d.ts +4 -0
  26. package/dist/src/common/ISearchIndexabilityManager.js +1 -0
  27. package/dist/src/common/ISeoDependencies.d.ts +3 -0
  28. package/dist/src/common/ISeoDependencies.js +1 -0
  29. package/dist/src/common/ISeoFilterState.d.ts +5 -0
  30. package/dist/src/common/ISeoFilterState.js +1 -0
  31. package/dist/src/common/ISeoIndexabilityPolicy.d.ts +7 -0
  32. package/dist/src/common/ISeoIndexabilityPolicy.js +1 -0
  33. package/dist/src/common/ISeoInfoBase.d.ts +8 -0
  34. package/dist/src/common/ISeoInfoBase.js +1 -0
  35. package/dist/src/common/ISitemapDependencies.d.ts +5 -0
  36. package/dist/src/common/ISitemapDependencies.js +1 -0
  37. package/dist/src/common/ISitemapUrlGenerator.d.ts +7 -0
  38. package/dist/src/common/ISitemapUrlGenerator.js +1 -0
  39. package/dist/src/common/index.d.ts +5 -0
  40. package/dist/src/common/index.js +5 -0
  41. package/dist/src/common/policies/BaseSeoIndexabilityPolicy.d.ts +26 -0
  42. package/dist/src/common/policies/BaseSeoIndexabilityPolicy.js +56 -0
  43. package/dist/src/common/rules/BaseFilterKeyValueRule.d.ts +11 -0
  44. package/dist/src/common/rules/BaseFilterKeyValueRule.js +28 -0
  45. package/dist/src/common/rules/IndexablePageNumberRule.d.ts +9 -0
  46. package/dist/src/common/rules/IndexablePageNumberRule.js +17 -0
  47. package/dist/src/common/rules/NoFiltersSelectedRule.d.ts +9 -0
  48. package/dist/src/common/rules/NoFiltersSelectedRule.js +17 -0
  49. package/dist/src/common/rules/OnlineAttendanceRule.d.ts +6 -0
  50. package/dist/src/common/rules/OnlineAttendanceRule.js +14 -0
  51. package/dist/src/common/rules/OnlyFiltersSelectedRule.d.ts +12 -0
  52. package/dist/src/common/rules/OnlyFiltersSelectedRule.js +30 -0
  53. package/dist/src/common/rules/SingleValueSelectedForFilterRule.d.ts +12 -0
  54. package/dist/src/common/rules/SingleValueSelectedForFilterRule.js +24 -0
  55. package/dist/src/enums/DependencyTypes.d.ts +4 -0
  56. package/dist/src/enums/DependencyTypes.js +5 -0
  57. package/dist/src/enums/FilterCombinations.d.ts +52 -0
  58. package/dist/src/enums/FilterCombinations.js +53 -0
  59. package/dist/src/enums/SortingOptions.d.ts +4 -0
  60. package/dist/src/enums/SortingOptions.js +5 -0
  61. package/dist/src/errors/DependencyMissingError.d.ts +3 -0
  62. package/dist/src/errors/DependencyMissingError.js +5 -0
  63. package/dist/src/errors/InvalidDependencyTypeError.d.ts +3 -0
  64. package/dist/src/errors/InvalidDependencyTypeError.js +5 -0
  65. package/dist/src/errors/InvalidFilterValueError.d.ts +4 -0
  66. package/dist/src/errors/InvalidFilterValueError.js +5 -0
  67. package/dist/src/organisations/IOrganisationSearchApplicationState.d.ts +5 -0
  68. package/dist/src/organisations/IOrganisationSearchApplicationState.js +1 -0
  69. package/dist/src/organisations/ISeoSortingState.d.ts +4 -0
  70. package/dist/src/organisations/ISeoSortingState.js +1 -0
  71. package/dist/src/organisations/SearchIndexabilityManager.d.ts +12 -0
  72. package/dist/src/organisations/SearchIndexabilityManager.js +42 -0
  73. package/dist/src/organisations/index.d.ts +4 -0
  74. package/dist/src/organisations/index.js +4 -0
  75. package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.d.ts +19 -0
  76. package/dist/src/organisations/policies/OrganisationsSeoIndexabilityPolicy.js +49 -0
  77. package/dist/src/organisations/policies/RankedOrganisationsSeoIndexabilityPolicy.d.ts +9 -0
  78. package/dist/src/organisations/policies/RankedOrganisationsSeoIndexabilityPolicy.js +22 -0
  79. package/dist/src/organisations/policies/index.d.ts +18 -0
  80. package/dist/src/organisations/policies/index.js +18 -0
  81. package/dist/src/organisations/policies/our-picks/Area.d.ts +13 -0
  82. package/dist/src/organisations/policies/our-picks/Area.js +35 -0
  83. package/dist/src/organisations/policies/our-picks/AreaAttendance.d.ts +15 -0
  84. package/dist/src/organisations/policies/our-picks/AreaAttendance.js +45 -0
  85. package/dist/src/organisations/policies/our-picks/Attendance.d.ts +14 -0
  86. package/dist/src/organisations/policies/our-picks/Attendance.js +33 -0
  87. package/dist/src/organisations/policies/our-picks/Continent.d.ts +13 -0
  88. package/dist/src/organisations/policies/our-picks/Continent.js +31 -0
  89. package/dist/src/organisations/policies/our-picks/Country.d.ts +13 -0
  90. package/dist/src/organisations/policies/our-picks/Country.js +28 -0
  91. package/dist/src/organisations/policies/our-picks/CountryAttendance.d.ts +15 -0
  92. package/dist/src/organisations/policies/our-picks/CountryAttendance.js +43 -0
  93. package/dist/src/organisations/policies/our-picks/Unfiltered.d.ts +12 -0
  94. package/dist/src/organisations/policies/our-picks/Unfiltered.js +16 -0
  95. package/dist/src/organisations/policies/ranked/RankedArea.d.ts +13 -0
  96. package/dist/src/organisations/policies/ranked/RankedArea.js +36 -0
  97. package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.d.ts +14 -0
  98. package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.js +44 -0
  99. package/dist/src/organisations/policies/ranked/RankedAttendance.d.ts +14 -0
  100. package/dist/src/organisations/policies/ranked/RankedAttendance.js +34 -0
  101. package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.d.ts +14 -0
  102. package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.js +42 -0
  103. package/dist/src/organisations/policies/ranked/RankedContinent.d.ts +13 -0
  104. package/dist/src/organisations/policies/ranked/RankedContinent.js +32 -0
  105. package/dist/src/organisations/policies/ranked/RankedContinentAttendance.d.ts +15 -0
  106. package/dist/src/organisations/policies/ranked/RankedContinentAttendance.js +44 -0
  107. package/dist/src/organisations/policies/ranked/RankedCountry.d.ts +13 -0
  108. package/dist/src/organisations/policies/ranked/RankedCountry.js +29 -0
  109. package/dist/src/organisations/policies/ranked/RankedCountryAttendance.d.ts +14 -0
  110. package/dist/src/organisations/policies/ranked/RankedCountryAttendance.js +42 -0
  111. package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.d.ts +13 -0
  112. package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.js +40 -0
  113. package/dist/src/organisations/policies/ranked/RankedDiscipline.d.ts +13 -0
  114. package/dist/src/organisations/policies/ranked/RankedDiscipline.js +32 -0
  115. package/dist/src/organisations/policies/ranked/RankedUnfiltered.d.ts +12 -0
  116. package/dist/src/organisations/policies/ranked/RankedUnfiltered.js +21 -0
  117. package/dist/src/organisations/rules/AtLeastSevenResultsRule.d.ts +15 -0
  118. package/dist/src/organisations/rules/AtLeastSevenResultsRule.js +30 -0
  119. package/dist/src/organisations/rules/AtLeastTwoRankedResultsRule.d.ts +13 -0
  120. package/dist/src/organisations/rules/AtLeastTwoRankedResultsRule.js +26 -0
  121. package/dist/src/organisations/rules/BaseSearchVolumeOrganisationsRule.d.ts +14 -0
  122. package/dist/src/organisations/rules/BaseSearchVolumeOrganisationsRule.js +33 -0
  123. package/dist/src/organisations/rules/ContinentIsEuropeRule.d.ts +6 -0
  124. package/dist/src/organisations/rules/ContinentIsEuropeRule.js +15 -0
  125. package/dist/src/organisations/rules/NoFiltersSelectedRule.d.ts +9 -0
  126. package/dist/src/organisations/rules/NoFiltersSelectedRule.js +17 -0
  127. package/dist/src/organisations/rules/SearchVolumeAreasAttendanceRule.d.ts +6 -0
  128. package/dist/src/organisations/rules/SearchVolumeAreasAttendanceRule.js +17 -0
  129. package/dist/src/organisations/rules/SearchVolumeAreasDisciplineRule.d.ts +6 -0
  130. package/dist/src/organisations/rules/SearchVolumeAreasDisciplineRule.js +18 -0
  131. package/dist/src/organisations/rules/SearchVolumeCountriesAttendanceRule.d.ts +6 -0
  132. package/dist/src/organisations/rules/SearchVolumeCountriesAttendanceRule.js +17 -0
  133. package/dist/src/organisations/types/IOrganisationSearchDependencies.d.ts +9 -0
  134. package/dist/src/organisations/types/IOrganisationSearchDependencies.js +1 -0
  135. package/dist/src/organisations/types/IOrganisationsSeoDependencies.d.ts +3 -0
  136. package/dist/src/organisations/types/IOrganisationsSeoDependencies.js +1 -0
  137. package/dist/src/organisations/types/IOrganisationsSitemapDependencies.d.ts +9 -0
  138. package/dist/src/organisations/types/IOrganisationsSitemapDependencies.js +1 -0
  139. package/dist/src/organisations/types.d.ts +6 -0
  140. package/dist/src/organisations/types.js +6 -0
  141. package/dist/src/presenters/AreaPresenter.d.ts +12 -0
  142. package/dist/src/presenters/AreaPresenter.js +35 -0
  143. package/dist/src/presenters/AttendancePresenter.d.ts +11 -0
  144. package/dist/src/presenters/AttendancePresenter.js +23 -0
  145. package/dist/src/presenters/ContinentPresenter.d.ts +12 -0
  146. package/dist/src/presenters/ContinentPresenter.js +33 -0
  147. package/dist/src/presenters/CountryPresenter.d.ts +12 -0
  148. package/dist/src/presenters/CountryPresenter.js +38 -0
  149. package/dist/src/presenters/DegreePresenter.d.ts +12 -0
  150. package/dist/src/presenters/DegreePresenter.js +50 -0
  151. package/dist/src/presenters/DisciplinePresenter.d.ts +12 -0
  152. package/dist/src/presenters/DisciplinePresenter.js +33 -0
  153. package/dist/src/presenters/DurationPresenter.d.ts +15 -0
  154. package/dist/src/presenters/DurationPresenter.js +47 -0
  155. package/dist/src/presenters/EducationalFormPresenter.d.ts +12 -0
  156. package/dist/src/presenters/EducationalFormPresenter.js +45 -0
  157. package/dist/src/presenters/FormatPresenter.d.ts +11 -0
  158. package/dist/src/presenters/FormatPresenter.js +24 -0
  159. package/dist/src/presenters/SpecialProgrammesPresenter.d.ts +11 -0
  160. package/dist/src/presenters/SpecialProgrammesPresenter.js +27 -0
  161. package/dist/src/presenters/TuitionFeePresenter.d.ts +11 -0
  162. package/dist/src/presenters/TuitionFeePresenter.js +23 -0
  163. package/dist/src/presenters/fragments/IAreaFragment.d.ts +4 -0
  164. package/dist/src/presenters/fragments/IAreaFragment.js +1 -0
  165. package/dist/src/presenters/fragments/ICountryFragment.d.ts +4 -0
  166. package/dist/src/presenters/fragments/ICountryFragment.js +1 -0
  167. package/dist/src/presenters/fragments/IFragment.d.ts +4 -0
  168. package/dist/src/presenters/fragments/IFragment.js +1 -0
  169. package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.d.ts +6 -0
  170. package/dist/src/programmes/BaseProgrammeFilterKeyValueRule.js +6 -0
  171. package/dist/src/programmes/BaseProgrammeRule.d.ts +10 -0
  172. package/dist/src/programmes/BaseProgrammeRule.js +5 -0
  173. package/dist/src/programmes/IProgrammeRule.d.ts +5 -0
  174. package/dist/src/programmes/IProgrammeRule.js +1 -0
  175. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +15 -0
  176. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.js +42 -0
  177. package/dist/src/programmes/SearchIndexabilityManager.d.ts +12 -0
  178. package/dist/src/programmes/SearchIndexabilityManager.js +58 -0
  179. package/dist/src/programmes/policies/Area.d.ts +15 -0
  180. package/dist/src/programmes/policies/Area.js +40 -0
  181. package/dist/src/programmes/policies/Attendance.d.ts +16 -0
  182. package/dist/src/programmes/policies/Attendance.js +38 -0
  183. package/dist/src/programmes/policies/AttendanceDegree.d.ts +17 -0
  184. package/dist/src/programmes/policies/AttendanceDegree.js +48 -0
  185. package/dist/src/programmes/policies/Continent.d.ts +15 -0
  186. package/dist/src/programmes/policies/Continent.js +36 -0
  187. package/dist/src/programmes/policies/ContinentTuitionFee.d.ts +16 -0
  188. package/dist/src/programmes/policies/ContinentTuitionFee.js +46 -0
  189. package/dist/src/programmes/policies/Country.d.ts +15 -0
  190. package/dist/src/programmes/policies/Country.js +33 -0
  191. package/dist/src/programmes/policies/CountryAttendance.d.ts +16 -0
  192. package/dist/src/programmes/policies/CountryAttendance.js +46 -0
  193. package/dist/src/programmes/policies/CountryAttendanceDegree.d.ts +17 -0
  194. package/dist/src/programmes/policies/CountryAttendanceDegree.js +55 -0
  195. package/dist/src/programmes/policies/CountryDegree.d.ts +16 -0
  196. package/dist/src/programmes/policies/CountryDegree.js +46 -0
  197. package/dist/src/programmes/policies/CountryDuration.d.ts +16 -0
  198. package/dist/src/programmes/policies/CountryDuration.js +46 -0
  199. package/dist/src/programmes/policies/CountryDurationDegree.d.ts +17 -0
  200. package/dist/src/programmes/policies/CountryDurationDegree.js +55 -0
  201. package/dist/src/programmes/policies/CountryEducationalForm.d.ts +16 -0
  202. package/dist/src/programmes/policies/CountryEducationalForm.js +47 -0
  203. package/dist/src/programmes/policies/CountryFormat.d.ts +16 -0
  204. package/dist/src/programmes/policies/CountryFormat.js +46 -0
  205. package/dist/src/programmes/policies/CountryTuitionFee.d.ts +16 -0
  206. package/dist/src/programmes/policies/CountryTuitionFee.js +46 -0
  207. package/dist/src/programmes/policies/Degree.d.ts +15 -0
  208. package/dist/src/programmes/policies/Degree.js +38 -0
  209. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.d.ts +16 -0
  210. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.js +63 -0
  211. package/dist/src/programmes/policies/DegreeCountryAttendance.d.ts +16 -0
  212. package/dist/src/programmes/policies/DegreeCountryAttendance.js +88 -0
  213. package/dist/src/programmes/policies/DegreeCountryDiscipline.d.ts +16 -0
  214. package/dist/src/programmes/policies/DegreeCountryDiscipline.js +71 -0
  215. package/dist/src/programmes/policies/DegreeCountryTuitionFee.d.ts +16 -0
  216. package/dist/src/programmes/policies/DegreeCountryTuitionFee.js +73 -0
  217. package/dist/src/programmes/policies/Discipline.d.ts +15 -0
  218. package/dist/src/programmes/policies/Discipline.js +36 -0
  219. package/dist/src/programmes/policies/DisciplineArea.d.ts +15 -0
  220. package/dist/src/programmes/policies/DisciplineArea.js +46 -0
  221. package/dist/src/programmes/policies/DisciplineAttendance.d.ts +16 -0
  222. package/dist/src/programmes/policies/DisciplineAttendance.js +46 -0
  223. package/dist/src/programmes/policies/DisciplineContinent.d.ts +15 -0
  224. package/dist/src/programmes/policies/DisciplineContinent.js +44 -0
  225. package/dist/src/programmes/policies/DisciplineCountry.d.ts +15 -0
  226. package/dist/src/programmes/policies/DisciplineCountry.js +44 -0
  227. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.d.ts +16 -0
  228. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +53 -0
  229. package/dist/src/programmes/policies/DisciplineDegree.d.ts +16 -0
  230. package/dist/src/programmes/policies/DisciplineDegree.js +46 -0
  231. package/dist/src/programmes/policies/DisciplineDuration.d.ts +16 -0
  232. package/dist/src/programmes/policies/DisciplineDuration.js +46 -0
  233. package/dist/src/programmes/policies/DisciplineEducationalForm.d.ts +16 -0
  234. package/dist/src/programmes/policies/DisciplineEducationalForm.js +47 -0
  235. package/dist/src/programmes/policies/DisciplineFormat.d.ts +16 -0
  236. package/dist/src/programmes/policies/DisciplineFormat.js +46 -0
  237. package/dist/src/programmes/policies/DisciplineTuitionFee.d.ts +16 -0
  238. package/dist/src/programmes/policies/DisciplineTuitionFee.js +46 -0
  239. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.d.ts +17 -0
  240. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +54 -0
  241. package/dist/src/programmes/policies/SpecialProgrammes.d.ts +16 -0
  242. package/dist/src/programmes/policies/SpecialProgrammes.js +38 -0
  243. package/dist/src/programmes/policies/TuitionFee.d.ts +15 -0
  244. package/dist/src/programmes/policies/TuitionFee.js +32 -0
  245. package/dist/src/programmes/policies/Unfiltered.d.ts +13 -0
  246. package/dist/src/programmes/policies/Unfiltered.js +19 -0
  247. package/dist/src/programmes/policies/index.d.ts +34 -0
  248. package/dist/src/programmes/policies/index.js +34 -0
  249. package/dist/src/programmes/rules/AffordableTuitionFeeRule.d.ts +6 -0
  250. package/dist/src/programmes/rules/AffordableTuitionFeeRule.js +17 -0
  251. package/dist/src/programmes/rules/AtLeastSevenResultsRule.d.ts +15 -0
  252. package/dist/src/programmes/rules/AtLeastSevenResultsRule.js +30 -0
  253. package/dist/src/programmes/rules/DegreeAttendanceDisciplineRule.d.ts +11 -0
  254. package/dist/src/programmes/rules/DegreeAttendanceDisciplineRule.js +44 -0
  255. package/dist/src/programmes/rules/DegreeAttendanceDisciplineSpecificRule.d.ts +11 -0
  256. package/dist/src/programmes/rules/DegreeAttendanceDisciplineSpecificRule.js +39 -0
  257. package/dist/src/programmes/rules/DegreeCountryAttendanceSpecificRule.d.ts +14 -0
  258. package/dist/src/programmes/rules/DegreeCountryAttendanceSpecificRule.js +76 -0
  259. package/dist/src/programmes/rules/DegreeCountryDisciplineSpecificRule.d.ts +11 -0
  260. package/dist/src/programmes/rules/DegreeCountryDisciplineSpecificRule.js +76 -0
  261. package/dist/src/programmes/rules/DegreeCountryTuitionFeeSpecificRule.d.ts +12 -0
  262. package/dist/src/programmes/rules/DegreeCountryTuitionFeeSpecificRule.js +62 -0
  263. package/dist/src/programmes/rules/DegreeDisciplineRule.d.ts +16 -0
  264. package/dist/src/programmes/rules/DegreeDisciplineRule.js +189 -0
  265. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.d.ts +9 -0
  266. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.js +28 -0
  267. package/dist/src/programmes/rules/IndexableDegreeRule.d.ts +10 -0
  268. package/dist/src/programmes/rules/IndexableDegreeRule.js +53 -0
  269. package/dist/src/programmes/rules/IndexableDurationRule.d.ts +12 -0
  270. package/dist/src/programmes/rules/IndexableDurationRule.js +37 -0
  271. package/dist/src/programmes/rules/IndexableEducationalFormRule.d.ts +10 -0
  272. package/dist/src/programmes/rules/IndexableEducationalFormRule.js +34 -0
  273. package/dist/src/programmes/rules/IndexablePageNumberRule.d.ts +9 -0
  274. package/dist/src/programmes/rules/IndexablePageNumberRule.js +17 -0
  275. package/dist/src/programmes/rules/MbaDegreeRule.d.ts +6 -0
  276. package/dist/src/programmes/rules/MbaDegreeRule.js +15 -0
  277. package/dist/src/programmes/rules/MbaOrMscDegreeRule.d.ts +9 -0
  278. package/dist/src/programmes/rules/MbaOrMscDegreeRule.js +26 -0
  279. package/dist/src/programmes/rules/NotDistanceLearningPortalRule.d.ts +11 -0
  280. package/dist/src/programmes/rules/NotDistanceLearningPortalRule.js +28 -0
  281. package/dist/src/programmes/rules/OneYearDurationRule.d.ts +6 -0
  282. package/dist/src/programmes/rules/OneYearDurationRule.js +15 -0
  283. package/dist/src/programmes/rules/PartTimeFormatRule.d.ts +6 -0
  284. package/dist/src/programmes/rules/PartTimeFormatRule.js +15 -0
  285. package/dist/src/programmes/types/IProgrammeSearchApplicationState.d.ts +4 -0
  286. package/dist/src/programmes/types/IProgrammeSearchApplicationState.js +1 -0
  287. package/dist/src/programmes/types/IProgrammeSearchDependencies.d.ts +7 -0
  288. package/dist/src/programmes/types/IProgrammeSearchDependencies.js +1 -0
  289. package/dist/src/programmes/types/IProgrammeSearchSitemapDependencies.d.ts +5 -0
  290. package/dist/src/programmes/types/IProgrammeSearchSitemapDependencies.js +1 -0
  291. package/dist/src/programmes/types/IProgrammeSeoDependencies.d.ts +3 -0
  292. package/dist/src/programmes/types/IProgrammeSeoDependencies.js +1 -0
  293. package/dist/src/programmes/types/IProgrammeSitemapDependencies.d.ts +7 -0
  294. package/dist/src/programmes/types/IProgrammeSitemapDependencies.js +1 -0
  295. package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.d.ts +5 -0
  296. package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.js +1 -0
  297. package/dist/src/scholarships/SearchIndexabilityManager.d.ts +11 -0
  298. package/dist/src/scholarships/SearchIndexabilityManager.js +33 -0
  299. package/dist/src/scholarships/index.d.ts +3 -0
  300. package/dist/src/scholarships/index.js +3 -0
  301. package/dist/src/scholarships/policies/Area.d.ts +13 -0
  302. package/dist/src/scholarships/policies/Area.js +37 -0
  303. package/dist/src/scholarships/policies/Country.d.ts +12 -0
  304. package/dist/src/scholarships/policies/Country.js +31 -0
  305. package/dist/src/scholarships/policies/Discipline.d.ts +12 -0
  306. package/dist/src/scholarships/policies/Discipline.js +31 -0
  307. package/dist/src/scholarships/policies/DisciplineCountry.d.ts +12 -0
  308. package/dist/src/scholarships/policies/DisciplineCountry.js +39 -0
  309. package/dist/src/scholarships/policies/ScholarshipSeoIndexabilityPolicy.d.ts +7 -0
  310. package/dist/src/scholarships/policies/ScholarshipSeoIndexabilityPolicy.js +7 -0
  311. package/dist/src/scholarships/policies/Unfiltered.d.ts +10 -0
  312. package/dist/src/scholarships/policies/Unfiltered.js +16 -0
  313. package/dist/src/scholarships/policies/UniversityCountry.d.ts +11 -0
  314. package/dist/src/scholarships/policies/UniversityCountry.js +41 -0
  315. package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.d.ts +14 -0
  316. package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.js +42 -0
  317. package/dist/src/scholarships/rules/SearchVolumeAreasRule.d.ts +12 -0
  318. package/dist/src/scholarships/rules/SearchVolumeAreasRule.js +32 -0
  319. package/dist/src/scholarships/rules/SearchVolumeCountriesDisciplinesRule.d.ts +14 -0
  320. package/dist/src/scholarships/rules/SearchVolumeCountriesDisciplinesRule.js +43 -0
  321. package/dist/src/scholarships/rules/SearchVolumeCountriesRule.d.ts +12 -0
  322. package/dist/src/scholarships/rules/SearchVolumeCountriesRule.js +32 -0
  323. package/dist/src/scholarships/rules/SearchVolumeDisciplinesRule.d.ts +12 -0
  324. package/dist/src/scholarships/rules/SearchVolumeDisciplinesRule.js +32 -0
  325. package/dist/src/scholarships/rules/files/search-volume.json +39334 -0
  326. package/dist/src/scholarships/types/IScholarshipSeoDependencies.d.ts +3 -0
  327. package/dist/src/scholarships/types/IScholarshipSeoDependencies.js +1 -0
  328. package/dist/src/scholarships/types/IScholarshipSitemapDependencies.d.ts +5 -0
  329. package/dist/src/scholarships/types/IScholarshipSitemapDependencies.js +1 -0
  330. package/dist/src/scholarships/types.d.ts +5 -0
  331. package/dist/src/scholarships/types.js +5 -0
  332. package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.d.ts +14 -0
  333. package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.js +26 -0
  334. package/dist/src/sitemap-generator/IOrganisation.d.ts +6 -0
  335. package/dist/src/sitemap-generator/IOrganisation.js +1 -0
  336. package/dist/src/sitemap-generator/IOrganisationsClient.d.ts +4 -0
  337. package/dist/src/sitemap-generator/IOrganisationsClient.js +1 -0
  338. package/dist/src/sitemap-generator/IRankingApiClient.d.ts +4 -0
  339. package/dist/src/sitemap-generator/IRankingApiClient.js +1 -0
  340. package/dist/src/sitemap-generator/ISearchApiClient.d.ts +5 -0
  341. package/dist/src/sitemap-generator/ISearchApiClient.js +1 -0
  342. package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.d.ts +9 -0
  343. package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.js +1 -0
  344. package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.d.ts +14 -0
  345. package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.js +51 -0
  346. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.d.ts +12 -0
  347. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +77 -0
  348. package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.d.ts +9 -0
  349. package/dist/src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager.js +28 -0
  350. package/dist/src/sitemap-generator/index.d.ts +0 -0
  351. package/dist/src/sitemap-generator/index.js +1 -0
  352. package/dist/src/structured-data/ProgrammeStructuredDataFactory.d.ts +18 -0
  353. package/dist/src/structured-data/ProgrammeStructuredDataFactory.js +91 -0
  354. package/dist/src/structured-data/SearchStructuredDataFactory.d.ts +34 -0
  355. package/dist/src/structured-data/SearchStructuredDataFactory.js +144 -0
  356. package/dist/src/structured-data/dto/BreadcrumbDTO.d.ts +5 -0
  357. package/dist/src/structured-data/dto/BreadcrumbDTO.js +1 -0
  358. package/dist/src/structured-data/dto/EntityDTO.d.ts +7 -0
  359. package/dist/src/structured-data/dto/EntityDTO.js +1 -0
  360. package/dist/src/structured-data/dto/FAQItemDto.d.ts +4 -0
  361. package/dist/src/structured-data/dto/FAQItemDto.js +1 -0
  362. package/dist/src/structured-data/dto/OfferDTO.d.ts +5 -0
  363. package/dist/src/structured-data/dto/OfferDTO.js +1 -0
  364. package/dist/src/structured-data/dto/ReviewRatingDTO.d.ts +4 -0
  365. package/dist/src/structured-data/dto/ReviewRatingDTO.js +1 -0
  366. package/dist/src/structured-data/dto/index.d.ts +5 -0
  367. package/dist/src/structured-data/dto/index.js +5 -0
  368. package/dist/src/structured-data/index.d.ts +2 -0
  369. package/dist/src/structured-data/index.js +2 -0
  370. package/dist/src/structured-data/interface/StructuredDataCurrencyConversionService.d.ts +3 -0
  371. package/dist/src/structured-data/interface/StructuredDataCurrencyConversionService.js +1 -0
  372. package/dist/structured-data-seo/index.d.ts +1 -0
  373. package/dist/structured-data-seo/index.js +1 -0
  374. package/package.json +2 -2
@@ -0,0 +1,16 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
+ import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { ErasmusOrJointSpecialProgrammesRule } from '../rules/ErasmusOrJointSpecialProgrammesRule';
6
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
8
+ export declare class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
9
+ readonly name: string;
10
+ readonly description: string;
11
+ readonly filterKeys: FilterKey[];
12
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | ErasmusOrJointSpecialProgrammesRule)[];
13
+ constructor(dependencies: IProgrammeSeoDependencies);
14
+ protected generateUrls(): Promise<string[]>;
15
+ get filterCombination(): FilterCombinations;
16
+ }
@@ -0,0 +1,38 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
+ import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { ErasmusOrJointSpecialProgrammesRule } from '../rules/ErasmusOrJointSpecialProgrammesRule';
6
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
+ import { SpecialProgrammesPresenter } from '../../presenters/SpecialProgrammesPresenter';
8
+ export class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
9
+ name = 'Special Programmes Policy';
10
+ description = 'Controls indexing of pages filtered by special programmes like Erasmus Mundus or Joint Programmes.';
11
+ filterKeys = [FilterKey.SPECIAL_PROGRAMMES];
12
+ rules = [
13
+ new SingleValueSelectedForFilterRule(FilterKey.SPECIAL_PROGRAMMES),
14
+ new OnlyFiltersSelectedRule([FilterKey.SPECIAL_PROGRAMMES]),
15
+ new ErasmusOrJointSpecialProgrammesRule()
16
+ ];
17
+ constructor(dependencies) {
18
+ super(dependencies);
19
+ this.initateBaseRules();
20
+ }
21
+ async generateUrls() {
22
+ const specialProgrammeFragments = SpecialProgrammesPresenter.getInstance().getFragments();
23
+ const paths = [];
24
+ for (const pageNumber of this.indexablePageNumbers) {
25
+ for (const specialProgramme of specialProgrammeFragments) {
26
+ const filterKeyValues = new Map([[FilterKey.SPECIAL_PROGRAMMES, [specialProgramme.id]]]);
27
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
28
+ if (result) {
29
+ paths.push(this.getPathWithPageNumber(specialProgramme.path, pageNumber));
30
+ }
31
+ }
32
+ }
33
+ return paths;
34
+ }
35
+ get filterCombination() {
36
+ return FilterCombinations.SPECIAL_PROGRAMMES;
37
+ }
38
+ }
@@ -0,0 +1,15 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
+ import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
+ export declare class TuitionFee extends ProgrammesBaseIndexabilityPolicy {
8
+ readonly name: string;
9
+ readonly description: string;
10
+ readonly filterKeys: FilterKey[];
11
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
12
+ constructor(dependencies: IProgrammeSeoDependencies);
13
+ protected generateUrls(): Promise<string[]>;
14
+ get filterCombination(): FilterCombinations;
15
+ }
@@ -0,0 +1,32 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
+ import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
+ import { TuitionFeePresenter } from '../../presenters/TuitionFeePresenter';
7
+ export class TuitionFee extends ProgrammesBaseIndexabilityPolicy {
8
+ name = 'Tuition Fee Policy';
9
+ description = 'Controls indexing of pages filtered by tuition fee.';
10
+ filterKeys = [FilterKey.TUITION_FEE];
11
+ rules = [
12
+ new SingleValueSelectedForFilterRule(FilterKey.TUITION_FEE),
13
+ new OnlyFiltersSelectedRule([FilterKey.TUITION_FEE])
14
+ ];
15
+ constructor(dependencies) {
16
+ super(dependencies);
17
+ this.initateBaseRules();
18
+ }
19
+ async generateUrls() {
20
+ const tuitionFeeFragments = TuitionFeePresenter.getInstance().getFragments();
21
+ const paths = [];
22
+ for (const pageNumber of this.indexablePageNumbers) {
23
+ for (const tuitionFee of tuitionFeeFragments) {
24
+ paths.push(this.getPathWithPageNumber(tuitionFee.path, pageNumber));
25
+ }
26
+ }
27
+ return Promise.resolve(paths);
28
+ }
29
+ get filterCombination() {
30
+ return FilterCombinations.TUITION_FEE;
31
+ }
32
+ }
@@ -0,0 +1,13 @@
1
+ import { FilterCombinations } from '../../enums/FilterCombinations';
2
+ import { NoFiltersSelectedRule } from '../../common/rules/NoFiltersSelectedRule';
3
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
4
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
5
+ export declare class Unfiltered extends ProgrammesBaseIndexabilityPolicy {
6
+ readonly name: string;
7
+ readonly description: string;
8
+ readonly filterKeys: never[];
9
+ protected readonly rules: NoFiltersSelectedRule[];
10
+ constructor(dependencies: IProgrammeSeoDependencies);
11
+ generateUrls(): Promise<string[]>;
12
+ get filterCombination(): FilterCombinations;
13
+ }
@@ -0,0 +1,19 @@
1
+ import { FilterCombinations } from '../../enums/FilterCombinations';
2
+ import { NoFiltersSelectedRule } from '../../common/rules/NoFiltersSelectedRule';
3
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
4
+ export class Unfiltered extends ProgrammesBaseIndexabilityPolicy {
5
+ name = 'Unfiltered Policy';
6
+ description = 'Defines indexability rules for unfiltered pages, managing crawl budget by ensuring only high-value aggregate pages are included in the sitemap.';
7
+ filterKeys = [];
8
+ rules = [new NoFiltersSelectedRule()];
9
+ constructor(dependencies) {
10
+ super(dependencies);
11
+ this.initateBaseRules();
12
+ }
13
+ async generateUrls() {
14
+ return Promise.resolve(['']);
15
+ }
16
+ get filterCombination() {
17
+ return FilterCombinations.UNFILTERED;
18
+ }
19
+ }
@@ -0,0 +1,34 @@
1
+ export * from './Area';
2
+ export * from './Attendance';
3
+ export * from './AttendanceDegree';
4
+ export * from './Continent';
5
+ export * from './ContinentTuitionFee';
6
+ export * from './Country';
7
+ export * from './CountryAttendance';
8
+ export * from './CountryAttendanceDegree';
9
+ export * from './CountryDegree';
10
+ export * from './CountryDuration';
11
+ export * from './CountryDurationDegree';
12
+ export * from './CountryEducationalForm';
13
+ export * from './CountryFormat';
14
+ export * from './CountryTuitionFee';
15
+ export * from './DegreeAttendanceDiscipline';
16
+ export * from './DegreeCountryAttendance';
17
+ export * from './DegreeCountryDiscipline';
18
+ export * from './DegreeCountryTuitionFee';
19
+ export * from './DisciplineDegree';
20
+ export * from './Discipline';
21
+ export * from './DisciplineArea';
22
+ export * from './DisciplineAttendance';
23
+ export * from './DisciplineContinent';
24
+ export * from './DisciplineCountry';
25
+ export * from './DisciplineCountryEducationalForm';
26
+ export * from './DisciplineDegree';
27
+ export * from './DisciplineDuration';
28
+ export * from './DisciplineEducationalForm';
29
+ export * from './DisciplineFormat';
30
+ export * from './DisciplineTuitionFee';
31
+ export * from './DisciplineTuitionFeeAttendance';
32
+ export * from './SpecialProgrammes';
33
+ export * from './TuitionFee';
34
+ export * from './Unfiltered';
@@ -0,0 +1,34 @@
1
+ export * from './Area';
2
+ export * from './Attendance';
3
+ export * from './AttendanceDegree';
4
+ export * from './Continent';
5
+ export * from './ContinentTuitionFee';
6
+ export * from './Country';
7
+ export * from './CountryAttendance';
8
+ export * from './CountryAttendanceDegree';
9
+ export * from './CountryDegree';
10
+ export * from './CountryDuration';
11
+ export * from './CountryDurationDegree';
12
+ export * from './CountryEducationalForm';
13
+ export * from './CountryFormat';
14
+ export * from './CountryTuitionFee';
15
+ export * from './DegreeAttendanceDiscipline';
16
+ export * from './DegreeCountryAttendance';
17
+ export * from './DegreeCountryDiscipline';
18
+ export * from './DegreeCountryTuitionFee';
19
+ export * from './DisciplineDegree';
20
+ export * from './Discipline';
21
+ export * from './DisciplineArea';
22
+ export * from './DisciplineAttendance';
23
+ export * from './DisciplineContinent';
24
+ export * from './DisciplineCountry';
25
+ export * from './DisciplineCountryEducationalForm';
26
+ export * from './DisciplineDegree';
27
+ export * from './DisciplineDuration';
28
+ export * from './DisciplineEducationalForm';
29
+ export * from './DisciplineFormat';
30
+ export * from './DisciplineTuitionFee';
31
+ export * from './DisciplineTuitionFeeAttendance';
32
+ export * from './SpecialProgrammes';
33
+ export * from './TuitionFee';
34
+ export * from './Unfiltered';
@@ -0,0 +1,6 @@
1
+ import { BaseProgrammeFilterKeyValueRule } from '../BaseProgrammeFilterKeyValueRule';
2
+ export declare class AffordableTuitionFeeRule extends BaseProgrammeFilterKeyValueRule {
3
+ constructor();
4
+ getName(): string;
5
+ getDescription(): string;
6
+ }
@@ -0,0 +1,17 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { TuitionFeeFilterOptionValue } from '@studyportals/search-filters';
3
+ import { BaseProgrammeFilterKeyValueRule } from '../BaseProgrammeFilterKeyValueRule';
4
+ export class AffordableTuitionFeeRule extends BaseProgrammeFilterKeyValueRule {
5
+ constructor() {
6
+ const filterKeyValues = new Map([
7
+ [FilterKey.TUITION_FEE, [TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED]]
8
+ ]);
9
+ super(filterKeyValues);
10
+ }
11
+ getName() {
12
+ return 'AffordableTuitionFeeRule';
13
+ }
14
+ getDescription() {
15
+ return 'Is indexable if the selected tuition fee is affordable (between 0 and 2500).';
16
+ }
17
+ }
@@ -0,0 +1,15 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
+ import { ISearchApiClient } from '../../sitemap-generator/ISearchApiClient';
4
+ import { IProgrammeRule } from '../IProgrammeRule';
5
+ export declare class AtLeastSevenResultsRule implements IProgrammeRule {
6
+ private readonly minimumResultsCount;
7
+ private readonly maximumPageSize;
8
+ private readonly searchApiClient?;
9
+ constructor(searchApiClient?: ISearchApiClient);
10
+ forSearch(dependencies: ISearchDependencies): Promise<boolean>;
11
+ forSitemapGeneratorWithPageNumber(filterKeyValues: FilterKeyValuesMap, pageNumber: number): Promise<boolean>;
12
+ forSitemapGenerator(): Promise<boolean>;
13
+ getName(): string;
14
+ getDescription(): string;
15
+ }
@@ -0,0 +1,30 @@
1
+ import { DependencyMissingError } from '../../errors/DependencyMissingError';
2
+ export class AtLeastSevenResultsRule {
3
+ minimumResultsCount = 7;
4
+ maximumPageSize = 20;
5
+ searchApiClient;
6
+ constructor(searchApiClient) {
7
+ this.searchApiClient = searchApiClient;
8
+ }
9
+ forSearch(dependencies) {
10
+ const { applicationState } = dependencies;
11
+ const resultCount = applicationState.getNumberOfResults();
12
+ return Promise.resolve(resultCount >= this.minimumResultsCount);
13
+ }
14
+ async forSitemapGeneratorWithPageNumber(filterKeyValues, pageNumber) {
15
+ if (!this.searchApiClient) {
16
+ throw new DependencyMissingError('SearchApiClient');
17
+ }
18
+ const count = await this.searchApiClient.getCount(filterKeyValues);
19
+ return count >= (pageNumber - 1) * this.maximumPageSize + this.minimumResultsCount;
20
+ }
21
+ forSitemapGenerator() {
22
+ throw new Error('Method not implemented.');
23
+ }
24
+ getName() {
25
+ return 'AtLeastSevenResultsRule';
26
+ }
27
+ getDescription() {
28
+ return 'Is indexable if there are at least 7 results.';
29
+ }
30
+ }
@@ -0,0 +1,11 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class DegreeAttendanceDisciplineRule extends BaseProgrammeRule {
5
+ private readonly allowedDegrees;
6
+ private readonly attendanceValue;
7
+ getName(): string;
8
+ getDescription(): string;
9
+ forSearch(dependencies: ISearchDependencies): Promise<boolean>;
10
+ forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
11
+ }
@@ -0,0 +1,44 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { DegreeTypeFilterOptionValue } from '@studyportals/search-filters';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class DegreeAttendanceDisciplineRule extends BaseProgrammeRule {
5
+ allowedDegrees = [
6
+ DegreeTypeFilterOptionValue.MA,
7
+ DegreeTypeFilterOptionValue.MSC,
8
+ DegreeTypeFilterOptionValue.MBA
9
+ ].map(id => id.valueOf());
10
+ attendanceValue = 'online';
11
+ getName() {
12
+ return 'DegreeAttendanceDisciplineRule';
13
+ }
14
+ getDescription() {
15
+ return 'Indexes: master-of-arts (online) + all disciplines; master-of-science (online) + all disciplines; master-of-business-administration (online) + all disciplines';
16
+ }
17
+ forSearch(dependencies) {
18
+ const { seoInfoBase, filterState } = dependencies;
19
+ const degreeTypeValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DEGREE_TYPE, filterState);
20
+ const attendanceValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DELIVERY_METHOD, filterState);
21
+ const disciplineValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DISCIPLINES, filterState);
22
+ if (!degreeTypeValue || !attendanceValue || !this.allowedDegrees.includes(degreeTypeValue) || attendanceValue !== this.attendanceValue) {
23
+ return Promise.resolve(true);
24
+ }
25
+ if (!disciplineValue) {
26
+ return Promise.resolve(false);
27
+ }
28
+ return Promise.resolve(true);
29
+ }
30
+ forSitemapGenerator(filterKeyValues) {
31
+ const degreeTypeValues = filterKeyValues.get(FilterKey.DEGREE_TYPE);
32
+ const attendanceValues = filterKeyValues.get(FilterKey.DELIVERY_METHOD);
33
+ const disciplineValues = filterKeyValues.get(FilterKey.DISCIPLINES);
34
+ if (!degreeTypeValues?.length || !attendanceValues?.length || !disciplineValues?.length) {
35
+ return Promise.resolve(false);
36
+ }
37
+ const degreeTypeValue = degreeTypeValues[0];
38
+ const attendanceValue = attendanceValues[0];
39
+ if (!degreeTypeValue || !attendanceValue || !this.allowedDegrees.includes(degreeTypeValue) || attendanceValue !== this.attendanceValue) {
40
+ return Promise.resolve(true);
41
+ }
42
+ return Promise.resolve(true);
43
+ }
44
+ }
@@ -0,0 +1,11 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class DegreeAttendanceDisciplineSpecificRule extends BaseProgrammeRule {
5
+ private readonly allowedDegrees;
6
+ private readonly allowedAttendance;
7
+ getName(): string;
8
+ getDescription(): string;
9
+ forSearch(dependencies: ISearchDependencies): Promise<boolean>;
10
+ forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
11
+ }
@@ -0,0 +1,39 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { DegreeTypeFilterOptionValue } from '@studyportals/search-filters';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class DegreeAttendanceDisciplineSpecificRule extends BaseProgrammeRule {
5
+ allowedDegrees = [
6
+ DegreeTypeFilterOptionValue.MSC,
7
+ DegreeTypeFilterOptionValue.MA,
8
+ DegreeTypeFilterOptionValue.MBA
9
+ ];
10
+ allowedAttendance = 'online';
11
+ getName() {
12
+ return 'DegreeAttendanceDisciplineSpecificRule';
13
+ }
14
+ getDescription() {
15
+ return 'Only allows MSc, MA, and MBA degrees with online attendance for attendance+discipline combinations';
16
+ }
17
+ forSearch(dependencies) {
18
+ const { seoInfoBase, filterState } = dependencies;
19
+ const degreeTypeValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DEGREE_TYPE, filterState);
20
+ const attendanceValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DELIVERY_METHOD, filterState);
21
+ const disciplineValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DISCIPLINES, filterState);
22
+ if (!degreeTypeValue || !attendanceValue || !disciplineValue) {
23
+ return Promise.resolve(false);
24
+ }
25
+ return Promise.resolve(this.allowedDegrees.includes(degreeTypeValue) &&
26
+ attendanceValue === this.allowedAttendance);
27
+ }
28
+ forSitemapGenerator(filterKeyValues) {
29
+ const degreeTypeValues = filterKeyValues.get(FilterKey.DEGREE_TYPE);
30
+ const attendanceValues = filterKeyValues.get(FilterKey.DELIVERY_METHOD);
31
+ if (!degreeTypeValues?.length || !attendanceValues?.length) {
32
+ return Promise.resolve(false);
33
+ }
34
+ const degreeTypeValue = degreeTypeValues[0];
35
+ const attendanceValue = attendanceValues[0];
36
+ return Promise.resolve(this.allowedDegrees.includes(degreeTypeValue) &&
37
+ attendanceValue === this.allowedAttendance);
38
+ }
39
+ }
@@ -0,0 +1,14 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class DegreeCountryAttendanceSpecificRule extends BaseProgrammeRule {
5
+ private mba;
6
+ private readonly countryIdsByDegree;
7
+ getName(): string;
8
+ getDescription(): string;
9
+ forSearch(dependencies: ISearchDependencies): Promise<boolean>;
10
+ forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
11
+ private isValidForMbaDegree;
12
+ private isValidForMphilDegree;
13
+ private isValidForLlmDegree;
14
+ }
@@ -0,0 +1,76 @@
1
+ import { AttendanceFilterOptionValue, FilterKey } from '@studyportals/search-filters';
2
+ import { DegreeTypeFilterOptionValue } from '@studyportals/search-filters';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class DegreeCountryAttendanceSpecificRule extends BaseProgrammeRule {
5
+ mba = DegreeTypeFilterOptionValue.MBA.valueOf();
6
+ countryIdsByDegree = {
7
+ [DegreeTypeFilterOptionValue.LLM.valueOf()]: ['82', '30', '56', '108'],
8
+ [DegreeTypeFilterOptionValue.MPHIL.valueOf()]: ['82', '30', '108'],
9
+ };
10
+ getName() {
11
+ return 'DegreeCountryAttendanceSpecificRule';
12
+ }
13
+ getDescription() {
14
+ return 'Only allows MBA, LLM, and MPhil degrees for country+attendance combinations';
15
+ }
16
+ forSearch(dependencies) {
17
+ const { seoInfoBase, filterState } = dependencies;
18
+ const degreeTypeValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DEGREE_TYPE, filterState);
19
+ const countryValue = seoInfoBase.getFilterOptionValueBy(FilterKey.COUNTRY, filterState);
20
+ const attendanceValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DELIVERY_METHOD, filterState);
21
+ if (!degreeTypeValue || !countryValue || !attendanceValue) {
22
+ return Promise.resolve(false);
23
+ }
24
+ if (attendanceValue !== AttendanceFilterOptionValue.ONLINE) {
25
+ return Promise.resolve(false);
26
+ }
27
+ if (this.isValidForMbaDegree(degreeTypeValue)) {
28
+ return Promise.resolve(true);
29
+ }
30
+ if (this.isValidForMphilDegree(degreeTypeValue, countryValue)) {
31
+ return Promise.resolve(true);
32
+ }
33
+ if (this.isValidForLlmDegree(degreeTypeValue, countryValue)) {
34
+ return Promise.resolve(true);
35
+ }
36
+ return Promise.resolve(false);
37
+ }
38
+ forSitemapGenerator(filterKeyValues) {
39
+ const degreeTypeValues = filterKeyValues.get(FilterKey.DEGREE_TYPE);
40
+ const countryValues = filterKeyValues.get(FilterKey.COUNTRY);
41
+ const attendanceValues = filterKeyValues.get(FilterKey.DELIVERY_METHOD);
42
+ if (!degreeTypeValues?.length || !countryValues?.length || !attendanceValues?.length) {
43
+ return Promise.resolve(false);
44
+ }
45
+ const degreeTypeValue = degreeTypeValues[0];
46
+ const countryValue = countryValues[0];
47
+ const attendanceValue = attendanceValues[0];
48
+ if (!degreeTypeValue || !countryValue || !attendanceValue) {
49
+ return Promise.resolve(false);
50
+ }
51
+ if (attendanceValue !== AttendanceFilterOptionValue.ONLINE) {
52
+ return Promise.resolve(false);
53
+ }
54
+ if (this.isValidForMbaDegree(degreeTypeValue)) {
55
+ return Promise.resolve(true);
56
+ }
57
+ if (this.isValidForMphilDegree(degreeTypeValue, countryValue)) {
58
+ return Promise.resolve(true);
59
+ }
60
+ if (this.isValidForLlmDegree(degreeTypeValue, countryValue)) {
61
+ return Promise.resolve(true);
62
+ }
63
+ return Promise.resolve(false);
64
+ }
65
+ isValidForMbaDegree(degreeTypeValue) {
66
+ return degreeTypeValue === this.mba;
67
+ }
68
+ isValidForMphilDegree(degreeTypeValue, countryValue) {
69
+ return degreeTypeValue === DegreeTypeFilterOptionValue.MPHIL.valueOf() &&
70
+ this.countryIdsByDegree[DegreeTypeFilterOptionValue.MPHIL.valueOf()].includes(countryValue);
71
+ }
72
+ isValidForLlmDegree(degreeTypeValue, countryValue) {
73
+ return degreeTypeValue === DegreeTypeFilterOptionValue.LLM.valueOf() &&
74
+ this.countryIdsByDegree[DegreeTypeFilterOptionValue.LLM.valueOf()].includes(countryValue);
75
+ }
76
+ }
@@ -0,0 +1,11 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class DegreeCountryDisciplineSpecificRule extends BaseProgrammeRule {
5
+ private readonly educationDisciplineIds;
6
+ private readonly validCombinations;
7
+ getName(): string;
8
+ getDescription(): string;
9
+ forSearch(dependencies: ISearchDependencies): Promise<boolean>;
10
+ forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
11
+ }
@@ -0,0 +1,76 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { DegreeTypeFilterOptionValue } from '@studyportals/search-filters';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export class DegreeCountryDisciplineSpecificRule extends BaseProgrammeRule {
5
+ educationDisciplineIds = [
6
+ '289', // Education & Training (main discipline)
7
+ '290', // Adult Education
8
+ '360', // Art Education
9
+ '291', // Coaching
10
+ '292', // School Counselling
11
+ '333', // Early Childhood Education
12
+ '8', // Education
13
+ '349', // Educational Leadership
14
+ '293', // Educational Psychology
15
+ '98', // Educational Research
16
+ '371', // Health Education
17
+ '363', // Higher Education
18
+ '355', // Instructional Design
19
+ '370', // Literacy Education
20
+ '348', // Primary Education
21
+ '97', // Special Education
22
+ '359', // Secondary Education
23
+ '345', // STEM Education
24
+ '295', // Teaching
25
+ '358' // Teaching English as a Foreign Language
26
+ ];
27
+ validCombinations = {
28
+ [DegreeTypeFilterOptionValue.MSC]: ['82', '56', '11', '30'],
29
+ [DegreeTypeFilterOptionValue.MBA]: ['82', '30'],
30
+ [DegreeTypeFilterOptionValue.MED]: ['202', '56']
31
+ };
32
+ getName() {
33
+ return 'DegreeCountrySpecificRule';
34
+ }
35
+ getDescription() {
36
+ return 'Indexes: master-of-science (USA, Canada, Germany, UK); master-of-business-administration (USA, UK); master-of-education (Australia, Canada)';
37
+ }
38
+ forSearch(dependencies) {
39
+ const { seoInfoBase, filterState } = dependencies;
40
+ const degreeTypeValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DEGREE_TYPE, filterState);
41
+ const countryValue = seoInfoBase.getFilterOptionValueBy(FilterKey.COUNTRY, filterState);
42
+ const disciplineValue = seoInfoBase.getFilterOptionValueBy(FilterKey.DISCIPLINES, filterState);
43
+ if (!degreeTypeValue || !countryValue || !disciplineValue) {
44
+ return Promise.resolve(false);
45
+ }
46
+ const allowedCountries = this.validCombinations[degreeTypeValue];
47
+ if (!allowedCountries) {
48
+ return Promise.resolve(false);
49
+ }
50
+ if (degreeTypeValue === DegreeTypeFilterOptionValue.MED) {
51
+ return Promise.resolve(allowedCountries.includes(countryValue) &&
52
+ this.educationDisciplineIds.includes(disciplineValue));
53
+ }
54
+ return Promise.resolve(allowedCountries.includes(countryValue));
55
+ }
56
+ forSitemapGenerator(filterKeyValues) {
57
+ const degreeTypeValues = filterKeyValues.get(FilterKey.DEGREE_TYPE);
58
+ const countryValues = filterKeyValues.get(FilterKey.COUNTRY);
59
+ const disciplineValues = filterKeyValues.get(FilterKey.DISCIPLINES);
60
+ if (!degreeTypeValues?.length || !countryValues?.length || !disciplineValues?.length) {
61
+ return Promise.resolve(false);
62
+ }
63
+ const degreeTypeValue = degreeTypeValues[0];
64
+ const countryValue = countryValues[0];
65
+ const disciplineValue = disciplineValues[0];
66
+ const allowedCountries = this.validCombinations[degreeTypeValue];
67
+ if (!allowedCountries) {
68
+ return Promise.resolve(false);
69
+ }
70
+ if (degreeTypeValue === DegreeTypeFilterOptionValue.MED) {
71
+ return Promise.resolve(allowedCountries.includes(countryValue) &&
72
+ this.educationDisciplineIds.includes(disciplineValue));
73
+ }
74
+ return Promise.resolve(allowedCountries.includes(countryValue));
75
+ }
76
+ }
@@ -0,0 +1,12 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { FilterKeyValuesMap } from '../../common/FilterKeyValuesMap';
3
+ import { BaseProgrammeRule } from '../BaseProgrammeRule';
4
+ export declare class DegreeCountryTuitionFeeSpecificRule extends BaseProgrammeRule {
5
+ private readonly validDegreeValues;
6
+ private readonly tuitionFeeValue;
7
+ private readonly validCombinations;
8
+ getName(): string;
9
+ getDescription(): string;
10
+ forSearch(dependencies: ISearchDependencies): Promise<boolean>;
11
+ forSitemapGenerator(filterKeyValues: FilterKeyValuesMap): Promise<boolean>;
12
+ }