@jupyterlite/xeus 3.1.5 → 4.0.0-a1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/coincident.worker.js +1 -1
- package/lib/coincident.worker.js.map +1 -1
- package/lib/comlink.worker.js +1 -1
- package/lib/comlink.worker.js.map +1 -1
- package/lib/interfaces.d.ts +1 -0
- package/lib/web_worker_kernel.js +1 -0
- package/lib/worker.d.ts +9 -0
- package/lib/worker.js +25 -5
- package/package.json +2 -2
package/lib/interfaces.d.ts
CHANGED
package/lib/web_worker_kernel.js
CHANGED
package/lib/worker.d.ts
CHANGED
|
@@ -1,4 +1,12 @@
|
|
|
1
1
|
import { IXeusWorkerKernel } from './interfaces';
|
|
2
|
+
import { ILogger } from '@emscripten-forge/mambajs';
|
|
3
|
+
export declare class XeusWorkerLogger implements ILogger {
|
|
4
|
+
constructor(kernelId: string);
|
|
5
|
+
log(...msg: any[]): void;
|
|
6
|
+
warn(...msg: any[]): void;
|
|
7
|
+
error(...msg: any[]): void;
|
|
8
|
+
private _channel;
|
|
9
|
+
}
|
|
2
10
|
export declare class XeusRemoteKernel {
|
|
3
11
|
constructor(options?: XeusRemoteKernel.IOptions);
|
|
4
12
|
ready(): Promise<void>;
|
|
@@ -11,6 +19,7 @@ export declare class XeusRemoteKernel {
|
|
|
11
19
|
* @param callback the callback to register
|
|
12
20
|
*/
|
|
13
21
|
registerCallback(callback: (msg: any) => void): void;
|
|
22
|
+
private _logger;
|
|
14
23
|
protected _sendWorkerMessage: (msg: any) => void;
|
|
15
24
|
}
|
|
16
25
|
export declare namespace XeusRemoteKernel {
|
package/lib/worker.js
CHANGED
|
@@ -36,6 +36,20 @@ self.get_stdin = get_stdin;
|
|
|
36
36
|
globalThis.ready = new Promise(resolve => {
|
|
37
37
|
kernelReady = resolve;
|
|
38
38
|
});
|
|
39
|
+
export class XeusWorkerLogger {
|
|
40
|
+
constructor(kernelId) {
|
|
41
|
+
this._channel = new BroadcastChannel(`/kernel-broadcast/${kernelId}`);
|
|
42
|
+
}
|
|
43
|
+
log(...msg) {
|
|
44
|
+
this._channel.postMessage({ type: 'log', msg: msg.join(' ') });
|
|
45
|
+
}
|
|
46
|
+
warn(...msg) {
|
|
47
|
+
this._channel.postMessage({ type: 'warn', msg: msg.join(' ') });
|
|
48
|
+
}
|
|
49
|
+
error(...msg) {
|
|
50
|
+
this._channel.postMessage({ type: 'error', msg: msg.join(' ') });
|
|
51
|
+
}
|
|
52
|
+
}
|
|
39
53
|
export class XeusRemoteKernel {
|
|
40
54
|
constructor(options = {}) {
|
|
41
55
|
this._sendWorkerMessage = () => { };
|
|
@@ -76,7 +90,8 @@ export class XeusRemoteKernel {
|
|
|
76
90
|
}
|
|
77
91
|
}
|
|
78
92
|
async initialize(options) {
|
|
79
|
-
const { baseUrl, kernelSpec, empackEnvMetaLink } = options;
|
|
93
|
+
const { baseUrl, kernelSpec, empackEnvMetaLink, kernelId } = options;
|
|
94
|
+
this._logger = new XeusWorkerLogger(kernelId);
|
|
80
95
|
// location of the kernel binary on the server
|
|
81
96
|
const binary_js = URLExt.join(baseUrl, kernelSpec.argv[0]);
|
|
82
97
|
const binary_wasm = binary_js.replace('.js', '.wasm');
|
|
@@ -107,13 +122,13 @@ export class XeusRemoteKernel {
|
|
|
107
122
|
globalThis.Module.loadDynamicLibrary !== undefined) {
|
|
108
123
|
const empackEnvMetaLocation = empackEnvMetaLink || kernel_root_url;
|
|
109
124
|
const packagesJsonUrl = `${empackEnvMetaLocation}/empack_env_meta.json`;
|
|
110
|
-
const pkgRootUrl = URLExt.join(baseUrl,
|
|
125
|
+
const pkgRootUrl = URLExt.join(baseUrl, `xeus/kernels/${kernelSpec.name}/kernel_packages`);
|
|
111
126
|
const empackEnvMeta = (await fetchJson(packagesJsonUrl));
|
|
112
127
|
const sharedLibs = await bootstrapEmpackPackedEnvironment({
|
|
113
128
|
empackEnvMeta,
|
|
114
129
|
pkgRootUrl,
|
|
115
130
|
Module: globalThis.Module,
|
|
116
|
-
|
|
131
|
+
logger: this._logger
|
|
117
132
|
});
|
|
118
133
|
// Bootstrap Python, if it's xeus-python
|
|
119
134
|
if (kernelSpec.name === 'xpython') {
|
|
@@ -121,6 +136,7 @@ export class XeusRemoteKernel {
|
|
|
121
136
|
if (!pythonVersion) {
|
|
122
137
|
throw new Error('Failed to load Python!');
|
|
123
138
|
}
|
|
139
|
+
this._logger.log('Starting Python');
|
|
124
140
|
await bootstrapPython({
|
|
125
141
|
prefix: empackEnvMeta.prefix,
|
|
126
142
|
pythonVersion: pythonVersion,
|
|
@@ -131,25 +147,29 @@ export class XeusRemoteKernel {
|
|
|
131
147
|
await loadShareLibs({
|
|
132
148
|
sharedLibs,
|
|
133
149
|
prefix: empackEnvMeta.prefix,
|
|
134
|
-
Module: globalThis.Module
|
|
150
|
+
Module: globalThis.Module,
|
|
151
|
+
logger: this._logger
|
|
135
152
|
});
|
|
136
153
|
}
|
|
137
154
|
rawXKernel = new globalThis.Module.xkernel();
|
|
138
155
|
rawXServer = rawXKernel.get_server();
|
|
139
156
|
if (!rawXServer) {
|
|
140
|
-
|
|
157
|
+
this._logger.error('Failed to start kernel!');
|
|
141
158
|
}
|
|
142
159
|
rawXKernel.start();
|
|
143
160
|
}
|
|
144
161
|
catch (e) {
|
|
145
162
|
if (typeof e === 'number') {
|
|
146
163
|
const msg = globalThis.Module.get_exception_message(e);
|
|
164
|
+
this._logger.error(msg);
|
|
147
165
|
throw new Error(msg);
|
|
148
166
|
}
|
|
149
167
|
else {
|
|
168
|
+
this._logger.error(e);
|
|
150
169
|
throw e;
|
|
151
170
|
}
|
|
152
171
|
}
|
|
172
|
+
this._logger.log('Kernel successfuly started!');
|
|
153
173
|
kernelReady(1);
|
|
154
174
|
}
|
|
155
175
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jupyterlite/xeus",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "4.0.0-a1",
|
|
4
4
|
"description": "JupyterLite Xeus kernels",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"jupyter",
|
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"watch:src": "tsc -w --sourceMap"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@emscripten-forge/mambajs": "^0.
|
|
39
|
+
"@emscripten-forge/mambajs": "^0.6.0",
|
|
40
40
|
"@jupyterlab/coreutils": "^6",
|
|
41
41
|
"@jupyterlab/services": "^7.3.4",
|
|
42
42
|
"@jupyterlite/contents": "^0.2.0 || ^0.3.0 || ^0.4.5 || ^0.5.1",
|