@comake/skl-js-engine
Version:
Standard Knowledge Language Javascript Engine
135 lines • 3.77 kB
JavaScript
;
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