@studyportals/fawkes 6.0.1-0 → 6.0.1-2

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 (144) hide show
  1. package/dist/programmes-seo/index.d.ts +1 -1
  2. package/dist/sitemap-generator-seo/index.d.ts +13 -13
  3. package/dist/sitemap-generator-seo/index.js +4 -5
  4. package/dist/src/common/IRankingApiClient.d.ts +3 -0
  5. package/dist/src/common/ISitemapDependencies.d.ts +0 -2
  6. package/dist/src/common/ISitemapUrlGenerator.d.ts +1 -1
  7. package/dist/src/organisations/rules/OnlineAttendanceRule.d.ts +0 -1
  8. package/dist/src/organisations/rules/OnlineAttendanceRule.js +0 -3
  9. package/dist/src/organisations/types/IOrganisationsSitemapDependencies.d.ts +2 -0
  10. package/dist/src/presenters/DegreePresenter.d.ts +11 -0
  11. package/dist/src/presenters/DegreePresenter.js +23 -0
  12. package/dist/src/presenters/DurationPresenter.d.ts +13 -0
  13. package/dist/src/presenters/DurationPresenter.js +46 -0
  14. package/dist/src/presenters/EducationalFormPresenter.d.ts +12 -0
  15. package/dist/src/presenters/EducationalFormPresenter.js +32 -0
  16. package/dist/src/presenters/FormatPresenter.d.ts +11 -0
  17. package/dist/src/presenters/FormatPresenter.js +24 -0
  18. package/dist/src/presenters/SpecialProgrammesPresenter.d.ts +11 -0
  19. package/dist/src/presenters/SpecialProgrammesPresenter.js +27 -0
  20. package/dist/src/presenters/TuitionFeePresenter.d.ts +11 -0
  21. package/dist/src/presenters/TuitionFeePresenter.js +23 -0
  22. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +6 -5
  23. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.js +14 -3
  24. package/dist/src/programmes/SearchIndexabilityManager.d.ts +1 -1
  25. package/dist/src/programmes/policies/Area.d.ts +7 -1
  26. package/dist/src/programmes/policies/Area.js +20 -3
  27. package/dist/src/programmes/policies/Attendance.d.ts +8 -1
  28. package/dist/src/programmes/policies/Attendance.js +17 -3
  29. package/dist/src/programmes/policies/AttendanceDegree.d.ts +9 -1
  30. package/dist/src/programmes/policies/AttendanceDegree.js +24 -3
  31. package/dist/src/programmes/policies/Continent.d.ts +7 -1
  32. package/dist/src/programmes/policies/Continent.js +17 -3
  33. package/dist/src/programmes/policies/ContinentTuitionFee.d.ts +8 -1
  34. package/dist/src/programmes/policies/ContinentTuitionFee.js +24 -3
  35. package/dist/src/programmes/policies/Country.d.ts +7 -1
  36. package/dist/src/programmes/policies/Country.js +18 -7
  37. package/dist/src/programmes/policies/CountryAttendance.d.ts +8 -1
  38. package/dist/src/programmes/policies/CountryAttendance.js +24 -3
  39. package/dist/src/programmes/policies/CountryAttendanceDegree.d.ts +9 -1
  40. package/dist/src/programmes/policies/CountryAttendanceDegree.js +29 -3
  41. package/dist/src/programmes/policies/CountryDegree.d.ts +8 -1
  42. package/dist/src/programmes/policies/CountryDegree.js +24 -3
  43. package/dist/src/programmes/policies/CountryDuration.d.ts +8 -1
  44. package/dist/src/programmes/policies/CountryDuration.js +24 -3
  45. package/dist/src/programmes/policies/CountryDurationDegree.d.ts +9 -1
  46. package/dist/src/programmes/policies/CountryDurationDegree.js +29 -3
  47. package/dist/src/programmes/policies/CountryEducationalForm.d.ts +8 -1
  48. package/dist/src/programmes/policies/CountryEducationalForm.js +24 -3
  49. package/dist/src/programmes/policies/CountryFormat.d.ts +8 -1
  50. package/dist/src/programmes/policies/CountryFormat.js +24 -3
  51. package/dist/src/programmes/policies/CountryTuitionFee.d.ts +8 -1
  52. package/dist/src/programmes/policies/CountryTuitionFee.js +24 -3
  53. package/dist/src/programmes/policies/Discipline.d.ts +7 -1
  54. package/dist/src/programmes/policies/Discipline.js +17 -3
  55. package/dist/src/programmes/policies/DisciplineArea.d.ts +7 -1
  56. package/dist/src/programmes/policies/DisciplineArea.js +25 -3
  57. package/dist/src/programmes/policies/DisciplineAttendance.d.ts +8 -1
  58. package/dist/src/programmes/policies/DisciplineAttendance.js +24 -3
  59. package/dist/src/programmes/policies/DisciplineContinent.d.ts +7 -1
  60. package/dist/src/programmes/policies/DisciplineContinent.js +24 -3
  61. package/dist/src/programmes/policies/DisciplineCountry.d.ts +7 -1
  62. package/dist/src/programmes/policies/DisciplineCountry.js +24 -3
  63. package/dist/src/programmes/policies/DisciplineCountryDegree.d.ts +8 -1
  64. package/dist/src/programmes/policies/DisciplineCountryDegree.js +29 -3
  65. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.d.ts +8 -1
  66. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +29 -3
  67. package/dist/src/programmes/policies/DisciplineDegree.d.ts +8 -1
  68. package/dist/src/programmes/policies/DisciplineDegree.js +24 -3
  69. package/dist/src/programmes/policies/DisciplineDuration.d.ts +8 -1
  70. package/dist/src/programmes/policies/DisciplineDuration.js +24 -3
  71. package/dist/src/programmes/policies/DisciplineEducationalForm.d.ts +8 -1
  72. package/dist/src/programmes/policies/DisciplineEducationalForm.js +24 -3
  73. package/dist/src/programmes/policies/DisciplineFormat.d.ts +8 -1
  74. package/dist/src/programmes/policies/DisciplineFormat.js +24 -3
  75. package/dist/src/programmes/policies/DisciplineTuitionFee.d.ts +8 -1
  76. package/dist/src/programmes/policies/DisciplineTuitionFee.js +24 -3
  77. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.d.ts +9 -1
  78. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +29 -3
  79. package/dist/src/programmes/policies/SpecialProgrammes.d.ts +8 -1
  80. package/dist/src/programmes/policies/SpecialProgrammes.js +19 -5
  81. package/dist/src/programmes/policies/TuitionFee.d.ts +7 -1
  82. package/dist/src/programmes/policies/TuitionFee.js +17 -3
  83. package/dist/src/programmes/policies/Unfiltered.d.ts +5 -1
  84. package/dist/src/programmes/policies/Unfiltered.js +7 -2
  85. package/dist/src/programmes/rules/AffordableTuitionFeeRule.d.ts +3 -5
  86. package/dist/src/programmes/rules/AffordableTuitionFeeRule.js +7 -11
  87. package/dist/src/programmes/rules/AtLeastSevenResultsRule.d.ts +6 -1
  88. package/dist/src/programmes/rules/AtLeastSevenResultsRule.js +13 -3
  89. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.d.ts +2 -1
  90. package/dist/src/programmes/rules/ErasmusOrJointSpecialProgrammesRule.js +7 -2
  91. package/dist/src/programmes/rules/IndexableDegreeRule.d.ts +2 -1
  92. package/dist/src/programmes/rules/IndexableDegreeRule.js +7 -2
  93. package/dist/src/programmes/rules/IndexableDurationRule.d.ts +2 -1
  94. package/dist/src/programmes/rules/IndexableDurationRule.js +7 -2
  95. package/dist/src/programmes/rules/IndexableEducationalFormRule.d.ts +2 -1
  96. package/dist/src/programmes/rules/IndexableEducationalFormRule.js +7 -2
  97. package/dist/src/programmes/rules/IndexablePageNumberRule.d.ts +2 -1
  98. package/dist/src/programmes/rules/IndexablePageNumberRule.js +3 -2
  99. package/dist/src/programmes/rules/MbaDegreeRule.d.ts +3 -5
  100. package/dist/src/programmes/rules/MbaDegreeRule.js +5 -11
  101. package/dist/src/programmes/rules/MbaOrMscDegreeRule.d.ts +2 -1
  102. package/dist/src/programmes/rules/MbaOrMscDegreeRule.js +6 -2
  103. package/dist/src/programmes/rules/NotDistanceLearningPortalRule.d.ts +4 -1
  104. package/dist/src/programmes/rules/NotDistanceLearningPortalRule.js +10 -1
  105. package/dist/src/programmes/rules/OneYearDurationRule.d.ts +3 -5
  106. package/dist/src/programmes/rules/OneYearDurationRule.js +5 -11
  107. package/dist/src/programmes/rules/PartTimeFormatRule.d.ts +3 -5
  108. package/dist/src/programmes/rules/PartTimeFormatRule.js +5 -11
  109. package/dist/src/programmes/{IProgrammeSearchApplicationState.d.ts → types/IProgrammeSearchApplicationState.d.ts} +1 -1
  110. package/dist/src/programmes/{IProgrammeSearchDependencies.d.ts → types/IProgrammeSearchDependencies.d.ts} +1 -1
  111. package/dist/src/programmes/types/IProgrammeSearchSitemapDependencies.d.ts +4 -4
  112. package/dist/src/programmes/types/IProgrammeSeoDependencies.d.ts +3 -0
  113. package/dist/src/programmes/types/IProgrammeSitemapDependencies.d.ts +7 -0
  114. package/dist/src/programmes/types/IProgrammeSitemapDependencies.js +1 -0
  115. package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.d.ts +5 -0
  116. package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.js +1 -0
  117. package/dist/src/scholarships/policies/Area.d.ts +2 -2
  118. package/dist/src/scholarships/policies/Country.d.ts +2 -2
  119. package/dist/src/scholarships/policies/Discipline.d.ts +2 -2
  120. package/dist/src/scholarships/policies/DisciplineCountry.d.ts +2 -2
  121. package/dist/src/scholarships/policies/Unfiltered.d.ts +2 -2
  122. package/dist/src/scholarships/policies/UniversityCountry.d.ts +2 -2
  123. package/dist/src/scholarships/types/IScholarshipSeoDependencies.d.ts +3 -0
  124. package/dist/src/scholarships/types/IScholarshipSeoDependencies.js +1 -0
  125. package/dist/src/scholarships/types/IScholarshipSitemapDependencies.d.ts +5 -0
  126. package/dist/src/scholarships/types/IScholarshipSitemapDependencies.js +1 -0
  127. package/dist/src/sitemap-generator/IPageNumberProvider.d.ts +3 -0
  128. package/dist/src/sitemap-generator/IPageNumberProvider.js +1 -0
  129. package/dist/src/sitemap-generator/ISearchApiClient.d.ts +2 -0
  130. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.d.ts +5 -2
  131. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +27 -6
  132. package/dist/src/sitemap-generator/SitemapUrlGeneratorManager.d.ts +9 -0
  133. package/dist/src/sitemap-generator/SitemapUrlGeneratorManager.js +34 -0
  134. package/package.json +2 -2
  135. package/dist/src/common/IPolicyMetaData.d.ts +0 -6
  136. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.d.ts +0 -11
  137. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.js +0 -19
  138. package/dist/src/programmes/IProgrammesSeoDependencies.d.ts +0 -2
  139. package/dist/src/programmes/rules/OnlineAttendanceRule.d.ts +0 -5
  140. package/dist/src/programmes/rules/OnlineAttendanceRule.js +0 -11
  141. /package/dist/src/common/{IPolicyMetaData.js → IRankingApiClient.js} +0 -0
  142. /package/dist/src/programmes/{IProgrammeSearchApplicationState.js → types/IProgrammeSearchApplicationState.js} +0 -0
  143. /package/dist/src/programmes/{IProgrammeSearchDependencies.js → types/IProgrammeSearchDependencies.js} +0 -0
  144. /package/dist/src/programmes/{IProgrammesSeoDependencies.js → types/IProgrammeSeoDependencies.js} +0 -0
