@@ -24,59 +24,80 @@ const notebookApi = acquireNotebookRendererApi(JupyterNotebookRenderer);
2424
2525notebookApi . onDidCreateOutput ( renderOutput ) ;
2626
27+ // Copy of vscode-notebook-renderer old types as of 1.48
28+ // Keep these so we can support both the old interface and the new interface
29+ // Interface change here: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/51675/files
30+ interface OldNotebookCellOutputMetadata {
31+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
32+ custom ?: { [ key : string ] : any } ;
33+ }
34+ interface OldNotebookOutput {
35+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
36+ data : { [ mimeType : string ] : any } ;
37+ metadata ?: OldNotebookCellOutputMetadata ;
38+ }
39+ interface OldNotebookOutputEventParams {
40+ element : HTMLElement ;
41+ outputId : string ;
42+ output : OldNotebookOutput ;
43+ mimeType : string ;
44+ }
45+
2746/**
2847 * Called from renderer to render output.
2948 * This will be exposed as a public method on window for renderer to render output.
3049 */
3150function renderOutput ( request : NotebookOutputEventParams ) {
51+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52+ const mimeString = request . mime || ( request as any ) . mimeType ;
3253 try {
33- console . error ( 'request' , request ) ;
54+ console . log ( 'request' , request ) ;
3455 const output = convertVSCodeOutputToExecutResultOrDisplayData ( request ) ;
35- console . log ( `Rendering mimeType ${ request . mimeType } ` , output ) ;
36- console . error ( 'request output' , output ) ;
56+ console . log ( `Rendering mimeType ${ mimeString } ` , output ) ;
57+ console . log ( 'request output' , output ) ;
3758
38- ReactDOM . render ( React . createElement ( CellOutput , { mimeType : request . mimeType , output } , null ) , request . element ) ;
59+ ReactDOM . render ( React . createElement ( CellOutput , { mimeType : mimeString , output } , null ) , request . element ) ;
3960 } catch ( ex ) {
40- console . error ( `Failed to render mime type ${ request . mimeType } ` , ex ) ;
61+ console . error ( `Failed to render mime type ${ mimeString } ` , ex ) ;
4162 }
4263}
4364
4465function convertVSCodeOutputToExecutResultOrDisplayData (
4566 request : NotebookOutputEventParams
4667) : nbformat . IExecuteResult | nbformat . IDisplayData {
47- // eslint-disable-next-line @typescript-eslint/no-explicit-any
48- const metadata : Record < string , any > = { } ;
49- // Send metadata only for the mimeType we are interested in.
50- const customMetadata = request . output . metadata ?. custom ;
51- if ( customMetadata ) {
52- // Support for Old API
53- if ( customMetadata [ request . mimeType ] ) {
54- metadata [ request . mimeType ] = customMetadata [ request . mimeType ] ;
55- }
56- if ( customMetadata . needs_background ) {
57- metadata . needs_background = customMetadata . needs_background ;
58- }
59- if ( customMetadata . unconfined ) {
60- metadata . unconfined = customMetadata . unconfined ;
61- }
68+ if ( 'mime' in request ) {
69+ // New API
70+ return {
71+ data : {
72+ [ request . mime ] : request . value
73+ } ,
74+ metadata : request . metadata || { } ,
75+ execution_count : null ,
76+ output_type : request . metadata ?. outputType || 'execute_result'
77+ } ;
6278 } else {
63- // New API.
79+ // Old API
6480 // eslint-disable-next-line @typescript-eslint/no-explicit-any
65- const outputMetadata = request . output . metadata as Record < string , any > | undefined ;
66- if ( outputMetadata && outputMetadata [ request . mimeType ] && outputMetadata [ request . mimeType ] . metadata ) {
81+ const metadata : Record < string , any > = { } ;
82+
83+ const oldRequest = ( request as unknown ) as OldNotebookOutputEventParams ;
84+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
85+ const outputMetadata = oldRequest . output . metadata as Record < string , any > | undefined ;
86+ if ( outputMetadata && outputMetadata [ oldRequest . mimeType ] && outputMetadata [ oldRequest . mimeType ] . metadata ) {
6787 // eslint-disable-next-line @typescript-eslint/no-explicit-any
68- Object . assign ( metadata , outputMetadata [ request . mimeType ] . metadata ) ;
69- if ( request . mimeType in outputMetadata [ request . mimeType ] . metadata ) {
70- Object . assign ( metadata , outputMetadata [ request . mimeType ] . metadata [ request . mimeType ] ) ;
88+ Object . assign ( metadata , outputMetadata [ oldRequest . mimeType ] . metadata ) ;
89+ if ( oldRequest . mimeType in outputMetadata [ oldRequest . mimeType ] . metadata ) {
90+ Object . assign ( metadata , outputMetadata [ oldRequest . mimeType ] . metadata [ oldRequest . mimeType ] ) ;
7191 }
7292 }
93+
94+ return {
95+ data : {
96+ [ oldRequest . mimeType ] : oldRequest . output . data [ oldRequest . mimeType ]
97+ } ,
98+ metadata,
99+ execution_count : null ,
100+ output_type : oldRequest . output . metadata ?. custom ?. vscode ?. outputType || 'execute_result'
101+ } ;
73102 }
74- return {
75- data : {
76- [ request . mimeType ] : request . output . data [ request . mimeType ]
77- } ,
78- metadata,
79- execution_count : null ,
80- output_type : request . output . metadata ?. custom ?. vscode ?. outputType || 'execute_result'
81- } ;
82103}
0 commit comments