diff --git a/build/ci/postInstall.js b/build/ci/postInstall.js index d8e998322a4..b151a82b4a4 100644 --- a/build/ci/postInstall.js +++ b/build/ci/postInstall.js @@ -9,35 +9,7 @@ const path = require('path'); const constants = require('../constants'); const common = require('../webpack/common'); const { downloadZMQ } = require('@vscode/zeromq'); -/** - * In order to get raw kernels working, we reuse the default kernel that jupyterlab ships. - * However it expects to be talking to a websocket which is serializing the messages to strings. - * Our raw kernel is not a web socket and needs to do its own serialization. To do so, we make a copy - * of the default kernel with the serialization stripped out. This is simpler than making a copy of the module - * at runtime. - */ -function createJupyterKernelWithoutSerialization() { - var relativePath = path.join('node_modules', '@jupyterlab', 'services', 'lib', 'kernel', 'default.js'); - var filePath = path.join(constants.ExtensionRootDir, relativePath); - if (!fs.existsSync(filePath)) { - throw new Error( - "Jupyter lab default kernel not found '" + filePath + "' (Jupyter Extension post install script)" - ); - } - var fileContents = fs.readFileSync(filePath, { encoding: 'utf8' }); - var replacedContents = fileContents - .replace(/^const serialize =.*$/gm, 'const serialize = { serialize: (a) => a, deserialize: (a) => a };') - .replace( - 'const owned = team.session === this.clientId;', - 'const owned = parentHeader.session === this.clientId;' - ); - if (replacedContents === fileContents) { - throw new Error('Jupyter lab default kernel cannot be made non serializing'); - } - var destPath = path.join(path.dirname(filePath), 'nonSerializingKernel.js'); - fs.writeFileSync(destPath, replacedContents); - console.log(colors.green(destPath + ' file generated (by Jupyter VSC)')); -} + function fixVariableNameInKernelDefaultJs() { var relativePath = path.join('node_modules', '@jupyterlab', 'services', 'lib', 'kernel', 'default.js'); var filePath = path.join(constants.ExtensionRootDir, relativePath); @@ -228,7 +200,6 @@ function commentOutInvalidExport() { fixJupyterLabRenderers(); makeVariableExplorerAlwaysSorted(); -createJupyterKernelWithoutSerialization(); fixVariableNameInKernelDefaultJs(); removeUnnecessaryLoggingFromKernelDefault(); fixStripComments(); diff --git a/build/esbuild/build.ts b/build/esbuild/build.ts index 7ca578a6981..d457be196b1 100644 --- a/build/esbuild/build.ts +++ b/build/esbuild/build.ts @@ -34,7 +34,7 @@ const deskTopNodeModulesToExternalize = [ '@jupyterlab/services', '@jupyterlab/nbformat', '@jupyterlab/services/lib/kernel/serialize', - '@jupyterlab/services/lib/kernel/nonSerializingKernel', + '@jupyterlab/services/lib/kernel/default', 'vscode-jsonrpc' // Used by a few modules, might as well pull this out, instead of duplicating it in separate bundles. ]; const commonExternals = [ diff --git a/package-lock.json b/package-lock.json index dfbb9111cda..40b41660754 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,13 +12,13 @@ "dependencies": { "@c4312/evt": "^0.1.1", "@enonic/fnv-plus": "^1.3.0", - "@jupyter-widgets/base": "4.0.0", - "@jupyter-widgets/controls": "3.0.0", - "@jupyter-widgets/schema": "0.4.0", - "@jupyterlab/coreutils": "5.1.17", - "@jupyterlab/nbformat": "3.1.17", - "@jupyterlab/services": "6.1.17", - "@lumino/widgets": "^1.28.0", + "@jupyter-widgets/base": "^6.0.8", + "@jupyter-widgets/controls": "^5.0.9", + "@jupyter-widgets/schema": "^0.5.5", + "@jupyterlab/coreutils": "^6.2.4", + "@jupyterlab/nbformat": "^4.2.4", + "@jupyterlab/services": "^7.2.4", + "@lumino/widgets": "^2.4.0", "@nteract/messaging": "^7.0.0", "@vscode/extension-telemetry": "^0.7.7", "@vscode/python-extension": "^1.0.4", @@ -2304,95 +2304,150 @@ } }, "node_modules/@jupyter-widgets/base": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/base/-/base-4.0.0.tgz", - "integrity": "sha512-lBQgLYzq6C+XjfVJTidk+rckKo/+xlTgIm1XUtACA3BUz8bgi2du2zmbYkcrplJMwGub4QWP6GnKgM5ZZRhzYg==", - "dependencies": { - "@jupyterlab/services": "^6.0.0", - "@lumino/coreutils": "^1.2.0", - "@lumino/messaging": "^1.2.1", - "@lumino/widgets": "^1.3.0", - "@types/backbone": "^1.4.1", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@jupyter-widgets/base/-/base-6.0.8.tgz", + "integrity": "sha512-2Y0gl6BXdlxU9DR4YBWXd3dv9m6kSd2T31W81XGLR5/MGH4SSZ2LuiC0TsuMRFL+b6dk4+X73tRaekRxo5iMKA==", + "dependencies": { + "@jupyterlab/services": "^6.0.0 || ^7.0.0", + "@lumino/coreutils": "^1.11.1 || ^2.1", + "@lumino/messaging": "^1.10.1 || ^2.1", + "@lumino/widgets": "^1.30.0 || ^2.1", + "@types/backbone": "1.4.14", "@types/lodash": "^4.14.134", - "backbone": "1.2.3", - "base64-js": "^1.2.1", + "backbone": "1.4.0", "jquery": "^3.1.1", "lodash": "^4.17.4" } }, "node_modules/@jupyter-widgets/controls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/controls/-/controls-3.0.0.tgz", - "integrity": "sha512-VyoBxUp/8pf7IFlM4hriD/UvYpHzXFXrUAaT/NRAhMUFO4Ruh4ALcxeHdWFnqxMjiSyOnWdjzdIeQL0pYi83Gg==", - "dependencies": { - "@jupyter-widgets/base": "^4.0.0", - "@lumino/algorithm": "^1.1.0", - "@lumino/domutils": "^1.1.0", - "@lumino/messaging": "^1.2.1", - "@lumino/signaling": "^1.2.0", - "@lumino/widgets": "^1.3.0", - "d3-format": "^1.3.0", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@jupyter-widgets/controls/-/controls-5.0.9.tgz", + "integrity": "sha512-Q1cun1kyMXOWUoaUsW/TP6rmTqg60TnWU0pQpoBLt1HfFURcPzCGYyChAdUs2hRCYcS61LUeaCvnS5aYiBFaeg==", + "dependencies": { + "@jupyter-widgets/base": "^6.0.8", + "@lumino/algorithm": "^1.9.1 || ^2.1", + "@lumino/domutils": "^1.8.1 || ^2.1", + "@lumino/messaging": "^1.10.1 || ^2.1", + "@lumino/signaling": "^1.10.1 || ^2.1", + "@lumino/widgets": "^1.30.0 || ^2.1", + "d3-color": "^3.0.1", + "d3-format": "^3.0.1", "jquery": "^3.1.1", - "jquery-ui": "^1.12.1", - "underscore": "^1.8.3" + "nouislider": "15.4.0" } }, "node_modules/@jupyter-widgets/schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/schema/-/schema-0.4.0.tgz", - "integrity": "sha512-0MAZ6hLOCe2dYiUvEAfYvWKD7zV9AdkC4AoIEQiWqAai9Pq06oPNWMMg6x+J0ZaNnZWqR2c16f62ehd57Ql7Zw==" + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@jupyter-widgets/schema/-/schema-0.5.5.tgz", + "integrity": "sha512-wTYFZinAezI9DVJJqgUsAPM35iptn3AmUxrZpp/F7dyitxEieUQNYXbZ3kU40TBHsmeq0wuA02s4/2sDzlhk1w==" + }, + "node_modules/@jupyter/ydoc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@jupyter/ydoc/-/ydoc-2.1.1.tgz", + "integrity": "sha512-NeEwqXQ2j1OyLq4uezeQmsMiI+Qo5k7dYIMqNByOM7dJp6sHeP0jQ96w7BEc9E4SmrxwcOT4cLvcJWJE8Xun4g==", + "dependencies": { + "@jupyterlab/nbformat": "^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0", + "@lumino/coreutils": "^1.11.0 || ^2.0.0", + "@lumino/disposable": "^1.10.0 || ^2.0.0", + "@lumino/signaling": "^1.10.0 || ^2.0.0", + "y-protocols": "^1.0.5", + "yjs": "^13.5.40" + } }, "node_modules/@jupyterlab/coreutils": { - "version": "5.1.17", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-5.1.17.tgz", - "integrity": "sha512-5jW/YkQM58s1S8USep4pNKTULoNVh9UXHUoXUfq8Itzq6G9mAggqMtq0XzIV+/L5EyLnvgT6zmCVOKPCs6ZloA==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-6.2.4.tgz", + "integrity": "sha512-A3yHM3UgMYKKJU8JtcPEMGUWUHMlol3TFCdFQbeJnqj+uJmxV0ejkLvDlGk+mefjpcVm/z3cXaDrwoUVtY2FDw==", "dependencies": { - "@lumino/coreutils": "^1.5.3", - "@lumino/disposable": "^1.4.3", - "@lumino/signaling": "^1.4.3", + "@lumino/coreutils": "^2.1.2", + "@lumino/disposable": "^2.1.2", + "@lumino/signaling": "^2.1.2", "minimist": "~1.2.0", - "moment": "^2.24.0", "path-browserify": "^1.0.0", - "url-parse": "~1.5.1" + "url-parse": "~1.5.4" + } + }, + "node_modules/@jupyterlab/coreutils/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@jupyterlab/coreutils/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "dependencies": { + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@jupyterlab/coreutils/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" } }, "node_modules/@jupyterlab/nbformat": { - "version": "3.1.17", - "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-3.1.17.tgz", - "integrity": "sha512-u7dKHYWYNjiLI/08n2Ytr7heK2HzvxB1obeW9bY6sGEuZ4+mkDKNP25ArAd19XaD2WFtYjtxYqJHHmXggqzRKw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-4.2.4.tgz", + "integrity": "sha512-xR4qqvgjMSBeUQ7nUiRQAP6YDOZcqSHxNzIkds81dDL4wk5pj10oKpTg9lAqfwMImubjcGxTM4Msl8+N3cdpsw==", "dependencies": { - "@lumino/coreutils": "^1.5.3" + "@lumino/coreutils": "^2.1.2" } }, - "node_modules/@jupyterlab/observables": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@jupyterlab/observables/-/observables-4.6.1.tgz", - "integrity": "sha512-ez+fxyE3qwQ9grZ0nj2fpgcPIGySs/cNfojfcQatziV2rbFZzrBJJsWFSBhPO55vJd1Mue21aPw1eEK3ok4Wfw==", + "node_modules/@jupyterlab/nbformat/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@jupyterlab/nbformat/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", "dependencies": { - "@lumino/algorithm": "^1.9.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/messaging": "^1.10.0", - "@lumino/signaling": "^1.10.0" + "@lumino/algorithm": "^2.0.2" } }, "node_modules/@jupyterlab/services": { - "version": "6.1.17", - "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-6.1.17.tgz", - "integrity": "sha512-NMix33c3E5L/BRlhbXsaiXk3TtdbxCj4xWyM9psy50Qm//TSh8ZyFXuRw2zKM8hnZbcouILB6WZ6qPVrjzziZw==", - "dependencies": { - "@jupyterlab/coreutils": "^5.1.17", - "@jupyterlab/nbformat": "^3.1.17", - "@jupyterlab/observables": "^4.1.17", - "@jupyterlab/settingregistry": "^3.1.17", - "@jupyterlab/statedb": "^3.1.17", - "@lumino/algorithm": "^1.3.3", - "@lumino/coreutils": "^1.5.3", - "@lumino/disposable": "^1.4.3", - "@lumino/polling": "^1.3.3", - "@lumino/signaling": "^1.4.3", - "node-fetch": "^2.6.0", - "ws": "^7.4.6" + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-7.2.4.tgz", + "integrity": "sha512-9a9945owJsuAExroT/afecPSCLlQ/dhhQuttRBpycZFRBEGdSXcXY3/1q9rGUDb9wEk0A4ySk7LTZIWZTNP2rg==", + "dependencies": { + "@jupyter/ydoc": "^2.0.1", + "@jupyterlab/coreutils": "^6.2.4", + "@jupyterlab/nbformat": "^4.2.4", + "@jupyterlab/settingregistry": "^4.2.4", + "@jupyterlab/statedb": "^4.2.4", + "@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" + } + }, + "node_modules/@jupyterlab/services/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@jupyterlab/services/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "dependencies": { + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@jupyterlab/services/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" } }, "node_modules/@jupyterlab/services/node_modules/ws": { @@ -2416,29 +2471,103 @@ } }, "node_modules/@jupyterlab/settingregistry": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-3.6.1.tgz", - "integrity": "sha512-zNCYIK6/oWG6JnhmwRGE/Zvn5Xhj0kovcJgTlOSHGyIiHqLfJA9TzHZDNUDANqqxAg4+H9fYdh1+agi4XWGL8A==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-4.2.4.tgz", + "integrity": "sha512-95eLd8uiufWE0pso/hlHKcF760NZKlQoubazG8uIphBuYCbSVhd621JoMViAIH6LqDwWi1LfdwYRMJp9hzTlfA==", + "dependencies": { + "@jupyterlab/nbformat": "^4.2.4", + "@jupyterlab/statedb": "^4.2.4", + "@lumino/commands": "^2.3.0", + "@lumino/coreutils": "^2.1.2", + "@lumino/disposable": "^2.1.2", + "@lumino/signaling": "^2.1.2", + "@rjsf/utils": "^5.13.4", + "ajv": "^8.12.0", + "json5": "^2.2.3" + }, + "peerDependencies": { + "react": ">=16" + } + }, + "node_modules/@jupyterlab/settingregistry/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@jupyterlab/settingregistry/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", "dependencies": { - "@jupyterlab/statedb": "^3.6.1", - "@lumino/commands": "^1.19.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/signaling": "^1.10.0", - "ajv": "^6.12.3", - "json5": "^2.1.1" + "@lumino/algorithm": "^2.0.2" } }, + "node_modules/@jupyterlab/settingregistry/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + }, + "node_modules/@jupyterlab/settingregistry/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@jupyterlab/settingregistry/node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/@jupyterlab/settingregistry/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/@jupyterlab/statedb": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-3.6.1.tgz", - "integrity": "sha512-6+fGzKUCaWBKX/fZDdXR++WgfvYE+Dv5ma8gkgcHaS2vEup2snkmgZ8fBUJXm5xVpU4KhXjTUb7dafLfG7BL3Q==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-4.2.4.tgz", + "integrity": "sha512-MzNCYEPZcQ55G4M9jExM0zOjC3Bldj63kVM5ontVUpykQgs+sbMjeGcHY7mcMi9gY6hiPPSSvpL3Rf0eZArqkQ==", "dependencies": { - "@lumino/commands": "^1.19.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/properties": "^1.8.0", - "@lumino/signaling": "^1.10.0" + "@lumino/commands": "^2.3.0", + "@lumino/coreutils": "^2.1.2", + "@lumino/disposable": "^2.1.2", + "@lumino/properties": "^2.0.1", + "@lumino/signaling": "^2.1.2" + } + }, + "node_modules/@jupyterlab/statedb/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@jupyterlab/statedb/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "dependencies": { + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@jupyterlab/statedb/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" } }, "node_modules/@koa/cors": { @@ -2481,17 +2610,44 @@ } }, "node_modules/@lumino/commands": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-1.21.1.tgz", - "integrity": "sha512-d1zJmwz5bHU0BM/Rl3tRdZ7/WgXnFB0bM7x7Bf0XDlmX++jnU9k0j3mh6/5JqCGLmIApKCRwVqSaV7jPmSJlcQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.1.tgz", + "integrity": "sha512-DpX1kkE4PhILpvK1T4ZnaFb6UP4+YTkdZifvN3nbiomD64O2CTd+wcWIBpZMgy6MMgbVgrE8dzHxHk1EsKxNxw==", "dependencies": { - "@lumino/algorithm": "^1.9.2", - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4", - "@lumino/domutils": "^1.8.2", - "@lumino/keyboard": "^1.8.2", - "@lumino/signaling": "^1.11.1", - "@lumino/virtualdom": "^1.14.3" + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3", + "@lumino/domutils": "^2.0.2", + "@lumino/keyboard": "^2.0.2", + "@lumino/signaling": "^2.1.3", + "@lumino/virtualdom": "^2.0.2" + } + }, + "node_modules/@lumino/commands/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@lumino/commands/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "dependencies": { + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@lumino/commands/node_modules/@lumino/domutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz", + "integrity": "sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ==" + }, + "node_modules/@lumino/commands/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" } }, "node_modules/@lumino/coreutils": { @@ -2503,12 +2659,33 @@ } }, "node_modules/@lumino/disposable": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-1.10.4.tgz", - "integrity": "sha512-4ZxyYcyzUS+ZeB2KAH9oAH3w0DUUceiVr+FIZHZ2TAYGWZI/85WlqJtfm0xjwEpCwLLW1TDqJrISuZu3iMmVMA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.3.tgz", + "integrity": "sha512-k5KXy/+T3UItiWHY4WwQawnsJnGo3aNtP5CTRKqo4+tbTNuhc3rTSvygJlNKIbEfIZXW2EWYnwfFDozkYx95eA==", "dependencies": { - "@lumino/algorithm": "^1.9.2", - "@lumino/signaling": "^1.11.1" + "@lumino/signaling": "^2.1.3" + } + }, + "node_modules/@lumino/disposable/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@lumino/disposable/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "dependencies": { + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@lumino/disposable/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" } }, "node_modules/@lumino/domutils": { @@ -2517,18 +2694,31 @@ "integrity": "sha512-QIpMfkPJrs4GrWBuJf2Sn1fpyVPmvqUUAeD8xAQo8+4V5JAT0vUDLxZ9HijefMgNCi3+Bs8Z3lQwRCrz+cFP1A==" }, "node_modules/@lumino/dragdrop": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-1.14.4.tgz", - "integrity": "sha512-IHX2M8Yqs2YsFHHXKSKiYLgv9DEuhyyKoDS85Chg34J9OaPC5ocT0AmNVnpeq9T4A50sg3vdL9mSRCZ0f302Gw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.5.tgz", + "integrity": "sha512-zqwR4GakrQBKZOW6S5pj2nfrQDurOErAoe9x3HS3BKLa1AzWA+t9PD5NESOKd81NqXFHjiMirSyFkTUs6pw+uA==", "dependencies": { - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4" + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3" + } + }, + "node_modules/@lumino/dragdrop/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@lumino/dragdrop/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "dependencies": { + "@lumino/algorithm": "^2.0.2" } }, "node_modules/@lumino/keyboard": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-1.8.2.tgz", - "integrity": "sha512-Dy+XqQ1wXbcnuYtjys5A0pAqf4SpAFl9NY6owyIhXAo0Va7w3LYp3jgiP1xAaBAwMuUppiUAfrbjrysZuZ625g==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.2.tgz", + "integrity": "sha512-icRUpvswDaFjqmAJNbQRb/aTu6Iugo6Y2oC08TiIwhQtLS9W+Ee9VofdqvbPSvCm6DkyP+DCWMuA3KXZ4V4g4g==" }, "node_modules/@lumino/messaging": { "version": "1.10.3", @@ -2540,19 +2730,41 @@ } }, "node_modules/@lumino/polling": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-1.10.0.tgz", - "integrity": "sha512-ZNXObJQfugnS41Yrlr7yWcFiRK+xAGGOXO08JJ0Mctsg5mT30UEGFVWJY2AjZ6N5aQuLyGed/pMkBzLzrzt8OA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-2.1.3.tgz", + "integrity": "sha512-WEZk96ddK6eHEhdDkFUAAA40EOLit86QVbqQqnbPmhdGwFogek26Kq9b1U273LJeirv95zXCATOJAkjRyb7D+w==", + "dependencies": { + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3", + "@lumino/signaling": "^2.1.3" + } + }, + "node_modules/@lumino/polling/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@lumino/polling/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", "dependencies": { - "@lumino/coreutils": "^1.12.0", - "@lumino/disposable": "^1.10.1", - "@lumino/signaling": "^1.10.1" + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@lumino/polling/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" } }, "node_modules/@lumino/properties": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-1.8.2.tgz", - "integrity": "sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.2.tgz", + "integrity": "sha512-b312oA3Bh97WFK8efXejYmC3DVJmvzJk72LQB7H3fXhfqS5jUWvL7MSnNmgcQvGzl9fIhDWDWjhtSTi0KGYYBg==" }, "node_modules/@lumino/signaling": { "version": "1.11.1", @@ -2563,30 +2775,84 @@ "@lumino/properties": "^1.8.2" } }, + "node_modules/@lumino/signaling/node_modules/@lumino/properties": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-1.8.2.tgz", + "integrity": "sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig==" + }, "node_modules/@lumino/virtualdom": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-1.14.3.tgz", - "integrity": "sha512-5joUC1yuxeXbpfbSBm/OR8Mu9HoTo6PDX0RKqzlJ9o97iml7zayFN/ynzcxScKGQAo9iaXOY8uVIvGUT8FnsGw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.2.tgz", + "integrity": "sha512-HYZThOtZSoknjdXA102xpy5CiXtTFCVz45EXdWeYLx3NhuEwuAIX93QBBIhupalmtFlRg1yhdDNV40HxJ4kcXg==", "dependencies": { - "@lumino/algorithm": "^1.9.2" + "@lumino/algorithm": "^2.0.2" } }, + "node_modules/@lumino/virtualdom/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, "node_modules/@lumino/widgets": { - "version": "1.37.1", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-1.37.1.tgz", - "integrity": "sha512-/whz5B/hL0fjv0bR8JYZ+Emx+CH7HBwXc4TqI9PrrHGm3g6+jRJAyIFGZcQubqkPxxHrRE/VxQgoDKGhINw/Gw==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.4.0.tgz", + "integrity": "sha512-n7MqRKj+g/aRnI3dl4EJw/Bkt5/LSwGcn3sA9opn88CMZmAzjC33ac+q6zijovjCX8yDud7KKK8yPFTwOFaxhg==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/commands": "^2.3.1", + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3", + "@lumino/domutils": "^2.0.2", + "@lumino/dragdrop": "^2.1.5", + "@lumino/keyboard": "^2.0.2", + "@lumino/messaging": "^2.0.2", + "@lumino/properties": "^2.0.2", + "@lumino/signaling": "^2.1.3", + "@lumino/virtualdom": "^2.0.2" + } + }, + "node_modules/@lumino/widgets/node_modules/@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "node_modules/@lumino/widgets/node_modules/@lumino/collections": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.2.tgz", + "integrity": "sha512-o0QmfV1D3WhAeA8GI1/YmEPaK89JtHVa764rQ5T0LdbDEwUtUDbjavHs1E/+y66tNTXz9RUJ4D2rcSb9tysYsg==", "dependencies": { - "@lumino/algorithm": "^1.9.2", - "@lumino/commands": "^1.21.1", - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4", - "@lumino/domutils": "^1.8.2", - "@lumino/dragdrop": "^1.14.4", - "@lumino/keyboard": "^1.8.2", - "@lumino/messaging": "^1.10.3", - "@lumino/properties": "^1.8.2", - "@lumino/signaling": "^1.11.1", - "@lumino/virtualdom": "^1.14.3" + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@lumino/widgets/node_modules/@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "dependencies": { + "@lumino/algorithm": "^2.0.2" + } + }, + "node_modules/@lumino/widgets/node_modules/@lumino/domutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz", + "integrity": "sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ==" + }, + "node_modules/@lumino/widgets/node_modules/@lumino/messaging": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.2.tgz", + "integrity": "sha512-2sUF07cYA0f3mDil41Eh5sfBk0aGAH/mOh1I4+vyRUsKyBqp4WTUtpJFd8xVJGAntygxwnebIygkIaXXTIQvxA==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/collections": "^2.0.2" + } + }, + "node_modules/@lumino/widgets/node_modules/@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "dependencies": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" } }, "node_modules/@microsoft/1ds-core-js": { @@ -3031,6 +3297,24 @@ "node": ">=18" } }, + "node_modules/@rjsf/utils": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.19.4.tgz", + "integrity": "sha512-853BZuQvl62Xw2Ve07dkOdEzlr7jCBU/XFPhj9tik3s++InY1brBIDBRZKABvWHjymdSvO9gSzQXzj9aFREcFA==", + "dependencies": { + "json-schema-merge-allof": "^0.8.1", + "jsonpointer": "^5.0.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-is": "^18.2.0" + }, + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "react": "^16.14.0 || >=17" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -3091,9 +3375,9 @@ "dev": true }, "node_modules/@types/backbone": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.15.tgz", - "integrity": "sha512-WWeKtYlsIMtDyLbbhkb96taJMEbfQBnuz7yw1u0pkphCOtksemoWhIXhK74VRCY9hbjnsH3rsJu2uUiFtnsEYg==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.14.tgz", + "integrity": "sha512-85ldQ99fiYTJFBlZuAJRaCdvTZKZ2p1fSs3fVf+6Ub6k1X0g0hNJ0qJ/2FOByyyAQYLtbEz3shX5taKQfBKBDw==", "dependencies": { "@types/jquery": "*", "@types/underscore": "*" @@ -3228,9 +3512,9 @@ "dev": true }, "node_modules/@types/jquery": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz", - "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==", + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", "dependencies": { "@types/sizzle": "*" } @@ -3446,9 +3730,9 @@ "dev": true }, "node_modules/@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==" }, "node_modules/@types/source-list-map": { "version": "0.1.2", @@ -3523,9 +3807,9 @@ } }, "node_modules/@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" + "version": "1.11.15", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.15.tgz", + "integrity": "sha512-HP38xE+GuWGlbSRq9WrZkousaQ7dragtZCruBVMi0oX1migFZavZ3OROKHSkNp/9ouq82zrWtZpg18jFnVN96g==" }, "node_modules/@types/url-parse": { "version": "1.4.8", @@ -5383,11 +5667,11 @@ } }, "node_modules/backbone": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.2.3.tgz", - "integrity": "sha1-wiz9B/yG676uYdGJKe0RXpmdZbk=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", + "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", "dependencies": { - "underscore": ">=1.7.0" + "underscore": ">=1.8.3" } }, "node_modules/balanced-match": { @@ -6350,6 +6634,27 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "node_modules/compute-gcd": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", + "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", + "dependencies": { + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, + "node_modules/compute-lcm": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", + "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", + "dependencies": { + "compute-gcd": "^1.2.1", + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6955,9 +7260,12 @@ "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" }, "node_modules/d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "engines": { + "node": ">=12" + } }, "node_modules/d3-interpolate": { "version": "1.4.0", @@ -9090,6 +9398,11 @@ "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, "node_modules/fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", @@ -11337,6 +11650,15 @@ "ws": "*" } }, + "node_modules/isomorphic.js": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", + "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==", + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, "node_modules/istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -11695,6 +12017,27 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema-compare": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", + "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", + "dependencies": { + "lodash": "^4.17.4" + } + }, + "node_modules/json-schema-merge-allof": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", + "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", + "dependencies": { + "compute-lcm": "^1.1.2", + "json-schema-compare": "^0.2.2", + "lodash": "^4.17.20" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -11772,6 +12115,14 @@ "node >= 0.2.0" ] }, + "node_modules/jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsonschema": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", @@ -12165,6 +12516,26 @@ "node": ">= 0.8.0" } }, + "node_modules/lib0": { + "version": "0.2.94", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.94.tgz", + "integrity": "sha512-hZ3p54jL4Wpu7IOg26uC7dnEWiMyNlUrb9KoG7+xYs45WkQwpVvKFndVq2+pqLYKe1u8Fp3+zAfZHVvTK34PvQ==", + "dependencies": { + "isomorphic.js": "^0.2.4" + }, + "bin": { + "0ecdsa-generate-keypair": "bin/0ecdsa-generate-keypair.js", + "0gentesthtml": "bin/gentesthtml.js", + "0serve": "bin/0serve.js" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, "node_modules/lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -12285,6 +12656,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -12863,14 +13239,6 @@ "node": ">=10" } }, - "node_modules/moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", - "engines": { - "node": "*" - } - }, "node_modules/morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -13281,6 +13649,11 @@ "node": ">=0.10.0" } }, + "node_modules/nouislider": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.4.0.tgz", + "integrity": "sha512-AV7UMhGhZ4Mj6ToMT812Ib8OJ4tAXR2/Um7C4l4ZvvsqujF0WpQTpqqHJ+9xt4174R7ueQOUrBR4yakJpAIPCA==" + }, "node_modules/nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -15489,10 +15862,9 @@ } }, "node_modules/react-is": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.0.0.tgz", - "integrity": "sha512-yUcBYdBBbo3QiPsgYDcfQcIkGZHfxOaoE6HLSnr1sPzMhdyxusbfKOSUbSd/ocGi32dxcj366PsTj+5oggeKKw==", - "peer": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "node_modules/react-is-deprecated": { "version": "0.1.2", @@ -15783,7 +16155,6 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -18876,6 +19247,38 @@ "node": ">= 10.13.0" } }, + "node_modules/validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" + }, + "node_modules/validate.io-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", + "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" + }, + "node_modules/validate.io-integer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", + "dependencies": { + "validate.io-number": "^1.0.3" + } + }, + "node_modules/validate.io-integer-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", + "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", + "dependencies": { + "validate.io-array": "^1.0.3", + "validate.io-integer": "^1.0.4" + } + }, + "node_modules/validate.io-number": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" + }, "node_modules/validator": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", @@ -19460,6 +19863,25 @@ "node": ">=0.4" } }, + "node_modules/y-protocols": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz", + "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==", + "dependencies": { + "lib0": "^0.2.85" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + }, + "peerDependencies": { + "yjs": "^13.0.0" + } + }, "node_modules/y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -19554,6 +19976,22 @@ "node": ">=12" } }, + "node_modules/yjs": { + "version": "13.6.18", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.18.tgz", + "integrity": "sha512-GBTjO4QCmv2HFKFkYIJl7U77hIB1o22vSCSQD1Ge8ZxWbIbn8AltI4gyXbtL+g5/GJep67HCMq3Y5AmNwDSyEg==", + "dependencies": { + "lib0": "^0.2.86" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=8.0.0" + }, + "funding": { + "type": "GitHub Sponsors ❤", + "url": "https://github.com/sponsors/dmonad" + } + }, "node_modules/ylru": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", @@ -20828,97 +21266,156 @@ } }, "@jupyter-widgets/base": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/base/-/base-4.0.0.tgz", - "integrity": "sha512-lBQgLYzq6C+XjfVJTidk+rckKo/+xlTgIm1XUtACA3BUz8bgi2du2zmbYkcrplJMwGub4QWP6GnKgM5ZZRhzYg==", - "requires": { - "@jupyterlab/services": "^6.0.0", - "@lumino/coreutils": "^1.2.0", - "@lumino/messaging": "^1.2.1", - "@lumino/widgets": "^1.3.0", - "@types/backbone": "^1.4.1", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/@jupyter-widgets/base/-/base-6.0.8.tgz", + "integrity": "sha512-2Y0gl6BXdlxU9DR4YBWXd3dv9m6kSd2T31W81XGLR5/MGH4SSZ2LuiC0TsuMRFL+b6dk4+X73tRaekRxo5iMKA==", + "requires": { + "@jupyterlab/services": "^6.0.0 || ^7.0.0", + "@lumino/coreutils": "^1.11.1 || ^2.1", + "@lumino/messaging": "^1.10.1 || ^2.1", + "@lumino/widgets": "^1.30.0 || ^2.1", + "@types/backbone": "1.4.14", "@types/lodash": "^4.14.134", - "backbone": "1.2.3", - "base64-js": "^1.2.1", + "backbone": "1.4.0", "jquery": "^3.1.1", "lodash": "^4.17.4" } }, "@jupyter-widgets/controls": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/controls/-/controls-3.0.0.tgz", - "integrity": "sha512-VyoBxUp/8pf7IFlM4hriD/UvYpHzXFXrUAaT/NRAhMUFO4Ruh4ALcxeHdWFnqxMjiSyOnWdjzdIeQL0pYi83Gg==", - "requires": { - "@jupyter-widgets/base": "^4.0.0", - "@lumino/algorithm": "^1.1.0", - "@lumino/domutils": "^1.1.0", - "@lumino/messaging": "^1.2.1", - "@lumino/signaling": "^1.2.0", - "@lumino/widgets": "^1.3.0", - "d3-format": "^1.3.0", + "version": "5.0.9", + "resolved": "https://registry.npmjs.org/@jupyter-widgets/controls/-/controls-5.0.9.tgz", + "integrity": "sha512-Q1cun1kyMXOWUoaUsW/TP6rmTqg60TnWU0pQpoBLt1HfFURcPzCGYyChAdUs2hRCYcS61LUeaCvnS5aYiBFaeg==", + "requires": { + "@jupyter-widgets/base": "^6.0.8", + "@lumino/algorithm": "^1.9.1 || ^2.1", + "@lumino/domutils": "^1.8.1 || ^2.1", + "@lumino/messaging": "^1.10.1 || ^2.1", + "@lumino/signaling": "^1.10.1 || ^2.1", + "@lumino/widgets": "^1.30.0 || ^2.1", + "d3-color": "3.1.0", + "d3-format": "^3.0.1", "jquery": "^3.1.1", - "jquery-ui": "1.13.2", - "underscore": "^1.8.3" + "nouislider": "15.4.0" } }, "@jupyter-widgets/schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@jupyter-widgets/schema/-/schema-0.4.0.tgz", - "integrity": "sha512-0MAZ6hLOCe2dYiUvEAfYvWKD7zV9AdkC4AoIEQiWqAai9Pq06oPNWMMg6x+J0ZaNnZWqR2c16f62ehd57Ql7Zw==" + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@jupyter-widgets/schema/-/schema-0.5.5.tgz", + "integrity": "sha512-wTYFZinAezI9DVJJqgUsAPM35iptn3AmUxrZpp/F7dyitxEieUQNYXbZ3kU40TBHsmeq0wuA02s4/2sDzlhk1w==" + }, + "@jupyter/ydoc": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@jupyter/ydoc/-/ydoc-2.1.1.tgz", + "integrity": "sha512-NeEwqXQ2j1OyLq4uezeQmsMiI+Qo5k7dYIMqNByOM7dJp6sHeP0jQ96w7BEc9E4SmrxwcOT4cLvcJWJE8Xun4g==", + "requires": { + "@jupyterlab/nbformat": "^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0", + "@lumino/coreutils": "^1.11.0 || ^2.0.0", + "@lumino/disposable": "^1.10.0 || ^2.0.0", + "@lumino/signaling": "^1.10.0 || ^2.0.0", + "y-protocols": "^1.0.5", + "yjs": "^13.5.40" + } }, "@jupyterlab/coreutils": { - "version": "5.1.17", - "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-5.1.17.tgz", - "integrity": "sha512-5jW/YkQM58s1S8USep4pNKTULoNVh9UXHUoXUfq8Itzq6G9mAggqMtq0XzIV+/L5EyLnvgT6zmCVOKPCs6ZloA==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/coreutils/-/coreutils-6.2.4.tgz", + "integrity": "sha512-A3yHM3UgMYKKJU8JtcPEMGUWUHMlol3TFCdFQbeJnqj+uJmxV0ejkLvDlGk+mefjpcVm/z3cXaDrwoUVtY2FDw==", "requires": { - "@lumino/coreutils": "^1.5.3", - "@lumino/disposable": "^1.4.3", - "@lumino/signaling": "^1.4.3", + "@lumino/coreutils": "^2.1.2", + "@lumino/disposable": "^2.1.2", + "@lumino/signaling": "^2.1.2", "minimist": "~1.2.0", - "moment": "^2.24.0", "path-browserify": "^1.0.0", "url-parse": "^1.5.10" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + } } }, "@jupyterlab/nbformat": { - "version": "3.1.17", - "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-3.1.17.tgz", - "integrity": "sha512-u7dKHYWYNjiLI/08n2Ytr7heK2HzvxB1obeW9bY6sGEuZ4+mkDKNP25ArAd19XaD2WFtYjtxYqJHHmXggqzRKw==", - "requires": { - "@lumino/coreutils": "^1.5.3" - } - }, - "@jupyterlab/observables": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/@jupyterlab/observables/-/observables-4.6.1.tgz", - "integrity": "sha512-ez+fxyE3qwQ9grZ0nj2fpgcPIGySs/cNfojfcQatziV2rbFZzrBJJsWFSBhPO55vJd1Mue21aPw1eEK3ok4Wfw==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/nbformat/-/nbformat-4.2.4.tgz", + "integrity": "sha512-xR4qqvgjMSBeUQ7nUiRQAP6YDOZcqSHxNzIkds81dDL4wk5pj10oKpTg9lAqfwMImubjcGxTM4Msl8+N3cdpsw==", "requires": { - "@lumino/algorithm": "^1.9.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/messaging": "^1.10.0", - "@lumino/signaling": "^1.10.0" + "@lumino/coreutils": "^2.1.2" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + } } }, "@jupyterlab/services": { - "version": "6.1.17", - "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-6.1.17.tgz", - "integrity": "sha512-NMix33c3E5L/BRlhbXsaiXk3TtdbxCj4xWyM9psy50Qm//TSh8ZyFXuRw2zKM8hnZbcouILB6WZ6qPVrjzziZw==", - "requires": { - "@jupyterlab/coreutils": "^5.1.17", - "@jupyterlab/nbformat": "^3.1.17", - "@jupyterlab/observables": "^4.1.17", - "@jupyterlab/settingregistry": "^3.1.17", - "@jupyterlab/statedb": "^3.1.17", - "@lumino/algorithm": "^1.3.3", - "@lumino/coreutils": "^1.5.3", - "@lumino/disposable": "^1.4.3", - "@lumino/polling": "^1.3.3", - "@lumino/signaling": "^1.4.3", - "node-fetch": "^2.6.0", + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/services/-/services-7.2.4.tgz", + "integrity": "sha512-9a9945owJsuAExroT/afecPSCLlQ/dhhQuttRBpycZFRBEGdSXcXY3/1q9rGUDb9wEk0A4ySk7LTZIWZTNP2rg==", + "requires": { + "@jupyter/ydoc": "^2.0.1", + "@jupyterlab/coreutils": "^6.2.4", + "@jupyterlab/nbformat": "^4.2.4", + "@jupyterlab/settingregistry": "^4.2.4", + "@jupyterlab/statedb": "^4.2.4", + "@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": "7.5.10" }, "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + }, "ws": { "version": "7.5.10", "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", @@ -20928,29 +21425,100 @@ } }, "@jupyterlab/settingregistry": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-3.6.1.tgz", - "integrity": "sha512-zNCYIK6/oWG6JnhmwRGE/Zvn5Xhj0kovcJgTlOSHGyIiHqLfJA9TzHZDNUDANqqxAg4+H9fYdh1+agi4XWGL8A==", - "requires": { - "@jupyterlab/statedb": "^3.6.1", - "@lumino/commands": "^1.19.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/signaling": "^1.10.0", - "ajv": "^6.12.3", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/settingregistry/-/settingregistry-4.2.4.tgz", + "integrity": "sha512-95eLd8uiufWE0pso/hlHKcF760NZKlQoubazG8uIphBuYCbSVhd621JoMViAIH6LqDwWi1LfdwYRMJp9hzTlfA==", + "requires": { + "@jupyterlab/nbformat": "^4.2.4", + "@jupyterlab/statedb": "^4.2.4", + "@lumino/commands": "^2.3.0", + "@lumino/coreutils": "^2.1.2", + "@lumino/disposable": "^2.1.2", + "@lumino/signaling": "^2.1.2", + "@rjsf/utils": "^5.13.4", + "ajv": "^8.12.0", "json5": "2.2.2" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + }, + "ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "requires": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + } } }, "@jupyterlab/statedb": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-3.6.1.tgz", - "integrity": "sha512-6+fGzKUCaWBKX/fZDdXR++WgfvYE+Dv5ma8gkgcHaS2vEup2snkmgZ8fBUJXm5xVpU4KhXjTUb7dafLfG7BL3Q==", + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@jupyterlab/statedb/-/statedb-4.2.4.tgz", + "integrity": "sha512-MzNCYEPZcQ55G4M9jExM0zOjC3Bldj63kVM5ontVUpykQgs+sbMjeGcHY7mcMi9gY6hiPPSSvpL3Rf0eZArqkQ==", "requires": { - "@lumino/commands": "^1.19.0", - "@lumino/coreutils": "^1.11.0", - "@lumino/disposable": "^1.10.0", - "@lumino/properties": "^1.8.0", - "@lumino/signaling": "^1.10.0" + "@lumino/commands": "^2.3.0", + "@lumino/coreutils": "^2.1.2", + "@lumino/disposable": "^2.1.2", + "@lumino/properties": "^2.0.1", + "@lumino/signaling": "^2.1.2" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + } } }, "@koa/cors": { @@ -20987,17 +21555,46 @@ } }, "@lumino/commands": { - "version": "1.21.1", - "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-1.21.1.tgz", - "integrity": "sha512-d1zJmwz5bHU0BM/Rl3tRdZ7/WgXnFB0bM7x7Bf0XDlmX++jnU9k0j3mh6/5JqCGLmIApKCRwVqSaV7jPmSJlcQ==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@lumino/commands/-/commands-2.3.1.tgz", + "integrity": "sha512-DpX1kkE4PhILpvK1T4ZnaFb6UP4+YTkdZifvN3nbiomD64O2CTd+wcWIBpZMgy6MMgbVgrE8dzHxHk1EsKxNxw==", "requires": { - "@lumino/algorithm": "^1.9.2", - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4", - "@lumino/domutils": "^1.8.2", - "@lumino/keyboard": "^1.8.2", - "@lumino/signaling": "^1.11.1", - "@lumino/virtualdom": "^1.14.3" + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3", + "@lumino/domutils": "^2.0.2", + "@lumino/keyboard": "^2.0.2", + "@lumino/signaling": "^2.1.3", + "@lumino/virtualdom": "^2.0.2" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/domutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz", + "integrity": "sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ==" + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + } } }, "@lumino/coreutils": { @@ -21007,12 +21604,35 @@ "requires": {} }, "@lumino/disposable": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-1.10.4.tgz", - "integrity": "sha512-4ZxyYcyzUS+ZeB2KAH9oAH3w0DUUceiVr+FIZHZ2TAYGWZI/85WlqJtfm0xjwEpCwLLW1TDqJrISuZu3iMmVMA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/disposable/-/disposable-2.1.3.tgz", + "integrity": "sha512-k5KXy/+T3UItiWHY4WwQawnsJnGo3aNtP5CTRKqo4+tbTNuhc3rTSvygJlNKIbEfIZXW2EWYnwfFDozkYx95eA==", "requires": { - "@lumino/algorithm": "^1.9.2", - "@lumino/signaling": "^1.11.1" + "@lumino/signaling": "^2.1.3" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + } } }, "@lumino/domutils": { @@ -21021,18 +21641,33 @@ "integrity": "sha512-QIpMfkPJrs4GrWBuJf2Sn1fpyVPmvqUUAeD8xAQo8+4V5JAT0vUDLxZ9HijefMgNCi3+Bs8Z3lQwRCrz+cFP1A==" }, "@lumino/dragdrop": { - "version": "1.14.4", - "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-1.14.4.tgz", - "integrity": "sha512-IHX2M8Yqs2YsFHHXKSKiYLgv9DEuhyyKoDS85Chg34J9OaPC5ocT0AmNVnpeq9T4A50sg3vdL9mSRCZ0f302Gw==", + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@lumino/dragdrop/-/dragdrop-2.1.5.tgz", + "integrity": "sha512-zqwR4GakrQBKZOW6S5pj2nfrQDurOErAoe9x3HS3BKLa1AzWA+t9PD5NESOKd81NqXFHjiMirSyFkTUs6pw+uA==", "requires": { - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4" + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + } } }, "@lumino/keyboard": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-1.8.2.tgz", - "integrity": "sha512-Dy+XqQ1wXbcnuYtjys5A0pAqf4SpAFl9NY6owyIhXAo0Va7w3LYp3jgiP1xAaBAwMuUppiUAfrbjrysZuZ625g==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/keyboard/-/keyboard-2.0.2.tgz", + "integrity": "sha512-icRUpvswDaFjqmAJNbQRb/aTu6Iugo6Y2oC08TiIwhQtLS9W+Ee9VofdqvbPSvCm6DkyP+DCWMuA3KXZ4V4g4g==" }, "@lumino/messaging": { "version": "1.10.3", @@ -21044,19 +21679,43 @@ } }, "@lumino/polling": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-1.10.0.tgz", - "integrity": "sha512-ZNXObJQfugnS41Yrlr7yWcFiRK+xAGGOXO08JJ0Mctsg5mT30UEGFVWJY2AjZ6N5aQuLyGed/pMkBzLzrzt8OA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/polling/-/polling-2.1.3.tgz", + "integrity": "sha512-WEZk96ddK6eHEhdDkFUAAA40EOLit86QVbqQqnbPmhdGwFogek26Kq9b1U273LJeirv95zXCATOJAkjRyb7D+w==", "requires": { - "@lumino/coreutils": "^1.12.0", - "@lumino/disposable": "^1.10.1", - "@lumino/signaling": "^1.10.1" + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3", + "@lumino/signaling": "^2.1.3" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + } } }, "@lumino/properties": { - "version": "1.8.2", - "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-1.8.2.tgz", - "integrity": "sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-2.0.2.tgz", + "integrity": "sha512-b312oA3Bh97WFK8efXejYmC3DVJmvzJk72LQB7H3fXhfqS5jUWvL7MSnNmgcQvGzl9fIhDWDWjhtSTi0KGYYBg==" }, "@lumino/signaling": { "version": "1.11.1", @@ -21065,32 +21724,92 @@ "requires": { "@lumino/algorithm": "^1.9.2", "@lumino/properties": "^1.8.2" + }, + "dependencies": { + "@lumino/properties": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/@lumino/properties/-/properties-1.8.2.tgz", + "integrity": "sha512-EkjI9Cw8R0U+xC9HxdFSu7X1tz1H1vKu20cGvJ2gU+CXlMB1DvoYJCYxCThByHZ+kURTAap4SE5x8HvKwNPbig==" + } } }, "@lumino/virtualdom": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-1.14.3.tgz", - "integrity": "sha512-5joUC1yuxeXbpfbSBm/OR8Mu9HoTo6PDX0RKqzlJ9o97iml7zayFN/ynzcxScKGQAo9iaXOY8uVIvGUT8FnsGw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/virtualdom/-/virtualdom-2.0.2.tgz", + "integrity": "sha512-HYZThOtZSoknjdXA102xpy5CiXtTFCVz45EXdWeYLx3NhuEwuAIX93QBBIhupalmtFlRg1yhdDNV40HxJ4kcXg==", "requires": { - "@lumino/algorithm": "^1.9.2" + "@lumino/algorithm": "^2.0.2" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + } } }, "@lumino/widgets": { - "version": "1.37.1", - "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-1.37.1.tgz", - "integrity": "sha512-/whz5B/hL0fjv0bR8JYZ+Emx+CH7HBwXc4TqI9PrrHGm3g6+jRJAyIFGZcQubqkPxxHrRE/VxQgoDKGhINw/Gw==", - "requires": { - "@lumino/algorithm": "^1.9.2", - "@lumino/commands": "^1.21.1", - "@lumino/coreutils": "^1.12.1", - "@lumino/disposable": "^1.10.4", - "@lumino/domutils": "^1.8.2", - "@lumino/dragdrop": "^1.14.4", - "@lumino/keyboard": "^1.8.2", - "@lumino/messaging": "^1.10.3", - "@lumino/properties": "^1.8.2", - "@lumino/signaling": "^1.11.1", - "@lumino/virtualdom": "^1.14.3" + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@lumino/widgets/-/widgets-2.4.0.tgz", + "integrity": "sha512-n7MqRKj+g/aRnI3dl4EJw/Bkt5/LSwGcn3sA9opn88CMZmAzjC33ac+q6zijovjCX8yDud7KKK8yPFTwOFaxhg==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/commands": "^2.3.1", + "@lumino/coreutils": "^2.2.0", + "@lumino/disposable": "^2.1.3", + "@lumino/domutils": "^2.0.2", + "@lumino/dragdrop": "^2.1.5", + "@lumino/keyboard": "^2.0.2", + "@lumino/messaging": "^2.0.2", + "@lumino/properties": "^2.0.2", + "@lumino/signaling": "^2.1.3", + "@lumino/virtualdom": "^2.0.2" + }, + "dependencies": { + "@lumino/algorithm": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/algorithm/-/algorithm-2.0.2.tgz", + "integrity": "sha512-cI8yJ2+QK1yM5ZRU3Kuaw9fJ/64JEDZEwWWp7+U0cd/mvcZ44BGdJJ29w+tIet1QXxPAvnsUleWyQ5qm4qUouA==" + }, + "@lumino/collections": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/collections/-/collections-2.0.2.tgz", + "integrity": "sha512-o0QmfV1D3WhAeA8GI1/YmEPaK89JtHVa764rQ5T0LdbDEwUtUDbjavHs1E/+y66tNTXz9RUJ4D2rcSb9tysYsg==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/coreutils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@lumino/coreutils/-/coreutils-2.2.0.tgz", + "integrity": "sha512-x5wnQ/GjWBayJ6vXVaUi6+Q6ETDdcUiH9eSfpRZFbgMQyyM6pi6baKqJBK2CHkCc/YbAEl6ipApTgm3KOJ/I3g==", + "requires": { + "@lumino/algorithm": "^2.0.2" + } + }, + "@lumino/domutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/domutils/-/domutils-2.0.2.tgz", + "integrity": "sha512-2Kp6YHaMNI1rKB0PrALvOsZBHPy2EvVVAvJLWjlCm8MpWOVETjFp0MA9QpMubT9I76aKbaI5s1o1NJyZ8Y99pQ==" + }, + "@lumino/messaging": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@lumino/messaging/-/messaging-2.0.2.tgz", + "integrity": "sha512-2sUF07cYA0f3mDil41Eh5sfBk0aGAH/mOh1I4+vyRUsKyBqp4WTUtpJFd8xVJGAntygxwnebIygkIaXXTIQvxA==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/collections": "^2.0.2" + } + }, + "@lumino/signaling": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@lumino/signaling/-/signaling-2.1.3.tgz", + "integrity": "sha512-9Wd4iMk8F1i6pYjy65bqKuPlzQMicyL9xy1/ccS20kovPcfD074waneL/7BVe+3M8i+fGa3x2qjbWrBzOdTdNw==", + "requires": { + "@lumino/algorithm": "^2.0.2", + "@lumino/coreutils": "^2.2.0" + } + } } }, "@microsoft/1ds-core-js": { @@ -21467,6 +22186,18 @@ "playwright-core": "1.47.2" } }, + "@rjsf/utils": { + "version": "5.19.4", + "resolved": "https://registry.npmjs.org/@rjsf/utils/-/utils-5.19.4.tgz", + "integrity": "sha512-853BZuQvl62Xw2Ve07dkOdEzlr7jCBU/XFPhj9tik3s++InY1brBIDBRZKABvWHjymdSvO9gSzQXzj9aFREcFA==", + "requires": { + "json-schema-merge-allof": "^0.8.1", + "jsonpointer": "^5.0.1", + "lodash": "^4.17.21", + "lodash-es": "^4.17.21", + "react-is": "^18.2.0" + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -21526,9 +22257,9 @@ "dev": true }, "@types/backbone": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.15.tgz", - "integrity": "sha512-WWeKtYlsIMtDyLbbhkb96taJMEbfQBnuz7yw1u0pkphCOtksemoWhIXhK74VRCY9hbjnsH3rsJu2uUiFtnsEYg==", + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@types/backbone/-/backbone-1.4.14.tgz", + "integrity": "sha512-85ldQ99fiYTJFBlZuAJRaCdvTZKZ2p1fSs3fVf+6Ub6k1X0g0hNJ0qJ/2FOByyyAQYLtbEz3shX5taKQfBKBDw==", "requires": { "@types/jquery": "*", "@types/underscore": "*" @@ -21662,9 +22393,9 @@ "dev": true }, "@types/jquery": { - "version": "3.5.14", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.14.tgz", - "integrity": "sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==", + "version": "3.5.30", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", + "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", "requires": { "@types/sizzle": "*" } @@ -21880,9 +22611,9 @@ "dev": true }, "@types/sizzle": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.3.tgz", - "integrity": "sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==" + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/@types/sizzle/-/sizzle-2.3.8.tgz", + "integrity": "sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==" }, "@types/source-list-map": { "version": "0.1.2", @@ -21956,9 +22687,9 @@ } }, "@types/underscore": { - "version": "1.11.4", - "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.4.tgz", - "integrity": "sha512-uO4CD2ELOjw8tasUrAhvnn2W4A0ZECOvMjCivJr4gA9pGgjv+qxKWY9GLTMVEK8ej85BxQOocUyE7hImmSQYcg==" + "version": "1.11.15", + "resolved": "https://registry.npmjs.org/@types/underscore/-/underscore-1.11.15.tgz", + "integrity": "sha512-HP38xE+GuWGlbSRq9WrZkousaQ7dragtZCruBVMi0oX1migFZavZ3OROKHSkNp/9ouq82zrWtZpg18jFnVN96g==" }, "@types/url-parse": { "version": "1.4.8", @@ -23343,11 +24074,11 @@ } }, "backbone": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.2.3.tgz", - "integrity": "sha1-wiz9B/yG676uYdGJKe0RXpmdZbk=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", + "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", "requires": { - "underscore": ">=1.7.0" + "underscore": ">=1.8.3" } }, "balanced-match": { @@ -24092,6 +24823,27 @@ "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", "dev": true }, + "compute-gcd": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.1.tgz", + "integrity": "sha512-TwMbxBNz0l71+8Sc4czv13h4kEqnchV9igQZBi6QUaz09dnz13juGnnaWWJTRsP3brxOoxeB4SA2WELLw1hCtg==", + "requires": { + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, + "compute-lcm": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.2.tgz", + "integrity": "sha512-OFNPdQAXnQhDSKioX8/XYT6sdUlXwpeMjfd6ApxMJfyZ4GxmLR1xvMERctlYhlHwIiz6CSpBc2+qYKjHGZw4TQ==", + "requires": { + "compute-gcd": "^1.2.1", + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -24554,9 +25306,9 @@ "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" }, "d3-format": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz", - "integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==" }, "d3-interpolate": { "version": "1.4.0", @@ -26203,6 +26955,11 @@ "resolved": "https://registry.npmjs.org/fast-memoize/-/fast-memoize-2.5.2.tgz", "integrity": "sha512-Ue0LwpDYErFbmNnZSF0UH6eImUwDmogUO1jyE+JbN2gsQz/jICm1Ve7t9QT0rNSsfJt+Hs4/S3GnsDVjL4HVrw==" }, + "fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + }, "fast-url-parser": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", @@ -27823,6 +28580,11 @@ "integrity": "sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==", "requires": {} }, + "isomorphic.js": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/isomorphic.js/-/isomorphic.js-0.2.5.tgz", + "integrity": "sha512-PIeMbHqMt4DnUP3MA/Flc0HElYjMXArsw1qwJZcm9sqR8mq3l8NYizFMty0pWwE/tzIGH3EKK5+jes5mAr85yw==" + }, "istanbul-lib-coverage": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", @@ -28096,6 +28858,24 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "json-schema-compare": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", + "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", + "requires": { + "lodash": "^4.17.4" + } + }, + "json-schema-merge-allof": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.8.1.tgz", + "integrity": "sha512-CTUKmIlPJbsWfzRRnOXz+0MjIqvnleIXwFTzz+t9T86HnYX/Rozria6ZVGLktAU9e+NygNljveP+yxqtQp/Q4w==", + "requires": { + "compute-lcm": "^1.1.2", + "json-schema-compare": "^0.2.2", + "lodash": "^4.17.20" + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -28156,6 +28936,11 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, + "jsonpointer": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-5.0.1.tgz", + "integrity": "sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==" + }, "jsonschema": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.4.1.tgz", @@ -28477,6 +29262,14 @@ "type-check": "~0.4.0" } }, + "lib0": { + "version": "0.2.94", + "resolved": "https://registry.npmjs.org/lib0/-/lib0-0.2.94.tgz", + "integrity": "sha512-hZ3p54jL4Wpu7IOg26uC7dnEWiMyNlUrb9KoG7+xYs45WkQwpVvKFndVq2+pqLYKe1u8Fp3+zAfZHVvTK34PvQ==", + "requires": { + "isomorphic.js": "^0.2.4" + } + }, "lie": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", @@ -28580,6 +29373,11 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, + "lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, "lodash.clonedeep": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", @@ -29026,11 +29824,6 @@ "lodash": "^4.17.15" } }, - "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" - }, "morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -29367,6 +30160,11 @@ "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", "dev": true }, + "nouislider": { + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.4.0.tgz", + "integrity": "sha512-AV7UMhGhZ4Mj6ToMT812Ib8OJ4tAXR2/Um7C4l4ZvvsqujF0WpQTpqqHJ+9xt4174R7ueQOUrBR4yakJpAIPCA==" + }, "nth-check": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", @@ -30866,10 +31664,9 @@ } }, "react-is": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.0.0.tgz", - "integrity": "sha512-yUcBYdBBbo3QiPsgYDcfQcIkGZHfxOaoE6HLSnr1sPzMhdyxusbfKOSUbSd/ocGi32dxcj366PsTj+5oggeKKw==", - "peer": true + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==" }, "react-is-deprecated": { "version": "0.1.2", @@ -31100,8 +31897,7 @@ "require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "requires-port": { "version": "1.0.0", @@ -33400,6 +34196,38 @@ "integrity": "sha512-fcRLaS4H/hrZk9hYwbdRM35D0U8IYMfEClhXxCivOojl+yTRAZH3Zy2sSy6qVCiGbV9YAtPssP6jaChqC9vPCg==", "dev": true }, + "validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha512-DeOy7CnPEziggrOO5CZhVKJw6S3Yi7e9e65R1Nl/RTN1vTQKnzjfvks0/8kQ40FP/dsjRAOd4hxmJ7uLa6vxkg==" + }, + "validate.io-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", + "integrity": "sha512-LlFybRJEriSuBnUhQyG5bwglhh50EpTL2ul23MPIuR1odjO7XaMLFV8vHGwp7AZciFxtYOeiSCT5st+XSPONiQ==" + }, + "validate.io-integer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", + "integrity": "sha512-22izsYSLojN/P6bppBqhgUDjCkr5RY2jd+N2a3DCAUey8ydvrZ/OkGvFPR7qfOpwR2LC5p4Ngzxz36g5Vgr/hQ==", + "requires": { + "validate.io-number": "^1.0.3" + } + }, + "validate.io-integer-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", + "integrity": "sha512-mTrMk/1ytQHtCY0oNO3dztafHYyGU88KL+jRxWuzfOmQb+4qqnWmI+gykvGp8usKZOM0H7keJHEbRaFiYA0VrA==", + "requires": { + "validate.io-array": "^1.0.3", + "validate.io-integer": "^1.0.4" + } + }, + "validate.io-number": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", + "integrity": "sha512-kRAyotcbNaSYoDnXvb4MHg/0a1egJdLwS6oJ38TJY7aw9n93Fl/3blIXdyYvPOp55CNxywooG/3BcrwNrBpcSg==" + }, "validator": { "version": "13.7.0", "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", @@ -33836,6 +34664,14 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" }, + "y-protocols": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/y-protocols/-/y-protocols-1.0.6.tgz", + "integrity": "sha512-vHRF2L6iT3rwj1jub/K5tYcTT/mEYDUppgNPXwp8fmLpui9f7Yeq3OEtTLVF012j39QnV+KEQpNqoN7CWU7Y9Q==", + "requires": { + "lib0": "^0.2.85" + } + }, "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", @@ -33907,6 +34743,14 @@ } } }, + "yjs": { + "version": "13.6.18", + "resolved": "https://registry.npmjs.org/yjs/-/yjs-13.6.18.tgz", + "integrity": "sha512-GBTjO4QCmv2HFKFkYIJl7U77hIB1o22vSCSQD1Ge8ZxWbIbn8AltI4gyXbtL+g5/GJep67HCMq3Y5AmNwDSyEg==", + "requires": { + "lib0": "^0.2.86" + } + }, "ylru": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ylru/-/ylru-1.4.0.tgz", diff --git a/package.json b/package.json index 30d90321025..6c9746d33e0 100644 --- a/package.json +++ b/package.json @@ -2128,13 +2128,13 @@ "dependencies": { "@c4312/evt": "^0.1.1", "@enonic/fnv-plus": "^1.3.0", - "@jupyter-widgets/base": "4.0.0", - "@jupyter-widgets/controls": "3.0.0", - "@jupyter-widgets/schema": "0.4.0", - "@jupyterlab/coreutils": "5.1.17", - "@jupyterlab/nbformat": "3.1.17", - "@jupyterlab/services": "6.1.17", - "@lumino/widgets": "^1.28.0", + "@jupyter-widgets/base": "^6.0.8", + "@jupyter-widgets/controls": "^5.0.9", + "@jupyter-widgets/schema": "^0.5.5", + "@jupyterlab/coreutils": "^6.2.4", + "@jupyterlab/nbformat": "^4.2.4", + "@jupyterlab/services": "^7.2.4", + "@lumino/widgets": "^2.4.0", "@nteract/messaging": "^7.0.0", "@vscode/extension-telemetry": "^0.7.7", "@vscode/python-extension": "^1.0.4", diff --git a/src/kernels/common/baseJupyterSessionConnection.ts b/src/kernels/common/baseJupyterSessionConnection.ts index 2dfe7d05c69..9759f584613 100644 --- a/src/kernels/common/baseJupyterSessionConnection.ts +++ b/src/kernels/common/baseJupyterSessionConnection.ts @@ -58,6 +58,11 @@ export abstract class BaseJupyterSessionConnection< * The kernel anyMessage signal, proxied from the current kernel. */ anyMessage = new Signal(this); + /** + * The kernel pendingInput signal, proxied from the current + * kernel. + */ + pendingInput = new Signal(this); constructor( public readonly kind: T, @@ -70,6 +75,7 @@ export abstract class BaseJupyterSessionConnection< session.connectionStatusChanged.connect(this.onConnectionStatusChanged, this); session.iopubMessage.connect(this.onIOPubMessage, this); session.unhandledMessage.connect(this.onUnhandledMessage, this); + session.pendingInput.connect(this.onPendingInput, this); session.anyMessage.connect(this.onAnyMessage, this); this._register({ @@ -80,6 +86,7 @@ export abstract class BaseJupyterSessionConnection< this.session.connectionStatusChanged.disconnect(this.onConnectionStatusChanged, this); this.session.iopubMessage.disconnect(this.onIOPubMessage, this); this.session.unhandledMessage.disconnect(this.onUnhandledMessage, this); + this.session.pendingInput.disconnect(this.onPendingInput, this); this.session.anyMessage.disconnect(this.onAnyMessage, this); } }); @@ -187,6 +194,9 @@ export abstract class BaseJupyterSessionConnection< private onAnyMessage(_: unknown, value: Kernel.IAnyMessageArgs) { this.anyMessage.emit(value); } + private onPendingInput(_: unknown, value: boolean) { + this.pendingInput.emit(value); + } public setPath(value: string) { return this.session.setPath(value); } diff --git a/src/kernels/common/baseJupyterSessionConnection.unit.test.ts b/src/kernels/common/baseJupyterSessionConnection.unit.test.ts index 33767af0091..803619a6cbc 100644 --- a/src/kernels/common/baseJupyterSessionConnection.unit.test.ts +++ b/src/kernels/common/baseJupyterSessionConnection.unit.test.ts @@ -48,6 +48,7 @@ suite('Base Jupyter Session Connection', () => { when(kernel.status).thenReturn('idle'); when(kernel.connectionStatus).thenReturn('connected'); when(kernel.statusChanged).thenReturn(instance(mock>())); + when(kernel.pendingInput).thenReturn(instance(mock>())); when(kernel.iopubMessage).thenReturn( instance( mock>>() @@ -96,6 +97,7 @@ suite('Base Jupyter Session Connection', () => { when(session.statusChanged).thenReturn( new Signal(instance(session)) ); + when(session.pendingInput).thenReturn(instance(mock>())); when(session.unhandledMessage).thenReturn(sessionUnhandledMessage); when(session.connectionStatusChanged).thenReturn(sessionConnectionStatusChanged); when(session.anyMessage).thenReturn(sessionAnyMessage); diff --git a/src/kernels/execution/cellExecutionMessageHandler.ts b/src/kernels/execution/cellExecutionMessageHandler.ts index 5e1aaf894e3..a110728f1e4 100644 --- a/src/kernels/execution/cellExecutionMessageHandler.ts +++ b/src/kernels/execution/cellExecutionMessageHandler.ts @@ -848,7 +848,8 @@ export class CellExecutionMessageHandler implements IDisposable { cancelToken.token ) .then((v) => { - this.kernel.sendInputReply({ value: v || '', status: 'ok' }); + // eslint-disable-next-line @typescript-eslint/no-explicit-any + this.kernel.sendInputReply({ value: v || '', status: 'ok' }, msg.header as any); }, noop); this.prompts.delete(cancelToken); diff --git a/src/kernels/jupyter/session/jupyterKernelSessionFactory.unit.test.ts b/src/kernels/jupyter/session/jupyterKernelSessionFactory.unit.test.ts index 2fee56fd98f..b1f7e01285b 100644 --- a/src/kernels/jupyter/session/jupyterKernelSessionFactory.unit.test.ts +++ b/src/kernels/jupyter/session/jupyterKernelSessionFactory.unit.test.ts @@ -206,6 +206,7 @@ suite('New Jupyter Kernel Session Factory', () => { when(session.statusChanged).thenReturn( new Signal(instance(session)) ); + when(session.pendingInput).thenReturn(instance(mock>())); when(session.unhandledMessage).thenReturn(sessionUnhandledMessage); when(session.connectionStatusChanged).thenReturn(sessionConnectionStatusChanged); when(session.anyMessage).thenReturn(sessionAnyMessage); @@ -213,6 +214,7 @@ suite('New Jupyter Kernel Session Factory', () => { when(kernel.status).thenReturn('idle'); when(kernel.connectionStatus).thenReturn('connected'); when(kernel.statusChanged).thenReturn(instance(mock>())); + when(kernel.pendingInput).thenReturn(instance(mock>())); when(kernel.iopubMessage).thenReturn( instance( mock>>() diff --git a/src/kernels/jupyter/session/jupyterLabHelper.ts b/src/kernels/jupyter/session/jupyterLabHelper.ts index 8914ef84b42..de2bbb054ce 100644 --- a/src/kernels/jupyter/session/jupyterLabHelper.ts +++ b/src/kernels/jupyter/session/jupyterLabHelper.ts @@ -99,11 +99,11 @@ export class JupyterLabHelper extends ObservableDisposable { const sessions: Session.IModel[] = []; const iterator = this.sessionManager.running(); - let session = iterator.next(); + let session = iterator.next().value; while (session) { sessions.push(session); - session = iterator.next(); + session = iterator.next().value; } return sessions; diff --git a/src/kernels/jupyter/session/jupyterSession.unit.test.ts b/src/kernels/jupyter/session/jupyterSession.unit.test.ts index 5e5ae472998..0b0776bd62a 100644 --- a/src/kernels/jupyter/session/jupyterSession.unit.test.ts +++ b/src/kernels/jupyter/session/jupyterSession.unit.test.ts @@ -76,6 +76,7 @@ suite('JupyterSession', () => { when(session.unhandledMessage).thenReturn(sessionUnhandledMessage); when(session.connectionStatusChanged).thenReturn(sessionConnectionStatusChanged); when(session.anyMessage).thenReturn(sessionAnyMessage); + when(session.pendingInput).thenReturn(instance(mock>())); when(session.isDisposed).thenReturn(false); when(kernel.status).thenReturn('idle'); when(kernel.connectionStatus).thenReturn('connected'); @@ -90,6 +91,7 @@ suite('JupyterSession', () => { instance(mock>>()) ); when(kernel.disposed).thenReturn(instance(mock>())); + when(kernel.pendingInput).thenReturn(instance(mock>())); when(kernel.connectionStatusChanged).thenReturn( instance(mock>()) ); diff --git a/src/kernels/raw/session/rawJupyterSession.node.unit.test.ts b/src/kernels/raw/session/rawJupyterSession.node.unit.test.ts index 26719c41f4d..2ce1071d831 100644 --- a/src/kernels/raw/session/rawJupyterSession.node.unit.test.ts +++ b/src/kernels/raw/session/rawJupyterSession.node.unit.test.ts @@ -50,6 +50,7 @@ suite('Raw Jupyter Session Wrapper', () => { when(session.connectionStatusChanged).thenReturn(sessionConnectionStatusChanged); when(session.anyMessage).thenReturn(sessionAnyMessage); when(session.isDisposed).thenReturn(false); + when(session.pendingInput).thenReturn(instance(mock>())); when(kernel.status).thenReturn('idle'); when(kernel.connectionStatus).thenReturn('connected'); when(kernel.statusChanged).thenReturn(instance(mock>())); @@ -63,6 +64,7 @@ suite('Raw Jupyter Session Wrapper', () => { instance(mock>>()) ); when(kernel.disposed).thenReturn(instance(mock>())); + when(kernel.pendingInput).thenReturn(instance(mock>())); when(kernel.connectionStatusChanged).thenReturn( instance(mock>()) ); diff --git a/src/kernels/raw/session/rawKernelConnection.node.ts b/src/kernels/raw/session/rawKernelConnection.node.ts index ec25538bc40..f80fb8f56cc 100644 --- a/src/kernels/raw/session/rawKernelConnection.node.ts +++ b/src/kernels/raw/session/rawKernelConnection.node.ts @@ -40,7 +40,7 @@ import { KernelProcessExitedError } from '../../errors/kernelProcessExitedError' import { once } from '../../../platform/common/utils/functional'; import { disposeAsync } from '../../../platform/common/utils'; -let nonSerializingKernel: typeof import('@jupyterlab/services/lib/kernel/default'); +let jupyterLabKernel: typeof import('@jupyterlab/services/lib/kernel/default'); /* RawKernel class represents the mapping from the JupyterLab services IKernel interface @@ -54,6 +54,7 @@ export class RawKernelConnection implements Kernel.IKernelConnection { public readonly unhandledMessage = new Signal>(this); public readonly anyMessage = new Signal(this); public readonly disposed = new Signal(this); + public readonly pendingInput = new Signal(this); public get connectionStatus() { return this.realKernel ? this.realKernel.connectionStatus : 'connecting'; } @@ -90,6 +91,9 @@ export class RawKernelConnection implements Kernel.IKernelConnection { public get handleComms(): boolean { return this.realKernel!.handleComms; } + public get hasPendingInput(): boolean { + return this.realKernel!.hasPendingInput; + } private isDisposing?: boolean; private _isDisposed?: boolean; public get isDisposed(): boolean { @@ -302,6 +306,9 @@ export class RawKernelConnection implements Kernel.IKernelConnection { public hasComm(commId: string): boolean { return this.realKernel!.hasComm(commId); } + public removeInputGuard() { + this.realKernel!.removeInputGuard(); + } public clone( _options?: Pick ): Kernel.IKernelConnection { @@ -417,8 +424,11 @@ export class RawKernelConnection implements Kernel.IKernelConnection { }): Promise { return this.realKernel!.requestCommInfo(content); } - public sendInputReply(content: KernelMessage.IInputReplyMsg['content']): void { - return this.realKernel!.sendInputReply(content); + public sendInputReply( + content: KernelMessage.IInputReplyMsg['content'], + parent_header: KernelMessage.IInputReplyMsg['parent_header'] + ): void { + return this.realKernel!.sendInputReply(content, parent_header); } public registerCommTarget( targetName: string, @@ -449,12 +459,14 @@ export class RawKernelConnection implements Kernel.IKernelConnection { this.realKernel!.iopubMessage.connect(this.onIOPubMessage, this); this.realKernel!.unhandledMessage.connect(this.onUnhandledMessage, this); this.realKernel!.statusChanged.connect(this.onStatusChanged, this); + this.realKernel!.pendingInput.connect(this.onPendingInput, this); this.realKernel!.disposed.connect(this.onDisposed, this); } private stopHandlingKernelMessages() { this.realKernel!.anyMessage.disconnect(this.onAnyMessage, this); this.realKernel!.iopubMessage.disconnect(this.onIOPubMessage, this); this.realKernel!.unhandledMessage.disconnect(this.onUnhandledMessage, this); + this.realKernel!.pendingInput.disconnect(this.onPendingInput, this); this.realKernel!.statusChanged.disconnect(this.onStatusChanged, this); this.realKernel!.disposed.disconnect(this.onDisposed, this); } @@ -464,6 +476,9 @@ export class RawKernelConnection implements Kernel.IKernelConnection { private onIOPubMessage(_connection: Kernel.IKernelConnection, msg: IIOPubMessage) { this.iopubMessage.emit(msg); } + private onPendingInput(_connection: Kernel.IKernelConnection, msg: boolean) { + this.pendingInput.emit(msg); + } private onUnhandledMessage(_connection: Kernel.IKernelConnection, msg: IMessage) { this.unhandledMessage.emit(msg); } @@ -640,18 +655,25 @@ function newRawKernel(kernelProcess: IKernelProcess, clientId: string, username: const settings = jupyterLab.ServerConnection.makeSettings({ // eslint-disable-next-line @typescript-eslint/no-explicit-any WebSocket: RawSocketWrapper as any, // NOSONAR - wsUrl: 'RAW' + wsUrl: 'RAW', + serializer: { + deserialize: (data) => { + return data as any; // NOSONAR + }, + serialize: (data) => { + return data as any; // NOSONAR + } + } }); // Then create the real kernel. We will remap its serialize/deserialize functions // to do nothing so that we can control serialization at our socket layer. - if (!nonSerializingKernel) { + if (!jupyterLabKernel) { // Note, this is done with a postInstall step (found in build\ci\postInstall.js). In that post install step // we eliminate the serialize import from the default kernel and remap it to do nothing. - nonSerializingKernel = - require('@jupyterlab/services/lib/kernel/nonSerializingKernel') as typeof import('@jupyterlab/services/lib/kernel/default'); // NOSONAR + jupyterLabKernel = require('@jupyterlab/services/lib/kernel/default'); // NOSONAR } - const realKernel = new nonSerializingKernel.KernelConnection({ + const realKernel = new jupyterLabKernel.KernelConnection({ serverSettings: settings, clientId, handleComms: true, diff --git a/src/kernels/raw/session/rawSessionConnection.node.ts b/src/kernels/raw/session/rawSessionConnection.node.ts index 29bcd311812..88b183022fa 100644 --- a/src/kernels/raw/session/rawSessionConnection.node.ts +++ b/src/kernels/raw/session/rawSessionConnection.node.ts @@ -35,6 +35,7 @@ export class RawSessionConnection implements Session.ISessionConnection { public readonly anyMessage = new Signal(this); public readonly disposed = new Signal(this); public readonly connectionStatusChanged = new Signal(this); + public readonly pendingInput = new Signal(this); public readonly propertyChanged = new Signal(this); private _didShutDownOnce = false; private _isDisposing?: boolean; @@ -106,6 +107,7 @@ export class RawSessionConnection implements Session.ISessionConnection { this._kernel.unhandledMessage.connect(this.onUnhandledMessage, this); this._kernel.anyMessage.connect(this.onAnyMessage, this); this._kernel.disposed.connect(this.onDisposed, this); + this._kernel.disposed.connect(this.onDisposed, this); } public async startKernel(options: { token: CancellationToken }): Promise { await trackKernelResourceInformation(this.resource, { kernelConnection: this.kernelConnectionMetadata }); diff --git a/src/kernels/raw/session/rawSessionConnection.node.unit.test.ts b/src/kernels/raw/session/rawSessionConnection.node.unit.test.ts index 30f0dd72391..1ee5cb3392d 100644 --- a/src/kernels/raw/session/rawSessionConnection.node.unit.test.ts +++ b/src/kernels/raw/session/rawSessionConnection.node.unit.test.ts @@ -33,8 +33,8 @@ import { createDeferred } from '../../../platform/common/utils/async'; import { mockedVSCodeNamespaces, resetVSCodeMocks } from '../../../test/vscode-mock'; import type { IFileSystem } from '../../../platform/common/platform/types'; import { computeLocalWorkingDirectory } from './rawKernelSessionFactory.node'; -const nonSerializingKernel = - require('@jupyterlab/services/lib/kernel/nonSerializingKernel') as typeof import('@jupyterlab/services/lib/kernel/default'); +const jupyterLabKernel = + require('@jupyterlab/services/lib/kernel/default') as typeof import('@jupyterlab/services/lib/kernel/default'); suite('Raw Session & Raw Kernel Connection', () => { let session: RawSessionConnection; @@ -51,7 +51,7 @@ suite('Raw Session & Raw Kernel Connection', () => { const launchTimeout = 1_000; let disposables: IDisposable[] = []; let kernelConnectionMetadata: LocalKernelSpecConnectionMetadata; - const OldKernelConnectionClass = nonSerializingKernel.KernelConnection; + const OldKernelConnectionClass = jupyterLabKernel.KernelConnection; const kernelInfo: KernelMessage.IInfoReply = { banner: '', help_links: [], @@ -94,7 +94,7 @@ suite('Raw Session & Raw Kernel Connection', () => { channel: 'iopub', content: { status: 'ok' - }, + } as any, metadata: {}, parent_header: { date: '', @@ -152,6 +152,7 @@ suite('Raw Session & Raw Kernel Connection', () => { instance(mock>>()) ); when(kernel.disposed).thenReturn(instance(mock>())); + when(kernel.pendingInput).thenReturn(instance(mock>())); when(kernel.connectionStatusChanged).thenReturn( instance(mock>()) ); @@ -166,7 +167,7 @@ suite('Raw Session & Raw Kernel Connection', () => { when(kernel.sendControlMessage(anything(), true, true)).thenReturn({ done: deferred.promise } as any); when(kernel.connectionStatus).thenReturn('connected'); - nonSerializingKernel.KernelConnection = function (options: { serverSettings: ServerConnection.ISettings }) { + jupyterLabKernel.KernelConnection = function (options: { serverSettings: ServerConnection.ISettings }) { new options.serverSettings.WebSocket('http://1234'); return instance(kernel); } as any; @@ -191,7 +192,7 @@ suite('Raw Session & Raw Kernel Connection', () => { disposables.push(exitedEvent); onDidDispose = new EventEmitter(); disposables.push(onDidDispose); - nonSerializingKernel.KernelConnection = OldKernelConnectionClass; + jupyterLabKernel.KernelConnection = OldKernelConnectionClass; const workspaceConfig = mock(); when(workspaceConfig.get(anything(), anything())).thenCall((_, defaultValue) => defaultValue); when(mockedVSCodeNamespaces.workspace.getConfiguration(anything())).thenReturn(instance(workspaceConfig)); @@ -216,7 +217,7 @@ suite('Raw Session & Raw Kernel Connection', () => { }); teardown(async () => { - nonSerializingKernel.KernelConnection = OldKernelConnectionClass; + jupyterLabKernel.KernelConnection = OldKernelConnectionClass; sinon.reset(); disposables = dispose(disposables); await session diff --git a/src/kernels/raw/session/rawSocket.node.ts b/src/kernels/raw/session/rawSocket.node.ts index 771660e793f..0dfae189e9d 100644 --- a/src/kernels/raw/session/rawSocket.node.ts +++ b/src/kernels/raw/session/rawSocket.node.ts @@ -46,7 +46,11 @@ export class RawSocket implements IWebSocketLike, IKernelSocket, IDisposable { private sendChain: Promise = Promise.resolve(); private channels: IChannels; private closed = false; - + /** + * Used to configure the protocol for WebSocket messages in Jupyter Lab. + * Empty string means no protocol (old behavior, this is simpler for raw sockets as we just want to serialize to JSON and back). + */ + public readonly protocol = ''; constructor( private connection: IKernelConnection, private serialize: (msg: KernelMessage.IMessage) => string | ArrayBuffer diff --git a/src/kernels/types.ts b/src/kernels/types.ts index 35beeced0b0..9d8d40dc727 100644 --- a/src/kernels/types.ts +++ b/src/kernels/types.ts @@ -714,6 +714,11 @@ export interface IKernelSessionFactory { } export interface IKernelSocket { + /** + * Used to configure the protocol for WebSocket messages in Jupyter Lab. + * Empty string means no protocol (old behavior, this is simpler for raw sockets as we just want to serialize to JSON and back). + */ + readonly protocol?: string; /** * Adds a listener to a socket that will be called before the socket's onMessage is called. This * allows waiting for a callback before processing messages @@ -765,6 +770,10 @@ export interface KernelSocketOptions { */ readonly name: string; }; + /** + * WebSocket protocol used for Jupyter Messages. + */ + readonly protocol: string; } /** * Response for installation of kernel dependencies such as ipykernel. diff --git a/src/notebooks/controllers/ipywidgets/message/ipyWidgetMessageDispatcher.ts b/src/notebooks/controllers/ipywidgets/message/ipyWidgetMessageDispatcher.ts index 9aa328c71e7..c8b4673dfe7 100644 --- a/src/notebooks/controllers/ipywidgets/message/ipyWidgetMessageDispatcher.ts +++ b/src/notebooks/controllers/ipywidgets/message/ipyWidgetMessageDispatcher.ts @@ -12,7 +12,7 @@ import { Deferred, createDeferred } from '../../../../platform/common/utils/asyn import { noop } from '../../../../platform/common/utils/misc'; import { deserializeDataViews, serializeDataViews } from '../../../../platform/common/utils/serializers'; import { IPyWidgetMessages, IInteractiveWindowMapping } from '../../../../messageTypes'; -import { IKernel, IKernelProvider } from '../../../../kernels/types'; +import { IKernel, IKernelProvider, type IKernelSocket } from '../../../../kernels/types'; import { IIPyWidgetMessageDispatcher, IPyWidgetMessage } from '../types'; import { shouldMessageBeMirroredWithRenderer } from '../../../../kernels/kernel'; import { KernelSocketMap } from '../../../../kernels/kernelSocket'; @@ -80,7 +80,7 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { private outputWidgetIds = new Set(); private fullHandleMessage?: { id: string; promise: Deferred }; private isUsingIPyWidgets = false; - private readonly deserialize: (data: string | ArrayBuffer) => KernelMessage.IMessage; + private readonly deserialize: (data: ArrayBuffer, protocol?: string) => KernelMessage.IMessage; constructor( private readonly kernelProvider: IKernelProvider, @@ -207,11 +207,23 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { oldKernelId = kernel.session?.kernel?.id || ''; }); } + private readonly kernelSocketHandlers = new WeakMap< + IKernelSocket, + { + receiveHook: (data: WebSocketData) => Promise; + sendHook: (data: any, _cb?: (err?: Error) => void) => Promise; + } + >(); private subscribeToKernelSocketImpl(kernel: IKernel, oldKernelId?: string) { // Remove old handlers. const oldSocket = oldKernelId ? KernelSocketMap.get(oldKernelId) : undefined; - oldSocket?.removeReceiveHook(this.onKernelSocketMessage); // NOSONAR - oldSocket?.removeSendHook(this.mirrorSend); // NOSONAR + const handlers = oldSocket ? this.kernelSocketHandlers.get(oldSocket) : undefined; + if (handlers?.receiveHook) { + oldSocket?.removeReceiveHook(handlers.receiveHook); // NOSONAR + } + if (handlers?.sendHook) { + oldSocket?.removeSendHook(handlers.sendHook); // NOSONAR + } if (this.kernelWasConnectedAtLeastOnce) { // this means we restarted the kernel and we now have new information. // Discard all of the messages upto this point. @@ -242,34 +254,50 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { this.kernelWasConnectedAtLeastOnce = true; const kernelId = kernel.session.kernel?.id; const newSocket = kernelId ? KernelSocketMap.get(kernelId) : undefined; - newSocket?.addReceiveHook(this.onKernelSocketMessage); // NOSONAR - newSocket?.addSendHook(this.mirrorSend); // NOSONAR - this.sendKernelOptions(); + const protocol = newSocket?.protocol || ''; + if (newSocket) { + const onKernelSocketMessage = this.onKernelSocketMessage.bind(this, protocol); + const mirrorSend = this.mirrorSend.bind(this, protocol); + newSocket.addReceiveHook(onKernelSocketMessage); // NOSONAR + newSocket.addSendHook(mirrorSend); // NOSONAR + this.kernelSocketHandlers.set(newSocket, { receiveHook: onKernelSocketMessage, sendHook: mirrorSend }); + } + this.sendKernelOptions(protocol); // Since we have connected to a kernel, send any pending messages. this.registerCommTargets(kernel); - this.sendPendingMessages(); + this.sendPendingMessages(protocol); } /** * Pass this information to UI layer so it can create a dummy kernel with same information. * Information includes kernel connection info (client id, user name, model, etc). */ - private sendKernelOptions() { - if (!this.kernel?.session?.kernel) { + private sendKernelOptions(protocol: string = '') { + const kernel = this.kernel?.session?.kernel; + if (!kernel) { return; } + + if (!protocol) { + protocol = KernelSocketMap.get(kernel.id)?.protocol || ''; + } + this.raisePostMessage(IPyWidgetMessages.IPyWidgets_kernelOptions, { - id: this.kernel?.session?.kernel?.id || '', - clientId: this.kernel?.session?.kernel?.clientId || '', - userName: this.kernel?.session?.kernel?.username || '', - model: this.kernel?.session?.kernel?.model || { id: '', name: '' } + id: kernel.id, + clientId: kernel.clientId || '', + userName: kernel.username || '', + model: kernel.model || { id: '', name: '' }, + protocol }); } - private async mirrorSend(data: any, _cb?: (err?: Error) => void): Promise { + private async mirrorSend(protocol: string | undefined, data: any, _cb?: (err?: Error) => void): Promise { // If this is shell control message, mirror to the other side. This is how // we get the kernel in the UI to have the same set of futures we have on this side if (typeof data === 'string' && data.includes('shell') && data.includes('execute_request')) { // eslint-disable-next-line @typescript-eslint/no-require-imports - const msg = this.deserialize(data) as KernelMessage.IExecuteRequestMsg; + const msg = + typeof data === 'string' + ? JSON.parse(data) + : (this.deserialize(data) as KernelMessage.IExecuteRequestMsg); if (msg.channel === 'shell' && msg.header.msg_type === 'execute_request') { if (!shouldMessageBeMirroredWithRenderer(msg)) { return; @@ -280,6 +308,24 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { await promise; } } + } else if (typeof data !== 'string') { + try { + // eslint-disable-next-line @typescript-eslint/no-require-imports + const msg = this.deserialize(data, protocol) as KernelMessage.IExecuteRequestMsg; + // const msg = this.deserialize(data) as KernelMessage.IExecuteRequestMsg; + if (msg.channel === 'shell' && msg.header.msg_type === 'execute_request') { + if (!shouldMessageBeMirroredWithRenderer(msg)) { + return; + } + const promise = this.mirrorExecuteRequest(msg as KernelMessage.IExecuteRequestMsg); // NOSONAR + // If there are no ipywidgets thusfar in the notebook, then no need to synchronize messages. + if (this.isUsingIPyWidgets) { + await promise; + } + } + } catch (ex) { + logger.error('Failed to mirror message to kernel', ex); + } } } @@ -315,7 +361,7 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { this.fullHandleMessage = undefined; } } - private async onKernelSocketMessage(data: WebSocketData): Promise { + private async onKernelSocketMessage(protocol: string | undefined, data: WebSocketData): Promise { // Hooks expect serialized data as this normally comes from a WebSocket const msgUuid = uuid(); @@ -327,6 +373,9 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { this.raisePostMessage(IPyWidgetMessages.IPyWidgets_msg, { id: msgUuid, data }); } } else { + const dataToSend = serializeDataViews([data as any]); + const deSerialized = deserializeDataViews(dataToSend); + console.error(dataToSend, deSerialized); this.raisePostMessage(IPyWidgetMessages.IPyWidgets_binary_msg, { id: msgUuid, data: serializeDataViews([data as any]) @@ -343,7 +392,7 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { data.includes('comm_close') || data.includes('comm_msg'); if (mustDeserialize) { - const message = this.deserialize(data as any) as any; + const message = this.deserialize(data as any, protocol) as any; if (!shouldMessageBeMirroredWithRenderer(message)) { return; } @@ -384,10 +433,13 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { pending.resultPromise.resolve(); } } - private sendPendingMessages() { + private sendPendingMessages(protocol: string = '') { if (!this.kernel?.session?.kernel) { return; } + if (!protocol) { + protocol = KernelSocketMap.get(this.kernel.session.kernel.id)?.protocol || ''; + } while (this.pendingMessages.length) { try { const message = this.pendingMessages[0]; @@ -395,7 +447,7 @@ export class IPyWidgetMessageDispatcher implements IIPyWidgetMessageDispatcher { // This happens only when there are some array buffers (binary data) in the message. // Thats why we need to first deserialize the binary into JSON. const msg: KernelMessage.IMessage = - typeof message === 'string' ? JSON.parse(message) : this.deserialize(message); + typeof message === 'string' ? JSON.parse(message) : this.deserialize(message, protocol); // However the buffers can be DataViewers // When sending to the kernel, we need to convert them to ArrayBuffer if (msg.buffers?.length) { diff --git a/src/test/datascience/fakeKernelConnection.node.ts b/src/test/datascience/fakeKernelConnection.node.ts index b8f9e6fdd65..2a9baf15b3d 100644 --- a/src/test/datascience/fakeKernelConnection.node.ts +++ b/src/test/datascience/fakeKernelConnection.node.ts @@ -19,10 +19,14 @@ import { } from '@jupyterlab/services/lib/kernel/messages'; function deserialize(msg: string | ArrayBuffer): KernelMessage.IMessage { - return typeof msg === 'string' || msg instanceof ArrayBuffer ? jupyterLabSerialize.deserialize(msg) : msg; + return typeof msg === 'string' + ? JSON.parse(msg) + : msg instanceof ArrayBuffer + ? jupyterLabSerialize.deserialize(msg) + : msg; } -function serialize(msg: KernelMessage.IMessage): string | ArrayBuffer { - return jupyterLabSerialize.serialize(msg); +function serialize(msg: KernelMessage.IMessage, protocol?: string): string | ArrayBuffer { + return jupyterLabSerialize.serialize(msg, protocol); } export interface IFakeSocket { @@ -114,7 +118,11 @@ export function createKernelConnection(requestCreator: JupyterRequestCreator): { Headers: requestCreator.getHeadersCtor(), Request: requestCreator.getRequestCtor(), token: '', - wsUrl: '' + wsUrl: '', + serializer: { + serialize, + deserialize + } } }); diff --git a/src/webviews/webview-side/ipywidgets/kernel/kernel.ts b/src/webviews/webview-side/ipywidgets/kernel/kernel.ts index 969a8b5e25e..9d8dc407f53 100644 --- a/src/webviews/webview-side/ipywidgets/kernel/kernel.ts +++ b/src/webviews/webview-side/ipywidgets/kernel/kernel.ts @@ -78,9 +78,18 @@ class ProxyKernel implements IMessageHandler, Kernel.IKernelConnection { public createComm(targetName: string, commId?: string | undefined) { return this.realKernel.createComm(targetName, commId); } + public removeInputGuard() { + return this.realKernel.removeInputGuard(); + } + public get hasPendingInput() { + return this.realKernel.hasPendingInput; + } public get disposed() { return this.realKernel.disposed as any; // NOSONAR } + public get pendingInput() { + return this.realKernel.pendingInput as any; // NOSONAR + } public clone(options?: Pick) { return new ProxyKernel( { @@ -106,10 +115,12 @@ class ProxyKernel implements IMessageHandler, Kernel.IKernelConnection { ) { // Dummy websocket we give to the underlying real kernel let proxySocketInstance: any; + const protocol = options.protocol; class ProxyWebSocket { public onopen?: ((this: ProxyWebSocket) => any) | null; public onmessage?: ((this: ProxyWebSocket, ev: MessageEvent) => any) | null; public sendEnabled: boolean = true; + public readonly protocol: string = protocol; constructor() { proxySocketInstance = this; } @@ -152,6 +163,7 @@ class ProxyKernel implements IMessageHandler, Kernel.IKernelConnection { const signaling = require('@lumino/signaling') as typeof import('@lumino/signaling'); this._ioPubMessageSignal = new signaling.Signal(this); this.realKernel.iopubMessage.connect(this.onIOPubMessage, this); + this.realKernel.pendingInput.connect(this.onPendingInput, this); this._options = options; postOffice.addHandler(this); @@ -244,8 +256,11 @@ class ProxyKernel implements IMessageHandler, Kernel.IKernelConnection { }): Promise { return this.realKernel.requestCommInfo(content); } - public sendInputReply(content: KernelMessage.IInputReplyMsg['content']): void { - return this.realKernel.sendInputReply(content); + public sendInputReply( + content: KernelMessage.IInputReplyMsg['content'], + parent_header: KernelMessage.IInputReplyMsg['parent_header'] + ): void { + return this.realKernel.sendInputReply(content, parent_header); } public registerCommTarget( targetName: string, @@ -499,6 +514,10 @@ class ProxyKernel implements IMessageHandler, Kernel.IKernelConnection { } } + private onPendingInput(_sender: Kernel.IKernelConnection, message: boolean) { + this.pendingInput.emit(message); + } + // Finish an iopub message by sending a message to the UI and then emitting that we are done with it private finishIOPubMessage(message: KernelMessage.IIOPubMessage) { this.postOffice.sendMessage(IPyWidgetMessages.IPyWidgets_iopub_msg_handled, { diff --git a/src/webviews/webview-side/ipywidgets/kernel/manager.ts b/src/webviews/webview-side/ipywidgets/kernel/manager.ts index 5ee6d48509b..d9e6e84e12e 100644 --- a/src/webviews/webview-side/ipywidgets/kernel/manager.ts +++ b/src/webviews/webview-side/ipywidgets/kernel/manager.ts @@ -77,7 +77,8 @@ export class WidgetManager implements IIPyWidgetManager, IMessageHandler { id: '', name: '' }, - userName: '' + userName: '', + protocol: '' }, widgetState );