mirror of
https://github.com/usebruno/bruno.git
synced 2026-07-09 06:55:03 +00:00
* feat: add description column to various tables and enhance UI interactions - Introduced a description column in Headers, VarsTable, and other components to allow multi-line descriptions. - Added toggle buttons to show/hide the description column in relevant tables. - Updated EditableTable component to support dynamic row addition with customizable labels. - Enhanced UI for better user experience with consistent button styles and spacing adjustments. * chore: resize fix handles * fix: restrict column check for last index * refactor: remove unwanted style and fix bottom padding of the last child in the table row * tests: improve testability and fix impacted locators * tests: fix locators for value fields * fix: improve newline handling in description prefix * fix: ts changes * chore: remove redundant code and fix description roundtrip * chore: remove redundant check * tests(bru-lang): tests for description and annotation * test: improve locators and tests * tests: descriptions * chore: re-add description setup * fix: re-add description cols * chore: fix the double click reset * fix: account for hidden sidebar in request pane width calculation * refactor: ui/ux fixes for data type toggle * chore: inline common deps into bruno-lang and bruno-schema * chore: tests * chore: fix ux for descriptions * fix: layout for environment vars table * fix: ensure correct row selection for multipart file upload in tests * feat: enhance UID assignment for request headers and variables in collections * chore: simplify * chore: update pkg * chore: abstract the e2e utils * chore: fix exports * tests: fix locators for datatype vars * fix: ux issue with secrets in environment table * tests: update locators for collection headers and vars descriptions * tests: update locators to use data attributes for datatype selectors * chore: update default css width for actions column * chore: remove tooltip for string type warnings * fix: reduce name widths * refactor: update annotation serialization to use single-quote delimiters for descriptions * refactor(tests): simplify description formatting in jsonToEnv tests * feat: add multiline description escaping and unescaping functions with tests * refactor: clean up imports and improve multiline text block handling * refactor: update locators to use new test IDs for environment variable editors * refactor: streamline header input handling and improve environment variable row access * refactor: update e2e-test job to support self-hosted runners * refactor: update E2E test runner configuration to include e2e and macOS environments --------- Co-authored-by: Pragadesh-45 <temporaryg7904@gmail.com>
128 lines
3.6 KiB
TypeScript
128 lines
3.6 KiB
TypeScript
import type { Item as BrunoItem } from '@usebruno/schema-types/collection/item';
|
|
import type { WebSocketRequest as BrunoWebSocketRequest } from '@usebruno/schema-types/requests/websocket';
|
|
import type { WebSocketRequest, WebSocketMessage, WebSocketMessageVariant } from '@opencollection/types/requests/websocket';
|
|
import { toBrunoAuth } from '../common/auth';
|
|
import { toBrunoHttpHeaders } from '../common/headers';
|
|
import { toBrunoVariables } from '../common/variables';
|
|
import { toBrunoScripts } from '../common/scripts';
|
|
import { uuid, ensureString } from '../../../utils';
|
|
|
|
const parseWebsocketRequest = (ocRequest: WebSocketRequest): BrunoItem => {
|
|
const info = ocRequest.info;
|
|
const websocket = ocRequest.websocket;
|
|
const runtime = ocRequest.runtime;
|
|
|
|
const brunoRequest: BrunoWebSocketRequest = {
|
|
url: ensureString(websocket?.url),
|
|
headers: toBrunoHttpHeaders(websocket?.headers) || [],
|
|
auth: toBrunoAuth(websocket?.auth),
|
|
body: {
|
|
mode: 'ws',
|
|
ws: []
|
|
},
|
|
script: {
|
|
req: null,
|
|
res: null
|
|
},
|
|
vars: {
|
|
req: [],
|
|
res: []
|
|
},
|
|
assertions: [],
|
|
tests: null,
|
|
docs: null
|
|
};
|
|
|
|
// message
|
|
if (websocket?.message) {
|
|
if (Array.isArray(websocket.message)) {
|
|
// multiple messages: WebSocketMessageVariant[]
|
|
const variants = websocket.message as WebSocketMessageVariant[];
|
|
brunoRequest.body.ws = variants.map((variant, index) => ({
|
|
name: variant.title || `message ${index + 1}`,
|
|
type: variant.message?.type || 'text',
|
|
content: ensureString(variant.message?.data),
|
|
selected: variant.selected || false
|
|
}));
|
|
} else {
|
|
// single message uses flat WebSocketMessage
|
|
const message = websocket.message as WebSocketMessage;
|
|
const messageData = ensureString(message.data);
|
|
if (messageData.trim().length) {
|
|
brunoRequest.body.ws = [{
|
|
name: '',
|
|
type: message.type || 'text',
|
|
content: messageData
|
|
}];
|
|
}
|
|
}
|
|
}
|
|
|
|
// scripts
|
|
const scripts = toBrunoScripts(runtime?.scripts);
|
|
if (scripts?.script && brunoRequest.script) {
|
|
if (scripts.script.req) {
|
|
brunoRequest.script.req = scripts.script.req;
|
|
}
|
|
if (scripts.script.res) {
|
|
brunoRequest.script.res = scripts.script.res;
|
|
}
|
|
}
|
|
if (scripts?.tests) {
|
|
brunoRequest.tests = scripts.tests;
|
|
}
|
|
|
|
// variables
|
|
const variables = toBrunoVariables(runtime?.variables);
|
|
brunoRequest.vars = variables;
|
|
|
|
// docs
|
|
if (ocRequest.docs) {
|
|
brunoRequest.docs = ocRequest.docs;
|
|
}
|
|
|
|
// settings
|
|
const wsSettings: Record<string, number> = {
|
|
timeout: 0,
|
|
keepAliveInterval: 0
|
|
};
|
|
|
|
if (ocRequest.settings) {
|
|
if (typeof ocRequest.settings.timeout === 'number') {
|
|
wsSettings.timeout = ocRequest.settings.timeout;
|
|
}
|
|
if (typeof ocRequest.settings.keepAliveInterval === 'number') {
|
|
wsSettings.keepAliveInterval = ocRequest.settings.keepAliveInterval;
|
|
}
|
|
}
|
|
|
|
// bruno item
|
|
const brunoItem: BrunoItem = {
|
|
uid: uuid(),
|
|
type: 'ws-request',
|
|
seq: info?.seq || 1,
|
|
name: ensureString(info?.name, 'Untitled Request'),
|
|
tags: info?.tags || [],
|
|
request: brunoRequest,
|
|
settings: wsSettings as any,
|
|
fileContent: null,
|
|
root: null,
|
|
items: [],
|
|
examples: [],
|
|
filename: null,
|
|
pathname: null
|
|
};
|
|
|
|
// description
|
|
if (info?.description) {
|
|
const desc = typeof info.description === 'string' ? info.description : (info.description as any)?.content || '';
|
|
if (desc.trim().length) {
|
|
brunoItem.description = desc;
|
|
}
|
|
}
|
|
|
|
return brunoItem;
|
|
};
|
|
|
|
export default parseWebsocketRequest;
|