UNPKG

@comake/skl-js-engine

Version:

Standard Knowledge Language Javascript Engine

135 lines 3.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MessageBuffer = exports.isValidJsonRpc = exports.createSuccessResponse = exports.createErrorResponse = exports.isNotification = exports.isRequest = exports.isResponse = exports.safeParse = void 0; /** * Safely parse a JSON message, returning undefined if parsing fails * @param message - String message to parse * @returns Parsed object or undefined if invalid JSON */ function safeParse(message) { try { return JSON.parse(message); } catch { return undefined; } } exports.safeParse = safeParse; /** * Check if a message is a JSON-RPC response (vs request/notification) * @param message - Parsed message object * @returns True if message is a response */ function isResponse(message) { return message && typeof message === 'object' && ('result' in message || 'error' in message) && 'id' in message && !('method' in message); } exports.isResponse = isResponse; /** * Check if a message is a JSON-RPC request * @param message - Parsed message object * @returns True if message is a request */ function isRequest(message) { return message && typeof message === 'object' && 'method' in message && 'id' in message; } exports.isRequest = isRequest; /** * Check if a message is a JSON-RPC notification * @param message - Parsed message object * @returns True if message is a notification */ function isNotification(message) { return message && typeof message === 'object' && 'method' in message && !('id' in message); } exports.isNotification = isNotification; /** * Create a JSON-RPC error response * @param id - Request ID * @param code - Error code * @param message - Error message * @param data - Optional error data * @returns JSON-RPC error response object */ function createErrorResponse(id, code, message, data) { return { jsonrpc: '2.0', id, error: { code, message, ...data && { data } } }; } exports.createErrorResponse = createErrorResponse; /** * Create a JSON-RPC success response * @param id - Request ID * @param result - Response result * @returns JSON-RPC success response object */ function createSuccessResponse(id, result) { return { jsonrpc: '2.0', id, result }; } exports.createSuccessResponse = createSuccessResponse; /** * Validate that a message is a valid JSON-RPC message * @param message - Message to validate * @returns True if valid JSON-RPC message */ function isValidJsonRpc(message) { return message && typeof message === 'object' && message.jsonrpc === '2.0' && (isRequest(message) || isNotification(message) || isResponse(message)); } exports.isValidJsonRpc = isValidJsonRpc; /** * Buffer manager for handling streaming message data */ class MessageBuffer { constructor() { this.buffer = ''; } /** * Add data to the buffer and extract complete messages * @param data - Incoming data chunk * @returns Array of complete message strings */ addData(data) { this.buffer += data; // Process complete JSON messages (newline-delimited) const lines = this.buffer.split('\n'); // Keep incomplete line in buffer this.buffer = lines.pop() ?? ''; return lines.filter((line) => line.trim()); } /** * Clear the buffer */ clear() { this.buffer = ''; } /** * Get current buffer content (for debugging) */ getContent() { return this.buffer; } } exports.MessageBuffer = MessageBuffer; //# sourceMappingURL=MessageUtils.js.map