zdu-student-api 1.1.4 → 1.1.6

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/schedule.js CHANGED
@@ -1,40 +1,40 @@
1
1
  import iconv from 'iconv-lite';
2
2
  import fetch from 'cross-fetch';
3
- import { faculties } from './constants';
3
+ import { faculties } from './constants.js';
4
4
  /**
5
5
  * Клас розкладу
6
6
  * @category Schedule
7
7
  */
8
8
  export class Schedule {
9
9
  /**
10
- * Тип розкладу.
11
- *
12
- * Типи: group, teacher, room.
13
- */
10
+ * Тип розкладу.
11
+ *
12
+ * Типи: group, teacher, room.
13
+ */
14
14
  type = 'group';
15
15
  /**
16
- * Група
17
- */
16
+ * Група
17
+ */
18
18
  group = '';
19
19
  /**
20
- * Id групи
21
- */
20
+ * Id групи
21
+ */
22
22
  groupId;
23
23
  /**
24
- * Викладач
25
- */
24
+ * Викладач
25
+ */
26
26
  teacher = '';
27
27
  /**
28
- * Id викладача
29
- */
28
+ * Id викладача
29
+ */
30
30
  teacherId;
31
31
  /**
32
- * Аудиторія
33
- */
32
+ * Аудиторія
33
+ */
34
34
  room = '';
35
35
  /**
36
- * Id аудиторії
37
- */
36
+ * Id аудиторії
37
+ */
38
38
  roomId;
39
39
  /**
40
40
  * Факультет.
@@ -49,22 +49,22 @@ export class Schedule {
49
49
  */
50
50
  faculty = faculties.none;
51
51
  /**
52
- * Курс
53
- *
54
- * `0` - не вибрано
55
- */
52
+ * Курс
53
+ *
54
+ * `0` - не вибрано
55
+ */
56
56
  course = 0;
57
57
  /**
58
- * Початкова дата розкладу
59
- */
58
+ * Початкова дата розкладу
59
+ */
60
60
  beginDate = new Date();
61
61
  /**
62
- * Кінцева дата розкладу (за промовчанням +7 днів)
63
- */
62
+ * Кінцева дата розкладу (за промовчанням +7 днів)
63
+ */
64
64
  endDate = new Date(this.beginDate.getTime() + 7 * 24 * 60 * 60 * 1000);
65
65
  /**
66
- * Показувати пусті дні - false
67
- */
66
+ * Показувати пусті дні - false
67
+ */
68
68
  showEmpty = false;
69
69
  /**
70
70
  * false - сформований текст (за промовчанням)
@@ -84,69 +84,75 @@ export class Schedule {
84
84
  return this._rosText;
85
85
  }
86
86
  /**
87
- * Повертає список пар (розклад)
88
- *
89
- * @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
90
- *
91
- * @example
92
- * ```ts
93
- * import { Schedule, scheduleErrors } from "./index.ts";
94
- * const schedule = new Schedule();
95
- * schedule.group = '23Бд-СОінф123' // встановлюєм неправильну назву групи
96
- * schedule.type = 'group' // встановлєм тип пошуку по групі
97
- * schedule.rosText = true; // встановлюєм окремі стовпчики
98
- * schedule.allStreamComponents = true; // встановлюєм повний склад потоку
99
- * try {
100
- * const mySchedule = await schedule.getSchedule();
101
- * console.log("Розклад:", mySchedule);
102
- * } catch (err: any) {
103
- * // Отримуєм помилку тому що ми неправильно вказали назву групи
104
- * console.error(err.message); // Поверне: "{"error_message":"Об‘єкт - 23Бд-СОінф123 - Об‘єкт не знайдено ","errorcode":"-90"}"
105
- * console.error(scheduleErrors[JSON.parse(err.message).errorcode]); // Поверне: "Об`єкт, для якого потрібно показати розклад, не знайдено"
106
- * }
107
- * ```
108
- *
109
- * @remarks
110
- * У `err.message` може повертатися простий текст помилки,
111
- * або об’єкт у форматі:
112
- * ```JSON
113
- * {
114
- * "error_message": "Текст помилки",
115
- * "errorcode": "Код помилки"
116
- * }
117
- * ```
118
- *
119
- * Де:
120
- * - `error_message` - текст помилки відповідно до {@link scheduleErrors}
121
- * - `errorcode` - код помилки відповідно до {@link scheduleErrors}
122
- */
87
+ * Повертає список пар (розклад)
88
+ *
89
+ * @throws {Error} Якщо виникають проблеми з запитом або дані некоректні.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * import { Schedule, scheduleErrors } from "./index.ts";
94
+ * const schedule = new Schedule();
95
+ * schedule.group = '23Бд-СОінф123' // встановлюєм неправильну назву групи
96
+ * schedule.type = 'group' // встановлєм тип пошуку по групі
97
+ * schedule.rosText = true; // встановлюєм окремі стовпчики
98
+ * schedule.allStreamComponents = true; // встановлюєм повний склад потоку
99
+ * try {
100
+ * const mySchedule = await schedule.getSchedule();
101
+ * console.log("Розклад:", mySchedule);
102
+ * } catch (err: any) {
103
+ * // Отримуєм помилку тому що ми неправильно вказали назву групи
104
+ * console.error(err.message); // Поверне: "{"error_message":"Об‘єкт - 23Бд-СОінф123 - Об‘єкт не знайдено ","errorcode":"-90"}"
105
+ * console.error(scheduleErrors[JSON.parse(err.message).errorcode]); // Поверне: "Об`єкт, для якого потрібно показати розклад, не знайдено"
106
+ * }
107
+ * ```
108
+ *
109
+ * @remarks
110
+ * У `err.message` може повертатися простий текст помилки,
111
+ * або об’єкт у форматі:
112
+ * ```JSON
113
+ * {
114
+ * "error_message": "Текст помилки",
115
+ * "errorcode": "Код помилки"
116
+ * }
117
+ * ```
118
+ *
119
+ * Де:
120
+ * - `error_message` - текст помилки відповідно до {@link scheduleErrors}
121
+ * - `errorcode` - код помилки відповідно до {@link scheduleErrors}
122
+ */
123
123
  async getSchedule() {
124
124
  const beginDate = this.beginDate.toLocaleDateString('uk-UA', {
125
125
  day: '2-digit',
126
126
  month: '2-digit',
127
- year: 'numeric'
127
+ year: 'numeric',
128
128
  });
129
129
  const endDate = this.endDate.toLocaleDateString('uk-UA', {
130
130
  day: '2-digit',
131
131
  month: '2-digit',
132
- year: 'numeric'
132
+ year: 'numeric',
133
133
  });
134
- let id = (this.type === 'group' ? this.groupId : this.type === 'teacher' ? this.teacherId : this.roomId);
134
+ let id = this.type === 'group'
135
+ ? this.groupId
136
+ : this.type === 'teacher'
137
+ ? this.teacherId
138
+ : this.roomId;
135
139
  if (!id)
136
140
  id = '';
137
- let name = (this.type === 'group' ? this.group : this.type === 'teacher' ? this.teacher : this.room);
141
+ let name = this.type === 'group' ? this.group : this.type === 'teacher' ? this.teacher : this.room;
138
142
  name = this.encodeCP1251(name);
139
143
  const response = await fetch(`https://dekanat.zu.edu.ua/cgi-bin/timetable_export.cgi?req_type=rozklad&req_mode=${this.type}&OBJ_ID=${id}&OBJ_name=${name}&dep_name=&begin_date=${beginDate}&end_date=${endDate}&ros_text=${this.rosText ? 'separated' : 'united'}${this.showEmpty ? '' : '&show_empty=yes'}${this.allStreamComponents ? '' : '&all_stream_components=yes'}&req_format=json&coding_mode=UTF8&bs=%D1%F4%EE%F0%EC%F3%E2%E0%F2%E8+%E7%E0%EF%E8%F2`);
140
144
  if (!response.ok)
141
145
  throw new Error(`HTTP error ${response.status}: ${response.statusText}`);
142
146
  const data = await response.json();
143
147
  if (data.psrozklad_export.code !== '0') {
144
- throw new Error(JSON.stringify(data.psrozklad_export.error) || "Unknown error");
148
+ throw new Error(JSON.stringify(data.psrozklad_export.error) || 'Unknown error');
145
149
  }
146
150
  return data.psrozklad_export.roz_items;
147
151
  }
