@kth/om-kursen-ladok-client 1.1.0 → 1.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 (43) hide show
  1. package/dist/createApiClient.js +111 -5
  2. package/dist/createApiClient.js.map +1 -1
  3. package/dist/mapCourseInstans.d.ts +8 -0
  4. package/dist/mapCourseInstans.js +21 -0
  5. package/dist/mapCourseInstans.js.map +1 -0
  6. package/dist/mapCourseRound.d.ts +25 -3
  7. package/dist/mapCourseRound.js +20 -17
  8. package/dist/mapCourseRound.js.map +1 -1
  9. package/dist/mapCourseSyllabus.d.ts +76 -0
  10. package/dist/mapCourseSyllabus.js +67 -0
  11. package/dist/mapCourseSyllabus.js.map +1 -0
  12. package/dist/mapProgramTillfalle.d.ts +22 -0
  13. package/dist/mapProgramTillfalle.js +39 -0
  14. package/dist/mapProgramTillfalle.js.map +1 -0
  15. package/dist/mapStructureCourses.d.ts +24 -0
  16. package/dist/mapStructureCourses.js +27 -0
  17. package/dist/mapStructureCourses.js.map +1 -0
  18. package/dist/types/OmKursenLadokApiClient.d.ts +10 -1
  19. package/dist/utils/courseSyllabusUtil.d.ts +4 -0
  20. package/dist/utils/courseSyllabusUtil.js +66 -0
  21. package/dist/utils/courseSyllabusUtil.js.map +1 -0
  22. package/dist/utils/creditsUtil.d.ts +1 -0
  23. package/dist/utils/creditsUtil.js +3 -2
  24. package/dist/utils/creditsUtil.js.map +1 -1
  25. package/dist/utils/dateUtil.d.ts +1 -0
  26. package/dist/utils/dateUtil.js +4 -1
  27. package/dist/utils/dateUtil.js.map +1 -1
  28. package/dist/utils/examinationModulesUtil.d.ts +12 -1
  29. package/dist/utils/examinationModulesUtil.js +15 -1
  30. package/dist/utils/examinationModulesUtil.js.map +1 -1
  31. package/dist/utils/languageUtil.d.ts +8 -1
  32. package/dist/utils/languageUtil.js +10 -2
  33. package/dist/utils/languageUtil.js.map +1 -1
  34. package/dist/utils/periodUtil.d.ts +1 -0
  35. package/dist/utils/periodUtil.js +7 -1
  36. package/dist/utils/periodUtil.js.map +1 -1
  37. package/dist/utils/programStrukturUtil.d.ts +77 -0
  38. package/dist/utils/programStrukturUtil.js +191 -0
  39. package/dist/utils/programStrukturUtil.js.map +1 -0
  40. package/dist/utils/studyYearUtil.d.ts +25 -0
  41. package/dist/utils/studyYearUtil.js +48 -0
  42. package/dist/utils/studyYearUtil.js.map +1 -0
  43. package/package.json +5 -3
