@studyportals/fawkes 6.0.1-1 → 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 (98) hide show
  1. package/dist/sitemap-generator-seo/index.d.ts +13 -13
  2. package/dist/sitemap-generator-seo/index.js +4 -5
  3. package/dist/src/common/IRankingApiClient.d.ts +3 -0
  4. package/dist/src/common/ISitemapDependencies.d.ts +0 -2
  5. package/dist/src/common/ISitemapUrlGenerator.d.ts +1 -1
  6. package/dist/src/organisations/rules/OnlineAttendanceRule.d.ts +0 -1
  7. package/dist/src/organisations/rules/OnlineAttendanceRule.js +0 -3
  8. package/dist/src/organisations/types/IOrganisationsSitemapDependencies.d.ts +2 -0
  9. package/dist/src/programmes/ProgrammesBaseIndexabilityPolicy.d.ts +4 -1
  10. package/dist/src/programmes/policies/Area.d.ts +2 -0
  11. package/dist/src/programmes/policies/Area.js +1 -0
  12. package/dist/src/programmes/policies/Attendance.d.ts +2 -0
  13. package/dist/src/programmes/policies/Attendance.js +1 -0
  14. package/dist/src/programmes/policies/AttendanceDegree.d.ts +2 -0
  15. package/dist/src/programmes/policies/AttendanceDegree.js +1 -0
  16. package/dist/src/programmes/policies/Continent.d.ts +2 -0
  17. package/dist/src/programmes/policies/Continent.js +1 -0
  18. package/dist/src/programmes/policies/ContinentTuitionFee.d.ts +2 -0
  19. package/dist/src/programmes/policies/ContinentTuitionFee.js +1 -0
  20. package/dist/src/programmes/policies/Country.d.ts +2 -0
  21. package/dist/src/programmes/policies/Country.js +1 -0
  22. package/dist/src/programmes/policies/CountryAttendance.d.ts +2 -0
  23. package/dist/src/programmes/policies/CountryAttendance.js +1 -0
  24. package/dist/src/programmes/policies/CountryAttendanceDegree.d.ts +2 -0
  25. package/dist/src/programmes/policies/CountryAttendanceDegree.js +1 -0
  26. package/dist/src/programmes/policies/CountryDegree.d.ts +2 -0
  27. package/dist/src/programmes/policies/CountryDegree.js +1 -0
  28. package/dist/src/programmes/policies/CountryDuration.d.ts +2 -0
  29. package/dist/src/programmes/policies/CountryDuration.js +1 -0
  30. package/dist/src/programmes/policies/CountryDurationDegree.d.ts +2 -0
  31. package/dist/src/programmes/policies/CountryDurationDegree.js +1 -0
  32. package/dist/src/programmes/policies/CountryEducationalForm.d.ts +2 -0
  33. package/dist/src/programmes/policies/CountryEducationalForm.js +1 -0
  34. package/dist/src/programmes/policies/CountryFormat.d.ts +2 -0
  35. package/dist/src/programmes/policies/CountryFormat.js +1 -0
  36. package/dist/src/programmes/policies/CountryTuitionFee.d.ts +2 -0
  37. package/dist/src/programmes/policies/CountryTuitionFee.js +1 -0
  38. package/dist/src/programmes/policies/Discipline.d.ts +2 -0
  39. package/dist/src/programmes/policies/Discipline.js +1 -0
  40. package/dist/src/programmes/policies/DisciplineArea.d.ts +2 -0
  41. package/dist/src/programmes/policies/DisciplineArea.js +1 -0
  42. package/dist/src/programmes/policies/DisciplineAttendance.d.ts +2 -0
  43. package/dist/src/programmes/policies/DisciplineAttendance.js +1 -0
  44. package/dist/src/programmes/policies/DisciplineContinent.d.ts +2 -0
  45. package/dist/src/programmes/policies/DisciplineContinent.js +1 -0
  46. package/dist/src/programmes/policies/DisciplineCountry.d.ts +2 -0
  47. package/dist/src/programmes/policies/DisciplineCountry.js +1 -0
  48. package/dist/src/programmes/policies/DisciplineCountryDegree.d.ts +2 -0
  49. package/dist/src/programmes/policies/DisciplineCountryDegree.js +1 -0
  50. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.d.ts +2 -0
  51. package/dist/src/programmes/policies/DisciplineCountryEducationalForm.js +1 -0
  52. package/dist/src/programmes/policies/DisciplineDegree.d.ts +2 -0
  53. package/dist/src/programmes/policies/DisciplineDegree.js +1 -0
  54. package/dist/src/programmes/policies/DisciplineDuration.d.ts +2 -0
  55. package/dist/src/programmes/policies/DisciplineDuration.js +1 -0
  56. package/dist/src/programmes/policies/DisciplineEducationalForm.d.ts +2 -0
  57. package/dist/src/programmes/policies/DisciplineEducationalForm.js +1 -0
  58. package/dist/src/programmes/policies/DisciplineFormat.d.ts +2 -0
  59. package/dist/src/programmes/policies/DisciplineFormat.js +1 -0
  60. package/dist/src/programmes/policies/DisciplineTuitionFee.d.ts +2 -0
  61. package/dist/src/programmes/policies/DisciplineTuitionFee.js +1 -0
  62. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.d.ts +2 -0
  63. package/dist/src/programmes/policies/DisciplineTuitionFeeAttendance.js +1 -0
  64. package/dist/src/programmes/policies/SpecialProgrammes.d.ts +2 -0
  65. package/dist/src/programmes/policies/SpecialProgrammes.js +1 -0
  66. package/dist/src/programmes/policies/TuitionFee.d.ts +2 -0
  67. package/dist/src/programmes/policies/TuitionFee.js +1 -0
  68. package/dist/src/programmes/policies/Unfiltered.d.ts +1 -0
  69. package/dist/src/programmes/policies/Unfiltered.js +1 -0
  70. package/dist/src/programmes/types/IProgrammeSearchSitemapDependencies.d.ts +4 -4
  71. package/dist/src/programmes/types/IProgrammeSitemapUrlGenerator.d.ts +5 -0
  72. package/dist/src/scholarships/policies/Area.d.ts +2 -2
  73. package/dist/src/scholarships/policies/Country.d.ts +2 -2
  74. package/dist/src/scholarships/policies/Discipline.d.ts +2 -2
  75. package/dist/src/scholarships/policies/DisciplineCountry.d.ts +2 -2
  76. package/dist/src/scholarships/policies/Unfiltered.d.ts +2 -2
  77. package/dist/src/scholarships/policies/UniversityCountry.d.ts +2 -2
  78. package/dist/src/scholarships/types/IScholarshipSeoDependencies.d.ts +3 -0
  79. package/dist/src/scholarships/types/IScholarshipSitemapDependencies.d.ts +5 -0
  80. package/dist/src/sitemap-generator/IPageNumberProvider.d.ts +3 -0
  81. package/dist/src/sitemap-generator/IPageNumberProvider.js +1 -0
  82. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.d.ts +5 -2
  83. package/dist/src/sitemap-generator/ProgrammesSitemapUrlGeneratorManager.js +25 -4
  84. package/dist/src/sitemap-generator/SitemapUrlGeneratorManager.d.ts +9 -0
  85. package/dist/src/sitemap-generator/SitemapUrlGeneratorManager.js +34 -0
  86. package/package.json +2 -2
  87. package/dist/src/common/IPolicyMetaData.d.ts +0 -6
  88. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.d.ts +0 -11
  89. package/dist/src/organisations/OrganisationsRuleBasedIndexabilityPolicy.js +0 -19
  90. package/dist/src/programmes/IProgrammeSearchApplicationState.d.ts +0 -4
  91. package/dist/src/programmes/IProgrammeSearchDependencies.d.ts +0 -7
  92. package/dist/src/programmes/IProgrammesSeoDependencies.d.ts +0 -2
  93. package/dist/src/programmes/rules/OnlineAttendanceRule.d.ts +0 -5
  94. package/dist/src/programmes/rules/OnlineAttendanceRule.js +0 -11
  95. /package/dist/src/common/{IPolicyMetaData.js → IRankingApiClient.js} +0 -0
  96. /package/dist/src/programmes/{IProgrammeSearchApplicationState.js → types/IProgrammeSitemapUrlGenerator.js} +0 -0
  97. /package/dist/src/{programmes/IProgrammeSearchDependencies.js → scholarships/types/IScholarshipSeoDependencies.js} +0 -0
  98. /package/dist/src/{programmes/IProgrammesSeoDependencies.js → scholarships/types/IScholarshipSitemapDependencies.js} +0 -0