148
152
  encodeCP1251(str) {
149
153
  const buf = iconv.encode(str, 'win1251');
150
- return Array.from(buf).map(b => '%' + b.toString(16).toUpperCase().padStart(2, '0')).join('');
154
+ return Array.from(buf)
155
+ .map((b) => '%' + b.toString(16).toUpperCase().padStart(2, '0'))
156
+ .join('');
151
157
  }
152
158
  }
package/dist/types.d.ts CHANGED
@@ -59,10 +59,10 @@ export interface Room {
59
59
  block: string;
60
60
  }
61
61
  /**
62
- * Типи для отримання розкладу.
63
- * @category Schedule
64
- *
65
- */
62
+ * Типи для отримання розкладу.
63
+ * @category Schedule
64
+ *
65
+ */
66
66
  export type ScheduleTypes = 'group' | 'teacher' | 'room';
67
67
  /**
68
68
  * Базова інформація про заняття
@@ -139,22 +139,22 @@ export interface AudienceRoom {
139
139
  comment: string;
140
140
  }
141
141
  /**
142
- * Блоки
143
- * @category Audience
144
- */
142
+ * Блоки
143
+ * @category Audience
144
+ */
145
145
  export type Blocks = '' | '№1' | '№2' | '№3' | '№4' | '№5' | 'гуртож №1' | 'гуртож №2' | 'гуртож №3' | 'гуртож №4' | 'гуртож №5';
