UNPKG

@jupyterlab/services

Version:

Client APIs for the Jupyter services REST APIs

97 lines 3.22 kB
"use strict"; // 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