([])
async function getTeams() {
if (!groupsId)
@@ -37,6 +38,7 @@ async function getTeams() {
name: item.Name,
icon: 'star', // Default icon
}))
+ teamIds.value = list.map((item: any) => item.Id)
}
}
finally {
@@ -57,7 +59,7 @@ function handleNext() {
function selectTeam(_id: number) {
// 选择队伍逻辑
- routerPushByKey('user_cover', { query: { activityId, groupsId, teamId: _id } })
+ routerPushByKey('user_cover', { query: { activityId, groupsId, teamId: _id, teamIds: teamIds.value.join(',') } })
}
onMounted(() => {
diff --git a/apps/admin/src/views/user/types.ts b/apps/admin/src/views/user/types.ts
index fe7b6dc..fdeaddb 100644
--- a/apps/admin/src/views/user/types.ts
+++ b/apps/admin/src/views/user/types.ts
@@ -1,3 +1,6 @@
+/**
+ * 废弃
+ */
export type UiTemplateType =
| 'TEMPLATE_DICTATION_HINT' // 汉字听写-提示 (jiu)
| 'TEMPLATE_DICTATION_HOMOPHONE' // 汉字听写-同音 (tang)
@@ -7,6 +10,17 @@ export type UiTemplateType =
| 'TEMPLATE_IDIOM_IMAGE' // 成语-看图
| 'TEMPLATE_POETRY_MULTIPLE_CHOICE' // 诗词理解-选择题
+/**
+ * 题库类型
+ */
+export type QuestionCategoryName =
+ | 'ChineseCharacterDictation' // 汉字听写-提示 (jiu)
+ | 'CharacterRadicalAddition' // 汉字加一加 (车)
+ | 'WordDictation' // 词语听写 (zhi re)
+ | 'IdiomWriting' // 成语-文字要求 (反义字)
+ // | 'TEMPLATE_IDIOM_IMAGE' // 成语-看图
+ | 'PoetryComprehension' // 诗词理解-选择题
+
export interface QuestionOption {
label: string // A, B, C
text: string // 选项文本/值
diff --git a/apps/question-importer/asset/反义词.json b/apps/question-importer/asset/反义词.json
new file mode 100644
index 0000000..37e4831
--- /dev/null
+++ b/apps/question-importer/asset/反义词.json
@@ -0,0 +1,340 @@
+{
+ "question_bank": [
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 5,
+ "Name": "请写出含有反义词的四字成语。",
+ "Answer": "深入浅出、喜怒无常、厚此薄彼、眼高手低、头重脚轻、继往开来、顾此失彼、哭笑不得、举足轻重、不相上下、悲喜交加、软硬兼施、文武双全、雅俗共赏、喜怒哀乐、恩怨分明、否极泰来、祸福相依、黑白分明、功败垂成、新陈代谢、盛衰荣辱、似是而非、此起彼伏、争先恐后、坐立不安、动静皆宜、以静制动、一动不如一静、大惊小怪、小题大做、大同小异、因小失大、大材小用、无中生有、有始无终、有勇无谋、有名无实、有眼无珠、有备无患、有恃无恐、得失参半、得不偿失、死里逃生、东张西望、左顾右盼、南辕北辙、前赴后继、里应外合、声东击西、上天入地、内忧外患、朝秦暮楚、朝令夕改、古为今用、今非昔比、早出晚归、昼伏夜出",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ }
+ ]
+}
diff --git a/apps/question-importer/asset/拼音听写.json b/apps/question-importer/asset/拼音听写.json
new file mode 100644
index 0000000..da3f23a
--- /dev/null
+++ b/apps/question-importer/asset/拼音听写.json
@@ -0,0 +1,428 @@
+{
+ "question_bank": [
+ {
+ "QuestionId": 3,
+ "Name": "chì rè",
+ "Answer": "炽热、赤热",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "hào hàn",
+ "Answer": "浩瀚、皓瀚",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "péng bó",
+ "Answer": "蓬勃、彭勃",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "cuǐ càn",
+ "Answer": "璀璨、璀粲",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "yōu yǎ",
+ "Answer": "优雅、幽雅",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "xuàn lì",
+ "Answer": "绚丽、炫丽",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "wǎn zhuǎn",
+ "Answer": "婉转、宛转",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "páng bó",
+ "Answer": "磅礴、旁礴",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "xuān nào",
+ "Answer": "喧闹、暄闹",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "yùn lǜ",
+ "Answer": "韵律、韵侓",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "diāo zhuó",
+ "Answer": "雕琢、雕斫",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "qīng cuì",
+ "Answer": "清脆、青翠",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "xiāo sè",
+ "Answer": "萧瑟、萧索",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "pú táo jiǔ",
+ "Answer": "葡萄酒",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "mǎ lù biān",
+ "Answer": "马路边",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "hú dié jié",
+ "Answer": "蝴蝶结",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "shuǐ jīng qiú",
+ "Answer": "水晶球",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "chūn tiān dào",
+ "Answer": "春天到",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "xiǎo niǎo jiào",
+ "Answer": "小鸟叫",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "huā ér xiāng",
+ "Answer": "花儿香",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "yuè liàng wān",
+ "Answer": "月亮弯",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "xīng xing shǎn",
+ "Answer": "星星闪",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "qīng wā tiào",
+ "Answer": "青蛙跳",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "zhī zhū wǎng",
+ "Answer": "蜘蛛网",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "yī bēn zhèng jīng",
+ "Answer": "一本正经",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "wǔ guāng shí sè",
+ "Answer": "五光十色",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "qī shàng bā xià",
+ "Answer": "七上八下",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "shǒu máng jiǎo luàn",
+ "Answer": "手忙脚乱",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "huā hóng liǔ lǜ",
+ "Answer": "花红柳绿",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "shān qīng shuǐ xiù",
+ "Answer": "山清水秀",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "chūn nuǎn huā kāi",
+ "Answer": "春暖花开",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "qiū gāo qì shuǎng",
+ "Answer": "秋高气爽",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "dōng nuǎn xià liáng",
+ "Answer": "冬暖夏凉",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "yuè míng xīng xī",
+ "Answer": "月明星稀",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "fēng hé rì lì",
+ "Answer": "风和日丽",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "shǔ yì",
+ "Answer": "鼠疫、署意",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "qiǎn xiǎn",
+ "Answer": "浅显、浅险",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "zhì nèn",
+ "Answer": "稚嫩、质嫩",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "sù xiàng",
+ "Answer": "塑像、素像",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "yōu xián",
+ "Answer": "悠闲、幽闲",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "hēi bǎn bǐ",
+ "Answer": "黑板笔",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "lán qiú chǎng",
+ "Answer": "篮球场",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "yóu yǒng chí",
+ "Answer": "游泳池",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "tú shū guǎn",
+ "Answer": "图书馆",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "diàn yǐng yuàn",
+ "Answer": "电影院",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "rén shān rén hǎi",
+ "Answer": "人山人海",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "wàn zǐ qiān hóng",
+ "Answer": "万紫千红",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "qiān biàn wàn huà",
+ "Answer": "千变万化",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "wú biān wú jì",
+ "Answer": "无边无际",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "bǎi huā qí fàng",
+ "Answer": "百花齐放",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "bǎi nián shù rén",
+ "Answer": "百年树人",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "qiān chuí bǎi liàn",
+ "Answer": "千锤百炼",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 3,
+ "Name": "wàn lǐ cháng chéng",
+ "Answer": "万里长城",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ }
+ ]
+}
diff --git a/apps/question-importer/asset/拼音听写2.json b/apps/question-importer/asset/拼音听写2.json
new file mode 100644
index 0000000..6e27d64
--- /dev/null
+++ b/apps/question-importer/asset/拼音听写2.json
@@ -0,0 +1,460 @@
+{
+ "question_bank": [
+ {
+ "QuestionId": 27,
+ "Name": "liú 表示姓名",
+ "Answer": "刘,牛",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "zhāng 表示姓氏",
+ "Answer": "张,章",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "wáng 表示姓氏",
+ "Answer": "王",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "lǐ 表示姓氏",
+ "Answer": "李,里",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "chén 表示姓氏",
+ "Answer": "陈,晨",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "yáng 表示动物",
+ "Answer": "羊,杨",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "mǎ 表示动物",
+ "Answer": "马,码",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "niǎo 表示动物",
+ "Answer": "鸟",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "yú 表示动物",
+ "Answer": "鱼,于",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "gǒu 表示动物",
+ "Answer": "狗",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "huā 表示植物",
+ "Answer": "花,华",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "shù 表示植物",
+ "Answer": "树,数",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "cǎo 表示植物",
+ "Answer": "草,操",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "guǒ 表示植物",
+ "Answer": "果",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "yè 表示植物",
+ "Answer": "叶,页",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "shuǐ 表示自然元素",
+ "Answer": "水",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "huǒ 表示自然元素",
+ "Answer": "火",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "tǔ 表示自然元素",
+ "Answer": "土",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "jīn 表示自然元素",
+ "Answer": "金,今",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "mù 表示自然元素",
+ "Answer": "木,目",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "tiān 表示自然",
+ "Answer": "天,田",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "dì 表示自然",
+ "Answer": "地,第",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "shān 表示自然",
+ "Answer": "山,杉",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "chuān 表示自然",
+ "Answer": "川,穿",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "hé 表示自然",
+ "Answer": "河,和",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "rén 表示人类",
+ "Answer": "人,仁",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "kǒu 表示身体",
+ "Answer": "口",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "shǒu 表示身体",
+ "Answer": "手,首",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "zú 表示身体",
+ "Answer": "足,族",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "mù 表示身体",
+ "Answer": "目,木",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "ěr 表示身体",
+ "Answer": "耳,尔",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "bǐ 表示身体",
+ "Answer": "鼻,比",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "shé 表示身体",
+ "Answer": "舌",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "yá 表示身体",
+ "Answer": "牙,芽",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "xīn 表示身体",
+ "Answer": "心,新",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "gān 表示身体",
+ "Answer": "肝,干",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "chī 表示动作",
+ "Answer": "吃",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "hē 表示动作",
+ "Answer": "喝",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "zǒu 表示动作",
+ "Answer": "走",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "pǎo 表示动作",
+ "Answer": "跑",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "tiào 表示动作",
+ "Answer": "跳",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "kàn 表示动作",
+ "Answer": "看",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "tīng 表示动作",
+ "Answer": "听",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "shuō 表示动作",
+ "Answer": "说",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "dú 表示动作",
+ "Answer": "读",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "xiě 表示动作",
+ "Answer": "写",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "huà 表示动作",
+ "Answer": "画,话",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "yī 表示数字",
+ "Answer": "一",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "èr 表示数字",
+ "Answer": "二",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "sān 表示数字",
+ "Answer": "三",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "sì 表示数字",
+ "Answer": "四",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "wǔ 表示数字",
+ "Answer": "五",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "liù 表示数字",
+ "Answer": "六",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "qī 表示数字",
+ "Answer": "七",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "bā 表示数字",
+ "Answer": "八",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "jiǔ 表示数字",
+ "Answer": "九",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 27,
+ "Name": "shí 表示数字",
+ "Answer": "十,石",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ }
+ ]
+}
diff --git a/apps/question-importer/asset/根据偏旁写汉字.json b/apps/question-importer/asset/根据偏旁写汉字.json
new file mode 100644
index 0000000..eb9c34d
--- /dev/null
+++ b/apps/question-importer/asset/根据偏旁写汉字.json
@@ -0,0 +1,468 @@
+{
+ "question_bank": [
+ {
+ "QuestionId": 2,
+ "Name": "车",
+ "Answer": "辆、轼、转、软、轮、辐、输、轨、轩、轻、轺、辐、轴、轷、轱、辊、辎、轺、轸、辋、轳、轼、辘、辔、斩、连、阵、军、轰、库、辗、载、辈、晕、轳",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "木",
+ "Answer": "林、森、树、枝、柱、板、柜、桌、椅、楼、桥、村、材、松、柏、杨、柳、梅、李、杏、桃、梨、棋、格、栋、梁、架、根、植、森、杉、枯、朽、荣、荣、相、查、样、标、校、核、桃、根、株、椅、架、械、植、棚、橙",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "水",
+ "Answer": "冰、泉、泵、尿、沓、沝、淼、氼、沝、沯、沝、沯、沀、汆、氽、汞、沗、沓、汖、沯、沊、沝、沯、氼、沝、沓、沯、泵、沓、沗、沯、氼、沝、沓、沯、氼、沝、沓、沯、氼、沝、沓",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "火",
+ "Answer": "炎、焱、燚、灭、灰、灯、灶、灿、灼、灾、灵、灸、炒、炊、炕、炉、炖、炙、炬、炮、炸、烤、烧、烟、烫、烽、焰、焚、煤、煌、煲、熨、燎、燃、燥、爆、烁、炉、炊、炕、灶",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "口",
+ "Answer": "品、吕、回、日、田、申、甲、由、电、里、困、围、囚、图、圆、国、固、因、团、园、图、园、困、圆、囡、因、围、囟、囝、回、囧、囹、固、图、囿、圃、圄、圉、圈、圜、圆、园、围、困、图、国、园",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "日",
+ "Answer": "旦、早、旭、旮、旯、时、旷、旺、昨、昭、映、昧、是、显、星、春、昧、晓、晃、晌、晷、晨、晚、晾、晴、晶、晸、暑、暄、暗、暖、暇、暝、暴、暮、暾、曛、曜、曝、曦、曩、日",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "月",
+ "Answer": "朋、明、阴、朝、朗、期、朦、胧、肤、肥、服、胡、有、背、胃、胆、肝、肚、肠、肺、肢、肿、胀、腰、脚、腿、膀、臂、膝、脑、胖、脸、脐、胜、脉、胸、脊、育、背、胡",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "心",
+ "Answer": "必、志、忍、忌、忘、闷、忐、忑、忠、念、忽、思、怠、怎、怨、急、总、恶、恩、息、恳、恁、恋、恐、恕、悲、慈、意、感、想、愈、愿、慧、慰、憋、憨、憩、懋、懿、忒、忐、忑",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "手",
+ "Answer": "拜、掰、拿、拳、掌、掰、掱、摩、摹、擎、攀、挚、挛、挚、挲、撵、撅、撷、撺、擀、擘、擂、擞、攒、攉、攫、攥、攴、攵、收、改、攻、放、政、故、效、敏、救、教、败、敌、救",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "人",
+ "Answer": "从、众、今、介、以、令、全、会、合、企、余、伞、命、舍、拿、盒、盆、盒、拿、龛、介、仓、个、仄、以、令、全、会、企、众、从、介、以、令、全、会、合、企、余、伞、命",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "言",
+ "Answer": "信、誓、警、誉、詹、計、討、訓、記、訪、評、註、証、詠、試、詩、話、誠、誼、誤、說、読、課、調、談、請、論、諭、諦、諮、諸、諾、謀、謁、謂、謄、謎、謙、講、謝、謠、謬、謹、識、譜、議、護、譽、變",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "金",
+ "Answer": "鑫、针、钉、钏、钓、钒、钗、钙、钚、钛、钝、钞、钟、钢、钤、钥、钦、钧、钩、钫、钬、钯、钮、钰、钱、钳、钻、钿、钾、铀、铁、铂、铃、铅、铆、铊、铋、铌、铍、铎、铐、铑、铒、铕、铗、铘、铙、铚、铛",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "石",
+ "Answer": "岩、矿、码、砂、研、砖、砌、砍、泵、硬、破、砸、础、硅、硕、确、碑、碗、碟、碾、磕、磁、磅、磨、磷、磺、礁、础、碣、碲、碴、碹、碳、碣、磬、磲、磴、磷、磺、礁",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "山",
+ "Answer": "岁、岭、岩、岳、岸、峰、峡、峻、崇、崎、崖、岗、崩、崭、嵌、嵘、崽、巅、巍、岚、岔、岖、岈、岘、岙、岑、岔、岗、岵、岷、岽、岿、峁、峄、峋、峥、峦、峙、峡、峤、峦",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "土",
+ "Answer": "圭、垚、尘、地、场、址、块、坐、垃、坡、坦、坤、坻、坯、坪、坳、坷、坩、坫、坭、坳、垆、垌、垍、垓、垠、垩、垭、垯、垲、垴、垸、埂、埋、城、埔、域、埏、埕、埘、埙、埚、埝、埤、埭、埯、埸、培、基",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "马",
+ "Answer": "冯、驭、驮、驯、驰、驱、驳、驴、驶、驷、驸、驹、驻、驼、驿、驽、驾、骂、骁、骄、骆、骇、骈、骊、骋、验、骏、骐、骑、骒、骓、骖、骗、骚、骛、骜、骝、骞、骟、骠、骡、骢、骣、骤、骥、骧、骊",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "鸟",
+ "Answer": "鸡、鸣、鸥、鸦、鸭、鸯、鸳、鸽、鸾、鸿、鹃、鹅、鹑、鹉、鹊、鹋、鹛、鹜、鹞、鹣、鹤、鹦、鹬、鹰、鹭、鹳、鹬、鸤、鸧、鸨、鸩、鸪、鸫、鸬、鸭、鸮、鸯、鸰、鸱、鸲、鸴、鸵、鸶、鸷、鸸、鸹、鸺、鸼、鸽",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "鱼",
+ "Answer": "鱻、渔、鲁、鲂、鲅、鲍、鲈、鲇、鲋、鲎、鲐、鲑、鲒、鲔、鲕、鲚、鲛、鲜、鲞、鲟、鲠、鲤、鲥、鲦、鲧、鲨、鲩、鲫、鲭、鲮、鲰、鲱、鲲、鲳、鲵、鲶、鲷、鲺、鲻、鲽、鲾、鳀、鳁、鳂、鳃、鳄、鳅、鳆、鳇",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "虫",
+ "Answer": "虬、虮、虱、虹、虾、蚁、蚂、蚕、蛊、蛄、蛆、蛇、蛉、蛋、蛎、蛏、蛐、蛑、蛓、蛔、蛙、蛛、蛞、蛟、蛩、蛭、蛮、蛱、蛲、蛳、蛴、蛸、蛹、蛺、蛾、蜂、蜃、蜇、蜈、蜉、蜊、蜍、蜒、蜓、蜕、蜗、蜘、蜜",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "竹",
+ "Answer": "竿、竽、笃、笄、笆、笈、笋、笊、笏、笕、笔、笑、笤、笥、符、笨、笪、笫、第、笮、笱、笳、笸、笺、笼、笾、筇、筌、筎、筘、筚、筛、筜、筝、筠、筢、筮、筱、筲、筵、筷、筹、筻、签、简、箐、箜、箐、箓",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "禾",
+ "Answer": "利、秃、秀、私、秉、秆、秄、秈、秕、种、科、秒、秭、秣、秤、秦、秧、秩、租、秫、秸、秽、移、税、稚、稠、稂、稃、程、稆、稍、稔、稗、稞、稟、稠、稳、稷、稻、稼、稽、稿、穆、穑、穗、穰、穸、穻",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "米",
+ "Answer": "类、籽、粉、粒、粕、粗、粘、粟、粜、粝、粞、粳、粢、粤、粥、粲、粱、粮、粹、精、粽、糊、糁、糅、糕、糖、糙、糜、糗、糟、糠、糯、糨、糁、糇、糈、糌、糍、糈、糍、糌、糍",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "纟",
+ "Answer": "纠、红、纤、纡、约、级、纨、纪、纫、纬、纭、纯、纰、纱、纲、纳、纵、纶、纷、纸、纹、纺、纻、纽、纾、线、绀、绁、绂、练、组、绅、细、织、终、绉、绊、绋、绌、绍、绎、经、绐、绑、绒、结、绔、绕",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "贝",
+ "Answer": "贞、负、贡、财、责、贤、败、账、货、质、贩、贪、贫、贬、购、贮、贯、贰、贱、贲、贵、贶、贷、贸、费、贺、贻、贼、贽、贾、贿、贳、赁、赂、赃、资、赅、赆、赇、赈、赉、赊、赋、赌、赎、赏、赐、赑、赒",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "王",
+ "Answer": "玉、全、主、弄、玌、玎、玑、玕、玖、玛、玟、玢、环、玩、玮、玲、玳、玷、玻、珊、珍、珑、珈、珉、玻、珠、珐、珙、珞、珥、珧、珩、珲、珺、琀、琊、琏、琐、琚、琛、琨、琬、琮、琰、琯、琳、琴、琵",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "走",
+ "Answer": "赴、赵、赶、起、趁、趋、超、越、趄、趔、趑、趣、趟、趠、趡、趤、趦、趪、趫、趬、趭、趮、趯、趱、赶、起、越、超、趋、趁、趣、趟、趔、趑、趠、趡、趤、趦、趪、趫、趬、趭、趮、趯、趱",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "足",
+ "Answer": "趴、趵、趸、趿、跃、跄、跆、跋、跌、跎、跑、跖、跚、跛、距、跣、跨、跪、路、跳、践、跶、跷、跸、跹、跺、跻、跽、踅、踉、踊、踌、踏、踔、踝、踞、踟、踣、踦、踧、踱、踵、踶、踹、踺、踽、蹀、蹁",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "页",
+ "Answer": "顶、顷、顸、项、顺、须、顼、顽、顾、顿、颁、颂、颃、预、颅、领、颈、颉、颊、颋、颌、颍、颎、颏、颐、频、颓、颔、颖、颗、题、颙、颚、颛、颜、额、颞、颟、颠、颡、颢、颤、颥、颦、颧、顸、项",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "酉",
+ "Answer": "酒、配、酊、酋、酌、酎、酏、酐、酑、酒、酓、酕、酖、酗、酙、酚、酝、酞、酡、酢、酣、酤、酥、酬、酪、酮、酯、酰、酱、酲、酴、酵、酶、酷、酸、酹、酺、酽、酾、酿、醁、醅、醇、醉、醋、醌、醍、醐",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "艹",
+ "Answer": "艺、艾、节、芋、芍、芒、芝、芄、芑、芗、芎、芋、芌、芏、芐、芑、芊、芕、芗、芘、芙、芜、芝、芟、芡、芣、芤、芥、芦、芩、芪、芫、芬、芭、芮、芯、芰、花、芳、芷、芸、芹、芺、芽、苇、苋、苌、苍",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "宀",
+ "Answer": "字、安、宋、完、宏、牢、灾、宝、宗、定、宕、宠、宜、审、官、宛、实、宓、宣、宦、室、宫、宪、客、害、宽、家、宵、宴、宾、宰、案、容、宿、寂、寄、密、寇、富、寐、寒、寓、寞、寝、寤、寥、察、寡、寮",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "阝(左)",
+ "Answer": "队、阡、阪、阮、阱、防、阳、阴、阶、阻、阿、陀、陂、附、际、陆、陇、陈、陉、陕、降、限、陡、院、除、险、陪、陵、陶、陷、隍、隘、隙、障、隧、隗、隰、隳、陇、陈、陂、陉、陕、陇、陔、陖、陗、陘、陙",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "阝(右)",
+ "Answer": "邓、邗、邛、邝、邡、邢、邬、邰、邱、邳、邴、邵、邶、邸、邹、邺、邻、郏、郅、郇、郓、郕、郗、郜、郝、郡、郢、郦、郫、郭、郯、郴、郸、都、郾、郿、鄄、鄅、鄌、鄑、鄗、鄘、鄚、鄢、鄣、鄯、鄱、鄹",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "⻊",
+ "Answer": "路、跑、跳、踏、踩、踢、跪、跟、跨、蹦、蹈、蹭、踮、蹲、跃、跚、踉、跷、踌、踝、踞、踣、踧、踱、踵、踶、踹、踺、蹀、蹁、蹂、蹄、蹅、蹇、蹈、蹊、蹉、蹋、蹑、蹒、蹓、蹔、蹕、蹙、蹟、蹠、蹡、蹢",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "彳",
+ "Answer": "行、往、征、彼、径、待、徂、徉、很、徇、徕、徒、徐、得、徘、徙、徜、徨、循、微、徳、徴、徯、徭、微、徼、徽、彷、役、彻、佛、征、徂、徉、徊、律、後、徐、徒、得、徘、徙、徕、循、徨、微、徳、徵",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "犭",
+ "Answer": "犯、犰、犴、犷、犸、犹、狈、狂、狄、狁、狉、狎、狐、狝、狗、狙、狞、狟、狠、狡、狩、独、狭、狮、狯、狰、狱、狲、狳、狴、狺、狼、猁、狻、猃、猇、猓、猕、猖、猗、猘、猛、猜、猝、猞、猡、猢、猥",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "⺮",
+ "Answer": "竹、竿、竽、笃、笄、笆、笈、笋、笊、笏、笕、笔、笑、笤、笥、符、笨、笪、笫、第、笮、笱、笳、笸、笺、笼、笾、筇、筌、筎、筘、筚、筛、筜、筝、筠、筢、筮、筱、筲、筵、筷、筹、筻、签、简、箐、箜",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "女",
+ "Answer": "奶、奴、奸、她、好、如、妃、妄、妆、妇、妈、妍、妩、妓、妪、妒、妨、妞、妯、妲、妹、妻、妾、姆、始、姓、委、姗、妮、妯、妲、妹、妻、妾、姆、始、姓、委、姗、妮、姚、姜、姝、姣、姨、姻、姿、威",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "子",
+ "Answer": "孔、孕、存、孙、孜、孝、孟、季、孤、孢、孩、孺、孛、孥、学、孨、孪、孬、孭、孮、孯、孰、孱、孳、孵、孶、孷、孹、孻、孼、孽、孾、孿、孔、孕、存、孙、孜、孝、孟、季、孤、孢、孩、孺、孛、孥",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "⻌",
+ "Answer": "边、辽、达、过、迈、迁、迅、迄、巡、进、远、违、连、迟、迢、迤、迥、迦、迨、迪、迭、迮、述、迳、迫、迺、追、逅、适、逃、逄、逈、逋、通、逛、逝、逞、速、造、透、逐、逑、递、逖、逗、逦、逡、週",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "⺮",
+ "Answer": "竹、竿、竽、笃、笄、笆、笈、笋、笊、笏、笕、笔、笑、笤、笥、符、笨、笪、笫、第、笮、笱、笳、笸、笺、笼、笾、筇、筌、筎、筘、筚、筛、筜、筝、筠、筢、筮、筱、筲、筵、筷、筹、筻、签、简、箐、箜",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "扌",
+ "Answer": "扎、打、扑、扒、扔、扛、扣、托、执、扩、扫、扬、扶、抚、技、抠、扰、扼、拒、找、批、扯、抄、折、抓、扳、抡、扮、抢、抑、抛、投、抗、抖、护、扭、把、报、拟、抒、抻、抵、抹、抻、押、抽、抿、拂",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "氵",
+ "Answer": "汁、汀、汇、汉、污、江、汛、池、汤、汪、沛、沤、沥、沦、汹、沧、沨、沟、没、沏、沔、沙、汽、沃、沂、汹、泛、沧、沩、沪、沉、沈、沁、泐、沫、浅、法、沽、河、沾、泪、沮、油、泱、泳、泞、泻、泼",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "忄",
+ "Answer": "忆、忙、忖、忏、忉、忧、忋、快、忓、忔、忕、忡、忤、忪、怅、怆、怊、怍、怏、怑、怗、怙、怛、怕、怫、怦、性、怩、怪、怫、怿、恁、恂、恃、恬、恌、恑、恒、恢、恍、恓、恘、恚、恝、恟、恠、恡、恫",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "灬",
+ "Answer": "点、烈、热、烹、焦、然、煎、照、熙、熊、熏、熟、熹、熬、热、熏、熈、熟、熹、熏、燮、爇、爢、爣、爤、爥、爦、爧、爨、爩、点、烈、热、烹、焦、然、煎、照、熙、熊、熏、熟、熹、熬、热、熏",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "刂",
+ "Answer": "刊、刑、划、刈、刍、创、刚、列、刘、则、删、判、别、刭、刮、到、刳、制、刷、刹、刺、刻、刽、刿、剀、剁、剂、剃、削、剌、前、剐、剑、剔、剖、剥、剧、剩、割、剡、剞、剟、剡、剣、剥、剧、剩、割",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "礻",
+ "Answer": "礼、社、祀、祁、祃、祅、祆、祇、祈、祉、祊、祋、祌、祍、祎、祏、祐、祑、祒、祓、祔、祕、祖、祗、祚、祛、祜、祝、神、祟、祠、祢、祥、祷、祸、祺、祼、祾、禄、禅、禊、禋、福、禔、禕、禖、禘、禚",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "钅",
+ "Answer": "针、钉、钌、钋、钊、钏、钒、钓、钗、钙、钚、钛、钝、钞、钟、钠、钡、钢、钤、钥、钦、钧、钨、钩、钪、钫、钬、钭、钮、钯、钰、钱、钲、钳、钴、钵、钶、钷、钸、钹、钺、钻、钼、钽、钾、钿、铀、铁",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "冫",
+ "Answer": "冰、冯、冮、冲、决、冴、冻、况、冷、冶、冹、冺、净、冽、冾、冿、净、凂、凃、凄、凅、准、凇、凉、凊、凋、凌、凍、凓、凔、凕、凖、凗、凘、凚、凛、凝、凞、凟、冰、冯、冮、冲、决、冴、冻、况",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "疒",
+ "Answer": "疗、疖、疟、疠、疡、疣、疤、疥、疫、疰、疱、疲、疳、疴、疵、疸、疹、疼、疽、疾、痂、痃、痄、病、症、痈、痉、痒、痔、痕、痖、痘、痛、痞、痤、痦、痧、痪、痫、痬、痭、痮、痯、痰、痱、痴、痹、瘁",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "衤",
+ "Answer": "补、衩、衫、衬、衱、衲、衽、衿、袂、袄、袆、袈、袋、袍、袢、袜、袤、被、袪、袷、袺、裆、裈、裉、裎、裒、裓、裕、裨、裰、裱、裳、裴、裸、裹、裼、製、裾、褂、褊、褐、褓、褙、褛、褥、褪、褫、褰",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "饣",
+ "Answer": "饥、饦、饧、饨、饭、饮、饫、饪、饬、饲、饯、饰、饱、饴、饵、饶、饷、饸、饹、饺、饻、饼、饽、饾、饿、馀、馁、馃、馄、馅、馆、馇、馈、馉、馊、馋、馌、馍、馏、馐、馑、馒、馓、馔、馕、饥、饦",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "⻏",
+ "Answer": "邦、邪、邨、邬、邴、邵、邰、邳、邱、邶、邸、邹、邺、邻、郏、郅、郇、郓、郕、郗、郜、郝、郢、郦、郫、郭、郯、郴、郸、都、郾、郿、鄄、鄅、鄌、鄑、鄗、鄘、鄚、鄢、鄣、鄯、鄱、鄹、邛、邝",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "纟",
+ "Answer": "纠、红、纤、纡、约、级、纨、纪、纫、纬、纭、纯、纰、纱、纲、纳、纵、纶、纷、纸、纹、纺、纻、纽、纾、线、绀、绁、绂、练、组、绅、细、织、终、绉、绊、绋、绌、绍、绎、经、绐、绑、绒、结、绔、绕",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "罒",
+ "Answer": "罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥、罦、罨、罭、罯、罱、罳、罴、罶、罽、罾、罿、羁、羂、羃、羅、羆、羇、羈、羉、罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "虍",
+ "Answer": "虎、虏、虐、虑、虔、虚、虞、虢、虣、虤、虥、虦、亏、虩、虪、虎、虏、虐、虑、虔、虚、虞、虢、虣、虤、虥、虦、亏、虩、虪、虎、虏、虐、虑、虔、虚、虞、虢、虣、虤、虥、虦、亏、虩、虪",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "辶",
+ "Answer": "边、辽、达、过、迈、迁、迅、迄、巡、进、远、违、连、迟、迢、迤、迥、迦、迨、迪、迭、迮、述、迳、迫、迺、追、逅、适、逃、逄、逈、逋、通、逛、逝、逞、速、造、透、逐、逑、递、逖、逗、逦、逡、週",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 2,
+ "Name": "罒",
+ "Answer": "罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥、罦、罨、罭、罯、罱、罳、罴、罶、罽、罾、罿、羁、羂、羃、羅、羆、羇、羈、羉、罗、罚、罢、罩、罪、置、署、罹、罘、罝、罟、罡、罣、罥",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ }
+ ]
+}
diff --git a/apps/question-importer/asset/词语听写.json b/apps/question-importer/asset/词语听写.json
new file mode 100644
index 0000000..ff9df03
--- /dev/null
+++ b/apps/question-importer/asset/词语听写.json
@@ -0,0 +1,452 @@
+{
+ "question_bank": [
+ {
+ "QuestionId": 4,
+ "Name": "Jú",
+ "Answer": "巨、且、句、讵、郏、苣、姖、岠、局、拒、拠、洰、汩、车、具、冣、莒、弆、呿、駶、狙、岨、居、拘、拀、淗、湨、澽、忂、炬、柜、歫、昛、歫、举、佝、茮、柩、罝、珇、秬、矩、剧、陱、俱、伹、伿、挶、栨、椇、椐、椈、歫、毩、毱、疽、痀、眗、砠、租、窭、筥、篓、簴、籧、粔、罝、耟、聥、腒、艍、苴、莒、蒟、蘮、虡、蜛、螶、袓、襷、詎、諊、豦、貗、趄、跔、跙、踘、躆、躹、輂、邭、鄓、郹、鄅、鉅、鋸、鐻、閰、陱、雎、颶、駏、駒、駶、驧、髃、鴂、鴃、鵙、鵴、鶋、鼁、鼳",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuē",
+ "Answer": "薛、靴、削、噱、学、穴、乴、峃、嶨、斈、泶、澩、燢、膤、茓、袕、觷、辥、辪、鞾、鳕、鷽、鸴、踅、謔、噱、燢、谑、疶、疨、蒆、辥、鞾、髇、髐、魈、嚻、噰、斅、斆、燢、爚、狘、瞲、籱、蠦、蠸、觷、諔、譃、谑、谔、谻、豰、貜、趞、踅、躞、遯、遪、郺、鄏、鄻、酄、鍌、鎑、鐍、闅、隟、雤、鞾、韕、顨、饇、騔、驜、鱊、鱮、鷍、鷢、鸙、麧、龤",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Yuè",
+ "Answer": "月、悦、阅、越、岳、跃、粤、钺、栎、樾、刖、哕、妜、岄、恱、悅、戉、抈、捳、曱、枂、櫟、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、説、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Qū",
+ "Answer": "区、曲、屈、趋、驱、躯、蛆、祛、麴、诎、岖、阹、憈、敺、斪、欋、氍、焌、煀、璖、癯、磲、筁、籧、粬、紶、翑、胠、臞、菃、蕖、蘧、蛐、蠷、衐、袪、覰、覷、詘、趨、躣、軀、軥、迲、遽、釻、鐻、阹、駆、駈、騶、驅、鰸、鱋、麯、麴、鼩、齲",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuó",
+ "Answer": "着、卓、灼、浊、琢、酌、啄、斫、茁、倬、诼、禚、浞、涿、濯、焯、禚、窡、籗、籱、缴、罬、蠗、諑、謶、趠、踔、蹠、躅、鉵、鐯、鐲、鵫、鷟、鸐、斀、斲、斵、晫、椓、槕、櫡、汋、淖、灂、炪、灼、烵、犳、琸、矠",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Cuì",
+ "Answer": "翠、脆、粹、萃、悴、淬、毳、瘁、粹、竁、粋、紣、綷、翆、脃、膵、臎、襊、鏙、隹、顇、伜、倅、啐、崒、崪、忰、慛、椊、焠、璲、疩、皠、磪、竁、粋、縗、紣、翆、脺、膬、臎、襊、趡、鏙、顇、鷻",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Juàn",
+ "Answer": "卷、倦、眷、绢、隽、桊、狷、鄄、绢、睠、絭、縳、罥、羂、讂、踡、錈、鎸、鐫、韏、飬、餋、鵑、鷢、奆、姢、帣、悁、惓、慻、捲、梋、棬、泫、淃、焆、獧、瓹",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuǎn",
+ "Answer": "选、宣、悬、旋、玄、绚、轩、喧、渲、璇、煊、谖、萱、暄、儇、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhàn",
+ "Answer": "战、站、占、绽、栈、湛、蘸、颤、佔、偡、嶘、战、戰、搌、栈、棧、椾、榐、橏、欃、湔、湛、澶、灒、琖、皽、碊、站、綻、菚、蘸、虥、袒、襢、覱、詀、謙、譧、譫、趈、蹍、躔、輚、轏、邅、醆、鉆、鋑、鏨、饘、驏、驙、鱣、鸇",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Niè",
+ "Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Suì",
+ "Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Yuān",
+ "Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Chuò",
+ "Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Qì",
+ "Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xùn",
+ "Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuì",
+ "Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Cuàn",
+ "Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Juē",
+ "Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuè",
+ "Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuān",
+ "Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Qióng",
+ "Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Yuè",
+ "Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Chuàng",
+ "Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuān",
+ "Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuì",
+ "Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Niè",
+ "Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Suì",
+ "Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Yuān",
+ "Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Chuò",
+ "Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Qì",
+ "Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xùn",
+ "Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuì",
+ "Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Cuàn",
+ "Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Juē",
+ "Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuè",
+ "Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuān",
+ "Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Qióng",
+ "Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Yuè",
+ "Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Chuàng",
+ "Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuān",
+ "Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuì",
+ "Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、队、隧、膇、諈、贅、鑆、墜",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Niè",
+ "Answer": "聂、涅、孽、啮、嗫、镊、蹑、陧、臬、乜、枿、槷、櫱、氼、湼、疌、痆、篞、籋、糱、糵、聂、臲、苶、菍、蘖、蠥、讘、踂、踗、踙、躡、鉩、銸、鋷、錜、鎳、鑈、闑、隉、顳、齧、齧、囁、囐、嚙、囓、孼、嵲、巕、帇、惗、敜、枿、槷、櫱、痆",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Suì",
+ "Answer": "岁、遂、碎、穗、隧、祟、燧、谇、邃、睟、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭、穂、襚、旞、繐、繸、譢、賥、遀、鏸、鐆、鐩、韢、髄、髓、穟、禭",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Yuān",
+ "Answer": "渊、冤、鸳、鸢、眢、蜎、箢、肙、悁、棩、渁、渆、渕、淵、灁、鵷、鶢、鼘、鼝、囦、寃、怨、惌、棩、渕、淵、盶、眢、笎、蒬、蜎、裷、裫、駌、鳶、鴛、鼘、鼝",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Chuò",
+ "Answer": "辍、绰、戳、啜、龊、辵、娖、婥、婼、惙、擉、歠、涰、淖、磭、篧、綴、繛、缀、腏、荃、蔟、趠、踔、踱、輟、辶、逴、酫、鑡、齪、齱、吷、啜、嚽、婥、婼、惙、擉、歠、涰",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Qì",
+ "Answer": "气、器、弃、泣、契、砌、迄、汽、憩、葺、讫、沏、亟、呮、咠、唭、噐、埴、夡、忔、憇、栔、槭、欫、気、汔、洓、湆、滊、炁、焏、甈、甓、盵、矵、碛、磜、磧、碶、磩、礘、竐、綥、綮、緀、緝、罊、翜、聺、臮、艩、芞、藒、蟿、訖、趞、跂、踦、迉、郪、釮、錡、闙、霼、鯚、鶺、鼜、齌",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xùn",
+ "Answer": "迅、讯、训、逊、汛、殉、徇、巽、浚、逊、噀、嚑、坃、塤、壦、奞、愻、揗、攳、栒、楥、橁、殾、毥、汛、浚、潠、濬、灥、煇、燅、狥、珣、璕、畃、皨、瞓、矄、稄、筍、箰、篔、紃、絢、纁、臐、荨、蕈、薫、蘍、蟫、訊、訓、訙、訬、賐、迿、遜、鄩、鑂、鑫、雋、馴、駨、鱘、鱏",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuì",
+ "Answer": "坠、赘、缀、惴、缒、甀、畷、礈、笍、綴、縋、膇、諈、贅、轛、鑆、坠、隊、隧、膇、諈、贅、鑆、墜",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Cuàn",
+ "Answer": "窜、篡、爨、殩、熶、簒、竄、篡、镩、躥、攛、爨、殩、熶、簒、竄、篡、镩、躥、攛",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Juē",
+ "Answer": "撅、噘、屩、亅、孒、孓、屫、撅、撧、欮、決、氒、決、泬、潏、灍、玦、玨、璚、疦、瘚、絕、绝、芵、蕝、蕨、蚗、蟨、觖、觼、诀、譎、貜、赽、趹、蹶、蹷、逫、鈌、鐍、鐝、钁、駃、鴂、鴃、鷢、龣",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuè",
+ "Answer": "血、谑、穴、泬、狘、桖、烕、瞲、趐、轐、轌、鉥、瀥、粵、蘥、謔、谑、趐、轐、轌、鉥",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Zhuān",
+ "Answer": "专、砖、转、颛、啭、堟、塼、嫥、専、甎、磚、竱、籑、蒃、蟤、諯、転、轉、鄟、顓、鱄",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Qióng",
+ "Answer": "穷、琼、穹、邛、茕、筇、銎、儝、卭、嬛、憌、桏、橩、焭、焪、煢、熍、琁、璚、瓊、睘、瞏、穷、竆、笻、窮、藑、藭、蛩、蛬、赹、趜、跫、銎、顈、",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Yuè",
+ "Answer": "月、乐、越、跃、岳、悦、阅、粤、钥、栎、樾、戉、抈、岄、岳、恱、悅、戉、抈、枂、栎、樾、泧、瀹、爚、狘、玥、礿、禴、籆、籥、粤、臒、蘥、蚎、蚏、蛻、蠖、說、趯、跀、跃、軏、鈅、鉞、銳、銳、閱、閲、髺、鸑、鸙、黦",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Chuàng",
+ "Answer": "创、怆、刱、剏、剙、愴、摐、牎、牕、瘡、窓、窗、蔥、闖、戧、摐、牎、牕、瘡、窓、窗、蔥、闖、戧",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 4,
+ "Name": "Xuān",
+ "Answer": "宣、轩、喧、萱、暄、煊、儇、谖、塇、媗、愃、揎、昍、晅、暅、楦、泫、洵、炫、烜、煊、玹、琄、癣、矎、禤、箮、翾、縼、繏、翧、蝖、蠉、諠、諼、讂、谖、鉉、鏇、鞙、韗、饌、駨、駽、鰚、鶱",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ }
+ ]
+}
diff --git a/apps/question-importer/asset/诗词听写.json b/apps/question-importer/asset/诗词听写.json
new file mode 100644
index 0000000..c707582
--- /dev/null
+++ b/apps/question-importer/asset/诗词听写.json
@@ -0,0 +1,460 @@
+{
+ "question_bank": [
+ {
+ "QuestionId": 28,
+ "Name": "《闻王昌龄左迁龙标遥有此寄》中,\"左迁\"的意思是( )。
A.贬官,降职 B.搬家 C.一路向西游玩
",
+ "Answer": "A",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李白《行路难》中\"金樽清酒斗十千\"的\"斗十千\"意思是( )。
A.十千斗酒 B.一斗值十千钱 C.酒的名字
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "杜甫《春望》中\"烽火连三月\"的\"烽火\"指代( )。
A.烟火 B.战争 C.篝火
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王维《使至塞上》\"大漠孤烟直\"中\"孤烟\"指的是( )。
A.炊烟 B.沙尘暴 C.烽火台的狼烟
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李商隐《无题》中\"青鸟殷勤为探看\"的\"青鸟\"象征( )。
A.爱情鸟 B.神鸟 C.信使
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "白居易《琵琶行》\"千呼万唤始出来\"描绘的是( )。
A.等待很久 B.反复呼唤 C.琵琶女出场时的羞涩
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "苏轼《水调歌头》\"明月几时有\"表达了作者( )。
A.询问月亮出现时间 B.单纯的写景 C.对人生的哲理思考
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "辛弃疾《青玉案·元夕》\"众里寻他千百度\"的\"度\"意思是( )。
A.度过 B.温度 C.次,回
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李清照《声声慢》\"乍暖还寒时候\"描写的是( )。
A.冷暖交替 B.心情变化 C.初春天气变化无常
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王勃《滕王阁序》\"落霞与孤鹜齐飞\"中\"鹜\"指的是( )。
A.大雁 B.天鹅 C.野鸭
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "范仲淹《岳阳楼记》\"先天下之忧而忧\"体现了作者的( )。
A.个人忧愁 B.家庭烦恼 C.忧国忧民情怀
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "陶渊明《饮酒》\"采菊东篱下\"表达了作者( )。
A.喜欢菊花 B.劳动场景 C.归隐田园的闲适
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "杜牧《泊秦淮》\"商女不知亡国恨\"的\"商女\"指( )。
A.商人女儿 B.商朝女子 C.歌女
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "陆游《示儿》\"王师北定中原日\"的\"王师\"指( )。
A.王者之师 B.王家的老师 C.宋朝军队
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "孟浩然《过故人庄》\"把酒话桑麻\"的\"桑麻\"指( )。
A.丝织品 B.植物名称 C.农事
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王之涣《凉州词》\"羌笛何须怨杨柳\"的\"杨柳\"指( )。
A.杨柳树 B.春风 C.《折杨柳》曲
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "刘禹锡《陋室铭》\"苔痕上阶绿\"描绘了( )。
A.台阶脏乱 B.苔藓生长 C.居住环境幽静
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李贺《雁门太守行》\"黑云压城城欲摧\"运用了( )。
A.描写天气 B.夸张手法 C.比喻敌军压境
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "柳宗元《江雪》\"孤舟蓑笠翁\"中\"蓑笠\"指( )。
A.帽子 B.装饰品 C.雨具
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "文天祥《过零丁洋》\"人生自古谁无死\"表达了( )。
A.人生苦短 B.悲观情绪 C.舍生取义的决心
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "马致远《天净沙·秋思》\"断肠人在天涯\"的\"断肠人\"指( )。
A.生病的人 B.肠子断掉的人 C.极度悲伤的游子
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "张继《枫桥夜泊》\"江枫渔火对愁眠\"的\"愁\"源于( )。
A.生活困苦 B.天气不好 C.羁旅之思
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "晏殊《浣溪沙》\"无可奈何花落去\"蕴含( )。
A.花谢的描写 B.无奈心情 C.时光流逝的感慨
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王昌龄《出塞》\"秦时明月汉时关\"运用了( )。
A.对比手法 B.夸张手法 C.互文手法
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "岑参《白雪歌送武判官归京》\"忽如一夜春风来\"描写的是( )。
A.春天到来 B.刮风 C.雪花如梨花盛开
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "韩愈《早春呈水部张十八员外》\"草色遥看近却无\"描写了( )。
A.视力不好 B.远近差异 C.初春草色的特点
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李煜《虞美人》\"问君能有几多愁\"的\"君\"指( )。
A.君王 B.君子 C.作者自己
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "高适《别董大》\"千里黄云白日曛\"的\"曛\"意思是( )。
A.温暖 B.日落 C.昏暗
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "杨万里《小池》\"小荷才露尖尖角\"运用了( )。
A.比喻手法 B.夸张手法 C.拟人手法
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王安石《泊船瓜洲》\"春风又绿江南岸\"的\"绿\"是( )。
A.形容词 B.名词 C.使动用法
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "杜牧《山行》\"停车坐爱枫林晚\"的\"坐\"意思是( )。
A.坐下 B.乘坐 C.因为
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "贾岛《题李凝幽居》\"鸟宿池边树\"的意境是( )。
A.热闹 B.凄凉 C.幽静
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "崔颢《黄鹤楼》\"昔人已乘黄鹤去\"的\"昔人\"指( )。
A.古人 B.敌人 C.仙人
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "张若虚《春江花月夜》\"江畔何人初见月\"表达了( )。
A.询问他人 B.写景 C.对宇宙人生的思考
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李白《将进酒》\"钟鼓馔玉不足贵\"的\"馔玉\"指( )。
A.美玉 B.乐器 C.珍美的饮食
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李绅《悯农》\"锄禾日当午\"的\"禾\"指( )。
A.稻谷 B.杂草 C.禾苗
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "韦应物《滁州西涧》\"野渡无人舟自横\"表现了( )。
A.荒凉 B.热闹 C.闲适宁静的意境
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "曹操《观沧海》\"水何澹澹\"的\"澹澹\"形容( )。
A.水深 B.水流快 C.水波荡漾
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "屈原《离骚》\"路漫漫其修远兮\"表达了( )。
A.路途遥远 B.困难重重 C.追求理想的决心
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王翰《凉州词》\"葡萄美酒夜光杯\"描绘的是( )。
A.美酒介绍 B.酒杯说明 C.边塞宴饮场景
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "刘长卿《逢雪宿芙蓉山主人》\"风雪夜归人\"的\"归人\"指( )。
A.主人 B.风雪 C.诗人自己
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王湾《次北固山下》\"海日生残夜\"的\"生\"意思是( )。
A.产生 B.生命 C.升起
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "赵师秀《约客》\"闲敲棋子落灯花\"表现了( )。
A.悠闲自在 B.下棋 C.等待的焦躁
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "卢纶《塞下曲》\"月黑雁飞高\"渲染了( )。
A.夜景 B.寂静 C.紧张的战斗气氛
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "李白《静夜思》\"床前明月光\"的\"床\"可能指( )。
A.睡床 B.井栏 C.桌椅
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "杜甫《绝句》\"两个黄鹂鸣翠柳\"描绘的季节是( )。
A.夏季 B.冬季 C.春季
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "杜荀鹤《小松》\"自小刺头深草里\"的\"刺头\"比喻( )。
A.调皮的孩子 B.松针 C.不被人重视的才能
",
+ "Answer": "C",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "贺知章《咏柳》\"碧玉妆成一树高\"把柳树比作( )。
A.美女 B.碧玉 C.少女
",
+ "Answer": "A",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "孟郊《游子吟》\"谁言寸草心\"中\"寸草心\"比喻( )。
A.小草的嫩芽 B.儿女的心意 C.微小的心
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "王建《十五夜望月》\"中庭地白树栖鸦\"的\"地白\"指( )。
A.地面发白 B.月光照地 C.霜
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "罗隐《蜂》\"采得百花成蜜后\"的寓意是( )。
A.赞美蜜蜂勤劳 B.讽刺不劳而获 C.描写采蜜过程
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "郑板桥《竹石》\"咬定青山不放松\"赞美了竹子的( )。
A.生长环境 B.坚韧不拔 C.外形美观
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "龚自珍《己亥杂诗》\"落红不是无情物\"的\"落红\"指( )。
A.红色落叶 B.落花 C.晚霞
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "于谦《石灰吟》\"粉骨碎身浑不怕\"表达了作者的( )。
A.勇敢精神 B.忠诚坚贞 C.牺牲精神
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "叶绍翁《游园不值》\"春色满园关不住\"蕴含的哲理是( )。
A.春天美好 B.新生事物不可阻挡 C.园门紧闭
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "林升《题临安邸》\"暖风熏得游人醉\"暗指( )。
A.天气温暖 B.纸醉金迷的生活 C.酒醉
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 1,
+ "ImageUrl": ""
+ },
+ {
+ "QuestionId": 28,
+ "Name": "朱熹《春日》\"等闲识得东风面\"的\"等闲\"意思是( )。
A.等待闲暇 B.平常,轻易 C.悠闲
",
+ "Answer": "B",
+ "Type": "text",
+ "IsGood": 0,
+ "ImageUrl": ""
+ }
+ ]
+}
diff --git a/apps/question-importer/package.json b/apps/question-importer/package.json
new file mode 100644
index 0000000..8e55dff
--- /dev/null
+++ b/apps/question-importer/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "@reader-star/question-importer",
+ "version": "1.0.0",
+ "description": "",
+ "author": "",
+ "license": "ISC",
+ "keywords": [],
+ "main": "index.ts",
+ "scripts": {
+ "start": "ts-node src/index.ts",
+ "run-import": "ts-node src/index.ts --run-now",
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "dependencies": {
+ "axios": "^1.13.5",
+ "express": "^5.2.1",
+ "form-data": "^4.0.5",
+ "fs-extra": "^11.3.3"
+ },
+ "devDependencies": {
+ "@types/express": "^5.0.6",
+ "@types/fs-extra": "^11.0.4",
+ "@types/node": "^25.2.2",
+ "ts-node": "^10.9.2",
+ "typescript": "^5.9.3"
+ }
+}
diff --git a/apps/question-importer/src/clean_ciyu.ts b/apps/question-importer/src/clean_ciyu.ts
new file mode 100644
index 0000000..26e7184
--- /dev/null
+++ b/apps/question-importer/src/clean_ciyu.ts
@@ -0,0 +1,44 @@
+/* eslint-disable no-console */
+import path from 'node:path'
+import fs from 'fs-extra'
+
+const FILE_PATH = path.join(__dirname, '../asset/词语听写.json')
+
+async function cleanCiyuJson() {
+ try {
+ if (!fs.existsSync(FILE_PATH)) {
+ console.error(`File not found: ${FILE_PATH}`)
+ return
+ }
+
+ const data = await fs.readJSON(FILE_PATH)
+
+ if (data.question_bank && Array.isArray(data.question_bank)) {
+ let modifiedCount = 0
+ data.question_bank.forEach((q: any) => {
+ if (q.Name && typeof q.Name === 'string') {
+ // Remove HTML tags using regex
+ const cleanName = q.Name.replace(/<[^>]*>/g, '').trim()
+ if (cleanName !== q.Name) {
+ console.log(`Cleaning: ${q.Name} -> ${cleanName}`)
+ q.Name = cleanName
+ modifiedCount++
+ }
+ }
+ })
+
+ if (modifiedCount > 0) {
+ await fs.writeJSON(FILE_PATH, data, { spaces: 2 })
+ console.log(`Successfully cleaned ${modifiedCount} items in 词语听写.json`)
+ }
+ else {
+ console.log('No changes needed for 词语听写.json')
+ }
+ }
+ }
+ catch (error) {
+ console.error('Error processing file:', error)
+ }
+}
+
+cleanCiyuJson()
diff --git a/apps/question-importer/src/index.ts b/apps/question-importer/src/index.ts
new file mode 100644
index 0000000..84aeb93
--- /dev/null
+++ b/apps/question-importer/src/index.ts
@@ -0,0 +1,141 @@
+/* eslint-disable no-console */
+import path from 'node:path'
+import process from 'node:process'
+import axios from 'axios'
+import express from 'express'
+import fs from 'fs-extra'
+
+const app = express()
+const PORT = 3001 // 避免与前端端口冲突(通常是 3000 或 9527)
+
+console.log('Script started')
+console.log('Arguments:', process.argv)
+
+// 配置
+const API_BASE_URL = 'http://localhost:9527'
+const IMPORT_API_PATH = '/proxy-default/Base/ActivityMain/AddQuestionListDetail'
+const ASSET_DIR = path.join(__dirname, '../asset')
+
+// 来自 curl 命令的请求头
+const HEADERS = {
+ 'Accept': 'application/json, text/plain, */*',
+ 'Accept-Language': 'zh-CN,zh;q=0.9',
+ 'Connection': 'keep-alive',
+ 'Custom-Platform': 'pc',
+ 'Origin': 'http://localhost:9527',
+ 'Referer': 'http://localhost:9527/question-store',
+ 'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/144.0.0.0 Safari/537.36',
+ 'apifoxToken': 'XL299LiMEDZ0H5h3A29PxwQXdMJqWyY2',
+ 'sec-ch-ua': '"Not(A:Brand";v="8", "Chromium";v="144", "Google Chrome";v="144"',
+ 'sec-ch-ua-mobile': '?0',
+ 'sec-ch-ua-platform': '"macOS"',
+}
+
+interface Question {
+ QuestionId: number
+ Name: string
+ Answer: string
+ Type: string
+ IsGood: number
+ ImageUrl: string
+}
+
+interface QuestionBank {
+ question_bank: Question[]
+}
+
+async function importQuestions() {
+ try {
+ // 检查资源目录是否存在
+ console.log(`Checking asset directory: ${ASSET_DIR}`)
+ if (!fs.existsSync(ASSET_DIR)) {
+ console.error(`Asset directory not found: ${ASSET_DIR}`)
+ return
+ }
+
+ // 获取资源目录下的所有 JSON 文件
+ const files = await fs.readdir(ASSET_DIR)
+ console.log(`Files found in directory:`, files)
+ const jsonFiles = files.filter(file => file.endsWith('.json'))
+
+ console.log(`Found ${jsonFiles.length} JSON files in ${ASSET_DIR}`)
+
+ for (const file of jsonFiles) {
+ const filePath = path.join(ASSET_DIR, file)
+ console.log(`\nStarting import for file: ${file}`)
+
+ const data: QuestionBank = await fs.readJSON(filePath)
+ const questions = data.question_bank
+
+ if (!questions || !Array.isArray(questions)) {
+ console.error(`Invalid JSON format in ${file}: question_bank array not found.`)
+ continue
+ }
+
+ console.log(`Found ${questions.length} questions in ${file}.`)
+
+ for (const [index, question] of questions.entries()) {
+ console.log(`[${file}] Importing question ${index + 1}/${questions.length}: ID ${question.QuestionId}`)
+
+ try {
+ // 构建请求体 (JSON)
+ const body = {
+ QuestionId: question.QuestionId,
+ Name: question.Name,
+ Answer: question.Answer,
+ Type: question.Type,
+ IsGood: question.IsGood,
+ ImageUrl: question.ImageUrl || '',
+ }
+
+ // 发送请求
+ const url = `${API_BASE_URL}${IMPORT_API_PATH}`
+
+ const response = await axios.post(url, body, {
+ headers: {
+ ...HEADERS,
+ 'Content-Type': 'application/json',
+ },
+ })
+
+ console.log(`Success: ${response.status} - ${JSON.stringify(response.data)}`)
+ }
+ catch (error: any) {
+ console.error(`Failed to import question ${question.QuestionId}:`, error.message)
+ if (error.response) {
+ console.error('Response data:', error.response.data)
+ }
+ }
+
+ // 添加短暂延迟以避免服务器过载
+ await new Promise(resolve => setTimeout(resolve, 200))
+ }
+ }
+
+ console.log('\nAll imports completed.')
+ }
+ catch (error) {
+ console.error('Error during import process:', error)
+ }
+}
+
+// 触发导入的路由
+app.get('/run-import', async (req, res) => {
+ console.log('Received manual trigger for import...')
+ importQuestions() // 后台运行
+ res.send('Import process started. Check console for logs.')
+})
+
+// 如果传递了参数则直接运行导入,不启动 Web 服务
+if (process.argv.includes('--run-now')) {
+ importQuestions().then(() => {
+ process.exit(0)
+ })
+}
+else {
+ app.listen(PORT, () => {
+ console.log(`Importer service running at http://localhost:${PORT}`)
+ console.log('Ensure questions.json is present in the root of this service.')
+ console.log(`To start import, visit http://localhost:${PORT}/run-import`)
+ })
+}
diff --git a/apps/question-importer/tsconfig.json b/apps/question-importer/tsconfig.json
new file mode 100644
index 0000000..fb11a0f
--- /dev/null
+++ b/apps/question-importer/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "compilerOptions": {
+ "target": "es2016",
+ "module": "commonjs",
+ "strict": true,
+ "outDir": "./dist",
+ "esModuleInterop": true,
+ "forceConsistentCasingInFileNames": true,
+ "skipLibCheck": true
+ }
+}
diff --git a/package.json b/package.json
index fc6cc9b..2c51f38 100644
--- a/package.json
+++ b/package.json
@@ -7,6 +7,9 @@
"cleanup": "pnpm -r exec rm -rf node_modules",
"dev:admin": "pnpm --filter @reader-star/admin dev",
"dev:user": "pnpm --filter @reader-star/user dev",
+ "dev:importer": "pnpm --filter @reader-star/question-importer start",
+ "dev:api": "pnpm --filter @reader-star/question-importer run-import",
+ "build": "pnpm -r build",
"lint": "eslint . --fix",
"prepare": "simple-git-hooks",
"typecheck": "pnpm -r typecheck"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 8914fa9..7ffcd15 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -236,6 +236,37 @@ importers:
specifier: 3.2.1
version: 3.2.1(typescript@5.9.3)
+ apps/question-importer:
+ dependencies:
+ axios:
+ specifier: ^1.13.5
+ version: 1.13.5
+ express:
+ specifier: ^5.2.1
+ version: 5.2.1
+ form-data:
+ specifier: ^4.0.5
+ version: 4.0.5
+ fs-extra:
+ specifier: ^11.3.3
+ version: 11.3.3
+ devDependencies:
+ '@types/express':
+ specifier: ^5.0.6
+ version: 5.0.6
+ '@types/fs-extra':
+ specifier: ^11.0.4
+ version: 11.0.4
+ '@types/node':
+ specifier: ^25.2.2
+ version: 25.2.2
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@25.2.2)(typescript@5.9.3)
+ typescript:
+ specifier: ^5.9.3
+ version: 5.9.3
+
packages/alova:
dependencies:
'@alova/mock':
@@ -593,6 +624,10 @@ packages:
'@clack/prompts@0.9.1':
resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==}
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
'@css-render/plugin-bem@0.15.14':
resolution: {integrity: sha512-QK513CJ7yEQxm/P3EwsI+d+ha8kSOcjGvD6SevM41neEMxdULE+18iuQK6tEChAWMOQNQPLG/Rw3Khb69r5neg==}
peerDependencies:
@@ -947,6 +982,9 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@juggle/resize-observer@3.4.0':
resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==}
@@ -1350,12 +1388,30 @@ packages:
resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==}
engines: {node: '>=10.13.0'}
+ '@tsconfig/node10@1.0.12':
+ resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
'@types/ali-oss@6.23.1':
resolution: {integrity: sha512-4mmCq2gUPBaPo6UlLIS/wMc7LxzDCzEUlRJAbLEk68Ntw7KWuF4RUwrQz3gtJkAeIYQ/R6PN3IvPTqk8daVVKQ==}
+ '@types/body-parser@1.19.6':
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
'@types/crypto-js@4.2.2':
resolution: {integrity: sha512-sDOLlVbHhXpAUAL0YHDUUwDZf3iN4Bwi4W6a0W0b+QcAezUbRtH4FVb+9J4h+XFPW7l/gQ9F8qC7P+Ec4k8QVQ==}
@@ -1368,9 +1424,24 @@ packages:
'@types/event-emitter@0.3.5':
resolution: {integrity: sha512-zx2/Gg0Eg7gwEiOIIh5w9TrhKKTeQh7CPCOPNc0el4pLSwzebA8SmnHwZs2dWlLONvyulykSwGSQxQHLhjGLvQ==}
+ '@types/express-serve-static-core@5.1.1':
+ resolution: {integrity: sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==}
+
+ '@types/express@5.0.6':
+ resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==}
+
+ '@types/fs-extra@11.0.4':
+ resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
+
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
+
'@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+ '@types/jsonfile@6.1.4':
+ resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
+
'@types/katex@0.16.7':
resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==}
@@ -1392,6 +1463,9 @@ packages:
'@types/node@25.0.3':
resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==}
+ '@types/node@25.2.2':
+ resolution: {integrity: sha512-BkmoP5/FhRYek5izySdkOneRyXYN35I860MFAGupTdebyE66uZaR+bXLHq8k4DirE5DwQi3NuhvRU1jqTVwUrQ==}
+
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
@@ -1404,6 +1478,15 @@ packages:
'@types/qs@6.14.0':
resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
+ '@types/range-parser@1.2.7':
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+
+ '@types/send@1.2.1':
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
+
+ '@types/serve-static@2.2.0':
+ resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==}
+
'@types/sortablejs@1.15.9':
resolution: {integrity: sha512-7HP+rZGE2p886PKV9c9OJzLBI6BBJu1O7lJGYnPyG3fS4/duUCcngkNCjsLwIMV+WMqANe3tt4irrXHSIe68OQ==}
@@ -1906,11 +1989,19 @@ packages:
'@zumer/snapdom@2.0.2':
resolution: {integrity: sha512-W6quT4lMcPu8Q9O/Q6witSfc6/+xuY8C8yDoHug/+o7zYKCNE/e0I3//XsWDkyq9C0mDE0TAWF/8bwCR7x3gHQ==}
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
@@ -1989,6 +2080,9 @@ packages:
resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
engines: {node: '>=14'}
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -2054,6 +2148,9 @@ packages:
axios@1.13.2:
resolution: {integrity: sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==}
+ axios@1.13.5:
+ resolution: {integrity: sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==}
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -2078,6 +2175,10 @@ packages:
bluebird@3.7.2:
resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==}
+ body-parser@2.2.2:
+ resolution: {integrity: sha512-oP5VkATKlNwcgvxi0vM0p/D3n2C3EReYVX+DNYs5TjZFn/oQt2j+4sVJtSMr18pdRr8wjTcBl6LoV+FUwzPmNA==}
+ engines: {node: '>=18'}
+
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -2123,6 +2224,10 @@ packages:
resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
engines: {node: '>=18'}
+ bytes@3.1.2:
+ resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
+ engines: {node: '>= 0.8'}
+
c12@3.3.3:
resolution: {integrity: sha512-750hTRvgBy5kcMNPdh95Qo+XUBeGo8C7nsKSmedDmaQI+E0r82DwHeM6vBewDe4rGFbnxoa4V9pw+sPh5+Iz8Q==}
peerDependencies:
@@ -2293,6 +2398,10 @@ packages:
resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
engines: {node: ^14.18.0 || >=16.10.0}
+ content-disposition@1.0.1:
+ resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==}
+ engines: {node: '>=18'}
+
content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
@@ -2303,6 +2412,14 @@ packages:
convert-source-map@2.0.0:
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+ cookie-signature@1.2.2:
+ resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==}
+ engines: {node: '>=6.6.0'}
+
+ cookie@0.7.2:
+ resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
+ engines: {node: '>= 0.6'}
+
copy-anything@4.0.5:
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
engines: {node: '>=18'}
@@ -2329,6 +2446,9 @@ packages:
engines: {node: '>=0.8'}
hasBin: true
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
cross-spawn@7.0.6:
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
engines: {node: '>= 8'}
@@ -2472,6 +2592,10 @@ packages:
delegate@3.2.0:
resolution: {integrity: sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==}
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
engines: {node: '>=6'}
@@ -2495,6 +2619,10 @@ packages:
resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+ diff@4.0.4:
+ resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==}
+ engines: {node: '>=0.3.1'}
+
digest-header@1.1.0:
resolution: {integrity: sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg==}
engines: {node: '>= 8.0.0'}
@@ -2563,6 +2691,10 @@ packages:
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
engines: {node: '>= 4'}
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
@@ -2945,6 +3077,10 @@ packages:
resolution: {integrity: sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==}
engines: {node: '>=0.10.0'}
+ express@5.2.1:
+ resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==}
+ engines: {node: '>= 18'}
+
exsolve@1.0.8:
resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
@@ -3010,6 +3146,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ finalhandler@2.1.1:
+ resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==}
+ engines: {node: '>= 18.0.0'}
+
find-up-simple@1.0.1:
resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
engines: {node: '>=18'}
@@ -3061,6 +3201,10 @@ packages:
formstream@1.5.2:
resolution: {integrity: sha512-NASf0lgxC1AyKNXQIrXTEYkiX99LhCEXTkiGObXAkpBui86a4u8FjH1o2bGb3PpqI3kafC+yw4zWeK6l6VHTgg==}
+ forwarded@0.2.0:
+ resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
+ engines: {node: '>= 0.6'}
+
frac@1.1.2:
resolution: {integrity: sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==}
engines: {node: '>=0.8'}
@@ -3069,10 +3213,18 @@ packages:
resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
engines: {node: '>=0.10.0'}
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
fs-extra@10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
engines: {node: '>=12'}
+ fs-extra@11.3.3:
+ resolution: {integrity: sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==}
+ engines: {node: '>=14.14'}
+
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -3264,6 +3416,10 @@ packages:
htmlparser2@3.10.1:
resolution: {integrity: sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==}
+ http-errors@2.0.1:
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
+
human-signals@8.0.1:
resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==}
engines: {node: '>=18.18.0'}
@@ -3278,6 +3434,10 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
+ iconv-lite@0.7.2:
+ resolution: {integrity: sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==}
+ engines: {node: '>=0.10.0'}
+
icss-replace-symbols@1.1.0:
resolution: {integrity: sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==}
@@ -3332,6 +3492,10 @@ packages:
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
engines: {node: '>= 0.4'}
+ ipaddr.js@1.9.1:
+ resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
+ engines: {node: '>= 0.10'}
+
is-accessor-descriptor@1.0.1:
resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==}
engines: {node: '>= 0.10'}
@@ -3482,6 +3646,9 @@ packages:
resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==}
engines: {node: '>=0.10.0'}
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -3764,6 +3931,9 @@ packages:
magicast@0.3.4:
resolution: {integrity: sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==}
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
map-cache@0.2.2:
resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==}
engines: {node: '>=0.10.0'}
@@ -3821,9 +3991,17 @@ packages:
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+ media-typer@1.1.0:
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
+
merge-descriptors@1.0.3:
resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==}
+ merge-descriptors@2.0.0:
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
+
merge-options@1.0.1:
resolution: {integrity: sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==}
engines: {node: '>=4'}
@@ -3935,6 +4113,10 @@ packages:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
mime-match@1.0.2:
resolution: {integrity: sha512-VXp/ugGDVh3eCLOBCiHZMYWQaTNUHv2IJrut+yXA6+JbLPXHglHwfS/5A5L0ll+jkCY7fIzRJcH6OIunF+c6Cg==}
@@ -3942,6 +4124,10 @@ packages:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime-types@3.0.2:
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
+
mime@2.6.0:
resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
engines: {node: '>=4.0.0'}
@@ -4046,6 +4232,10 @@ packages:
resolution: {integrity: sha512-kKHJhxwpR/Okycz4HhQKKlhWe4ASEfPgkSWNmKFHd7+ezuQlxkA5cM3+XkBPvm1gmHen3w53qsYAv+8GwRrBlg==}
engines: {node: '>=18'}
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
next-tick@1.1.0:
resolution: {integrity: sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==}
@@ -4123,6 +4313,10 @@ packages:
ohash@2.0.11:
resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -4203,6 +4397,10 @@ packages:
parse-statements@1.0.11:
resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
pascalcase@0.1.1:
resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
engines: {node: '>=0.10.0'}
@@ -4233,6 +4431,9 @@ packages:
resolution: {integrity: sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==}
engines: {node: 20 || >=22}
+ path-to-regexp@8.3.0:
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
+
pathe@0.2.0:
resolution: {integrity: sha512-sTitTPYnn23esFR3RlqYBWn4c45WGeLcsKzQiUpXJAyfcWkolvlYpV8FLo7JishK946oQwMFUCHXQ9AjGPKExw==}
@@ -4431,6 +4632,10 @@ packages:
resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==}
engines: {node: '>= 6'}
+ proxy-addr@2.0.7:
+ resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
+ engines: {node: '>= 0.10'}
+
proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -4445,6 +4650,10 @@ packages:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
+ qs@6.14.1:
+ resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==}
+ engines: {node: '>=0.6'}
+
quansync@0.2.11:
resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
@@ -4481,9 +4690,17 @@ packages:
resolution: {integrity: sha512-xEYQBqfYx/sfb33VJiKnSJp8ehloavImQ2A6564GAbqG55PGw1dAWUn1MUbQB62t0azawUS2CZZhWCjO8gRvTw==}
engines: {npm: '>=8.2.3'}
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
rate-limiter-flexible@5.0.5:
resolution: {integrity: sha512-+/dSQfo+3FYwYygUs/V2BBdwGa9nFtakDwKt4l0bnvNB53TNT++QSFewwHX9qXrZJuMe9j+TUaU21lm5ARgqdQ==}
+ raw-body@3.0.2:
+ resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
+ engines: {node: '>= 0.10'}
+
rc9@2.1.2:
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
@@ -4606,6 +4823,10 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ router@2.2.0:
+ resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+ engines: {node: '>= 18'}
+
run-applescript@7.1.0:
resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
engines: {node: '>=18'}
@@ -4675,6 +4896,14 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ send@1.2.1:
+ resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
+ engines: {node: '>= 18'}
+
+ serve-static@2.2.1:
+ resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
+ engines: {node: '>= 18'}
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -4691,6 +4920,9 @@ packages:
resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==}
engines: {node: '>=0.10.0'}
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
shebang-command@2.0.0:
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
engines: {node: '>=8'}
@@ -4832,6 +5064,10 @@ packages:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
stop-iteration-iterator@1.1.0:
resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
engines: {node: '>= 0.4'}
@@ -5007,6 +5243,10 @@ packages:
resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
engines: {node: '>=0.10.0'}
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
toml-eslint-parser@0.10.1:
resolution: {integrity: sha512-9mjy3frhioGIVGcwamlVlUyJ9x+WHw/TXiz9R4YOlmsIuBN43r9Dp8HZ35SF9EKjHrn3BUZj04CF+YqZ2oJ+7w==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -5039,6 +5279,20 @@ packages:
peerDependencies:
typescript: '>=4.0.0'
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
tslib@2.3.0:
resolution: {integrity: sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==}
@@ -5066,6 +5320,10 @@ packages:
resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
engines: {node: '>=8'}
+ type-is@2.0.1:
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
+
type@2.7.3:
resolution: {integrity: sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==}
@@ -5143,6 +5401,10 @@ packages:
resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==}
engines: {node: '>= 10.0.0'}
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
unplugin-icons@22.5.0:
resolution: {integrity: sha512-MBlMtT5RuMYZy4TZgqUL2OTtOdTUVsS1Mhj6G1pEzMlFJlEnq6mhUfoIt45gBWxHcsOdXJDWLg3pRZ+YmvAVWQ==}
peerDependencies:
@@ -5236,6 +5498,9 @@ packages:
peerDependencies:
vue: ^3.2.37
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
@@ -5517,6 +5782,10 @@ packages:
resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==}
engines: {node: '>=12'}
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -5810,6 +6079,10 @@ snapshots:
picocolors: 1.1.1
sisteransi: 1.0.5
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
'@css-render/plugin-bem@0.15.14(css-render@0.15.14)':
dependencies:
css-render: 0.15.14
@@ -6124,6 +6397,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
'@juggle/resize-observer@3.4.0': {}
'@napi-rs/canvas-android-arm64@0.1.88':
@@ -6428,6 +6706,14 @@ snapshots:
'@trysound/sax@0.2.0': {}
+ '@tsconfig/node10@1.0.12': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
'@tybys/wasm-util@0.10.1':
dependencies:
tslib: 2.8.1
@@ -6435,6 +6721,15 @@ snapshots:
'@types/ali-oss@6.23.1': {}
+ '@types/body-parser@1.19.6':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 25.2.2
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 25.2.2
+
'@types/crypto-js@4.2.2': {}
'@types/debug@4.1.12':
@@ -6445,8 +6740,32 @@ snapshots:
'@types/event-emitter@0.3.5': {}
+ '@types/express-serve-static-core@5.1.1':
+ dependencies:
+ '@types/node': 25.2.2
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 1.2.1
+
+ '@types/express@5.0.6':
+ dependencies:
+ '@types/body-parser': 1.19.6
+ '@types/express-serve-static-core': 5.1.1
+ '@types/serve-static': 2.2.0
+
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 25.2.2
+
+ '@types/http-errors@2.0.5': {}
+
'@types/json-schema@7.0.15': {}
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 25.2.2
+
'@types/katex@0.16.7': {}
'@types/lodash-es@4.17.12':
@@ -6467,6 +6786,10 @@ snapshots:
dependencies:
undici-types: 7.16.0
+ '@types/node@25.2.2':
+ dependencies:
+ undici-types: 7.16.0
+
'@types/normalize-package-data@2.4.4': {}
'@types/nprogress@0.2.3': {}
@@ -6475,11 +6798,22 @@ snapshots:
'@types/qs@6.14.0': {}
+ '@types/range-parser@1.2.7': {}
+
+ '@types/send@1.2.1':
+ dependencies:
+ '@types/node': 25.2.2
+
+ '@types/serve-static@2.2.0':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 25.2.2
+
'@types/sortablejs@1.15.9': {}
'@types/svgo@2.6.4':
dependencies:
- '@types/node': 25.0.3
+ '@types/node': 25.2.2
'@types/unist@3.0.3': {}
@@ -7138,10 +7472,19 @@ snapshots:
'@zumer/snapdom@2.0.2': {}
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.2
+ negotiator: 1.0.0
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
acorn@8.15.0: {}
address@1.2.2: {}
@@ -7228,6 +7571,8 @@ snapshots:
are-docs-informative@0.0.2: {}
+ arg@4.1.3: {}
+
argparse@2.0.1: {}
args-tokenizer@0.3.0: {}
@@ -7286,6 +7631,14 @@ snapshots:
transitivePeerDependencies:
- debug
+ axios@1.13.5:
+ dependencies:
+ follow-redirects: 1.15.11
+ form-data: 4.0.5
+ proxy-from-env: 1.1.0
+ transitivePeerDependencies:
+ - debug
+
balanced-match@1.0.2: {}
base@0.11.2:
@@ -7308,6 +7661,20 @@ snapshots:
bluebird@3.7.2: {}
+ body-parser@2.2.2:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.3
+ http-errors: 2.0.1
+ iconv-lite: 0.7.2
+ on-finished: 2.4.1
+ qs: 6.14.1
+ raw-body: 3.0.2
+ type-is: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
boolbase@1.0.0: {}
bowser@1.9.4: {}
@@ -7374,6 +7741,8 @@ snapshots:
dependencies:
run-applescript: 7.1.0
+ bytes@3.1.2: {}
+
c12@3.3.3(magicast@0.3.4):
dependencies:
chokidar: 5.0.0
@@ -7557,12 +7926,18 @@ snapshots:
consola@3.4.2: {}
+ content-disposition@1.0.1: {}
+
content-type@1.0.5: {}
convert-gitmoji@0.1.5: {}
convert-source-map@2.0.0: {}
+ cookie-signature@1.2.2: {}
+
+ cookie@0.7.2: {}
+
copy-anything@4.0.5:
dependencies:
is-what: 5.5.0
@@ -7584,6 +7959,8 @@ snapshots:
crc-32@1.2.2: {}
+ create-require@1.1.1: {}
+
cross-spawn@7.0.6:
dependencies:
path-key: 3.1.1
@@ -7720,6 +8097,8 @@ snapshots:
delegate@3.2.0: {}
+ depd@2.0.0: {}
+
dequal@2.0.3: {}
destr@2.0.5: {}
@@ -7735,6 +8114,8 @@ snapshots:
diff-sequences@27.5.1: {}
+ diff@4.0.4: {}
+
digest-header@1.1.0: {}
dom-serializer@0.2.2:
@@ -7804,6 +8185,8 @@ snapshots:
emojis-list@3.0.0: {}
+ encodeurl@2.0.0: {}
+
end-of-stream@1.4.5:
dependencies:
once: 1.4.0
@@ -8376,6 +8759,39 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ express@5.2.1:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.2.2
+ content-disposition: 1.0.1
+ content-type: 1.0.5
+ cookie: 0.7.2
+ cookie-signature: 1.2.2
+ debug: 4.4.3
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.1
+ fresh: 2.0.0
+ http-errors: 2.0.1
+ merge-descriptors: 2.0.0
+ mime-types: 3.0.2
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.14.0
+ range-parser: 1.2.1
+ router: 2.2.0
+ send: 1.2.1
+ serve-static: 2.2.1
+ statuses: 2.0.2
+ type-is: 2.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
exsolve@1.0.8: {}
ext@1.7.0:
@@ -8451,6 +8867,17 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ finalhandler@2.1.1:
+ dependencies:
+ debug: 4.4.3
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
find-up-simple@1.0.1: {}
find-up@4.1.0:
@@ -8500,18 +8927,28 @@ snapshots:
node-hex: 1.0.1
pause-stream: 0.0.11
+ forwarded@0.2.0: {}
+
frac@1.1.2: {}
fragment-cache@0.2.1:
dependencies:
map-cache: 0.2.2
+ fresh@2.0.0: {}
+
fs-extra@10.1.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 6.2.0
universalify: 2.0.1
+ fs-extra@11.3.3:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
fsevents@2.3.3:
optional: true
@@ -8704,6 +9141,14 @@ snapshots:
inherits: 2.0.4
readable-stream: 3.6.2
+ http-errors@2.0.1:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ toidentifier: 1.0.1
+
human-signals@8.0.1: {}
humanize-ms@1.2.1:
@@ -8718,6 +9163,10 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ iconv-lite@0.7.2:
+ dependencies:
+ safer-buffer: 2.1.2
+
icss-replace-symbols@1.1.0: {}
icss-utils@5.1.0(postcss@8.5.6):
@@ -8755,6 +9204,8 @@ snapshots:
hasown: 2.0.2
side-channel: 1.1.0
+ ipaddr.js@1.9.1: {}
+
is-accessor-descriptor@1.0.1:
dependencies:
hasown: 2.0.2
@@ -8894,6 +9345,8 @@ snapshots:
is-plain-object@5.0.0: {}
+ is-promise@4.0.0: {}
+
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -9154,6 +9607,8 @@ snapshots:
'@babel/types': 7.28.5
source-map-js: 1.2.1
+ make-error@1.3.6: {}
+
map-cache@0.2.2: {}
map-visit@1.0.0:
@@ -9281,8 +9736,12 @@ snapshots:
mdn-data@2.12.2: {}
+ media-typer@1.1.0: {}
+
merge-descriptors@1.0.3: {}
+ merge-descriptors@2.0.0: {}
+
merge-options@1.0.1:
dependencies:
is-plain-obj: 1.1.0
@@ -9517,6 +9976,8 @@ snapshots:
mime-db@1.52.0: {}
+ mime-db@1.54.0: {}
+
mime-match@1.0.2:
dependencies:
wildcard: 1.1.2
@@ -9525,6 +9986,10 @@ snapshots:
dependencies:
mime-db: 1.52.0
+ mime-types@3.0.2:
+ dependencies:
+ mime-db: 1.54.0
+
mime@2.6.0: {}
mimic-function@5.0.1: {}
@@ -9634,6 +10099,8 @@ snapshots:
natural-orderby@5.0.0: {}
+ negotiator@1.0.0: {}
+
next-tick@1.1.0: {}
node-addon-api@7.1.1:
@@ -9712,6 +10179,10 @@ snapshots:
ohash@2.0.11: {}
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -9796,6 +10267,8 @@ snapshots:
parse-statements@1.0.11: {}
+ parseurl@1.3.3: {}
+
pascalcase@0.1.1: {}
path-browserify@1.0.1: {}
@@ -9818,6 +10291,8 @@ snapshots:
lru-cache: 11.2.4
minipass: 7.1.2
+ path-to-regexp@8.3.0: {}
+
pathe@0.2.0: {}
pathe@2.0.3: {}
@@ -9985,6 +10460,11 @@ snapshots:
kleur: 3.0.3
sisteransi: 1.0.5
+ proxy-addr@2.0.7:
+ dependencies:
+ forwarded: 0.2.0
+ ipaddr.js: 1.9.1
+
proxy-from-env@1.1.0: {}
pump@3.0.3:
@@ -9998,6 +10478,10 @@ snapshots:
dependencies:
side-channel: 1.1.0
+ qs@6.14.1:
+ dependencies:
+ side-channel: 1.1.0
+
quansync@0.2.11: {}
quansync@1.0.0: {}
@@ -10035,8 +10519,17 @@ snapshots:
parchment: 3.0.0
quill-delta: 5.1.0
+ range-parser@1.2.1: {}
+
rate-limiter-flexible@5.0.5: {}
+ raw-body@3.0.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.1
+ iconv-lite: 0.7.2
+ unpipe: 1.0.0
+
rc9@2.1.2:
dependencies:
defu: 6.1.4
@@ -10197,6 +10690,16 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.54.0
fsevents: 2.3.3
+ router@2.2.0:
+ dependencies:
+ debug: 4.4.3
+ depd: 2.0.0
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.3.0
+ transitivePeerDependencies:
+ - supports-color
+
run-applescript@7.1.0: {}
run-parallel@1.2.0:
@@ -10266,6 +10769,31 @@ snapshots:
semver@7.7.3: {}
+ send@1.2.1:
+ dependencies:
+ debug: 4.4.3
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.1
+ mime-types: 3.0.2
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ serve-static@2.2.1:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.1
+ transitivePeerDependencies:
+ - supports-color
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
@@ -10295,6 +10823,8 @@ snapshots:
is-plain-object: 2.0.4
split-string: 3.1.0
+ setprototypeof@1.2.0: {}
+
shebang-command@2.0.0:
dependencies:
shebang-regex: 3.0.0
@@ -10453,6 +10983,8 @@ snapshots:
statuses@1.5.0: {}
+ statuses@2.0.2: {}
+
stop-iteration-iterator@1.1.0:
dependencies:
es-errors: 1.3.0
@@ -10654,6 +11186,8 @@ snapshots:
regex-not: 1.0.2
safe-regex: 1.1.0
+ toidentifier@1.0.1: {}
+
toml-eslint-parser@0.10.1:
dependencies:
eslint-visitor-keys: 3.4.3
@@ -10681,6 +11215,24 @@ snapshots:
picomatch: 4.0.3
typescript: 5.9.3
+ ts-node@10.9.2(@types/node@25.2.2)(typescript@5.9.3):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.12
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 25.2.2
+ acorn: 8.15.0
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.4
+ make-error: 1.3.6
+ typescript: 5.9.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
tslib@2.3.0: {}
tslib@2.8.1: {}
@@ -10702,6 +11254,12 @@ snapshots:
type-fest@0.8.1: {}
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.2
+
type@2.7.3: {}
typed-array-buffer@1.0.3:
@@ -10824,6 +11382,8 @@ snapshots:
universalify@2.0.1: {}
+ unpipe@1.0.0: {}
+
unplugin-icons@22.5.0(@vue/compiler-sfc@3.5.26):
dependencies:
'@antfu/install-pkg': 1.1.0
@@ -10943,6 +11503,8 @@ snapshots:
dependencies:
vue: 3.5.26(typescript@5.9.3)
+ v8-compile-cache-lib@3.0.1: {}
+
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.2.0
@@ -11258,6 +11820,8 @@ snapshots:
y18n: 5.0.8
yargs-parser: 21.1.1
+ yn@3.1.1: {}
+
yocto-queue@0.1.0: {}
yoctocolors@2.1.2: {}