@jupyterlite/xeus-sqlite-kernel
Version:
A SQLite kernel for JupyterLite, powered by Xeus
44 lines (43 loc) • 1.3 kB
JavaScript
// Copyright (c) Thorsten Beier
// Copyright (c) JupyterLite Contributors
// Distributed under the terms of the Modified BSD License.
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
import createXeusModule from './xeus_kernel.js';
// We alias self to ctx and give it our newly created type
const ctx = self;
let raw_xkernel;
let raw_xserver;
async function get_stdin() {
const replyPromise = new Promise(resolve => {
resolveInputReply = resolve;
});
return replyPromise;
}
// eslint-disable-next-line
// @ts-ignore: breaks typedoc
ctx.get_stdin = get_stdin;
// eslint-disable-next-line
// @ts-ignore: breaks typedoc
let resolveInputReply;
async function loadCppModule(moduleFactory) {
const options = {};
return moduleFactory(options).then((Module) => {
raw_xkernel = new Module.xkernel();
raw_xserver = raw_xkernel.get_server();
raw_xkernel.start();
});
}
const loadCppModulePromise = loadCppModule(createXeusModule);
ctx.onmessage = async (event) => {
await loadCppModulePromise;
const data = event.data;
const msg = data.msg;
const msg_type = msg.header.msg_type;
if (msg_type === 'input_reply') {
resolveInputReply(msg);
}
else {
raw_xserver.notify_listener(msg);
}
};