@studyportals/fawkes 7.4.2-2 → 7.4.2-4

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 (267) hide show
  1. package/README.md +176 -176
  2. package/dist/src/common/FilterKeyValuesMap.d.ts +1 -1
  3. package/dist/src/common/IPolicyMetaData.d.ts +6 -0
  4. package/dist/src/common/IPolicyMetaData.js +1 -0
  5. package/dist/src/common/IPresenter.d.ts +1 -1
  6. package/dist/src/common/ISeoFilterState.d.ts +1 -1
  7. package/dist/src/common/ISeoInfoBase.d.ts +1 -1
  8. package/dist/src/common/rules/OnlineAttendanceRule.js +1 -1
  9. package/dist/src/common/rules/OnlyFiltersSelectedRule.d.ts +1 -1
  10. package/dist/src/common/rules/SingleValueSelectedForFilterRule.d.ts +1 -1
  11. package/dist/src/enums/FilterCombinations.d.ts +22 -1
  12. package/dist/src/enums/FilterCombinations.js +22 -1
  13. package/dist/src/errors/InvalidFilterValueError.d.ts +1 -1
  14. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.d.ts +11 -0
  15. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.js +19 -0
  16. package/dist/src/organisations/policies/our-picks/Area.js +1 -1
  17. package/dist/src/organisations/policies/our-picks/AreaAttendance.js +1 -1
  18. package/dist/src/organisations/policies/our-picks/Attendance.js +1 -1
  19. package/dist/src/organisations/policies/our-picks/Continent.js +1 -1
  20. package/dist/src/organisations/policies/our-picks/Country.js +1 -1
  21. package/dist/src/organisations/policies/our-picks/CountryAttendance.js +1 -1
  22. package/dist/src/organisations/policies/ranked/RankedArea.js +1 -1
  23. package/dist/src/organisations/policies/ranked/RankedAreaDiscipline.js +1 -1
  24. package/dist/src/organisations/policies/ranked/RankedAttendance.js +1 -1
  25. package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.js +1 -1
  26. package/dist/src/organisations/policies/ranked/RankedContinent.js +1 -1
  27. package/dist/src/organisations/policies/ranked/RankedContinentAttendance.js +1 -1
  28. package/dist/src/organisations/policies/ranked/RankedCountry.js +1 -1
  29. package/dist/src/organisations/policies/ranked/RankedCountryAttendance.js +1 -1
  30. package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.js +1 -1
  31. package/dist/src/organisations/policies/ranked/RankedDiscipline.js +1 -1
  32. package/dist/src/organisations/rules/BaseSearchVolumeOrganisationsRule.d.ts +1 -1
  33. package/dist/src/organisations/rules/ContinentIsEuropeRule.js +1 -1
  34. package/dist/src/organisations/rules/OnlineAttendanceRule.d.ts +6 -0
  35. package/dist/src/organisations/rules/OnlineAttendanceRule.js +14 -0
  36. package/dist/src/organisations/rules/SearchVolumeAreasAttendanceRule.js +1 -1
  37. package/dist/src/organisations/rules/SearchVolumeAreasDisciplineRule.js +1 -1
  38. package/dist/src/organisations/rules/SearchVolumeCountriesAttendanceRule.js +1 -1
  39. package/dist/src/presenters/AreaPresenter.d.ts +1 -1
  40. package/dist/src/presenters/AreaPresenter.js +1 -1
  41. package/dist/src/presenters/AttendancePresenter.d.ts +1 -1
  42. package/dist/src/presenters/AttendancePresenter.js +5 -1
  43. package/dist/src/presenters/ContinentPresenter.d.ts +1 -1
  44. package/dist/src/presenters/ContinentPresenter.js +1 -1
  45. package/dist/src/presenters/CountryPresenter.d.ts +1 -1
  46. package/dist/src/presenters/CountryPresenter.js +1 -1
  47. package/dist/src/presenters/DegreePresenter.d.ts +1 -1
  48. package/dist/src/presenters/DegreePresenter.js +1 -2
  49. package/dist/src/presenters/DisciplinePresenter.d.ts +1 -1
  50. package/dist/src/presenters/DisciplinePresenter.js +1 -1
  51. package/dist/src/presenters/DurationPresenter.d.ts +1 -2
  52. package/dist/src/presenters/DurationPresenter.js +1 -2
  53. package/dist/src/presenters/EducationalFormPresenter.d.ts +1 -1
  54. package/dist/src/presenters/EducationalFormPresenter.js +1 -2
  55. package/dist/src/presenters/FormatPresenter.d.ts +1 -1
  56. package/dist/src/presenters/FormatPresenter.js +5 -3
  57. package/dist/src/presenters/SpecialProgrammesPresenter.d.ts +1 -1
  58. package/dist/src/presenters/SpecialProgrammesPresenter.js +5 -2
  59. package/dist/src/presenters/TuitionFeePresenter.d.ts +1 -1
  60. package/dist/src/presenters/TuitionFeePresenter.js +1 -2
  61. package/dist/src/programmes/IProgrammeSearchApplicationState.d.ts +4 -0
  62. package/dist/src/programmes/IProgrammeSearchApplicationState.js +1 -0
  63. package/dist/src/programmes/IProgrammeSearchDependencies.d.ts +7 -0
  64. package/dist/src/programmes/IProgrammeSearchDependencies.js +1 -0
  65. package/dist/src/programmes/IProgrammesSeoDependencies.d.ts +2 -0
  66. package/dist/src/programmes/IProgrammesSeoDependencies.js +1 -0
  67. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +1 -1
  68. package/dist/src/programmes/SearchIndexabilityManager.js +27 -3
  69. package/dist/src/programmes/policies/Area.d.ts +1 -1
  70. package/dist/src/programmes/policies/Area.js +1 -1
  71. package/dist/src/programmes/policies/Attendance.d.ts +1 -1
  72. package/dist/src/programmes/policies/Attendance.js +1 -1
  73. package/dist/src/programmes/policies/AttendanceArea.d.ts +16 -0
  74. package/dist/src/programmes/policies/AttendanceArea.js +48 -0
  75. package/dist/src/programmes/policies/AttendanceContinent.d.ts +16 -0
  76. package/dist/src/programmes/policies/AttendanceContinent.js +46 -0
  77. package/dist/src/programmes/policies/AttendanceDegree.d.ts +3 -4
  78. package/dist/src/programmes/policies/AttendanceDegree.js +8 -7
  79. package/dist/src/programmes/policies/AttendanceDuration.d.ts +16 -0
  80. package/dist/src/programmes/policies/AttendanceDuration.js +48 -0
  81. package/dist/src/programmes/policies/AttendanceFormat.d.ts +16 -0
  82. package/dist/src/programmes/policies/AttendanceFormat.js +48 -0
  83. package/dist/src/programmes/policies/AttendanceTuitionFee.d.ts +16 -0
  84. package/dist/src/programmes/policies/AttendanceTuitionFee.js +49 -0
  85. package/dist/src/programmes/policies/Continent.d.ts +1 -1
  86. package/dist/src/programmes/policies/Continent.js +1 -1
  87. package/dist/src/programmes/policies/ContinentDuration.d.ts +15 -0
  88. package/dist/src/programmes/policies/ContinentDuration.js +46 -0
  89. package/dist/src/programmes/policies/ContinentFormat.d.ts +15 -0
  90. package/dist/src/programmes/policies/ContinentFormat.js +46 -0
  91. package/dist/src/programmes/policies/ContinentSpecialProgrammes.d.ts +15 -0
  92. package/dist/src/programmes/policies/ContinentSpecialProgrammes.js +46 -0
  93. package/dist/src/programmes/policies/ContinentTuitionFee.d.ts +1 -1
  94. package/dist/src/programmes/policies/ContinentTuitionFee.js +1 -1
  95. package/dist/src/programmes/policies/Country.d.ts +1 -1
  96. package/dist/src/programmes/policies/Country.js +1 -1
  97. package/dist/src/programmes/policies/CountryAttendance.d.ts +1 -1
  98. package/dist/src/programmes/policies/CountryAttendance.js +1 -1
  99. package/dist/src/programmes/policies/CountryAttendanceDegree.d.ts +1 -1
  100. package/dist/src/programmes/policies/CountryAttendanceDegree.js +2 -2
  101. package/dist/src/programmes/policies/CountryDegree.d.ts +1 -1
  102. package/dist/src/programmes/policies/CountryDegree.js +1 -1
  103. package/dist/src/programmes/policies/CountryDuration.d.ts +3 -3
  104. package/dist/src/programmes/policies/CountryDuration.js +7 -5
  105. package/dist/src/programmes/policies/CountryDurationDegree.d.ts +1 -1
  106. package/dist/src/programmes/policies/CountryDurationDegree.js +2 -2
  107. package/dist/src/programmes/policies/CountryEducationalForm.d.ts +1 -1
  108. package/dist/src/programmes/policies/CountryEducationalForm.js +2 -2
  109. package/dist/src/programmes/policies/CountryFormat.d.ts +1 -1
  110. package/dist/src/programmes/policies/CountryFormat.js +1 -1
  111. package/dist/src/programmes/policies/CountrySpecialProgrammes.d.ts +15 -0
  112. package/dist/src/programmes/policies/CountrySpecialProgrammes.js +46 -0
  113. package/dist/src/programmes/policies/CountryTuitionFee.d.ts +1 -1
  114. package/dist/src/programmes/policies/CountryTuitionFee.js +1 -1
  115. package/dist/src/programmes/policies/Degree.d.ts +1 -1
  116. package/dist/src/programmes/policies/Degree.js +1 -1
  117. package/dist/src/programmes/policies/DegreeArea.d.ts +15 -0
  118. package/dist/src/programmes/policies/DegreeArea.js +46 -0
  119. package/dist/src/programmes/policies/DegreeAreaTuitionFee.d.ts +15 -0
  120. package/dist/src/programmes/policies/DegreeAreaTuitionFee.js +52 -0
  121. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.d.ts +3 -2
  122. package/dist/src/programmes/policies/DegreeAttendanceDiscipline.js +14 -14
  123. package/dist/src/programmes/policies/DegreeAttendanceFormat.d.ts +15 -0
  124. package/dist/src/programmes/policies/DegreeAttendanceFormat.js +52 -0
  125. package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.d.ts +16 -0
  126. package/dist/src/programmes/policies/DegreeAttendanceSpecialProgrammes.js +56 -0
  127. package/dist/src/programmes/policies/DegreeAttendanceTuitionFee.d.ts +16 -0
  128. package/dist/src/programmes/policies/DegreeAttendanceTuitionFee.js +55 -0
  129. package/dist/src/programmes/policies/DegreeContinent.d.ts +16 -0
  130. package/dist/src/programmes/policies/DegreeContinent.js +46 -0
  131. package/dist/src/programmes/policies/DegreeContinentTuitionFee.d.ts +16 -0
  132. package/dist/src/programmes/policies/DegreeContinentTuitionFee.js +52 -0
  133. package/dist/src/programmes/policies/DegreeCountryAttendance.d.ts +1 -1
  134. package/dist/src/programmes/policies/DegreeCountryAttendance.js +2 -2
  135. package/dist/src/programmes/policies/DegreeCountryDiscipline.d.ts +1 -1
  136. package/dist/src/programmes/policies/DegreeCountryDiscipline.js +2 -2
  137. package/dist/src/programmes/policies/DegreeCountryTuitionFee.d.ts +1 -1
  138. package/dist/src/programmes/policies/DegreeCountryTuitionFee.js +3 -3
  139. package/dist/src/programmes/policies/DegreeDuration.d.ts +16 -0
  140. package/dist/src/programmes/policies/DegreeDuration.js +48 -0
  141. package/dist/src/programmes/policies/DegreeFormat.d.ts +16 -0
  142. package/dist/src/programmes/policies/DegreeFormat.js +49 -0
  143. package/dist/src/programmes/policies/DegreeFormatTuitionFee.d.ts +16 -0
  144. package/dist/src/programmes/policies/DegreeFormatTuitionFee.js +52 -0
  145. package/dist/src/programmes/policies/DegreeSpecialProgrammes.d.ts +15 -0
  146. package/dist/src/programmes/policies/DegreeSpecialProgrammes.js +48 -0
  147. package/dist/src/programmes/policies/DegreeTuitionFee.d.ts +15 -0
  148. package/dist/src/programmes/policies/DegreeTuitionFee.js +47 -0
  149. package/dist/src/programmes/policies/Discipline.d.ts +1 -1
  150. package/dist/src/programmes/policies/Discipline.js +1 -1
  151. package/dist/src/programmes/policies/DisciplineArea.d.ts +1 -1
  152. package/dist/src/programmes/policies/DisciplineArea.js +1 -1
  153. package/dist/src/programmes/policies/DisciplineAttendance.d.ts +1 -1
  154. package/dist/src/programmes/policies/DisciplineAttendance.js +1 -1
  155. package/dist/src/programmes/policies/DisciplineContinent.d.ts +1 -1
  156. package/dist/src/programmes/policies/DisciplineContinent.js +1 -1
  157. package/dist/src/programmes/policies/DisciplineContinentAttendance.d.ts +16 -0
  158. package/dist/src/programmes/policies/DisciplineContinentAttendance.js +54 -0
  159. package/dist/src/programmes/policies/DisciplineCountry.d.ts +1 -1
  160. package/dist/src/programmes/policies/DisciplineCountry.js +1 -1
  161. package/dist/src/programmes/policies/DisciplineCountryAttendance.d.ts +16 -0
  162. package/dist/src/programmes/policies/DisciplineCountryAttendance.js +54 -0
  163. package/dist/src/programmes/policies/DisciplineCountryDegree.d.ts +16 -0
  164. package/dist/src/programmes/policies/DisciplineCountryDegree.js +53 -0
  165. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.d.ts +1 -1
  166. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +2 -2
  167. package/dist/src/programmes/policies/DisciplineCountryFormat.d.ts +15 -0
  168. package/dist/src/programmes/policies/DisciplineCountryFormat.js +52 -0
  169. package/dist/src/programmes/policies/DisciplineDegree.d.ts +1 -1
  170. package/dist/src/programmes/policies/DisciplineDegree.js +1 -1
  171. package/dist/src/programmes/policies/DisciplineDuration.d.ts +1 -1
  172. package/dist/src/programmes/policies/DisciplineDuration.js +1 -1
  173. package/dist/src/programmes/policies/DisciplineEducationalForm.d.ts +1 -1
  174. package/dist/src/programmes/policies/DisciplineEducationalForm.js +2 -2
  175. package/dist/src/programmes/policies/DisciplineFormat.d.ts +1 -1
  176. package/dist/src/programmes/policies/DisciplineFormat.js +1 -1
  177. package/dist/src/programmes/policies/DisciplineSpecialProgrammes.d.ts +15 -0
  178. package/dist/src/programmes/policies/DisciplineSpecialProgrammes.js +46 -0
  179. package/dist/src/programmes/policies/DisciplineTuitionFee.d.ts +1 -1
  180. package/dist/src/programmes/policies/DisciplineTuitionFee.js +1 -1
  181. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.d.ts +1 -1
  182. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +1 -1
  183. package/dist/src/programmes/policies/Duration.d.ts +15 -0
  184. package/dist/src/programmes/policies/Duration.js +35 -0
  185. package/dist/src/programmes/policies/Format.d.ts +15 -0
  186. package/dist/src/programmes/policies/Format.js +35 -0
  187. package/dist/src/programmes/policies/SpecialProgrammes.d.ts +2 -3
  188. package/dist/src/programmes/policies/SpecialProgrammes.js +2 -4
  189. package/dist/src/programmes/policies/TuitionFee.d.ts +1 -1
  190. package/dist/src/programmes/policies/TuitionFee.js +1 -1
  191. package/dist/src/programmes/policies/index.d.ts +26 -1
  192. package/dist/src/programmes/policies/index.js +26 -1
  193. package/dist/src/programmes/rules/AffordableTuitionFeeRule.js +2 -2
  194. package/dist/src/programmes/rules/DegreeAttendanceDisciplineRule.js +2 -2
  195. package/dist/src/programmes/rules/DegreeAttendanceDisciplineSpecificRule.js +2 -2
  196. package/dist/src/programmes/rules/DegreeAttendanceSpecificRule.d.ts +10 -0
  197. package/dist/src/programmes/rules/DegreeAttendanceSpecificRule.js +42 -0
  198. package/dist/src/programmes/rules/DegreeCountryAttendanceSpecificRule.js +2 -3
  199. package/dist/src/programmes/rules/DegreeCountryDisciplineSpecificRule.js +2 -2
  200. package/dist/src/programmes/rules/DegreeCountrySpecificRule.d.ts +10 -0
  201. package/dist/src/programmes/rules/DegreeCountrySpecificRule.js +43 -0
  202. package/dist/src/programmes/rules/DegreeCountryTuitionFeeRule.d.ts +11 -0
  203. package/dist/src/programmes/rules/DegreeCountryTuitionFeeRule.js +40 -0
  204. package/dist/src/programmes/rules/DegreeCountryTuitionFeeSpecificRule.js +3 -3
  205. package/dist/src/programmes/rules/DegreeDisciplineRule.js +2 -2
  206. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.js +2 -2
  207. package/dist/src/programmes/rules/IndexableDegreeRule.js +2 -2
  208. package/dist/src/programmes/rules/IndexableDurationRule.js +1 -1
  209. package/dist/src/programmes/rules/IndexableEducationalFormRule.js +2 -2
  210. package/dist/src/programmes/rules/MBACountryAttendanceRule.d.ts +11 -0
  211. package/dist/src/programmes/rules/MBACountryAttendanceRule.js +40 -0
  212. package/dist/src/programmes/rules/MasterOfArtsDisciplineRule.d.ts +10 -0
  213. package/dist/src/programmes/rules/MasterOfArtsDisciplineRule.js +41 -0
  214. package/dist/src/programmes/rules/MasterOfEducationCountryDisciplineRule.d.ts +11 -0
  215. package/dist/src/programmes/rules/MasterOfEducationCountryDisciplineRule.js +69 -0
  216. package/dist/src/programmes/rules/MasterOfLawsCountryAttendanceRule.d.ts +12 -0
  217. package/dist/src/programmes/rules/MasterOfLawsCountryAttendanceRule.js +43 -0
  218. package/dist/src/programmes/rules/MasterOfLawsCountryTuitionFeeRule.d.ts +12 -0
  219. package/dist/src/programmes/rules/MasterOfLawsCountryTuitionFeeRule.js +46 -0
  220. package/dist/src/programmes/rules/MasterOfPhilosophyCountryAttendanceRule.d.ts +12 -0
  221. package/dist/src/programmes/rules/MasterOfPhilosophyCountryAttendanceRule.js +43 -0
  222. package/dist/src/programmes/rules/MasterOfScienceDisciplineRule.d.ts +10 -0
  223. package/dist/src/programmes/rules/MasterOfScienceDisciplineRule.js +41 -0
  224. package/dist/src/programmes/rules/MbaDegreeRule.js +2 -2
  225. package/dist/src/programmes/rules/MbaOrMscDegreeRule.js +2 -2
  226. package/dist/src/programmes/rules/OneYearDurationRule.js +2 -2
  227. package/dist/src/programmes/rules/OneYearOnlyRule.d.ts +11 -0
  228. package/dist/src/programmes/rules/OneYearOnlyRule.js +34 -0
  229. package/dist/src/programmes/rules/OnlineAttendanceRule.d.ts +6 -0
  230. package/dist/src/programmes/rules/OnlineAttendanceRule.js +15 -0
  231. package/dist/src/programmes/rules/PartTimeFormatRule.js +2 -2
  232. package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.d.ts +1 -1
  233. package/dist/src/scholarships/policies/Area.js +1 -1
  234. package/dist/src/scholarships/policies/Country.js +1 -1
  235. package/dist/src/scholarships/policies/Discipline.js +1 -1
  236. package/dist/src/scholarships/policies/DisciplineCountry.js +1 -1
  237. package/dist/src/scholarships/policies/UniversityCountry.js +2 -2
  238. package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.js +1 -1
  239. package/dist/src/scholarships/rules/SearchVolumeAreasRule.js +1 -1
  240. package/dist/src/scholarships/rules/SearchVolumeCountriesDisciplinesRule.js +1 -1
  241. package/dist/src/scholarships/rules/SearchVolumeCountriesRule.js +1 -1
  242. package/dist/src/scholarships/rules/SearchVolumeDisciplinesRule.js +1 -1
  243. package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.d.ts +1 -1
  244. package/dist/src/sitemap-generator/IPageNumberProvider.d.ts +3 -0
  245. package/dist/src/sitemap-generator/IPageNumberProvider.js +1 -0
  246. package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.d.ts +1 -1
  247. package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.d.ts +1 -1
  248. package/dist/src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager.js +1 -1
  249. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.d.ts +1 -1
  250. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +28 -4
  251. package/package.json +105 -104
  252. package/dist/src/enums/AttendanceFilterOptionValue.d.ts +0 -5
  253. package/dist/src/enums/AttendanceFilterOptionValue.js +0 -6
  254. package/dist/src/enums/DegreeTypeFilterOptionValue.d.ts +0 -29
  255. package/dist/src/enums/DegreeTypeFilterOptionValue.js +0 -30
  256. package/dist/src/enums/DurationFilterOptionValue.d.ts +0 -16
  257. package/dist/src/enums/DurationFilterOptionValue.js +0 -17
  258. package/dist/src/enums/EducationalFormFilterOptionValue.d.ts +0 -8
  259. package/dist/src/enums/EducationalFormFilterOptionValue.js +0 -9
  260. package/dist/src/enums/FilterKey.d.ts +0 -21
  261. package/dist/src/enums/FilterKey.js +0 -22
  262. package/dist/src/enums/FormatFilterOptionValue.d.ts +0 -4
  263. package/dist/src/enums/FormatFilterOptionValue.js +0 -5
  264. package/dist/src/enums/SpecialProgrammesFilterOptionValue.d.ts +0 -5
  265. package/dist/src/enums/SpecialProgrammesFilterOptionValue.js +0 -6
  266. package/dist/src/enums/TuitionFeeFilterOptionValue.d.ts +0 -3
  267. package/dist/src/enums/TuitionFeeFilterOptionValue.js +0 -4
