1
1
import { useEffect } from "react" ;
2
2
import { useAtom } from "jotai" ;
3
+ import { matchSorter } from "match-sorter" ;
3
4
4
5
import {
5
6
tableScope ,
@@ -64,26 +65,26 @@ export default function useMonacoCustomizations({
64
65
if ( ! monaco ) return ;
65
66
66
67
try {
67
- monaco . languages . typescript . javascriptDefaults . setCompilerOptions ( {
68
+ monaco . languages . typescript . typescriptDefaults . setCompilerOptions ( {
68
69
moduleResolution :
69
70
monaco . languages . typescript . ModuleResolutionKind . NodeJs ,
71
+ module : monaco . languages . typescript . ModuleKind . CommonJS ,
70
72
target : monaco . languages . typescript . ScriptTarget . ES2020 ,
71
73
allowNonTsExtensions : true ,
74
+ typeRoots : [ "node_modules/@types" ] ,
72
75
} ) ;
73
- monaco . languages . typescript . javascriptDefaults . addExtraLib ( firestoreDefs ) ;
74
- monaco . languages . typescript . javascriptDefaults . addExtraLib (
76
+ monaco . languages . typescript . typescriptDefaults . addExtraLib ( firestoreDefs ) ;
77
+ monaco . languages . typescript . typescriptDefaults . addExtraLib (
75
78
firebaseAuthDefs
76
79
) ;
77
- monaco . languages . typescript . javascriptDefaults . addExtraLib (
80
+ monaco . languages . typescript . typescriptDefaults . addExtraLib (
78
81
firebaseStorageDefs
79
82
) ;
80
- monaco . languages . typescript . javascriptDefaults . addExtraLib (
83
+ monaco . languages . typescript . typescriptDefaults . addExtraLib (
81
84
utilsDefs ,
82
85
"ts:filename/utils.d.ts"
83
86
) ;
84
- monaco . languages . typescript . javascriptDefaults . addExtraLib ( rowyUtilsDefs ) ;
85
-
86
- setLoggingReplacementActions ( ) ;
87
+ monaco . languages . typescript . typescriptDefaults . addExtraLib ( rowyUtilsDefs ) ;
87
88
} catch ( error ) {
88
89
console . error (
89
90
"An error occurred during initialization of Monaco: " ,
@@ -97,7 +98,7 @@ export default function useMonacoCustomizations({
97
98
if ( ! monaco ) return ;
98
99
if ( ! extraLibs ) return ;
99
100
try {
100
- monaco . languages . typescript . javascriptDefaults . addExtraLib (
101
+ monaco . languages . typescript . typescriptDefaults . addExtraLib (
101
102
extraLibs . join ( "\n" ) ,
102
103
"ts:filename/extraLibs.d.ts"
103
104
) ;
@@ -112,7 +113,7 @@ export default function useMonacoCustomizations({
112
113
if ( ! monaco ) return ;
113
114
114
115
try {
115
- monaco . languages . typescript . javascriptDefaults . setDiagnosticsOptions ( {
116
+ monaco . languages . typescript . typescriptDefaults . setDiagnosticsOptions ( {
116
117
...JSON . parse ( stringifiedDiagnosticsOptions ) ,
117
118
diagnosticCodesToIgnore : [
118
119
1323 , // remove dynamic import error
@@ -124,13 +125,13 @@ export default function useMonacoCustomizations({
124
125
}
125
126
} , [ monaco , stringifiedDiagnosticsOptions ] ) ;
126
127
127
- const setLoggingReplacementActions = ( ) => {
128
+ const setReplacementActions = ( ) => {
128
129
if ( ! monaco ) return ;
129
130
const { dispose } = monaco . languages . registerCodeActionProvider (
130
131
"javascript" ,
131
132
{
132
133
provideCodeActions : ( model , range , context , token ) => {
133
- const actions = context . markers
134
+ const consoleLogReplacements = context . markers
134
135
. filter ( ( error ) => {
135
136
return error . message . includes ( "Rowy Cloud Logging" ) ;
136
137
} )
@@ -156,8 +157,63 @@ export default function useMonacoCustomizations({
156
157
isPreferred : true ,
157
158
} ;
158
159
} ) ;
160
+ const secretNameReplacements = context . markers
161
+ . filter ( ( error ) => {
162
+ return error . message . includes (
163
+ "is not assignable to parameter of type 'SecretNames'"
164
+ ) ;
165
+ } )
166
+ . map ( ( error ) => {
167
+ const typoSecretName = model
168
+ . getLineContent ( error . startLineNumber )
169
+ . slice ( error . startColumn , error . endColumn - 2 ) ;
170
+ const similarSecretNames =
171
+ matchSorter ( secretNames . secretNames ?? [ ] , typoSecretName ) ??
172
+ [ ] ;
173
+ const otherSecretNames =
174
+ secretNames . secretNames ?. filter (
175
+ ( secretName ) => ! similarSecretNames . includes ( secretName )
176
+ ) ?? [ ] ;
177
+ return [
178
+ ...similarSecretNames . map ( ( secretName ) => ( {
179
+ title : `Replace with "${ secretName } "` ,
180
+ diagnostics : [ error ] ,
181
+ kind : "quickfix" ,
182
+ edit : {
183
+ edits : [
184
+ {
185
+ resource : model . uri ,
186
+ edit : {
187
+ range : error ,
188
+ text : `"${ secretName } "` ,
189
+ } ,
190
+ } ,
191
+ ] ,
192
+ } ,
193
+ isPreferred : true ,
194
+ } ) ) ,
195
+ ...otherSecretNames . map ( ( secretName ) => ( {
196
+ title : `Replace with "${ secretName } "` ,
197
+ diagnostics : [ error ] ,
198
+ kind : "quickfix" ,
199
+ edit : {
200
+ edits : [
201
+ {
202
+ resource : model . uri ,
203
+ edit : {
204
+ range : error ,
205
+ text : `"${ secretName } "` ,
206
+ } ,
207
+ } ,
208
+ ] ,
209
+ } ,
210
+ isPreferred : false ,
211
+ } ) ) ,
212
+ ] ;
213
+ } )
214
+ . flat ( ) ;
159
215
return {
160
- actions : actions ,
216
+ actions : [ ... consoleLogReplacements , ... secretNameReplacements ] ,
161
217
dispose : ( ) => { } ,
162
218
} ;
163
219
} ,
@@ -169,7 +225,6 @@ export default function useMonacoCustomizations({
169
225
dispose ( ) ;
170
226
} ) ;
171
227
} ;
172
-
173
228
const addJsonFieldDefinition = async (
174
229
columnKey : string ,
175
230
interfaceName : string
@@ -178,11 +233,11 @@ export default function useMonacoCustomizations({
178
233
. map ( ( row ) => row [ columnKey ] )
179
234
. filter ( ( entry ) => entry !== undefined )
180
235
. map ( ( entry ) => JSON . stringify ( entry ) ) ;
181
- monaco ?. languages . typescript . javascriptDefaults . addExtraLib (
236
+ monaco ?. languages . typescript . typescriptDefaults . addExtraLib (
182
237
`type ${ interfaceName } = any;`
183
238
) ;
184
239
// if (!samples || samples.length === 0) {
185
- // monaco?.languages.typescript.javascriptDefaults .addExtraLib(
240
+ // monaco?.languages.typescript.typescriptDefaults .addExtraLib(
186
241
// `type ${interfaceName} = any;`
187
242
// );
188
243
// return;
@@ -200,7 +255,7 @@ export default function useMonacoCustomizations({
200
255
// rendererOptions: { "just-types": "true" },
201
256
// });
202
257
// const newLib = result.lines.join("\n").replaceAll("export ", "");
203
- // monaco?.languages.typescript.javascriptDefaults .addExtraLib(newLib);
258
+ // monaco?.languages.typescript.typescriptDefaults .addExtraLib(newLib);
204
259
//}
205
260
} ;
206
261
@@ -223,13 +278,13 @@ export default function useMonacoCustomizations({
223
278
. map ( ( key ) => `"${ key } "` )
224
279
. join ( "|\n" ) ;
225
280
226
- monaco ?. languages . typescript . javascriptDefaults . addExtraLib (
281
+ monaco ?. languages . typescript . typescriptDefaults . addExtraLib (
227
282
[ "/**" , " * extensions type configuration" , " */" , extensionsDefs ] . join (
228
283
"\n"
229
284
) ,
230
285
"ts:filename/extensions.d.ts"
231
286
) ;
232
- monaco ?. languages . typescript . javascriptDefaults . addExtraLib (
287
+ monaco ?. languages . typescript . typescriptDefaults . addExtraLib (
233
288
[
234
289
"// basic types that are used in all places" ,
235
290
"declare var require: any;" ,
@@ -261,14 +316,16 @@ export default function useMonacoCustomizations({
261
316
if ( ! secretNames . secretNames ) return ;
262
317
const secretsDef = `type SecretNames = ${ secretNames . secretNames
263
318
. map ( ( secret : string ) => `"${ secret } "` )
264
- . join ( " | " ) }
319
+ . join ( " | " ) } \n
265
320
enum secrets {
266
321
${ secretNames . secretNames
267
- . map ( ( secret : string ) => `${ secret } = "${ secret } "` )
322
+ . map ( ( secret : string ) => `" ${ secret } " = "${ secret } "` )
268
323
. join ( "\n" ) }
269
324
}
270
325
` ;
271
326
monaco ?. languages . typescript . javascriptDefaults . addExtraLib ( secretsDef ) ;
327
+
328
+ setReplacementActions ( ) ;
272
329
} , [ monaco , secretNames ] ) ;
273
330
274
331
let boxSx : SystemStyleObject < Theme > = {
0 commit comments