@fails-components/jupyter-filesystem-extension
Version:
A collection of extensions, that redirect's filesystems access to fails and let fails puppeteer Jupyter lite.
75 lines (68 loc) • 2.17 kB
text/typescript
import {
IDefaultDrive,
Contents,
ServerConnection,
Setting,
ISettingManager,
IServerSettings,
ServiceManagerPlugin
} from '@jupyterlab/services';
import { FailsDrive, IContentEventType } from './drive';
import { FailsSettings } from './settings';
import { IFailsDriveMessageHandler, IFailsDriveMessages } from './token';
export * from './token';
const failsDriveMessages: ServiceManagerPlugin<IFailsDriveMessages> = {
id: '@fails-components/jupyter-applet-widget:drivemessages',
requires: [],
autoStart: true,
provides: IFailsDriveMessages,
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,
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],
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;