@jupyterlite/session 0.6.0-alpha.2 → 0.6.0-alpha.4

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.
@@ -0,0 +1,85 @@
1
+ import { ServerConnection, Session } from '@jupyterlab/services';
2
+ import { LiteKernelClient } from '@jupyterlite/kernel';
3
+ import { ISessionAPIClient } from '@jupyterlab/services/lib/session/session';
4
+ type DeepPartial<T> = {
5
+ [P in keyof T]?: DeepPartial<T[P]>;
6
+ };
7
+ /**
8
+ * A class to handle requests to /api/sessions
9
+ */
10
+ export declare class LiteSessionClient implements ISessionAPIClient {
11
+ /**
12
+ * Construct a new LiteSessionClient.
13
+ *
14
+ * @param options The instantiation options for a LiteSessionClient.
15
+ */
16
+ constructor(options: LiteSessionClient.IOptions);
17
+ /**
18
+ * The server settings for the session client.
19
+ */
20
+ get serverSettings(): ServerConnection.ISettings;
21
+ /**
22
+ * Get a session by id.
23
+ *
24
+ * @param id The id of the session.
25
+ */
26
+ getModel(id: string): Promise<Session.IModel>;
27
+ /**
28
+ * List the running sessions
29
+ */
30
+ listRunning(): Promise<Session.IModel[]>;
31
+ /**
32
+ * Patch an existing session.
33
+ * This can be used to rename a session.
34
+ *
35
+ * - path updates session to track renamed paths
36
+ * - kernel.name starts a new kernel with a given kernelspec
37
+ *
38
+ * @param options The options to patch the session.
39
+ */
40
+ update(options: DeepPartial<Session.IModel>): Promise<Session.IModel>;
41
+ /**
42
+ * Start a new session
43
+ * TODO: read path and name
44
+ *
45
+ * @param options The options to start a new session.
46
+ */
47
+ startNew(options: Session.ISessionOptions): Promise<Session.IModel>;
48
+ /**
49
+ * Shut down a session.
50
+ *
51
+ * @param id The id of the session to shut down.
52
+ */
53
+ shutdown(id: string): Promise<void>;
54
+ /**
55
+ * Shut down all sessions.
56
+ */
57
+ shutdownAll(): Promise<void>;
58
+ /**
59
+ * Handle kernel shutdown
60
+ */
61
+ private _handleKernelShutdown;
62
+ private _kernelClient;
63
+ private _serverSettings;
64
+ private _sessions;
65
+ private _pendingRestarts;
66
+ }
67
+ /**
68
+ * A namespace for LiteSessionClient statics.
69
+ */
70
+ export declare namespace LiteSessionClient {
71
+ /**
72
+ * The instantiation options for the session client.
73
+ */
74
+ interface IOptions {
75
+ /**
76
+ * A reference to the kernels service.
77
+ */
78
+ kernelClient: LiteKernelClient;
79
+ /**
80
+ * Server settings for the session client.
81
+ */
82
+ serverSettings?: ServerConnection.ISettings;
83
+ }
84
+ }
85
+ export {};
@@ -1,21 +1,24 @@
1
+ import { ServerConnection } from '@jupyterlab/services';
1
2
  import { PathExt } from '@jupyterlab/coreutils';
2
3
  import { ArrayExt } from '@lumino/algorithm';
3
4
  import { UUID } from '@lumino/coreutils';
4
5
  /**
5
6
  * A class to handle requests to /api/sessions
6
7
  */
