diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 5b5c1bd..78b4137 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -35,9 +35,6 @@ jobs: set -eux python -m pip install .[test] - jupyter server extension list - jupyter server extension list 2>&1 | grep -ie "jupyterlab_cell_diff.*OK" - jupyter labextension list jupyter labextension list 2>&1 | grep -ie "jupyterlab-cell-diff.*OK" python -m jupyterlab.browser_check @@ -79,10 +76,6 @@ jobs: pip install "jupyterlab>=4.0.0,<5" jupyterlab_cell_diff*.whl - - jupyter server extension list - jupyter server extension list 2>&1 | grep -ie "jupyterlab_cell_diff.*OK" - jupyter labextension list jupyter labextension list 2>&1 | grep -ie "jupyterlab-cell-diff.*OK" python -m jupyterlab.browser_check --no-browser-test diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index d80ab52..75fe0c0 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,8 +15,6 @@ The `jlpm` command is JupyterLab's pinned version of pip install -e "." # Link your development version of the extension with JupyterLab jupyter labextension develop . --overwrite -# Server extension must be manually installed in develop mode -jupyter server extension enable jupyterlab_cell_diff # Rebuild extension Typescript source after making changes jlpm build ``` @@ -42,7 +40,6 @@ jupyter lab build --minimize=False ```bash # Server extension must be manually disabled in develop mode -jupyter server extension disable jupyterlab_cell_diff pip uninstall jupyterlab_cell_diff ``` diff --git a/README.md b/README.md index e8d5449..8f2a673 100644 --- a/README.md +++ b/README.md @@ -32,19 +32,12 @@ jupyter labextension develop . --overwrite ### Commands -The extension provides several commands: +The extension provides a command to show cell diffs: - `jupyterlab-cell-diff:show-codemirror` - Show diff using `@codemirror/merge` -- `jupyterlab-cell-diff:show-nbdime` - Show diff using NBDime - -### Use with `@codemirror/merge` https://github.com/user-attachments/assets/0dacd7f0-5963-4ebe-81da-2958f0117071 -### Use with NBDime - -https://github.com/user-attachments/assets/87e93eab-ad67-468c-b228-f5a0e93f8bea - ### Programmatic Usage ```typescript @@ -53,12 +46,6 @@ app.commands.execute('jupyterlab-cell-diff:show-codemirror', { originalSource: 'print("Hello")', newSource: 'print("Hello, World!")' }); - -app.commands.execute('jupyterlab-cell-diff:show-nbdime', { - cellId: 'cell-id', - originalSource: 'print("Hello")', - newSource: 'print("Hello, World!")' -}); ``` ## Uninstall @@ -71,15 +58,7 @@ pip uninstall jupyterlab_cell_diff ## Troubleshoot -If you are seeing the frontend extension, but it is not working, check -that the server extension is enabled: - -```bash -jupyter server extension list -``` - -If the server extension is installed and enabled, but you are not seeing -the frontend extension, check the frontend extension is installed: +To check the frontend extension is installed: ```bash jupyter labextension list diff --git a/jupyter-config/server-config/jupyterlab_cell_diff.json b/jupyter-config/server-config/jupyterlab_cell_diff.json deleted file mode 100644 index e941408..0000000 --- a/jupyter-config/server-config/jupyterlab_cell_diff.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "ServerApp": { - "jpserver_extensions": { - "jupyterlab_cell_diff": true - } - } -} diff --git a/jupyterlab_cell_diff/__init__.py b/jupyterlab_cell_diff/__init__.py index 4833b56..26f04d1 100644 --- a/jupyterlab_cell_diff/__init__.py +++ b/jupyterlab_cell_diff/__init__.py @@ -5,32 +5,10 @@ # in editable mode with pip. It is highly recommended to install # the package from a stable release or in editable mode: https://pip.pypa.io/en/stable/topics/local-project-installs/#editable-installs import warnings + warnings.warn("Importing 'jupyterlab_cell_diff' outside a proper installation.") __version__ = "dev" -from .handlers import setup_handlers def _jupyter_labextension_paths(): - return [{ - "src": "labextension", - "dest": "jupyterlab-cell-diff" - }] - - -def _jupyter_server_extension_points(): - return [{ - "module": "jupyterlab_cell_diff" - }] - - -def _load_jupyter_server_extension(server_app): - """Registers the API handler to receive HTTP requests from the frontend extension. - - Parameters - ---------- - server_app: jupyterlab.labapp.LabApp - JupyterLab application instance - """ - setup_handlers(server_app.web_app) - name = "jupyterlab_cell_diff" - server_app.log.info(f"Registered {name} server extension") + return [{"src": "labextension", "dest": "jupyterlab-cell-diff"}] diff --git a/jupyterlab_cell_diff/handlers.py b/jupyterlab_cell_diff/handlers.py deleted file mode 100644 index df61cb4..0000000 --- a/jupyterlab_cell_diff/handlers.py +++ /dev/null @@ -1,31 +0,0 @@ -import json - -from jupyter_server.base.handlers import APIHandler -from jupyter_server.utils import url_path_join -import tornado - -from nbdime.diffing.generic import diff - - -class RouteHandler(APIHandler): - # The following decorator should be present on all verb methods (head, get, post, - # patch, put, delete, options) to ensure only authorized user can request the - # Jupyter server - @tornado.web.authenticated - def post(self): - body = self.get_json_body() - previous = body.get("original_source") - current = body.get("new_source") - diff_results = diff(previous, current) - self.finish(json.dumps({ - "original_source": previous, - "diff": diff_results - })) - - -def setup_handlers(web_app): - host_pattern = ".*$" - base_url = web_app.settings["base_url"] - route_pattern = url_path_join(base_url, "api", "celldiff") - handlers = [(route_pattern, RouteHandler)] - web_app.add_handlers(host_pattern, handlers) diff --git a/package.json b/package.json index 25c070b..37b8f8c 100644 --- a/package.json +++ b/package.json @@ -70,8 +70,7 @@ "@jupyterlab/ui-components": "^4.0.0", "@lumino/widgets": "^2.0.0", "codemirror": "^6.0.2", - "jupyterlab-cell-input-footer": "^0.3.0", - "nbdime": "^7.0.1" + "jupyterlab-cell-input-footer": "^0.3.0" }, "devDependencies": { "@jupyterlab/builder": "^4.0.0", diff --git a/pyproject.toml b/pyproject.toml index e5d5149..3bb63b5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" name = "jupyterlab_cell_diff" readme = "README.md" license = { file = "LICENSE" } -requires-python = ">=3.8" +requires-python = ">=3.9" classifiers = [ "Framework :: Jupyter", "Framework :: Jupyter :: JupyterLab", @@ -16,15 +16,13 @@ classifiers = [ "License :: OSI Approved :: BSD License", "Programming Language :: Python", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", ] dependencies = [ - "nbdime", - "jupyter_server>=2.4.0,<3", "jupyterlab-eventlistener>=0.4.0,<0.5", "jupyterlab-cell-input-footer>=0.3.1,<0.4" ] @@ -43,7 +41,6 @@ exclude = [".github", "binder"] [tool.hatch.build.targets.wheel.shared-data] "jupyterlab_cell_diff/labextension" = "share/jupyter/labextensions/jupyterlab-cell-diff" "install.json" = "share/jupyter/labextensions/jupyterlab-cell-diff/install.json" -"jupyter-config/server-config" = "etc/jupyter/jupyter_server_config.d" [tool.hatch.build.hooks.version] path = "jupyterlab_cell_diff/_version.py" diff --git a/src/diff/nbdime.ts b/src/diff/nbdime.ts deleted file mode 100644 index 900ae5c..0000000 --- a/src/diff/nbdime.ts +++ /dev/null @@ -1,80 +0,0 @@ -import { IDiffWidgetOptions } from '../widget'; -import { IDiffEntry } from 'nbdime/lib/diff/diffentries'; -import { createPatchStringDiffModel } from 'nbdime/lib/diff/model'; -import { MergeView } from 'nbdime/lib/common/mergeview'; -import { Widget } from '@lumino/widgets'; -import { BaseDiffWidget } from '../widget'; - -/** - * Options for creating an NBDime diff widget - */ -interface INBDimeDiffWidgetOptions extends IDiffWidgetOptions { - remote: any; -} - -/** - * Extended NBDime MergeView widget with action buttons support - */ -class NBDimeDiffWidget extends BaseDiffWidget { - /** - * Construct a new NBDimeDiffWidget. - */ - constructor(options: INBDimeDiffWidgetOptions) { - super(options); - - // Create the NBDime merge view as a child widget - this._mergeView = new MergeView({ remote: options.remote }); - this._mergeView.addClass('nbdime-diff-widget'); - this._mergeView.addClass('jp-cell-diff'); - this._mergeView.addClass('nbdime-root'); - this._mergeView.addClass('jp-Notebook-diff'); - - // Add the merge view to this widget's node - this.node.appendChild(this._mergeView.node); - this.addClass('jp-DiffView'); - } - private _mergeView: MergeView; -} - -/** - * Create a diff widget using NBDime - */ -export async function createNBDimeDiffWidget( - options: IDiffWidgetOptions -): Promise { - const { - cell, - cellFooterTracker, - originalSource, - newSource, - diffData, - trans, - showActionButtons = true, - openDiff = true - } = options; - - if (!diffData || !diffData.diff) { - throw new Error(trans.__('NBDime strategy requires diff data')); - } - - const diff = createPatchStringDiffModel( - originalSource, - diffData.diff as IDiffEntry[] - ); - - const diffWidget = new NBDimeDiffWidget({ - remote: diff, - cell, - cellFooterTracker, - originalSource, - newSource, - showActionButtons, - openDiff, - trans - }); - - diffWidget.addClass('jupyterlab-cell-diff'); - diffWidget.addToFooter(); - - return diffWidget; -} diff --git a/src/handler.ts b/src/handler.ts deleted file mode 100644 index a746896..0000000 --- a/src/handler.ts +++ /dev/null @@ -1,42 +0,0 @@ -import { URLExt } from '@jupyterlab/coreutils'; - -import { ServerConnection } from '@jupyterlab/services'; - -/** - * Call the API extension - * - * @param endPoint API REST end point for the extension - * @param init Initial values for the request - * @returns The response body interpreted as JSON - */ -export async function requestAPI( - endPoint = '', - init: RequestInit = {} -): Promise { - // Make request to Jupyter API - const settings = ServerConnection.makeSettings(); - const requestUrl = URLExt.join(settings.baseUrl, endPoint); - - let response: Response; - try { - response = await ServerConnection.makeRequest(requestUrl, init, settings); - } catch (error) { - throw new ServerConnection.NetworkError(error as any); - } - - let data: any = await response.text(); - - if (data.length > 0) { - try { - data = JSON.parse(data); - } catch (error) { - console.log('Not a JSON response body.', response); - } - } - - if (!response.ok) { - throw new ServerConnection.ResponseError(response, data.message || data); - } - - return data; -} diff --git a/src/plugin.ts b/src/plugin.ts index 89a5f0c..c0c9eb4 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -7,9 +7,7 @@ import { INotebookTracker, NotebookPanel } from '@jupyterlab/notebook'; import { ITranslator, nullTranslator } from '@jupyterlab/translation'; import { ICellFooterTracker } from 'jupyterlab-cell-input-footer'; -import { requestAPI } from './handler'; import { IDiffWidgetOptions } from './widget'; -import { createNBDimeDiffWidget } from './diff/nbdime'; import { createCodeMirrorDiffWidget } from './diff/codemirror'; /** @@ -161,130 +159,4 @@ const codeMirrorPlugin: JupyterFrontEndPlugin = { } }; -/** - * NBDime diff plugin - */ -const nbdimePlugin: JupyterFrontEndPlugin = { - id: 'jupyterlab-cell-diff:nbdime-plugin', - description: 'Expose a command to show cell diffs using NBDime', - requires: [ICellFooterTracker, INotebookTracker], - optional: [ITranslator], - autoStart: true, - activate: async ( - app: JupyterFrontEnd, - cellFooterTracker: ICellFooterTracker, - notebookTracker: INotebookTracker, - translator: ITranslator | null - ) => { - const { commands } = app; - const trans = (translator ?? nullTranslator).load(TRANSLATION_NAMESPACE); - - commands.addCommand('jupyterlab-cell-diff:show-nbdime', { - label: trans.__('Show Cell Diff (NBDime)'), - describedBy: { - args: { - type: 'object', - properties: { - cellId: { - type: 'string', - description: trans.__('ID of the cell to show diff for') - }, - originalSource: { - type: 'string', - description: trans.__('Original source code to compare against') - }, - newSource: { - type: 'string', - description: trans.__('New source code to compare with') - }, - showActionButtons: { - type: 'boolean', - description: trans.__( - 'Whether to show action buttons in the diff widget' - ) - }, - notebookPath: { - type: 'string', - description: trans.__('Path to the notebook containing the cell') - }, - openDiff: { - type: 'boolean', - description: trans.__( - 'Whether to open the diff widget automatically' - ) - } - } - } - }, - execute: async (args: any = {}) => { - const { - cellId, - originalSource, - newSource, - showActionButtons = true, - notebookPath, - openDiff = true - } = args; - - const currentNotebook = findNotebook(notebookTracker, notebookPath); - if (!currentNotebook) { - return; - } - - const cell = findCell(currentNotebook, cellId); - if (!cell) { - console.error( - trans.__( - 'Missing required arguments: cellId (or no active cell found)' - ) - ); - return; - } - - // For NBDime, fetch diff data from server - let diffData; - try { - const response = await requestAPI('api/celldiff', { - method: 'POST', - body: JSON.stringify({ - original_source: originalSource, - new_source: newSource - }) - }); - diffData = (response as any).diff; - } catch (error) { - console.warn( - trans.__('Failed to fetch diff data from server: %1'), - error - ); - } - - const footer = cellFooterTracker.getFooter(cell.id); - if (!footer) { - console.error(trans.__('Footer not found for cell %1', cell.id)); - return; - } - - try { - const options: IDiffWidgetOptions = { - cell, - cellFooterTracker, - originalSource, - newSource, - diffData: diffData ? { diff: diffData } : undefined, - cellId: cell.id, - showActionButtons, - openDiff, - trans - }; - - await createNBDimeDiffWidget(options); - } catch (error) { - console.error(trans.__('Failed to create diff widget: %1'), error); - } - } - }); - } -}; - -export default [codeMirrorPlugin, nbdimePlugin]; +export default [codeMirrorPlugin]; diff --git a/src/widget.ts b/src/widget.ts index 0caabfa..edad717 100644 --- a/src/widget.ts +++ b/src/widget.ts @@ -33,11 +33,6 @@ export interface IDiffWidgetOptions { */ trans: TranslationBundle; - /** - * Additional diff data (for nbdime strategy) - */ - diffData?: any; - /** * Cell ID for identification */ diff --git a/style/base.css b/style/base.css index a3e9802..80bbfcf 100644 --- a/style/base.css +++ b/style/base.css @@ -24,9 +24,3 @@ max-height: 400px; overflow: auto; } - -/* NBDime diff widget styling */ -.nbdime-diff-widget { - max-height: 400px; - overflow: auto; -} diff --git a/yarn.lock b/yarn.lock index 08b1bfa..cc47d8e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -122,7 +122,7 @@ __metadata: languageName: node linkType: hard -"@codemirror/lang-markdown@npm:^6.1.1, @codemirror/lang-markdown@npm:^6.3.2": +"@codemirror/lang-markdown@npm:^6.3.2": version: 6.3.4 resolution: "@codemirror/lang-markdown@npm:6.3.4" dependencies: @@ -227,7 +227,7 @@ __metadata: languageName: node linkType: hard -"@codemirror/legacy-modes@npm:^6.3.2, @codemirror/legacy-modes@npm:^6.5.1": +"@codemirror/legacy-modes@npm:^6.5.1": version: 6.5.1 resolution: "@codemirror/legacy-modes@npm:6.5.1" dependencies: @@ -271,7 +271,7 @@ __metadata: languageName: node linkType: hard -"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.2.0, @codemirror/state@npm:^6.4.0, @codemirror/state@npm:^6.4.1, @codemirror/state@npm:^6.5.0, @codemirror/state@npm:^6.5.2": +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.4.0, @codemirror/state@npm:^6.4.1, @codemirror/state@npm:^6.5.0, @codemirror/state@npm:^6.5.2": version: 6.5.2 resolution: "@codemirror/state@npm:6.5.2" dependencies: @@ -280,7 +280,7 @@ __metadata: languageName: node linkType: hard -"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.14.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.26.3, @codemirror/view@npm:^6.27.0, @codemirror/view@npm:^6.35.0, @codemirror/view@npm:^6.38.1, @codemirror/view@npm:^6.38.2": +"@codemirror/view@npm:^6.0.0, @codemirror/view@npm:^6.17.0, @codemirror/view@npm:^6.23.0, @codemirror/view@npm:^6.26.3, @codemirror/view@npm:^6.27.0, @codemirror/view@npm:^6.35.0, @codemirror/view@npm:^6.38.1, @codemirror/view@npm:^6.38.2": version: 6.38.2 resolution: "@codemirror/view@npm:6.38.2" dependencies: @@ -682,7 +682,7 @@ __metadata: languageName: node linkType: hard -"@jupyterlab/codemirror@npm:^4.0.0, @jupyterlab/codemirror@npm:^4.3.3, @jupyterlab/codemirror@npm:^4.4.7": +"@jupyterlab/codemirror@npm:^4.3.3, @jupyterlab/codemirror@npm:^4.4.7": version: 4.4.7 resolution: "@jupyterlab/codemirror@npm:4.4.7" dependencies: @@ -859,7 +859,7 @@ __metadata: languageName: node linkType: hard -"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.0.0, @jupyterlab/nbformat@npm:^4.3.3, @jupyterlab/nbformat@npm:^4.4.7": +"@jupyterlab/nbformat@npm:^3.0.0 || ^4.0.0-alpha.21 || ^4.0.0, @jupyterlab/nbformat@npm:^4.3.3, @jupyterlab/nbformat@npm:^4.4.7": version: 4.4.7 resolution: "@jupyterlab/nbformat@npm:4.4.7" dependencies: @@ -919,7 +919,7 @@ __metadata: languageName: node linkType: hard -"@jupyterlab/outputarea@npm:^4.0.0, @jupyterlab/outputarea@npm:^4.3.3": +"@jupyterlab/outputarea@npm:^4.3.3": version: 4.3.3 resolution: "@jupyterlab/outputarea@npm:4.3.3" dependencies: @@ -951,7 +951,7 @@ __metadata: languageName: node linkType: hard -"@jupyterlab/rendermime@npm:^4.0.0, @jupyterlab/rendermime@npm:^4.3.3": +"@jupyterlab/rendermime@npm:^4.3.3": version: 4.3.3 resolution: "@jupyterlab/rendermime@npm:4.3.3" dependencies: @@ -1262,7 +1262,7 @@ __metadata: languageName: node linkType: hard -"@lumino/algorithm@npm:^2.0.1, @lumino/algorithm@npm:^2.0.2, @lumino/algorithm@npm:^2.0.3": +"@lumino/algorithm@npm:^2.0.2, @lumino/algorithm@npm:^2.0.3": version: 2.0.3 resolution: "@lumino/algorithm@npm:2.0.3" checksum: 03932cdc39d612a00579ee40bafb0b1d8bf5f8a12449f777a1ae7201843ddefb557bc3f9260aa6b9441d87bfc43e53cced854e71c4737de59e32cd00d4ac1394 @@ -1329,7 +1329,7 @@ __metadata: languageName: node linkType: hard -"@lumino/dragdrop@npm:^2.1.3, @lumino/dragdrop@npm:^2.1.5, @lumino/dragdrop@npm:^2.1.6": +"@lumino/dragdrop@npm:^2.1.5, @lumino/dragdrop@npm:^2.1.6": version: 2.1.6 resolution: "@lumino/dragdrop@npm:2.1.6" dependencies: @@ -1374,7 +1374,7 @@ __metadata: languageName: node linkType: hard -"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.1.2, @lumino/signaling@npm:^2.1.3, @lumino/signaling@npm:^2.1.4": +"@lumino/signaling@npm:^1.10.0 || ^2.0.0, @lumino/signaling@npm:^2.1.3, @lumino/signaling@npm:^2.1.4": version: 2.1.4 resolution: "@lumino/signaling@npm:2.1.4" dependencies: @@ -1393,7 +1393,7 @@ __metadata: languageName: node linkType: hard -"@lumino/widgets@npm:^1.37.2 || ^2.7.1, @lumino/widgets@npm:^2.0.0, @lumino/widgets@npm:^2.3.0, @lumino/widgets@npm:^2.5.0, @lumino/widgets@npm:^2.7.1": +"@lumino/widgets@npm:^1.37.2 || ^2.7.1, @lumino/widgets@npm:^2.0.0, @lumino/widgets@npm:^2.5.0, @lumino/widgets@npm:^2.7.1": version: 2.7.1 resolution: "@lumino/widgets@npm:2.7.1" dependencies: @@ -2192,28 +2192,6 @@ __metadata: languageName: node linkType: hard -"call-bind-apply-helpers@npm:^1.0.0, call-bind-apply-helpers@npm:^1.0.1": - version: 1.0.1 - resolution: "call-bind-apply-helpers@npm:1.0.1" - dependencies: - es-errors: ^1.3.0 - function-bind: ^1.1.2 - checksum: 3c55343261bb387c58a4762d15ad9d42053659a62681ec5eb50690c6b52a4a666302a01d557133ce6533e8bd04530ee3b209f23dd06c9577a1925556f8fcccdf - languageName: node - linkType: hard - -"call-bind@npm:^1.0.5": - version: 1.0.8 - resolution: "call-bind@npm:1.0.8" - dependencies: - call-bind-apply-helpers: ^1.0.0 - es-define-property: ^1.0.0 - get-intrinsic: ^1.2.4 - set-function-length: ^1.2.2 - checksum: aa2899bce917a5392fd73bd32e71799c37c0b7ab454e0ed13af7f6727549091182aade8bbb7b55f304a5bc436d543241c14090fb8a3137e9875e23f444f4f5a9 - languageName: node - linkType: hard - "callsites@npm:^3.0.0": version: 3.1.0 resolution: "callsites@npm:3.1.0" @@ -2551,17 +2529,6 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.1.4": - version: 1.1.4 - resolution: "define-data-property@npm:1.1.4" - dependencies: - es-define-property: ^1.0.0 - es-errors: ^1.3.0 - gopd: ^1.0.1 - checksum: 8068ee6cab694d409ac25936eb861eea704b7763f7f342adbdfe337fc27c78d7ae0eff2364b2917b58c508d723c7a074326d068eef2e45c4edcd85cf94d0313b - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -2618,17 +2585,6 @@ __metadata: languageName: node linkType: hard -"dunder-proto@npm:^1.0.0": - version: 1.0.0 - resolution: "dunder-proto@npm:1.0.0" - dependencies: - call-bind-apply-helpers: ^1.0.0 - es-errors: ^1.3.0 - gopd: ^1.2.0 - checksum: 6f0697b17c47377efc00651f43f34e71c09ebba85fafb4d91fe67f5810931f3fa3f45a1ef5d207debbd5682ad9abc3b71b49cb3e67222dcad71fafc92cf6199b - languageName: node - linkType: hard - "duplicate-package-checker-webpack-plugin@npm:^3.0.0": version: 3.0.0 resolution: "duplicate-package-checker-webpack-plugin@npm:3.0.0" @@ -2711,20 +2667,6 @@ __metadata: languageName: node linkType: hard -"es-define-property@npm:^1.0.0, es-define-property@npm:^1.0.1": - version: 1.0.1 - resolution: "es-define-property@npm:1.0.1" - checksum: 0512f4e5d564021c9e3a644437b0155af2679d10d80f21adaf868e64d30efdfbd321631956f20f42d655fedb2e3a027da479fad3fa6048f768eb453a80a5f80a - languageName: node - linkType: hard - -"es-errors@npm:^1.3.0": - version: 1.3.0 - resolution: "es-errors@npm:1.3.0" - checksum: ec1414527a0ccacd7f15f4a3bc66e215f04f595ba23ca75cdae0927af099b5ec865f9f4d33e9d7e86f512f252876ac77d4281a7871531a50678132429b1271b5 - languageName: node - linkType: hard - "es-module-lexer@npm:^1.2.1": version: 1.5.4 resolution: "es-module-lexer@npm:1.5.4" @@ -2732,15 +2674,6 @@ __metadata: languageName: node linkType: hard -"es-object-atoms@npm:^1.0.0": - version: 1.0.0 - resolution: "es-object-atoms@npm:1.0.0" - dependencies: - es-errors: ^1.3.0 - checksum: 26f0ff78ab93b63394e8403c353842b2272836968de4eafe97656adfb8a7c84b9099bf0fe96ed58f4a4cddc860f6e34c77f91649a58a5daa4a9c40b902744e3c - languageName: node - linkType: hard - "escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -3119,24 +3052,6 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.2.4": - version: 1.2.6 - resolution: "get-intrinsic@npm:1.2.6" - dependencies: - call-bind-apply-helpers: ^1.0.1 - dunder-proto: ^1.0.0 - es-define-property: ^1.0.1 - es-errors: ^1.3.0 - es-object-atoms: ^1.0.0 - function-bind: ^1.1.2 - gopd: ^1.2.0 - has-symbols: ^1.1.0 - hasown: ^2.0.2 - math-intrinsics: ^1.0.0 - checksum: a7592a0b7f023a2e83c0121fa9449ca83780e370a5feeebe8452119474d148016e43b455049134ae7a683b9b11b93d3f65eac199a0ad452ab740d5f0c299de47 - languageName: node - linkType: hard - "glob-parent@npm:^5.1.2": version: 5.1.2 resolution: "glob-parent@npm:5.1.2" @@ -3242,13 +3157,6 @@ __metadata: languageName: node linkType: hard -"gopd@npm:^1.0.1, gopd@npm:^1.2.0": - version: 1.2.0 - resolution: "gopd@npm:1.2.0" - checksum: cc6d8e655e360955bdccaca51a12a474268f95bb793fc3e1f2bdadb075f28bfd1fd988dab872daf77a61d78cbaf13744bc8727a17cfb1d150d76047d805375f3 - languageName: node - linkType: hard - "graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.11, graceful-fs@npm:^4.2.4": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" @@ -3284,22 +3192,6 @@ __metadata: languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.2": - version: 1.0.2 - resolution: "has-property-descriptors@npm:1.0.2" - dependencies: - es-define-property: ^1.0.0 - checksum: fcbb246ea2838058be39887935231c6d5788babed499d0e9d0cc5737494c48aba4fe17ba1449e0d0fbbb1e36175442faa37f9c427ae357d6ccb1d895fbcd3de3 - languageName: node - linkType: hard - -"has-symbols@npm:^1.1.0": - version: 1.1.0 - resolution: "has-symbols@npm:1.1.0" - checksum: b2316c7302a0e8ba3aaba215f834e96c22c86f192e7310bdf689dd0e6999510c89b00fbc5742571507cebf25764d68c988b3a0da217369a73596191ac0ce694b - languageName: node - linkType: hard - "hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" @@ -3512,13 +3404,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a - languageName: node - linkType: hard - "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -3651,18 +3536,6 @@ __metadata: languageName: node linkType: hard -"json-stable-stringify@npm:^1.0.1": - version: 1.1.1 - resolution: "json-stable-stringify@npm:1.1.1" - dependencies: - call-bind: ^1.0.5 - isarray: ^2.0.5 - jsonify: ^0.0.1 - object-keys: ^1.1.1 - checksum: e1ba06600fd278767eeff53f28e408e29c867e79abf564e7aadc3ce8f31f667258f8db278ef28831e45884dd687388fa1910f46e599fc19fb94c9afbbe3a4de8 - languageName: node - linkType: hard - "json5@npm:^2.1.2, json5@npm:^2.2.3": version: 2.2.3 resolution: "json5@npm:2.2.3" @@ -3685,13 +3558,6 @@ __metadata: languageName: node linkType: hard -"jsonify@npm:^0.0.1": - version: 0.0.1 - resolution: "jsonify@npm:0.0.1" - checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 - languageName: node - linkType: hard - "jsonpointer@npm:^5.0.1": version: 5.0.1 resolution: "jsonpointer@npm:5.0.1" @@ -3729,7 +3595,6 @@ __metadata: eslint-plugin-prettier: ^5.0.0 jupyterlab-cell-input-footer: ^0.3.0 mkdirp: ^1.0.3 - nbdime: ^7.0.1 npm-run-all2: ^7.0.1 prettier: ^3.0.0 rimraf: ^5.0.1 @@ -3949,13 +3814,6 @@ __metadata: languageName: node linkType: hard -"math-intrinsics@npm:^1.0.0": - version: 1.0.0 - resolution: "math-intrinsics@npm:1.0.0" - checksum: ad9edf8b5bec32c78d25163a9343dbe960331c8b4815b099181de7be4681e5abff9642a4b2fbeb3e882d7616567ffc45a5bae59dc8fec417cf5c76d47b92b197 - languageName: node - linkType: hard - "mathml-tag-names@npm:^2.1.3": version: 2.1.3 resolution: "mathml-tag-names@npm:2.1.3" @@ -4149,33 +4007,6 @@ __metadata: languageName: node linkType: hard -"nbdime@npm:^7.0.1": - version: 7.0.2 - resolution: "nbdime@npm:7.0.2" - dependencies: - "@codemirror/lang-markdown": ^6.1.1 - "@codemirror/language": ^6.6.0 - "@codemirror/legacy-modes": ^6.3.2 - "@codemirror/state": ^6.2.0 - "@codemirror/view": ^6.14.0 - "@jupyterlab/codeeditor": ^4.0.0 - "@jupyterlab/codemirror": ^4.0.0 - "@jupyterlab/coreutils": ^6.0.0 - "@jupyterlab/nbformat": ^4.0.0 - "@jupyterlab/outputarea": ^4.0.0 - "@jupyterlab/rendermime": ^4.0.0 - "@jupyterlab/services": ^7.0.0 - "@jupyterlab/translation": ^4.0.0 - "@lumino/algorithm": ^2.0.1 - "@lumino/coreutils": ^2.1.2 - "@lumino/dragdrop": ^2.1.3 - "@lumino/signaling": ^2.1.2 - "@lumino/widgets": ^2.3.0 - json-stable-stringify: ^1.0.1 - checksum: 4d8ad3de932445170b287fe4234967c5771d80f93c2431adba0d8963bddcc0418035b13c6133007f0c9c3692e28a21fd5decc3a27b29299d9bc3a12afd00914d - languageName: node - linkType: hard - "neo-async@npm:^2.6.2": version: 2.6.2 resolution: "neo-async@npm:2.6.2" @@ -4244,13 +4075,6 @@ __metadata: languageName: node linkType: hard -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a - languageName: node - linkType: hard - "once@npm:^1.3.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -4900,20 +4724,6 @@ __metadata: languageName: node linkType: hard -"set-function-length@npm:^1.2.2": - version: 1.2.2 - resolution: "set-function-length@npm:1.2.2" - dependencies: - define-data-property: ^1.1.4 - es-errors: ^1.3.0 - function-bind: ^1.1.2 - get-intrinsic: ^1.2.4 - gopd: ^1.0.1 - has-property-descriptors: ^1.0.2 - checksum: a8248bdacdf84cb0fab4637774d9fb3c7a8e6089866d04c817583ff48e14149c87044ce683d7f50759a8c50fb87c7a7e173535b06169c87ef76f5fb276dfff72 - languageName: node - linkType: hard - "shallow-clone@npm:^3.0.0": version: 3.0.1 resolution: "shallow-clone@npm:3.0.1"