/** * 将 KeyValueEditor 的行数据转为批量文本 */ export function rowsToBulkText(rows) { if (!rows || !rows.length) return '' return rows.map(row => { const prefix = row.enabled === false ? '#' : '' return `${prefix}${row.key || ''}:${row.value || ''}` }).join('\n') } /** * 将批量文本解析为行数据 */ export function bulkTextToRows(text) { if (!text || !text.trim()) return [] return text.split('\n').filter(line => line.trim()).map(line => { let enabled = true let content = line if (content.startsWith('#')) { enabled = false content = content.substring(1) } const idx = content.indexOf(':') const key = idx >= 0 ? content.substring(0, idx).trim() : content.trim() const value = idx >= 0 ? content.substring(idx + 1).trim() : '' return { enabled, key, value, description: '' } }) } /** * 将 HttpRequestDesigner 的数据序列化为存储格式 */ export function serializeDesigner(designer) { const result = { method: designer.method || 'GET', path: designer.pathTemplate || '', contentType: designer.contentType || '' } if (designer.params && designer.params.length) { result.params = designer.params.filter(p => p.key) } if (designer.headers && designer.headers.length) { result.headers = designer.headers.filter(h => h.key) } if (designer.body) { result.body = { mode: designer.body.mode || 'none' } if (designer.body.mode === 'form-data' && designer.body.formData) { result.body.formData = designer.body.formData.filter(f => f.key) } if (designer.body.mode === 'x-www-form-urlencoded' && designer.body.urlencoded) { result.body.urlencoded = designer.body.urlencoded.filter(f => f.key) } if (designer.body.mode === 'raw-json') { result.body.raw = designer.body.raw || '' } } if (designer.config && designer.config.length) { result.config = designer.config.filter(c => c.key) } return result } /** * 将存储格式反序列化为 HttpRequestDesigner 数据 */ export function deserializeDesigner(data) { return { method: (data && data.method) || 'GET', pathTemplate: (data && data.path) || '', contentType: (data && data.contentType) || '', params: (data && data.params) || [], headers: (data && data.headers) || [], body: { mode: (data && data.body && data.body.mode) || 'none', formData: (data && data.body && data.body.formData) || [], urlencoded: (data && data.body && data.body.urlencoded) || [], raw: (data && data.body && data.body.raw) || '' }, config: (data && data.config) || [] } }