@studyportals/fawkes 2.0.1-20 → 2.0.1-22

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 (107) hide show
  1. package/dist/index.d.ts +1 -8
  2. package/dist/index.js +1 -3
  3. package/dist/scholarships-seo/index.d.ts +7 -7
  4. package/dist/scholarships-seo/index.js +2 -2
  5. package/dist/sitemap-generator-seo/index.d.ts +7 -0
  6. package/dist/sitemap-generator-seo/index.js +3 -1
  7. package/dist/src/common/BaseSeoIndexabilityPolicy.d.ts +13 -9
  8. package/dist/src/common/BaseSeoIndexabilityPolicy.js +18 -8
  9. package/dist/src/common/ICustomRule.d.ts +6 -0
  10. package/dist/src/common/IDependencies.d.ts +4 -0
  11. package/dist/src/common/IFilterKeyValues.d.ts +6 -0
  12. package/dist/src/common/IFilterKeyValues.js +1 -0
  13. package/dist/src/common/IIndexabilityPolicyDependencies.d.ts +8 -0
  14. package/dist/src/common/ISitemapUrlGenerator.d.ts +5 -0
  15. package/dist/src/common/ISitemapUrlGenerator.js +1 -0
  16. package/dist/src/common/RuleBasedIndexabilityPolicy.d.ts +10 -0
  17. package/dist/src/common/RuleBasedIndexabilityPolicy.js +12 -0
  18. package/dist/src/enums/DependencyTypes.d.ts +4 -0
  19. package/dist/src/enums/DependencyTypes.js +5 -0
  20. package/dist/src/enums/FilterCombinations.d.ts +9 -0
  21. package/dist/src/enums/FilterCombinations.js +10 -0
  22. package/dist/src/organisations/ISeoInfoBaseOrganisations.d.ts +1 -1
  23. package/dist/src/organisations/SearchIndexabilityManager.d.ts +2 -2
  24. package/dist/src/organisations/SeoIndexabilityPolicy.d.ts +3 -4
  25. package/dist/src/organisations/SeoIndexabilityPolicy.js +2 -2
  26. package/dist/src/organisations/SeoRuleBasedIndexabilityPolicy.d.ts +7 -8
  27. package/dist/src/organisations/SeoRuleBasedIndexabilityPolicy.js +4 -3
  28. package/dist/src/presenters/AreaPresenter.d.ts +9 -0
  29. package/dist/src/presenters/AreaPresenter.js +33 -0
  30. package/dist/src/presenters/CountryPresenter.d.ts +9 -0
  31. package/dist/src/presenters/CountryPresenter.js +36 -0
  32. package/dist/src/presenters/DisciplinePresenter.d.ts +9 -0
  33. package/dist/src/presenters/DisciplinePresenter.js +31 -0
  34. package/dist/src/presenters/fragments/IAreaFragment.d.ts +4 -0
  35. package/dist/src/presenters/fragments/IAreaFragment.js +1 -0
  36. package/dist/src/presenters/fragments/ICountryFragment.d.ts +4 -0
  37. package/dist/src/presenters/fragments/ICountryFragment.js +1 -0
  38. package/dist/src/presenters/fragments/IFragment.d.ts +4 -0
  39. package/dist/src/presenters/fragments/IFragment.js +1 -0
  40. package/dist/src/scholarships/SearchIndexabilityManager.d.ts +6 -5
  41. package/dist/src/scholarships/SearchIndexabilityManager.js +14 -11
  42. package/dist/src/scholarships/index.d.ts +0 -1
  43. package/dist/src/scholarships/index.js +0 -1
  44. package/dist/src/scholarships/policies/AreaPolicy.d.ts +10 -9
  45. package/dist/src/scholarships/policies/AreaPolicy.js +36 -16
  46. package/dist/src/scholarships/policies/CountryPolicy.d.ts +10 -6
  47. package/dist/src/scholarships/policies/CountryPolicy.js +32 -10
  48. package/dist/src/scholarships/policies/DisciplineCountryPolicy.d.ts +10 -9
  49. package/dist/src/scholarships/policies/DisciplineCountryPolicy.js +43 -15
  50. package/dist/src/scholarships/policies/DisciplinePolicy.d.ts +10 -6
  51. package/dist/src/scholarships/policies/DisciplinePolicy.js +33 -10
  52. package/dist/src/scholarships/policies/UnfilteredPolicy.d.ts +6 -5
  53. package/dist/src/scholarships/policies/UnfilteredPolicy.js +11 -6
  54. package/dist/src/scholarships/policies/UniversityCountryPolicy.d.ts +6 -5
  55. package/dist/src/scholarships/policies/UniversityCountryPolicy.js +35 -9
  56. package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.d.ts +14 -0
  57. package/dist/src/scholarships/rules/ExceptAustaliaAreasRule.js +45 -0
  58. package/dist/src/scholarships/rules/SearchVolumeAreasRule.d.ts +12 -0
  59. package/dist/src/scholarships/rules/SearchVolumeAreasRule.js +34 -0
  60. package/dist/src/scholarships/rules/SearchVolumeCountriesRule.d.ts +12 -0
  61. package/dist/src/scholarships/rules/SearchVolumeCountriesRule.js +34 -0
  62. package/dist/src/scholarships/rules/SearchVolumeCountryDisciplineRule.d.ts +12 -0
  63. package/dist/src/scholarships/rules/SearchVolumeCountryDisciplineRule.js +37 -0
  64. package/dist/src/scholarships/rules/SearchVolumeDisciplinesRule.d.ts +12 -0
  65. package/dist/src/scholarships/rules/SearchVolumeDisciplinesRule.js +38 -0
  66. package/dist/src/scholarships/rules/files/search-volume.json +39334 -0
  67. package/dist/src/sitemap-generator/IOrganisation.d.ts +6 -0
  68. package/dist/src/sitemap-generator/IOrganisation.js +1 -0
  69. package/dist/src/sitemap-generator/IOrganisationsClient.d.ts +4 -0
  70. package/dist/src/sitemap-generator/IOrganisationsClient.js +1 -0
  71. package/dist/src/sitemap-generator/ISearchApiClient.d.ts +3 -0
  72. package/dist/src/sitemap-generator/ISearchApiClient.js +1 -0
  73. package/dist/src/sitemap-generator/ISitemapUrlGeneratorDependencies.d.ts +7 -0
  74. package/dist/src/sitemap-generator/ISitemapUrlGeneratorDependencies.js +1 -0
  75. package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.d.ts +4 -0
  76. package/dist/src/sitemap-generator/ISitemapUrlGeneratorManager.js +1 -0
  77. package/dist/src/sitemap-generator/SitemapUrlGeneratorManager.d.ts +8 -0
  78. package/dist/src/sitemap-generator/SitemapUrlGeneratorManager.js +24 -0
  79. package/dist/src/sitemap-generator/index.d.ts +0 -2
  80. package/dist/src/sitemap-generator/index.js +1 -2
  81. package/dist/src/types/SeoDependencies.d.ts +3 -0
  82. package/dist/src/types/SeoDependencies.js +1 -0
  83. package/package.json +19 -7
  84. package/dist/fawkes.js +0 -2
  85. package/dist/fawkes.js.map +0 -1
  86. package/dist/organisations-seo.js +0 -0
  87. package/dist/scholarships-seo.js +0 -2
  88. package/dist/scholarships-seo.js.map +0 -1
  89. package/dist/sitemap-generator-seo.js +0 -0
  90. package/dist/src/common/DisciplinePresenter.d.ts +0 -5
  91. package/dist/src/common/DisciplinePresenter.js +0 -48
  92. package/dist/src/common/IPrettyPathGenerator.d.ts +0 -3
  93. package/dist/src/common/fragments/Fragment.d.ts +0 -6
  94. package/dist/src/common/fragments/Fragment.js +0 -8
  95. package/dist/src/common/fragments/IFragment.d.ts +0 -4
  96. package/dist/src/scholarships/CustomRules.d.ts +0 -6
  97. package/dist/src/scholarships/CustomRules.js +0 -18
  98. package/dist/src/scholarships/policies/DisciplineAreaPolicy.d.ts +0 -12
  99. package/dist/src/scholarships/policies/DisciplineAreaPolicy.js +0 -34
  100. package/dist/src/sitemap-generator/CombinationType.d.ts +0 -2
  101. package/dist/src/sitemap-generator/CombinationType.js +0 -3
  102. package/dist/src/sitemap-generator/ISitemapPathGeneratorChain.d.ts +0 -4
  103. package/dist/src/sitemap-generator/SitemapPathGeneratorChain.d.ts +0 -7
  104. package/dist/src/sitemap-generator/SitemapPathGeneratorChain.js +0 -9
  105. /package/dist/src/common/{IPrettyPathGenerator.js → ICustomRule.js} +0 -0
  106. /package/dist/src/common/{fragments/IFragment.js → IDependencies.js} +0 -0
  107. /package/dist/src/{sitemap-generator/ISitemapPathGeneratorChain.js → common/IIndexabilityPolicyDependencies.js} +0 -0