@@ -1,6 +1,6 @@
1
1
  import { ISeoFilterState } from '../src/common/ISeoFilterState';
2
2
  import { ISeoInfoBase } from '../src/common/ISeoInfoBase';
3
- import { IProgrammeSearchApplicationState } from '../src/programmes/IProgrammeSearchApplicationState';
3
+ import { IProgrammeSearchApplicationState } from '../src/programmes/types/IProgrammeSearchApplicationState';
4
4
  import { ISearchIndexabilityManager } from '../src/common/ISearchIndexabilityManager';
5
5
  import { SearchIndexabilityManager } from '../src/programmes/SearchIndexabilityManager';
6
6
  export { ISeoFilterState, ISeoInfoBase, ISearchIndexabilityManager, IProgrammeSearchApplicationState, SearchIndexabilityManager };
@@ -1,13 +1,13 @@
1
- import { IOrganisationsClient } from '../src/sitemap-generator/IOrganisationsClient';
2
- import { IOrganisation } from '../src/sitemap-generator/IOrganisation';
3
- import { IRankingApiClient } from '../src/sitemap-generator/IRankingApiClient';
4
- import { ISearchApiClient } from '../src/sitemap-generator/ISearchApiClient';
5
- import { ISitemapUrlGeneratorManager } from '../src/sitemap-generator/ISitemapUrlGeneratorManager';
6
- import { OrganisationsSitemapUrlGeneratorManager } from '../src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager';
7
- import { ScholarshipsSitemapUrlGeneratorManager } from '../src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager';
8
- import { ProgrammesSitemapUrlGeneratorManager } from '../src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager';
9
- import { FilterCombinations } from '../src/enums/FilterCombinations';
10
- import { ISitemapUrlGenerator } from '../src/common/ISitemapUrlGenerator';
11
- import { FilterKeyValuesMap } from '../src/common/FilterKeyValuesMap';
12
- import { IPresenter } from '../src/common';
13
- export { IOrganisationsClient, IOrganisation, IRankingApiClient, ISearchApiClient, ISitemapUrlGeneratorManager, OrganisationsSitemapUrlGeneratorManager, ScholarshipsSitemapUrlGeneratorManager, ProgrammesSitemapUrlGeneratorManager, FilterCombinations, ISitemapUrlGenerator, FilterKeyValuesMap, IPresenter };
1
+ export { IOrganisationsClient } from '../src/sitemap-generator/IOrganisationsClient';
2
+ export { IOrganisation } from '../src/sitemap-generator/IOrganisation';
3
+ export { IRankingApiClient } from '../src/sitemap-generator/IRankingApiClient';
4
+ export { ISearchApiClient } from '../src/sitemap-generator/ISearchApiClient';
5
+ export { ISitemapUrlGeneratorManager } from '../src/sitemap-generator/ISitemapUrlGeneratorManager';
6
+ export { OrganisationsSitemapUrlGeneratorManager } from '../src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager';
7
+ export { ScholarshipsSitemapUrlGeneratorManager } from '../src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager';
8
+ export { ProgrammesSitemapUrlGeneratorManager } from '../src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager';
9
+ export { FilterCombinations } from '../src/enums/FilterCombinations';
10
+ export { ISitemapUrlGenerator } from '../src/common/ISitemapUrlGenerator';
11
+ export { FilterKeyValuesMap } from '../src/common/FilterKeyValuesMap';
12
+ export { IPresenter } from '../src/common';
13
+ export { IProgrammeSitemapUrlGenerator } from '../src/programmes/types/IProgrammeSitemapUrlGenerator';
@@ -1,5 +1,4 @@
1
- import { OrganisationsSitemapUrlGeneratorManager } from '../src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager';
2
- import { ScholarshipsSitemapUrlGeneratorManager } from '../src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager';
3
- import { ProgrammesSitemapUrlGeneratorManager } from '../src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager';
4
- import { FilterCombinations } from '../src/enums/FilterCombinations';
5
- export { OrganisationsSitemapUrlGeneratorManager, ScholarshipsSitemapUrlGeneratorManager, ProgrammesSitemapUrlGeneratorManager, FilterCombinations };
1
+ export { OrganisationsSitemapUrlGeneratorManager } from '../src/sitemap-generator/OrganisationsSitemapUrlGeneratorManager';
2
+ export { ScholarshipsSitemapUrlGeneratorManager } from '../src/sitemap-generator/ScholarshipsSitemapUrlGeneratorManager';
3
+ export { ProgrammesSitemapUrlGeneratorManager } from '../src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager';
4
+ export { FilterCombinations } from '../src/enums/FilterCombinations';
@@ -0,0 +1,3 @@
1
+ export interface IRankingApiClient {
2
+ getFacets(): Promise<string[]>;
3
+ }
@@ -1,7 +1,5 @@
1
1
  import { IDependencies } from '../common/IDependencies';
