@datalayer/jupyter-react 1.0.7 → 1.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/app/JupyterReact.js +2 -2
- package/lib/app/JupyterReact.js.map +1 -1
- package/lib/app/tabs/ComponentsTab.js.map +1 -1
- package/lib/app/tabs/components/FileBrowserComponent.js +1 -3
- package/lib/app/tabs/components/FileBrowserComponent.js.map +1 -1
- package/lib/app/tabs/components/IPyWidgetsComponent.js +1 -1
- package/lib/app/tabs/components/IPyWidgetsComponent.js.map +1 -1
- package/lib/components/cell/Cell.js +2 -2
- package/lib/components/cell/Cell.js.map +1 -1
- package/lib/components/cell/CellAdapter.js +14 -11
- package/lib/components/cell/CellAdapter.js.map +1 -1
- package/lib/components/cell/CellState.js +2 -2
- package/lib/components/cell/CellState.js.map +1 -1
- package/lib/components/codemirror/{CodeMirrorDatalayerEditor.d.ts → CodeMirrorEditor.d.ts} +12 -1
- package/lib/components/codemirror/{CodeMirrorDatalayerEditor.js → CodeMirrorEditor.js} +15 -12
- package/lib/components/codemirror/CodeMirrorEditor.js.map +1 -0
- package/lib/components/codemirror/index.d.ts +2 -1
- package/lib/components/codemirror/index.js +2 -1
- package/lib/components/codemirror/index.js.map +1 -1
- package/lib/components/console/ConsoleAdapter.js.map +1 -1
- package/lib/components/console/ConsoleState.js.map +1 -1
- package/lib/components/filebrowser/FileBrowser.js +1 -1
- package/lib/components/filebrowser/FileBrowser.js.map +1 -1
- package/lib/components/index.d.ts +1 -0
- package/lib/components/index.js +1 -1
- package/lib/components/index.js.map +1 -1
- package/lib/components/jupyterlab/JupyterLabApp.js +5 -4
- package/lib/components/jupyterlab/JupyterLabApp.js.map +1 -1
- package/lib/components/jupyterlab/JupyterLabAppAdapter.js +6 -4
- package/lib/components/jupyterlab/JupyterLabAppAdapter.js.map +1 -1
- package/lib/components/jupyterlab/JupyterLabAppCss.js +2 -2
- package/lib/components/jupyterlab/JupyterLabAppCss.js.map +1 -1
- package/lib/components/jupyterlab/JupyterLabAppPlugins.js.map +1 -1
- package/lib/components/kernel/KernelDetective.d.ts +1 -1
- package/lib/components/kernel/KernelDetective.js +5 -6
- package/lib/components/kernel/KernelDetective.js.map +1 -1
- package/lib/components/kernel/KernelSelector.js +6 -6
- package/lib/components/kernel/KernelSelector.js.map +1 -1
- package/lib/components/kernel/Kernelndicator.js +5 -3
- package/lib/components/kernel/Kernelndicator.js.map +1 -1
- package/lib/components/kernel/Kernels.js +1 -1
- package/lib/components/kernel/Kernels.js.map +1 -1
- package/lib/components/kernel/inspector/widget.js.map +1 -1
- package/lib/components/lumino/Lumino.js +32 -6
- package/lib/components/lumino/Lumino.js.map +1 -1
- package/lib/components/notebook/Notebook.d.ts +3 -3
- package/lib/components/notebook/Notebook.js +86 -111
- package/lib/components/notebook/Notebook.js.map +1 -1
- package/lib/components/notebook/Notebook2.d.ts +5 -5
- package/lib/components/notebook/Notebook2.js +8 -6
- package/lib/components/notebook/Notebook2.js.map +1 -1
- package/lib/components/notebook/Notebook2Base.d.ts +18 -6
- package/lib/components/notebook/Notebook2Base.js +47 -103
- package/lib/components/notebook/Notebook2Base.js.map +1 -1
- package/lib/components/notebook/NotebookAdapter.js +61 -49
- package/lib/components/notebook/NotebookAdapter.js.map +1 -1
- package/lib/components/notebook/NotebookCommands.js +1 -1
- package/lib/components/notebook/NotebookCommands.js.map +1 -1
- package/lib/components/notebook/NotebookExtensions.d.ts +5 -5
- package/lib/components/notebook/NotebookState.js +34 -10
- package/lib/components/notebook/NotebookState.js.map +1 -1
- package/lib/components/notebook/cell/prompt/Countdown.js.map +1 -1
- package/lib/components/notebook/cell/sidebar/CellSidebarButton.js +4 -4
- package/lib/components/notebook/cell/sidebar/CellSidebarButton.js.map +1 -1
- package/lib/components/notebook/cell/sidebar/CellSidebarExtension.d.ts +6 -3
- package/lib/components/notebook/cell/sidebar/CellSidebarExtension.js +10 -3
- package/lib/components/notebook/cell/sidebar/CellSidebarExtension.js.map +1 -1
- package/lib/components/notebook/model/JupyterReactNotebookModelFactory.js +1 -1
- package/lib/components/notebook/model/JupyterReactNotebookModelFactory.js.map +1 -1
- package/lib/components/output/Output.js +9 -9
- package/lib/components/output/Output.js.map +1 -1
- package/lib/components/output/OutputAdapter.js +3 -1
- package/lib/components/output/OutputAdapter.js.map +1 -1
- package/lib/components/output/OutputState.js.map +1 -1
- package/lib/components/terminal/TerminalAdapter.js +24 -3
- package/lib/components/terminal/TerminalAdapter.js.map +1 -1
- package/lib/components/terminal/TerminalState.js.map +1 -1
- package/lib/components/utils/SpinnerCentered.js +2 -2
- package/lib/components/utils/SpinnerCentered.js.map +1 -1
- package/lib/examples/Cell.js +1 -1
- package/lib/examples/Cell.js.map +1 -1
- package/lib/examples/Cells.js.map +1 -1
- package/lib/examples/CellsExecute.js +2 -2
- package/lib/examples/CellsExecute.js.map +1 -1
- package/lib/examples/FileBrowser.js +1 -4
- package/lib/examples/FileBrowser.js.map +1 -1
- package/lib/examples/JupyterLabApp.js +1 -7
- package/lib/examples/JupyterLabApp.js.map +1 -1
- package/lib/examples/JupyterLabAppHeadless.js +3 -8
- package/lib/examples/JupyterLabAppHeadless.js.map +1 -1
- package/lib/examples/JupyterLabAppHeadlessServerless.js +3 -8
- package/lib/examples/JupyterLabAppHeadlessServerless.js.map +1 -1
- package/lib/examples/JupyterLabAppServerless.js +1 -3
- package/lib/examples/JupyterLabAppServerless.js.map +1 -1
- package/lib/examples/JupyterLabAppServiceManager.js +1 -3
- package/lib/examples/JupyterLabAppServiceManager.js.map +1 -1
- package/lib/examples/JupyterLabTheme.js +16 -14
- package/lib/examples/JupyterLabTheme.js.map +1 -1
- package/lib/examples/KernelExecute.js +3 -2
- package/lib/examples/KernelExecute.js.map +1 -1
- package/lib/examples/KernelExecutor.js.map +1 -1
- package/lib/examples/Kernels.js +2 -2
- package/lib/examples/Kernels.js.map +1 -1
- package/lib/examples/Notebook2.js +4 -7
- package/lib/examples/Notebook2.js.map +1 -1
- package/lib/examples/Notebook2Collaborative.js +23 -0
- package/lib/examples/Notebook2Collaborative.js.map +1 -0
- package/lib/examples/NotebookCollaborative.js +4 -1
- package/lib/examples/NotebookCollaborative.js.map +1 -1
- package/lib/examples/NotebookColormode.js.map +1 -1
- package/lib/examples/NotebookExtension.js +1 -1
- package/lib/examples/NotebookExtension.js.map +1 -1
- package/lib/examples/NotebookKernel.js +1 -1
- package/lib/examples/NotebookKernel.js.map +1 -1
- package/lib/examples/NotebookKernelChange.js +2 -3
- package/lib/examples/NotebookKernelChange.js.map +1 -1
- package/lib/examples/NotebookLite.js.map +1 -1
- package/lib/examples/NotebookNbformat.js +3 -6
- package/lib/examples/NotebookNbformat.js.map +1 -1
- package/lib/examples/NotebookNbformatChange.js +6 -1
- package/lib/examples/NotebookNbformatChange.js.map +1 -1
- package/lib/examples/NotebookPathChange.js +6 -1
- package/lib/examples/NotebookPathChange.js.map +1 -1
- package/lib/examples/NotebookThemeColormode.js +9 -9
- package/lib/examples/NotebookThemeColormode.js.map +1 -1
- package/lib/examples/Output.js +11 -7
- package/lib/examples/Output.js.map +1 -1
- package/lib/examples/OutputIPyWidgets.js +3 -2
- package/lib/examples/OutputIPyWidgets.js.map +1 -1
- package/lib/examples/{Outputs.js → OutputsIpynb.js} +4 -4
- package/lib/examples/OutputsIpynb.js.map +1 -0
- package/lib/examples/RunningSessions.js +2 -6
- package/lib/examples/RunningSessions.js.map +1 -1
- package/lib/examples/Viewer.js.map +1 -1
- package/lib/examples/extensions/cellsidebars/CellSidebarSource.js +2 -2
- package/lib/examples/extensions/cellsidebars/CellSidebarSource.js.map +1 -1
- package/lib/examples/extensions/celltoolbar/CellToolbar.d.ts +2 -2
- package/lib/examples/extensions/celltoolbar/CellToolbar.js.map +1 -1
- package/lib/examples/extensions/celltoolbar/CellToolbarComponent.d.ts +2 -2
- package/lib/examples/extensions/celltoolbar/CellToolbarComponent.js.map +1 -1
- package/lib/examples/extensions/celltoolbar/CellToolbarExtension.d.ts +3 -3
- package/lib/examples/extensions/celltoolbar/CellToolbarExtension.js.map +1 -1
- package/lib/examples/extensions/celltoolbar/CellToolbarWidget.d.ts +2 -2
- package/lib/examples/extensions/celltoolbar/CellToolbarWidget.js +1 -2
- package/lib/examples/extensions/celltoolbar/CellToolbarWidget.js.map +1 -1
- package/lib/examples/extensions/exectime/ExecTimeExtension.d.ts +3 -3
- package/lib/examples/extensions/exectime/ExecTimeExtension.js +1 -2
- package/lib/examples/extensions/exectime/ExecTimeExtension.js.map +1 -1
- package/lib/examples/extensions/exectime/ExecTimeWidget.js +1 -1
- package/lib/examples/extensions/exectime/ExecTimeWidget.js.map +1 -1
- package/lib/examples/extensions/exectime/utils.js +6 -1
- package/lib/examples/extensions/exectime/utils.js.map +1 -1
- package/lib/examples/extensions/toc/TocExtension.d.ts +3 -3
- package/lib/examples/extensions/toc/TocExtension.js +2 -2
- package/lib/examples/extensions/toc/TocExtension.js.map +1 -1
- package/lib/examples/notebooks/Lite.ipynb.json +10 -28
- package/lib/examples/notebooks/NotebookExample1.ipynb.json +3 -11
- package/lib/examples/notebooks/NotebookOutputs.ipynb.json +3 -9
- package/lib/examples/notebooks/NotebookToCExample.ipynb.json +7 -22
- package/lib/examples/toolbars/NotebookToolbarAutoSave.js.map +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +0 -1
- package/lib/index.js.map +1 -1
- package/lib/jupyter/Jupyter.js +3 -2
- package/lib/jupyter/Jupyter.js.map +1 -1
- package/lib/jupyter/JupyterConfig.js +16 -63
- package/lib/jupyter/JupyterConfig.js.map +1 -1
- package/lib/jupyter/JupyterContext.js +4 -3
- package/lib/jupyter/JupyterContext.js.map +1 -1
- package/lib/jupyter/JupyterDefaults.js.map +1 -1
- package/lib/jupyter/collaboration/CollaborationContext.d.ts +70 -0
- package/lib/jupyter/collaboration/CollaborationContext.js +110 -0
- package/lib/jupyter/collaboration/CollaborationContext.js.map +1 -0
- package/lib/jupyter/collaboration/ICollaborationProvider.d.ts +120 -0
- package/lib/jupyter/collaboration/ICollaborationProvider.js +93 -0
- package/lib/jupyter/collaboration/ICollaborationProvider.js.map +1 -0
- package/lib/jupyter/collaboration/JupyterCollaboration.d.ts +1 -1
- package/lib/jupyter/collaboration/JupyterCollaboration.js +1 -1
- package/lib/jupyter/collaboration/JupyterCollaboration.js.map +1 -1
- package/lib/jupyter/collaboration/index.d.ts +3 -2
- package/lib/jupyter/collaboration/index.js +3 -2
- package/lib/jupyter/collaboration/index.js.map +1 -1
- package/lib/jupyter/collaboration/providers/JupyterCollaborationProvider.d.ts +38 -0
- package/lib/jupyter/collaboration/providers/JupyterCollaborationProvider.js +98 -0
- package/lib/jupyter/collaboration/providers/JupyterCollaborationProvider.js.map +1 -0
- package/lib/jupyter/collaboration/providers/NoOpCollaborationProvider.d.ts +23 -0
- package/lib/jupyter/collaboration/providers/NoOpCollaborationProvider.js +39 -0
- package/lib/jupyter/collaboration/providers/NoOpCollaborationProvider.js.map +1 -0
- package/lib/jupyter/collaboration/providers/index.d.ts +2 -0
- package/lib/jupyter/collaboration/providers/index.js +8 -0
- package/lib/jupyter/collaboration/providers/index.js.map +1 -0
- package/lib/jupyter/ipywidgets/classic/htmlmanager.d.ts +1 -1
- package/lib/jupyter/ipywidgets/classic/htmlmanager.js +4 -4
- package/lib/jupyter/ipywidgets/classic/htmlmanager.js.map +1 -1
- package/lib/jupyter/ipywidgets/classic/manager.js +2 -1
- package/lib/jupyter/ipywidgets/classic/manager.js.map +1 -1
- package/lib/jupyter/ipywidgets/lab/manager.js +1 -1
- package/lib/jupyter/ipywidgets/lab/manager.js.map +1 -1
- package/lib/jupyter/ipywidgets/lab/renderer.js +2 -1
- package/lib/jupyter/ipywidgets/lab/renderer.js.map +1 -1
- package/lib/jupyter/ipywidgets/libembed-amd.js +4 -3
- package/lib/jupyter/ipywidgets/libembed-amd.js.map +1 -1
- package/lib/jupyter/ipywidgets/libembed.js +3 -2
- package/lib/jupyter/ipywidgets/libembed.js.map +1 -1
- package/lib/jupyter/ipywidgets/mimetypes.js.map +1 -1
- package/lib/jupyter/ipywidgets/semvercache.js.map +1 -1
- package/lib/jupyter/kernel/Kernel.js.map +1 -1
- package/lib/jupyter/kernel/KernelExecutor.js +6 -3
- package/lib/jupyter/kernel/KernelExecutor.js.map +1 -1
- package/lib/jupyter/kernel/KernelState.js +1 -1
- package/lib/jupyter/kernel/KernelState.js.map +1 -1
- package/lib/jupyter/lite/LiteServer.js +1 -1
- package/lib/jupyter/lite/LiteServer.js.map +1 -1
- package/lib/jupyter/services/ServiceManagerLess.js +15 -14
- package/lib/jupyter/services/ServiceManagerLess.js.map +1 -1
- package/lib/jupyter/services/ServiceManagerLite.js +2 -2
- package/lib/jupyter/services/ServiceManagerLite.js.map +1 -1
- package/lib/state/JupyterReactState.d.ts +0 -3
- package/lib/state/JupyterReactState.js +7 -20
- package/lib/state/JupyterReactState.js.map +1 -1
- package/lib/state/index.d.ts +1 -2
- package/lib/state/index.js +1 -2
- package/lib/state/index.js.map +1 -1
- package/lib/theme/JupyterLabCss.d.ts +0 -9
- package/lib/theme/JupyterLabCss.js +7 -16
- package/lib/theme/JupyterLabCss.js.map +1 -1
- package/lib/theme/JupyterLabCssImports.d.ts +0 -2
- package/lib/theme/JupyterLabCssImports.js +2 -2
- package/lib/theme/JupyterLabCssImports.js.map +1 -1
- package/lib/theme/JupyterReactTheme.d.ts +10 -0
- package/lib/theme/JupyterReactTheme.js +10 -0
- package/lib/theme/JupyterReactTheme.js.map +1 -1
- package/lib/theme/themes/JupyterLabTheme.js.map +1 -1
- package/lib/utils/cursorExtension.js +2 -2
- package/lib/utils/cursorExtension.js.map +1 -1
- package/package.json +4 -3
- package/lib/components/codemirror/CodeMirrorDatalayerEditor.js.map +0 -1
- package/lib/examples/NotebookMutationsKernel.js +0 -119
- package/lib/examples/NotebookMutationsKernel.js.map +0 -1
- package/lib/examples/NotebookMutationsServiceManager.js +0 -124
- package/lib/examples/NotebookMutationsServiceManager.js.map +0 -1
- package/lib/examples/Outputs.d.ts +0 -1
- package/lib/examples/Outputs.js.map +0 -1
- package/lib/jupyter/collaboration/DatalayerCollaboration.d.ts +0 -9
- package/lib/jupyter/collaboration/DatalayerCollaboration.js +0 -30
- package/lib/jupyter/collaboration/DatalayerCollaboration.js.map +0 -1
- package/lib/jupyter/collaboration/ICollaborative.d.ts +0 -36
- package/lib/jupyter/collaboration/ICollaborative.js +0 -7
- package/lib/jupyter/collaboration/ICollaborative.js.map +0 -1
- package/lib/providers/index.d.ts +0 -1
- package/lib/providers/index.js +0 -7
- package/lib/providers/index.js.map +0 -1
- package/lib/providers/kernels/DatalayerKernels.d.ts +0 -25
- package/lib/providers/kernels/DatalayerKernels.js +0 -58
- package/lib/providers/kernels/DatalayerKernels.js.map +0 -1
- package/lib/providers/kernels/index.d.ts +0 -1
- package/lib/providers/kernels/index.js +0 -7
- package/lib/providers/kernels/index.js.map +0 -1
- package/lib/state/IDatalayerConfig.d.ts +0 -22
- package/lib/state/IDatalayerConfig.js +0 -7
- package/lib/state/IDatalayerConfig.js.map +0 -1
- /package/lib/examples/{NotebookMutationsKernel.d.ts → Notebook2Collaborative.d.ts} +0 -0
- /package/lib/examples/{NotebookMutationsServiceManager.d.ts → OutputsIpynb.d.ts} +0 -0
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2021-2023 Datalayer, Inc.
|
|
4
|
+
*
|
|
5
|
+
* MIT License
|
|
6
|
+
*/
|
|
7
|
+
import { createContext, useContext, useEffect, useMemo, useState, } from 'react';
|
|
8
|
+
import { CollaborationStatus, } from './ICollaborationProvider';
|
|
9
|
+
const CollaborationContext = createContext(undefined);
|
|
10
|
+
/**
|
|
11
|
+
* Collaboration provider component
|
|
12
|
+
*
|
|
13
|
+
* This component provides collaboration context to its children.
|
|
14
|
+
*/
|
|
15
|
+
export function CollaborationProvider({ provider: providerProp, children, }) {
|
|
16
|
+
const [status, setStatus] = useState(CollaborationStatus.Disconnected);
|
|
17
|
+
const [isSynced, setIsSynced] = useState(false);
|
|
18
|
+
const [error, setError] = useState(null);
|
|
19
|
+
// Use the provider instance
|
|
20
|
+
const provider = useMemo(() => {
|
|
21
|
+
return providerProp || null;
|
|
22
|
+
}, [providerProp]);
|
|
23
|
+
// Subscribe to provider events
|
|
24
|
+
useEffect(() => {
|
|
25
|
+
if (!provider) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const statusHandler = (sender, newStatus) => {
|
|
29
|
+
setStatus(newStatus);
|
|
30
|
+
};
|
|
31
|
+
const errorHandler = (sender, error) => {
|
|
32
|
+
setError(error);
|
|
33
|
+
};
|
|
34
|
+
const syncHandler = (sender, synced) => {
|
|
35
|
+
setIsSynced(synced);
|
|
36
|
+
};
|
|
37
|
+
provider.events.statusChanged.connect(statusHandler);
|
|
38
|
+
provider.events.errorOccurred.connect(errorHandler);
|
|
39
|
+
provider.events.syncStateChanged.connect(syncHandler);
|
|
40
|
+
// Set initial status
|
|
41
|
+
setStatus(provider.status);
|
|
42
|
+
return () => {
|
|
43
|
+
provider.events.statusChanged.disconnect(statusHandler);
|
|
44
|
+
provider.events.errorOccurred.disconnect(errorHandler);
|
|
45
|
+
provider.events.syncStateChanged.disconnect(syncHandler);
|
|
46
|
+
};
|
|
47
|
+
}, [provider]);
|
|
48
|
+
// Cleanup on unmount
|
|
49
|
+
useEffect(() => {
|
|
50
|
+
return () => {
|
|
51
|
+
provider?.dispose();
|
|
52
|
+
};
|
|
53
|
+
}, [provider]);
|
|
54
|
+
const connect = async (sharedModel, documentId, options) => {
|
|
55
|
+
if (!provider) {
|
|
56
|
+
throw new Error('No collaboration provider configured');
|
|
57
|
+
}
|
|
58
|
+
setError(null);
|
|
59
|
+
try {
|
|
60
|
+
await provider.connect(sharedModel, documentId, options);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
setError(err);
|
|
64
|
+
throw err;
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
const disconnect = () => {
|
|
68
|
+
provider?.disconnect();
|
|
69
|
+
setIsSynced(false);
|
|
70
|
+
setError(null);
|
|
71
|
+
};
|
|
72
|
+
const value = {
|
|
73
|
+
provider,
|
|
74
|
+
status,
|
|
75
|
+
isConnected: status === CollaborationStatus.Connected,
|
|
76
|
+
isSynced,
|
|
77
|
+
error,
|
|
78
|
+
connect,
|
|
79
|
+
disconnect,
|
|
80
|
+
};
|
|
81
|
+
return (_jsx(CollaborationContext.Provider, { value: value, children: children }));
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Hook to use collaboration context
|
|
85
|
+
*
|
|
86
|
+
* @returns The collaboration context value
|
|
87
|
+
* @throws Error if used outside of CollaborationProvider
|
|
88
|
+
*/
|
|
89
|
+
export function useCollaboration() {
|
|
90
|
+
const context = useContext(CollaborationContext);
|
|
91
|
+
if (!context) {
|
|
92
|
+
throw new Error('useCollaboration must be used within a CollaborationProvider');
|
|
93
|
+
}
|
|
94
|
+
return context;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Hook to get collaboration status
|
|
98
|
+
*/
|
|
99
|
+
export function useCollaborationStatus() {
|
|
100
|
+
const { status } = useCollaboration();
|
|
101
|
+
return status;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Hook to check if collaboration is connected
|
|
105
|
+
*/
|
|
106
|
+
export function useIsCollaborationConnected() {
|
|
107
|
+
const { isConnected } = useCollaboration();
|
|
108
|
+
return isConnected;
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=CollaborationContext.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CollaborationContext.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/CollaborationContext.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import { YNotebook } from '@jupyter/ydoc';
|
|
2
|
+
import { WebsocketProvider } from 'y-websocket';
|
|
3
|
+
import { IDisposable } from '@lumino/disposable';
|
|
4
|
+
import { ISignal, Signal } from '@lumino/signaling';
|
|
5
|
+
/**
|
|
6
|
+
* Collaboration provider connection status
|
|
7
|
+
*/
|
|
8
|
+
export declare enum CollaborationStatus {
|
|
9
|
+
Disconnected = "disconnected",
|
|
10
|
+
Connecting = "connecting",
|
|
11
|
+
Connected = "connected",
|
|
12
|
+
Error = "error"
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Events emitted by collaboration providers
|
|
16
|
+
*/
|
|
17
|
+
export interface ICollaborationProviderEvents {
|
|
18
|
+
/**
|
|
19
|
+
* Signal emitted when connection status changes
|
|
20
|
+
*/
|
|
21
|
+
statusChanged: ISignal<ICollaborationProvider, CollaborationStatus>;
|
|
22
|
+
/**
|
|
23
|
+
* Signal emitted when an error occurs
|
|
24
|
+
*/
|
|
25
|
+
errorOccurred: ISignal<ICollaborationProvider, Error>;
|
|
26
|
+
/**
|
|
27
|
+
* Signal emitted when synchronization state changes
|
|
28
|
+
*/
|
|
29
|
+
syncStateChanged: ISignal<ICollaborationProvider, boolean>;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Interface for collaboration providers
|
|
33
|
+
*
|
|
34
|
+
* This interface defines the contract that all collaboration providers must implement.
|
|
35
|
+
* It provides a uniform way to connect to different collaboration backends while
|
|
36
|
+
* maintaining the same API for the notebook components.
|
|
37
|
+
*/
|
|
38
|
+
export interface ICollaborationProvider extends IDisposable {
|
|
39
|
+
/**
|
|
40
|
+
* Provider type identifier
|
|
41
|
+
*/
|
|
42
|
+
readonly type: string;
|
|
43
|
+
/**
|
|
44
|
+
* Current connection status
|
|
45
|
+
*/
|
|
46
|
+
readonly status: CollaborationStatus;
|
|
47
|
+
/**
|
|
48
|
+
* Whether the provider is currently connected
|
|
49
|
+
*/
|
|
50
|
+
readonly isConnected: boolean;
|
|
51
|
+
/**
|
|
52
|
+
* Provider events
|
|
53
|
+
*/
|
|
54
|
+
readonly events: ICollaborationProviderEvents;
|
|
55
|
+
/**
|
|
56
|
+
* Connect to the collaboration service
|
|
57
|
+
*
|
|
58
|
+
* @param sharedModel - The shared notebook model
|
|
59
|
+
* @param documentId - Document identifier
|
|
60
|
+
* @param options - Additional connection options
|
|
61
|
+
* @returns Promise that resolves when connected
|
|
62
|
+
*/
|
|
63
|
+
connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
|
|
64
|
+
/**
|
|
65
|
+
* Disconnect from the collaboration service
|
|
66
|
+
*/
|
|
67
|
+
disconnect(): void;
|
|
68
|
+
/**
|
|
69
|
+
* Get the underlying WebSocket provider
|
|
70
|
+
*
|
|
71
|
+
* @returns The WebSocket provider or null if not connected
|
|
72
|
+
*/
|
|
73
|
+
getProvider(): WebsocketProvider | null;
|
|
74
|
+
/**
|
|
75
|
+
* Get the shared model
|
|
76
|
+
*
|
|
77
|
+
* @returns The shared model or null if not connected
|
|
78
|
+
*/
|
|
79
|
+
getSharedModel(): YNotebook | null;
|
|
80
|
+
/**
|
|
81
|
+
* Handle connection close event
|
|
82
|
+
*
|
|
83
|
+
* @param event - Close event
|
|
84
|
+
*/
|
|
85
|
+
handleConnectionClose(event: CloseEvent): void;
|
|
86
|
+
/**
|
|
87
|
+
* Handle synchronization event
|
|
88
|
+
*
|
|
89
|
+
* @param isSynced - Whether the document is synchronized
|
|
90
|
+
*/
|
|
91
|
+
handleSync(isSynced: boolean): void;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Abstract base class for collaboration providers
|
|
95
|
+
*
|
|
96
|
+
* This class provides common functionality for all collaboration providers.
|
|
97
|
+
*/
|
|
98
|
+
export declare abstract class CollaborationProviderBase implements ICollaborationProvider {
|
|
99
|
+
readonly type: string;
|
|
100
|
+
protected _status: CollaborationStatus;
|
|
101
|
+
protected _provider: WebsocketProvider | null;
|
|
102
|
+
protected _sharedModel: YNotebook | null;
|
|
103
|
+
protected _statusChanged: Signal<this, CollaborationStatus>;
|
|
104
|
+
protected _errorOccurred: Signal<this, Error>;
|
|
105
|
+
protected _syncStateChanged: Signal<this, boolean>;
|
|
106
|
+
protected _isDisposed: boolean;
|
|
107
|
+
constructor(type: string);
|
|
108
|
+
get status(): CollaborationStatus;
|
|
109
|
+
get isConnected(): boolean;
|
|
110
|
+
get isDisposed(): boolean;
|
|
111
|
+
get events(): ICollaborationProviderEvents;
|
|
112
|
+
abstract connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
|
|
113
|
+
disconnect(): void;
|
|
114
|
+
getProvider(): WebsocketProvider | null;
|
|
115
|
+
getSharedModel(): YNotebook | null;
|
|
116
|
+
handleConnectionClose(event: CloseEvent): void;
|
|
117
|
+
handleSync(isSynced: boolean): void;
|
|
118
|
+
dispose(): void;
|
|
119
|
+
protected setStatus(status: CollaborationStatus): void;
|
|
120
|
+
}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021-2023 Datalayer, Inc.
|
|
3
|
+
*
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { Signal } from '@lumino/signaling';
|
|
7
|
+
/**
|
|
8
|
+
* Collaboration provider connection status
|
|
9
|
+
*/
|
|
10
|
+
export var CollaborationStatus;
|
|
11
|
+
(function (CollaborationStatus) {
|
|
12
|
+
CollaborationStatus["Disconnected"] = "disconnected";
|
|
13
|
+
CollaborationStatus["Connecting"] = "connecting";
|
|
14
|
+
CollaborationStatus["Connected"] = "connected";
|
|
15
|
+
CollaborationStatus["Error"] = "error";
|
|
16
|
+
})(CollaborationStatus || (CollaborationStatus = {}));
|
|
17
|
+
/**
|
|
18
|
+
* Abstract base class for collaboration providers
|
|
19
|
+
*
|
|
20
|
+
* This class provides common functionality for all collaboration providers.
|
|
21
|
+
*/
|
|
22
|
+
export class CollaborationProviderBase {
|
|
23
|
+
type;
|
|
24
|
+
_status = CollaborationStatus.Disconnected;
|
|
25
|
+
_provider = null;
|
|
26
|
+
_sharedModel = null;
|
|
27
|
+
_statusChanged = new Signal(this);
|
|
28
|
+
_errorOccurred = new Signal(this);
|
|
29
|
+
_syncStateChanged = new Signal(this);
|
|
30
|
+
_isDisposed = false;
|
|
31
|
+
constructor(type) {
|
|
32
|
+
this.type = type;
|
|
33
|
+
}
|
|
34
|
+
get status() {
|
|
35
|
+
return this._status;
|
|
36
|
+
}
|
|
37
|
+
get isConnected() {
|
|
38
|
+
return this._status === CollaborationStatus.Connected;
|
|
39
|
+
}
|
|
40
|
+
get isDisposed() {
|
|
41
|
+
return this._isDisposed;
|
|
42
|
+
}
|
|
43
|
+
get events() {
|
|
44
|
+
return {
|
|
45
|
+
statusChanged: this._statusChanged,
|
|
46
|
+
errorOccurred: this._errorOccurred,
|
|
47
|
+
syncStateChanged: this._syncStateChanged,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
disconnect() {
|
|
51
|
+
if (this._provider) {
|
|
52
|
+
this._provider.disconnect();
|
|
53
|
+
this._provider.destroy();
|
|
54
|
+
this._provider = null;
|
|
55
|
+
}
|
|
56
|
+
this._sharedModel = null;
|
|
57
|
+
this.setStatus(CollaborationStatus.Disconnected);
|
|
58
|
+
}
|
|
59
|
+
getProvider() {
|
|
60
|
+
return this._provider;
|
|
61
|
+
}
|
|
62
|
+
getSharedModel() {
|
|
63
|
+
return this._sharedModel;
|
|
64
|
+
}
|
|
65
|
+
handleConnectionClose(event) {
|
|
66
|
+
if (event.code > 1000) {
|
|
67
|
+
console.error('Connection closed unexpectedly:', event);
|
|
68
|
+
this.setStatus(CollaborationStatus.Error);
|
|
69
|
+
this._errorOccurred.emit(new Error(`Connection closed: ${event.reason}`));
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
handleSync(isSynced) {
|
|
73
|
+
this._syncStateChanged.emit(isSynced);
|
|
74
|
+
if (isSynced) {
|
|
75
|
+
this.setStatus(CollaborationStatus.Connected);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
dispose() {
|
|
79
|
+
if (this._isDisposed) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
this.disconnect();
|
|
83
|
+
Signal.clearData(this);
|
|
84
|
+
this._isDisposed = true;
|
|
85
|
+
}
|
|
86
|
+
setStatus(status) {
|
|
87
|
+
if (this._status !== status) {
|
|
88
|
+
this._status = status;
|
|
89
|
+
this._statusChanged.emit(status);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=ICollaborationProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ICollaborationProvider.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/ICollaborationProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAW,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAEpD;;GAEG;AACH,MAAM,CAAN,IAAY,mBAKX;AALD,WAAY,mBAAmB;IAC7B,oDAA6B,CAAA;IAC7B,gDAAyB,CAAA;IACzB,8CAAuB,CAAA;IACvB,sCAAe,CAAA;AACjB,CAAC,EALW,mBAAmB,KAAnB,mBAAmB,QAK9B;AAgGD;;;;GAIG;AACH,MAAM,OAAgB,yBAAyB;IAWjB;IARlB,OAAO,GAAwB,mBAAmB,CAAC,YAAY,CAAC;IAChE,SAAS,GAA6B,IAAI,CAAC;IAC3C,YAAY,GAAqB,IAAI,CAAC;IACtC,cAAc,GAAG,IAAI,MAAM,CAA4B,IAAI,CAAC,CAAC;IAC7D,cAAc,GAAG,IAAI,MAAM,CAAc,IAAI,CAAC,CAAC;IAC/C,iBAAiB,GAAG,IAAI,MAAM,CAAgB,IAAI,CAAC,CAAC;IACpD,WAAW,GAAG,KAAK,CAAC;IAE9B,YAA4B,IAAY;QAAZ,SAAI,GAAJ,IAAI,CAAQ;IAAG,CAAC;IAE5C,IAAI,MAAM;QACR,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,OAAO,KAAK,mBAAmB,CAAC,SAAS,CAAC;IACxD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,MAAM;QACR,OAAO;YACL,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,aAAa,EAAE,IAAI,CAAC,cAAc;YAClC,gBAAgB,EAAE,IAAI,CAAC,iBAAiB;SACzC,CAAC;IACJ,CAAC;IAQD,UAAU;QACR,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,qBAAqB,CAAC,KAAiB;QACrC,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,EAAE,CAAC;YACtB,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;YACxD,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,sBAAsB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IAED,UAAU,CAAC,QAAiB;QAC1B,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,OAAO;QACT,CAAC;QACD,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;IAC1B,CAAC;IAES,SAAS,CAAC,MAA2B;QAC7C,IAAI,IAAI,CAAC,OAAO,KAAK,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;CACF"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Contents, ServerConnection } from '@jupyterlab/services';
|
|
2
|
-
export declare const COLLABORATION_ROOM_URL_PATH = "api/collaboration/
|
|
2
|
+
export declare const COLLABORATION_ROOM_URL_PATH = "api/collaboration/room";
|
|
3
3
|
export declare const COLLABORATION_SESSION_URL_PATH = "api/collaboration/session";
|
|
4
4
|
/**
|
|
5
5
|
* Document session model
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { URLExt } from '@jupyterlab/coreutils';
|
|
7
7
|
import { ServerConnection } from '@jupyterlab/services';
|
|
8
|
-
export const COLLABORATION_ROOM_URL_PATH = 'api/collaboration/
|
|
8
|
+
export const COLLABORATION_ROOM_URL_PATH = 'api/collaboration/room';
|
|
9
9
|
export const COLLABORATION_SESSION_URL_PATH = 'api/collaboration/session';
|
|
10
10
|
export async function requestJupyterCollaborationSession(format, type, path, serverSettings) {
|
|
11
11
|
const settings = serverSettings ?? ServerConnection.makeSettings();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JupyterCollaboration.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/JupyterCollaboration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAY,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,CAAC,MAAM,2BAA2B,GAAG,
|
|
1
|
+
{"version":3,"file":"JupyterCollaboration.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/JupyterCollaboration.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAY,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAElE,MAAM,CAAC,MAAM,2BAA2B,GAAG,wBAAwB,CAAC;AAEpE,MAAM,CAAC,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAwB1E,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,MAAc,EACd,IAAY,EACZ,IAAY,EACZ,cAA2C;IAE3C,MAAM,QAAQ,GAAG,cAAc,IAAI,gBAAgB,CAAC,YAAY,EAAE,CAAC;IACnE,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CACrB,QAAQ,CAAC,OAAO,EAChB,8BAA8B,EAC9B,kBAAkB,CAAC,IAAI,CAAC,CACzB,CAAC;IACF,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;KACvC,CAAC;IACF,IAAI,QAAkB,CAAC;IACvB,IAAI,CAAC;QACH,QAAQ,GAAG,MAAM,gBAAgB,CAAC,WAAW,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;IACrE,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAc,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,IAAI,GAAQ,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,IAAI,CAAC;YACH,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;QACrD,CAAC;IACH,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,gBAAgB,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;IAC3E,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,eAAe,EAAE,CAAC"}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* MIT License
|
|
5
5
|
*/
|
|
6
|
-
export * from './DatalayerCollaboration';
|
|
7
|
-
export * from './ICollaborative';
|
|
8
6
|
export * from './JupyterCollaboration';
|
|
7
|
+
export * from './ICollaborationProvider';
|
|
8
|
+
export * from './CollaborationContext';
|
|
9
|
+
export * from './providers';
|
|
9
10
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,0BAA0B,CAAC;AACzC,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/jupyter/collaboration/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,wBAAwB,CAAC;AACvC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { YNotebook } from '@jupyter/ydoc';
|
|
2
|
+
import { ServerConnection } from '@jupyterlab/services';
|
|
3
|
+
import { CollaborationProviderBase } from '../ICollaborationProvider';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for Jupyter collaboration provider
|
|
6
|
+
*/
|
|
7
|
+
export interface IJupyterCollaborationConfig {
|
|
8
|
+
/**
|
|
9
|
+
* Notebook file path (optional - can be provided via connect options)
|
|
10
|
+
*/
|
|
11
|
+
path?: string;
|
|
12
|
+
/**
|
|
13
|
+
* Server settings
|
|
14
|
+
*/
|
|
15
|
+
serverSettings?: ServerConnection.ISettings;
|
|
16
|
+
/**
|
|
17
|
+
* Format of the document
|
|
18
|
+
*/
|
|
19
|
+
format?: string;
|
|
20
|
+
/**
|
|
21
|
+
* Type of the document
|
|
22
|
+
*/
|
|
23
|
+
documentType?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Jupyter collaboration provider
|
|
27
|
+
*
|
|
28
|
+
* This provider connects to Jupyter's collaboration service using WebSockets.
|
|
29
|
+
*/
|
|
30
|
+
export declare class JupyterCollaborationProvider extends CollaborationProviderBase {
|
|
31
|
+
private _config;
|
|
32
|
+
private _onSync;
|
|
33
|
+
private _onConnectionClose;
|
|
34
|
+
constructor(config?: IJupyterCollaborationConfig);
|
|
35
|
+
connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
|
|
36
|
+
disconnect(): void;
|
|
37
|
+
handleConnectionClose(event: CloseEvent): void;
|
|
38
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021-2023 Datalayer, Inc.
|
|
3
|
+
*
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { WebsocketProvider } from 'y-websocket';
|
|
7
|
+
import { URLExt } from '@jupyterlab/coreutils';
|
|
8
|
+
import { ServerConnection } from '@jupyterlab/services';
|
|
9
|
+
import { CollaborationProviderBase, CollaborationStatus, } from '../ICollaborationProvider';
|
|
10
|
+
import { COLLABORATION_ROOM_URL_PATH, requestJupyterCollaborationSession, } from '../JupyterCollaboration';
|
|
11
|
+
/**
|
|
12
|
+
* Jupyter collaboration provider
|
|
13
|
+
*
|
|
14
|
+
* This provider connects to Jupyter's collaboration service using WebSockets.
|
|
15
|
+
*/
|
|
16
|
+
export class JupyterCollaborationProvider extends CollaborationProviderBase {
|
|
17
|
+
_config;
|
|
18
|
+
_onSync = null;
|
|
19
|
+
_onConnectionClose = null;
|
|
20
|
+
constructor(config = {}) {
|
|
21
|
+
super('jupyter');
|
|
22
|
+
this._config = config;
|
|
23
|
+
}
|
|
24
|
+
async connect(sharedModel, documentId, options) {
|
|
25
|
+
if (this.isConnected) {
|
|
26
|
+
console.warn('Already connected to Jupyter collaboration service');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
this.setStatus(CollaborationStatus.Connecting);
|
|
30
|
+
try {
|
|
31
|
+
const serverSettings = this._config.serverSettings ?? ServerConnection.makeSettings();
|
|
32
|
+
const { ydoc, awareness } = sharedModel;
|
|
33
|
+
// Use path from options if provided, otherwise fall back to config
|
|
34
|
+
const path = options?.path || this._config.path;
|
|
35
|
+
if (!path) {
|
|
36
|
+
throw new Error('Path is required for Jupyter collaboration. Provide it in the config or via connect options.');
|
|
37
|
+
}
|
|
38
|
+
// Request collaboration session from Jupyter
|
|
39
|
+
const session = await requestJupyterCollaborationSession(this._config.format || 'json', this._config.documentType || 'notebook', path, serverSettings);
|
|
40
|
+
// Build WebSocket URL
|
|
41
|
+
const wsUrl = serverSettings.wsUrl;
|
|
42
|
+
if (!wsUrl) {
|
|
43
|
+
throw new Error('WebSocket URL is not available');
|
|
44
|
+
}
|
|
45
|
+
const documentURL = URLExt.join(wsUrl, COLLABORATION_ROOM_URL_PATH);
|
|
46
|
+
const documentName = `${session.format}:${session.type}:${session.fileId}`;
|
|
47
|
+
// Create WebSocket provider
|
|
48
|
+
const params = {
|
|
49
|
+
sessionId: session.sessionId,
|
|
50
|
+
};
|
|
51
|
+
if (serverSettings.token) {
|
|
52
|
+
params.token = serverSettings.token;
|
|
53
|
+
}
|
|
54
|
+
this._provider = new WebsocketProvider(documentURL, documentName, ydoc, {
|
|
55
|
+
disableBc: true,
|
|
56
|
+
params,
|
|
57
|
+
awareness,
|
|
58
|
+
...options,
|
|
59
|
+
});
|
|
60
|
+
this._sharedModel = sharedModel;
|
|
61
|
+
// Set up event handlers
|
|
62
|
+
this._onSync = (isSynced) => {
|
|
63
|
+
this.handleSync(isSynced);
|
|
64
|
+
};
|
|
65
|
+
this._onConnectionClose = (event) => {
|
|
66
|
+
this.handleConnectionClose(event);
|
|
67
|
+
};
|
|
68
|
+
this._provider.on('sync', this._onSync);
|
|
69
|
+
this._provider.on('connection-close', this._onConnectionClose);
|
|
70
|
+
console.log('Connected to Jupyter collaboration service');
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
this.setStatus(CollaborationStatus.Error);
|
|
74
|
+
this._errorOccurred.emit(error);
|
|
75
|
+
throw error;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
disconnect() {
|
|
79
|
+
if (this._provider) {
|
|
80
|
+
if (this._onSync) {
|
|
81
|
+
this._provider.off('sync', this._onSync);
|
|
82
|
+
}
|
|
83
|
+
if (this._onConnectionClose) {
|
|
84
|
+
this._provider.off('connection-close', this._onConnectionClose);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
super.disconnect();
|
|
88
|
+
}
|
|
89
|
+
handleConnectionClose(event) {
|
|
90
|
+
super.handleConnectionClose(event);
|
|
91
|
+
// Handle session expiration (code 4002)
|
|
92
|
+
if (event.code === 4002) {
|
|
93
|
+
console.warn('Jupyter collaboration session expired');
|
|
94
|
+
// Attempt to reconnect could be implemented here?
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=JupyterCollaborationProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JupyterCollaborationProvider.js","sourceRoot":"","sources":["../../../../src/jupyter/collaboration/providers/JupyterCollaborationProvider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { YNotebook } from '@jupyter/ydoc';
|
|
2
|
+
import { WebsocketProvider } from 'y-websocket';
|
|
3
|
+
import { CollaborationProviderBase } from '../ICollaborationProvider';
|
|
4
|
+
/**
|
|
5
|
+
* Configuration for no-op collaboration provider
|
|
6
|
+
*/
|
|
7
|
+
export interface INoOpCollaborationConfig {
|
|
8
|
+
type?: 'none' | 'noop';
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* No-operation collaboration provider
|
|
12
|
+
*
|
|
13
|
+
* This provider is used when collaboration is disabled.
|
|
14
|
+
* It provides a null implementation of the collaboration interface.
|
|
15
|
+
*/
|
|
16
|
+
export declare class NoOpCollaborationProvider extends CollaborationProviderBase {
|
|
17
|
+
constructor(config?: INoOpCollaborationConfig);
|
|
18
|
+
connect(sharedModel: YNotebook, documentId: string, options?: Record<string, any>): Promise<void>;
|
|
19
|
+
disconnect(): void;
|
|
20
|
+
getProvider(): WebsocketProvider | null;
|
|
21
|
+
handleConnectionClose(event: CloseEvent): void;
|
|
22
|
+
handleSync(isSynced: boolean): void;
|
|
23
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2021-2023 Datalayer, Inc.
|
|
3
|
+
*
|
|
4
|
+
* MIT License
|
|
5
|
+
*/
|
|
6
|
+
import { CollaborationProviderBase, CollaborationStatus, } from '../ICollaborationProvider';
|
|
7
|
+
/**
|
|
8
|
+
* No-operation collaboration provider
|
|
9
|
+
*
|
|
10
|
+
* This provider is used when collaboration is disabled.
|
|
11
|
+
* It provides a null implementation of the collaboration interface.
|
|
12
|
+
*/
|
|
13
|
+
export class NoOpCollaborationProvider extends CollaborationProviderBase {
|
|
14
|
+
constructor(config) {
|
|
15
|
+
super('none');
|
|
16
|
+
}
|
|
17
|
+
async connect(sharedModel, documentId, options) {
|
|
18
|
+
// No-op: Just store the shared model without creating any connection
|
|
19
|
+
this._sharedModel = sharedModel;
|
|
20
|
+
this.setStatus(CollaborationStatus.Connected);
|
|
21
|
+
this._syncStateChanged.emit(true);
|
|
22
|
+
}
|
|
23
|
+
disconnect() {
|
|
24
|
+
this._sharedModel = null;
|
|
25
|
+
this.setStatus(CollaborationStatus.Disconnected);
|
|
26
|
+
}
|
|
27
|
+
getProvider() {
|
|
28
|
+
// No WebSocket provider in no-op mode
|
|
29
|
+
return null;
|
|
30
|
+
}
|
|
31
|
+
handleConnectionClose(event) {
|
|
32
|
+
// No-op: No connection to close
|
|
33
|
+
}
|
|
34
|
+
handleSync(isSynced) {
|
|
35
|
+
// No-op: Always considered synced
|
|
36
|
+
this._syncStateChanged.emit(true);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=NoOpCollaborationProvider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NoOpCollaborationProvider.js","sourceRoot":"","sources":["../../../../src/jupyter/collaboration/providers/NoOpCollaborationProvider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EACL,yBAAyB,EACzB,mBAAmB,GACpB,MAAM,2BAA2B,CAAC;AASnC;;;;;GAKG;AACH,MAAM,OAAO,yBAA0B,SAAQ,yBAAyB;IACtE,YAAY,MAAiC;QAC3C,KAAK,CAAC,MAAM,CAAC,CAAC;IAChB,CAAC;IAED,KAAK,CAAC,OAAO,CACX,WAAsB,EACtB,UAAkB,EAClB,OAA6B;QAE7B,qEAAqE;QACrE,IAAI,CAAC,YAAY,GAAG,WAAW,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,UAAU;QACR,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,YAAY,CAAC,CAAC;IACnD,CAAC;IAED,WAAW;QACT,sCAAsC;QACtC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,qBAAqB,CAAC,KAAiB;QACrC,gCAAgC;IAClC,CAAC;IAED,UAAU,CAAC,QAAiB;QAC1B,kCAAkC;QAClC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/jupyter/collaboration/providers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC"}
|
|
@@ -14,7 +14,7 @@ export declare class HTMLManager extends ManagerBase {
|
|
|
14
14
|
/**
|
|
15
15
|
* Placeholder implementation for _get_comm_info.
|
|
16
16
|
*/
|
|
17
|
-
_get_comm_info(): Promise<
|
|
17
|
+
_get_comm_info(): Promise<Record<string, unknown>>;
|
|
18
18
|
/**
|
|
19
19
|
* Placeholder implementation for _create_comm.
|
|
20
20
|
*/
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
import { Widget } from '@lumino/widgets';
|
|
9
9
|
import { MessageLoop } from '@lumino/messaging';
|
|
10
10
|
import { ManagerBase } from '@jupyter-widgets/base-manager';
|
|
11
|
-
import { RenderMimeRegistry, standardRendererFactories } from '@jupyterlab/rendermime';
|
|
11
|
+
import { RenderMimeRegistry, standardRendererFactories, } from '@jupyterlab/rendermime';
|
|
12
12
|
import { WidgetRenderer, WIDGET_MIMETYPE } from './output_renderers';
|
|
13
13
|
import * as widgets from '@jupyter-widgets/controls';
|
|
14
14
|
import * as base from '@jupyter-widgets/base';
|
|
@@ -24,11 +24,11 @@ export class HTMLManager extends ManagerBase {
|
|
|
24
24
|
this.renderMime.addFactory({
|
|
25
25
|
safe: false,
|
|
26
26
|
mimeTypes: [WIDGET_MIMETYPE],
|
|
27
|
-
createRenderer:
|
|
27
|
+
createRenderer: options => new WidgetRenderer(options, this),
|
|
28
28
|
}, 0);
|
|
29
29
|
this._viewList = new Set();
|
|
30
30
|
window.addEventListener('resize', () => {
|
|
31
|
-
this._viewList.forEach(
|
|
31
|
+
this._viewList.forEach(view => {
|
|
32
32
|
MessageLoop.postMessage(view.luminoWidget, Widget.ResizeMessage.UnknownSize);
|
|
33
33
|
});
|
|
34
34
|
});
|
|
@@ -100,7 +100,7 @@ export class HTMLManager extends ManagerBase {
|
|
|
100
100
|
else {
|
|
101
101
|
reject(`Could not load module ${moduleName}@${moduleVersion}`);
|
|
102
102
|
}
|
|
103
|
-
}).then(
|
|
103
|
+
}).then(module => {
|
|
104
104
|
if (module[className]) {
|
|
105
105
|
return module[className];
|
|
106
106
|
}
|