package/dist/index.d.ts CHANGED
@@ -1,8 +1 @@
1
- import { ISeoFilterState } from "@/common/ISeoFilterState";
2
- import { ISeoInfoBase } from "@/common/ISeoInfoBase";
3
- import { ISeoFilterOptions } from "@/common/ISeoFilterOptions";
4
- import { ISeoSearchApplicationState } from "@/common/ISeoSearchApplicationState";
5
- import { ISearchIndexabilityManager } from "@/common/ISearchIndexabilityManager";
6
- import { SearchIndexabilityManager } from "@/scholarships/SearchIndexabilityManager";
7
- import { types } from "@/scholarships/types";
8
- export { ISeoFilterState, ISeoInfoBase, ISeoFilterOptions, ISeoSearchApplicationState, ISearchIndexabilityManager, SearchIndexabilityManager, types };
1
+ export * from './scholarships-seo';
package/dist/index.js CHANGED
@@ -1,3 +1 @@
1
- import { SearchIndexabilityManager } from "@/scholarships/SearchIndexabilityManager";
2
- import { types } from "@/scholarships/types";
3
- export { SearchIndexabilityManager, types };
1
+ export * from './scholarships-seo';
@@ -1,8 +1,8 @@
1
- import { ISeoFilterState } from "@/common/ISeoFilterState";
2
- import { ISeoInfoBase } from "@/common/ISeoInfoBase";
3
- import { ISeoFilterOptions } from "@/common/ISeoFilterOptions";
4
- import { ISeoSearchApplicationState } from "@/common/ISeoSearchApplicationState";
5
- import { ISearchIndexabilityManager } from "@/common/ISearchIndexabilityManager";
6
- import { SearchIndexabilityManager } from "@/scholarships/SearchIndexabilityManager";
7
- import { types } from "@/scholarships/types";
1
+ import { ISeoFilterState } from "../src/common/ISeoFilterState";
2
+ import { ISeoInfoBase } from "../src/common/ISeoInfoBase";
3
+ import { ISeoFilterOptions } from "../src/common/ISeoFilterOptions";
4
+ import { ISeoSearchApplicationState } from "../src/common/ISeoSearchApplicationState";
5
+ import { ISearchIndexabilityManager } from "../src/common/ISearchIndexabilityManager";
6
+ import { SearchIndexabilityManager } from "../src/scholarships/SearchIndexabilityManager";
7
+ import { types } from "../src/scholarships/types";
8
8
  export { ISeoFilterState, ISeoInfoBase, ISeoFilterOptions, ISeoSearchApplicationState, ISearchIndexabilityManager, SearchIndexabilityManager, types };