2
2
  import { ISearchApiClient } from '../sitemap-generator/ISearchApiClient';
3
- import { IOrganisationsClient } from '../sitemap-generator/IOrganisationsClient';
4
3
  export interface ISitemapDependencies extends IDependencies {
5
4
  searchApiClient: ISearchApiClient;
6
- organisationsClient: IOrganisationsClient;
7
5
  }
@@ -1,7 +1,7 @@
1
1
  import { FilterCombinations } from '../enums/FilterCombinations';
2
2
  import { IRule } from './IRule';
3
3
  export interface ISitemapUrlGenerator {
4
- filterCombination: FilterCombinations;
4
+ readonly filterCombination: FilterCombinations;
5
5
  generateSitemapUrls(): Promise<string[]>;
6
6
  getAllRules(): IRule[];
7
7
  }
@@ -2,5 +2,4 @@ import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRul
2
2
  export declare class OnlineAttendanceRule extends BaseFilterKeyValueRule {
3
3
  constructor();
4
4
  getName(): string;
5
- getDescription(): string;
6
5
  }
@@ -8,7 +8,4 @@ export class OnlineAttendanceRule extends BaseFilterKeyValueRule {
8
8
  getName() {
9
9
  return 'OnlineAttendanceRule';
10
10
  }
11
- getDescription() {
12
- return 'Indexable if attendance is online';
13
- }
14
11
  }
