diff --git a/packages/console-extension/src/index.ts b/packages/console-extension/src/index.ts index a16342b54e9d..557abee44468 100644 --- a/packages/console-extension/src/index.ts +++ b/packages/console-extension/src/index.ts @@ -40,7 +40,13 @@ import { IRenderMimeRegistry } from '@jupyterlab/rendermime'; import { find } from '@lumino/algorithm'; -import { JSONObject, ReadonlyPartialJSONObject, UUID } from '@lumino/coreutils'; +import { + JSONExt, + JSONObject, + ReadonlyPartialJSONObject, + UUID, + ReadonlyJSONValue +} from '@lumino/coreutils'; import { DisposableSet } from '@lumino/disposable'; @@ -181,7 +187,8 @@ async function activateConsole( let baseUrl = PageConfig.getBaseUrl(); for (let name in specs.kernelspecs) { let rank = name === specs.default ? 0 : Infinity; - let kernelIconUrl = specs.kernelspecs[name]?.resources['logo-64x64']; + const spec = specs.kernelspecs[name]!; + let kernelIconUrl = spec.resources['logo-64x64']; if (kernelIconUrl) { let index = kernelIconUrl.indexOf('kernelspecs'); kernelIconUrl = URLExt.join(baseUrl, kernelIconUrl.slice(index)); @@ -192,7 +199,12 @@ async function activateConsole( args: { isLauncher: true, kernelPreference: { name } }, category: 'Console', rank, - kernelIconUrl + kernelIconUrl, + metadata: { + kernel: JSONExt.deepCopy( + spec.metadata || {} + ) as ReadonlyJSONValue + } }) ); } diff --git a/packages/launcher/src/index.tsx b/packages/launcher/src/index.tsx index 4015ab101c5d..db7709070557 100644 --- a/packages/launcher/src/index.tsx +++ b/packages/launcher/src/index.tsx @@ -344,6 +344,12 @@ export namespace ILauncher { * spec. */ kernelIconUrl?: string; + + /** + * Metadata about the item. This can be used by the launcher to + * affect how the item is displayed. + */ + metadata?: ReadonlyJSONObject; } } diff --git a/packages/notebook-extension/src/index.ts b/packages/notebook-extension/src/index.ts index c273c2e05c29..29db3c920a0c 100644 --- a/packages/notebook-extension/src/index.ts +++ b/packages/notebook-extension/src/index.ts @@ -32,7 +32,13 @@ import { IDocumentManager } from '@jupyterlab/docmanager'; import { ArrayExt } from '@lumino/algorithm'; -import { UUID, JSONObject, ReadonlyPartialJSONObject } from '@lumino/coreutils'; +import { + UUID, + JSONExt, + JSONObject, + ReadonlyPartialJSONObject, + ReadonlyJSONValue +} from '@lumino/coreutils'; import { DisposableSet } from '@lumino/disposable'; @@ -725,7 +731,8 @@ function activateNotebookHandler( for (let name in specs.kernelspecs) { let rank = name === specs.default ? 0 : Infinity; - let kernelIconUrl = specs.kernelspecs[name]?.resources['logo-64x64']; + const spec = specs.kernelspecs[name]!; + let kernelIconUrl = spec.resources['logo-64x64']; if (kernelIconUrl) { let index = kernelIconUrl.indexOf('kernelspecs'); kernelIconUrl = URLExt.join(baseUrl, kernelIconUrl.slice(index)); @@ -736,7 +743,12 @@ function activateNotebookHandler( args: { isLauncher: true, kernelName: name }, category: 'Notebook', rank, - kernelIconUrl + kernelIconUrl, + metadata: { + kernel: JSONExt.deepCopy( + spec.metadata || {} + ) as ReadonlyJSONValue + } }) ); }