@@ -1,3 +1,3 @@
1
- import { SearchIndexabilityManager } from "@/scholarships/SearchIndexabilityManager";
2
- import { types } from "@/scholarships/types";
1
+ import { SearchIndexabilityManager } from "../src/scholarships/SearchIndexabilityManager";
2
+ import { types } from "../src/scholarships/types";
3
3
  export { SearchIndexabilityManager, types };
@@ -0,0 +1,7 @@
1
+ import { IOrganisationsClient } from "../src/sitemap-generator/IOrganisationsClient";
2
+ import { IOrganisation } from "../src/sitemap-generator/IOrganisation";
3
+ import { ISearchApiClient } from "../src/sitemap-generator/ISearchApiClient";
4
+ import { ISitemapUrlGeneratorManager } from "../src/sitemap-generator/ISitemapUrlGeneratorManager";
5
+ import { SitemapUrlGeneratorManager } from "../src/sitemap-generator/SitemapUrlGeneratorManager";
6
+ import { FilterCombinations } from "../src/enums/FilterCombinations";
7
+ export { IOrganisationsClient, IOrganisation, ISearchApiClient, ISitemapUrlGeneratorManager, SitemapUrlGeneratorManager, FilterCombinations };
@@ -1 +1,3 @@
1
- "use strict";
1
+ import { SitemapUrlGeneratorManager } from "../src/sitemap-generator/SitemapUrlGeneratorManager";
2
+ import { FilterCombinations } from "../src/enums/FilterCombinations";
3
+ export { SitemapUrlGeneratorManager, FilterCombinations };
@@ -1,12 +1,16 @@
1
- import { ISeoFilterState } from "./ISeoFilterState";
2
- import { IPrettyPathGenerator } from "./IPrettyPathGenerator";
1
+ import { ISitemapUrlGenerator } from "./ISitemapUrlGenerator";
3
2
  import { ISeoIndexabilityPolicy } from "./ISeoIndexabilityPolicy";
