@jupyterlab/services
Version:
Client APIs for the Jupyter services REST APIs
97 lines • 3.22 kB
JavaScript
// Copyright (c) Jupyter Development Team.
// Distributed under the terms of the Modified BSD License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.validateModels = exports.validateModel = exports.validateMessage = void 0;
const validate_1 = require("../validate");
/**
* Required fields for `IKernelHeader`.
*/
const HEADER_FIELDS = ['username', 'version', 'session', 'msg_id', 'msg_type'];
/**
* Required fields and types for contents of various types of `kernel.IMessage`
* messages on the iopub channel.
*/
const IOPUB_CONTENT_FIELDS = {
stream: { name: 'string', text: 'string' },
display_data: { data: 'object', metadata: 'object' },
execute_input: { code: 'string', execution_count: 'number' },
execute_result: {
execution_count: 'number',
data: 'object',
metadata: 'object'
},
error: { ename: 'string', evalue: 'string', traceback: 'object' },
status: {
execution_state: [
'string',
['starting', 'idle', 'busy', 'restarting', 'dead']
]
},
clear_output: { wait: 'boolean' },
comm_open: { comm_id: 'string', target_name: 'string', data: 'object' },
comm_msg: { comm_id: 'string', data: 'object' },
comm_close: { comm_id: 'string' },
shutdown_reply: { restart: 'boolean' } // Emitted by the IPython kernel.
};
/**
* Validate the header of a kernel message.
*/
function validateHeader(header) {
for (let i = 0; i < HEADER_FIELDS.length; i++) {
(0, validate_1.validateProperty)(header, HEADER_FIELDS[i], 'string');
}
}
/**
* Validate a kernel message object.
*/
function validateMessage(msg) {
(0, validate_1.validateProperty)(msg, 'metadata', 'object');
(0, validate_1.validateProperty)(msg, 'content', 'object');
(0, validate_1.validateProperty)(msg, 'channel', 'string');
validateHeader(msg.header);
if (msg.channel === 'iopub') {
validateIOPubContent(msg);
}
}
exports.validateMessage = validateMessage;
/**
* Validate content an kernel message on the iopub channel.
*/
function validateIOPubContent(msg) {
if (msg.channel === 'iopub') {
const fields = IOPUB_CONTENT_FIELDS[msg.header.msg_type];
// Check for unknown message type.
if (fields === undefined) {
return;
}
const names = Object.keys(fields);
const content = msg.content;
for (let i = 0; i < names.length; i++) {
let args = fields[names[i]];
if (!Array.isArray(args)) {
args = [args];
}
(0, validate_1.validateProperty)(content, names[i], ...args);
}
}
}
/**
* Validate a `Kernel.IModel` object.
*/
function validateModel(model) {
(0, validate_1.validateProperty)(model, 'name', 'string');
(0, validate_1.validateProperty)(model, 'id', 'string');
}
exports.validateModel = validateModel;
/**
* Validate an array of `IModel` objects.
*/
function validateModels(models) {
if (!Array.isArray(models)) {
throw new Error('Invalid kernel list');
}
models.forEach(d => validateModel(d));
}
exports.validateModels = validateModels;
//# sourceMappingURL=validate.js.map
;