@@ -0,0 +1,54 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
7
+ import { ContinentPresenter } from '../../presenters/ContinentPresenter';
8
+ import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
9
+ import { AttendancePresenter } from '../../presenters/AttendancePresenter';
10
+ export class DisciplineContinentAttendance extends ProgrammesBaseIndexabilityPolicy {
11
+ name = 'Discipline Continent Attendance Policy';
12
+ description = 'Determines indexing rules for pages filtered by both discipline, continent, and attendance.';
13
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.CONTINENT, FilterKey.DELIVERY_METHOD];
14
+ rules = [
15
+ new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
16
+ new SingleValueSelectedForFilterRule(FilterKey.CONTINENT),
17
+ new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
18
+ new OnlyFiltersSelectedRule([FilterKey.DISCIPLINES, FilterKey.CONTINENT, FilterKey.DELIVERY_METHOD]),
19
+ new OnlineAttendanceRule()
20
+ ];
21
+ constructor(dependencies) {
22
+ super(dependencies);
23
+ this.initateBaseRules();
24
+ }
25
+ async generateUrls() {
26
+ const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
27
+ const continentFragments = ContinentPresenter.getInstance().getFragments();
28
+ const attendanceFragments = AttendancePresenter.getInstance().getFragments();
29
+ const paths = [];
30
+ const allowedAttendanceIds = ["online"];
31
+ const allowedAttendances = attendanceFragments.filter(a => allowedAttendanceIds.includes(a.id));
32
+ for (const pageNumber of this.indexablePageNumbers) {
33
+ for (const discipline of disciplineFragments) {
34
+ for (const continent of continentFragments) {
35
+ for (const attendance of allowedAttendances) {
36
+ const filterKeyValues = new Map([
37
+ [FilterKey.DISCIPLINES, [discipline.id]],
38
+ [FilterKey.CONTINENT, [continent.id]],
39
+ [FilterKey.DELIVERY_METHOD, [attendance.id]]
40
+ ]);
41
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
42
+ if (result) {
43
+ paths.push(this.getPathWithPageNumber(`${attendance.path}/${discipline.path}/${continent.path}`, pageNumber));
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return paths;
50
+ }
51
+ get filterCombination() {
52
+ return FilterCombinations.DISCIPLINE_CONTINENT_ATTENDANCE;
53
+ }
54
+ }
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -0,0 +1,16 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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
+ import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
8
+ export declare class DisciplineCountryAttendance extends ProgrammesBaseIndexabilityPolicy {
9
+ readonly name: string;
10
+ readonly description: string;
11
+ readonly filterKeys: FilterKey[];
12
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule)[];
13
+ constructor(dependencies: IProgrammeSeoDependencies);
14
+ protected generateUrls(): Promise<string[]>;
15
+ get filterCombination(): FilterCombinations;
16
+ }
@@ -0,0 +1,54 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
7
+ import { CountryPresenter } from '../../presenters/CountryPresenter';
8
+ import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
9
+ import { AttendancePresenter } from '../../presenters/AttendancePresenter';
10
+ export class DisciplineCountryAttendance extends ProgrammesBaseIndexabilityPolicy {
11
+ name = 'Discipline Country Attendance Policy';
12
+ description = 'Determines indexing rules for pages filtered by both discipline, country, and attendance.';
13
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.DELIVERY_METHOD];
14
+ rules = [
15
+ new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
16
+ new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
17
+ new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
18
+ new OnlyFiltersSelectedRule([FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.DELIVERY_METHOD]),
19
+ new OnlineAttendanceRule()
20
+ ];
21
+ constructor(dependencies) {
22
+ super(dependencies);
23
+ this.initateBaseRules();
24
+ }
25
+ async generateUrls() {
26
+ const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
27
+ const countryFragments = CountryPresenter.getInstance().getFragments();
28
+ const attendanceFragments = AttendancePresenter.getInstance().getFragments();
29
+ const paths = [];
30
+ const allowedAttendanceIds = ['online'];
31
+ const allowedAttendances = attendanceFragments.filter(a => allowedAttendanceIds.includes(a.id));
32
+ for (const pageNumber of this.indexablePageNumbers) {
33
+ for (const discipline of disciplineFragments) {
34
+ for (const country of countryFragments) {
35
+ for (const attendance of allowedAttendances) {
36
+ const filterKeyValues = new Map([
37
+ [FilterKey.DISCIPLINES, [discipline.id]],
38
+ [FilterKey.COUNTRY, [country.id]],
39
+ [FilterKey.DELIVERY_METHOD, [attendance.id]]
40
+ ]);
41
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
42
+ if (result) {
43
+ paths.push(this.getPathWithPageNumber(`${attendance.path}/${discipline.path}/${country.path}`, pageNumber));
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ return paths;
50
+ }
51
+ get filterCombination() {
52
+ return FilterCombinations.DISCIPLINE_COUNTRY_ATTENDANCE;
53
+ }
54
+ }
@@ -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 { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
6
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
8
+ export declare class DisciplineCountryDegree extends ProgrammesBaseIndexabilityPolicy {
9
+ readonly name: string;
10
+ readonly description: string;
11
+ readonly filterKeys: FilterKey[];
12
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexableDegreeRule)[];
13
+ constructor(dependencies: IProgrammeSeoDependencies);
14
+ protected generateUrls(): Promise<string[]>;
15
+ get filterCombination(): FilterCombinations;
16
+ }
@@ -0,0 +1,53 @@
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 { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
6
+ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
+ import { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
8
+ import { CountryPresenter } from '../../presenters/CountryPresenter';
9
+ import { DegreePresenter } from '../../presenters/DegreePresenter';
10
+ export class DisciplineCountryDegree extends ProgrammesBaseIndexabilityPolicy {
11
+ name = 'Discipline Country Degree Policy';
12
+ description = `Determines indexing rules for pages filtered by discipline,
13
+ country, and degree type.`;
14
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.DEGREE_TYPE];
15
+ rules = [
16
+ new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
17
+ new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
18
+ new SingleValueSelectedForFilterRule(FilterKey.DEGREE_TYPE),
19
+ new OnlyFiltersSelectedRule([FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.DEGREE_TYPE]),
20
+ new IndexableDegreeRule()
21
+ ];
22
+ constructor(dependencies) {
23
+ super(dependencies);
24
+ this.initateBaseRules();
25
+ }
26
+ async generateUrls() {
27
+ const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
28
+ const countryFragments = CountryPresenter.getInstance().getFragments();
29
+ const degreeFragments = DegreePresenter.getInstance().getFragments();
30
+ const paths = [];
31
+ for (const pageNumber of this.indexablePageNumbers) {
32
+ for (const discipline of disciplineFragments) {
33
+ for (const country of countryFragments) {
34
+ for (const degree of degreeFragments) {
35
+ const filterKeyValues = new Map([
36
+ [FilterKey.DISCIPLINES, [discipline.id]],
37
+ [FilterKey.COUNTRY, [country.id]],
38
+ [FilterKey.DEGREE_TYPE, [degree.id]]
39
+ ]);
40
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
41
+ if (result) {
42
+ paths.push(this.getPathWithPageNumber(`${degree.path}/${discipline.path}/${country.path}`, pageNumber));
43
+ }
44
+ }
45
+ }
46
+ }
47
+ }
48
+ return paths;
49
+ }
50
+ get filterCombination() {
51
+ return FilterCombinations.DISCIPLINE_COUNTRY_DEGREE;
52
+ }
53
+ }
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -9,7 +9,7 @@ import { CountryPresenter } from '../../presenters/CountryPresenter';
9
9
  import { EducationalFormPresenter } from '../../presenters/EducationalFormPresenter';
10
10
  export class DisciplineCountryEducationalForm extends ProgrammesBaseIndexabilityPolicy {
11
11
  name = 'Discipline Country Educational Form Policy';
12
- description = `Determines indexing rules for pages filtered by discipline,
12
+ description = `Determines indexing rules for pages filtered by discipline,
13
13
  country, and educational form (academic, semester, summer school, etc.).`;
14
14
  filterKeys = [FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.EDUCATIONAL_FORM];
15
15
  rules = [
@@ -0,0 +1,15 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 DisciplineCountryFormat 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,52 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
7
+ import { CountryPresenter } from '../../presenters/CountryPresenter';
8
+ import { FormatPresenter } from '../../presenters/FormatPresenter';
9
+ export class DisciplineCountryFormat extends ProgrammesBaseIndexabilityPolicy {
10
+ name = 'Discipline Country Format Policy';
11
+ description = 'Determines indexing rules for pages filtered by both discipline, country, and format.';
12
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.ATTENDANCE];
13
+ rules = [
14
+ new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
15
+ new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
16
+ new SingleValueSelectedForFilterRule(FilterKey.ATTENDANCE),
17
+ new OnlyFiltersSelectedRule([FilterKey.DISCIPLINES, FilterKey.COUNTRY, FilterKey.ATTENDANCE]),
18
+ ];
19
+ constructor(dependencies) {
20
+ super(dependencies);
21
+ this.initateBaseRules();
22
+ }
23
+ async generateUrls() {
24
+ const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
25
+ const countryFragments = CountryPresenter.getInstance().getFragments();
26
+ const formatFragments = FormatPresenter.getInstance().getFragments();
27
+ const paths = [];
28
+ const allowedFormatIds = ['parttime'];
29
+ const allowedFormats = formatFragments.filter(a => allowedFormatIds.includes(a.id));
30
+ for (const pageNumber of this.indexablePageNumbers) {
31
+ for (const discipline of disciplineFragments) {
32
+ for (const country of countryFragments) {
33
+ for (const format of allowedFormats) {
34
+ const filterKeyValues = new Map([
35
+ [FilterKey.DISCIPLINES, [discipline.id]],
36
+ [FilterKey.COUNTRY, [country.id]],
37
+ [FilterKey.ATTENDANCE, [format.id]]
38
+ ]);
39
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
40
+ if (result) {
41
+ paths.push(this.getPathWithPageNumber(`${format.path}/${discipline.path}/${country.path}`, pageNumber));
42
+ }
43
+ }
44
+ }
45
+ }
46
+ }
47
+ return paths;
48
+ }
49
+ get filterCombination() {
50
+ return FilterCombinations.DISCIPLINE_COUNTRY_ATTENDANCE;
51
+ }
52
+ }
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -8,7 +8,7 @@ import { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
8
8
  import { EducationalFormPresenter } from '../../presenters/EducationalFormPresenter';
9
9
  export class DisciplineEducationalForm extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Discipline Educational Form Policy';
11
- description = `Determines indexing rules for pages filtered by both discipline,
11
+ description = `Determines indexing rules for pages filtered by both discipline,
12
12
  and educational form (academic, semester, summer school, etc.).`;
13
13
  filterKeys = [FilterKey.DISCIPLINES, FilterKey.EDUCATIONAL_FORM];
14
14
  rules = [
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -0,0 +1,15 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 DisciplineSpecialProgrammes 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,46 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 { DisciplinePresenter } from '../../presenters/DisciplinePresenter';
7
+ import { SpecialProgrammesPresenter } from '../../presenters/SpecialProgrammesPresenter';
8
+ export class DisciplineSpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
9
+ name = 'Discipline Special Programmes Policy';
10
+ description = 'Determines indexing rules for pages filtered by discipline and special programmes (Erasmus Mundus).';
11
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.SPECIAL_PROGRAMMES];
12
+ rules = [
13
+ new SingleValueSelectedForFilterRule(FilterKey.SPECIAL_PROGRAMMES),
14
+ new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
15
+ new OnlyFiltersSelectedRule([FilterKey.SPECIAL_PROGRAMMES, FilterKey.DISCIPLINES]),
16
+ ];
17
+ constructor(dependencies) {
18
+ super(dependencies);
19
+ this.initateBaseRules();
20
+ }
21
+ async generateUrls() {
22
+ const specialProgrammesFragments = SpecialProgrammesPresenter.getInstance().getFragments();
23
+ const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
24
+ const paths = [];
25
+ const validSpecialProgrammesIds = ['erasmus'];
26
+ const validSpecialProgrammes = specialProgrammesFragments.filter(specialProgramme => validSpecialProgrammesIds.includes(specialProgramme.id));
27
+ for (const pageNumber of this.indexablePageNumbers) {
28
+ for (const specialProgramme of validSpecialProgrammes) {
29
+ for (const discipline of disciplineFragments) {
30
+ const filterKeyValues = new Map([
31
+ [FilterKey.SPECIAL_PROGRAMMES, [specialProgramme.id]],
32
+ [FilterKey.DISCIPLINES, [discipline.id]]
33
+ ]);
34
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
35
+ if (result) {
36
+ paths.push(this.getPathWithPageNumber(`${discipline.path}/${specialProgramme.path}`, pageNumber));
37
+ }
38
+ }
39
+ }
40
+ }
41
+ return paths;
42
+ }
43
+ get filterCombination() {
44
+ return FilterCombinations.DISCIPLINE_SPECIAL_PROGRAMMES;
45
+ }
46
+ }
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -0,0 +1,15 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 Duration 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,35 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 { DurationPresenter } from '../../presenters/DurationPresenter';
7
+ export class Duration extends ProgrammesBaseIndexabilityPolicy {
8
+ name = 'Duration Policy';
9
+ description = 'Governs indexing of duration-level filtered pages. (1 year - 2 year)';
10
+ filterKeys = [FilterKey.DURATION];
11
+ rules = [new SingleValueSelectedForFilterRule(FilterKey.DURATION), new OnlyFiltersSelectedRule([FilterKey.DURATION])];
12
+ constructor(dependencies) {
13
+ super(dependencies);
14
+ this.initateBaseRules();
15
+ }
16
+ async generateUrls() {
17
+ const durationFragments = DurationPresenter.getInstance().getFragments();
18
+ const allowedDurationIds = ["[360,360]", "[720,720]"];
19
+ const allowedDurations = durationFragments.filter(duration => allowedDurationIds.includes(duration.id));
20
+ const paths = [];
21
+ for (const pageNumber of this.indexablePageNumbers) {
22
+ for (const duration of allowedDurations) {
23
+ const filterKeyValues = new Map([[FilterKey.DURATION, [duration.id]]]);
24
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
25
+ if (result) {
26
+ paths.push(this.getPathWithPageNumber(duration.path, pageNumber));
27
+ }
28
+ }
29
+ }
30
+ return paths;
31
+ }
32
+ get filterCombination() {
33
+ return FilterCombinations.DURATION;
34
+ }
35
+ }
@@ -0,0 +1,15 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 Format 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,35 @@
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
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 { FormatPresenter } from '../../presenters/FormatPresenter';
7
+ export class Format extends ProgrammesBaseIndexabilityPolicy {
8
+ name = 'Format Policy';
9
+ description = 'Governs indexing of format-level filtered pages.';
10
+ filterKeys = [FilterKey.ATTENDANCE];
11
+ rules = [new SingleValueSelectedForFilterRule(FilterKey.ATTENDANCE), new OnlyFiltersSelectedRule([FilterKey.ATTENDANCE])];
12
+ constructor(dependencies) {
13
+ super(dependencies);
14
+ this.initateBaseRules();
15
+ }
16
+ async generateUrls() {
17
+ const formatFragments = FormatPresenter.getInstance().getFragments();
18
+ const allowedFormatIds = ["fulltime", "parttime"];
19
+ const allowedFormats = formatFragments.filter(format => allowedFormatIds.includes(format.id));
20
+ const paths = [];
21
+ for (const pageNumber of this.indexablePageNumbers) {
22
+ for (const format of allowedFormats) {
23
+ const filterKeyValues = new Map([[FilterKey.ATTENDANCE, [format.id]]]);
24
+ const result = await this.checkRulesForSitemapWithPageNumber(filterKeyValues, pageNumber);
25
+ if (result) {
26
+ paths.push(this.getPathWithPageNumber(format.path, pageNumber));
27
+ }
28
+ }
29
+ }
30
+ return paths;
31
+ }
32
+ get filterCombination() {
33
+ return FilterCombinations.ATTENDANCE;
34
+ }
35
+ }
@@ -1,15 +1,14 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
- import { ErasmusOrJointSpecialProgrammesRule } from '../rules/ErasmusOrJointSpecialProgrammesRule';
6
5
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
6
  import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
8
7
  export declare class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
9
8
  readonly name: string;
10
9
  readonly description: string;
11
10
  readonly filterKeys: FilterKey[];
12
- protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | ErasmusOrJointSpecialProgrammesRule)[];
11
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
13
12
  constructor(dependencies: IProgrammeSeoDependencies);
14
13
  protected generateUrls(): Promise<string[]>;
15
14
  get filterCombination(): FilterCombinations;
@@ -1,8 +1,7 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
- import { ErasmusOrJointSpecialProgrammesRule } from '../rules/ErasmusOrJointSpecialProgrammesRule';
6
5
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
6
  import { SpecialProgrammesPresenter } from '../../presenters/SpecialProgrammesPresenter';
8
7
  export class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
@@ -11,8 +10,7 @@ export class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
11
10
  filterKeys = [FilterKey.SPECIAL_PROGRAMMES];
12
11
  rules = [
13
12
  new SingleValueSelectedForFilterRule(FilterKey.SPECIAL_PROGRAMMES),
14
- new OnlyFiltersSelectedRule([FilterKey.SPECIAL_PROGRAMMES]),
15
- new ErasmusOrJointSpecialProgrammesRule()
13
+ new OnlyFiltersSelectedRule([FilterKey.SPECIAL_PROGRAMMES])
16
14
  ];
17
15
  constructor(dependencies) {
18
16
  super(dependencies);
@@ -1,4 +1,4 @@
1
- import { FilterKey } from "../../enums/FilterKey";
1
+ import { FilterKey } from '@studyportals/search-filters/search_filters_interfaces';
2
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';