dongnelibrary 0.3.9 → 0.3.11
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/.claude/settings.local.json +9 -0
- package/.playwright-mcp/console-2026-03-07T15-37-14-935Z.log +3 -0
- package/.playwright-mcp/console-2026-03-07T16-05-56-891Z.log +1 -0
- package/.playwright-mcp/console-2026-03-07T16-21-56-709Z.log +1 -0
- package/.playwright-mcp/console-2026-03-07T16-24-32-498Z.log +1 -0
- package/.playwright-mcp/console-2026-03-11T12-40-15-835Z.log +1 -0
- package/API.md +68 -15
- package/README.md +11 -0
- package/dist/dongnelibrary.d.ts +29 -0
- package/dist/dongnelibrary.d.ts.map +1 -1
- package/dist/dongnelibrary.js +122 -13
- package/dist/dongnelibrary.js.map +1 -1
- package/dist/localLibraryModule/ice.d.ts +6 -0
- package/dist/localLibraryModule/ice.d.ts.map +1 -0
- package/dist/localLibraryModule/ice.js +92 -0
- package/dist/localLibraryModule/ice.js.map +1 -0
- package/dist/localLibraryModule/jeju.d.ts +6 -0
- package/dist/localLibraryModule/jeju.d.ts.map +1 -0
- package/dist/localLibraryModule/jeju.js +77 -0
- package/dist/localLibraryModule/jeju.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
[ 1255ms] [ERROR] Failed to load resource: net::ERR_NAME_NOT_RESOLVED @ https://cdn.polyfill.io/v2/polyfill.min.js?features=requestAnimationFrame,Element.prototype.classList,URL:0
|
|
2
|
+
[ 1475ms] Uncaught ReferenceError: proj4 is not defined
|
|
3
|
+
at <anonymous> (https://map.ngii.go.kr/openapi/wmts_ngiiMap_v6.4.3.js?apikey=956A18AC72966E2A0CABF30959636811:3:0)
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[ 1343ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[ 545ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[ 541ms] [WARNING] cdn.tailwindcss.com should not be used in production. To use Tailwind CSS in production, install it as a PostCSS plugin or use the Tailwind CLI: https://tailwindcss.com/docs/installation @ https://cdn.tailwindcss.com/:63
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[ 8436ms] [ERROR] Failed to load resource: the server responded with a status of 404 (Not Found) @ https://lib.ice.go.kr/favicon.ico:0
|
package/API.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# DongneLibrary API Reference
|
|
2
2
|
|
|
3
|
-
A JavaScript/TypeScript library for checking book availability across
|
|
3
|
+
A JavaScript/TypeScript library for checking book availability across 180+ Korean public library branches.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
@@ -192,7 +192,7 @@ Returns an array of all supported library branch names.
|
|
|
192
192
|
|
|
193
193
|
#### Returns
|
|
194
194
|
|
|
195
|
-
`string[]` - Array of library names (
|
|
195
|
+
`string[]` - Array of library names (180+ branches)
|
|
196
196
|
|
|
197
197
|
#### Example
|
|
198
198
|
|
|
@@ -226,6 +226,47 @@ console.log(urls);
|
|
|
226
226
|
|
|
227
227
|
---
|
|
228
228
|
|
|
229
|
+
### getAllModuleNames()
|
|
230
|
+
|
|
231
|
+
Returns an array of all library system module names.
|
|
232
|
+
|
|
233
|
+
#### Returns
|
|
234
|
+
|
|
235
|
+
`string[]` - Array of module names
|
|
236
|
+
|
|
237
|
+
#### Example
|
|
238
|
+
|
|
239
|
+
```javascript
|
|
240
|
+
const modules = dongnelibrary.getAllModuleNames();
|
|
241
|
+
console.log(modules);
|
|
242
|
+
// ['경기교육통합도서관', '군포시도서관', '성남시도서관', ...]
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
---
|
|
246
|
+
|
|
247
|
+
### isModuleName(name)
|
|
248
|
+
|
|
249
|
+
Checks if a given name is a library system module name.
|
|
250
|
+
|
|
251
|
+
#### Parameters
|
|
252
|
+
|
|
253
|
+
| Parameter | Type | Required | Description |
|
|
254
|
+
| --------- | -------- | -------- | ------------- |
|
|
255
|
+
| `name` | `string` | Yes | Name to check |
|
|
256
|
+
|
|
257
|
+
#### Returns
|
|
258
|
+
|
|
259
|
+
`boolean` - `true` if the name is a module name
|
|
260
|
+
|
|
261
|
+
#### Example
|
|
262
|
+
|
|
263
|
+
```javascript
|
|
264
|
+
dongnelibrary.isModuleName("성남시도서관"); // true
|
|
265
|
+
dongnelibrary.isModuleName("판교도서관"); // false (branch name, not module name)
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
---
|
|
269
|
+
|
|
229
270
|
## Types
|
|
230
271
|
|
|
231
272
|
### SearchResult
|
|
@@ -283,18 +324,20 @@ type SearchCompleteCallback = (
|
|
|
283
324
|
|
|
284
325
|
## Supported Library Systems
|
|
285
326
|
|
|
286
|
-
| Module | Library System
|
|
287
|
-
| -------- |
|
|
288
|
-
| `gg` | 경기교육통합도서관
|
|
289
|
-
| `gunpo` | 군포시도서관
|
|
290
|
-
| `hscity` | 화성시립도서관
|
|
291
|
-
| `
|
|
292
|
-
| `
|
|
293
|
-
| `
|
|
294
|
-
| `
|
|
295
|
-
| `
|
|
296
|
-
|
|
297
|
-
|
|
327
|
+
| Module | Library System | Region |
|
|
328
|
+
| -------- | ------------------------------ | ----------------- |
|
|
329
|
+
| `gg` | 경기교육통합도서관 | Gyeonggi Province |
|
|
330
|
+
| `gunpo` | 군포시도서관 | Gunpo City |
|
|
331
|
+
| `hscity` | 화성시립도서관 | Hwaseong City |
|
|
332
|
+
| `ice` | 인천광역시교육청통합공공도서관 | Incheon City |
|
|
333
|
+
| `osan` | 오산시도서관 | Osan City |
|
|
334
|
+
| `snlib` | 성남시도서관 | Seongnam City |
|
|
335
|
+
| `suwon` | 수원시도서관 | Suwon City |
|
|
336
|
+
| `yjlib` | 여주시립도서관 | Yeoju City |
|
|
337
|
+
| `yongin` | 용인시도서관 | Yongin City |
|
|
338
|
+
| `jeju` | 제주시도서관 | Jeju City |
|
|
339
|
+
|
|
340
|
+
Use `getAllLibraryNames()` to see all 180+ individual branch names.
|
|
298
341
|
|
|
299
342
|
---
|
|
300
343
|
|
|
@@ -304,6 +347,9 @@ Use `getAllLibraryNames()` to see all 160+ individual branch names.
|
|
|
304
347
|
# Interactive mode
|
|
305
348
|
npx dongnelibrary -i
|
|
306
349
|
|
|
350
|
+
# Interactive mode (choose by library system)
|
|
351
|
+
npx dongnelibrary -m
|
|
352
|
+
|
|
307
353
|
# Search specific library
|
|
308
354
|
npx dongnelibrary -t "해리포터" -l "판교도서관"
|
|
309
355
|
|
|
@@ -320,7 +366,14 @@ See `dongnelibrary --help` for all options.
|
|
|
320
366
|
The package includes TypeScript declarations. Import types directly:
|
|
321
367
|
|
|
322
368
|
```typescript
|
|
323
|
-
import dongnelibrary, {
|
|
369
|
+
import dongnelibrary, {
|
|
370
|
+
SearchResult,
|
|
371
|
+
SearchError,
|
|
372
|
+
SearchOptionsMain,
|
|
373
|
+
SearchCallback,
|
|
374
|
+
SearchCompleteCallback,
|
|
375
|
+
Book,
|
|
376
|
+
} from "dongnelibrary";
|
|
324
377
|
```
|
|
325
378
|
|
|
326
379
|
---
|
package/README.md
CHANGED
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
npm run build
|
|
20
20
|
|
|
21
21
|
node ./dist/cli.js -i
|
|
22
|
+
node ./dist/cli.js -m
|
|
22
23
|
node ./dist/cli.js -a
|
|
23
24
|
node ./dist/cli.js -t 별 -l 남양
|
|
24
25
|
node ./dist/cli.js -t 별 -l 흥천,판교
|
|
@@ -31,6 +32,7 @@
|
|
|
31
32
|
|
|
32
33
|
npm install dongnelibrary@latest -g
|
|
33
34
|
dongnelibrary -i
|
|
35
|
+
dongnelibrary -m
|
|
34
36
|
dongnelibrary -a
|
|
35
37
|
dongnelibrary -t 별 -l 남양
|
|
36
38
|
dongnelibrary -t 별 -l 흥천,판교
|
|
@@ -43,6 +45,7 @@
|
|
|
43
45
|
## Run with npx
|
|
44
46
|
|
|
45
47
|
npx dongnelibrary -i
|
|
48
|
+
npx dongnelibrary -m
|
|
46
49
|
npx dongnelibrary -a
|
|
47
50
|
npx dongnelibrary -t 별 -l 남양
|
|
48
51
|
npx dongnelibrary -t 별 -l 흥천,판교
|
|
@@ -59,6 +62,7 @@
|
|
|
59
62
|
### run examples
|
|
60
63
|
|
|
61
64
|
docker run -it --rm ghcr.io/afrontend/dongnelibrary -i
|
|
65
|
+
docker run -it --rm ghcr.io/afrontend/dongnelibrary -m
|
|
62
66
|
docker run --rm ghcr.io/afrontend/dongnelibrary -a
|
|
63
67
|
docker run --rm ghcr.io/afrontend/dongnelibrary -t 별 -l 남양
|
|
64
68
|
docker run --rm ghcr.io/afrontend/dongnelibrary -t 별 -l 흥천,판교
|
|
@@ -74,6 +78,7 @@
|
|
|
74
78
|
### run examples
|
|
75
79
|
|
|
76
80
|
docker run -it dongnelibrary -i
|
|
81
|
+
docker run -it dongnelibrary -m
|
|
77
82
|
docker run dongnelibrary -a
|
|
78
83
|
docker run dongnelibrary -t 별 -l "남양"
|
|
79
84
|
docker run dongnelibrary -t 별 -l "흥천,판교"
|
|
@@ -140,11 +145,13 @@ console.log(results.length + " 개의 도서관을 검색했습니다.");
|
|
|
140
145
|
- [경기교육통합도서관][gg-url] (경기중앙교육도서관,경기평택교육도서관,경기광주교육도서관,경기여주가남교육도서관,경기포천교육도서관,경기김포교육도서관,경기과천교육도서관,경기성남교육도서관,경기화성교육도서관,경기의정부교육도서관,경기평생교육학습관)
|
|
141
146
|
- [군포시도서관][gunpo-url] (산본도서관,당동도서관,대야도서관,어린이도서관,이동도서관,군포중앙도서관,누리천문대,시청북카페밥상머리,부곡도서관,당정문화도서관,동화나무어린이도서관,금정작은도서관,재궁꿈나무도서관,궁내동작은도서관,노루목작은도서관,버드나무에부는바람작은도서관,꿈쟁이도서관,우리마을도서관,북카페사랑아이엔지,산본역도서관,하늘정원작은도서관,꿈이지,꿈드림작은도서관,여담작은도서관)
|
|
142
147
|
- [성남시도서관][snlib-url] (논골도서관,중원어린이도서관,성남중앙도서관,분당도서관,고등도서관,구미도서관,해오름도서관,중원도서관,무지개도서관,수내도서관,판교도서관,위례도서관,수정도서관,책테마파크도서관,운중도서관,서현도서관,복정도서관,판교어린이도서관)
|
|
148
|
+
- [인천광역시교육청통합공공도서관][ice-url] (인천광역시교육청계양도서관,인천광역시교육청부평도서관,인천광역시교육청서구도서관,인천광역시교육청신트리도서관,인천광역시교육청연수도서관,인천광역시교육청주안도서관,인천광역시교육청중앙도서관,인천광역시교육청평생학습관도서관,인천광역시교육청화도진도서관)
|
|
143
149
|
- [오산시도서관][osan-url] (오산중앙도서관,꿈두레도서관,초평도서관,햇살마루도서관,청학도서관,양산도서관,소리울도서관,무지개도서관,고현초꿈키움도서관,쌍용예가시민개방도서관)
|
|
144
150
|
- [화성시립도서관][hscity-url] (남양도서관,태안도서관,삼괴도서관,병점도서관,샘내도서관,두빛나래어린이도서관,봉담도서관,둥지나래어린이도서관,목동이음터도서관,기아행복마루도서관,화성동탄중앙도서관,송산도서관,정남도서관,비봉도서관,진안도서관,중앙이음터도서관,양감도서관,다원이음터도서관,송린이음터도서관,팔탄도서관,마도도서관,봉담커피앤북도서관,왕배푸른숲도서관,노을빛도서관,서연이음터도서관,호연이음터도서관,향남복합문화센터도서관,봉담와우도서관,늘봄이음터도서관,달빛나래어린이도서관)
|
|
145
151
|
- [수원시도서관][suwon-url] (선경도서관,수원중앙도서관,창룡도서관,화서다산도서관,호매실도서관,서수원도서관,한림도서관,버드내도서관,북수원도서관,대추골도서관,일월도서관,광교홍재도서관,태장마루도서관,광교푸른숲도서관,매여울도서관,망포글빛도서관,슬기샘도서관,지혜샘어린이도서관,바른샘어린이도서관,한아름도서관,반달어린이도서관,사랑샘도서관,희망샘도서관)
|
|
146
152
|
- [용인시도서관][yongin-url] (수지도서관,구갈희망누리도서관,구성도서관,기흥도서관,남사도서관,동백도서관,동천도서관,모현도서관,보라도서관,상현도서관,서농도서관,성복도서관,용인중앙도서관,양지해밀도서관,영덕도서관,이동꿈틀도서관,죽전도서관,청덕도서관,포곡도서관,흥덕도서관,기흥동행정복지센터스마트도서관,기흥역스마트도서관,동천동행정복지센터스마트도서관,마북동행정복지센터스마트도서관,보정동행정복지센터스마트도서관,상갈동행정복지센터스마트도서관,상하동행정복지센터스마트도서관,성복역스마트도서관,시청스마트도서관,신봉동행정복지센터스마트도서관,역북동행정복지센터스마트도서관,용인중앙시장역스마트도서관,원삼면스마트도서관,유방어린이공원스마트도서관,죽전역스마트도서관,고림다온작은도서관,남사맑은누리작은도서관,백암면작은도서관,상현1동작은도서관,상현2동작은도서관,이동천리작은도서관)
|
|
147
153
|
- [여주시립도서관][yjlib-url] (여주도서관,세종도서관,점동도서관,여주기적의도서관,흥천도서관,금사도서관,대신도서관,산북작은도서관,북내작은도서관,여주역스마트도서관,이마트스마트도서관)
|
|
154
|
+
- [제주시도서관][jeju-url] (한라도서관,우당도서관,탐라도서관,제주시기적의도서관,애월도서관,조천읍도서관,한경도서관,삼매봉도서관,중앙도서관,동부도서관,서부도서관,서귀포기적의도서관,성산일출도서관,안덕산방도서관,표선도서관,꿈바당어린이도서관)
|
|
148
155
|
|
|
149
156
|
## 마무리
|
|
150
157
|
|
|
@@ -158,11 +165,13 @@ console.log(results.length + " 개의 도서관을 검색했습니다.");
|
|
|
158
165
|
npm run gg # 경기도 도서관
|
|
159
166
|
npm run gunpo # 군포시 도서관
|
|
160
167
|
npm run hscity # 화성시 도서관
|
|
168
|
+
npm run ice # 인천시 도서관
|
|
161
169
|
npm run osan # 오산시 도서관
|
|
162
170
|
npm run snlib # 성남시 도서관
|
|
163
171
|
npm run suwon # 수원시 도서관
|
|
164
172
|
npm run yjlib # 여주시 도서관
|
|
165
173
|
npm run yongin # 용인시 도서관
|
|
174
|
+
npm run jeju # 제주시 도서관
|
|
166
175
|
|
|
167
176
|
[dongnelibraryspa]: https://github.com/afrontend/dongnelibraryspa "AngularJS, Foundation을 사용한 Web UI"
|
|
168
177
|
[npm-image]: https://img.shields.io/npm/v/dongnelibrary.svg
|
|
@@ -177,3 +186,5 @@ console.log(results.length + " 개의 도서관을 검색했습니다.");
|
|
|
177
186
|
[suwon-url]: https://www.suwonlib.go.kr
|
|
178
187
|
[yongin-url]: https://lib.yongin.go.kr
|
|
179
188
|
[yjlib-url]: https://www.yjlib.go.kr
|
|
189
|
+
[ice-url]: https://lib.ice.go.kr/
|
|
190
|
+
[jeju-url]: https://www.jeju.go.kr/
|
package/dist/dongnelibrary.d.ts
CHANGED
|
@@ -1,9 +1,38 @@
|
|
|
1
1
|
import type { SearchCallback, SearchCompleteCallback, SearchOptionsMain, SearchResult } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Get all available library names
|
|
4
|
+
* @returns Array of all library names
|
|
5
|
+
*/
|
|
2
6
|
export declare const getAllLibraryNames: () => string[];
|
|
7
|
+
/**
|
|
8
|
+
* Get all module names
|
|
9
|
+
* @returns Array of all module names
|
|
10
|
+
*/
|
|
3
11
|
export declare const getAllModuleNames: () => string[];
|
|
12
|
+
/**
|
|
13
|
+
* Get home URLs for all modules
|
|
14
|
+
* @returns Record mapping module names to their home URLs
|
|
15
|
+
*/
|
|
4
16
|
export declare const getModuleHomeUrls: () => Record<string, string>;
|
|
17
|
+
/**
|
|
18
|
+
* Check if a name corresponds to a known module
|
|
19
|
+
* @param name - Name to check
|
|
20
|
+
* @returns True if the name is a valid module name
|
|
21
|
+
*/
|
|
5
22
|
export declare const isModuleName: (name: string) => boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Asynchronously search across multiple libraries
|
|
25
|
+
* @param opt - Search options including title and library names
|
|
26
|
+
* @param onResult - Callback for individual search results
|
|
27
|
+
* @returns Promise resolving to array of search results
|
|
28
|
+
*/
|
|
6
29
|
export declare const searchAsync: (opt: SearchOptionsMain, onResult?: SearchCallback) => Promise<SearchResult[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Synchronous search wrapper that calls completion callback
|
|
32
|
+
* @param opt - Search options or null/undefined
|
|
33
|
+
* @param onResult - Callback for individual search results
|
|
34
|
+
* @param onComplete - Callback for final search results
|
|
35
|
+
*/
|
|
7
36
|
export declare const search: (opt: SearchOptionsMain | undefined | null, onResult?: SearchCallback, onComplete?: SearchCompleteCallback) => void;
|
|
8
37
|
export type { SearchResult, SearchError, SearchOptionsMain, SearchCallback, SearchCompleteCallback, Book, } from "./types";
|
|
9
38
|
//# sourceMappingURL=dongnelibrary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dongnelibrary.d.ts","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dongnelibrary.d.ts","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAKV,cAAc,EACd,sBAAsB,EAEtB,iBAAiB,EACjB,YAAY,EACb,MAAM,SAAS,CAAC;AAsDjB;;;GAGG;AACH,eAAO,MAAM,kBAAkB,QAAO,MAAM,EACH,CAAC;AAE1C;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAAM,EACS,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CACgC,CAAC;AAE3F;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,OACkB,CAAC;AAwJ/D;;;;;GAKG;AACH,eAAO,MAAM,WAAW,GACtB,KAAK,iBAAiB,EACtB,WAAW,cAAc,KACxB,OAAO,CAAC,YAAY,EAAE,CAkBxB,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,MAAM,GACjB,KAAK,iBAAiB,GAAG,SAAS,GAAG,IAAI,EACzC,WAAW,cAAc,EACzB,aAAa,sBAAsB,KAClC,IAMF,CAAC;AAOF,YAAY,EACV,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,cAAc,EACd,sBAAsB,EACtB,IAAI,GACL,MAAM,SAAS,CAAC"}
|
package/dist/dongnelibrary.js
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
// =============================================================================
|
|
3
|
+
// IMPORTS
|
|
4
|
+
// =============================================================================
|
|
2
5
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
6
|
if (k2 === undefined) k2 = k;
|
|
4
7
|
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
@@ -34,28 +37,42 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
37
|
})();
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.search = exports.searchAsync = exports.isModuleName = exports.getModuleHomeUrls = exports.getAllModuleNames = exports.getAllLibraryNames = void 0;
|
|
40
|
+
// Local library modules
|
|
37
41
|
const gg = __importStar(require("./localLibraryModule/gg"));
|
|
38
42
|
const gunpo = __importStar(require("./localLibraryModule/gunpo"));
|
|
43
|
+
const jeju = __importStar(require("./localLibraryModule/jeju"));
|
|
39
44
|
const hscity = __importStar(require("./localLibraryModule/hscity"));
|
|
45
|
+
const ice = __importStar(require("./localLibraryModule/ice"));
|
|
40
46
|
const osan = __importStar(require("./localLibraryModule/osan"));
|
|
41
47
|
const snlib = __importStar(require("./localLibraryModule/snlib"));
|
|
42
48
|
const suwon = __importStar(require("./localLibraryModule/suwon"));
|
|
43
49
|
const yjlib = __importStar(require("./localLibraryModule/yjlib"));
|
|
44
50
|
const yongin = __importStar(require("./localLibraryModule/yongin"));
|
|
45
51
|
// =============================================================================
|
|
46
|
-
//
|
|
52
|
+
// CONFIGURATION
|
|
47
53
|
// =============================================================================
|
|
54
|
+
/**
|
|
55
|
+
* List of all available library modules
|
|
56
|
+
*/
|
|
48
57
|
const LIBRARY_MODULES = [
|
|
49
58
|
gg,
|
|
50
59
|
gunpo,
|
|
60
|
+
jeju,
|
|
51
61
|
hscity,
|
|
62
|
+
ice,
|
|
52
63
|
osan,
|
|
53
64
|
snlib,
|
|
54
65
|
suwon,
|
|
55
66
|
yjlib,
|
|
56
67
|
yongin,
|
|
57
68
|
];
|
|
69
|
+
/**
|
|
70
|
+
* Error object returned when an unknown library is requested
|
|
71
|
+
*/
|
|
58
72
|
const UNKNOWN_LIBRARY_ERROR = { msg: "Unknown library name" };
|
|
73
|
+
/**
|
|
74
|
+
* Default library entry for unknown/invalid library names
|
|
75
|
+
*/
|
|
59
76
|
const UNKNOWN_LIBRARY = {
|
|
60
77
|
name: "Unknown",
|
|
61
78
|
search: async (_opt, onResult) => {
|
|
@@ -64,28 +81,78 @@ const UNKNOWN_LIBRARY = {
|
|
|
64
81
|
homeUrl: "",
|
|
65
82
|
};
|
|
66
83
|
// =============================================================================
|
|
67
|
-
//
|
|
84
|
+
// LIBRARY REGISTRY
|
|
68
85
|
// =============================================================================
|
|
69
|
-
|
|
86
|
+
/**
|
|
87
|
+
* Flatten all library names from modules into a single registry
|
|
88
|
+
*/
|
|
89
|
+
const ALL_LIBRARY_LIST = LIBRARY_MODULES.flatMap((module) => module.getLibraryNames().map((name) => ({
|
|
70
90
|
name,
|
|
71
91
|
search: module.search,
|
|
72
92
|
homeUrl: module.homeUrl,
|
|
73
93
|
})));
|
|
74
|
-
|
|
94
|
+
/**
|
|
95
|
+
* Get all available library names
|
|
96
|
+
* @returns Array of all library names
|
|
97
|
+
*/
|
|
98
|
+
const getAllLibraryNames = () => ALL_LIBRARY_LIST.map((lib) => lib.name);
|
|
75
99
|
exports.getAllLibraryNames = getAllLibraryNames;
|
|
76
|
-
|
|
100
|
+
/**
|
|
101
|
+
* Get all module names
|
|
102
|
+
* @returns Array of all module names
|
|
103
|
+
*/
|
|
104
|
+
const getAllModuleNames = () => LIBRARY_MODULES.map((module) => module.moduleName);
|
|
77
105
|
exports.getAllModuleNames = getAllModuleNames;
|
|
78
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Get home URLs for all modules
|
|
108
|
+
* @returns Record mapping module names to their home URLs
|
|
109
|
+
*/
|
|
110
|
+
const getModuleHomeUrls = () => Object.fromEntries(LIBRARY_MODULES.map((module) => [module.moduleName, module.homeUrl]));
|
|
79
111
|
exports.getModuleHomeUrls = getModuleHomeUrls;
|
|
80
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Check if a name corresponds to a known module
|
|
114
|
+
* @param name - Name to check
|
|
115
|
+
* @returns True if the name is a valid module name
|
|
116
|
+
*/
|
|
117
|
+
const isModuleName = (name) => LIBRARY_MODULES.some((module) => module.moduleName === name);
|
|
81
118
|
exports.isModuleName = isModuleName;
|
|
82
|
-
|
|
119
|
+
/**
|
|
120
|
+
* Get all library names from a specific module
|
|
121
|
+
* @param moduleName - Name of the module to get libraries from
|
|
122
|
+
* @returns Array of library names in the specified module
|
|
123
|
+
*/
|
|
124
|
+
const getLibraryNamesInModule = (moduleName) => LIBRARY_MODULES.find((module) => module.moduleName === moduleName)?.getLibraryNames() ??
|
|
83
125
|
[];
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
126
|
+
/**
|
|
127
|
+
* Get a library registry entry by name
|
|
128
|
+
* @param libraryName - Name of the library to find
|
|
129
|
+
* @returns Library registry entry or unknown library if not found
|
|
130
|
+
*/
|
|
131
|
+
const getLibraryRegistryEntryByName = (libraryName) => ALL_LIBRARY_LIST.find((lib) => lib.name === libraryName) ?? UNKNOWN_LIBRARY;
|
|
132
|
+
/**
|
|
133
|
+
* Complete a partial library name to full name
|
|
134
|
+
* @param str - Partial library name to complete
|
|
135
|
+
* @returns Full library name if found, otherwise empty string
|
|
136
|
+
*/
|
|
137
|
+
const completeLibraryName = (str) => ALL_LIBRARY_LIST.find((lib) => lib.name.includes(str))?.name ?? "";
|
|
138
|
+
/**
|
|
139
|
+
* Validate if a library name is valid
|
|
140
|
+
* @param libraryName - Name to validate
|
|
141
|
+
* @returns True if the library name is valid (exists or is a module name)
|
|
142
|
+
*/
|
|
143
|
+
const isValidLibraryName = (libraryName) => ALL_LIBRARY_LIST.some((lib) => lib.name === libraryName) ||
|
|
144
|
+
(0, exports.isModuleName)(libraryName);
|
|
145
|
+
/**
|
|
146
|
+
* Expand module names to their constituent library names
|
|
147
|
+
* @param libraryNameList - List of library names and/or module names
|
|
148
|
+
* @returns Expanded list with module names replaced by their constituent libraries
|
|
149
|
+
*/
|
|
88
150
|
const expandModuleNames = (libraryNameList) => libraryNameList.flatMap((name) => (0, exports.isModuleName)(name) ? getLibraryNamesInModule(name) : [name]);
|
|
151
|
+
/**
|
|
152
|
+
* Resolve library names to their actual names
|
|
153
|
+
* @param libraryName - Single library name or array of names
|
|
154
|
+
* @returns Array of resolved library names
|
|
155
|
+
*/
|
|
89
156
|
const resolveNameList = (libraryName) => {
|
|
90
157
|
if (libraryName === "")
|
|
91
158
|
return (0, exports.getAllLibraryNames)();
|
|
@@ -95,21 +162,48 @@ const resolveNameList = (libraryName) => {
|
|
|
95
162
|
return getLibraryNamesInModule(libraryName);
|
|
96
163
|
return [libraryName];
|
|
97
164
|
};
|
|
165
|
+
/**
|
|
166
|
+
* Resolve library names to their registry entries
|
|
167
|
+
* @param libraryName - Single library name or array of names
|
|
168
|
+
* @returns Array of registry entries for the requested libraries
|
|
169
|
+
*/
|
|
98
170
|
const resolveLibraryRegistryEntry = (libraryName) => resolveNameList(libraryName)
|
|
99
171
|
.map(completeLibraryName)
|
|
100
172
|
.filter(isValidLibraryName)
|
|
101
173
|
.map(getLibraryRegistryEntryByName);
|
|
102
174
|
// =============================================================================
|
|
103
|
-
//
|
|
175
|
+
// BOOK RESULT HELPERS
|
|
104
176
|
// =============================================================================
|
|
177
|
+
/**
|
|
178
|
+
* Normalize book data to ensure consistent structure
|
|
179
|
+
* @param book - Book object with potentially missing fields
|
|
180
|
+
* @returns Normalized book object with all required fields
|
|
181
|
+
*/
|
|
105
182
|
const normalizeBook = ({ libraryName, title, exist, bookUrl }) => ({
|
|
106
183
|
libraryName,
|
|
107
184
|
title,
|
|
108
185
|
exist,
|
|
109
186
|
bookUrl,
|
|
110
187
|
});
|
|
188
|
+
/**
|
|
189
|
+
* Sort books by availability (available books first)
|
|
190
|
+
* @param books - Array of books to sort
|
|
191
|
+
* @returns Sorted array with available books first
|
|
192
|
+
*/
|
|
111
193
|
const sortByAvailability = (books) => books.sort((a, b) => (a.exist === b.exist ? 0 : a.exist ? -1 : 1));
|
|
194
|
+
/**
|
|
195
|
+
* Process a list of books by normalizing and sorting them
|
|
196
|
+
* @param books - Array of book objects to process
|
|
197
|
+
* @returns Processed and sorted array of books
|
|
198
|
+
*/
|
|
112
199
|
const processBooklist = (books) => sortByAvailability(books.map(normalizeBook));
|
|
200
|
+
/**
|
|
201
|
+
* Perform a search on a single library
|
|
202
|
+
* @param lib - Library registry entry to search
|
|
203
|
+
* @param title - Search term
|
|
204
|
+
* @param signal - AbortSignal for cancellation support
|
|
205
|
+
* @returns Promise resolving to search result or error
|
|
206
|
+
*/
|
|
113
207
|
const searchLibrary = (lib, title, signal) => new Promise((resolve) => {
|
|
114
208
|
lib.search({ title, libraryName: lib.name, signal }, (err, data) => {
|
|
115
209
|
if (err) {
|
|
@@ -132,6 +226,12 @@ const searchLibrary = (lib, title, signal) => new Promise((resolve) => {
|
|
|
132
226
|
});
|
|
133
227
|
});
|
|
134
228
|
});
|
|
229
|
+
/**
|
|
230
|
+
* Asynchronously search across multiple libraries
|
|
231
|
+
* @param opt - Search options including title and library names
|
|
232
|
+
* @param onResult - Callback for individual search results
|
|
233
|
+
* @returns Promise resolving to array of search results
|
|
234
|
+
*/
|
|
135
235
|
const searchAsync = (opt, onResult) => {
|
|
136
236
|
const { title, libraryName, signal } = opt;
|
|
137
237
|
const libraries = resolveLibraryRegistryEntry(libraryName);
|
|
@@ -149,6 +249,12 @@ const searchAsync = (opt, onResult) => {
|
|
|
149
249
|
return Promise.all(promises).then((r) => r.filter((v) => v !== null));
|
|
150
250
|
};
|
|
151
251
|
exports.searchAsync = searchAsync;
|
|
252
|
+
/**
|
|
253
|
+
* Synchronous search wrapper that calls completion callback
|
|
254
|
+
* @param opt - Search options or null/undefined
|
|
255
|
+
* @param onResult - Callback for individual search results
|
|
256
|
+
* @param onComplete - Callback for final search results
|
|
257
|
+
*/
|
|
152
258
|
const search = (opt, onResult, onComplete) => {
|
|
153
259
|
if (!opt || (!onResult && !onComplete)) {
|
|
154
260
|
console.log("invalid search options");
|
|
@@ -157,6 +263,9 @@ const search = (opt, onResult, onComplete) => {
|
|
|
157
263
|
(0, exports.searchAsync)(opt, onResult).then((results) => onComplete?.(null, results));
|
|
158
264
|
};
|
|
159
265
|
exports.search = search;
|
|
266
|
+
// =============================================================================
|
|
267
|
+
// API EXPORT
|
|
268
|
+
// =============================================================================
|
|
160
269
|
({
|
|
161
270
|
getAllLibraryNames: exports.getAllLibraryNames,
|
|
162
271
|
getAllModuleNames: exports.getAllModuleNames,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dongnelibrary.js","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dongnelibrary.js","sourceRoot":"","sources":["../src/dongnelibrary.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uC778\uCC9C\uAD11\uC5ED\uC2DC\uAD50\uC721\uCCAD\uD1B5\uD569\uACF5\uACF5\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://lib.ice.go.kr/";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=ice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ice.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/ice.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,+FAAoB,CAAC;AAC5C,eAAO,MAAM,OAAO,2BAA2B,CAAC;AAgGhD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
4
|
+
exports.getLibraryNames = getLibraryNames;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const http_1 = require("../http");
|
|
7
|
+
const jsdom_1 = require("jsdom");
|
|
8
|
+
exports.moduleName = "인천광역시교육청통합공공도서관";
|
|
9
|
+
exports.homeUrl = "https://lib.ice.go.kr/";
|
|
10
|
+
const libraryList = [
|
|
11
|
+
{ code: "lib_ME", name: "인천광역시교육청계양도서관" },
|
|
12
|
+
{ code: "lib_MC", name: "인천광역시교육청부평도서관" },
|
|
13
|
+
{ code: "lib_MF", name: "인천광역시교육청서구도서관" },
|
|
14
|
+
{ code: "lib_MA", name: "인천광역시교육청신트리도서관" },
|
|
15
|
+
{ code: "lib_MH", name: "인천광역시교육청연수도서관" },
|
|
16
|
+
{ code: "lib_MD", name: "인천광역시교육청주안도서관" },
|
|
17
|
+
{ code: "lib_MB", name: "인천광역시교육청중앙도서관" },
|
|
18
|
+
{ code: "lib_MJ", name: "인천광역시교육청평생학습관도서관" },
|
|
19
|
+
{ code: "lib_MG", name: "인천광역시교육청화도진도서관" },
|
|
20
|
+
];
|
|
21
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
22
|
+
function buildSearchUrl(title, lcode) {
|
|
23
|
+
const params = new URLSearchParams();
|
|
24
|
+
params.append("menu_idx", "11");
|
|
25
|
+
params.append("viewPage", "1");
|
|
26
|
+
params.append("libraryCodes", "ALL");
|
|
27
|
+
params.append("_libraryCodes", "on");
|
|
28
|
+
params.append("libraryCodes", lcode);
|
|
29
|
+
params.append("_libraryCodes", "on");
|
|
30
|
+
params.append("search_type", "L_TITLE");
|
|
31
|
+
params.append("search_text", title);
|
|
32
|
+
params.append("booktype", "BOOK");
|
|
33
|
+
params.append("rowCount", "1000");
|
|
34
|
+
return `https://lib.ice.go.kr/ice/intro/search/index.do?${params}`;
|
|
35
|
+
}
|
|
36
|
+
async function searchImpl(opt) {
|
|
37
|
+
const { title, libraryName, signal } = opt;
|
|
38
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
39
|
+
const lcode = getLibraryCode(libraryName);
|
|
40
|
+
const url = buildSearchUrl(title, lcode);
|
|
41
|
+
const { statusCode, body } = await (0, http_1.get)(url, { signal });
|
|
42
|
+
if (statusCode !== 200) {
|
|
43
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
44
|
+
}
|
|
45
|
+
const dom = new jsdom_1.JSDOM(body);
|
|
46
|
+
const document = dom.window.document;
|
|
47
|
+
const bodyText = document.body?.textContent ?? "";
|
|
48
|
+
const countMatch = bodyText.match(/총\s*(\d+)건/);
|
|
49
|
+
const count = countMatch ? Number(countMatch[1]) : 0;
|
|
50
|
+
const booklist = [];
|
|
51
|
+
const bookItems = document.querySelectorAll(".bif");
|
|
52
|
+
bookItems.forEach((item) => {
|
|
53
|
+
const titleLink = item.querySelector("a.goDetail");
|
|
54
|
+
const bookTitle = titleLink?.textContent?.trim() ?? "";
|
|
55
|
+
const regNo = titleLink?.getAttribute("regno") ?? "";
|
|
56
|
+
const manageCode = titleLink?.getAttribute("managecode") ?? "";
|
|
57
|
+
const bookUrl = regNo
|
|
58
|
+
? `https://lib.ice.go.kr/ice/intro/search/detail.do?regNo=${regNo}&manageCode=${manageCode}&booktype=BOOK`
|
|
59
|
+
: "";
|
|
60
|
+
const paragraphs = item.querySelectorAll("p");
|
|
61
|
+
let libName = "";
|
|
62
|
+
for (const p of paragraphs) {
|
|
63
|
+
const text = p.textContent ?? "";
|
|
64
|
+
if (text.includes("소장처")) {
|
|
65
|
+
const match = text.match(/소장처\s*:\s*([^/]+)/);
|
|
66
|
+
libName = match ? match[1].trim() : "";
|
|
67
|
+
break;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
const availCell = item.querySelector("td");
|
|
71
|
+
const availability = availCell?.textContent?.trim() ?? "";
|
|
72
|
+
if (bookTitle) {
|
|
73
|
+
booklist.push({
|
|
74
|
+
libraryName: libName || libraryName,
|
|
75
|
+
title: bookTitle,
|
|
76
|
+
bookUrl,
|
|
77
|
+
exist: availability === "대출가능",
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
return {
|
|
82
|
+
startPage: opt.startPage,
|
|
83
|
+
totalBookCount: count,
|
|
84
|
+
booklist,
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
88
|
+
function getLibraryNames() {
|
|
89
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
90
|
+
}
|
|
91
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
92
|
+
//# sourceMappingURL=ice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ice.js","sourceRoot":"","sources":["../../src/localLibraryModule/ice.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SearchOptions, SearchResult } from "../types";
|
|
2
|
+
export declare const moduleName = "\uC81C\uC8FC\uC2DC\uB3C4\uC11C\uAD00";
|
|
3
|
+
export declare const homeUrl = "https://www.jeju.go.kr/";
|
|
4
|
+
export declare const search: (opt: SearchOptions, callback?: import("../types").SearchCallback) => Promise<SearchResult | void>;
|
|
5
|
+
export declare function getLibraryNames(): string[];
|
|
6
|
+
//# sourceMappingURL=jeju.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jeju.d.ts","sourceRoot":"","sources":["../../src/localLibraryModule/jeju.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAIV,aAAa,EACb,YAAY,EACb,MAAM,UAAU,CAAC;AAElB,eAAO,MAAM,UAAU,yCAAW,CAAC;AACnC,eAAO,MAAM,OAAO,4BAA4B,CAAC;AA8GjD,eAAO,MAAM,MAAM,oGAA+B,CAAC;AAEnD,wBAAgB,eAAe,IAAI,MAAM,EAAE,CAE1C"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.search = exports.homeUrl = exports.moduleName = void 0;
|
|
4
|
+
exports.getLibraryNames = getLibraryNames;
|
|
5
|
+
const util_1 = require("../util");
|
|
6
|
+
const http_1 = require("../http");
|
|
7
|
+
exports.moduleName = "제주시도서관";
|
|
8
|
+
exports.homeUrl = "https://www.jeju.go.kr/";
|
|
9
|
+
const libraryList = [
|
|
10
|
+
{ code: "MJ", name: "한라도서관" },
|
|
11
|
+
{ code: "MK", name: "우당도서관" },
|
|
12
|
+
{ code: "ML", name: "탐라도서관" },
|
|
13
|
+
{ code: "MM", name: "제주시기적의도서관" },
|
|
14
|
+
{ code: "MP", name: "애월도서관" },
|
|
15
|
+
{ code: "MN", name: "조천읍도서관" },
|
|
16
|
+
{ code: "MQ", name: "한경도서관" },
|
|
17
|
+
{ code: "MA", name: "삼매봉도서관" },
|
|
18
|
+
{ code: "MB", name: "중앙도서관" },
|
|
19
|
+
{ code: "MC", name: "동부도서관" },
|
|
20
|
+
{ code: "MD", name: "서부도서관" },
|
|
21
|
+
{ code: "ME", name: "서귀포기적의도서관" },
|
|
22
|
+
{ code: "MH", name: "성산일출도서관" },
|
|
23
|
+
{ code: "MF", name: "안덕산방도서관" },
|
|
24
|
+
{ code: "MG", name: "표선도서관" },
|
|
25
|
+
{ code: "XY", name: "꿈바당어린이도서관" },
|
|
26
|
+
];
|
|
27
|
+
const getLibraryCode = (0, util_1.createLibraryCodeLookup)(libraryList);
|
|
28
|
+
async function fetchRentStat(recKey, signal) {
|
|
29
|
+
try {
|
|
30
|
+
const { statusCode, body } = await (0, http_1.get)("https://www.jeju.go.kr/tool/lib/rent-stat.jsp", { qs: { key: recKey }, signal });
|
|
31
|
+
if (statusCode !== 200)
|
|
32
|
+
return false;
|
|
33
|
+
const stat = JSON.parse(body);
|
|
34
|
+
return stat.total - stat.rent > 0;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async function searchImpl(opt) {
|
|
41
|
+
const { title, libraryName, signal } = opt;
|
|
42
|
+
(0, util_1.validateSearchOptions)(opt);
|
|
43
|
+
const lcode = getLibraryCode(libraryName);
|
|
44
|
+
const qs = { q: title };
|
|
45
|
+
if (lcode) {
|
|
46
|
+
qs.lib = lcode;
|
|
47
|
+
}
|
|
48
|
+
const { statusCode, body } = await (0, http_1.get)("https://www.jeju.go.kr/tool/lib/search.jsp", { qs, signal });
|
|
49
|
+
if (statusCode !== 200) {
|
|
50
|
+
throw new Error(`HTTP ${statusCode}`);
|
|
51
|
+
}
|
|
52
|
+
const json = JSON.parse(body);
|
|
53
|
+
if (json.error) {
|
|
54
|
+
throw new Error("Search API returned an error");
|
|
55
|
+
}
|
|
56
|
+
const books = json.books ?? [];
|
|
57
|
+
const booklist = await Promise.all(books.map(async (book) => {
|
|
58
|
+
const exist = await fetchRentStat(book.recKey, signal);
|
|
59
|
+
return {
|
|
60
|
+
title: book.title,
|
|
61
|
+
exist,
|
|
62
|
+
libraryName: libraryList.find((l) => l.code === book.manageCode)?.name ?? libraryName,
|
|
63
|
+
bookUrl: `https://www.jeju.go.kr/lib/service/search/simple.htm?q=${encodeURIComponent(title)}`,
|
|
64
|
+
};
|
|
65
|
+
}));
|
|
66
|
+
return {
|
|
67
|
+
startPage: opt.startPage,
|
|
68
|
+
totalBookCount: books.length,
|
|
69
|
+
booklist,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
exports.search = (0, util_1.wrapWithCallback)(searchImpl);
|
|
73
|
+
function getLibraryNames() {
|
|
74
|
+
return (0, util_1.getLibraryNames)(libraryList);
|
|
75
|
+
}
|
|
76
|
+
({ moduleName: exports.moduleName, homeUrl: exports.homeUrl, search: exports.search, getLibraryNames });
|
|
77
|
+
//# sourceMappingURL=jeju.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jeju.js","sourceRoot":"","sources":["../../src/localLibraryModule/jeju.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dongnelibrary",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.11",
|
|
4
4
|
"description": "책을 빌릴 수 있는지 확인한다.",
|
|
5
5
|
"engines": {
|
|
6
6
|
"node": ">=22.22.0"
|
|
@@ -19,11 +19,13 @@
|
|
|
19
19
|
"gg": "npm run build && node --test test/gg.spec.js",
|
|
20
20
|
"gunpo": "npm run build && node --test test/gunpo.spec.js",
|
|
21
21
|
"hscity": "npm run build && node --test test/hscity.spec.js",
|
|
22
|
+
"ice": "npm run build && node --test test/ice.spec.js",
|
|
22
23
|
"osan": "npm run build && node --test test/osan.spec.js",
|
|
23
24
|
"snlib": "npm run build && node --test test/snlib.spec.js",
|
|
24
25
|
"suwon": "npm run build && node --test test/suwon.spec.js",
|
|
25
26
|
"yjlib": "npm run build && node --test test/yjlib.spec.js",
|
|
26
27
|
"yongin": "npm run build && node --test test/yongin.spec.js",
|
|
28
|
+
"jeju": "npm run build && node --test test/jeju.spec.js",
|
|
27
29
|
"cli": "npm run build && node --test test/cli.spec.js"
|
|
28
30
|
},
|
|
29
31
|
"repository": {
|