parse-comcigan 0.2.0 → 1.0.0

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/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # parse-comcigan
2
2
 
3
3
  컴시간을 파싱하는 라이브러리입니다.
4
- 안드로이드 컴시간알리미 앱에서 파싱합니다.
5
4
  아직 학생 시간표밖에 지원하지 않습니다.
6
5
 
7
6
  ## 경고
@@ -13,134 +12,126 @@
13
12
 
14
13
  ```npm install parse-comcigan```
15
14
 
16
- ## 개발
15
+ ## 사용법
17
16
 
18
- ### Comcigan
17
+ ## 1. 학교 검색하기
19
18
 
20
- Comcigan 클래스의 인스턴스를 생성하여 사용합니다.
21
- 인스턴스를 생성할 때 옵션을 지정할 수 있습니다.
19
+ 학교를 검색하려면 먼저 `Comcigan` 클래스를 가져오신 후, `search` 메서드를 호출하시면 됩니다.
22
20
 
23
- |옵션|타입|기본값|설명|
24
- |------|------|------|-----------|
25
- |cacheMs|number|0|캐시될 시간(밀리초)입니다. 0일때 캐시를 비활성화합니다.|
26
- |doNotThrow|boolean|true|[Axios](https://axios-http.com/)에서 validateStatus를 항상 true로 반환할 지에 대한 여부입니다.|
27
- |debug|(msg: string) => any|undefined|디버그 메시지를 처리하는 콜백입니다. 이 콜백은 주로 컴시간과 통신할 때 호출됩니다.|
28
- |appVersion|string|2.11|컴시간알리미 안드로이드 앱의 버전입니다.|
21
+ 반환:
22
+ |이름|타입|설명|
23
+ |-|-|-|
24
+ |code|number|학교 코드|
25
+ |region|string|지역|
26
+ |name|string|이름|
27
+ 의 배열
28
+
29
+ ### 예시 코드
29
30
 
30
31
  ```typescript
32
+ // Comcigan 가져오기
31
33
  import Comcigan from 'parse-comcigan';
32
34
 
33
- const comci = new Comcigan({
34
- "cacheMs": 10000, // 10초동안 캐시됩니다.
35
- "doNotThrow": false, // false일때, status가 4 또는 5로 시작하면 throw 됩니다.
36
- "debug": (msg) => console.log(msg) // 모듈에서 디버그 메시지를 보내면 콘솔에 출력합니다.
37
- });
38
- ```
35
+ // 학교 검색
36
+ const schools = await Comcigan.search("서울");
39
37
 
40
- ---
38
+ for (const school of schools) {
39
+ console.log();
40
+ console.log(`코드: ${school.code}`);
41
+ console.log(`이름: ${school.name}`);
42
+ console.log(`지역: ${school.region}`);
43
+ }
44
+ ```
41
45
 
42
- ### SearchSchool
46
+ ## 2. 컴시간 인스턴스 생성하기
43
47
 
44
- 학교를 검색합니다.
45
- 마지막 "없으면 추가 검색 하세요." 문구는 자동으로 빠져서 나옵니다.
46
- 당연하지만 컴시간을 사용하는 학교만 검색됩니다.
48
+ 컴시간 인스턴스를 생성해 학교의 여러 정보를 가져올 수 있습니다.
49
+ `new Comcigan(code)`로 컴시간 인스턴스를 생성할 수 있습니다.
47
50
 
48
- |파라메터|타입|필수|설명|
49
- |------|------|------|-----------|
50
- |query|string|Yes|검색어|
51
+ ### 예시 코드
51
52
 
52
53
  ```typescript
53
- comci.SearchSchool("서울").then(data => {
54
- console.log(data);
55
- });
56
- ```
57
-
58
- 다음을 Promise 형태로 리턴합니다.
54
+ import Comcigan from 'parse-comcigan';
55
+ import readline from 'readline';
59
56
 
60
- |키|타입|설명|
61
- |-----|----|-----|
62
- |region|string|학교의 지역|
63
- |name|string|학교 이름|
64
- |code|number|학교 코드|
57
+ const rl = readline.createInterface({
58
+ "input": process.stdin,
59
+ "output": process.stdout
60
+ });
65
61
 
66
- ---
62
+ (async () => {
63
+ // 검색어 입력
64
+ const answer = await new Promise<string>(r => rl.question("학교 이름을 입력해주세요: ", r));
65
+ rl.close();
66
+
67
+ // 학교 검색하기
68
+ const school = (await Comcigan.search(answer))[0];
69
+
70
+ console.log(`검색된 학교:`);
71
+ console.log(`- 이름: ${school.name}`);
72
+ console.log(`- 지역: ${school.region}`);
73
+ console.log();
74
+
75
+ // 컴시간 인스턴스 생성
76
+ const comci = new Comcigan(school.code);
77
+
78
+ // 시간표 조회
79
+ console.log(await comci.timetable({
80
+ "grade": 1,
81
+ "classNum": 6
82
+ }));
83
+ })();
84
+ ```
67
85
 
68
- ### GetTimetable
86
+ ## 3. 시간표 가져오기
69
87
 
70
- 시간표를 가져옵니다.
88
+ 위에서 생성한 컴시간 인스턴스로 학교의 시간표를 조회할 수 있습니다.
71
89
 
72
- |파라메터|타입|필수|설명|
73
- |------|------|------|-----------|
74
- |options|[GetTimetableOptions](#gettimetableoptions)|Yes|옵션|
90
+ ### 예시 코드
75
91
 
76
92
  ```typescript
77
- comci.GetTimetable({
78
- "schoolCode": 96211,
79
- "criteria": "period",
80
- "grade": 3,
81
- "classN": 5,
82
- "without8th": false
83
- }).then(data => {
84
- console.log(data.timetable[0][7]); // [요일][교시] 월요일 8교시
85
- });
86
- comci.GetTimetable({
87
- "schoolCode": 96211,
88
- "criteria": "weekday",
89
- "grade": 3,
90
- "classN": 5,
91
- "without8th": true
92
- }).then(data => {
93
- console.log(data.timetable[4][0]); // [교시][요일] 월요일 5교시
94
- console.log(data.timetable[7]); // undefined
95
- });
96
- ```
97
-
98
- 다음을 Promise 형태로 리턴합니다.
93
+ import Comcigan from 'parse-comcigan';
99
94
 
100
- |키|타입|설명|
101
- |-----|----|-----|
102
- |latestVersion|string|컴시간 앱 최신버전|
103
- |changed|string|수정된 날짜 시간|
104
- |timetable|[ComciganTimetableObject](#comcigantimetableobject)[][]|시간표|
95
+ (async () => {
96
+ // 컴시간 인스턴스 생성
97
+ const comci = new Comcigan(24966);
105
98
 
106
- ---
99
+ // 시간표 조회
100
+ console.log(await comci.timetable({
101
+ "grade": 1,
102
+ "classNum": 6
103
+ }));
104
+ })();
105
+ ```
107
106
 
108
- ### GetClassList
107
+ ## 4. 학교 정보 가져오기
109
108
 
110
- 학급 리스트를 가져옵니다.
109
+ 위에서 생성한 컴시간 인스턴스로 학교의 여러 정보를 가져올 수 있습니다.
111
110
 
112
- |파라메터|타입|필수|설명|
113
- |------|------|------|-----------|
114
- |schoolCode|number|Yes|학교 코드|
111
+ ### 예시 코드
115
112
 
116
113
  ```typescript
117
- comci.GetClassList(96211).then(data => {
118
- console.log(data[0]); // 1-1
119
- });
120
- ```
114
+ import Comcigan from 'parse-comcigan';
121
115
 
122
- 리턴 타입: ```Promise<string>```
116
+ (async () => {
117
+ // 컴시간 인스턴스 생성
118
+ const comci = new Comcigan(24966);
123
119
 
124
- ## 타입
120
+ // 학교 정보 조회
121
+ console.log(await comci.schoolInfo());
122
+ })();
123
+ ```
125
124
 
126
- ### ComciganTimetableObject
125
+ ## 업데이트 로그
127
126
 
128
- |키|타입|설명|필수|
129
- |-----|----|-----|-----|
130
- |subject|string|과목|Yes|
131
- |changed|string|교사|Yes|
132
- |original|여기서 original만 빠진 오브젝트|원래 시간표|No|
127
+ ### 1.0.0
133
128
 
134
- ### GetTimetableOptions
129
+ - 갈아엎기
135
130
 
136
- |파라메터|타입|필수|설명|
137
- |------|------|------|-----------|
138
- |schoolCode|number|Yes|학교 코드|
139
- |criteria|"weekday" or "period"|Yes|리스트 반환을 어떻게 할지 여부입니다.|
140
- |grade|number|Yes|학년|
141
- |classN|number|Yes|반|
131
+ ### 0.3.0
142
132
 
143
- ## 업데이트 로그
133
+ - 다음 주 시간표 보기
134
+ - 디버그 메시지 수정
144
135
 
145
136
  ### 0.2.0
146
137
 
package/bun.lock ADDED
@@ -0,0 +1,175 @@
1
+ {
2
+ "lockfileVersion": 1,
3
+ "configVersion": 0,
4
+ "workspaces": {
5
+ "": {
6
+ "name": "parse-comcigan",
7
+ "dependencies": {
8
+ "axios": "^1.17.0",
9
+ "dayjs": "^1.11.21",
10
+ "iconv-lite": "^0.6.3",
11
+ },
12
+ "devDependencies": {
13
+ "@types/node": "^22.19.20",
14
+ "nodemon": "^3.1.14",
15
+ "ts-node": "^10.9.2",
16
+ "typescript": "^5.9.3",
17
+ },
18
+ },
19
+ },
20
+ "packages": {
21
+ "@cspotcode/source-map-support": ["@cspotcode/source-map-support@0.8.1", "", { "dependencies": { "@jridgewell/trace-mapping": "0.3.9" } }, "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw=="],
22
+
23
+ "@jridgewell/resolve-uri": ["@jridgewell/resolve-uri@3.1.2", "", {}, "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw=="],
24
+
25
+ "@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.0", "", {}, "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ=="],
26
+
27
+ "@jridgewell/trace-mapping": ["@jridgewell/trace-mapping@0.3.9", "", { "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" } }, "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ=="],
28
+
29
+ "@tsconfig/node10": ["@tsconfig/node10@1.0.11", "", {}, "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw=="],
30
+
31
+ "@tsconfig/node12": ["@tsconfig/node12@1.0.11", "", {}, "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag=="],
32
+
33
+ "@tsconfig/node14": ["@tsconfig/node14@1.0.3", "", {}, "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow=="],
34
+
35
+ "@tsconfig/node16": ["@tsconfig/node16@1.0.4", "", {}, "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA=="],
36
+
37
+ "@types/node": ["@types/node@22.19.20", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-6tELRwSDYWW9EdZhbeZmYGZ1/7Djkt+Ah3/ScEYT9cDord7UJzasR/4D3VONg9tQI5CDp+/CZC1AXj2pCFOvpw=="],
38
+
39
+ "acorn": ["acorn@8.14.1", "", { "bin": "bin/acorn" }, "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg=="],
40
+
41
+ "acorn-walk": ["acorn-walk@8.3.4", "", { "dependencies": { "acorn": "^8.11.0" } }, "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g=="],
42
+
43
+ "agent-base": ["agent-base@6.0.2", "", { "dependencies": { "debug": "4" } }, "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ=="],
44
+
45
+ "anymatch": ["anymatch@3.1.3", "", { "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" } }, "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw=="],
46
+
47
+ "arg": ["arg@4.1.3", "", {}, "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA=="],
48
+
49
+ "asynckit": ["asynckit@0.4.0", "", {}, "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="],
50
+
51
+ "axios": ["axios@1.17.0", "", { "dependencies": { "follow-redirects": "^1.16.0", "form-data": "^4.0.5", "https-proxy-agent": "^5.0.1", "proxy-from-env": "^2.1.0" } }, "sha512-J8SwNxprqqpbfenehxWYXE7CW+wM1BB4w3+N+g+/Wx40xM4rsLrfPmHHxSWIxJLYDgSY/HqlFPIYb2/S3rxafw=="],
52
+
53
+ "balanced-match": ["balanced-match@4.0.4", "", {}, "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA=="],
54
+
55
+ "binary-extensions": ["binary-extensions@2.3.0", "", {}, "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw=="],
56
+
57
+ "brace-expansion": ["brace-expansion@5.0.6", "", { "dependencies": { "balanced-match": "^4.0.2" } }, "sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g=="],
58
+
59
+ "braces": ["braces@3.0.3", "", { "dependencies": { "fill-range": "^7.1.1" } }, "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA=="],
60
+
61
+ "call-bind-apply-helpers": ["call-bind-apply-helpers@1.0.2", "", { "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2" } }, "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ=="],
62
+
63
+ "chokidar": ["chokidar@3.6.0", "", { "dependencies": { "anymatch": "~3.1.2", "braces": "~3.0.2", "glob-parent": "~5.1.2", "is-binary-path": "~2.1.0", "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" }, "optionalDependencies": { "fsevents": "~2.3.2" } }, "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw=="],
64
+
65
+ "combined-stream": ["combined-stream@1.0.8", "", { "dependencies": { "delayed-stream": "~1.0.0" } }, "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg=="],
66
+
67
+ "create-require": ["create-require@1.1.1", "", {}, "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ=="],
68
+
69
+ "dayjs": ["dayjs@1.11.21", "", {}, "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="],
70
+
71
+ "debug": ["debug@4.4.0", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA=="],
72
+
73
+ "delayed-stream": ["delayed-stream@1.0.0", "", {}, "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ=="],
74
+
75
+ "diff": ["diff@4.0.2", "", {}, "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A=="],
76
+
77
+ "dunder-proto": ["dunder-proto@1.0.1", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" } }, "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A=="],
78
+
79
+ "es-define-property": ["es-define-property@1.0.1", "", {}, "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g=="],
80
+
81
+ "es-errors": ["es-errors@1.3.0", "", {}, "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw=="],
82
+
83
+ "es-object-atoms": ["es-object-atoms@1.1.1", "", { "dependencies": { "es-errors": "^1.3.0" } }, "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA=="],
84
+
85
+ "es-set-tostringtag": ["es-set-tostringtag@2.1.0", "", { "dependencies": { "es-errors": "^1.3.0", "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", "hasown": "^2.0.2" } }, "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA=="],
86
+
87
+ "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="],
88
+
89
+ "follow-redirects": ["follow-redirects@1.16.0", "", {}, "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw=="],
90
+
91
+ "form-data": ["form-data@4.0.5", "", { "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", "hasown": "^2.0.2", "mime-types": "^2.1.12" } }, "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w=="],
92
+
93
+ "fsevents": ["fsevents@2.3.3", "", { "os": "darwin" }, "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw=="],
94
+
95
+ "function-bind": ["function-bind@1.1.2", "", {}, "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA=="],
96
+
97
+ "get-intrinsic": ["get-intrinsic@1.3.0", "", { "dependencies": { "call-bind-apply-helpers": "^1.0.2", "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", "get-proto": "^1.0.1", "gopd": "^1.2.0", "has-symbols": "^1.1.0", "hasown": "^2.0.2", "math-intrinsics": "^1.1.0" } }, "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ=="],
98
+
99
+ "get-proto": ["get-proto@1.0.1", "", { "dependencies": { "dunder-proto": "^1.0.1", "es-object-atoms": "^1.0.0" } }, "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g=="],
100
+
101
+ "glob-parent": ["glob-parent@5.1.2", "", { "dependencies": { "is-glob": "^4.0.1" } }, "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow=="],
102
+
103
+ "gopd": ["gopd@1.2.0", "", {}, "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="],
104
+
105
+ "has-flag": ["has-flag@3.0.0", "", {}, "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw=="],
106
+
107
+ "has-symbols": ["has-symbols@1.1.0", "", {}, "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ=="],
108
+
109
+ "has-tostringtag": ["has-tostringtag@1.0.2", "", { "dependencies": { "has-symbols": "^1.0.3" } }, "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw=="],
110
+
111
+ "hasown": ["hasown@2.0.2", "", { "dependencies": { "function-bind": "^1.1.2" } }, "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ=="],
112
+
113
+ "https-proxy-agent": ["https-proxy-agent@5.0.1", "", { "dependencies": { "agent-base": "6", "debug": "4" } }, "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA=="],
114
+
115
+ "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="],
116
+
117
+ "ignore-by-default": ["ignore-by-default@1.0.1", "", {}, "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="],
118
+
119
+ "is-binary-path": ["is-binary-path@2.1.0", "", { "dependencies": { "binary-extensions": "^2.0.0" } }, "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw=="],
120
+
121
+ "is-extglob": ["is-extglob@2.1.1", "", {}, "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ=="],
122
+
123
+ "is-glob": ["is-glob@4.0.3", "", { "dependencies": { "is-extglob": "^2.1.1" } }, "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg=="],
124
+
125
+ "is-number": ["is-number@7.0.0", "", {}, "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng=="],
126
+
127
+ "make-error": ["make-error@1.3.6", "", {}, "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw=="],
128
+
129
+ "math-intrinsics": ["math-intrinsics@1.1.0", "", {}, "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g=="],
130
+
131
+ "mime-db": ["mime-db@1.52.0", "", {}, "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg=="],
132
+
133
+ "mime-types": ["mime-types@2.1.35", "", { "dependencies": { "mime-db": "1.52.0" } }, "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw=="],
134
+
135
+ "minimatch": ["minimatch@10.2.5", "", { "dependencies": { "brace-expansion": "^5.0.5" } }, "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg=="],
136
+
137
+ "ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
138
+
139
+ "nodemon": ["nodemon@3.1.14", "", { "dependencies": { "chokidar": "^3.5.2", "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^10.2.1", "pstree.remy": "^1.1.8", "semver": "^7.5.3", "simple-update-notifier": "^2.0.0", "supports-color": "^5.5.0", "touch": "^3.1.0", "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" } }, "sha512-jakjZi93UtB3jHMWsXL68FXSAosbLfY0In5gtKq3niLSkrWznrVBzXFNOEMJUfc9+Ke7SHWoAZsiMkNP3vq6Jw=="],
140
+
141
+ "normalize-path": ["normalize-path@3.0.0", "", {}, "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA=="],
142
+
143
+ "picomatch": ["picomatch@2.3.1", "", {}, "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA=="],
144
+
145
+ "proxy-from-env": ["proxy-from-env@2.1.0", "", {}, "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA=="],
146
+
147
+ "pstree.remy": ["pstree.remy@1.1.8", "", {}, "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="],
148
+
149
+ "readdirp": ["readdirp@3.6.0", "", { "dependencies": { "picomatch": "^2.2.1" } }, "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA=="],
150
+
151
+ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
152
+
153
+ "semver": ["semver@7.7.1", "", { "bin": "bin/semver.js" }, "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA=="],
154
+
155
+ "simple-update-notifier": ["simple-update-notifier@2.0.0", "", { "dependencies": { "semver": "^7.5.3" } }, "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w=="],
156
+
157
+ "supports-color": ["supports-color@5.5.0", "", { "dependencies": { "has-flag": "^3.0.0" } }, "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow=="],
158
+
159
+ "to-regex-range": ["to-regex-range@5.0.1", "", { "dependencies": { "is-number": "^7.0.0" } }, "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ=="],
160
+
161
+ "touch": ["touch@3.1.1", "", { "bin": { "nodetouch": "bin/nodetouch.js" } }, "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA=="],
162
+
163
+ "ts-node": ["ts-node@10.9.2", "", { "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", "@tsconfig/node12": "^1.0.7", "@tsconfig/node14": "^1.0.0", "@tsconfig/node16": "^1.0.2", "acorn": "^8.4.1", "acorn-walk": "^8.1.1", "arg": "^4.1.0", "create-require": "^1.1.0", "diff": "^4.0.1", "make-error": "^1.1.1", "v8-compile-cache-lib": "^3.0.1", "yn": "3.1.1" }, "peerDependencies": { "@swc/core": ">=1.2.50", "@swc/wasm": ">=1.2.50", "@types/node": "*", "typescript": ">=2.7" }, "optionalPeers": ["@swc/core", "@swc/wasm"], "bin": { "ts-node": "dist/bin.js", "ts-node-cwd": "dist/bin-cwd.js", "ts-node-esm": "dist/bin-esm.js", "ts-node-script": "dist/bin-script.js", "ts-node-transpile-only": "dist/bin-transpile.js", "ts-script": "dist/bin-script-deprecated.js" } }, "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ=="],
164
+
165
+ "typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
166
+
167
+ "undefsafe": ["undefsafe@2.0.5", "", {}, "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="],
168
+
169
+ "undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
170
+
171
+ "v8-compile-cache-lib": ["v8-compile-cache-lib@3.0.1", "", {}, "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg=="],
172
+
173
+ "yn": ["yn@3.1.1", "", {}, "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q=="],
174
+ }
175
+ }
@@ -0,0 +1,4 @@
1
+ export default class ComciganError extends Error {
2
+ message: string;
3
+ constructor(message: string);
4
+ }
package/dist/error.js ADDED
@@ -0,0 +1,7 @@
1
+ export default class ComciganError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.message = message;
5
+ }
6
+ }
7
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../src/error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,KAAK;IAC5C,YACW,OAAe;QACtB,KAAK,CAAC,OAAO,CAAC,CAAC;QADR,YAAO,GAAP,OAAO,CAAQ;IACN,CAAC;CAGxB"}
package/dist/index.d.ts CHANGED
@@ -1,138 +1,43 @@
1
- export type GetTimetableOptions = {
2
- /**
3
- * 컴시간 학교 코드입니다.
4
- */
5
- "schoolCode": number;
6
- /**
7
- * 구분을 어떻게 할지 여부입니다.
8
- *
9
- * - weekday로 설정하면 시간표[교시][요일]로 과목과 선생님을 불러옵니다.
10
- * - period로 설정하면 시간표[요일][교시]로 과목과 선생님을 불러옵니다.
11
- */
12
- "criteria": "weekday" | "period";
13
- /**
14
- * 학년입니다.
15
- */
16
- "grade": number;
17
- /**
18
- * 반입니다.
19
- */
20
- "classN": number;
21
- /**
22
- * 8교시를 빼고 리턴할지 여부입니다.
23
- */
24
- "without8th"?: boolean;
25
- };
26
- export interface ComciganInitializeType {
27
- /**
28
- * 이 기간동안 컴시간과 통신한 데이터가 캐시됩니다.
29
- *
30
- * 기본값은 0ms이며, 0ms일때는 캐시를 하지 않습니다.
31
- */
32
- cacheMs?: number;
33
- /**
34
- * axios에서 요청을 보내고 status가 오류 status일 때 throw할 지 여부입니다.
35
- * 만약 false일 때 요청에 status가 오류 status면 그 타입에서 빈 값을 리턴합니다.
36
- *
37
- * 기본값은 false입니다.
38
- */
39
- doNotThrow?: boolean;
40
- /**
41
- * 디버그 메시지를 파라메터로 받습니다.
42
- *
43
- * 기본값은 없습니다.
44
- */
45
- debug?: (msg: string) => any;
46
- /**
47
- * 컴시간알리미의 앱 버전입니다.
48
- *
49
- * 기본값은 2.11입니다.
50
- */
51
- appVersion?: string;
52
- }
53
- export type ComciganSearched = {
54
- /**
55
- * 학교의 지역입니다.
56
- */
57
- region: string;
58
- /**
59
- * 학교의 이름입니다.
60
- */
61
- name: string;
62
- /**
63
- * 학교의 코드입니다.
64
- */
65
- code: number;
66
- };
67
- export type ComciganTimetableObject = {
68
- /**
69
- * 과목입니다.
70
- */
71
- subject: string;
72
- /**
73
- * 교사 성명입니다.
74
- */
75
- teacher: string;
76
- /**
77
- * 만약 변경되었을때 이 값이 주어집니다.
78
- */
79
- original?: {
80
- /**
81
- * 과목입니다.
82
- */
83
- subject: string;
84
- /**
85
- * 교사 성명입니다.
86
- */
87
- teacher: string;
88
- };
89
- };
90
- export type ComciganTimetable = {
91
- /**
92
- * 컴시간알리미 앱의 최신 버전입니다.
93
- */
94
- latestVersion: string;
95
- /**
96
- * 수정일입니다.
97
- */
98
- changed: string;
99
- /**
100
- * 시간표입니다.
101
- */
102
- timetable: ComciganTimetableObject[][];
103
- };
1
+ import { ComciganTimetable } from "./types/index.js";
104
2
  export default class Comcigan {
105
- private _options;
106
- private _cache;
107
- private mSb;
108
- private mTh;
109
- private unusable;
110
- private request;
111
- private EUC_KR_encodeURI;
112
- /**
113
- * 파서를 초기화 합니다.
114
- * @param options 파서의 옵션입니다.
115
- */
116
- constructor(options?: ComciganInitializeType);
3
+ code: number;
4
+ constructor(code: number);
5
+ private _data;
117
6
  /**
118
7
  * 학교를 검색합니다.
119
- * 마지막 "없으면 추가 검색 하세요" 문구는 빠져서 나옵니다.
8
+ *
120
9
  * @param query 검색어
121
- * @returns 검색된 학교들
10
+ * @returns 검색 결과
122
11
  */
123
- SearchSchool(query: string): Promise<ComciganSearched[]>;
12
+ static search(query: string): Promise<{
13
+ code: number;
14
+ region: string;
15
+ name: string;
16
+ }[]>;
17
+ private _getdata;
124
18
  /**
125
- * 시간표를 가져옵니다.
19
+ * 학교의 정보를 가져옵니다.
126
20
  *
127
- * @param schoolCode
128
- * @param criteria
129
- */
130
- GetTimetable(options: GetTimetableOptions): Promise<ComciganTimetable | undefined>;
131
- /**
132
- * 학급 목록을 가져옵니다.
21
+ * @returns 학교의 정보
22
+ */
23
+ schoolInfo(): Promise<{
24
+ changedAt: Date;
25
+ classes: number[];
26
+ times: {
27
+ number: number;
28
+ start: `${number}:${number}`;
29
+ }[];
30
+ code: number;
31
+ }>;
32
+ /**
33
+ * 시간표를 조회합니다.
133
34
  *
134
- * @param schoolCode 학교 코드입니다.
135
- * @returns (학년)-(반) 문자열이 모인 배열
136
- */
137
- GetClassList(schoolCode: number): Promise<string[]>;
35
+ * @param options 시간표 옵션
36
+ * @returns 시간표
37
+ */
38
+ timetable(options: {
39
+ "grade": number;
40
+ "classNum": number;
41
+ "week"?: number;
42
+ }): Promise<ComciganTimetable>;
138
43
  }