@heripo/research-radar 3.1.3 → 3.3.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/dist/index.cjs +93 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +93 -0
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
package/dist/index.cjs
CHANGED
|
@@ -1002,6 +1002,85 @@ function getUniqIdFromNrichMajorEvent(element) {
|
|
|
1002
1002
|
return ((element.attr('onclick') ?? '').match(/fnViewPage\('(.*)'\)/)?.[1] ?? '');
|
|
1003
1003
|
}
|
|
1004
1004
|
|
|
1005
|
+
const BASE_URL$1 = 'https://www.seamuse.go.kr';
|
|
1006
|
+
/**
|
|
1007
|
+
* Extracts the nttId from seamuse.go.kr detail page HTML.
|
|
1008
|
+
* The page contains a JS init call like: noticeFunc.infoInit(4394)
|
|
1009
|
+
* or og:url meta tag: https://www.seamuse.go.kr/news/notice/info/4394
|
|
1010
|
+
*/
|
|
1011
|
+
const extractNttId = (html) => {
|
|
1012
|
+
// Try og:url meta tag first
|
|
1013
|
+
const ogUrlMatch = html.match(/property="og:url"\s+content="[^"]*\/info\/(\d+)"/);
|
|
1014
|
+
if (ogUrlMatch) {
|
|
1015
|
+
return ogUrlMatch[1];
|
|
1016
|
+
}
|
|
1017
|
+
// Fallback: JS init call pattern like infoInit(4394)
|
|
1018
|
+
const initMatch = html.match(/\.infoInit\((\d+)\)/);
|
|
1019
|
+
if (initMatch) {
|
|
1020
|
+
return initMatch[1];
|
|
1021
|
+
}
|
|
1022
|
+
return '';
|
|
1023
|
+
};
|
|
1024
|
+
/**
|
|
1025
|
+
* Parses the list page from seamuse.go.kr (국립해양유산연구소).
|
|
1026
|
+
* The site uses client-side rendering — list data is fetched from a JSON API.
|
|
1027
|
+
* URL pattern: /news/notice/list/1 → API: POST /news/notice/listData/1
|
|
1028
|
+
*
|
|
1029
|
+
* @param listDataPath - API path segment (e.g., "/news/notice" or "/resources/academiccultural")
|
|
1030
|
+
* @param infoPathPrefix - Detail page path prefix (e.g., "/news/notice/info")
|
|
1031
|
+
*/
|
|
1032
|
+
const parseSeamuseList = async (_html, listDataPath, infoPathPrefix, customFetch) => {
|
|
1033
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${listDataPath}/listData/1`, {
|
|
1034
|
+
method: 'POST',
|
|
1035
|
+
headers: {
|
|
1036
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
1037
|
+
},
|
|
1038
|
+
body: '',
|
|
1039
|
+
});
|
|
1040
|
+
const data = await response.json();
|
|
1041
|
+
const posts = [];
|
|
1042
|
+
for (const item of data.resultList) {
|
|
1043
|
+
posts.push({
|
|
1044
|
+
uniqId: String(item.nttId),
|
|
1045
|
+
title: item.nttSj?.trim() ?? '',
|
|
1046
|
+
date: item.frstRegisterPnttm ?? '',
|
|
1047
|
+
detailUrl: `${BASE_URL$1}${infoPathPrefix}/${item.nttId}`,
|
|
1048
|
+
dateType: core.DateType.REGISTERED,
|
|
1049
|
+
});
|
|
1050
|
+
}
|
|
1051
|
+
return posts;
|
|
1052
|
+
};
|
|
1053
|
+
/**
|
|
1054
|
+
* Parses the detail page from seamuse.go.kr.
|
|
1055
|
+
* The site uses client-side rendering — detail data is fetched from a JSON API.
|
|
1056
|
+
* URL pattern: /news/notice/info/4394 → API: GET /news/notice/infoData/4394?nttId=4394
|
|
1057
|
+
*
|
|
1058
|
+
* @param infoDataPath - API path segment (e.g., "/news/notice")
|
|
1059
|
+
*/
|
|
1060
|
+
const parseSeamuseDetail = async (html, infoDataPath, customFetch) => {
|
|
1061
|
+
const nttId = extractNttId(html);
|
|
1062
|
+
if (!nttId) {
|
|
1063
|
+
return {
|
|
1064
|
+
detailContent: '',
|
|
1065
|
+
hasAttachedFile: false,
|
|
1066
|
+
hasAttachedImage: false,
|
|
1067
|
+
};
|
|
1068
|
+
}
|
|
1069
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${infoDataPath}/infoData/${nttId}?nttId=${nttId}`, {
|
|
1070
|
+
method: 'GET',
|
|
1071
|
+
headers: {
|
|
1072
|
+
'Content-Type': 'application/json',
|
|
1073
|
+
},
|
|
1074
|
+
});
|
|
1075
|
+
const data = await response.json();
|
|
1076
|
+
const content = data.result.nttCn ?? '';
|
|
1077
|
+
return {
|
|
1078
|
+
detailContent: new TurndownService().turndown(content),
|
|
1079
|
+
hasAttachedFile: (data.files?.length ?? 0) > 0,
|
|
1080
|
+
hasAttachedImage: content.includes('<img'),
|
|
1081
|
+
};
|
|
1082
|
+
};
|
|
1083
|
+
|
|
1005
1084
|
const LIST_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttListAjax.ink';
|
|
1006
1085
|
const DETAIL_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttDetailAjax.ink';
|
|
1007
1086
|
const BASE_URL = 'http://www.yngogo.or.kr';
|
|
@@ -1222,6 +1301,20 @@ function createCrawlingTargetGroups(customFetch) {
|
|
|
1222
1301
|
parseList: parseNrichPortalList,
|
|
1223
1302
|
parseDetail: parseNrichPortalDetail,
|
|
1224
1303
|
},
|
|
1304
|
+
{
|
|
1305
|
+
id: '국립해양유산연구소_공지사항',
|
|
1306
|
+
name: '국립해양유산연구소 공지사항',
|
|
1307
|
+
url: 'https://www.seamuse.go.kr/news/notice/list/1',
|
|
1308
|
+
parseList: (html) => parseSeamuseList(html, '/news/notice', '/news/notice/info', customFetch),
|
|
1309
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/news/notice', customFetch),
|
|
1310
|
+
},
|
|
1311
|
+
{
|
|
1312
|
+
id: '국립해양유산연구소_학술지',
|
|
1313
|
+
name: '국립해양유산연구소 학술지 해양유산연구',
|
|
1314
|
+
url: 'https://www.seamuse.go.kr/resources/academiccultural/list/1',
|
|
1315
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academiccultural', '/resources/academiccultural/info', customFetch),
|
|
1316
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academiccultural', customFetch),
|
|
1317
|
+
},
|
|
1225
1318
|
{
|
|
1226
1319
|
id: '국립고궁박물관_공지사항',
|
|
1227
1320
|
name: '국립고궁박물관 공지사항',
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/index.js
CHANGED
|
@@ -981,6 +981,85 @@ function getUniqIdFromNrichMajorEvent(element) {
|
|
|
981
981
|
return ((element.attr('onclick') ?? '').match(/fnViewPage\('(.*)'\)/)?.[1] ?? '');
|
|
982
982
|
}
|
|
983
983
|
|
|
984
|
+
const BASE_URL$1 = 'https://www.seamuse.go.kr';
|
|
985
|
+
/**
|
|
986
|
+
* Extracts the nttId from seamuse.go.kr detail page HTML.
|
|
987
|
+
* The page contains a JS init call like: noticeFunc.infoInit(4394)
|
|
988
|
+
* or og:url meta tag: https://www.seamuse.go.kr/news/notice/info/4394
|
|
989
|
+
*/
|
|
990
|
+
const extractNttId = (html) => {
|
|
991
|
+
// Try og:url meta tag first
|
|
992
|
+
const ogUrlMatch = html.match(/property="og:url"\s+content="[^"]*\/info\/(\d+)"/);
|
|
993
|
+
if (ogUrlMatch) {
|
|
994
|
+
return ogUrlMatch[1];
|
|
995
|
+
}
|
|
996
|
+
// Fallback: JS init call pattern like infoInit(4394)
|
|
997
|
+
const initMatch = html.match(/\.infoInit\((\d+)\)/);
|
|
998
|
+
if (initMatch) {
|
|
999
|
+
return initMatch[1];
|
|
1000
|
+
}
|
|
1001
|
+
return '';
|
|
1002
|
+
};
|
|
1003
|
+
/**
|
|
1004
|
+
* Parses the list page from seamuse.go.kr (국립해양유산연구소).
|
|
1005
|
+
* The site uses client-side rendering — list data is fetched from a JSON API.
|
|
1006
|
+
* URL pattern: /news/notice/list/1 → API: POST /news/notice/listData/1
|
|
1007
|
+
*
|
|
1008
|
+
* @param listDataPath - API path segment (e.g., "/news/notice" or "/resources/academiccultural")
|
|
1009
|
+
* @param infoPathPrefix - Detail page path prefix (e.g., "/news/notice/info")
|
|
1010
|
+
*/
|
|
1011
|
+
const parseSeamuseList = async (_html, listDataPath, infoPathPrefix, customFetch) => {
|
|
1012
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${listDataPath}/listData/1`, {
|
|
1013
|
+
method: 'POST',
|
|
1014
|
+
headers: {
|
|
1015
|
+
'Content-Type': 'application/x-www-form-urlencoded',
|
|
1016
|
+
},
|
|
1017
|
+
body: '',
|
|
1018
|
+
});
|
|
1019
|
+
const data = await response.json();
|
|
1020
|
+
const posts = [];
|
|
1021
|
+
for (const item of data.resultList) {
|
|
1022
|
+
posts.push({
|
|
1023
|
+
uniqId: String(item.nttId),
|
|
1024
|
+
title: item.nttSj?.trim() ?? '',
|
|
1025
|
+
date: item.frstRegisterPnttm ?? '',
|
|
1026
|
+
detailUrl: `${BASE_URL$1}${infoPathPrefix}/${item.nttId}`,
|
|
1027
|
+
dateType: DateType.REGISTERED,
|
|
1028
|
+
});
|
|
1029
|
+
}
|
|
1030
|
+
return posts;
|
|
1031
|
+
};
|
|
1032
|
+
/**
|
|
1033
|
+
* Parses the detail page from seamuse.go.kr.
|
|
1034
|
+
* The site uses client-side rendering — detail data is fetched from a JSON API.
|
|
1035
|
+
* URL pattern: /news/notice/info/4394 → API: GET /news/notice/infoData/4394?nttId=4394
|
|
1036
|
+
*
|
|
1037
|
+
* @param infoDataPath - API path segment (e.g., "/news/notice")
|
|
1038
|
+
*/
|
|
1039
|
+
const parseSeamuseDetail = async (html, infoDataPath, customFetch) => {
|
|
1040
|
+
const nttId = extractNttId(html);
|
|
1041
|
+
if (!nttId) {
|
|
1042
|
+
return {
|
|
1043
|
+
detailContent: '',
|
|
1044
|
+
hasAttachedFile: false,
|
|
1045
|
+
hasAttachedImage: false,
|
|
1046
|
+
};
|
|
1047
|
+
}
|
|
1048
|
+
const response = await (customFetch ?? fetch)(`${BASE_URL$1}${infoDataPath}/infoData/${nttId}?nttId=${nttId}`, {
|
|
1049
|
+
method: 'GET',
|
|
1050
|
+
headers: {
|
|
1051
|
+
'Content-Type': 'application/json',
|
|
1052
|
+
},
|
|
1053
|
+
});
|
|
1054
|
+
const data = await response.json();
|
|
1055
|
+
const content = data.result.nttCn ?? '';
|
|
1056
|
+
return {
|
|
1057
|
+
detailContent: new TurndownService().turndown(content),
|
|
1058
|
+
hasAttachedFile: (data.files?.length ?? 0) > 0,
|
|
1059
|
+
hasAttachedImage: content.includes('<img'),
|
|
1060
|
+
};
|
|
1061
|
+
};
|
|
1062
|
+
|
|
984
1063
|
const LIST_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttListAjax.ink';
|
|
985
1064
|
const DETAIL_API_URL = 'http://www.yngogo.or.kr/module/ntt/unity/selectNttDetailAjax.ink';
|
|
986
1065
|
const BASE_URL = 'http://www.yngogo.or.kr';
|
|
@@ -1201,6 +1280,20 @@ function createCrawlingTargetGroups(customFetch) {
|
|
|
1201
1280
|
parseList: parseNrichPortalList,
|
|
1202
1281
|
parseDetail: parseNrichPortalDetail,
|
|
1203
1282
|
},
|
|
1283
|
+
{
|
|
1284
|
+
id: '국립해양유산연구소_공지사항',
|
|
1285
|
+
name: '국립해양유산연구소 공지사항',
|
|
1286
|
+
url: 'https://www.seamuse.go.kr/news/notice/list/1',
|
|
1287
|
+
parseList: (html) => parseSeamuseList(html, '/news/notice', '/news/notice/info', customFetch),
|
|
1288
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/news/notice', customFetch),
|
|
1289
|
+
},
|
|
1290
|
+
{
|
|
1291
|
+
id: '국립해양유산연구소_학술지',
|
|
1292
|
+
name: '국립해양유산연구소 학술지 해양유산연구',
|
|
1293
|
+
url: 'https://www.seamuse.go.kr/resources/academiccultural/list/1',
|
|
1294
|
+
parseList: (html) => parseSeamuseList(html, '/resources/academiccultural', '/resources/academiccultural/info', customFetch),
|
|
1295
|
+
parseDetail: (html) => parseSeamuseDetail(html, '/resources/academiccultural', customFetch),
|
|
1296
|
+
},
|
|
1204
1297
|
{
|
|
1205
1298
|
id: '국립고궁박물관_공지사항',
|
|
1206
1299
|
name: '국립고궁박물관 공지사항',
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@heripo/research-radar",
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "3.
|
|
5
|
+
"version": "3.3.0",
|
|
6
6
|
"description": "AI-driven intelligence for Korean cultural heritage. This package serves as both a ready-to-use newsletter service and a practical implementation example for the LLM-Newsletter-Kit.",
|
|
7
7
|
"main": "dist/index.cjs",
|
|
8
8
|
"module": "dist/index.js",
|
|
@@ -47,12 +47,12 @@
|
|
|
47
47
|
"author": "kimhongyeon",
|
|
48
48
|
"license": "Apache-2.0",
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"@ai-sdk/anthropic": "^3.0.
|
|
51
|
-
"@ai-sdk/google": "^3.0.
|
|
52
|
-
"@ai-sdk/openai": "^3.0.
|
|
50
|
+
"@ai-sdk/anthropic": "^3.0.63",
|
|
51
|
+
"@ai-sdk/google": "^3.0.52",
|
|
52
|
+
"@ai-sdk/openai": "^3.0.47",
|
|
53
53
|
"cheerio": "^1.2.0",
|
|
54
54
|
"dompurify": "^3.3.3",
|
|
55
|
-
"jsdom": "^29.0.
|
|
55
|
+
"jsdom": "^29.0.1",
|
|
56
56
|
"juice": "^11.1.1",
|
|
57
57
|
"safe-markdown2html": "^1.0.1",
|
|
58
58
|
"turndown": "^7.2.2"
|
|
@@ -62,19 +62,19 @@
|
|
|
62
62
|
},
|
|
63
63
|
"devDependencies": {
|
|
64
64
|
"@eslint/js": "^10.0.1",
|
|
65
|
-
"@llm-newsletter-kit/core": "^1.3.
|
|
65
|
+
"@llm-newsletter-kit/core": "^1.3.8",
|
|
66
66
|
"@trivago/prettier-plugin-sort-imports": "^6.0.2",
|
|
67
67
|
"@types/express": "^5.0.6",
|
|
68
|
-
"@types/jsdom": "^28.0.
|
|
68
|
+
"@types/jsdom": "^28.0.1",
|
|
69
69
|
"@types/node": "^25.5.0",
|
|
70
70
|
"@types/turndown": "^5.0.6",
|
|
71
|
-
"eslint": "^10.0
|
|
71
|
+
"eslint": "^10.1.0",
|
|
72
72
|
"eslint-plugin-unused-imports": "^4.4.1",
|
|
73
73
|
"express": "^5.2.1",
|
|
74
74
|
"prettier": "^3.8.1",
|
|
75
75
|
"rimraf": "^6.1.3",
|
|
76
|
-
"rollup": "^4.
|
|
77
|
-
"rollup-plugin-dts": "^6.4.
|
|
76
|
+
"rollup": "^4.60.0",
|
|
77
|
+
"rollup-plugin-dts": "^6.4.1",
|
|
78
78
|
"rollup-plugin-typescript2": "^0.36.0",
|
|
79
79
|
"tsx": "^4.21.0",
|
|
80
80
|
"typescript": "^5.9.3",
|