146
146
  /**
147
- * Тип аудиторії
148
- * @category Audience
149
- */
147
+ * Тип аудиторії
148
+ * @category Audience
149
+ */
150
150
  export interface TypeAudience {
151
151
  full: string;
152
152
  short: string;
153
153
  }
154
154
  /**
155
- * Доп. обладнання
156
- * @category Audience
157
- */
155
+ * Доп. обладнання
156
+ * @category Audience
157
+ */
158
158
  export interface Dop {
159
159
  name: string;
160
160
  }
package/dist/types.js CHANGED
@@ -1,2 +1 @@
1
- ;
2
1
  export {};
@@ -1,4 +1,4 @@
1
- import { Dop } from "../types";
1
+ import { Dop } from "../types.js";
2
2
  /**
3
3
  * Повертає список доп. обладнання аудиторій
4
4
  * @category Utility
@@ -1,4 +1,4 @@
1
- import { Group } from "../types";
1
+ import { Group } from "../types.js";
2
2
  /**
3
3
  * Повертає список груп
4
4
  * @category Utility
@@ -1,4 +1,4 @@
1
- import { Room } from "../types";
1
+ import { Room } from "../types.js";
2
2
  /**
3
3
  * Повертає список аудиторій
4
4
  * @category Utility
@@ -1,4 +1,4 @@
1
- import { Teacher } from "../types";
1
+ import { Teacher } from "../types.js";
2
2
  /**
3
3
  * Повертає список викладачів
4
4
  * @category Utility
@@ -1,4 +1,4 @@
1
- import { TypeAudience } from "../types";
1
+ import { TypeAudience } from "../types.js";
2
2
  /**
3
3
  * Повертає список типів аудиторій
4
4
  * @category Utility
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zdu-student-api",
3
- "version": "1.1.4",
3
+ "version": "1.1.6",
4
4
  "description": "API client for ZDU student services",
5
5
  "author": "Nicita3 <ni596157@gmail.com> (https://github.com/Nicita-3)",
6
6
  "main": "dist/index.js",
@@ -23,6 +23,7 @@
23
23
  "homepage": "https://nicita-3.github.io/zdu-student-api",
24
24
  "devDependencies": {
25
25
  "@types/node": "^24.10.1",
26
+ "prettier": "^3.7.4",
26
27
  "ts-node": "^10.9.2",
27
28
  "typedoc": "^0.28.14",
28
29
  "typescript": "^5.9.3"