wjx-api-sdk 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +300 -0
- package/dist/core/api-client.d.ts +13 -0
- package/dist/core/api-client.js +141 -0
- package/dist/core/api-client.js.map +1 -0
- package/dist/core/constants.d.ts +61 -0
- package/dist/core/constants.js +82 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/types.d.ts +26 -0
- package/dist/core/types.js +2 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/analytics/compute.d.ts +14 -0
- package/dist/modules/analytics/compute.js +205 -0
- package/dist/modules/analytics/compute.js.map +1 -0
- package/dist/modules/analytics/push-decode.d.ts +12 -0
- package/dist/modules/analytics/push-decode.js +46 -0
- package/dist/modules/analytics/push-decode.js.map +1 -0
- package/dist/modules/analytics/types.d.ts +61 -0
- package/dist/modules/analytics/types.js +3 -0
- package/dist/modules/analytics/types.js.map +1 -0
- package/dist/modules/contacts/client.d.ts +16 -0
- package/dist/modules/contacts/client.js +129 -0
- package/dist/modules/contacts/client.js.map +1 -0
- package/dist/modules/contacts/types.d.ts +62 -0
- package/dist/modules/contacts/types.js +2 -0
- package/dist/modules/contacts/types.js.map +1 -0
- package/dist/modules/multi-user/client.d.ts +7 -0
- package/dist/modules/multi-user/client.js +70 -0
- package/dist/modules/multi-user/client.js.map +1 -0
- package/dist/modules/multi-user/types.d.ts +31 -0
- package/dist/modules/multi-user/types.js +2 -0
- package/dist/modules/multi-user/types.js.map +1 -0
- package/dist/modules/response/client.d.ts +12 -0
- package/dist/modules/response/client.js +169 -0
- package/dist/modules/response/client.js.map +1 -0
- package/dist/modules/response/types.d.ts +83 -0
- package/dist/modules/response/types.js +2 -0
- package/dist/modules/response/types.js.map +1 -0
- package/dist/modules/sso/client.d.ts +22 -0
- package/dist/modules/sso/client.js +101 -0
- package/dist/modules/sso/client.js.map +1 -0
- package/dist/modules/sso/types.d.ts +75 -0
- package/dist/modules/sso/types.js +2 -0
- package/dist/modules/sso/types.js.map +1 -0
- package/dist/modules/survey/client.d.ts +13 -0
- package/dist/modules/survey/client.js +140 -0
- package/dist/modules/survey/client.js.map +1 -0
- package/dist/modules/survey/survey-to-text.d.ts +17 -0
- package/dist/modules/survey/survey-to-text.js +237 -0
- package/dist/modules/survey/survey-to-text.js.map +1 -0
- package/dist/modules/survey/text-to-survey.d.ts +9 -0
- package/dist/modules/survey/text-to-survey.js +175 -0
- package/dist/modules/survey/text-to-survey.js.map +1 -0
- package/dist/modules/survey/types.d.ts +170 -0
- package/dist/modules/survey/types.js +2 -0
- package/dist/modules/survey/types.js.map +1 -0
- package/dist/modules/user-system/client.d.ts +8 -0
- package/dist/modules/user-system/client.js +76 -0
- package/dist/modules/user-system/client.js.map +1 -0
- package/dist/modules/user-system/types.d.ts +41 -0
- package/dist/modules/user-system/types.js +2 -0
- package/dist/modules/user-system/types.js.map +1 -0
- package/package.json +38 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
import { Action } from "../../core/constants.js";
|
|
2
|
+
import { callWjxApi, getWjxCredentials, validateQuestionsJson } from "../../core/api-client.js";
|
|
3
|
+
export async function createSurvey(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
4
|
+
const params = {
|
|
5
|
+
action: Action.CREATE_SURVEY,
|
|
6
|
+
title: input.title,
|
|
7
|
+
};
|
|
8
|
+
if (input.source_vid !== undefined) {
|
|
9
|
+
params.source_vid = input.source_vid;
|
|
10
|
+
}
|
|
11
|
+
else {
|
|
12
|
+
params.atype = input.type;
|
|
13
|
+
params.desc = input.description;
|
|
14
|
+
params.questions = input.questions;
|
|
15
|
+
validateQuestionsJson(input.questions);
|
|
16
|
+
}
|
|
17
|
+
params.publish = input.publish ?? false;
|
|
18
|
+
if (input.creater !== undefined)
|
|
19
|
+
params.creater = input.creater;
|
|
20
|
+
if (input.compress_img !== undefined)
|
|
21
|
+
params.compress_img = input.compress_img;
|
|
22
|
+
if (input.is_string !== undefined)
|
|
23
|
+
params.is_string = input.is_string;
|
|
24
|
+
return callWjxApi(params, { credentials, fetchImpl, maxRetries: 0 });
|
|
25
|
+
}
|
|
26
|
+
export async function getSurvey(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
27
|
+
const params = {
|
|
28
|
+
action: Action.GET_SURVEY,
|
|
29
|
+
vid: input.vid,
|
|
30
|
+
get_questions: input.get_questions ?? true,
|
|
31
|
+
get_items: input.get_items ?? true,
|
|
32
|
+
};
|
|
33
|
+
if (input.get_exts !== undefined)
|
|
34
|
+
params.get_exts = input.get_exts;
|
|
35
|
+
if (input.get_setting !== undefined)
|
|
36
|
+
params.get_setting = input.get_setting;
|
|
37
|
+
if (input.get_page_cut !== undefined)
|
|
38
|
+
params.get_page_cut = input.get_page_cut;
|
|
39
|
+
if (input.get_tags !== undefined)
|
|
40
|
+
params.get_tags = input.get_tags;
|
|
41
|
+
if (input.showtitle !== undefined)
|
|
42
|
+
params.showtitle = input.showtitle;
|
|
43
|
+
return callWjxApi(params, { credentials, fetchImpl });
|
|
44
|
+
}
|
|
45
|
+
export async function listSurveys(input = {}, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
46
|
+
const params = {
|
|
47
|
+
action: Action.LIST_SURVEYS,
|
|
48
|
+
page_index: input.page_index ?? 1,
|
|
49
|
+
page_size: input.page_size ?? 10,
|
|
50
|
+
};
|
|
51
|
+
if (input.status !== undefined)
|
|
52
|
+
params.status = input.status;
|
|
53
|
+
if (input.atype !== undefined)
|
|
54
|
+
params.atype = input.atype;
|
|
55
|
+
if (input.name_like !== undefined && input.name_like !== "")
|
|
56
|
+
params.name_like = input.name_like;
|
|
57
|
+
if (input.sort !== undefined)
|
|
58
|
+
params.sort = input.sort;
|
|
59
|
+
if (input.creater !== undefined)
|
|
60
|
+
params.creater = input.creater;
|
|
61
|
+
if (input.folder !== undefined)
|
|
62
|
+
params.folder = input.folder;
|
|
63
|
+
if (input.is_xingbiao !== undefined)
|
|
64
|
+
params.is_xingbiao = input.is_xingbiao;
|
|
65
|
+
if (input.query_all !== undefined)
|
|
66
|
+
params.query_all = input.query_all;
|
|
67
|
+
if (input.verify_status !== undefined)
|
|
68
|
+
params.verify_status = input.verify_status;
|
|
69
|
+
if (input.time_type !== undefined)
|
|
70
|
+
params.time_type = input.time_type;
|
|
71
|
+
if (input.begin_time !== undefined)
|
|
72
|
+
params.begin_time = input.begin_time;
|
|
73
|
+
if (input.end_time !== undefined)
|
|
74
|
+
params.end_time = input.end_time;
|
|
75
|
+
return callWjxApi(params, { credentials, fetchImpl });
|
|
76
|
+
}
|
|
77
|
+
export async function updateSurveyStatus(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
78
|
+
return callWjxApi({
|
|
79
|
+
action: Action.UPDATE_STATUS,
|
|
80
|
+
vid: input.vid,
|
|
81
|
+
state: input.state,
|
|
82
|
+
}, { credentials, fetchImpl, maxRetries: 0 });
|
|
83
|
+
}
|
|
84
|
+
export async function getSurveySettings(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
85
|
+
return callWjxApi({
|
|
86
|
+
action: Action.GET_SETTINGS,
|
|
87
|
+
vid: input.vid,
|
|
88
|
+
additional_setting: input.additional_setting ?? "[1000,1001,1002,1003,1004,1005]",
|
|
89
|
+
}, { credentials, fetchImpl });
|
|
90
|
+
}
|
|
91
|
+
export async function updateSurveySettings(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
92
|
+
const params = {
|
|
93
|
+
action: Action.UPDATE_SETTINGS,
|
|
94
|
+
vid: input.vid,
|
|
95
|
+
};
|
|
96
|
+
if (input.api_setting !== undefined)
|
|
97
|
+
params.api_setting = input.api_setting;
|
|
98
|
+
if (input.after_submit_setting !== undefined)
|
|
99
|
+
params.after_submit_setting = input.after_submit_setting;
|
|
100
|
+
if (input.msg_setting !== undefined)
|
|
101
|
+
params.msg_setting = input.msg_setting;
|
|
102
|
+
if (input.sojumpparm_setting !== undefined)
|
|
103
|
+
params.sojumpparm_setting = input.sojumpparm_setting;
|
|
104
|
+
if (input.time_setting !== undefined)
|
|
105
|
+
params.time_setting = input.time_setting;
|
|
106
|
+
return callWjxApi(params, { credentials, fetchImpl, maxRetries: 0 });
|
|
107
|
+
}
|
|
108
|
+
export async function deleteSurvey(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
109
|
+
const params = {
|
|
110
|
+
action: Action.DELETE_SURVEY,
|
|
111
|
+
vid: input.vid,
|
|
112
|
+
username: input.username,
|
|
113
|
+
};
|
|
114
|
+
if (input.completely_delete !== undefined)
|
|
115
|
+
params.completely_delete = input.completely_delete;
|
|
116
|
+
return callWjxApi(params, { credentials, fetchImpl, maxRetries: 0 });
|
|
117
|
+
}
|
|
118
|
+
export async function getQuestionTags(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
119
|
+
return callWjxApi({ action: Action.GET_TAGS, username: input.username }, { credentials, fetchImpl });
|
|
120
|
+
}
|
|
121
|
+
export async function getTagDetails(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
122
|
+
return callWjxApi({ action: Action.GET_TAG_DETAILS, tag_id: input.tag_id }, { credentials, fetchImpl });
|
|
123
|
+
}
|
|
124
|
+
export async function clearRecycleBin(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
125
|
+
const params = {
|
|
126
|
+
action: Action.CLEAR_RECYCLE_BIN,
|
|
127
|
+
username: input.username,
|
|
128
|
+
};
|
|
129
|
+
if (input.vid !== undefined)
|
|
130
|
+
params.vid = input.vid;
|
|
131
|
+
return callWjxApi(params, { credentials, fetchImpl, maxRetries: 0 });
|
|
132
|
+
}
|
|
133
|
+
export async function uploadFile(input, credentials = getWjxCredentials(), fetchImpl = fetch) {
|
|
134
|
+
return callWjxApi({
|
|
135
|
+
action: Action.UPLOAD_FILE,
|
|
136
|
+
file_name: input.file_name,
|
|
137
|
+
file: input.file,
|
|
138
|
+
}, { credentials, fetchImpl, maxRetries: 0 });
|
|
139
|
+
}
|
|
140
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/modules/survey/client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { SurveyDetail } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Map `${q_type}_${q_subtype}` to a human-readable DSL label.
|
|
4
|
+
* Falls back to `[未知题型:q_type/q_subtype]` for unknown combinations.
|
|
5
|
+
*/
|
|
6
|
+
export declare function typeToLabel(q_type: number, q_subtype: number): string;
|
|
7
|
+
/**
|
|
8
|
+
* Strip HTML tags from a string, replacing <br> variants with newline.
|
|
9
|
+
*/
|
|
10
|
+
export declare function stripHtml(text: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Convert a SurveyDetail (from get_survey API) into a human-readable DSL text.
|
|
13
|
+
*
|
|
14
|
+
* The output is a "readable summary" of the survey, not a complete serialisation.
|
|
15
|
+
* Branch logic, validation rules, scoring, randomisation etc. are not represented.
|
|
16
|
+
*/
|
|
17
|
+
export declare function surveyToText(survey: SurveyDetail): string;
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Map `${q_type}_${q_subtype}` to a human-readable DSL label.
|
|
3
|
+
* Falls back to `[未知题型:q_type/q_subtype]` for unknown combinations.
|
|
4
|
+
*/
|
|
5
|
+
export function typeToLabel(q_type, q_subtype) {
|
|
6
|
+
const key = `${q_type}_${q_subtype}`;
|
|
7
|
+
const label = TYPE_LABEL_MAP[key] ?? TYPE_LABEL_MAP[`${q_type}_${q_type}`];
|
|
8
|
+
if (label)
|
|
9
|
+
return label;
|
|
10
|
+
return `[未知题型:${q_type}/${q_subtype}]`;
|
|
11
|
+
}
|
|
12
|
+
const TYPE_LABEL_MAP = {
|
|
13
|
+
// q_type=1: 分页
|
|
14
|
+
"1_1": "[分页栏]",
|
|
15
|
+
// q_type=2: 段落说明
|
|
16
|
+
"2_2": "[段落说明]",
|
|
17
|
+
// q_type=3: 单选 family
|
|
18
|
+
"3_3": "[单选题]",
|
|
19
|
+
"3_301": "[下拉框]",
|
|
20
|
+
"3_302": "[量表题]",
|
|
21
|
+
"3_303": "[评分单选]",
|
|
22
|
+
"3_304": "[情景题]",
|
|
23
|
+
"3_305": "[判断题]",
|
|
24
|
+
// q_type=4: 多选 family
|
|
25
|
+
"4_4": "[多选题]",
|
|
26
|
+
"4_401": "[评分多选]",
|
|
27
|
+
"4_402": "[排序题]",
|
|
28
|
+
"4_403": "[商品题]",
|
|
29
|
+
// q_type=5: 填空 family
|
|
30
|
+
"5_5": "[填空题]",
|
|
31
|
+
"5_501": "[多级下拉题]",
|
|
32
|
+
// q_type=6: 多项填空
|
|
33
|
+
"6_6": "[多项填空题]",
|
|
34
|
+
// q_type=7: 矩阵 family
|
|
35
|
+
"7_7": "[矩阵题]",
|
|
36
|
+
"7_701": "[矩阵量表题]",
|
|
37
|
+
"7_702": "[矩阵单选题]",
|
|
38
|
+
"7_703": "[矩阵多选题]",
|
|
39
|
+
"7_704": "[矩阵填空题]",
|
|
40
|
+
"7_705": "[矩阵评分题]",
|
|
41
|
+
"7_706": "[矩阵滑块题]",
|
|
42
|
+
"7_707": "[矩阵NPS题]",
|
|
43
|
+
"7_708": "[矩阵下拉题]",
|
|
44
|
+
"7_709": "[矩阵判断题]",
|
|
45
|
+
"7_710": "[矩阵排序题]",
|
|
46
|
+
"7_711": "[矩阵比重题]",
|
|
47
|
+
"7_712": "[矩阵表格题]",
|
|
48
|
+
// q_type=8: 文件上传 family
|
|
49
|
+
"8_8": "[文件上传]",
|
|
50
|
+
"8_801": "[绘图题]",
|
|
51
|
+
// q_type=9: 比重
|
|
52
|
+
"9_9": "[比重题]",
|
|
53
|
+
// q_type=10: 滑动条
|
|
54
|
+
"10_10": "[滑动条]",
|
|
55
|
+
};
|
|
56
|
+
/**
|
|
57
|
+
* Strip HTML tags from a string, replacing <br> variants with newline.
|
|
58
|
+
*/
|
|
59
|
+
export function stripHtml(text) {
|
|
60
|
+
return text
|
|
61
|
+
.replace(/<br\s*\/?>/gi, "\n")
|
|
62
|
+
.replace(/<[^>]*>/g, "")
|
|
63
|
+
.trim();
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Render a single question item as a line of text.
|
|
67
|
+
*/
|
|
68
|
+
function renderItem(item) {
|
|
69
|
+
return stripHtml(item.item_title);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Convert a SurveyDetail (from get_survey API) into a human-readable DSL text.
|
|
73
|
+
*
|
|
74
|
+
* The output is a "readable summary" of the survey, not a complete serialisation.
|
|
75
|
+
* Branch logic, validation rules, scoring, randomisation etc. are not represented.
|
|
76
|
+
*/
|
|
77
|
+
export function surveyToText(survey) {
|
|
78
|
+
const lines = [];
|
|
79
|
+
// Title
|
|
80
|
+
lines.push(stripHtml(survey.title));
|
|
81
|
+
// Description (if non-empty)
|
|
82
|
+
if (survey.description) {
|
|
83
|
+
lines.push("");
|
|
84
|
+
lines.push(stripHtml(survey.description));
|
|
85
|
+
}
|
|
86
|
+
const questions = survey.questions;
|
|
87
|
+
if (!questions || questions.length === 0) {
|
|
88
|
+
return lines.join("\n");
|
|
89
|
+
}
|
|
90
|
+
// Separate page breaks from real questions so we can render page separators
|
|
91
|
+
// between groups and number only real questions.
|
|
92
|
+
const segments = splitByPages(questions);
|
|
93
|
+
let qNumber = 1;
|
|
94
|
+
for (let si = 0; si < segments.length; si++) {
|
|
95
|
+
const segment = segments[si];
|
|
96
|
+
// Add page separator between pages (not before the first or after the last)
|
|
97
|
+
if (si > 0) {
|
|
98
|
+
lines.push("");
|
|
99
|
+
lines.push("=== 分页 ===");
|
|
100
|
+
}
|
|
101
|
+
for (const q of segment) {
|
|
102
|
+
lines.push("");
|
|
103
|
+
// Paragraph / description (q_type=2): no number
|
|
104
|
+
if (q.q_type === 2) {
|
|
105
|
+
lines.push(stripHtml(q.q_title));
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const label = typeToLabel(q.q_type, q.q_subtype);
|
|
109
|
+
const title = stripHtml(q.q_title);
|
|
110
|
+
const requiredMark = q.is_requir ? "" : "(选填)";
|
|
111
|
+
lines.push(`${qNumber}. ${title}${label}${requiredMark}`);
|
|
112
|
+
qNumber++;
|
|
113
|
+
// Render question-type-specific content
|
|
114
|
+
renderQuestionBody(q, lines);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
return lines.join("\n").trim();
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Split the flat questions array into segments separated by page breaks (q_type=1).
|
|
121
|
+
* Page break entries themselves are excluded from segments.
|
|
122
|
+
*/
|
|
123
|
+
function splitByPages(questions) {
|
|
124
|
+
const segments = [];
|
|
125
|
+
let current = [];
|
|
126
|
+
for (const q of questions) {
|
|
127
|
+
if (q.q_type === 1) {
|
|
128
|
+
// Start a new page — always push the current segment
|
|
129
|
+
segments.push(current);
|
|
130
|
+
current = [];
|
|
131
|
+
continue;
|
|
132
|
+
}
|
|
133
|
+
current.push(q);
|
|
134
|
+
}
|
|
135
|
+
// Push the last segment
|
|
136
|
+
segments.push(current);
|
|
137
|
+
// If the first segment is empty (leading page break), remove it
|
|
138
|
+
// so we don't get a separator before the first real content.
|
|
139
|
+
if (segments.length > 0 && segments[0].length === 0) {
|
|
140
|
+
segments.shift();
|
|
141
|
+
}
|
|
142
|
+
// Ensure at least one segment
|
|
143
|
+
if (segments.length === 0) {
|
|
144
|
+
segments.push([]);
|
|
145
|
+
}
|
|
146
|
+
return segments;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Append question-body lines (options, scale range, matrix rows, etc.)
|
|
150
|
+
*/
|
|
151
|
+
function renderQuestionBody(q, lines) {
|
|
152
|
+
switch (q.q_type) {
|
|
153
|
+
case 3: // single-choice family
|
|
154
|
+
case 4: // multi-choice family
|
|
155
|
+
renderChoiceItems(q, lines);
|
|
156
|
+
break;
|
|
157
|
+
case 5: // fill-in (no body needed)
|
|
158
|
+
break;
|
|
159
|
+
case 6: // multi-fill
|
|
160
|
+
renderMultiFillItems(q, lines);
|
|
161
|
+
break;
|
|
162
|
+
case 7: // matrix family
|
|
163
|
+
renderMatrixItems(q, lines);
|
|
164
|
+
break;
|
|
165
|
+
case 8: // file upload (no body)
|
|
166
|
+
break;
|
|
167
|
+
case 9: // weight distribution
|
|
168
|
+
renderWeightItems(q, lines);
|
|
169
|
+
break;
|
|
170
|
+
case 10: // slider
|
|
171
|
+
renderSlider(q, lines);
|
|
172
|
+
break;
|
|
173
|
+
default:
|
|
174
|
+
// For unknown types, still try to render items if present
|
|
175
|
+
if (q.items && q.items.length > 0) {
|
|
176
|
+
for (const item of q.items) {
|
|
177
|
+
lines.push(renderItem(item));
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
break;
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function renderChoiceItems(q, lines) {
|
|
184
|
+
// Scale-type (302): render as range "min~max"
|
|
185
|
+
if (q.q_subtype === 302 && q.items && q.items.length > 0) {
|
|
186
|
+
const first = q.items[0];
|
|
187
|
+
const last = q.items[q.items.length - 1];
|
|
188
|
+
lines.push(`${stripHtml(first.item_title)}~${stripHtml(last.item_title)}`);
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
if (!q.items || q.items.length === 0)
|
|
192
|
+
return;
|
|
193
|
+
for (const item of q.items) {
|
|
194
|
+
lines.push(renderItem(item));
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function renderMultiFillItems(q, lines) {
|
|
198
|
+
if (!q.items || q.items.length === 0) {
|
|
199
|
+
// gap_count may indicate the number of blanks
|
|
200
|
+
if (q.gap_count && q.gap_count > 0) {
|
|
201
|
+
lines.push(`(${q.gap_count} 个填空项)`);
|
|
202
|
+
}
|
|
203
|
+
return;
|
|
204
|
+
}
|
|
205
|
+
for (const item of q.items) {
|
|
206
|
+
lines.push(`____${renderItem(item)}`);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
function renderMatrixItems(q, lines) {
|
|
210
|
+
if (!q.items || q.items.length === 0) {
|
|
211
|
+
// Matrix without items — just note the mode
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
// Matrix questions use items as rows.
|
|
215
|
+
// The columns aren't always in the response (col_items from creation may be lost).
|
|
216
|
+
// We render rows as bullet items.
|
|
217
|
+
lines.push("行:");
|
|
218
|
+
for (const item of q.items) {
|
|
219
|
+
lines.push(`- ${renderItem(item)}`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
function renderWeightItems(q, lines) {
|
|
223
|
+
if (q.total != null) {
|
|
224
|
+
lines.push(`总分:${q.total}`);
|
|
225
|
+
}
|
|
226
|
+
if (!q.items || q.items.length === 0)
|
|
227
|
+
return;
|
|
228
|
+
for (const item of q.items) {
|
|
229
|
+
lines.push(renderItem(item));
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function renderSlider(q, lines) {
|
|
233
|
+
const min = q.min_value ?? 0;
|
|
234
|
+
const max = q.max_value ?? 100;
|
|
235
|
+
lines.push(`${min}~${max}`);
|
|
236
|
+
}
|
|
237
|
+
//# sourceMappingURL=survey-to-text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"survey-to-text.js","sourceRoot":"","sources":["../../../src/modules/survey/survey-to-text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { ParsedSurvey } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Parse DSL text (as produced by surveyToText) back into a ParsedSurvey structure.
|
|
4
|
+
*
|
|
5
|
+
* Skeleton parser: supports single-choice, multi-choice, fill-in, scale, matrix, paragraph.
|
|
6
|
+
* Page breaks ("=== 分页 ===") are recognized but not represented in the output
|
|
7
|
+
* (the flat question list is what the create API consumes).
|
|
8
|
+
*/
|
|
9
|
+
export declare function textToSurvey(text: string): ParsedSurvey;
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DSL type label → ParsedQuestion.type mapping.
|
|
3
|
+
* Skeleton: 6 core types. Extend as needed.
|
|
4
|
+
*/
|
|
5
|
+
const LABEL_TO_TYPE = {
|
|
6
|
+
"单选题": "single-choice",
|
|
7
|
+
"下拉框": "dropdown",
|
|
8
|
+
"下拉单选": "dropdown",
|
|
9
|
+
"多选题": "multi-choice",
|
|
10
|
+
"填空题": "fill-in",
|
|
11
|
+
"多项填空题": "fill-in",
|
|
12
|
+
"量表题": "scale",
|
|
13
|
+
"评分单选": "scoring-single",
|
|
14
|
+
"评分多选": "scoring-multi",
|
|
15
|
+
"滑动条": "scale",
|
|
16
|
+
"排序题": "sort",
|
|
17
|
+
"判断题": "true-false",
|
|
18
|
+
"矩阵题": "matrix",
|
|
19
|
+
"矩阵量表题": "matrix",
|
|
20
|
+
"矩阵单选题": "matrix",
|
|
21
|
+
"矩阵多选题": "matrix",
|
|
22
|
+
"矩阵填空题": "matrix",
|
|
23
|
+
"段落说明": "paragraph",
|
|
24
|
+
"比重题": "weight",
|
|
25
|
+
};
|
|
26
|
+
/** Regex to match a numbered question line: "1. Title[标签](选填)" */
|
|
27
|
+
const Q_LINE_RE = /^(\d+)\.\s+(.+?)(\[([^\]]+)\])(\s*(选填))?\s*$/;
|
|
28
|
+
/** Regex to match a DSL type label inside brackets: [单选题], [量表题], etc. */
|
|
29
|
+
const LABEL_RE = /\[([^\]]+)\]/;
|
|
30
|
+
/**
|
|
31
|
+
* Parse DSL text (as produced by surveyToText) back into a ParsedSurvey structure.
|
|
32
|
+
*
|
|
33
|
+
* Skeleton parser: supports single-choice, multi-choice, fill-in, scale, matrix, paragraph.
|
|
34
|
+
* Page breaks ("=== 分页 ===") are recognized but not represented in the output
|
|
35
|
+
* (the flat question list is what the create API consumes).
|
|
36
|
+
*/
|
|
37
|
+
export function textToSurvey(text) {
|
|
38
|
+
const lines = text.split("\n");
|
|
39
|
+
if (lines.length === 0) {
|
|
40
|
+
return { title: "", description: "", questions: [] };
|
|
41
|
+
}
|
|
42
|
+
// First non-empty line is the title
|
|
43
|
+
let cursor = 0;
|
|
44
|
+
while (cursor < lines.length && !lines[cursor].trim())
|
|
45
|
+
cursor++;
|
|
46
|
+
const title = cursor < lines.length ? lines[cursor].trim() : "";
|
|
47
|
+
cursor++;
|
|
48
|
+
// Collect description lines (between title and first numbered question/page-break)
|
|
49
|
+
const descLines = [];
|
|
50
|
+
while (cursor < lines.length) {
|
|
51
|
+
const line = lines[cursor].trim();
|
|
52
|
+
// Stop at first numbered question line or page break
|
|
53
|
+
if (Q_LINE_RE.test(line) || line === "=== 分页 ===") {
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
descLines.push(line);
|
|
57
|
+
cursor++;
|
|
58
|
+
}
|
|
59
|
+
const description = descLines.join("\n").trim();
|
|
60
|
+
// Parse questions
|
|
61
|
+
const questions = [];
|
|
62
|
+
while (cursor < lines.length) {
|
|
63
|
+
const line = lines[cursor].trim();
|
|
64
|
+
// Skip empty lines and page breaks
|
|
65
|
+
if (!line || line === "=== 分页 ===") {
|
|
66
|
+
cursor++;
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
const qMatch = line.match(Q_LINE_RE);
|
|
70
|
+
if (qMatch) {
|
|
71
|
+
// Numbered question
|
|
72
|
+
const rawTitle = qMatch[2].trim();
|
|
73
|
+
const label = qMatch[4];
|
|
74
|
+
const isOptional = !!qMatch[5];
|
|
75
|
+
const type = LABEL_TO_TYPE[label] ?? "unknown";
|
|
76
|
+
cursor++;
|
|
77
|
+
const q = parseQuestionBody(type, rawTitle, !isOptional, lines, cursor);
|
|
78
|
+
questions.push(q.question);
|
|
79
|
+
cursor = q.nextCursor;
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
// Unnumbered text block → paragraph
|
|
83
|
+
if (!Q_LINE_RE.test(line)) {
|
|
84
|
+
questions.push({
|
|
85
|
+
title: line,
|
|
86
|
+
type: "paragraph",
|
|
87
|
+
required: false,
|
|
88
|
+
});
|
|
89
|
+
cursor++;
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
cursor++;
|
|
93
|
+
}
|
|
94
|
+
return { title, description, questions };
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Parse the body lines following a question header.
|
|
98
|
+
* Consumes lines until the next question, page break, or end of input.
|
|
99
|
+
*/
|
|
100
|
+
function parseQuestionBody(type, title, required, lines, cursor) {
|
|
101
|
+
const bodyLines = [];
|
|
102
|
+
// Collect body lines until we hit a new question, page break, or consecutive empty lines
|
|
103
|
+
while (cursor < lines.length) {
|
|
104
|
+
const line = lines[cursor].trim();
|
|
105
|
+
// Stop at page break
|
|
106
|
+
if (line === "=== 分页 ===")
|
|
107
|
+
break;
|
|
108
|
+
// Stop at next numbered question
|
|
109
|
+
if (Q_LINE_RE.test(line))
|
|
110
|
+
break;
|
|
111
|
+
// Stop at empty line (question boundary), but peek ahead
|
|
112
|
+
if (!line) {
|
|
113
|
+
// Check if next non-empty line is a new question or page break
|
|
114
|
+
let peek = cursor + 1;
|
|
115
|
+
while (peek < lines.length && !lines[peek].trim())
|
|
116
|
+
peek++;
|
|
117
|
+
if (peek >= lines.length || Q_LINE_RE.test(lines[peek].trim()) || lines[peek].trim() === "=== ���页 ===") {
|
|
118
|
+
break;
|
|
119
|
+
}
|
|
120
|
+
// Otherwise this empty line is within the question body (shouldn't happen in clean DSL)
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
bodyLines.push(line);
|
|
124
|
+
cursor++;
|
|
125
|
+
}
|
|
126
|
+
const question = buildQuestion(type, title, required, bodyLines);
|
|
127
|
+
return { question, nextCursor: cursor };
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Build a ParsedQuestion from type, title, and body lines.
|
|
131
|
+
*/
|
|
132
|
+
function buildQuestion(type, title, required, body) {
|
|
133
|
+
const q = { title, type, required };
|
|
134
|
+
switch (type) {
|
|
135
|
+
case "single-choice":
|
|
136
|
+
case "multi-choice":
|
|
137
|
+
case "dropdown":
|
|
138
|
+
case "scoring-single":
|
|
139
|
+
case "scoring-multi":
|
|
140
|
+
case "sort":
|
|
141
|
+
case "true-false":
|
|
142
|
+
case "weight":
|
|
143
|
+
q.options = body.filter((l) => l.length > 0);
|
|
144
|
+
break;
|
|
145
|
+
case "scale":
|
|
146
|
+
// Scale body is "min~max" on one line
|
|
147
|
+
if (body.length > 0) {
|
|
148
|
+
const rangeLine = body[0];
|
|
149
|
+
const parts = rangeLine.split("~");
|
|
150
|
+
if (parts.length === 2) {
|
|
151
|
+
q.scaleRange = [parts[0].trim(), parts[1].trim()];
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
break;
|
|
155
|
+
case "matrix":
|
|
156
|
+
// Matrix body: "行:" header, then "- row1", "- row2", ...
|
|
157
|
+
q.matrixRows = [];
|
|
158
|
+
for (const line of body) {
|
|
159
|
+
if (line === "行:")
|
|
160
|
+
continue;
|
|
161
|
+
if (line.startsWith("- ")) {
|
|
162
|
+
q.matrixRows.push(line.slice(2).trim());
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
break;
|
|
166
|
+
case "fill-in":
|
|
167
|
+
// No body for simple fill-in
|
|
168
|
+
break;
|
|
169
|
+
case "paragraph":
|
|
170
|
+
// Title is the content
|
|
171
|
+
break;
|
|
172
|
+
}
|
|
173
|
+
return q;
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=text-to-survey.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text-to-survey.js","sourceRoot":"","sources":["../../../src/modules/survey/text-to-survey.ts"],"names":[],"mappings":"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"}
|