@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.
@@ -62,6 +62,7 @@ export declare namespace IXeusWorkerKernel {
62
62
  */
63
63
  interface IOptions extends IWorkerKernel.IOptions {
64
64
  baseUrl: string;
65
+ kernelId: string;
65
66
  kernelSpec: any;
66
67
  mountDrive: boolean;
67
68
  empackEnvMetaLink?: string;
@@ -83,6 +83,7 @@ export class WebWorkerKernel {
83
83
  }
84
84
  remote
85
85
  .initialize({
86
+ kernelId: this._id,
86
87
  kernelSpec: this._kernelSpec,
87
88
  baseUrl: PageConfig.getBaseUrl(),
88
89
  mountDrive: options.mountDrive,
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, 'xeus/kernel_packages');
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
- verbose: false
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
- console.error('Failed to start kernel!');
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.1.5",
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.4.1",
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",