@studyportals/fawkes 8.7.2-14 → 8.7.2-16
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.
- package/dist/src/organisations/SearchIndexabilityManager.js +3 -6
- package/dist/src/organisations/policies/our-picks/AreaAttendance.js +16 -14
- package/dist/src/organisations/policies/our-picks/CountryAttendance.js +15 -13
- package/dist/src/organisations/policies/ranked/RankedAttendanceDiscipline.js +15 -13
- package/dist/src/organisations/policies/ranked/RankedContinentAttendance.js +15 -13
- package/dist/src/organisations/policies/ranked/RankedCountryAttendance.js +15 -13
- package/dist/src/organisations/policies/ranked/RankedCountryDiscipline.js +17 -9
- package/dist/src/organisations/policies/ranked/RankedDiscipline.js +14 -10
- package/dist/src/organisations/policies/ranked/RankedUnfiltered.js +10 -4
- package/dist/src/sitemap-generator/BaseSitemapUrlGeneratorManager.js +1 -0
- package/package.json +1 -1
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
import { DependencyTypes } from '../enums/DependencyTypes';
|
|
2
|
-
import { Area, AreaAttendance, Attendance, Continent, Country, CountryAttendance, Unfiltered, RankedArea, RankedAttendance, RankedAttendanceDiscipline, RankedContinent, RankedContinentAttendance, RankedCountry, RankedCountryAttendance,
|
|
3
|
-
// RankedCountryDiscipline,
|
|
4
|
-
//RankedDiscipline,
|
|
5
|
-
RankedUnfiltered, CountryCity, CountryAreaCity } from '../organisations/policies';
|
|
2
|
+
import { Area, AreaAttendance, Attendance, Continent, Country, CountryAttendance, Unfiltered, RankedArea, RankedAttendance, RankedAttendanceDiscipline, RankedContinent, RankedContinentAttendance, RankedCountry, RankedCountryAttendance, RankedCountryDiscipline, RankedDiscipline, RankedUnfiltered, CountryCity, CountryAreaCity } from '../organisations/policies';
|
|
6
3
|
export class SearchIndexabilityManager {
|
|
7
4
|
policies;
|
|
8
5
|
constructor(portalType, seoInfoBase, filterState, sortingState, applicationState) {
|
|
@@ -31,8 +28,8 @@ export class SearchIndexabilityManager {
|
|
|
31
28
|
new RankedContinentAttendance(dependencies),
|
|
32
29
|
new RankedCountry(dependencies),
|
|
33
30
|
new RankedCountryAttendance(dependencies),
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
new RankedCountryDiscipline(dependencies),
|
|
32
|
+
new RankedDiscipline(dependencies),
|
|
36
33
|
new RankedUnfiltered(dependencies)
|
|
37
34
|
];
|
|
38
35
|
}
|
|
@@ -23,21 +23,23 @@ export class AreaAttendance extends OrganisationsSeoIndexabilityPolicy {
|
|
|
23
23
|
async generateUrls() {
|
|
24
24
|
const areaFragments = AreaPresenter.getInstance().getFragments();
|
|
25
25
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
paths.push(this.getPathWithSortingOption(`${attendance.path}/${area.path}`));
|
|
37
|
-
}
|
|
26
|
+
// Create array of promises for all combinations to parallelize API calls
|
|
27
|
+
const promises = areaFragments.flatMap(area => attendanceFragments.map(async (attendance) => {
|
|
28
|
+
const filterKeyValues = new Map([
|
|
29
|
+
[FilterKey.AREA, [area.id]],
|
|
30
|
+
[FilterKey.COUNTRY, [area.countryId]],
|
|
31
|
+
[FilterKey.DELIVERY_METHOD, [attendance.id]]
|
|
32
|
+
]);
|
|
33
|
+
const result = await this.checkRulesForSitemap(filterKeyValues);
|
|
34
|
+
if (result) {
|
|
35
|
+
return this.getPathWithSortingOption(`${attendance.path}/${area.path}`);
|
|
38
36
|
}
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
return null;
|
|
38
|
+
}));
|
|
39
|
+
// Wait for all promises to resolve in parallel
|
|
40
|
+
const results = await Promise.all(promises);
|
|
41
|
+
// Filter out null values and return paths
|
|
42
|
+
return results.filter((path) => path !== null);
|
|
41
43
|
}
|
|
42
44
|
get filterCombination() {
|
|
43
45
|
return FilterCombinations.AREA_ATTENDANCE;
|
|
@@ -25,19 +25,21 @@ export class CountryAttendance extends OrganisationsSeoIndexabilityPolicy {
|
|
|
25
25
|
async generateUrls() {
|
|
26
26
|
const countryFragments = CountryPresenter.getInstance().getFragments();
|
|
27
27
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
paths.push(this.getPathWithSortingOption(`${attendance.path}/${country.path}`));
|
|
38
|
-
}
|
|
28
|
+
// Create array of promises for all combinations to parallelize API calls
|
|
29
|
+
const promises = countryFragments.flatMap(country => attendanceFragments.map(async (attendance) => {
|
|
30
|
+
const filterKeyValues = new Map([
|
|
31
|
+
[FilterKey.COUNTRY, [country.id]],
|
|
32
|
+
[FilterKey.DELIVERY_METHOD, [attendance.id]]
|
|
33
|
+
]);
|
|
34
|
+
const result = await this.checkRulesForSitemap(filterKeyValues);
|
|
35
|
+
if (result) {
|
|
36
|
+
return this.getPathWithSortingOption(`${attendance.path}/${country.path}`);
|
|
39
37
|
}
|
|
40
|
-
|
|
41
|
-
|
|
38
|
+
return null;
|
|
39
|
+
}));
|
|
40
|
+
// Wait for all promises to resolve in parallel
|
|
41
|
+
const results = await Promise.all(promises);
|
|
42
|
+
// Filter out null values and return paths
|
|
43
|
+
return results.filter((path) => path !== null);
|
|
42
44
|
}
|
|
43
45
|
}
|
|
@@ -24,19 +24,21 @@ export class RankedAttendanceDiscipline extends RankedOrganisationsSeoIndexabili
|
|
|
24
24
|
async generateUrls() {
|
|
25
25
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
26
26
|
const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
paths.push(this.getPathWithSortingOption(`${attendance.path}/${discipline.path}`));
|
|
37
|
-
}
|
|
27
|
+
// Create array of promises for all combinations to parallelize API calls
|
|
28
|
+
const promises = attendanceFragments.flatMap(attendance => disciplineFragments.map(async (discipline) => {
|
|
29
|
+
const filterKeyValues = new Map([
|
|
30
|
+
[FilterKey.DELIVERY_METHOD, [attendance.id]],
|
|
31
|
+
[FilterKey.DISCIPLINES, [discipline.id]],
|
|
32
|
+
]);
|
|
33
|
+
const result = await this.checkRulesForSitemap(filterKeyValues);
|
|
34
|
+
if (result) {
|
|
35
|
+
return this.getPathWithSortingOption(`${attendance.path}/${discipline.path}`);
|
|
38
36
|
}
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
return null;
|
|
38
|
+
}));
|
|
39
|
+
// Wait for all promises to resolve in parallel
|
|
40
|
+
const results = await Promise.all(promises);
|
|
41
|
+
// Filter out null values and return paths
|
|
42
|
+
return results.filter((path) => path !== null);
|
|
41
43
|
}
|
|
42
44
|
}
|
|
@@ -23,20 +23,22 @@ export class RankedContinentAttendance extends RankedOrganisationsSeoIndexabilit
|
|
|
23
23
|
async generateUrls() {
|
|
24
24
|
const continentFragments = ContinentPresenter.getInstance().getFragments();
|
|
25
25
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
paths.push(this.getPathWithSortingOption(`${attendance.path}/${continent.path}`));
|
|
36
|
-
}
|
|
26
|
+
// Create array of promises for all combinations to parallelize API calls
|
|
27
|
+
const promises = continentFragments.flatMap(continent => attendanceFragments.map(async (attendance) => {
|
|
28
|
+
const filterKeyValues = new Map([
|
|
29
|
+
[FilterKey.CONTINENT, [continent.id]],
|
|
30
|
+
[FilterKey.DELIVERY_METHOD, [attendance.id]],
|
|
31
|
+
]);
|
|
32
|
+
const result = await this.checkRulesForSitemap(filterKeyValues);
|
|
33
|
+
if (result) {
|
|
34
|
+
return this.getPathWithSortingOption(`${attendance.path}/${continent.path}`);
|
|
37
35
|
}
|
|
38
|
-
|
|
39
|
-
|
|
36
|
+
return null;
|
|
37
|
+
}));
|
|
38
|
+
// Wait for all promises to resolve in parallel
|
|
39
|
+
const results = await Promise.all(promises);
|
|
40
|
+
// Filter out null values and return paths
|
|
41
|
+
return results.filter((path) => path !== null);
|
|
40
42
|
}
|
|
41
43
|
get filterCombination() {
|
|
42
44
|
return FilterCombinations.RANKED_CONTINENT_ATTENDANCE;
|
|
@@ -21,20 +21,22 @@ export class RankedCountryAttendance extends RankedOrganisationsSeoIndexabilityP
|
|
|
21
21
|
async generateUrls() {
|
|
22
22
|
const countryFragments = CountryPresenter.getInstance().getFragments();
|
|
23
23
|
const attendanceFragments = AttendancePresenter.getInstance().getFragments();
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
paths.push(this.getPathWithSortingOption(`${attendance.path}/${country.path}`));
|
|
34
|
-
}
|
|
24
|
+
// Create array of promises for all combinations to parallelize API calls
|
|
25
|
+
const promises = countryFragments.flatMap(country => attendanceFragments.map(async (attendance) => {
|
|
26
|
+
const filterKeyValues = new Map([
|
|
27
|
+
[FilterKey.COUNTRY, [country.id]],
|
|
28
|
+
[FilterKey.DELIVERY_METHOD, [attendance.id]]
|
|
29
|
+
]);
|
|
30
|
+
const result = await this.checkRulesForSitemap(filterKeyValues);
|
|
31
|
+
if (result) {
|
|
32
|
+
return this.getPathWithSortingOption(`${attendance.path}/${country.path}`);
|
|
35
33
|
}
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
return null;
|
|
35
|
+
}));
|
|
36
|
+
// Wait for all promises to resolve in parallel
|
|
37
|
+
const results = await Promise.all(promises);
|
|
38
|
+
// Filter out null values and return paths
|
|
39
|
+
return results.filter((path) => path !== null);
|
|
38
40
|
}
|
|
39
41
|
get filterCombination() {
|
|
40
42
|
return FilterCombinations.RANKED_COUNTRY_ATTENDANCE;
|
|
@@ -17,22 +17,30 @@ export class RankedCountryDiscipline extends RankedOrganisationsSeoIndexabilityP
|
|
|
17
17
|
super(dependencies);
|
|
18
18
|
}
|
|
19
19
|
async generateUrls() {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
20
|
+
try {
|
|
21
|
+
const countryFragments = CountryPresenter.getInstance().getFragments();
|
|
22
|
+
const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
|
|
23
|
+
// Create array of promises for all combinations to parallelize API calls
|
|
24
|
+
const promises = countryFragments.flatMap(country => disciplineFragments.map(async (discipline) => {
|
|
25
25
|
const filterKeyValues = new Map([
|
|
26
26
|
[FilterKey.COUNTRY, [country.id]],
|
|
27
|
-
[FilterKey.DISCIPLINES, [discipline.id]]
|
|
27
|
+
[FilterKey.DISCIPLINES, [discipline.id]]
|
|
28
28
|
]);
|
|
29
29
|
const result = await this.checkRulesForSitemap(filterKeyValues);
|
|
30
30
|
if (result) {
|
|
31
|
-
|
|
31
|
+
return this.getPathWithSortingOption(`${country.path}/${discipline.path}`);
|
|
32
32
|
}
|
|
33
|
-
|
|
33
|
+
return null;
|
|
34
|
+
}));
|
|
35
|
+
// Wait for all promises to resolve in parallel
|
|
36
|
+
const results = await Promise.all(promises);
|
|
37
|
+
// Filter out null values and return paths
|
|
38
|
+
return results.filter((path) => path !== null);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error('Error generating URLs for RankedCountryDiscipline:', error);
|
|
42
|
+
return [];
|
|
34
43
|
}
|
|
35
|
-
return paths;
|
|
36
44
|
}
|
|
37
45
|
get filterCombination() {
|
|
38
46
|
return FilterCombinations.RANKED_DISCIPLINE_COUNTRY;
|
|
@@ -15,18 +15,22 @@ export class RankedDiscipline extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
15
15
|
super(dependencies);
|
|
16
16
|
}
|
|
17
17
|
async generateUrls() {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
const
|
|
22
|
-
[FilterKey.DISCIPLINES, [discipline.id]]
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
18
|
+
try {
|
|
19
|
+
const disciplineFragments = DisciplinePresenter.getInstance().getFragments();
|
|
20
|
+
const paths = [];
|
|
21
|
+
for (const discipline of disciplineFragments) {
|
|
22
|
+
const filterKeyValues = new Map([[FilterKey.DISCIPLINES, [discipline.id]]]);
|
|
23
|
+
const result = await this.checkRulesForSitemap(filterKeyValues);
|
|
24
|
+
if (result) {
|
|
25
|
+
paths.push(this.getPathWithSortingOption(discipline.path));
|
|
26
|
+
}
|
|
27
27
|
}
|
|
28
|
+
return paths;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
console.error('Error generating URLs for RankedDiscipline:', error);
|
|
32
|
+
return [];
|
|
28
33
|
}
|
|
29
|
-
return paths;
|
|
30
34
|
}
|
|
31
35
|
get filterCombination() {
|
|
32
36
|
return FilterCombinations.RANKED_DISCIPLINE;
|
|
@@ -9,11 +9,17 @@ export class RankedUnfiltered extends RankedOrganisationsSeoIndexabilityPolicy {
|
|
|
9
9
|
super(dependencies);
|
|
10
10
|
}
|
|
11
11
|
async generateUrls() {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
try {
|
|
13
|
+
const filterKeyValues = new Map([]);
|
|
14
|
+
if (await this.checkRulesForSitemap(filterKeyValues)) {
|
|
15
|
+
return [this.getPathWithSortingOption('')];
|
|
16
|
+
}
|
|
17
|
+
return [];
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.error('Error generating URLs for RankedUnfiltered:', error);
|
|
21
|
+
return [];
|
|
15
22
|
}
|
|
16
|
-
return [];
|
|
17
23
|
}
|
|
18
24
|
get filterCombination() {
|
|
19
25
|
return FilterCombinations.RANKED_UNFILTERED;
|
|
@@ -17,6 +17,7 @@ export class BaseSitemapUrlGeneratorManager {
|
|
|
17
17
|
for (const presenter of this.presenters.values()) {
|
|
18
18
|
const count = presenter.getFragments().length;
|
|
19
19
|
this.filterKeyValueCounts.set(presenter.filterKey, count);
|
|
20
|
+
console.debug(`Set filter key value count for ${presenter.filterKey}: ${count}`); // eslint-disable-line no-console
|
|
20
21
|
}
|
|
21
22
|
}
|
|
22
23
|
getPolicies() {
|