@@ -1,7 +1,9 @@
1
1
  import { ISitemapDependencies } from '../../common/ISitemapDependencies';
2
2
  import { IRankingApiClient } from '../../sitemap-generator/IRankingApiClient';
3
3
  import { PortalType } from '@studyportals/domain-client';
4
+ import { IOrganisationsClient } from '../../sitemap-generator/IOrganisationsClient';
4
5
  export interface IOrganisationsSitemapDependencies extends ISitemapDependencies {
6
+ organisationsClient: IOrganisationsClient;
5
7
  portalType: PortalType;
6
8
  rankingApiClient: IRankingApiClient;
7
9
  }
@@ -0,0 +1,11 @@
1
+ import { IPresenter } from '../common';
2
+ import { IFragment } from './fragments/IFragment';
3
+ import { FilterKey } from '@studyportals/search-filters';
4
+ export declare class DegreePresenter implements IPresenter {
5
+ readonly filterKey: FilterKey;
6
+ private static instance;
7
+ private readonly fragments;
8
+ private constructor();
9
+ static getInstance(): DegreePresenter;
10
+ getFragments(): IFragment[];
11
+ }
@@ -0,0 +1,23 @@
1
+ import { DegreeTypeFilterOptionValue, FilterKey } from '@studyportals/search-filters';
2
+ export class DegreePresenter {
3
+ filterKey = FilterKey.DEGREE_TYPE;
4
+ static instance;
5
+ fragments;
6
+ constructor() {
7
+ this.fragments = Object.values(DegreeTypeFilterOptionValue).map((degree) => {
8
+ return {
9
+ id: degree,
10
+ path: degree
11
+ };
12
+ });
13
+ }
14
+ static getInstance() {
15
+ if (!DegreePresenter.instance) {
16
+ DegreePresenter.instance = new DegreePresenter();
17
+ }
18
+ return DegreePresenter.instance;
19
+ }
20
+ getFragments() {
21
+ return this.fragments;
22
+ }
23
+ }
@@ -0,0 +1,13 @@
1
+ import { IPresenter } from '../common';
2
+ import { IFragment } from './fragments/IFragment';
3
+ import { FilterKey } from '@studyportals/search-filters';
4
+ export declare class DurationPresenter implements IPresenter {
5
+ readonly filterKey: FilterKey;
6
+ private static instance;
7
+ private readonly fragments;
8
+ private constructor();
9
+ static getInstance(): DurationPresenter;
10
+ private generatePaths;
11
+ private formatDurationPath;
12
+ getFragments(): IFragment[];
13
+ }
@@ -0,0 +1,46 @@
1
+ import { DurationFilterOptionValue, FilterKey } from '@studyportals/search-filters';
2
+ export class DurationPresenter {
3
+ filterKey = FilterKey.DURATION;
4
+ static instance;
5
+ fragments;
6
+ constructor() {
7
+ this.fragments = this.generatePaths();
8
+ }
9
+ static getInstance() {
10
+ if (!DurationPresenter.instance) {
11
+ DurationPresenter.instance = new DurationPresenter();
12
+ }
13
+ return DurationPresenter.instance;
14
+ }
15
+ generatePaths() {
16
+ const indexableDurations = [
17
+ DurationFilterOptionValue.ONE_YEAR,
18
+ DurationFilterOptionValue.TWO_YEARS,
19
+ DurationFilterOptionValue.THREE_YEARS,
20
+ DurationFilterOptionValue.FOUR_YEARS
21
+ ];
22
+ return indexableDurations.map((duration) => {
23
+ return {
24
+ id: duration,
25
+ path: this.formatDurationPath(duration)
26
+ };
27
+ });
28
+ }
29
+ formatDurationPath(duration) {
30
+ switch (duration) {
31
+ case DurationFilterOptionValue.ONE_YEAR:
32
+ return '1-year';
33
+ case DurationFilterOptionValue.TWO_YEARS:
34
+ return '2-years';
35
+ case DurationFilterOptionValue.THREE_YEARS:
36
+ return '3-years';
37
+ case DurationFilterOptionValue.FOUR_YEARS:
38
+ return '4-years';
39
+ default:
40
+ return duration.toLowerCase().replace(/_/g, '-');
41
+ }
42
+ }
43
+ getFragments() {
44
+ return this.fragments;
45
+ }
46
+ }
@@ -0,0 +1,12 @@
1
+ import { IPresenter } from '../common';
2
+ import { IFragment } from './fragments/IFragment';
3
+ import { FilterKey } from '@studyportals/search-filters';
4
+ export declare class EducationalFormPresenter implements IPresenter {
5
+ readonly filterKey: FilterKey;
6
+ private static instance;
7
+ private readonly fragments;
8
+ private constructor();
9
+ static getInstance(): EducationalFormPresenter;
10
+ private formatEducationalFormPath;
11
+ getFragments(): IFragment[];
12
+ }
@@ -0,0 +1,32 @@
1
+ import { EducationalFormFilterOptionValue, FilterKey } from '@studyportals/search-filters';
2
+ export class EducationalFormPresenter {
3
+ filterKey = FilterKey.EDUCATIONAL_FORM;
4
+ static instance;
5
+ fragments;
6
+ constructor() {
7
+ const indexableEducationalForms = [
8
+ EducationalFormFilterOptionValue.ACADEMIC_COURSE,
9
+ EducationalFormFilterOptionValue.SUMMER_SCHOOL,
10
+ EducationalFormFilterOptionValue.SEMESTER_STUDY_ABROAD,
11
+ EducationalFormFilterOptionValue.SKILL_PROFESSIONAL_COURSE
12
+ ];
13
+ this.fragments = indexableEducationalForms.map((form) => {
14
+ return {
15
+ id: form,
16
+ path: this.formatEducationalFormPath(form)
17
+ };
18
+ });
19
+ }
20
+ static getInstance() {
21
+ if (!EducationalFormPresenter.instance) {
22
+ EducationalFormPresenter.instance = new EducationalFormPresenter();
23
+ }
24
+ return EducationalFormPresenter.instance;
25
+ }
26
+ formatEducationalFormPath(form) {
27
+ return form.toLowerCase().replace(/_/g, '-');
28
+ }
29
+ getFragments() {
30
+ return this.fragments;
31
+ }
32
+ }
@@ -0,0 +1,11 @@
1
+ import { IPresenter } from '../common';
2
+ import { IFragment } from './fragments/IFragment';
3
+ import { FilterKey } from '@studyportals/search-filters';
4
+ export declare class FormatPresenter implements IPresenter {
5
+ readonly filterKey: FilterKey;
6
+ private static instance;
7
+ private readonly fragments;
8
+ private constructor();
9
+ static getInstance(): FormatPresenter;
10
+ getFragments(): IFragment[];
11
+ }
@@ -0,0 +1,24 @@
1
+ import { FormatFilterOptionValue, FilterKey } from '@studyportals/search-filters';
2
+ export class FormatPresenter {
3
+ filterKey = FilterKey.ATTENDANCE;
4
+ static instance;
5
+ fragments;
6
+ constructor() {
7
+ // Part-time is the only indexable format according to PartTimeFormatRule
8
+ this.fragments = [
9
+ {
10
+ id: FormatFilterOptionValue.PART_TIME,
11
+ path: 'part-time'
12
+ }
13
+ ];
14
+ }
15
+ static getInstance() {
16
+ if (!FormatPresenter.instance) {
17
+ FormatPresenter.instance = new FormatPresenter();
18
+ }
19
+ return FormatPresenter.instance;
20
+ }
21
+ getFragments() {
22
+ return this.fragments;
23
+ }
24
+ }
@@ -0,0 +1,11 @@
1
+ import { IPresenter } from '../common';
2
+ import { IFragment } from './fragments/IFragment';
3
+ import { FilterKey } from '@studyportals/search-filters';
4
+ export declare class SpecialProgrammesPresenter implements IPresenter {
5
+ readonly filterKey: FilterKey;
6
+ private static instance;
7
+ private readonly fragments;
8
+ private constructor();
9
+ static getInstance(): SpecialProgrammesPresenter;
10
+ getFragments(): IFragment[];
11
+ }
@@ -0,0 +1,27 @@
1
+ import { SpecialProgrammesFilterOptionValue, FilterKey } from '@studyportals/search-filters';
2
+ export class SpecialProgrammesPresenter {
3
+ filterKey = FilterKey.SPECIAL_PROGRAMMES;
4
+ static instance;
5
+ fragments;
6
+ constructor() {
7
+ this.fragments = [
8
+ {
9
+ id: SpecialProgrammesFilterOptionValue.JOINT_PROGRAMMES,
10
+ path: 'joint-programmes'
11
+ },
12
+ {
13
+ id: SpecialProgrammesFilterOptionValue.ERASMUS_MUNDUS,
14
+ path: 'erasmus-mundus'
15
+ }
16
+ ];
17
+ }
18
+ static getInstance() {
19
+ if (!SpecialProgrammesPresenter.instance) {
20
+ SpecialProgrammesPresenter.instance = new SpecialProgrammesPresenter();
21
+ }
22
+ return SpecialProgrammesPresenter.instance;
23
+ }
24
+ getFragments() {
25
+ return this.fragments;
26
+ }
27
+ }
@@ -0,0 +1,11 @@
1
+ import { IPresenter } from '../common';
2
+ import { IFragment } from './fragments/IFragment';
3
+ import { FilterKey } from '@studyportals/search-filters';
4
+ export declare class TuitionFeePresenter implements IPresenter {
5
+ readonly filterKey: FilterKey;
6
+ private static instance;
7
+ private readonly fragments;
8
+ private constructor();
9
+ static getInstance(): TuitionFeePresenter;
10
+ getFragments(): IFragment[];
11
+ }
@@ -0,0 +1,23 @@
1
+ import { TuitionFeeFilterOptionValue, FilterKey } from '@studyportals/search-filters';
2
+ export class TuitionFeePresenter {
3
+ filterKey = FilterKey.TUITION_FEE;
4
+ static instance;
5
+ fragments;
6
+ constructor() {
7
+ this.fragments = [
8
+ {
9
+ id: TuitionFeeFilterOptionValue.ZERO_TO_TWO_THOUSAND_FIVE_HUNDRED,
10
+ path: 'affordable'
11
+ }
12
+ ];
13
+ }
14
+ static getInstance() {
15
+ if (!TuitionFeePresenter.instance) {
16
+ TuitionFeePresenter.instance = new TuitionFeePresenter();
17
+ }
18
+ return TuitionFeePresenter.instance;
19
+ }
20
+ getFragments() {
21
+ return this.fragments;
22
+ }
23
+ }
@@ -1,7 +1,8 @@
1
- import { IRule } from '../common/IRule';
2
1
  import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