@@ -9,6 +9,7 @@ import { DegreePresenter } from '../../presenters/DegreePresenter';
9
9
  export class DisciplineDegree extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Discipline Degree Policy';
11
11
  description = 'Determines indexing rules for pages filtered by both discipline, and degree type.';
12
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.DEGREE_TYPE];
12
13
  rules = [
13
14
  new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
14
15
  new SingleValueSelectedForFilterRule(FilterKey.DEGREE_TYPE),
@@ -1,3 +1,4 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
1
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
2
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
3
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -7,6 +8,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
8
  export declare class DisciplineDuration extends ProgrammesBaseIndexabilityPolicy {
8
9
  readonly name: string;
9
10
  readonly description: string;
11
+ readonly filterKeys: FilterKey[];
10
12
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexableDurationRule)[];
11
13
  constructor(dependencies: IProgrammeSeoDependencies);
12
14
  protected generateUrls(): Promise<string[]>;
@@ -9,6 +9,7 @@ import { DurationPresenter } from '../../presenters/DurationPresenter';
9
9
  export class DisciplineDuration extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Discipline Duration Policy';
11
11
  description = 'Determines indexing rules for pages filtered by both discipline, and duration (1 year, 2 years, etc.).';
12
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.DURATION];
12
13
  rules = [
13
14
  new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
14
15
  new SingleValueSelectedForFilterRule(FilterKey.DURATION),
@@ -1,3 +1,4 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
1
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
2
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
3
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -7,6 +8,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
8
  export declare class DisciplineEducationalForm extends ProgrammesBaseIndexabilityPolicy {
8
9
  readonly name: string;
9
10
  readonly description: string;
11
+ readonly filterKeys: FilterKey[];
10
12
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | IndexableEducationalFormRule)[];
11
13
  constructor(dependencies: IProgrammeSeoDependencies);
12
14
  protected generateUrls(): Promise<string[]>;
@@ -10,6 +10,7 @@ export class DisciplineEducationalForm extends ProgrammesBaseIndexabilityPolicy
10
10
  name = 'Discipline Educational Form Policy';
11
11
  description = `Determines indexing rules for pages filtered by both discipline,
12
12
  and educational form (academic, semester, summer school, etc.).`;
13
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.EDUCATIONAL_FORM];
13
14
  rules = [
14
15
  new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
15
16
  new SingleValueSelectedForFilterRule(FilterKey.EDUCATIONAL_FORM),
@@ -1,3 +1,4 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
1
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
2
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
3
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -7,6 +8,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
8
  export declare class DisciplineFormat extends ProgrammesBaseIndexabilityPolicy {
8
9
  readonly name: string;
9
10
  readonly description: string;
11
+ readonly filterKeys: FilterKey[];
10
12
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | PartTimeFormatRule)[];
11
13
  constructor(dependencies: IProgrammeSeoDependencies);
12
14
  protected generateUrls(): Promise<string[]>;
@@ -9,6 +9,7 @@ import { FormatPresenter } from '../../presenters/FormatPresenter';
9
9
  export class DisciplineFormat extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Discipline Format Policy';
11
11
  description = 'Determines indexing rules for pages filtered by both discipline, and attendance type (part-time or fulltime).';
12
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.ATTENDANCE];
12
13
  rules = [
13
14
  new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
14
15
  new SingleValueSelectedForFilterRule(FilterKey.ATTENDANCE),
@@ -1,3 +1,4 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
1
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
2
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
3
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -7,6 +8,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
8
  export declare class DisciplineTuitionFee extends ProgrammesBaseIndexabilityPolicy {
8
9
  readonly name: string;
9
10
  readonly description: string;
11
+ readonly filterKeys: FilterKey[];
10
12
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | AffordableTuitionFeeRule)[];
11
13
  constructor(dependencies: IProgrammeSeoDependencies);
12
14
  protected generateUrls(): Promise<string[]>;
@@ -9,6 +9,7 @@ import { TuitionFeePresenter } from '../../presenters/TuitionFeePresenter';
9
9
  export class DisciplineTuitionFee extends ProgrammesBaseIndexabilityPolicy {
10
10
  name = 'Discipline Tuition Fee Policy';
11
11
  description = 'Determines indexing rules for pages filtered by both discipline, and tuition fee.';
12
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.TUITION_FEE];
12
13
  rules = [
13
14
  new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
14
15
  new SingleValueSelectedForFilterRule(FilterKey.TUITION_FEE),
@@ -1,3 +1,4 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
1
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
2
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
3
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -8,6 +9,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
8
9
  export declare class DisciplineTuitionFeeAttendance extends ProgrammesBaseIndexabilityPolicy {
9
10
  readonly name: string;
10
11
  readonly description: string;
12
+ readonly filterKeys: FilterKey[];
11
13
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | OnlineAttendanceRule | AffordableTuitionFeeRule)[];
12
14
  constructor(dependencies: IProgrammeSeoDependencies);
13
15
  protected generateUrls(): Promise<string[]>;
@@ -11,6 +11,7 @@ import { TuitionFeePresenter } from '../../presenters/TuitionFeePresenter';
11
11
  export class DisciplineTuitionFeeAttendance extends ProgrammesBaseIndexabilityPolicy {
12
12
  name = 'Discipline Tuition Fee Attendance Policy';
13
13
  description = 'Determines indexing rules for pages filtered by discipline, tuition fee and study format (online, on-campus, etc.).';
14
+ filterKeys = [FilterKey.DISCIPLINES, FilterKey.TUITION_FEE, FilterKey.DELIVERY_METHOD];
14
15
  rules = [
15
16
  new SingleValueSelectedForFilterRule(FilterKey.DISCIPLINES),
16
17
  new SingleValueSelectedForFilterRule(FilterKey.TUITION_FEE),
@@ -1,3 +1,4 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
1
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
2
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
3
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -7,6 +8,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
7
8
  export declare class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
8
9
  readonly name: string;
9
10
  readonly description: string;
11
+ readonly filterKeys: FilterKey[];
10
12
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | ErasmusOrJointSpecialProgrammesRule)[];
11
13
  constructor(dependencies: IProgrammeSeoDependencies);
12
14
  protected generateUrls(): Promise<string[]>;
@@ -8,6 +8,7 @@ import { SpecialProgrammesPresenter } from '../../presenters/SpecialProgrammesPr
8
8
  export class SpecialProgrammes extends ProgrammesBaseIndexabilityPolicy {
9
9
  name = 'Special Programmes Policy';
10
10
  description = 'Controls indexing of pages filtered by special programmes like Erasmus Mundus or Joint Programmes.';
11
+ filterKeys = [FilterKey.SPECIAL_PROGRAMMES];
11
12
  rules = [
12
13
  new SingleValueSelectedForFilterRule(FilterKey.SPECIAL_PROGRAMMES),
13
14
  new OnlyFiltersSelectedRule([FilterKey.SPECIAL_PROGRAMMES]),
@@ -1,3 +1,4 @@
1
+ import { FilterKey } from '@studyportals/search-filters';
1
2
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
2
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
3
4
  import { FilterCombinations } from '../../enums/FilterCombinations';
@@ -6,6 +7,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
6
7
  export declare class TuitionFee extends ProgrammesBaseIndexabilityPolicy {
7
8
  readonly name: string;
8
9
  readonly description: string;
10
+ readonly filterKeys: FilterKey[];
9
11
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
10
12
  constructor(dependencies: IProgrammeSeoDependencies);
11
13
  protected generateUrls(): Promise<string[]>;
@@ -7,6 +7,7 @@ import { TuitionFeePresenter } from '../../presenters/TuitionFeePresenter';
7
7
  export class TuitionFee extends ProgrammesBaseIndexabilityPolicy {
8
8
  name = 'Tuition Fee Policy';
9
9
  description = 'Controls indexing of pages filtered by tuition fee.';
10
+ filterKeys = [FilterKey.TUITION_FEE];
10
11
  rules = [
11
12
  new SingleValueSelectedForFilterRule(FilterKey.TUITION_FEE),
12
13
  new OnlyFiltersSelectedRule([FilterKey.TUITION_FEE])
@@ -5,6 +5,7 @@ import { IProgrammeSeoDependencies } from '../types/IProgrammeSeoDependencies';
5
5
  export declare class Unfiltered extends ProgrammesBaseIndexabilityPolicy {
6
6
  readonly name: string;
7
7
  readonly description: string;
8
+ readonly filterKeys: never[];
8
9
  protected readonly rules: NoFiltersSelectedRule[];
9
10
  constructor(dependencies: IProgrammeSeoDependencies);
10
11
  generateUrls(): Promise<string[]>;
@@ -4,6 +4,7 @@ import { ProgrammesBaseIndexabilityPolicy } from '../ProgrammesBaseIndexabilityP
4
4
  export class Unfiltered extends ProgrammesBaseIndexabilityPolicy {
5
5
  name = 'Unfiltered Policy';
6
6
  description = 'Defines indexability rules for unfiltered pages, managing crawl budget by ensuring only high-value aggregate pages are included in the sitemap.';
7
+ filterKeys = [];
7
8
  rules = [new NoFiltersSelectedRule()];
8
9
  constructor(dependencies) {
9
10
  super(dependencies);
@@ -1,7 +1,7 @@
1
1
  import { PortalType } from '@studyportals/domain-client';
2
- import { IProgrammeSearchDependencies } from './IProgrammeSearchDependencies';
3
- import { ISearchApiClient } from '../../../sitemap-generator-seo';
4
- export interface IProgrammeSearchSitemapDependencies extends IProgrammeSearchDependencies {
2
+ import { IPageNumberProvider } from '../../sitemap-generator/IPageNumberProvider';
3
+ import { ISitemapDependencies } from '../../common/ISitemapDependencies';
4
+ export interface IProgrammeSearchSitemapDependencies extends ISitemapDependencies {
5
5
  portalType: PortalType;
6
- searchApiClient: ISearchApiClient;
6
+ pageNumberProvider: IPageNumberProvider;
7
7
  }
@@ -0,0 +1,5 @@
1
+ import { ISitemapUrlGenerator } from '../../common/ISitemapUrlGenerator';
2
+ import { FilterKey } from '@studyportals/search-filters';
3
+ export interface IProgrammeSitemapUrlGenerator extends ISitemapUrlGenerator {
4
+ readonly filterKeys: FilterKey[];
5
+ }
@@ -2,10 +2,10 @@ import { FilterCombinations } from '../../enums/FilterCombinations';
2
2
  import { ExceptAustraliaAreasRule } from '../rules/ExceptAustaliaAreasRule';
3
3
  import { SearchVolumeAreasRule } from '../rules/SearchVolumeAreasRule';
4
4
  import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
5
- import { ISeoDependencies } from '../../common/ISeoDependencies';
6
5
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
7
6
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
8
- export declare class Area extends BaseSeoIndexabilityPolicy<ISeoDependencies> {
7
+ import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
8
+ export declare class Area extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
9
9
  readonly name: string;
10
10
  readonly description: string;
11
11
  protected readonly rules: (ExceptAustraliaAreasRule | SearchVolumeAreasRule | SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
@@ -1,10 +1,10 @@
1
1
  import { FilterCombinations } from '../../enums/FilterCombinations';
2
2
  import { SearchVolumeCountriesRule } from '../rules/SearchVolumeCountriesRule';
3
3
  import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
4
- import { ISeoDependencies } from '../../common/ISeoDependencies';
5
4
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
6
5
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
7
- export declare class Country extends BaseSeoIndexabilityPolicy<ISeoDependencies> {
6
+ import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
7
+ export declare class Country extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
8
8
  readonly name: string;
9
9
  readonly description: string;
10
10
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | SearchVolumeCountriesRule)[];
@@ -1,10 +1,10 @@
1
1
  import { SearchVolumeDisciplinesRule } from '../../scholarships/rules/SearchVolumeDisciplinesRule';
2
2
  import { FilterCombinations } from '../../enums/FilterCombinations';
3
3
  import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
4
- import { ISeoDependencies } from '../../common/ISeoDependencies';
5
4
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
6
5
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
7
- export declare class Discipline extends BaseSeoIndexabilityPolicy<ISeoDependencies> {
6
+ import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
7
+ export declare class Discipline extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
8
8
  readonly name: string;
9
9
  readonly description: string;
10
10
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | SearchVolumeDisciplinesRule)[];
@@ -1,10 +1,10 @@
1
1
  import { FilterCombinations } from '../../enums/FilterCombinations';
2
2
  import { SearchVolumeCountriesDisciplinesRule } from '../rules/SearchVolumeCountriesDisciplinesRule';
3
3
  import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
4
- import { ISeoDependencies } from '../../common/ISeoDependencies';
5
4
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
6
5
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
7
- export declare class DisciplineCountry extends BaseSeoIndexabilityPolicy<ISeoDependencies> {
6
+ import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
7
+ export declare class DisciplineCountry extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
8
8
  readonly name: string;
9
9
  readonly description: string;
10
10
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule | SearchVolumeCountriesDisciplinesRule)[];
@@ -1,8 +1,8 @@
1
1
  import { FilterCombinations } from '../../enums/FilterCombinations';
2
- import { ISeoDependencies } from '../../common/ISeoDependencies';
3
2
  import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
4
3
  import { NoFiltersSelectedRule } from '../../common/rules/NoFiltersSelectedRule';
5
- export declare class Unfiltered extends BaseSeoIndexabilityPolicy<ISeoDependencies> {
4
+ import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
5
+ export declare class Unfiltered extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
6
6
  readonly name: string;
7
7
  readonly description: string;
8
8
  protected readonly rules: NoFiltersSelectedRule[];
@@ -1,9 +1,9 @@
1
1
  import { FilterCombinations } from '../../enums/FilterCombinations';
2
- import { ISeoDependencies } from '../../common/ISeoDependencies';
3
2
  import { BaseSeoIndexabilityPolicy } from '../../common/policies/BaseSeoIndexabilityPolicy';
4
3
  import { SingleValueSelectedForFilterRule } from '../../common/rules/SingleValueSelectedForFilterRule';
5
4
  import { OnlyFiltersSelectedRule } from '../../common/rules/OnlyFiltersSelectedRule';
6
- export declare class UniversityCountry extends BaseSeoIndexabilityPolicy<ISeoDependencies> {
5
+ import { IScholarshipSeoDependencies } from '../types/IScholarshipSeoDependencies';
6
+ export declare class UniversityCountry extends BaseSeoIndexabilityPolicy<IScholarshipSeoDependencies> {
7
7
  readonly name: string;
8
8
  readonly description: string;
9
9
  protected readonly rules: (SingleValueSelectedForFilterRule | OnlyFiltersSelectedRule)[];
@@ -0,0 +1,3 @@
1
+ import { ISearchDependencies } from '../../common/ISearchDependencies';
2
+ import { IScholarshipSitemapDependencies } from './IScholarshipSitemapDependencies';
3
+ export type IScholarshipSeoDependencies = ISearchDependencies | IScholarshipSitemapDependencies;
@@ -0,0 +1,5 @@
1
+ import { ISitemapDependencies } from '../../common/ISitemapDependencies';
2
+ import { IOrganisationsClient } from '../../sitemap-generator/IOrganisationsClient';
3
+ export interface IScholarshipSitemapDependencies extends ISitemapDependencies {
4
+ organisationsClient: IOrganisationsClient;
5
+ }
@@ -0,0 +1,3 @@
1
+ export interface IPageNumberProvider {
2
+ getPageNumber(): number;
3
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -2,9 +2,12 @@ import { ISitemapUrlGenerator } from '../common/ISitemapUrlGenerator';
2
2
  import { ISearchApiClient } from '../sitemap-generator/ISearchApiClient';
3
3
  import { BaseSitemapUrlGeneratorManager } from './BaseSitemapUrlGeneratorManager';
4
4
  import { PortalType } from '@studyportals/domain-client';
5
+ import { IPageNumberProvider } from './IPageNumberProvider';
6
+ import { FilterKey } from '@studyportals/search-filters';
7
+ import { IPresenter } from '../common';
5
8
  export declare class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGeneratorManager {
6
9
  readonly portalType: PortalType;
7
10
  readonly policies: ISitemapUrlGenerator[];
8
- readonly presenters: Map<any, any>;
9
- constructor(portalType: PortalType, searchApiClient: ISearchApiClient);
11
+ readonly presenters: Map<FilterKey, IPresenter>;
12
+ constructor(portalType: PortalType, searchApiClient: ISearchApiClient, pageNumberProvider: IPageNumberProvider);
10
13
  }
@@ -1,20 +1,30 @@
1
1
  import { DependencyTypes } from '../enums/DependencyTypes';
2
2
  import { BaseSitemapUrlGeneratorManager } from './BaseSitemapUrlGeneratorManager';
3
3
  import { Area, Attendance, AttendanceDegree, Continent, ContinentTuitionFee, Country, CountryAttendance, Discipline, SpecialProgrammes, TuitionFee, Unfiltered, CountryAttendanceDegree, CountryDegree, CountryDuration, CountryDurationDegree, CountryEducationalForm, CountryFormat, CountryTuitionFee, DisciplineArea, DisciplineAttendance, DisciplineContinent, DisciplineCountry, DisciplineCountryDegree, DisciplineCountryEducationalForm, DisciplineDegree, DisciplineDuration, DisciplineEducationalForm, DisciplineFormat, DisciplineTuitionFee, DisciplineTuitionFeeAttendance } from '../programmes/policies';
4
+ import { FilterKey } from '@studyportals/search-filters';
5
+ import { AreaPresenter } from '../presenters/AreaPresenter';
6
+ import { AttendancePresenter } from '../presenters/AttendancePresenter';
7
+ import { DegreePresenter } from '../presenters/DegreePresenter';
8
+ import { ContinentPresenter } from '../presenters/ContinentPresenter';
9
+ import { TuitionFeePresenter } from '../presenters/TuitionFeePresenter';
10
+ import { CountryPresenter } from '../presenters/CountryPresenter';
11
+ import { DisciplinePresenter } from '../presenters/DisciplinePresenter';
12
+ import { SpecialProgrammesPresenter } from '../presenters/SpecialProgrammesPresenter';
13
+ import { DurationPresenter } from '../presenters/DurationPresenter';
14
+ import { EducationalFormPresenter } from '../presenters/EducationalFormPresenter';
15
+ import { FormatPresenter } from '../presenters/FormatPresenter';
4
16
  export class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGeneratorManager {
5
17
  portalType;
6
18
  policies;
7
19
  presenters = new Map();
8
- constructor(portalType, searchApiClient) {
20
+ constructor(portalType, searchApiClient, pageNumberProvider) {
9
21
  super();
10
22
  this.portalType = portalType;
11
23
  const dependencies = {
12
24
  dependencyType: DependencyTypes.SITEMAP_GENERATOR,
13
25
  searchApiClient,
14
26
  portalType,
15
- applicationState: {}, // eslint-disable-line
16
- filterState: {}, // eslint-disable-line
17
- seoInfoBase: {} // eslint-disable-line
27
+ pageNumberProvider
18
28
  };
19
29
  this.policies = [
20
30
  new Area(dependencies),
@@ -48,5 +58,16 @@ export class ProgrammesSitemapUrlGeneratorManager extends BaseSitemapUrlGenerato
48
58
  new DisciplineTuitionFee(dependencies),
49
59
  new DisciplineTuitionFeeAttendance(dependencies)
50
60
  ];
61
+ this.presenters.set(FilterKey.AREA, AreaPresenter.getInstance());
62
+ this.presenters.set(FilterKey.DELIVERY_METHOD, AttendancePresenter.getInstance());
63
+ this.presenters.set(FilterKey.DEGREE_TYPE, DegreePresenter.getInstance());
64
+ this.presenters.set(FilterKey.CONTINENT, ContinentPresenter.getInstance());
65
+ this.presenters.set(FilterKey.TUITION_FEE, TuitionFeePresenter.getInstance());
66
+ this.presenters.set(FilterKey.COUNTRY, CountryPresenter.getInstance());
67
+ this.presenters.set(FilterKey.DISCIPLINES, DisciplinePresenter.getInstance());
68
+ this.presenters.set(FilterKey.SPECIAL_PROGRAMMES, SpecialProgrammesPresenter.getInstance());
69
+ this.presenters.set(FilterKey.DURATION, DurationPresenter.getInstance());
70
+ this.presenters.set(FilterKey.EDUCATIONAL_FORM, EducationalFormPresenter.getInstance());
71
+ this.presenters.set(FilterKey.ATTENDANCE, FormatPresenter.getInstance());
51
72
  }
52
73
  }
@@ -0,0 +1,9 @@
1
+ import { ISitemapUrlGeneratorManager } from './ISitemapUrlGeneratorManager';
2
+ import { FilterCombinations } from '../enums/FilterCombinations';
3
+ import { IOrganisationsClient } from '../sitemap-generator/IOrganisationsClient';
4
+ import { ISearchApiClient } from '../sitemap-generator/ISearchApiClient';
5
+ export declare class SitemapUrlGeneratorManager implements ISitemapUrlGeneratorManager {
6
+ private readonly policies;
7
+ constructor(searchApiClient: ISearchApiClient, organisationsClient: IOrganisationsClient);
8
+ generateUrls(): Promise<Map<FilterCombinations, string[]>>;
9
+ }
@@ -0,0 +1,34 @@
1
+ import { DependencyTypes } from '../enums/DependencyTypes';
2
+ import { Area } from '../scholarships/policies/Area';
3
+ import { Country } from '../scholarships/policies/Country';
4
+ import { Discipline } from '../scholarships/policies/Discipline';
5
+ import { DisciplineCountry } from '../scholarships/policies/DisciplineCountry';
6
+ import { UniversityCountry } from '../scholarships/policies/UniversityCountry';
7
+ import { Unfiltered } from '../scholarships/policies/Unfiltered';
8
+ export class SitemapUrlGeneratorManager {
9
+ policies;
10
+ constructor(searchApiClient, organisationsClient) {
11
+ const dependencies = {
12
+ dependencyType: DependencyTypes.SITEMAP_GENERATOR,
13
+ searchApiClient,
14
+ organisationsClient
15
+ };
16
+ this.policies = [
17
+ new Area(dependencies),
18
+ new Country(dependencies),
19
+ new DisciplineCountry(dependencies),
20
+ new Discipline(dependencies),
21
+ new UniversityCountry(dependencies),
22
+ new Unfiltered(dependencies)
23
+ ];
24
+ }
25
+ async generateUrls() {
26
+ const map = new Map();
27
+ await Promise.all(this.policies.map(async (policy) => {
28
+ const filterCombination = policy.filterCombination;
29
+ const urls = await policy.generateSitemapUrls();
30
+ map.set(filterCombination, urls);
31
+ }));
32
+ return map;
33
+ }
34
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studyportals/fawkes",
3
- "version": "6.0.1-1",
3
+ "version": "6.0.1-2",
4
4
  "description": "A package to centralize SEO related logic for SBLP and Sitemap Generator.",
5
5
  "files": [
6
6
  "./dist"
@@ -13,7 +13,7 @@
13
13
  "clean": "rimraf \"!(node_modules)/**/dist\"",
14
14
  "prepare-deployment": "npm run test && npm run build",
15
15
  "publish-major": "npm run prepare-deployment && npm version major && npm publish",
16
- "publish-beta": "npm run prepare-deployment && npm version prerelease && npm publish --tag beta --access=public --otp=123456",
16
+ "publish-beta": "npm run prepare-deployment && npm version prerelease && npm publish --tag beta --access=public",
17
17
  "prepare": "husky install",
18
18
  "test": "vitest run --coverage",
19
19
  "test:dev": "vitest --coverage",
@@ -1,6 +0,0 @@
1
- import { IRule } from "./IRule";
2
- export interface IPolicyMetaData {
3
- getAllRules(): IRule[];
4
- getName(): string;
5
- getDescription(): string;
6
- }
@@ -1,11 +0,0 @@
1
- import { PortalType } from '@studyportals/domain-client';
2
- import { IOrganisationsSeoDependencies } from './types/IOrganisationsSeoDependencies';
3
- import { SortingOptions } from '../enums/SortingOptions';
4
- import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
5
- export declare abstract class OrganisationsRuleBasedIndexabilityPolicy extends BaseSeoIndexabilityPolicy<IOrganisationsSeoDependencies> {
6
- protected readonly indexablePortalTypes: PortalType[];
7
- protected abstract readonly sortingOption: SortingOptions;
8
- constructor(dependencies: IOrganisationsSeoDependencies);
9
- protected isIndexable(): Promise<boolean>;
10
- private matchesSortingOption;
11
- }
@@ -1,19 +0,0 @@
1
- import { PortalType } from '@studyportals/domain-client';
2
- import { BaseSeoIndexabilityPolicy } from '../common/policies/BaseSeoIndexabilityPolicy';
3
- export class OrganisationsRuleBasedIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
4
- indexablePortalTypes = [PortalType.MASTER];
5
- constructor(dependencies) {
6
- super(dependencies);
7
- }
8
- async isIndexable() {
9
- const isIndexable = await super.isIndexable();
10
- if (!isIndexable) {
11
- return false;
12
- }
13
- return this.indexablePortalTypes.includes(this.dependencies.portalType) && this.matchesSortingOption();
14
- }
15
- matchesSortingOption() {
16
- const dependencies = this.dependencies;
17
- return dependencies.sortingState.getSelectedOption() === this.sortingOption;
18
- }
19
- }
@@ -1,4 +0,0 @@
1
- import { ISearchApplicationState } from '../common';
2
- export interface IProgrammeSearchApplicationState extends ISearchApplicationState {
3
- getPageNumber(): number;
4
- }
@@ -1,7 +0,0 @@
1
- import { ISearchDependencies } from '../common/ISearchDependencies';
2
- import { IProgrammeSearchApplicationState } from './IProgrammeSearchApplicationState';
3
- import { PortalType } from '@studyportals/domain-client';
4
- export interface IProgrammeSearchDependencies extends ISearchDependencies {
5
- portalType: PortalType;
6
- applicationState: IProgrammeSearchApplicationState;
7
- }
@@ -1,2 +0,0 @@
1
- import { IProgrammeSearchDependencies } from "./IProgrammeSearchDependencies";
2
- export type IProgrammesSeoDependencies = IProgrammeSearchDependencies;
@@ -1,5 +0,0 @@
1
- import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRule';
2
- export declare class OnlineAttendanceRule extends BaseFilterKeyValueRule {
3
- constructor();
4
- getName(): string;
5
- }
@@ -1,11 +0,0 @@
1
- import { FilterKey } from '@studyportals/search-filters';
2
- import { BaseFilterKeyValueRule } from '../../common/rules/BaseFilterKeyValueRule';
3
- export class OnlineAttendanceRule extends BaseFilterKeyValueRule {
4
- constructor() {
5
- const filterKeyValues = new Map([[FilterKey.DELIVERY_METHOD, ['online']]]);
6
- super(filterKeyValues);
7
- }
8
- getName() {
9
- return 'OnlineAttendanceRule';
10
- }
11
- }