7
- export class Sessions {
8
+ export class LiteSessionClient {
8
9
  /**
9
- * Construct a new Sessions.
10
+ * Construct a new LiteSessionClient.
10
11
  *
11
- * @param options The instantiation options for a Sessions.
12
+ * @param options The instantiation options for a LiteSessionClient.
12
13
  */
13
14
  constructor(options) {
15
+ var _a;
14
16
  this._sessions = [];
15
17
  this._pendingRestarts = new Set();
16
- this._kernels = options.kernels;
18
+ this._kernelClient = options.kernelClient;
19
+ this._serverSettings = (_a = options.serverSettings) !== null && _a !== void 0 ? _a : ServerConnection.makeSettings();
17
20
  // Listen for kernel removals
18
- this._kernels.changed.connect((_, args) => {
21
+ this._kernelClient.changed.connect((_, args) => {
19
22
  var _a, _b;
20
23
  switch (args.type) {
21
24
  case 'remove': {
@@ -51,12 +54,18 @@ export class Sessions {
51
54
  }
52
55
  });
53
56
  }
57
+ /**
58
+ * The server settings for the session client.
59
+ */
60
+ get serverSettings() {
61
+ return this._serverSettings;
62
+ }
54
63
  /**
55
64
  * Get a session by id.
56
65
  *
57
66
  * @param id The id of the session.
58
67
  */
59
- async get(id) {
68
+ async getModel(id) {
60
69
  const session = this._sessions.find((s) => s.id === id);
61
70
  if (!session) {
62
71
  throw Error(`Session ${id} not found`);
@@ -66,7 +75,7 @@ export class Sessions {
66
75
  /**
67
76
  * List the running sessions
68
77
  */
69
- async list() {
78
+ async listRunning() {
70
79
  return this._sessions;
71
80
  }
72
81
  /**
@@ -78,7 +87,7 @@ export class Sessions {
78
87
  *
79
88
  * @param options The options to patch the session.
80
89
  */
81
- async patch(options) {
90
+ async update(options) {
82
91
  const { id, path, name, kernel } = options;
83
92
  const index = this._sessions.findIndex((s) => s.id === id);
84
93
  const session = this._sessions[index];
@@ -99,7 +108,7 @@ export class Sessions {
99
108
  }
100
109
  }
101
110
  else if (kernel.name) {
102
- const newKernel = await this._kernels.startNew({
111
+ const newKernel = await this._kernelClient.startNew({
103
112
  id: UUID.uuid4(),
104
113
  name: kernel.name,
105
114
  location: PathExt.dirname(patched.path),
@@ -124,21 +133,21 @@ export class Sessions {
124
133
  * @param options The options to start a new session.
125
134
  */
126
135
  async startNew(options) {
127
- var _a, _b, _c, _d;
136
+ var _a, _b, _c;
128
137
  const { path, name } = options;
129
138
  const running = this._sessions.find((s) => s.name === name);
130
139
  if (running) {
131
140
  return running;
132
141
  }
133
142
  const kernelName = (_b = (_a = options.kernel) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : '';
134
- const id = (_c = options.id) !== null && _c !== void 0 ? _c : UUID.uuid4();
135
- const nameOrPath = (_d = options.name) !== null && _d !== void 0 ? _d : options.path;
143
+ const id = UUID.uuid4();
144
+ const nameOrPath = (_c = options.name) !== null && _c !== void 0 ? _c : options.path;
136
145
  const dirname = PathExt.dirname(options.name) || PathExt.dirname(options.path);
137
146
  const hasDrive = nameOrPath.includes(':');
138
147
  const driveName = hasDrive ? nameOrPath.split(':')[0] : '';
139
148
  // add drive name if missing (top level directory)
140
149
  const location = dirname.includes(driveName) ? dirname : `${driveName}:${dirname}`;
141
- const kernel = await this._kernels.startNew({
150
+ const kernel = await this._kernelClient.startNew({
142
151
  id,
143
152
  name: kernelName,
144
153
  location,
@@ -171,10 +180,16 @@ export class Sessions {
171
180
  }
172
181
  const kernelId = (_a = session.kernel) === null || _a === void 0 ? void 0 : _a.id;
173
182
  if (kernelId) {
174
- await this._kernels.shutdown(kernelId);
183
+ await this._kernelClient.shutdown(kernelId);
175
184
  }
176
185
  ArrayExt.removeFirstOf(this._sessions, session);
177
186
  }
187
+ /**
188
+ * Shut down all sessions.
189
+ */
190
+ async shutdownAll() {
191
+ await Promise.all(this._sessions.map((s) => this.shutdown(s.id)));
192
+ }
178
193
  /**
179
194
  * Handle kernel shutdown
180
195
  */
@@ -182,4 +197,4 @@ export class Sessions {
182
197
  // No need to handle kernel shutdown here anymore since we're using the changed signal
183
198
  }
184
199
  }
185
- //# sourceMappingURL=sessions.js.map
200
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAW,MAAM,sBAAsB,CAAC;AAEjE,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIhD,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAQzC;;GAEG;AACH,MAAM,OAAO,iBAAiB;IAC5B;;;;OAIG;IACH,YAAY,OAAmC;;QA2MvC,cAAS,GAAqB,EAAE,CAAC;QACjC,qBAAgB,GAAG,IAAI,GAAG,EAAU,CAAC;QA3M3C,IAAI,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;QAC1C,IAAI,CAAC,eAAe,GAAG,MAAA,OAAO,CAAC,cAAc,mCAAI,gBAAgB,CAAC,YAAY,EAAE,CAAC;QACjF,6BAA6B;QAC7B,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;;YAC7C,QAAQ,IAAI,CAAC,IAAI,EAAE;gBACjB,KAAK,QAAQ,CAAC,CAAC;oBACb,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,QAAQ,0CAAE,EAAE,CAAC;oBACnC,IAAI,CAAC,QAAQ,EAAE;wBACb,OAAO;qBACR;oBACD,8CAA8C;oBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,CAAC,CAAC,MAAM,0CAAE,EAAE,MAAK,QAAQ,CAAA,EAAA,CAAC,CAAC;oBACtE,IAAI,CAAC,OAAO,EAAE;wBACZ,OAAO;qBACR;oBACD,4CAA4C;oBAC5C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;oBACpC,UAAU,CAAC,KAAK,IAAI,EAAE;wBACpB,4EAA4E;wBAC5E,IAAI,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;4BACvC,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;4BACvC,MAAM,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;yBACjC;oBACH,CAAC,EAAE,GAAG,CAAC,CAAC;oBACR,MAAM;iBACP;gBACD,KAAK,KAAK,CAAC,CAAC;oBACV,gDAAgD;oBAChD,MAAM,QAAQ,GAAG,MAAA,IAAI,CAAC,QAAQ,0CAAE,EAAE,CAAC;oBACnC,IAAI,CAAC,QAAQ,EAAE;wBACb,OAAO;qBACR;oBACD,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACvC,MAAM;iBACP;aACF;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,eAAe,CAAC;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAU;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;SACxC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,MAAM,CAAC,OAAoC;QAC/C,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;QAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;SACxC;QACD,MAAM,OAAO,GAAG;YACd,GAAG,OAAO;YACV,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,OAAO,CAAC,IAAI;YAC1B,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,OAAO,CAAC,IAAI;SAC3B,CAAC;QAEF,IAAI,MAAM,EAAE;YACV,wCAAwC;YACxC,IAAI,MAAM,CAAC,EAAE,EAAE;gBACb,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CACjC,CAAC,OAAO,EAAE,EAAE,WAAC,OAAA,CAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,EAAE,OAAK,MAAM,aAAN,MAAM,uBAAN,MAAM,CAAE,EAAE,CAAA,CAAA,EAAA,CAC/C,CAAC;gBACF,IAAI,OAAO,EAAE;oBACX,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;iBACjC;aACF;iBAAM,IAAI,MAAM,CAAC,IAAI,EAAE;gBACtB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;oBAClD,EAAE,EAAE,IAAI,CAAC,KAAK,EAAE;oBAChB,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;iBACxC,CAAC,CAAC;gBAEH,IAAI,SAAS,EAAE;oBACb,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;iBAC5B;gBAED,0CAA0C;gBAC1C,KAAK,IAAI,CAAC,qBAAqB,CAAC;oBAC9B,QAAQ,EAAE,SAAS,CAAC,EAAE;oBACtB,SAAS,EAAE,OAAO,CAAC,EAAE;iBACtB,CAAC,CAAC;aACJ;SACF;QAED,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,QAAQ,CAAC,OAAgC;;QAC7C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;QAC/B,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;QAC5D,IAAI,OAAO,EAAE;YACX,OAAO,OAAO,CAAC;SAChB;QACD,MAAM,UAAU,GAAG,MAAA,MAAA,OAAO,CAAC,MAAM,0CAAE,IAAI,mCAAI,EAAE,CAAC;QAC9C,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,UAAU,GAAG,MAAA,OAAO,CAAC,IAAI,mCAAI,OAAO,CAAC,IAAI,CAAC;QAChD,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC/E,MAAM,QAAQ,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3D,kDAAkD;QAClD,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,OAAO,EAAE,CAAC;QACnF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC;YAC/C,EAAE;YACF,IAAI,EAAE,UAAU;YAChB,QAAQ;SACT,CAAC,CAAC;QACH,MAAM,OAAO,GAAmB;YAC9B,EAAE;YACF,IAAI;YACJ,IAAI,EAAE,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,IAAI;YAClB,IAAI,EAAE,UAAU;YAChB,MAAM,EAAE;gBACN,EAAE,EAAE,MAAM,CAAC,EAAE;gBACb,IAAI,EAAE,MAAM,CAAC,IAAI;aAClB;SACF,CAAC;QACF,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7B,0CAA0C;QAC1C,KAAK,IAAI,CAAC,qBAAqB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QAEzE,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAU;;QACvB,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACxD,IAAI,CAAC,OAAO,EAAE;YACZ,MAAM,KAAK,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;SACxC;QACD,MAAM,QAAQ,GAAG,MAAA,OAAO,CAAC,MAAM,0CAAE,EAAE,CAAC;QACpC,IAAI,QAAQ,EAAE;YACZ,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;SAC7C;QACD,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW;QACf,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,qBAAqB,CAAC,EAClC,QAAQ,EACR,SAAS,GAIV;QACC,sFAAsF;IACxF,CAAC;CAMF"}
package/lib/index.d.ts CHANGED
@@ -1,2 +1 @@
1
- export * from './tokens';
2
- export * from './sessions';
1
+ export * from './client';
package/lib/index.js CHANGED
@@ -1,5 +1,4 @@
1
1
  // Copyright (c) Jupyter Development Team.
2
2
  // Distributed under the terms of the Modified BSD License.
3
- export * from './tokens';
4
- export * from './sessions';
3
+ export * from './client';
5
4
  //# sourceMappingURL=index.js.map
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAE3D,cAAc,UAAU,CAAC;AACzB,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0CAA0C;AAC1C,2DAA2D;AAE3D,cAAc,UAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jupyterlite/session",
3
- "version": "0.6.0-alpha.2",
3
+ "version": "0.6.0-alpha.4",
4
4
  "description": "JupyterLite - Session",
5
5
  "homepage": "https://github.com/jupyterlite/jupyterlite",
6
6
  "bugs": {
@@ -43,21 +43,21 @@
43
43
  "watch": "tsc -b --watch"
44
44
  },
45
45
  "dependencies": {
46
- "@jupyterlab/coreutils": "~6.4.0-beta.0",
47
- "@jupyterlab/services": "~7.4.0-beta.0",
48
- "@jupyterlite/kernel": "^0.6.0-alpha.2",
46
+ "@jupyterlab/coreutils": "~6.4.0-beta.1",
47
+ "@jupyterlab/services": "~7.4.0-beta.1",
48
+ "@jupyterlite/kernel": "^0.6.0-alpha.4",
49
49
  "@lumino/algorithm": "^2.0.2",
50
50
  "@lumino/coreutils": "^2.2.0"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@babel/core": "^7.11.6",
54
54
  "@babel/preset-env": "^7.12.1",
55
- "@jupyterlab/testutils": "~4.4.0-beta.0",
55
+ "@jupyterlab/testutils": "~4.4.0-beta.1",
56
56
  "@types/jest": "^29.5.3",
57
57
  "jest": "^29.6.2",
58
58
  "rimraf": "~5.0.1",
59
59
  "ts-jest": "^29.1.1",
60
- "typescript": "~5.1.6"
60
+ "typescript": "~5.5.4"
61
61
  },
62
62
  "publishConfig": {
63
63
  "access": "public"
@@ -1,28 +1,33 @@
1
- import { Session } from '@jupyterlab/services';
1
+ import { ServerConnection, Session } from '@jupyterlab/services';
2
2
 
3
3
  import { PathExt } from '@jupyterlab/coreutils';
4
4
 
5
- import { IKernels } from '@jupyterlite/kernel';
5
+ import { LiteKernelClient } from '@jupyterlite/kernel';
6
6
 
7
7
  import { ArrayExt } from '@lumino/algorithm';
8
8
 
9
9
  import { UUID } from '@lumino/coreutils';
10
10
 
11
- import { ISessions } from './tokens';
11
+ import { ISessionAPIClient } from '@jupyterlab/services/lib/session/session';
12
+
13
+ type DeepPartial<T> = {
14
+ [P in keyof T]?: DeepPartial<T[P]>;
15
+ };
12
16
 
13
17
  /**
14
18
  * A class to handle requests to /api/sessions
15
19
  */
16
- export class Sessions implements ISessions {
20
+ export class LiteSessionClient implements ISessionAPIClient {
17
21
  /**
18
- * Construct a new Sessions.
22
+ * Construct a new LiteSessionClient.
19
23
  *
20
- * @param options The instantiation options for a Sessions.
24
+ * @param options The instantiation options for a LiteSessionClient.
21
25
  */
22
- constructor(options: Sessions.IOptions) {
23
- this._kernels = options.kernels;
26
+ constructor(options: LiteSessionClient.IOptions) {
27
+ this._kernelClient = options.kernelClient;
28
+ this._serverSettings = options.serverSettings ?? ServerConnection.makeSettings();
24
29
  // Listen for kernel removals
25
- this._kernels.changed.connect((_, args) => {
30
+ this._kernelClient.changed.connect((_, args) => {
26
31
  switch (args.type) {
27
32
  case 'remove': {
28
33
  const kernelId = args.oldValue?.id;
@@ -58,12 +63,19 @@ export class Sessions implements ISessions {
58
63
  });
59
64
  }
60
65
 
66
+ /**
67
+ * The server settings for the session client.
68
+ */
69
+ get serverSettings(): ServerConnection.ISettings {
70
+ return this._serverSettings;
71
+ }
72
+
61
73
  /**
62
74
  * Get a session by id.
63
75
  *
64
76
  * @param id The id of the session.
65
77
  */
66
- async get(id: string): Promise<Session.IModel> {
78
+ async getModel(id: string): Promise<Session.IModel> {
67
79
  const session = this._sessions.find((s) => s.id === id);
68
80
  if (!session) {
69
81
  throw Error(`Session ${id} not found`);
@@ -74,7 +86,7 @@ export class Sessions implements ISessions {
74
86
  /**
75
87
  * List the running sessions
76
88
  */
77
- async list(): Promise<Session.IModel[]> {
89
+ async listRunning(): Promise<Session.IModel[]> {
78
90
  return this._sessions;
79
91
  }
80
92
 
@@ -87,7 +99,7 @@ export class Sessions implements ISessions {
87
99
  *
88
100
  * @param options The options to patch the session.
89
101
  */
90
- async patch(options: Session.IModel): Promise<Session.IModel> {
102
+ async update(options: DeepPartial<Session.IModel>): Promise<Session.IModel> {
91
103
  const { id, path, name, kernel } = options;
92
104
  const index = this._sessions.findIndex((s) => s.id === id);
93
105
  const session = this._sessions[index];
@@ -110,7 +122,7 @@ export class Sessions implements ISessions {
110
122
  patched.kernel = session.kernel;
111
123
  }
112
124
  } else if (kernel.name) {
113
- const newKernel = await this._kernels.startNew({
125
+ const newKernel = await this._kernelClient.startNew({
114
126
  id: UUID.uuid4(),
115
127
  name: kernel.name,
116
128
  location: PathExt.dirname(patched.path),
@@ -138,21 +150,21 @@ export class Sessions implements ISessions {
138
150
  *
139
151
  * @param options The options to start a new session.
140
152
  */
141
- async startNew(options: Session.IModel): Promise<Session.IModel> {
153
+ async startNew(options: Session.ISessionOptions): Promise<Session.IModel> {
142
154
  const { path, name } = options;
143
155
  const running = this._sessions.find((s) => s.name === name);
144
156
  if (running) {
145
157
  return running;
146
158
  }
147
159
  const kernelName = options.kernel?.name ?? '';
148
- const id = options.id ?? UUID.uuid4();
160
+ const id = UUID.uuid4();
149
161
  const nameOrPath = options.name ?? options.path;
150
162
  const dirname = PathExt.dirname(options.name) || PathExt.dirname(options.path);
151
163
  const hasDrive = nameOrPath.includes(':');
152
164
  const driveName = hasDrive ? nameOrPath.split(':')[0] : '';
153
165
  // add drive name if missing (top level directory)
154
166
  const location = dirname.includes(driveName) ? dirname : `${driveName}:${dirname}`;
155
- const kernel = await this._kernels.startNew({
167
+ const kernel = await this._kernelClient.startNew({
156
168
  id,
157
169
  name: kernelName,
158
170
  location,
@@ -187,11 +199,18 @@ export class Sessions implements ISessions {
187
199
  }
188
200
  const kernelId = session.kernel?.id;
189
201
  if (kernelId) {
190
- await this._kernels.shutdown(kernelId);
202
+ await this._kernelClient.shutdown(kernelId);
191
203
  }
192
204
  ArrayExt.removeFirstOf(this._sessions, session);
193
205
  }
194
206
 
207
+ /**
208
+ * Shut down all sessions.
209
+ */
210
+ async shutdownAll(): Promise<void> {
211
+ await Promise.all(this._sessions.map((s) => this.shutdown(s.id)));
212
+ }
213
+
195
214
  /**
196
215
  * Handle kernel shutdown
197
216
  */
@@ -205,22 +224,28 @@ export class Sessions implements ISessions {
205
224
  // No need to handle kernel shutdown here anymore since we're using the changed signal
206
225
  }
207
226
 
208
- private _kernels: IKernels;
227
+ private _kernelClient: LiteKernelClient;
228
+ private _serverSettings: ServerConnection.ISettings;
209
229
  private _sessions: Session.IModel[] = [];
210
230
  private _pendingRestarts = new Set<string>();
211
231
  }
212
232
 
213
233
  /**
214
- * A namespace for sessions statics.
234
+ * A namespace for LiteSessionClient statics.
215
235
  */
216
- export namespace Sessions {
236
+ export namespace LiteSessionClient {
217
237
  /**
218
- * The instantiation options for the sessions.
238
+ * The instantiation options for the session client.
219
239
  */
220
240
  export interface IOptions {
221
241
  /**
222
242
  * A reference to the kernels service.
223
243
  */
224
- kernels: IKernels;
244
+ kernelClient: LiteKernelClient;
245
+
246
+ /**
247
+ * Server settings for the session client.
248
+ */
249
+ serverSettings?: ServerConnection.ISettings;
225
250
  }
226
251
  }
package/src/index.ts CHANGED
@@ -1,5 +1,4 @@
1
1
  // Copyright (c) Jupyter Development Team.
2
2
  // Distributed under the terms of the Modified BSD License.
3
3
 
4
- export * from './tokens';
5
- export * from './sessions';
4
+ export * from './client';
package/lib/sessions.d.ts DELETED
@@ -1,68 +0,0 @@
1
- import { Session } from '@jupyterlab/services';
2
- import { IKernels } from '@jupyterlite/kernel';
3
- import { ISessions } from './tokens';
4
- /**
5
- * A class to handle requests to /api/sessions
6
- */
7
- export declare class Sessions implements ISessions {
8
- /**
9
- * Construct a new Sessions.
10
- *
11
- * @param options The instantiation options for a Sessions.
12
- */
13
- constructor(options: Sessions.IOptions);
14
- /**
15
- * Get a session by id.
16
- *
17
- * @param id The id of the session.
18
- */
19
- get(id: string): Promise<Session.IModel>;
20
- /**
21
- * List the running sessions
22
- */
23
- list(): Promise<Session.IModel[]>;
24
- /**
25
- * Patch an existing session.
26
- * This can be used to rename a session.
27
- *
28
- * - path updates session to track renamed paths
29
- * - kernel.name starts a new kernel with a given kernelspec
30
- *
31
- * @param options The options to patch the session.
32
- */
33
- patch(options: Session.IModel): Promise<Session.IModel>;
34
- /**
35
- * Start a new session
36
- * TODO: read path and name
37
- *
38
- * @param options The options to start a new session.
39
- */
40
- startNew(options: Session.IModel): Promise<Session.IModel>;
41
- /**
42
- * Shut down a session.
43
- *
44
- * @param id The id of the session to shut down.
45
- */
46
- shutdown(id: string): Promise<void>;
47
- /**
48
- * Handle kernel shutdown
49
- */
50
- private _handleKernelShutdown;
51
- private _kernels;
52
- private _sessions;
53
- private _pendingRestarts;
54
- }
55
- /**
56
- * A namespace for sessions statics.
57
- */
58
- export declare namespace Sessions {
59
- /**
60
- * The instantiation options for the sessions.
61
- */
62
- interface IOptions {
63
- /**
64
- * A reference to the kernels service.
65
- */
66
- kernels: IKernels;
67
- }
68
- }
@@ -1 +0,0 @@
1
- {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
package/lib/tokens.d.ts DELETED
@@ -1,40 +0,0 @@
1
- import { Session } from '@jupyterlab/services';
2
- import { Token } from '@lumino/coreutils';
3
- /**
4
- * The token for the sessions service.
5
- */
6
- export declare const ISessions: Token<ISessions>;
7
- /**
8
- * The interface for the sessions services.
9
- */
10
- export interface ISessions {
11
- /**
12
- * Get a session by id.
13
- *
14
- * @param id The id of the session.
15
- */
16
- get(id: string): Promise<Session.IModel>;
17
- /**
18
- * List the running sessions
19
- */
20
- list(): Promise<Session.IModel[]>;
21
- /**
22
- * Path an existing session.
23
- * This can be used to rename a session.
24
- *
25
- * @param options The options to patch the session.
26
- */
27
- patch: (options: Session.IModel) => Promise<Session.IModel>;
28
- /**
29
- * Start a new session.
30
- *
31
- * @param options The options to start a new session.
32
- */
33
- startNew: (options: Session.IModel) => Promise<Session.IModel>;
34
- /**
35
- * Shut down a session.
36
- *
37
- * @param id The id of the session to shut down.
38
- */
39
- shutdown: (id: string) => Promise<void>;
40
- }
package/lib/tokens.js DELETED
@@ -1,6 +0,0 @@
1
- import { Token } from '@lumino/coreutils';
2
- /**
3
- * The token for the sessions service.
4
- */
5
- export const ISessions = new Token('@jupyterlite/session:ISessions');
6
- //# sourceMappingURL=tokens.js.map
package/lib/tokens.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"tokens.js","sourceRoot":"","sources":["../src/tokens.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAY,gCAAgC,CAAC,CAAC"}
package/src/tokens.ts DELETED
@@ -1,47 +0,0 @@
1
- import { Session } from '@jupyterlab/services';
2
-
3
- import { Token } from '@lumino/coreutils';
4
-
5
- /**
6
- * The token for the sessions service.
7
- */
8
- export const ISessions = new Token<ISessions>('@jupyterlite/session:ISessions');
9
-
10
- /**
11
- * The interface for the sessions services.
12
- */
13
- export interface ISessions {
14
- /**
15
- * Get a session by id.
16
- *
17
- * @param id The id of the session.
18
- */
19
- get(id: string): Promise<Session.IModel>;
20
-
21
- /**
22
- * List the running sessions
23
- */
24
- list(): Promise<Session.IModel[]>;
25
-
26
- /**
27
- * Path an existing session.
28
- * This can be used to rename a session.
29
- *
30
- * @param options The options to patch the session.
31
- */
32
- patch: (options: Session.IModel) => Promise<Session.IModel>;
33
-
34
- /**
35
- * Start a new session.
36
- *
37
- * @param options The options to start a new session.
38
- */
39
- startNew: (options: Session.IModel) => Promise<Session.IModel>;
40
-
41
- /**
42
- * Shut down a session.
43
- *
44
- * @param id The id of the session to shut down.
45
- */
46
- shutdown: (id: string) => Promise<void>;
47
- }