3
- import { IProgrammesSeoDependencies } from './IProgrammesSeoDependencies';
4
- export declare abstract class ProgrammesBaseIndexabilityPolicy extends BaseSeoIndexabilityPolicy<IProgrammesSeoDependencies> {
5
- protected readonly rules: IRule[];
6
- protected get baseRules(): IRule[];
2
+ import { IProgrammeSeoDependencies } from './types/IProgrammeSeoDependencies';
3
+ import { IProgrammeSitemapUrlGenerator } from './types/IProgrammeSitemapUrlGenerator';
4
+ import { FilterKey } from '@studyportals/search-filters';
5
+ export declare abstract class ProgrammesBaseIndexabilityPolicy extends BaseSeoIndexabilityPolicy<IProgrammeSeoDependencies> implements IProgrammeSitemapUrlGenerator {
6
+ abstract readonly filterKeys: FilterKey[];
7
+ protected initateBaseRules(): void;
7
8
  }
@@ -3,8 +3,19 @@ import { IndexablePageNumberRule } from './rules/IndexablePageNumberRule';
3
3
  import { NotDistanceLearningPortalRule } from './rules/NotDistanceLearningPortalRule';
4
4
  import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
5
5
  export class ProgrammesBaseIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
6
- rules = [new AtLeastSevenResultsRule(), new IndexablePageNumberRule(), new NotDistanceLearningPortalRule()];
7
- get baseRules() {
8
- return this.rules;
6
+ initateBaseRules() {
7
+ const indexablePageNumberRule = new IndexablePageNumberRule();
8
+ let atLeastSevenResultsRule;
9
+ let notDistanceLearningPortalRule;
10
+ if (super.isSitemapUrlGeneratorDependencies()) {
11
+ const dependencies = this.dependencies;
12
+ atLeastSevenResultsRule = new AtLeastSevenResultsRule(dependencies.searchApiClient);
13
+ notDistanceLearningPortalRule = new NotDistanceLearningPortalRule(dependencies.portalType);
14
+ }
15
+ else {
16
+ atLeastSevenResultsRule = new AtLeastSevenResultsRule();
17
+ notDistanceLearningPortalRule = new NotDistanceLearningPortalRule();
18
+ }
19
+ this.rules.push(atLeastSevenResultsRule, notDistanceLearningPortalRule, indexablePageNumberRule);
9
20
  }
10
21
  }
@@ -3,7 +3,7 @@ import { ISeoIndexabilityPolicy } from '../common/ISeoIndexabilityPolicy';
3
3
  import { ISeoInfoBase } from '../common/ISeoInfoBase';
4
4
  import { ISeoFilterState } from '../common/ISeoFilterState';
5
5
  import { ISearchIndexabilityManager } from '../common/ISearchIndexabilityManager';
6
- import { IProgrammeSearchApplicationState } from './IProgrammeSearchApplicationState';
6
+ import { IProgrammeSearchApplicationState } from './types/IProgrammeSearchApplicationState';
7
7
  export declare class SearchIndexabilityManager implements ISearchIndexabilityManager {
8
8
  private policies;
9
9
  constructor(portalType: PortalType, seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState, applicationState: IProgrammeSearchApplicationState);
@@ -1,9 +1,15 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
1
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
2
5
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
3
7
  export declare class Area extends ProgrammesBaseIndexabilityPolicy {
4
8
  readonly name: string;
5
9
  readonly description: string;
6
- protected readonly rules: import("../../common/IRule").IRule[];
10
+ readonly filterKeys: FilterKey[];
11
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
12
+ constructor(dependencies: IProgrammeSeoDependencies);
7
13
  protected generateUrls(): Promise<string[]>;
8
14
  get filterCombination(): FilterCombinations;
9
15
  }
@@ -3,17 +3,34 @@ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedR
3
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
5
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
+ import { AreaPresenter } from '../../presenters/AreaPresenter';
6
7
  export class Area extends ProgrammesBaseIndexabilityPolicy {
7
8
  name = 'Area Policy';
8
9
  description = 'Controls indexing of pages filtered by geographic areas.';
10
+ filterKeys = [FilterKey.AREA];
9
11
  rules = [
10
- ...this.baseRules,
11
12
  new SingleValueSelectedForFilterRule(FilterKey.AREA),
12
13
  new SingleValueSelectedForFilterRule(FilterKey.COUNTRY),
13
14
  new OnlyFiltersSelectedRule([FilterKey.AREA, FilterKey.COUNTRY])
14
15
  ];
15
- generateUrls() {
16
- throw new Error('Method not implemented.');
16
+ constructor(dependencies) {
17
+ super(dependencies);
18
+ this.initateBaseRules();
19
+ }
20
+ async generateUrls() {
21
+ const areaFragments = AreaPresenter.getInstance().getFragments();
22
+ const paths = [];
23
+ for (const area of areaFragments) {
24
+ const filterKeyValues = new Map([
25
+ [FilterKey.AREA, [area.id]],
26
+ [FilterKey.COUNTRY, [area.countryId]]
27
+ ]);
28
+ const result = await this.checkRulesForSitemap(filterKeyValues);
29
+ if (result) {
30
+ paths.push(area.path);
31
+ }
32
+ }
33
+ return paths;
17
34
  }
18
35
  get filterCombination() {
19
36
  return FilterCombinations.AREA;
@@ -1,9 +1,16 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
1
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
2
6
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
3
8
  export declare class Attendance extends ProgrammesBaseIndexabilityPolicy {
4
9
  readonly name: string;
5
10
  readonly description: string;
6
- protected readonly rules: import("../../common/IRule").IRule[];
11
+ readonly filterKeys: FilterKey[];
12
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule)[];
13
+ constructor(dependencies: IProgrammeSeoDependencies);
7
14
  protected generateUrls(): Promise<string[]>;
8
15
  get filterCombination(): FilterCombinations;
9
16
  }
@@ -4,17 +4,31 @@ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValue
4
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
5
  import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
6
6
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
7
+ import { AttendancePresenter } from '../../presenters/AttendancePresenter';
7
8
  export class Attendance extends ProgrammesBaseIndexabilityPolicy {
8
9
  name = 'Attendance Policy';
9
10
  description = 'Determines indexing rules for pages filtered by study format (online, on-campus, etc.).';
11
+ filterKeys = [FilterKey.DELIVERY_METHOD];
10
12
  rules = [
11
- ...this.baseRules,
12
13
  new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
13
14
  new OnlyFiltersSelectedRule([FilterKey.DELIVERY_METHOD]),
14
15
  new OnlineAttendanceRule()
15
16
  ];
16
- generateUrls() {
17
- throw new Error('Method not implemented.');
17
+ constructor(dependencies) {
18
+ super(dependencies);
19
+ this.initateBaseRules();
20
+ }
21
+ async generateUrls() {
22
+ const attendanceFragments = AttendancePresenter.getInstance().getFragments();
23
+ const paths = [];
24
+ for (const attendance of attendanceFragments) {
25
+ const filterKeyValues = new Map([[FilterKey.DELIVERY_METHOD, [attendance.id]]]);
26
+ const result = await this.checkRulesForSitemap(filterKeyValues);
27
+ if (result) {
28
+ paths.push(attendance.path);
29
+ }
30
+ }
31
+ return paths;
18
32
  }
19
33
  get filterCombination() {
20
34
  return FilterCombinations.ATTENDANCE;
@@ -1,9 +1,17 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
1
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
5
+ import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
6
+ import { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
2
7
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
8
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
3
9
  export declare class AttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
4
10
  readonly name: string;
5
11
  readonly description: string;
6
- protected readonly rules: import("../../common/IRule").IRule[];
12
+ readonly filterKeys: FilterKey[];
13
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule | IndexableDegreeRule)[];
14
+ constructor(dependencies: IProgrammeSeoDependencies);
7
15
  protected generateUrls(): Promise<string[]>;
8
16
  get filterCombination(): FilterCombinations;
9
17
  }
@@ -5,19 +5,40 @@ import { FilterCombinations } from '../../enums/FilterCombinations';
5
5
  import { OnlineAttendanceRule } from '../../common/rules/OnlineAttendanceRule';
6
6
  import { IndexableDegreeRule } from '../rules/IndexableDegreeRule';
7
7
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
8
+ import { AttendancePresenter } from '../../presenters/AttendancePresenter';
9
+ import { DegreePresenter } from '../../presenters/DegreePresenter';
8
10
  export class AttendanceDegree extends ProgrammesBaseIndexabilityPolicy {
9
11
  name = 'Attendance Degree Type Policy';
10
12
  description = 'Determines indexing rules for pages filtered by both study format (online, on-campus, etc.), and degree type prioritizing degrees and formats with demonstrated search demand.';
13
+ filterKeys = [FilterKey.DELIVERY_METHOD, FilterKey.DEGREE_TYPE];
11
14
  rules = [
12
- ...this.baseRules,
13
15
  new SingleValueSelectedForFilterRule(FilterKey.DELIVERY_METHOD),
14
16
  new SingleValueSelectedForFilterRule(FilterKey.DEGREE_TYPE),
15
17
  new OnlyFiltersSelectedRule([FilterKey.DELIVERY_METHOD, FilterKey.DEGREE_TYPE]),
16
18
  new IndexableDegreeRule(),
17
19
  new OnlineAttendanceRule()
18
20
  ];
19
- generateUrls() {
20
- throw new Error('Method not implemented.');
21
+ constructor(dependencies) {
22
+ super(dependencies);
23
+ this.initateBaseRules();
24
+ }
25
+ async generateUrls() {
26
+ const attendanceFragments = AttendancePresenter.getInstance().getFragments();
27
+ const degreeFragments = DegreePresenter.getInstance().getFragments();
28
+ const paths = [];
29
+ for (const attendance of attendanceFragments) {
30
+ for (const degree of degreeFragments) {
31
+ const filterKeyValues = new Map([
32
+ [FilterKey.DELIVERY_METHOD, [attendance.id]],
33
+ [FilterKey.DEGREE_TYPE, [degree.id]]
34
+ ]);
35
+ const result = await this.checkRulesForSitemap(filterKeyValues);
36
+ if (result) {
37
+ paths.push(`${attendance.path}/${degree.path}`);
38
+ }
39
+ }
40
+ }
41
+ return paths;
21
42
  }
22
43
  get filterCombination() {
23
44
  return FilterCombinations.ATTENDANCE_DEGREE;
@@ -1,9 +1,15 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
2
+ import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
3
+ import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
1
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
2
5
  import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityPolicy';
6
+ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
3
7
  export declare class Continent extends ProgrammesBaseIndexabilityPolicy {
4
8
  readonly name: string;
5
9
  readonly description: string;
6
- protected readonly rules: import("../../common/IRule").IRule[];
10
+ readonly filterKeys: FilterKey[];
11
+ protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
12
+ constructor(dependencies: IProgrammeSeoDependencies);
7
13
  protected generateUrls(): Promise<string[]>;
8
14
  get filterCombination(): FilterCombinations;
9
15
  }