| 47 | |
| 48 | // Intercept creation of monaco so we don't have to worry about timing the injection. |
| 49 | const addMonacoInject = () => |
| 50 | Object.defineProperties(window, { |
| 51 | MonacoEnvironment: { |
| 52 | get() { |
| 53 | if (this._codeium_MonacoEnvironment === undefined) { |
| 54 | this._codeium_MonacoEnvironment = { globalAPI: true }; |
| 55 | } |
| 56 | return this._codeium_MonacoEnvironment; |
| 57 | }, |
| 58 | set(env: monaco.Environment | undefined) { |
| 59 | if (env !== undefined) { |
| 60 | env.globalAPI = true; |
| 61 | } |
| 62 | this._codeium_MonacoEnvironment = env; |
| 63 | }, |
| 64 | }, |
| 65 | monaco: { |
| 66 | get(): Monaco | undefined { |
| 67 | return this._codeium_monaco; |
| 68 | }, |
| 69 | set(_monaco: Monaco) { |
| 70 | let injectMonaco: MonacoSite = OMonacoSite.CUSTOM; |
| 71 | for (const [sitePattern, site] of SUPPORTED_MONACO_SITES) { |
| 72 | if (sitePattern.test(window.location.href)) { |
| 73 | injectMonaco = site; |
| 74 | break; |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | const completionProvider = new MonacoCompletionProvider(extensionId, injectMonaco); |
| 79 | if (!_monaco.languages.registerInlineCompletionsProvider) { |
| 80 | return; |
| 81 | } |
| 82 | _monaco.languages.registerInlineCompletionsProvider({ pattern: '**' }, completionProvider); |
| 83 | _monaco.editor.registerCommand( |
| 84 | 'codeium.acceptCompletion', |
| 85 | (_: unknown, apiKey: string, completionId: string, callback?: () => void) => { |
| 86 | callback?.(); |
| 87 | completionProvider.acceptedLastCompletion(apiKey, completionId); |
| 88 | } |
| 89 | ); |
| 90 | _monaco.editor.onDidCreateEditor((editor: monaco.editor.ICodeEditor) => { |
| 91 | completionProvider.addEditor(editor); |
| 92 | }); |
| 93 | this._codeium_monaco = _monaco; |
| 94 | console.log('Activated Codeium: Monaco'); |
| 95 | }, |
| 96 | }, |
| 97 | }); |
| 98 | |
| 99 | let injectCodeMirror = false; |
| 100 | |