@fails-components/jupyter-filesystem-extension
Version:
A collection of extensions, that redirect's filesystems access to fails and let fails puppeteer Jupyter lite.
84 lines (77 loc) • 2.54 kB
text/typescript
import type {
Contents,
ServerConnection,
Setting,
ServiceManagerPlugin
} from '@jupyterlab/services';
import {
IDefaultDrive,
ISettingManager,
IServerSettings
} from '@jupyterlab/services';
import type { IContentEventType } from './drive';
import { FailsDrive } from './drive';
import { FailsSettings } from './settings';
import type { IFailsDriveMessageHandler } from './token';
import { IFailsDriveMessages } from './token';
export * from './token';
const failsDriveMessages: ServiceManagerPlugin<IFailsDriveMessages> = {
id: '@fails-components/jupyter-applet-widget:drivemessages',
requires: [],
autoStart: true,
provides: IFailsDriveMessages,
description:
'IFailsDriveMessages interface to send/receive messages for the drive',
activate: (_: null) => {
let initialWaitRes: ((val: unknown) => void) | undefined;
const initialWait = new Promise(resolve => (initialWaitRes = resolve));
let messageHandler: IFailsDriveMessageHandler;
const driveMessages = {
registerMessageHandler: (handler: IFailsDriveMessageHandler) => {
messageHandler = handler;
if (initialWaitRes) {
initialWaitRes(undefined);
}
initialWaitRes = undefined;
},
sendMessage: async (msg: IContentEventType) => {
await initialWait;
return messageHandler(msg);
}
};
return driveMessages;
}
};
const failsDrivePlugin: ServiceManagerPlugin<Contents.IDrive> = {
id: '@fails-components/jupyter-applet-widget:drive',
requires: [IFailsDriveMessages],
autoStart: true,
provides: IDefaultDrive,
description:
'Supplies a drive object for Jupyter lite to be fed from outisde the iframe',
activate: (_: null, driveMessages: IFailsDriveMessages) => {
const drive = new FailsDrive({});
driveMessages.registerMessageHandler(msg => drive.onMessage(msg));
return drive;
}
};
const failsSettingsPlugin: ServiceManagerPlugin<Setting.IManager> = {
id: '@fails-components/jupyter-applet-widget:settings',
requires: [],
autoStart: true,
provides: ISettingManager,
optional: [IServerSettings],
description: 'ISettingsManager from the IFrame embeeded Jupyter',
activate: (_: null, serverSettings: ServerConnection.ISettings | null) => {
const settings = new FailsSettings({
serverSettings: serverSettings ?? undefined
});
return settings;
}
};
const plugins: ServiceManagerPlugin<any>[] = [
failsDriveMessages,
failsDrivePlugin,
failsSettingsPlugin
];
export default plugins;