@@ -0,0 +1,191 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.fetchProgramStructure = exports.fetchAndCategorizeStructure = exports.fetchCourseInstanses = exports.fetchCourseBoxes = exports.fetchStructureByInstansUid = exports.fetchStructureByTillfalleUid = exports.handleError = void 0;
13
+ const mapStructureCourses_1 = require("../mapStructureCourses");
14
+ const mapCourseInstans_1 = require("../mapCourseInstans");
15
+ const ladok_attributvarde_utils_1 = require("@kth/ladok-attributvarde-utils");
16
+ const studyYearUtil_1 = require("./studyYearUtil");
17
+ const handleError = (message, error) => {
18
+ console.error(message, error);
19
+ return { error: message, details: (error === null || error === void 0 ? void 0 : error.message) || 'Unknown error' };
20
+ };
21
+ exports.handleError = handleError;
22
+ const fetchStructureByTillfalleUid = (uid, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
23
+ var _a;
24
+ try {
25
+ const struktur = yield ladokClient.utbildningstillfalleStruktur(uid);
26
+ return ((_a = struktur === null || struktur === void 0 ? void 0 : struktur.data) === null || _a === void 0 ? void 0 : _a.Strukturdelar) || [];
27
+ }
28
+ catch (error) {
29
+ throw (0, exports.handleError)('Failed to fetch structure', error);
30
+ }
31
+ });
32
+ exports.fetchStructureByTillfalleUid = fetchStructureByTillfalleUid;
33
+ const fetchStructureByInstansUid = (uid, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
34
+ var _a;
35
+ try {
36
+ const struktur = yield ladokClient.utbildningsinstansStruktur(uid);
37
+ return ((_a = struktur === null || struktur === void 0 ? void 0 : struktur.data) === null || _a === void 0 ? void 0 : _a.Strukturdelar) || [];
38
+ }
39
+ catch (error) {
40
+ throw (0, exports.handleError)('Failed to fetch structure', error);
41
+ }
42
+ });
43
+ exports.fetchStructureByInstansUid = fetchStructureByInstansUid;
44
+ const fetchCourseBoxes = (utbildningsbasUIDn, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
45
+ try {
46
+ const moduler = yield Promise.all(utbildningsbasUIDn.map((utbildningsbasUID) => __awaiter(void 0, void 0, void 0, function* () {
47
+ try {
48
+ const utbildningsinstans = yield ladokClient.utbildningstillfalle(utbildningsbasUID);
49
+ return utbildningsinstans.data;
50
+ }
51
+ catch (error) {
52
+ throw (0, exports.handleError)(`Error fetching module for utbildningsbasUID ${utbildningsbasUID}:`, error);
53
+ }
54
+ })));
55
+ return moduler.filter(module => module !== null);
56
+ }
57
+ catch (error) {
58
+ throw (0, exports.handleError)('Failed to fetch modules', error);
59
+ }
60
+ });
61
+ exports.fetchCourseBoxes = fetchCourseBoxes;
62
+ const fetchCourseInstanses = (utbildningsinstansUIDn, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
63
+ try {
64
+ const moduler = yield Promise.all(utbildningsinstansUIDn.map((utbildningsinstansUID) => __awaiter(void 0, void 0, void 0, function* () {
65
+ try {
66
+ const utbildningsinstans = yield ladokClient.utbildningsinstans(utbildningsinstansUID);
67
+ return utbildningsinstans.data;
68
+ }
69
+ catch (error) {
70
+ throw (0, exports.handleError)(`Error fetching module for utbildningsinstansUID ${utbildningsinstansUID}:`, error);
71
+ }
72
+ })));
73
+ return moduler.filter(module => module !== null);
74
+ }
75
+ catch (error) {
76
+ throw (0, exports.handleError)('Failed to fetch utbildningsinstanses', error);
77
+ }
78
+ });
79
+ exports.fetchCourseInstanses = fetchCourseInstanses;
80
+ const fetchAndCategorizeStructure = (utbildningstillfalleUID, language, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
81
+ const strukturDelar = yield (0, exports.fetchStructureByTillfalleUid)(utbildningstillfalleUID, ladokClient);
82
+ const categoryMap = {
83
+ 'Villkorligt valfria': 'VV',
84
+ 'RECOMMENDED COURSES': 'R',
85
+ 'RECOMMENDED COURSE': 'R',
86
+ 'REKOMMENDERADE KURSER': 'R',
87
+ 'REKOMMENDERADE KURSE': 'R',
88
+ 'REKOMMENDERAD KURS': 'R',
89
+ 'ELECTIVE COURSES': 'V',
90
+ 'ELECTIVE COURSE': 'V',
91
+ 'VALFRIA KURSER': 'V',
92
+ 'VALFRI KURS': 'V',
93
+ }; // TODO - this has been created based on the test data that we have, it needs to be verified and updated after having the actual user stories
94
+ const categorizedStrukturDelar = strukturDelar.map(strukturdel => {
95
+ if (!strukturdel.Valinformation) {
96
+ return Object.assign(Object.assign({}, strukturdel), { Valvillkor: 'O' }); // Default to Obligatory
97
+ }
98
+ const engDescription = strukturdel.Valinformation.EngelskBeskrivning || '';
99
+ const sweDescription = strukturdel.Valinformation.SvenskBeskrivning || '';
100
+ const category = categoryMap[engDescription.toUpperCase()] || categoryMap[sweDescription.toUpperCase()] || 'O';
101
+ return Object.assign(Object.assign({}, strukturdel), { Valvillkor: category });
102
+ });
103
+ const utbildningsbasUIDn = categorizedStrukturDelar.map(strukturdel => strukturdel.UtbildningsbasUID);
104
+ const courseEntities = yield (0, exports.fetchCourseBoxes)(utbildningsbasUIDn, ladokClient);
105
+ const mappedCourseEntities = courseEntities.map(entity => (0, mapStructureCourses_1.mapStructureCourses)(entity, language));
106
+ const utbildningsinstansUIDn = mappedCourseEntities.map(entity => entity.utbildningsinstansUid);
107
+ const courseInstanses = yield (0, exports.fetchCourseInstanses)(utbildningsinstansUIDn, ladokClient);
108
+ const mappedCourseInstanses = courseInstanses.map(instans => (0, mapCourseInstans_1.mapCourseInstans)(instans, language));
109
+ const categorizedCourseEntities = mappedCourseInstanses.map((entity, index) => {
110
+ var _a;
111
+ const kategori = (_a = categorizedStrukturDelar[index]) === null || _a === void 0 ? void 0 : _a.Valvillkor;
112
+ return Object.assign(Object.assign(Object.assign({}, mappedCourseEntities[index]), mappedCourseInstanses[index]), { Valvillkor: kategori });
113
+ });
114
+ return categorizedCourseEntities;
115
+ });
116
+ exports.fetchAndCategorizeStructure = fetchAndCategorizeStructure;
117
+ const fetchProgramStructure = (utbildningstillfalleUID, language, ladokClient) => __awaiter(void 0, void 0, void 0, function* () {
118
+ try {
119
+ const programDetails = yield ladokClient.utbildningstillfalle(utbildningstillfalleUID);
120
+ if (programDetails.type === 'error') {
121
+ throw new Error(`API error: ${programDetails.responseInfo.message}`);
122
+ }
123
+ const instansUid = (0, ladok_attributvarde_utils_1.extractString)(programDetails.data.Attributvarden, 'utbildningsinstans.uid');
124
+ console.log('this is:', instansUid);
125
+ const omfattning = programDetails.data.Tillfallesperioder.reduce((sum, period) => sum + period.Omfattningsvarde, 0);
126
+ const startperiod = (0, ladok_attributvarde_utils_1.extractGrunddata)(programDetails.data.Attributvarden, 'utbildning.attribut.startperiod');
127
+ const lengthInStudyYears = Math.ceil(Number(omfattning) / 60);
128
+ const categorizedCourseEntities = yield (0, exports.fetchAndCategorizeStructure)(utbildningstillfalleUID, language, ladokClient);
129
+ const periodData = yield ladokClient.period();
130
+ if (periodData.type === 'error') {
131
+ throw new Error(`API error: ${periodData.responseInfo.message}`);
132
+ }
133
+ const mainStudyYears = (0, studyYearUtil_1.generateStudyYearData)(categorizedCourseEntities, periodData.data.Period, startperiod === null || startperiod === void 0 ? void 0 : startperiod.code, lengthInStudyYears);
134
+ const specializationStrukturDelar = yield (0, exports.fetchStructureByInstansUid)(instansUid, ladokClient);
135
+ const utbildningsbasUIDn = specializationStrukturDelar.map(strukturdel => strukturdel.UtbildningsbasUID);
136
+ let specializatons = yield Promise.all(utbildningsbasUIDn.map((utbildningsbasUID) => __awaiter(void 0, void 0, void 0, function* () {
137
+ const utbildningsinstans = yield ladokClient.utbildningsinstans(utbildningsbasUID);
138
+ return utbildningsinstans.data;
139
+ })));
140
+ specializatons = specializatons.filter(specializaton => specializaton !== null);
141
+ const mappedSpecializatons = specializatons.map(entity => (0, mapCourseInstans_1.mapCourseInstans)(entity, language));
142
+ function getStudyYearForSpecializationFilter(startPeriod) {
143
+ const year = parseInt(startPeriod.substring(2));
144
+ if (startPeriod.startsWith('VT')) {
145
+ return `VT${year}`;
146
+ }
147
+ else if (startPeriod.startsWith('HT')) {
148
+ return `HT${year},VT${year + 1}`;
149
+ }
150
+ return '';
151
+ }
152
+ const tillfalleUids = yield Promise.all(mappedSpecializatons.map((specialization) => __awaiter(void 0, void 0, void 0, function* () {
153
+ var _a, _b;
154
+ const requestObject = {
155
+ kodEllerBenamning: specialization.kod,
156
+ startPeriod: getStudyYearForSpecializationFilter(startperiod === null || startperiod === void 0 ? void 0 : startperiod.code),
157
+ striktKod: 'true',
158
+ };
159
+ const tillfalle = yield ladokClient.sokUtbildningsTillfalle(requestObject);
160
+ return (_b = (_a = tillfalle === null || tillfalle === void 0 ? void 0 : tillfalle.items) === null || _a === void 0 ? void 0 : _a[0]) === null || _b === void 0 ? void 0 : _b.tillfalle_uid;
161
+ })));
162
+ const curriculums = [];
163
+ curriculums.push({
164
+ studyYears: mainStudyYears,
165
+ });
166
+ let specializatonsCategorizedCourseEntities = yield Promise.all(tillfalleUids.map((tillfalleUid) => __awaiter(void 0, void 0, void 0, function* () {
167
+ if (tillfalleUid) {
168
+ const studyYear = yield (0, exports.fetchAndCategorizeStructure)(tillfalleUid, language, ladokClient);
169
+ return studyYear;
170
+ }
171
+ else {
172
+ return [];
173
+ }
174
+ })));
175
+ mappedSpecializatons.forEach((specialization, index) => {
176
+ curriculums.push({
177
+ studyYears: (0, studyYearUtil_1.generateStudyYearData)(specializatonsCategorizedCourseEntities[index], periodData.data.Period, startperiod === null || startperiod === void 0 ? void 0 : startperiod.code, lengthInStudyYears),
178
+ programmeSpecialization: {
179
+ programmeSpecializationCode: specialization.kod,
180
+ title: specialization.benamning,
181
+ },
182
+ });
183
+ });
184
+ return curriculums;
185
+ }
186
+ catch (error) {
187
+ throw (0, exports.handleError)('Unexpected error during processing', error);
188
+ }
189
+ });
190
+ exports.fetchProgramStructure = fetchProgramStructure;
191
+ //# sourceMappingURL=programStrukturUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"programStrukturUtil.js","sourceRoot":"","sources":["../../src/utils/programStrukturUtil.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import { PeriodItem } from '@kth/ladok-mellanlager-client/dist/types/endpoints/period';
2
+ type CourseData = {
3
+ kod: string;
4
+ benamning: string;
5
+ Valvillkor: string;
6
+ omfattning: {
7
+ number: number;
8
+ formattedWithUnit: string;
9
+ };
10
+ startperiod?: {
11
+ code: string;
12
+ } | undefined;
13
+ Tillfallesperioder: {
14
+ SistaUndervisningsdatum: string;
15
+ }[];
16
+ uid: string;
17
+ utbildningsinstansUid: string;
18
+ };
19
+ type StudyYear = {
20
+ yearNumber: number;
21
+ courses: CourseData[];
22
+ };
23
+ export declare const getStudyYear: (periodEndDate: string, periodDetails: PeriodItem[], mainStartPeriod: string) => number;
24
+ export declare const generateStudyYearData: (coursesData: CourseData[], periodDetails: PeriodItem[], mainStartPeriod: string, lengthStudyYear: number) => StudyYear[];
25
+ export {};
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateStudyYearData = exports.getStudyYear = void 0;
4
+ const date_fns_1 = require("date-fns");
5
+ const getStudyYear = (periodEndDate, periodDetails, mainStartPeriod) => {
6
+ const mainStartYear = parseInt(mainStartPeriod.slice(2), 10);
7
+ const mainIsAutumn = mainStartPeriod.startsWith('HT');
8
+ const matchedPeriod = periodDetails.find(p => (0, date_fns_1.parseISO)(p.FromDatum) <= (0, date_fns_1.parseISO)(periodEndDate) &&
9
+ (0, date_fns_1.parseISO)(p.TomDatum) >= (0, date_fns_1.parseISO)(periodEndDate) &&
10
+ (p.Kod.includes('VT') || p.Kod.includes('HT')));
11
+ if (!matchedPeriod)
12
+ throw new Error('No matching period found');
13
+ const year = parseInt(matchedPeriod.Kod.slice(2), 10);
14
+ const isAutumn = matchedPeriod.Kod.startsWith('HT');
15
+ const startStudyYear = isAutumn ? year : year - 1;
16
+ const baseYear = mainIsAutumn ? mainStartYear : mainStartYear - 1;
17
+ return startStudyYear - baseYear + 1;
18
+ };
19
+ exports.getStudyYear = getStudyYear;
20
+ const generateStudyYearData = (coursesData, periodDetails, mainStartPeriod, lengthStudyYear) => {
21
+ const studyYears = {};
22
+ coursesData.forEach(course => {
23
+ const studyYearToPeriods = {};
24
+ course.Tillfallesperioder.forEach(period => {
25
+ const studyYear = (0, exports.getStudyYear)(period.SistaUndervisningsdatum, periodDetails, mainStartPeriod);
26
+ if (studyYear >= 1 && studyYear <= lengthStudyYear) {
27
+ if (!studyYearToPeriods[studyYear]) {
28
+ studyYearToPeriods[studyYear] = [];
29
+ }
30
+ studyYearToPeriods[studyYear].push(period);
31
+ }
32
+ });
33
+ // Assign each course to its respective study years with only relevant Tillfallesperioder
34
+ Object.entries(studyYearToPeriods).forEach(([yearStr, filteredPeriods]) => {
35
+ const year = Number(yearStr);
36
+ if (!studyYears[year])
37
+ studyYears[year] = [];
38
+ studyYears[year].push(Object.assign(Object.assign({}, course), { Tillfallesperioder: filteredPeriods }));
39
+ });
40
+ });
41
+ // Ensure all study years are present in the final array
42
+ return Array.from({ length: lengthStudyYear }, (_, i) => ({
43
+ yearNumber: i + 1,
44
+ courses: studyYears[i + 1] || [],
45
+ }));
46
+ };
47
+ exports.generateStudyYearData = generateStudyYearData;
48
+ //# sourceMappingURL=studyYearUtil.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"studyYearUtil.js","sourceRoot":"","sources":["../../src/utils/studyYearUtil.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kth/om-kursen-ladok-client",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "description": "Om kursen specific logic and mappings, uses both @kth/ladok-mellanlager-client and @kth/ladok-attributevarde-utils.",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -21,7 +21,9 @@
21
21
  "build:publish": "npm install --no-workspaces && npm run build"
22
22
  },
23
23
  "dependencies": {
24
- "@kth/ladok-attributvarde-utils": "0.0.10",
25
- "@kth/ladok-mellanlager-client": "0.1.0"
24
+ "@kth/ladok-attributvarde-utils": "0.0.11",
25
+ "@kth/ladok-mellanlager-client": "0.1.2",
26
+ "date-fns": "^4.1.0",
27
+ "showdown": "^2.1.0"
26
28
  }
27
29
  }