@@ -24,59 +24,80 @@ const notebookApi = acquireNotebookRendererApi(JupyterNotebookRenderer);
24
24
25
25
notebookApi . onDidCreateOutput ( renderOutput ) ;
26
26
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
+
27
46
/**
28
47
* Called from renderer to render output.
29
48
* This will be exposed as a public method on window for renderer to render output.
30
49
*/
31
50
function renderOutput ( request : NotebookOutputEventParams ) {
51
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
52
+ const mimeString = request . mime || ( request as any ) . mimeType ;
32
53
try {
33
- console . error ( 'request' , request ) ;
54
+ console . log ( 'request' , request ) ;
34
55
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 ) ;
37
58
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 ) ;
39
60
} catch ( ex ) {
40
- console . error ( `Failed to render mime type ${ request . mimeType } ` , ex ) ;
61
+ console . error ( `Failed to render mime type ${ mimeString } ` , ex ) ;
41
62
}
42
63
}
43
64
44
65
function convertVSCodeOutputToExecutResultOrDisplayData (
45
66
request : NotebookOutputEventParams
46
67
) : 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
+ } ;
62
78
} else {
63
- // New API.
79
+ // Old API
64
80
// 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 ) {
67
87
// 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 ] ) ;
71
91
}
72
92
}
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
+ } ;
73
102
}
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
- } ;
82
103
}
0 commit comments