diff --git a/package.json b/package.json index 237c34a..d862854 100644 --- a/package.json +++ b/package.json @@ -56,6 +56,7 @@ "dependencies": { "@jupyterlab/application": "^3.5.0 || ^4.0.5", "@jupyterlab/coreutils": "^6.0.0", + "@jupyterlab/notebook": "^4.0.7", "@jupyterlab/services": "^7.0.0" }, "devDependencies": { diff --git a/src/active.ts b/src/active.ts deleted file mode 100644 index 3046f72..0000000 --- a/src/active.ts +++ /dev/null @@ -1,107 +0,0 @@ -import { JupyterFrontEnd } from '@jupyterlab/application'; -import { IKernelConnection } from '@jupyterlab/services/lib/kernel/kernel'; -import { URLExt } from '@jupyterlab/coreutils'; -import { ServerConnection } from '@jupyterlab/services'; - -export class ActiveManager { - app: JupyterFrontEnd; - www: string; - endpoint: string; - kernels: Record; - - constructor(app: JupyterFrontEnd) { - this.app = app; - this.kernels = {}; - this.www = ''; - this.endpoint = '/trame-jupyter-server'; - this.updateExtensionLocation(); - } - - finishInitialization() { - this.updateSessionMapping(); - this.app.serviceManager.sessions.runningChanged.connect( - this.updateSessionMapping, - this - ); - } - - async updateExtensionLocation() { - const settings = ServerConnection.makeSettings(); - this.endpoint = URLExt.join(settings.baseUrl, 'trame-jupyter-server'); - const requestUrl = URLExt.join( - settings.baseUrl, - 'trame-jupyter-server', - 'location' - ); - let response: Response; - try { - response = await ServerConnection.makeRequest(requestUrl, {}, settings); - } catch (error) { - throw new ServerConnection.NetworkError(error as any); - } - - const data: any = await response.text(); - - if (data.length > 0) { - try { - this.www = JSON.parse(data).www; - } catch (error) { - console.log('Not a JSON response body.', response); - } - } - - if (!response.ok) { - throw new ServerConnection.ResponseError(response, data.message || data); - } - - this.finishInitialization(); - } - - getKernelCode(): string { - return ` - import os - os.environ["TRAME_DISABLE_V3_WARNING"] = "1" - os.environ["TRAME_IFRAME_BUILDER"] = "jupyter-extension" - os.environ["TRAME_BACKEND"] = "jupyter" - os.environ["TRAME_JUPYTER_WWW"] = "${this.www}" - os.environ["TRAME_JUPYTER_ENDPOINT"] = "${this.endpoint}" - `; - } - - updateSessionMapping() { - const runningSessions = this.app.serviceManager.sessions.running(); - let entry = null; - do { - entry = runningSessions.next(); - const session = entry.value; - if (session?.kernel) { - const kernelId = session.kernel.id; - - // Create a connection by default and set ENV on kernel - if (!this.kernels[kernelId]) { - const kernelConnection = this.app.serviceManager.kernels.connectTo({ - model: session.kernel, - handleComms: true - }); - this.kernels[kernelId] = kernelConnection; - - kernelConnection.requestExecute({ - silent: true, - code: this.getKernelCode(), - }); - } - } - } while (!entry.done); - } - - getKernelConnection(kernelId: string): IKernelConnection | null { - return this.kernels[kernelId]; - } - - dispose() { - this.app.serviceManager.sessions.runningChanged.disconnect( - this.updateSessionMapping, - this - ); - } -} diff --git a/src/comm.ts b/src/comm.ts index a8736f9..aabce52 100644 --- a/src/comm.ts +++ b/src/comm.ts @@ -3,8 +3,7 @@ import { IComm } from '@jupyterlab/services/lib/kernel/kernel'; import { - ICommMsgMsg, - ICommCloseMsg + ICommMsgMsg } from '@jupyterlab/services/lib/kernel/messages'; import { ConcreteEmitter } from './emitter'; @@ -16,6 +15,8 @@ export type CommMessage = { export type CommEvents = { message: CommMessage; + open: void; + close: void; }; export class TrameJupyterComm extends ConcreteEmitter { @@ -27,10 +28,24 @@ export class TrameJupyterComm extends ConcreteEmitter { this.kernel = kernel; this.comm = null; + + this.kernel.disposed.connect(this.onClose.bind(this)); + this.kernel.statusChanged.connect((_kernel, status) => { + if (status === 'restarting' || + status === 'autorestarting' || + status === 'terminating' || + status === 'dead') { + this.onClose(); + } + }); } open() { - if (!this.comm || this.comm.isDisposed) { + if (this.kernel.isDisposed) { + throw new Error(`Can't open a comm for disposed kernel ${this.kernel.id}`); + } + + if ((!this.comm || this.comm.isDisposed) && !this.kernel.isDisposed) { this.comm = this.kernel.createComm('wslink_comm'); this.comm.open(); this.comm.onMsg = this.onMessage.bind(this); @@ -39,8 +54,8 @@ export class TrameJupyterComm extends ConcreteEmitter { } send(message: CommMessage) { - if (this.comm) { - this.comm.send(message.data, undefined, message.buffers); + if (this.isUseable()) { + this.comm!.send(message.data, undefined, message.buffers); } else { console.error('trame::jupyter-comm::send -- NO COMM'); } @@ -50,7 +65,13 @@ export class TrameJupyterComm extends ConcreteEmitter { this.emit('message', { data: msg.content.data, buffers: msg.buffers }); } - onClose(msg: ICommCloseMsg<'iopub' | 'shell'>) { + onClose(...args: any) { console.error('trame::jupyter-comm::close -- NO COMM'); + this.comm = null; + this.emit('close', undefined); + } + + isUseable() { + return (!this.kernel.isDisposed && this.comm && !this.comm.isDisposed); } } diff --git a/src/index.ts b/src/index.ts index dd43289..e72f355 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,43 @@ +import { IDisposable } from '@lumino/disposable'; + import { JupyterFrontEnd, JupyterFrontEndPlugin } from '@jupyterlab/application'; -import { ActiveManager } from './active'; +import { DocumentRegistry } from '@jupyterlab/docregistry'; +import { NotebookPanel, INotebookModel } from '@jupyterlab/notebook'; +import { Kernel } from '@jupyterlab/services'; + import { TrameJupyterComm } from './comm'; import { TrameJupyterWebSocket } from './websocket'; +import { ContextManager } from './manager'; +import { Registry } from './registry'; +import { getExtensionLocation } from './location'; + +/** +* A notebook widget extension that creates a kernel manager each time a notebook is opened. +*/ +export class WidgetExtension + implements DocumentRegistry.IWidgetExtension +{ + private _endpoint: string; + private _www: string; + + constructor(endpoint: string, www: string) { + this._endpoint = endpoint; + this._www = www; + } + + createNew( + _panel: NotebookPanel, + context: DocumentRegistry.IContext + ): IDisposable { + let manager = new ContextManager(context, this._endpoint, this._www); + + return manager; + } +} /** * Initialization data for the trame-jupyter-extension extension. @@ -14,41 +46,49 @@ const plugin: JupyterFrontEndPlugin = { id: 'trame-jupyter-extension:plugin', description: 'A JupyterLab extension for trame communication layer', autoStart: true, - activate: (app: JupyterFrontEnd) => { - const activeManager = new ActiveManager(app); - const comms: Record = {}; + activate: async (app: JupyterFrontEnd) => { + const kernelsRegistry = new Registry(); + const commsRegistry = new Registry(); function init(childWindow: any) { const kernelId = childWindow.frameElement.dataset.kernelId; - if (!comms[kernelId]) { - const kc = activeManager.getKernelConnection(kernelId); - if (!kc) { - throw new Error( - `trame: Could not get kernel connection to ${kernelId}` - ); - } - comms[kernelId] = new TrameJupyterComm(kc); + const kc = kernelsRegistry.getItem(kernelId); + let comm = commsRegistry.getItem(kernelId); - // Open kernel connection at creation - comms[kernelId].open(); + if (!kc) { + throw new Error( + `trame: Could not get kernel connection to ${kernelId}` + ); } - if (comms[kernelId]) { - return { - createWebSocket: () => { - return new TrameJupyterWebSocket(childWindow, comms[kernelId]); - } - }; + + if (!comm || !comm.isUseable()) { + comm = new TrameJupyterComm(kc); + comm.open(); + commsRegistry.setItem(kernelId, comm); + comm.addEventListener('close', () => { + commsRegistry.setItem(kernelId, null); + }) } + + return { + createWebSocket: () => { + return new TrameJupyterWebSocket(childWindow, comm!); + } + }; } const namespace = { app, - activeManager, - comms, + kernelsRegistry, + commsRegistry, init }; (window as any).trameJupyter = namespace; + + const { endpoint, www } = await getExtensionLocation(); + + app.docRegistry.addWidgetExtension('Notebook', new WidgetExtension(endpoint, www)); } }; diff --git a/src/location.ts b/src/location.ts new file mode 100644 index 0000000..087fd33 --- /dev/null +++ b/src/location.ts @@ -0,0 +1,39 @@ +import { URLExt } from '@jupyterlab/coreutils'; +import { ServerConnection } from '@jupyterlab/services'; + +async function getExtensionLocation() : Promise<{endpoint: string; www: string;}> { + let www = ""; + let endpoint = ""; + + const settings = ServerConnection.makeSettings(); + endpoint = URLExt.join(settings.baseUrl, 'trame-jupyter-server'); + const requestUrl = URLExt.join( + settings.baseUrl, + 'trame-jupyter-server', + 'location' + ); + let response: Response; + try { + response = await ServerConnection.makeRequest(requestUrl, {}, settings); + } catch (error) { + throw new ServerConnection.NetworkError(error as any); + } + + const data: any = await response.text(); + + if (data.length > 0) { + try { + www = JSON.parse(data).www; + } catch (error) { + console.log('Not a JSON response body.', response); + } + } + + if (!response.ok) { + throw new ServerConnection.ResponseError(response, data.message || data); + } + + return { endpoint, www }; +} + +export { getExtensionLocation }; diff --git a/src/manager.ts b/src/manager.ts new file mode 100644 index 0000000..de010db --- /dev/null +++ b/src/manager.ts @@ -0,0 +1,97 @@ +import { IDisposable } from '@lumino/disposable'; + +import { DocumentRegistry } from '@jupyterlab/docregistry'; + +import { Kernel } from '@jupyterlab/services'; + +import { ISessionContext } from '@jupyterlab/apputils'; + +import { IChangedArgs } from '@jupyterlab/coreutils'; + +import { Registry } from './registry'; + +export class ContextManager implements IDisposable { + private _context: DocumentRegistry.IContext | null; + private _kernel: Kernel.IKernelConnection | null; + private _kernelsRegistry: Registry; + private _endpoint: string; + private _www: string; + + constructor( + context: DocumentRegistry.IContext, + endpoint: string, www: string + ) { + this._context = context; + this._endpoint = endpoint; + this._www = www; + + this._kernel = null; + + this._kernelsRegistry = (window as any).trameJupyter.kernelsRegistry; + + context.sessionContext.kernelChanged.connect(this.onKernelChanged, this); + + // For debugging if needed + // context.sessionContext.sessionChanged.connect(this.onSessionChanged, this); + // context.sessionContext.statusChanged.connect(this.onStatusChanged, this); + // context.sessionContext.connectionStatusChanged.connect(this.onConnectionStatusChanged, this); + } + + get context(): any { + return this._context; + } + + private onKernelChanged(session: ISessionContext, args: IChangedArgs) { + if (this._kernel !== null && this._kernel.id) { + this._kernelsRegistry.setItem(this._kernel.id, null); + } + + this._kernel = args.newValue; + + if (this._kernel !== null && this._kernel.id) { + this._kernelsRegistry.setItem(this._kernel.id, this._kernel); + + this._kernel.requestExecute({ + silent: false, + code: this.getKernelCode(), + }); + } + } + + get isDisposed(): boolean { + return this._context === null; + } + + dispose(): void { + if (this.isDisposed) { + return; + } + + if (this._context) { + this._context.sessionContext.kernelChanged.disconnect(this.onKernelChanged, this); + // For debugging if needed + // this._context.sessionContext.sessionChanged.disconnect(this.onSessionChanged, this); + // this._context.sessionContext.statusChanged.disconnect(this.onStatusChanged, this); + // this._context.sessionContext.connectionStatusChanged.disconnect(this.onConnectionStatusChanged, this); + } + + this._kernel = null; + this._context = null; + } + + private getKernelCode(): string { + return ` + import os + os.environ["TRAME_DISABLE_V3_WARNING"] = "1" + os.environ["TRAME_IFRAME_BUILDER"] = "jupyter-extension" + os.environ["TRAME_BACKEND"] = "jupyter" + os.environ["TRAME_JUPYTER_WWW"] = "${this._www}" + os.environ["TRAME_JUPYTER_ENDPOINT"] = "${this._endpoint}" + `; + } + + // For debugging if needed + // private onConnectionStatusChanged(session: ISessionContext, status: Kernel.ConnectionStatus) {} + // private onSessionChanged(session: ISessionContext, args: IChangedArgs) {} + // private onStatusChanged(session: ISessionContext, status: Kernel.Status) {} +} diff --git a/src/registry.ts b/src/registry.ts new file mode 100644 index 0000000..61f7b4a --- /dev/null +++ b/src/registry.ts @@ -0,0 +1,27 @@ +class Registry { + private _items: Record; + + constructor() { + this._items = {}; + } + + getItem(id: string) : T | null { + let item = this._items[id]; + + if (item) { + return item; + } + + return null; + } + + setItem(id: string, item: T | null) { + if (item === null) { + delete this._items[id]; + } else { + this._items[id] = item; + } + } +}; + +export { Registry }; diff --git a/src/websocket.ts b/src/websocket.ts index 7773cdc..dde8292 100644 --- a/src/websocket.ts +++ b/src/websocket.ts @@ -29,10 +29,11 @@ function isArrayBufferView( export class TrameJupyterWebSocket extends ConcreteEmitter { private window: any; - private comm: any; + private comm: TrameJupyterComm; private clientId: string; private serverName: string; - private commListener: (msg: CommMessage) => void; + private commMessageListener: (msg: CommMessage) => void; + private commCloseListener: () => void; public readyState: number; constructor(w: Window, comm: TrameJupyterComm) { @@ -51,7 +52,7 @@ export class TrameJupyterWebSocket extends ConcreteEmitter { // Setup comm this.window = w; this.comm = comm; - this.commListener = (msg: CommMessage) => { + this.commMessageListener = (msg: CommMessage) => { const { data, buffers } = msg; const { server, client, payload } = data; @@ -74,8 +75,20 @@ export class TrameJupyterWebSocket extends ConcreteEmitter { this.emit('message', { data: payload }); } }; - this.comm.addEventListener('message', this.commListener); - this.window.addEventListener('unload', () => this.close()); // close on exit + + this.commCloseListener = () => this.close(); + + // Don't open the fake websocket if the comm is unusable + if (!comm.isUseable()) { + console.error("Can't create a TrameJupyterWebSocket using a closed kernel connection"); + this.readyState = 3; + + return; + } + + this.comm.addEventListener('message', this.commMessageListener); + this.comm.addEventListener('close', this.commCloseListener); + this.window.addEventListener('unload', this.commCloseListener); // close on exit // Let the ws know that we are ready setTimeout(() => { @@ -85,7 +98,9 @@ export class TrameJupyterWebSocket extends ConcreteEmitter { } close() { - this.comm.removeEventListener('message', this.commListener); + this.comm.removeEventListener('message', this.commMessageListener); + this.comm.removeEventListener('close', this.commCloseListener); + this.readyState = 3; // notify the kernel that the client is disconnected console.log('trame::jupyter-comm::close', 'FIXME'); diff --git a/yarn.lock b/yarn.lock index c30ecaa..4d024ad 100644 --- a/yarn.lock +++ b/yarn.lock @@ -40,6 +40,248 @@ __metadata: languageName: node linkType: hard +"@codemirror/autocomplete@npm:^6.0.0, @codemirror/autocomplete@npm:^6.3.2, @codemirror/autocomplete@npm:^6.5.1, @codemirror/autocomplete@npm:^6.7.1": + version: 6.10.2 + resolution: "@codemirror/autocomplete@npm:6.10.2" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + peerDependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + checksum: 360cea6a87ae9c4e3c996903f636a8f47f8ea6cd44504181e69dd8ccf666bad3e8cc6d8935e0eedd8aa118fdfe86ea78f41bc15288f3a7517dbb87115e057563 + languageName: node + linkType: hard + +"@codemirror/commands@npm:^6.2.3": + version: 6.3.0 + resolution: "@codemirror/commands@npm:6.3.0" + dependencies: + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.1.0 + checksum: d6ade0ba7d4f80c2e44163935783d2f2f35c8b641a4b4f62452c0630211670abe5093786cf5a4af14147102d4284dae660a26f3ae58fd840e838685a81107d11 + languageName: node + linkType: hard + +"@codemirror/lang-cpp@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-cpp@npm:6.0.2" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/cpp": ^1.0.0 + checksum: bb9eba482cca80037ce30c7b193cf45eff19ccbb773764fddf2071756468ecc25aa53c777c943635054f89095b0247b9b50c339e107e41e68d34d12a7295f9a9 + languageName: node + linkType: hard + +"@codemirror/lang-css@npm:^6.0.0, @codemirror/lang-css@npm:^6.1.1": + version: 6.2.1 + resolution: "@codemirror/lang-css@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.2 + "@lezer/css": ^1.0.0 + checksum: 5a8457ee8a4310030a969f2d3128429f549c4dc9b7907ee8888b42119c80b65af99093801432efdf659b8ec36a147d2a947bc1ecbbf69a759395214e3f4834a8 + languageName: node + linkType: hard + +"@codemirror/lang-html@npm:^6.0.0, @codemirror/lang-html@npm:^6.4.3": + version: 6.4.6 + resolution: "@codemirror/lang-html@npm:6.4.6" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/lang-css": ^6.0.0 + "@codemirror/lang-javascript": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/css": ^1.1.0 + "@lezer/html": ^1.3.0 + checksum: 8f884f4423ffc783181ee933f7212ad4ece204695cf8af9535a593f95e901d36515a8561fc336a0fbcf5782369b9484eeb0d2cec2167622868238177c5e6eb36 + languageName: node + linkType: hard + +"@codemirror/lang-java@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-java@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/java": ^1.0.0 + checksum: 4679104683cbffcd224ac04c7e5d144b787494697b26470b07017259035b7bb3fa62609d9a61bfbc566f1756d9f972f9f26d96a3c1362dd48881c1172f9a914d + languageName: node + linkType: hard + +"@codemirror/lang-javascript@npm:^6.0.0, @codemirror/lang-javascript@npm:^6.1.7": + version: 6.2.1 + resolution: "@codemirror/lang-javascript@npm:6.2.1" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.6.0 + "@codemirror/lint": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.17.0 + "@lezer/common": ^1.0.0 + "@lezer/javascript": ^1.0.0 + checksum: 3df38c4cced06195283a9a2a9365aaa7c8c1b157852b331bc3a118403f774bbba57d2a392de52f5e28d2b344a323bc0146bcf7c8ef8be2473f167d815e4a37cd + languageName: node + linkType: hard + +"@codemirror/lang-json@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-json@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/json": ^1.0.0 + checksum: e9e87d50ff7b81bd56a6ab50740b1dd54e9a93f1be585e1d59d0642e2148842ea1528ac7b7221eb4ddc7fe84bbc28065144cc3ab86f6e06c6aeb2d4b4e62acf1 + languageName: node + linkType: hard + +"@codemirror/lang-markdown@npm:^6.1.1": + version: 6.2.2 + resolution: "@codemirror/lang-markdown@npm:6.2.2" + dependencies: + "@codemirror/autocomplete": ^6.7.1 + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.3.0 + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/markdown": ^1.0.0 + checksum: 36aa82a4fc07e5761e0e04108b54f112f0049ed210b3d4e81b7429a99be4677a1f9ef0e004c5243265dca3bac36525792cb1558999f6a224c689475e958d4aa8 + languageName: node + linkType: hard + +"@codemirror/lang-php@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-php@npm:6.0.1" + dependencies: + "@codemirror/lang-html": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/php": ^1.0.0 + checksum: c003a29a426486453fdfddbf7302982fa2aa7f059bf6f1ce4cbf08341b0162eee5e2f50e0d71c418dcd358491631780156d846fe352754d042576172c5d86721 + languageName: node + linkType: hard + +"@codemirror/lang-python@npm:^6.1.3": + version: 6.1.3 + resolution: "@codemirror/lang-python@npm:6.1.3" + dependencies: + "@codemirror/autocomplete": ^6.3.2 + "@codemirror/language": ^6.8.0 + "@lezer/python": ^1.1.4 + checksum: 65a0276a4503e4e3b70dd28d1c93ef472632b6d2c4bf3ae92d305d14ee8cf60b0bbbf62d5ceb51294de9598d9e2d42eafcde26f317ee7b90d0a11dfa863c1d1a + languageName: node + linkType: hard + +"@codemirror/lang-rust@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-rust@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/rust": ^1.0.0 + checksum: 8a439944cb22159b0b3465ca4fa4294c69843219d5d30e278ae6df8e48f30a7a9256129723c025ec9b5e694d31a3560fb004300b125ffcd81c22d13825845170 + languageName: node + linkType: hard + +"@codemirror/lang-sql@npm:^6.4.1": + version: 6.5.4 + resolution: "@codemirror/lang-sql@npm:6.5.4" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.0.0 + "@codemirror/state": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: face21b0231ac5a7981949b5bf6a99ed092d0d6f7eb83f35dcd31d56ecf07dafa19d21623e0bad36cec7a12e3149df7b45c3588aeee31eae41e9b05942c4fdd7 + languageName: node + linkType: hard + +"@codemirror/lang-wast@npm:^6.0.1": + version: 6.0.1 + resolution: "@codemirror/lang-wast@npm:6.0.1" + dependencies: + "@codemirror/language": ^6.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 600d98d3ea6a4e99292244ed707e39a2abd9f3abf62cfeff5c819a0cc0c7e86b8c5b91e91c1b7ea21233d9ea09c41abe61d8a40b2547bb5db74239c6df857934 + languageName: node + linkType: hard + +"@codemirror/lang-xml@npm:^6.0.2": + version: 6.0.2 + resolution: "@codemirror/lang-xml@npm:6.0.2" + dependencies: + "@codemirror/autocomplete": ^6.0.0 + "@codemirror/language": ^6.4.0 + "@codemirror/state": ^6.0.0 + "@lezer/common": ^1.0.0 + "@lezer/xml": ^1.0.0 + checksum: e156ecafaa87e9b6ef4ab6812ccd00d8f3c6cb81f232837636b36336d80513b61936dfee6f4f6800574f236208b61e95a2abcb997cdcd7366585a6b796e0e13b + languageName: node + linkType: hard + +"@codemirror/language@npm:^6.0.0, @codemirror/language@npm:^6.3.0, @codemirror/language@npm:^6.4.0, @codemirror/language@npm:^6.6.0, @codemirror/language@npm:^6.8.0": + version: 6.9.2 + resolution: "@codemirror/language@npm:6.9.2" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + "@lezer/common": ^1.1.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + style-mod: ^4.0.0 + checksum: eee7b861b5591114cac7502cd532d5b923639740081a4cd7e28696c252af8d759b14686aaf6d5eee7e0969ff647b7aaf03a5eea7235fb6d9858ee19433f1c74d + languageName: node + linkType: hard + +"@codemirror/legacy-modes@npm:^6.3.2": + version: 6.3.3 + resolution: "@codemirror/legacy-modes@npm:6.3.3" + dependencies: + "@codemirror/language": ^6.0.0 + checksum: 3cd32b0f011b0a193e0948e5901b625f38aa6d9a8b24344531d6e142eb6fbb3e6cb5969429102044f3d04fbe53c4deaebd9f659c05067a0b18d17766290c9e05 + languageName: node + linkType: hard + +"@codemirror/lint@npm:^6.0.0": + version: 6.4.2 + resolution: "@codemirror/lint@npm:6.4.2" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 5e699960c1b28dbaa584fe091a3201978907bf4b9e52810fb15d3ceaf310e38053435e0b594da0985266ae812039a5cd6c36023284a6f8568664bdca04db137f + languageName: node + linkType: hard + +"@codemirror/search@npm:^6.3.0": + version: 6.5.4 + resolution: "@codemirror/search@npm:6.5.4" + dependencies: + "@codemirror/state": ^6.0.0 + "@codemirror/view": ^6.0.0 + crelt: ^1.0.5 + checksum: 32a68e40486730949ee79f54b9fcc6c744559aef188d3c5bf82881f62e5fc9468fa21cf227507638160043c797eb054205802a649cf4a2350928fc161d5aac40 + languageName: node + linkType: hard + +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.4": + version: 6.3.1 + resolution: "@codemirror/state@npm:6.3.1" + checksum: 8e7e55b3824653936606b31f146737459cb6654c935d668e7f36113ad523e1951966640f647c1286ae4ef22e3f0c7e37a6dfcbbcdb7bbeacca43c17c80fcc918 + languageName: node + linkType: hard + "@codemirror/state@npm:^6.2.0": version: 6.2.1 resolution: "@codemirror/state@npm:6.2.1" @@ -47,6 +289,17 @@ __metadata: languageName: node linkType: hard +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.9.6": + version: 6.21.4 + resolution: "@codemirror/view@npm:6.21.4" + dependencies: + "@codemirror/state": ^6.1.4 + style-mod: ^4.1.0 + w3c-keyname: ^2.2.4 + checksum: e320eb46a6556984081c97e0bf5a9f5d45de2a4db5d632e6ee689a32dc081b10bda87aa989c4563981e28bf25bb651d1be57158fc2e753b587e3c6f7e2e486b2 + languageName: node + linkType: hard + "@csstools/css-parser-algorithms@npm:^2.3.1": version: 2.3.1 resolution: "@csstools/css-parser-algorithms@npm:2.3.1" @@ -300,6 +553,49 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/apputils@npm:^4.1.7": + version: 4.1.7 + resolution: "@jupyterlab/apputils@npm:4.1.7" + dependencies: + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/settingregistry": ^4.0.7 + "@jupyterlab/statedb": ^4.0.7 + "@jupyterlab/statusbar": ^4.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@types/react": ^18.0.26 + react: ^18.2.0 + sanitize-html: ~2.7.3 + checksum: d8a3739ea4b74244b0e14e6a9bced973cc2fc8eb645fe25d36da960e3413492c5451332f44975ba601daecbe6b1e80073f36860f65482da16e94ed24f11a5947 + languageName: node + linkType: hard + +"@jupyterlab/attachments@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/attachments@npm:4.0.7" + dependencies: + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime": ^4.0.7 + "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + checksum: ff118f55b8fbf08d112aef9f1f9867a6310578afacff9953af3c30205d338ed88bc44204112597bd325bc6b2eeb88e5f901187628e869853c9e9b5c2b77e4eb8 + languageName: node + linkType: hard + "@jupyterlab/builder@npm:^4.0.0": version: 4.0.6 resolution: "@jupyterlab/builder@npm:4.0.6" @@ -341,6 +637,42 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/cells@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/cells@npm:4.0.7" + dependencies: + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/attachments": ^4.0.7 + "@jupyterlab/codeeditor": ^4.0.7 + "@jupyterlab/codemirror": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/documentsearch": ^4.0.7 + "@jupyterlab/filebrowser": ^4.0.7 + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/outputarea": ^4.0.7 + "@jupyterlab/rendermime": ^4.0.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/toc": ^6.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 3b986c3fb734031ce998e7a67208d06b0c0892a972db1d8123767bdcc9e14109f7e79be3f116f788bcfc2194e7a5a14d5918671c9021b9de51e82ca7f0421436 + languageName: node + linkType: hard + "@jupyterlab/codeeditor@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/codeeditor@npm:4.0.6" @@ -364,6 +696,71 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/codeeditor@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/codeeditor@npm:4.0.7" + dependencies: + "@codemirror/state": ^6.2.0 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/statusbar": ^4.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: d6c1c072b77f0afdc4c61ed9392297b43afa5ef0a3279e05631ead870122f9195eb9d5b6182b1ee984aa4fa7aee56051e710d601c550e43af27d43fc3397c333 + languageName: node + linkType: hard + +"@jupyterlab/codemirror@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/codemirror@npm:4.0.7" + dependencies: + "@codemirror/autocomplete": ^6.5.1 + "@codemirror/commands": ^6.2.3 + "@codemirror/lang-cpp": ^6.0.2 + "@codemirror/lang-css": ^6.1.1 + "@codemirror/lang-html": ^6.4.3 + "@codemirror/lang-java": ^6.0.1 + "@codemirror/lang-javascript": ^6.1.7 + "@codemirror/lang-json": ^6.0.1 + "@codemirror/lang-markdown": ^6.1.1 + "@codemirror/lang-php": ^6.0.1 + "@codemirror/lang-python": ^6.1.3 + "@codemirror/lang-rust": ^6.0.1 + "@codemirror/lang-sql": ^6.4.1 + "@codemirror/lang-wast": ^6.0.1 + "@codemirror/lang-xml": ^6.0.2 + "@codemirror/language": ^6.6.0 + "@codemirror/legacy-modes": ^6.3.2 + "@codemirror/search": ^6.3.0 + "@codemirror/state": ^6.2.0 + "@codemirror/view": ^6.9.6 + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/codeeditor": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/documentsearch": ^4.0.7 + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/translation": ^4.0.7 + "@lezer/common": ^1.0.2 + "@lezer/generator": ^1.2.2 + "@lezer/highlight": ^1.1.4 + "@lezer/markdown": ^1.0.2 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + yjs: ^13.5.40 + checksum: 8b813dc5144a5adbfd535fe4c817ba96a2c123e60999674ea60ac207fa2b7d06d34314b46bf07564b9c6ca3c21077c5ee34279a857c9191b3133a488f0bf1c22 + languageName: node + linkType: hard + "@jupyterlab/coreutils@npm:^6.0.0, @jupyterlab/coreutils@npm:^6.0.6": version: 6.0.6 resolution: "@jupyterlab/coreutils@npm:6.0.6" @@ -378,6 +775,43 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/coreutils@npm:^6.0.7": + version: 6.0.7 + resolution: "@jupyterlab/coreutils@npm:6.0.7" + dependencies: + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + minimist: ~1.2.0 + path-browserify: ^1.0.0 + url-parse: ~1.5.4 + checksum: 18a14e0bc957bf087c3de3e86c5dc7ee568027906edf5dc820d9c794af6c9dece84d0b396e837786849f9144bb156746e3d4f2e838fd023a42eee94ebeb9014f + languageName: node + linkType: hard + +"@jupyterlab/docmanager@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/docmanager@npm:4.0.7" + dependencies: + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/docregistry": ^4.0.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/statusbar": ^4.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 4ccbcfa431563cb0cdfa12d0f1ffed107816b8bcd420de5b6dc85e6c124ff1f691e72ce421102663880dc340717bfb71bdceb25eb8fc4074e08adb58ae6ba371 + languageName: node + linkType: hard + "@jupyterlab/docregistry@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/docregistry@npm:4.0.6" @@ -403,6 +837,98 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/docregistry@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/docregistry@npm:4.0.7" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/codeeditor": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime": ^4.0.7 + "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: 1d420696305dc17b2e96b22bf31af2caf2b16e31529c57b824bf859c71ac5caecb5a0a00d32ebc34ca1af65f720cec2c442d786c0460da60d7f65deb402dd891 + languageName: node + linkType: hard + +"@jupyterlab/documentsearch@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/documentsearch@npm:4.0.7" + dependencies: + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 96f51844b22a2c8e234c85e32915a9af41a54d5bd21a49de63d37181083089c84d18265c14d7d8d5adeb460771ba044e87caafdb82fd0e805837a23d56aa2fe3 + languageName: node + linkType: hard + +"@jupyterlab/filebrowser@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/filebrowser@npm:4.0.7" + dependencies: + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/docmanager": ^4.0.7 + "@jupyterlab/docregistry": ^4.0.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/statedb": ^4.0.7 + "@jupyterlab/statusbar": ^4.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 586b8a07fbe0a9bb0b0cd13a9d6fb083e797831a41fc5273d70124bb2daeeeb641e6b4584fc752a4799a5961bb14acc1379fd09847ef7f38b2908516b9f254e3 + languageName: node + linkType: hard + +"@jupyterlab/lsp@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/lsp@npm:4.0.7" + dependencies: + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/codeeditor": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/docregistry": ^4.0.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/translation": ^4.0.7 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + lodash.mergewith: ^4.6.1 + vscode-jsonrpc: ^6.0.0 + vscode-languageserver-protocol: ^3.17.0 + vscode-ws-jsonrpc: ~1.0.2 + checksum: a038fb51648b082652850e8a7190e0b9726be3be3b478258954a7a119df78df1b97182c53a4c8e6adb3ca22dbeaf2f5a40935b916a7dccb99952ebe44e112d9c + languageName: node + linkType: hard + "@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/nbformat@npm:4.0.6" @@ -412,6 +938,51 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/nbformat@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/nbformat@npm:4.0.7" + dependencies: + "@lumino/coreutils": ^2.1.2 + checksum: 32a14a6a3e6d068fa34aec385090531100170480869681156dfb510ea9154141277e678031a0df770af8ae5a0f06dc7c00570089c9187485552e1aeba5130ca8 + languageName: node + linkType: hard + +"@jupyterlab/notebook@npm:4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/notebook@npm:4.0.7" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/cells": ^4.0.7 + "@jupyterlab/codeeditor": ^4.0.7 + "@jupyterlab/codemirror": ^4.0.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/docregistry": ^4.0.7 + "@jupyterlab/documentsearch": ^4.0.7 + "@jupyterlab/lsp": ^4.0.7 + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime": ^4.0.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/settingregistry": ^4.0.7 + "@jupyterlab/statusbar": ^4.0.7 + "@jupyterlab/toc": ^6.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/domutils": ^2.0.1 + "@lumino/dragdrop": ^2.1.3 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 75fe89a1c59d47cb861a66b1c36d5e22593e93b8e0f8b3195e43e79e67e87542ccc00f245f3cdbd55617f889f1f7baa0a868d6be7d8fcfdc6ccab53e93f69bf4 + languageName: node + linkType: hard + "@jupyterlab/observables@npm:^5.0.6": version: 5.0.6 resolution: "@jupyterlab/observables@npm:5.0.6" @@ -425,6 +996,41 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/observables@npm:^5.0.7": + version: 5.0.7 + resolution: "@jupyterlab/observables@npm:5.0.7" + dependencies: + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: 459ec3ec77a12534cd16864892d8d3af3ead32a56956daeb89ab68e16c53651c8f20021e088e5a601b214eed46398bbbaea8bc3dc23f23b2700660558fa7c317 + languageName: node + linkType: hard + +"@jupyterlab/outputarea@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/outputarea@npm:4.0.7" + dependencies: + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime": ^4.0.7 + "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/translation": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + checksum: ea5ff9052408a117f5a74ce5c3938cda53f88d3dd227bea330cf042b69094c17d33d0b64d556f31b763bfe352bde29dc977cdaab69337159f0c9d9301e50a632 + languageName: node + linkType: hard + "@jupyterlab/rendermime-interfaces@npm:^3.8.6": version: 3.8.6 resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.6" @@ -435,6 +1041,16 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/rendermime-interfaces@npm:^3.8.7": + version: 3.8.7 + resolution: "@jupyterlab/rendermime-interfaces@npm:3.8.7" + dependencies: + "@lumino/coreutils": ^1.11.0 || ^2.1.2 + "@lumino/widgets": ^1.37.2 || ^2.3.0 + checksum: 8095fc99f89e49ef6793e37d7864511cc182fd2260219d3fe94dc974ac34411d4daf898f237279bd5e097aea19cca04196356bf31bd774e94c77b54894baf71b + languageName: node + linkType: hard + "@jupyterlab/rendermime@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/rendermime@npm:4.0.6" @@ -455,6 +1071,26 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/rendermime@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/rendermime@npm:4.0.7" + dependencies: + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/translation": ^4.0.7 + "@lumino/coreutils": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + lodash.escape: ^4.0.1 + checksum: 8e7bc7dc8d569fa8748783d0d23b716deb64af530d2f6861f6a08fe66ace5ff0d75e3cc67eb4ebb50b2089574917fe0b65da0dcf5368c3539fdb78f595560885 + languageName: node + linkType: hard + "@jupyterlab/services@npm:^7.0.0, @jupyterlab/services@npm:^7.0.6": version: 7.0.6 resolution: "@jupyterlab/services@npm:7.0.6" @@ -474,6 +1110,25 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/services@npm:^7.0.7": + version: 7.0.7 + resolution: "@jupyterlab/services@npm:7.0.7" + dependencies: + "@jupyter/ydoc": ^1.0.2 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/settingregistry": ^4.0.7 + "@jupyterlab/statedb": ^4.0.7 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + ws: ^8.11.0 + checksum: 203f9e9eeab55eac9251c43d14ebaad881e8152a1337156ed7f2abbada54177237128c108f91a49f45df00226df8ba6a374d02afbd3bbd80ebb795cb5bc62e23 + languageName: node + linkType: hard + "@jupyterlab/settingregistry@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/settingregistry@npm:4.0.6" @@ -493,6 +1148,25 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/settingregistry@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/settingregistry@npm:4.0.7" + dependencies: + "@jupyterlab/nbformat": ^4.0.7 + "@jupyterlab/statedb": ^4.0.7 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/signaling": ^2.1.2 + "@rjsf/utils": ^5.1.0 + ajv: ^8.12.0 + json5: ^2.2.3 + peerDependencies: + react: ">=16" + checksum: f13dd888c42ccbcb1764037e94ea6b9ee6aa82a232cbb0d8b506212b9e9d5d58965215768110f83a310585482d71dfb649a7c2bbb187553d39dd1292b5919dbe + languageName: node + linkType: hard + "@jupyterlab/statedb@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/statedb@npm:4.0.6" @@ -506,6 +1180,19 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/statedb@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/statedb@npm:4.0.7" + dependencies: + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + checksum: 4f4217fa1fceb40be8837cb450b1e66d4f6758531603c82ac277412ec43e3b94a5207bdeb74339307509a1b059ae6436d653beaff2fadfbc8136434ff0967190 + languageName: node + linkType: hard + "@jupyterlab/statusbar@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/statusbar@npm:4.0.6" @@ -522,6 +1209,43 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/statusbar@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/statusbar@npm:4.0.7" + dependencies: + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 7a2f75215789722a7b9a63548e91a1b179e8c315513d1b8741b508a58937569d723f2207bf542400674767246ad871432a09d1e87779151e43fa3749aa1ade06 + languageName: node + linkType: hard + +"@jupyterlab/toc@npm:^6.0.7": + version: 6.0.7 + resolution: "@jupyterlab/toc@npm:6.0.7" + dependencies: + "@jupyterlab/apputils": ^4.1.7 + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/docregistry": ^4.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime": ^4.0.7 + "@jupyterlab/translation": ^4.0.7 + "@jupyterlab/ui-components": ^4.0.7 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/widgets": ^2.3.0 + react: ^18.2.0 + checksum: 6d0c17f79f8d077074a20d78f81fdda010f43edd5ffa423837c90dc9edd6810f7b7445c008ff7f0b04f917e6d37d76c7817bd1b2cedda48961c3e8c0553bbc16 + languageName: node + linkType: hard + "@jupyterlab/translation@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/translation@npm:4.0.6" @@ -535,6 +1259,19 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/translation@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/translation@npm:4.0.7" + dependencies: + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@jupyterlab/services": ^7.0.7 + "@jupyterlab/statedb": ^4.0.7 + "@lumino/coreutils": ^2.1.2 + checksum: 15ad212d9447049f5d77d24681018efd52e61b861e73cdba4b09f4530801bdfa317c0eadde0b71016a9f45b68fbf91f723f9a63de9cbbe568c88923a9676ffab + languageName: node + linkType: hard + "@jupyterlab/ui-components@npm:^4.0.6": version: 4.0.6 resolution: "@jupyterlab/ui-components@npm:4.0.6" @@ -564,6 +1301,183 @@ __metadata: languageName: node linkType: hard +"@jupyterlab/ui-components@npm:^4.0.7": + version: 4.0.7 + resolution: "@jupyterlab/ui-components@npm:4.0.7" + dependencies: + "@jupyterlab/coreutils": ^6.0.7 + "@jupyterlab/observables": ^5.0.7 + "@jupyterlab/rendermime-interfaces": ^3.8.7 + "@jupyterlab/translation": ^4.0.7 + "@lumino/algorithm": ^2.0.1 + "@lumino/commands": ^2.1.3 + "@lumino/coreutils": ^2.1.2 + "@lumino/disposable": ^2.1.2 + "@lumino/messaging": ^2.0.1 + "@lumino/polling": ^2.1.2 + "@lumino/properties": ^2.0.1 + "@lumino/signaling": ^2.1.2 + "@lumino/virtualdom": ^2.0.1 + "@lumino/widgets": ^2.3.0 + "@rjsf/core": ^5.1.0 + "@rjsf/utils": ^5.1.0 + react: ^18.2.0 + react-dom: ^18.2.0 + typestyle: ^2.0.4 + peerDependencies: + react: ^18.2.0 + checksum: 92e722b8b4fe96a1df6644de8f955fdf48f2bf568a5aaf5f450f721659afc0ecdd9c89f833d73cbad8684849caec4316d4c6b6b0575e7da5a6c3058f5e99d03e + languageName: node + linkType: hard + +"@lezer/common@npm:^1.0.0, @lezer/common@npm:^1.0.2, @lezer/common@npm:^1.1.0": + version: 1.1.0 + resolution: "@lezer/common@npm:1.1.0" + checksum: 93c208a44d1c0bdf7407853ba7c4ddcedf1c52d1b82170813d83b9bd6301aa23587405ac54332fe39ce8bc37f706936ab237ceb4d3d535d1dead650153b6474c + languageName: node + linkType: hard + +"@lezer/cpp@npm:^1.0.0": + version: 1.1.1 + resolution: "@lezer/cpp@npm:1.1.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c9e1db19776eafbfe0c3b8448d46c94d9a1d30f7fef630292e63bab82e6d5d6903a043ee8cf341bcbf84c00ee0d79b8c255bab8fd8e0a91355ae912b53c78935 + languageName: node + linkType: hard + +"@lezer/css@npm:^1.0.0, @lezer/css@npm:^1.1.0": + version: 1.1.3 + resolution: "@lezer/css@npm:1.1.3" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: c8069ef0a6751441d2dc9180f7ebfd7aeb35df0ca2f1a748a2f26203a9ef6cc30f17f3074e2b49520453eb39329dadfdbbb901c6d9d067dc955ceb58c1f8cc6a + languageName: node + linkType: hard + +"@lezer/generator@npm:^1.2.2": + version: 1.5.1 + resolution: "@lezer/generator@npm:1.5.1" + dependencies: + "@lezer/common": ^1.0.2 + "@lezer/lr": ^1.3.0 + bin: + lezer-generator: src/lezer-generator.cjs + checksum: 4d8267e6d356e48ca5214a234679b2b3b1d3706cb9dffecee4495b7a16c8a02502d6a078f8afdf5d8c79f94af34f2c1b5c08556aead8376d7b23795612b651d0 + languageName: node + linkType: hard + +"@lezer/highlight@npm:^1.0.0, @lezer/highlight@npm:^1.1.3, @lezer/highlight@npm:^1.1.4": + version: 1.1.6 + resolution: "@lezer/highlight@npm:1.1.6" + dependencies: + "@lezer/common": ^1.0.0 + checksum: 411a702394c4c996b7d7f145a38f3a85a8cc698b3918acc7121c629255bb76d4ab383753f69009e011dc415210c6acbbb5b27bde613259ab67e600b29397b03b + languageName: node + linkType: hard + +"@lezer/html@npm:^1.3.0": + version: 1.3.6 + resolution: "@lezer/html@npm:1.3.6" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 1d3af781660968505e5083a34f31ea3549fd5f3949227fa93cc318bca61bce76ffe977bd875624ba938a2039834ec1a33df5d365e94c48131c85dd26f980d92c + languageName: node + linkType: hard + +"@lezer/java@npm:^1.0.0": + version: 1.0.4 + resolution: "@lezer/java@npm:1.0.4" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 97f5a2c2d733afba5dc57a0da9a97515b19b5e63bb5937717dac4e8c9baed74d15c0cb5c1580858b678931f11d517c56d89f903968fa48931f9c62e2ea67a107 + languageName: node + linkType: hard + +"@lezer/javascript@npm:^1.0.0": + version: 1.4.9 + resolution: "@lezer/javascript@npm:1.4.9" + dependencies: + "@lezer/highlight": ^1.1.3 + "@lezer/lr": ^1.3.0 + checksum: adac0048e4ab33dc48db42014f02d53a2eab81d12c990b23f237a3e83b125bda271607442aaa50dc0ac870a803e678135111366235f7c29a5052a288c1003960 + languageName: node + linkType: hard + +"@lezer/json@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/json@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: fcd17178f6a58e71c83e08fdc047e3708528b28591ba8f08ed35268f370d1ec9b63af0afa9d82a77fec26e9eb477ab3cfdc31c951e080d118ef607f9f9bb52e3 + languageName: node + linkType: hard + +"@lezer/lr@npm:^1.0.0, @lezer/lr@npm:^1.1.0, @lezer/lr@npm:^1.3.0": + version: 1.3.13 + resolution: "@lezer/lr@npm:1.3.13" + dependencies: + "@lezer/common": ^1.0.0 + checksum: aad0cb8908796a6b49116842fd490093aa0de54b48150a60a4f418815c014f7a1b4355615832e305caea5c0ba8c5ab577f82aebcd0ea04586b8199284ef0fec8 + languageName: node + linkType: hard + +"@lezer/markdown@npm:^1.0.0, @lezer/markdown@npm:^1.0.2": + version: 1.1.0 + resolution: "@lezer/markdown@npm:1.1.0" + dependencies: + "@lezer/common": ^1.0.0 + "@lezer/highlight": ^1.0.0 + checksum: b3699c0724dd41e3e6e3078a0e1bcd272ccaebf17b20e5160de3ecf26200cdaa59aa19c9542aac5ab8c7e3aecce1003544b016bb5c32e458bbd5982add8ca0bf + languageName: node + linkType: hard + +"@lezer/php@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/php@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.1.0 + checksum: a847c255c030b4d38913ddf1d5bd7324d83be7ef8d1d244542870be03b9bf7dc71283afeb2415c40dfd188cb99f0cc44bad760b5f3b7c35c3b8e5e00253848fc + languageName: node + linkType: hard + +"@lezer/python@npm:^1.1.4": + version: 1.1.9 + resolution: "@lezer/python@npm:1.1.9" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: cc7e712665f0b7990fd00ba798c2e377f8393d0034a85da33b370e256322d92f668f51b70aa91585ed165718bad60fba6e86203f877d537819874be2549ec31f + languageName: node + linkType: hard + +"@lezer/rust@npm:^1.0.0": + version: 1.0.1 + resolution: "@lezer/rust@npm:1.0.1" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: 1e02fdf09206979e7d4f87b020589f410c4c5e452a7b7b0296f6772ce3571c1bd7ed37495fbeeecf3d4423000f2efdabd462ba8a949c2b351fd35550327a7613 + languageName: node + linkType: hard + +"@lezer/xml@npm:^1.0.0": + version: 1.0.3 + resolution: "@lezer/xml@npm:1.0.3" + dependencies: + "@lezer/highlight": ^1.0.0 + "@lezer/lr": ^1.0.0 + checksum: a4758859abcab3bc3f8680f79f7fb7dbbb6842c7d552888f95cc85a845450342a18731fbf49cbaec5f39970b9e5b96a66c8381eda036d3ebf7c952da5ddd7666 + languageName: node + linkType: hard + "@lumino/algorithm@npm:^2.0.1": version: 2.0.1 resolution: "@lumino/algorithm@npm:2.0.1" @@ -1707,6 +2621,13 @@ __metadata: languageName: node linkType: hard +"crelt@npm:^1.0.5": + version: 1.0.6 + resolution: "crelt@npm:1.0.6" + checksum: dad842093371ad702afbc0531bfca2b0a8dd920b23a42f26e66dabbed9aad9acd5b9030496359545ef3937c3aced0fd4ac39f7a2d280a23ddf9eb7fdcb94a69f + languageName: node + linkType: hard + "cross-spawn@npm:^6.0.5": version: 6.0.5 resolution: "cross-spawn@npm:6.0.5" @@ -3468,6 +4389,13 @@ __metadata: languageName: node linkType: hard +"lodash.mergewith@npm:^4.6.1": + version: 4.6.2 + resolution: "lodash.mergewith@npm:4.6.2" + checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 + languageName: node + linkType: hard + "lodash.truncate@npm:^4.4.2": version: 4.4.2 resolution: "lodash.truncate@npm:4.4.2" @@ -4929,6 +5857,13 @@ __metadata: languageName: node linkType: hard +"style-mod@npm:^4.0.0, style-mod@npm:^4.1.0": + version: 4.1.0 + resolution: "style-mod@npm:4.1.0" + checksum: 8402b14ca11113a3640d46b3cf7ba49f05452df7846bc5185a3535d9b6a64a3019e7fb636b59ccbb7816aeb0725b24723e77a85b05612a9360e419958e13b4e6 + languageName: node + linkType: hard + "style-search@npm:^0.1.0": version: 0.1.0 resolution: "style-search@npm:0.1.0" @@ -5185,6 +6120,7 @@ __metadata: "@jupyterlab/application": ^3.5.0 || ^4.0.5 "@jupyterlab/builder": ^4.0.0 "@jupyterlab/coreutils": ^6.0.0 + "@jupyterlab/notebook": 4.0.7 "@jupyterlab/services": ^7.0.0 "@types/json-schema": ^7.0.11 "@types/react": ^18.0.26 @@ -5450,6 +6386,53 @@ __metadata: languageName: node linkType: hard +"vscode-jsonrpc@npm:8.2.0, vscode-jsonrpc@npm:^8.0.2": + version: 8.2.0 + resolution: "vscode-jsonrpc@npm:8.2.0" + checksum: f302a01e59272adc1ae6494581fa31c15499f9278df76366e3b97b2236c7c53ebfc71efbace9041cfd2caa7f91675b9e56f2407871a1b3c7f760a2e2ee61484a + languageName: node + linkType: hard + +"vscode-jsonrpc@npm:^6.0.0": + version: 6.0.0 + resolution: "vscode-jsonrpc@npm:6.0.0" + checksum: 3a67a56f287e8c449f2d9752eedf91e704dc7b9a326f47fb56ac07667631deb45ca52192e9bccb2ab108764e48409d70fa64b930d46fc3822f75270b111c5f53 + languageName: node + linkType: hard + +"vscode-languageserver-protocol@npm:^3.17.0": + version: 3.17.5 + resolution: "vscode-languageserver-protocol@npm:3.17.5" + dependencies: + vscode-jsonrpc: 8.2.0 + vscode-languageserver-types: 3.17.5 + checksum: dfb42d276df5dfea728267885b99872ecff62f6c20448b8539fae71bb196b420f5351c5aca7c1047bf8fb1f89fa94a961dce2bc5bf7e726198f4be0bb86a1e71 + languageName: node + linkType: hard + +"vscode-languageserver-types@npm:3.17.5": + version: 3.17.5 + resolution: "vscode-languageserver-types@npm:3.17.5" + checksum: 79b420e7576398d396579ca3a461c9ed70e78db4403cd28bbdf4d3ed2b66a2b4114031172e51fad49f0baa60a2180132d7cb2ea35aa3157d7af3c325528210ac + languageName: node + linkType: hard + +"vscode-ws-jsonrpc@npm:~1.0.2": + version: 1.0.2 + resolution: "vscode-ws-jsonrpc@npm:1.0.2" + dependencies: + vscode-jsonrpc: ^8.0.2 + checksum: eb2fdb5c96f124326505f06564dfc6584318b748fd6e39b4c0ba16a0d383d13ba0e9433596abdb841428dfc2a5501994c3206723d1cb38c6af5fcac1faf4be26 + languageName: node + linkType: hard + +"w3c-keyname@npm:^2.2.4": + version: 2.2.8 + resolution: "w3c-keyname@npm:2.2.8" + checksum: 95bafa4c04fa2f685a86ca1000069c1ec43ace1f8776c10f226a73296caeddd83f893db885c2c220ebeb6c52d424e3b54d7c0c1e963bbf204038ff1a944fbb07 + languageName: node + linkType: hard + "watchpack@npm:^2.4.0": version: 2.4.0 resolution: "watchpack@npm:2.4.0"