4
- import { ISeoInfoBase } from "@/common/ISeoInfoBase";
5
- export declare abstract class BaseSeoIndexabilityPolicy implements ISeoIndexabilityPolicy, IPrettyPathGenerator {
6
- protected seoInfoBase: ISeoInfoBase;
7
- protected filterState: ISeoFilterState;
8
- constructor(seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState);
3
+ import { IDependencies } from "./IDependencies";
4
+ import { SeoDependencies } from "../types/SeoDependencies";
5
+ import { FilterCombinations } from "../enums/FilterCombinations";
6
+ export declare abstract class BaseSeoIndexabilityPolicy implements ISeoIndexabilityPolicy, ISitemapUrlGenerator {
7
+ protected dependencies: IDependencies;
8
+ constructor(dependencies: SeoDependencies);
9
9
  shouldIndex(): Promise<boolean>;
10
- abstract generatePaths(): string[];
11
- protected matchesFilters(): Promise<boolean>;
10
+ generateSitemapUrls(): Promise<string[]>;
11
+ protected abstract matchesFilters(): Promise<boolean>;
12
+ private isIndexabilityPolicyDependencies;
13
+ private isSitemapUrlGeneratorDependencies;
14
+ protected abstract generateUrls(): Promise<string[]>;
15
+ abstract get filterCombination(): FilterCombinations;
12
16
  }
@@ -1,15 +1,25 @@
1
+ import { DependencyTypes } from "../enums/DependencyTypes";
1
2
  export class BaseSeoIndexabilityPolicy {
2
- seoInfoBase;
3
- filterState;
4
- constructor(seoInfoBase, filterState) {
5
- this.seoInfoBase = seoInfoBase;
6
- this.filterState = filterState;
3
+ dependencies;
4
+ constructor(dependencies) {
5
+ this.dependencies = dependencies;
7
6
  }
8
7
  async shouldIndex() {
8
+ if (!this.isIndexabilityPolicyDependencies()) {
9
+ throw new Error('Dependency type is incorrect.');
10
+ }
9
11
  return this.matchesFilters();
10
12
  }
11
- async matchesFilters() {
12
- // Default implementation
13
- return Promise.resolve(false);
13
+ async generateSitemapUrls() {
14
+ if (!this.isSitemapUrlGeneratorDependencies()) {
15
+ throw new Error('Dependency type is incorrect.');
16
+ }
17
+ return await this.generateUrls();
18
+ }
19
+ isIndexabilityPolicyDependencies() {
20
+ return this.dependencies.dependencyType === DependencyTypes.SEARCH;
21
+ }
22
+ isSitemapUrlGeneratorDependencies() {
23
+ return this.dependencies.dependencyType === DependencyTypes.SITEMAP_GENERATOR;
14
24
  }
15
25
  }
@@ -0,0 +1,6 @@
1
+ import { IFilterKeyValues } from "./IFilterKeyValues";
2
+ export interface ICustomRule {
3
+ forSearch(filterKeyValues: IFilterKeyValues): boolean;
4
+ forSitemapGenerator(filterKeyValues: IFilterKeyValues): boolean;
5
+ getName(): string;
6
+ }
@@ -0,0 +1,4 @@
1
+ import { DependencyTypes } from "../enums/DependencyTypes";
2
+ export interface IDependencies {
3
+ dependencyType: DependencyTypes;
4
+ }
@@ -0,0 +1,6 @@
1
+ import { FilterKey } from "@studyportals/search-filters";
2
+ export interface IFilterKeyValues {
3
+ readonly [FilterKey.DISCIPLINES]?: string;
4
+ readonly [FilterKey.COUNTRY]?: string;
5
+ readonly [FilterKey.AREA]?: string;
6
+ }
@@ -0,0 +1 @@
1
+ import { FilterKey } from "@studyportals/search-filters";
@@ -0,0 +1,8 @@
1
+ import { ISeoInfoBase, ISeoFilterState, ISeoFilterOptions, ISeoSearchApplicationState } from "../common";
2
+ import { IDependencies } from "./IDependencies";
3
+ export interface IIndexabilityPolicyDependencies extends IDependencies {
4
+ seoInfoBase: ISeoInfoBase;
5
+ filterState: ISeoFilterState;
6
+ filterOptions?: ISeoFilterOptions;
7
+ applicationState?: ISeoSearchApplicationState;
8
+ }
@@ -0,0 +1,5 @@
1
+ import { FilterCombinations } from "../enums/FilterCombinations";
2
+ export interface ISitemapUrlGenerator {
3
+ filterCombination: FilterCombinations;
4
+ generateSitemapUrls(): Promise<string[]>;
5
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
1
+ import { BaseSeoIndexabilityPolicy } from "./BaseSeoIndexabilityPolicy";
2
+ import { SeoDependencies } from "../types/SeoDependencies";
3
+ import { ICustomRule } from "./ICustomRule";
4
+ import { IFilterKeyValues } from "./IFilterKeyValues";
5
+ export declare abstract class RuleBasedIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
6
+ protected abstract rules: ICustomRule[];
7
+ constructor(dependencies: SeoDependencies);
8
+ protected checksEveryRuleForSearch(filterKeyValues: IFilterKeyValues): boolean;
9
+ protected checksEveryRuleForSitemap(filterKeyValues: IFilterKeyValues): boolean;
10
+ }
@@ -0,0 +1,12 @@
1
+ import { BaseSeoIndexabilityPolicy } from "./BaseSeoIndexabilityPolicy";
2
+ export class RuleBasedIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
3
+ constructor(dependencies) {
4
+ super(dependencies);
5
+ }
6
+ checksEveryRuleForSearch(filterKeyValues) {
7
+ return this.rules.every(rule => rule.forSearch(filterKeyValues));
8
+ }
9
+ checksEveryRuleForSitemap(filterKeyValues) {
10
+ return this.rules.every(rule => rule.forSitemapGenerator(filterKeyValues));
11
+ }
12
+ }
@@ -0,0 +1,4 @@
1
+ export declare enum DependencyTypes {
2
+ SEARCH = "search",
3
+ SITEMAP_GENERATOR = "sitemap-generator"
4
+ }
@@ -0,0 +1,5 @@
1
+ export var DependencyTypes;
2
+ (function (DependencyTypes) {
3
+ DependencyTypes["SEARCH"] = "search";
4
+ DependencyTypes["SITEMAP_GENERATOR"] = "sitemap-generator";
5
+ })(DependencyTypes || (DependencyTypes = {}));
@@ -0,0 +1,9 @@
1
+ export declare enum FilterCombinations {
2
+ AREA = "area",
3
+ COUNTRY = "country",
4
+ DISCIPLINE_AREA = "disciplineArea",
5
+ DISCIPLINE_COUNTRY = "disciplineCountry",
6
+ DISCIPLINE = "discipline",
7
+ UNFILTERED = "unfiltered",
8
+ UNIVERSITY_COUNTRY = "universityCountry"
9
+ }
@@ -0,0 +1,10 @@
1
+ export var FilterCombinations;
2
+ (function (FilterCombinations) {
3
+ FilterCombinations["AREA"] = "area";
4
+ FilterCombinations["COUNTRY"] = "country";
5
+ FilterCombinations["DISCIPLINE_AREA"] = "disciplineArea";
6
+ FilterCombinations["DISCIPLINE_COUNTRY"] = "disciplineCountry";
7
+ FilterCombinations["DISCIPLINE"] = "discipline";
8
+ FilterCombinations["UNFILTERED"] = "unfiltered";
9
+ FilterCombinations["UNIVERSITY_COUNTRY"] = "universityCountry";
10
+ })(FilterCombinations || (FilterCombinations = {}));
@@ -1,4 +1,4 @@
1
- import { ISeoInfoBase } from "@/common/ISeoInfoBase";
1
+ import { ISeoInfoBase } from "../common/ISeoInfoBase";
2
2
  import { ISortState } from "./ISortState";
3
3
  import { SortingOptions } from "./SortingOptions";
4
4
  export interface ISeoInfoBaseOrganisations<T> extends ISeoInfoBase {
@@ -1,5 +1,5 @@
1
- import { ISearchIndexabilityManager } from "@/common/ISearchIndexabilityManager";
2
- import { ISeoIndexabilityPolicy } from "@/common/ISeoIndexabilityPolicy";
1
+ import { ISearchIndexabilityManager } from "../common/ISearchIndexabilityManager";
2
+ import { ISeoIndexabilityPolicy } from "../common/ISeoIndexabilityPolicy";
3
3
  export declare class SearchIndexabilityManager implements ISearchIndexabilityManager {
4
4
  policies: ISeoIndexabilityPolicy[];
5
5
  shouldIndex(): Promise<boolean>;
@@ -1,12 +1,11 @@
1
1
  import { BaseSeoIndexabilityPolicy } from "../common/BaseSeoIndexabilityPolicy";
2
- import { ISeoFilterState } from "../common/ISeoFilterState";
3
- import { ISeoInfoBase } from "../common/ISeoInfoBase";
4
2
  import { IOrganisationsProvider } from "./IOrganisationsProvider";
5
- import { IRankingApiClient } from "@/common/IRankingApiClient";
3
+ import { IRankingApiClient } from "../common/IRankingApiClient";
6
4
  import { ISortState } from "./ISortState";
5
+ import { SeoDependencies } from "../types/SeoDependencies";
7
6
  export declare abstract class SeoIndexabilityPolicy<T> extends BaseSeoIndexabilityPolicy {
8
7
  protected readonly organisationsProvider: IOrganisationsProvider<T>;
9
8
  protected readonly rankingApiClient: IRankingApiClient;
10
9
  protected readonly sortState: ISortState;
11
- constructor(seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState, organisationsProvider: IOrganisationsProvider<T>, rankingApiClient: IRankingApiClient, sortState: ISortState);
10
+ constructor(dependencies: SeoDependencies, organisationsProvider: IOrganisationsProvider<T>, rankingApiClient: IRankingApiClient, sortState: ISortState);
12
11
  }
@@ -3,8 +3,8 @@ export class SeoIndexabilityPolicy extends BaseSeoIndexabilityPolicy {
3
3
  organisationsProvider;
4
4
  rankingApiClient;
5
5
  sortState;
6
- constructor(seoInfoBase, filterState, organisationsProvider, rankingApiClient, sortState) {
7
- super(seoInfoBase, filterState);
6
+ constructor(dependencies, organisationsProvider, rankingApiClient, sortState) {
7
+ super(dependencies);
8
8
  this.organisationsProvider = organisationsProvider;
9
9
  this.rankingApiClient = rankingApiClient;
10
10
  this.sortState = sortState;
@@ -1,11 +1,10 @@
1
- import { SeoIndexabilityPolicy } from "@/organisations/SeoIndexabilityPolicy";
2
- import { ISeoFilterState } from "@/common/ISeoFilterState";
3
- import { ISeoInfoBase } from "@/common/ISeoInfoBase";
4
- import { IOrganisationsProvider } from "@/organisations/IOrganisationsProvider";
5
- import { IRankingApiClient } from "@/common/IRankingApiClient";
6
- import { FilterKeyValuePairs } from "@/organisations/FilterKeyValuePairs";
7
- import { ISortState } from "@/organisations/ISortState";
1
+ import { SeoIndexabilityPolicy } from "../organisations/SeoIndexabilityPolicy";
2
+ import { IOrganisationsProvider } from "../organisations/IOrganisationsProvider";
3
+ import { IRankingApiClient } from "../common/IRankingApiClient";
4
+ import { FilterKeyValuePairs } from "../organisations/FilterKeyValuePairs";
5
+ import { ISortState } from "../organisations/ISortState";
6
+ import { SeoDependencies } from "../types/SeoDependencies";
8
7
  export declare abstract class SeoRuleBasedIndexabilityPolicy<T> extends SeoIndexabilityPolicy<T> {
9
- constructor(seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState, organisationsProvider: IOrganisationsProvider<T>, rankingApiClient: IRankingApiClient, sortState: ISortState);
8
+ constructor(dependencies: SeoDependencies, organisationsProvider: IOrganisationsProvider<T>, rankingApiClient: IRankingApiClient, sortState: ISortState);
10
9
  protected abstract matchesRule(pairs: FilterKeyValuePairs, ...values: []): boolean;
11
10
  }
@@ -1,6 +1,7 @@
1
- import { SeoIndexabilityPolicy } from "@/organisations/SeoIndexabilityPolicy";
1
+ import { SeoIndexabilityPolicy } from "../organisations/SeoIndexabilityPolicy";
2
+ // TODO: Remove this class
2
3
  export class SeoRuleBasedIndexabilityPolicy extends SeoIndexabilityPolicy {
3
- constructor(seoInfoBase, filterState, organisationsProvider, rankingApiClient, sortState) {
4
- super(seoInfoBase, filterState, organisationsProvider, rankingApiClient, sortState);
4
+ constructor(dependencies, organisationsProvider, rankingApiClient, sortState) {
5
+ super(dependencies, organisationsProvider, rankingApiClient, sortState);
5
6
  }
6
7
  }
@@ -0,0 +1,9 @@
1
+ import { IAreaFragment } from './fragments/IAreaFragment';
2
+ export declare class AreaPresenter {
3
+ private static instance;
4
+ private fragments;
5
+ private constructor();
6
+ static getInstance(): AreaPresenter;
7
+ private generatePaths;
8
+ getFragments(): IAreaFragment[];
9
+ }
@@ -0,0 +1,33 @@
1
+ import { areasAll } from '@studyportals/static-domain-data/areas/areas';
2
+ import { areaGetPath } from '@studyportals/static-domain-data/areas/area-get-path';
3
+ export class AreaPresenter {
4
+ static instance;
5
+ fragments = [];
6
+ constructor() {
7
+ this.fragments = this.generatePaths();
8
+ }
9
+ static getInstance() {
10
+ if (!AreaPresenter.instance) {
11
+ AreaPresenter.instance = new AreaPresenter();
12
+ }
13
+ return AreaPresenter.instance;
14
+ }
15
+ generatePaths() {
16
+ const areas = [];
17
+ areasAll.forEach((area) => {
18
+ const path = areaGetPath(area.id);
19
+ if (path === null) {
20
+ return;
21
+ }
22
+ areas.push({
23
+ id: area.id,
24
+ path,
25
+ countryId: area.countryId
26
+ });
27
+ });
28
+ return areas;
29
+ }
30
+ getFragments() {
31
+ return this.fragments;
32
+ }
33
+ }
@@ -0,0 +1,9 @@
1
+ import { IFragment } from './fragments/IFragment';
2
+ export declare class CountryPresenter {
3
+ private static instance;
4
+ private fragments;
5
+ private constructor();
6
+ static getInstance(): CountryPresenter;
7
+ private generatePaths;
8
+ getFragments(): IFragment[];
9
+ }
@@ -0,0 +1,36 @@
1
+ import { countriesExtendedAll } from '@studyportals/static-domain-data/countries/countries-extended';
2
+ import { countryGetIsoCodePath } from '@studyportals/static-domain-data/countries/country-get-iso-path';
3
+ export class CountryPresenter {
4
+ static instance;
5
+ fragments = [];
6
+ constructor() {
7
+ this.fragments = this.generatePaths();
8
+ }
9
+ static getInstance() {
10
+ if (!CountryPresenter.instance) {
11
+ CountryPresenter.instance = new CountryPresenter();
12
+ }
13
+ return CountryPresenter.instance;
14
+ }
15
+ generatePaths() {
16
+ const countries = [];
17
+ countriesExtendedAll.forEach((country) => {
18
+ if (!country.iso) {
19
+ return;
20
+ }
21
+ const path = countryGetIsoCodePath(country.iso);
22
+ if (path === null) {
23
+ return;
24
+ }
25
+ countries.push({
26
+ id: country.id,
27
+ iso: country.iso,
28
+ path
29
+ });
30
+ });
31
+ return countries;
32
+ }
33
+ getFragments() {
34
+ return this.fragments;
35
+ }
36
+ }
@@ -0,0 +1,9 @@
1
+ import { IFragment } from './fragments/IFragment';
2
+ export declare class DisciplinePresenter {
3
+ private static instance;
4
+ private fragments;
5
+ private constructor();
6
+ static getInstance(): DisciplinePresenter;
7
+ private generatePaths;
8
+ getFragments(): IFragment[];
9
+ }
@@ -0,0 +1,31 @@
1
+ import { disciplinesAll } from '@studyportals/static-domain-data/disciplines/disciplines';
2
+ import { subdisciplinesAll } from '@studyportals/static-domain-data/disciplines/subdisciplines';
3
+ import { disciplineGetVirtualPath } from '@studyportals/static-domain-data/disciplines/discipline-get-virtual-path';
4
+ export class DisciplinePresenter {
5
+ static instance;
6
+ fragments = [];
7
+ constructor() {
8
+ this.fragments = this.generatePaths();
9
+ }
10
+ static getInstance() {
11
+ if (!DisciplinePresenter.instance) {
12
+ DisciplinePresenter.instance = new DisciplinePresenter();
13
+ }
14
+ return DisciplinePresenter.instance;
15
+ }
16
+ generatePaths() {
17
+ const disciplines = [];
18
+ const allDisciplines = [...disciplinesAll, ...subdisciplinesAll];
19
+ allDisciplines.forEach((discipline) => {
20
+ const path = disciplineGetVirtualPath(discipline.id);
21
+ if (path === null) {
22
+ return;
23
+ }
24
+ disciplines.push({ id: discipline.id, path });
25
+ });
26
+ return disciplines;
27
+ }
28
+ getFragments() {
29
+ return this.fragments;
30
+ }
31
+ }
@@ -0,0 +1,4 @@
1
+ import { IFragment } from "./IFragment";
2
+ export interface IAreaFragment extends IFragment {
3
+ countryId: string;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ import { IFragment } from "./IFragment";
2
+ export interface ICountryFragment extends IFragment {
3
+ readonly iso: string;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ export interface IFragment {
2
+ id: string;
3
+ path: string;
4
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -1,9 +1,10 @@
1
- import { ISeoInfoBase } from "@/common/ISeoInfoBase";
2
- import { ISeoFilterState } from "@/common/ISeoFilterState";
3
- import { ISearchIndexabilityManager } from "@/common/ISearchIndexabilityManager";
1
+ import { ISeoInfoBase } from "../common/ISeoInfoBase";
2
+ import { ISeoFilterState } from "../common/ISeoFilterState";
3
+ import { ISeoSearchApplicationState } from "../common/ISeoSearchApplicationState";
4
+ import { ISeoFilterOptions } from "../common/ISeoFilterOptions";
5
+ import { ISearchIndexabilityManager } from "../common/ISearchIndexabilityManager";
4
6
  export declare class SearchIndexabilityManager implements ISearchIndexabilityManager {
5
7
  private policies;
6
- private disciplinePresenter;
7
- constructor(seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState);
8
+ constructor(seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState, applicationState: ISeoSearchApplicationState, filterOptions: ISeoFilterOptions);
8
9
  shouldIndex(): Promise<boolean>;
9
10
  }
@@ -1,18 +1,21 @@
1
- // import { ISeoSearchApplicationState } from "@/common/ISeoSearchApplicationState";
1
+ import { AreaPolicy } from "./policies/AreaPolicy";
2
+ import { CountryPolicy } from "./policies/CountryPolicy";
3
+ import { DisciplineCountryPolicy } from "./policies/DisciplineCountryPolicy";
2
4
  import { DisciplinePolicy } from "./policies/DisciplinePolicy";
3
- import { DisciplinePresenter } from "@/common/DisciplinePresenter";
5
+ import { UniversityCountryPolicy } from "./policies/UniversityCountryPolicy";
6
+ import { UnfilteredPolicy } from "./policies/UnfilteredPolicy";
7
+ import { DependencyTypes } from "../enums/DependencyTypes";
4
8
  export class SearchIndexabilityManager {
5
9
  policies;
6
- disciplinePresenter = new DisciplinePresenter();
7
- constructor(seoInfoBase, filterState) {
10
+ constructor(seoInfoBase, filterState, applicationState, filterOptions) {
11
+ const dependencyType = DependencyTypes.SEARCH;
8
12
  this.policies = [
9
- // new AreaPolicy(seoInfoBase, filterState, filterOptions),
10
- // new CountryPolicy(seoInfoBase, filterState),
11
- // new DisciplineAreaPolicy(seoInfoBase, filterState, filterOptions, applicationState),
12
- // new DisciplineCountryPolicy(seoInfoBase, filterState, applicationState),
13
- new DisciplinePolicy(seoInfoBase, filterState),
14
- // new UniversityCountryPolicy(seoInfoBase, filterState),
15
- // new UnfilteredPolicy(seoInfoBase, filterState)
13
+ new AreaPolicy({ dependencyType, seoInfoBase, filterState, filterOptions }),
14
+ new CountryPolicy({ dependencyType, seoInfoBase, filterState }),
15
+ new DisciplineCountryPolicy({ dependencyType, seoInfoBase, filterState, applicationState }),
16
+ new DisciplinePolicy({ dependencyType, seoInfoBase, filterState }),
17
+ new UniversityCountryPolicy({ dependencyType, seoInfoBase, filterState }),
18
+ new UnfilteredPolicy({ dependencyType, seoInfoBase, filterState })
16
19
  ];
17
20
  }
18
21
  async shouldIndex() {
@@ -1,4 +1,3 @@
1
- export * from "./SearchIndexabilityManager";
2
1
  import { SearchIndexabilityManager } from "./SearchIndexabilityManager";
3
2
  import { types } from "./types";
4
3
  export { SearchIndexabilityManager, types };
@@ -1,4 +1,3 @@
1
- export * from "./SearchIndexabilityManager";
2
1
  import { SearchIndexabilityManager } from "./SearchIndexabilityManager";
3
2
  import { types } from "./types";
4
3
  export { SearchIndexabilityManager, types };
@@ -1,11 +1,12 @@
1
- import { BaseSeoIndexabilityPolicy } from '@/common/BaseSeoIndexabilityPolicy';
2
- import { ISeoFilterState } from '@/common/ISeoFilterState';
3
- import { ISeoInfoBase } from '@/common/ISeoInfoBase';
4
- import { ISeoIndexabilityPolicy } from '@/common/ISeoIndexabilityPolicy';
5
- import { ISeoFilterOptions } from '@/common/ISeoFilterOptions';
6
- export declare class AreaPolicy extends BaseSeoIndexabilityPolicy implements ISeoIndexabilityPolicy {
7
- private readonly filterOptions;
8
- constructor(seoInfoBase: ISeoInfoBase, filterState: ISeoFilterState, filterOptions: ISeoFilterOptions);
1
+ import { FilterCombinations } from '../../enums/FilterCombinations';
2
+ import { SeoDependencies } from '../../types/SeoDependencies';
3
+ import { RuleBasedIndexabilityPolicy } from '../../common/RuleBasedIndexabilityPolicy';
4
+ import { ICustomRule } from '../../common/ICustomRule';
5
+ import { ISeoIndexabilityPolicy } from '../../common/ISeoIndexabilityPolicy';
6
+ export declare class AreaPolicy extends RuleBasedIndexabilityPolicy implements ISeoIndexabilityPolicy {
7
+ protected rules: ICustomRule[];
8
+ constructor(dependencies: SeoDependencies);
9
9
  protected matchesFilters(): Promise<boolean>;
10
- generatePaths(): string[];
10
+ generateUrls(): Promise<string[]>;
11
+ get filterCombination(): FilterCombinations;
11
12
  }