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.
Files changed (66) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +300 -0
  3. package/dist/core/api-client.d.ts +13 -0
  4. package/dist/core/api-client.js +141 -0
  5. package/dist/core/api-client.js.map +1 -0
  6. package/dist/core/constants.d.ts +61 -0
  7. package/dist/core/constants.js +82 -0
  8. package/dist/core/constants.js.map +1 -0
  9. package/dist/core/types.d.ts +26 -0
  10. package/dist/core/types.js +2 -0
  11. package/dist/core/types.js.map +1 -0
  12. package/dist/index.d.ts +20 -0
  13. package/dist/index.js +21 -0
  14. package/dist/index.js.map +1 -0
  15. package/dist/modules/analytics/compute.d.ts +14 -0
  16. package/dist/modules/analytics/compute.js +205 -0
  17. package/dist/modules/analytics/compute.js.map +1 -0
  18. package/dist/modules/analytics/push-decode.d.ts +12 -0
  19. package/dist/modules/analytics/push-decode.js +46 -0
  20. package/dist/modules/analytics/push-decode.js.map +1 -0
  21. package/dist/modules/analytics/types.d.ts +61 -0
  22. package/dist/modules/analytics/types.js +3 -0
  23. package/dist/modules/analytics/types.js.map +1 -0
  24. package/dist/modules/contacts/client.d.ts +16 -0
  25. package/dist/modules/contacts/client.js +129 -0
  26. package/dist/modules/contacts/client.js.map +1 -0
  27. package/dist/modules/contacts/types.d.ts +62 -0
  28. package/dist/modules/contacts/types.js +2 -0
  29. package/dist/modules/contacts/types.js.map +1 -0
  30. package/dist/modules/multi-user/client.d.ts +7 -0
  31. package/dist/modules/multi-user/client.js +70 -0
  32. package/dist/modules/multi-user/client.js.map +1 -0
  33. package/dist/modules/multi-user/types.d.ts +31 -0
  34. package/dist/modules/multi-user/types.js +2 -0
  35. package/dist/modules/multi-user/types.js.map +1 -0
  36. package/dist/modules/response/client.d.ts +12 -0
  37. package/dist/modules/response/client.js +169 -0
  38. package/dist/modules/response/client.js.map +1 -0
  39. package/dist/modules/response/types.d.ts +83 -0
  40. package/dist/modules/response/types.js +2 -0
  41. package/dist/modules/response/types.js.map +1 -0
  42. package/dist/modules/sso/client.d.ts +22 -0
  43. package/dist/modules/sso/client.js +101 -0
  44. package/dist/modules/sso/client.js.map +1 -0
  45. package/dist/modules/sso/types.d.ts +75 -0
  46. package/dist/modules/sso/types.js +2 -0
  47. package/dist/modules/sso/types.js.map +1 -0
  48. package/dist/modules/survey/client.d.ts +13 -0
  49. package/dist/modules/survey/client.js +140 -0
  50. package/dist/modules/survey/client.js.map +1 -0
  51. package/dist/modules/survey/survey-to-text.d.ts +17 -0
  52. package/dist/modules/survey/survey-to-text.js +237 -0
  53. package/dist/modules/survey/survey-to-text.js.map +1 -0
  54. package/dist/modules/survey/text-to-survey.d.ts +9 -0
  55. package/dist/modules/survey/text-to-survey.js +175 -0
  56. package/dist/modules/survey/text-to-survey.js.map +1 -0
  57. package/dist/modules/survey/types.d.ts +170 -0
  58. package/dist/modules/survey/types.js +2 -0
  59. package/dist/modules/survey/types.js.map +1 -0
  60. package/dist/modules/user-system/client.d.ts +8 -0
  61. package/dist/modules/user-system/client.js +76 -0
  62. package/dist/modules/user-system/client.js.map +1 -0
  63. package/dist/modules/user-system/types.d.ts +41 -0
  64. package/dist/modules/user-system/types.js +2 -0
  65. package/dist/modules/user-system/types.js.map +1 -0
  66. 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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"}