Skip to content

Commit

Permalink
include tests and use much more suited name for theme augmented methods
Browse files Browse the repository at this point in the history
  • Loading branch information
eokoneyo committed Dec 9, 2024
1 parent d1e913c commit 9c0bf5c
Show file tree
Hide file tree
Showing 5 changed files with 42 additions and 15 deletions.
2 changes: 1 addition & 1 deletion packages/kbn-monaco/src/console/language.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ export const getParsedRequestsProvider = (model: monaco.editor.ITextModel | null

// Theme id is the same as lang id, as we register only one theme resolver that's color mode aware
export const CONSOLE_THEME_ID = CONSOLE_LANG_ID;
monaco.editor.registerLanguageThemeDefinition(CONSOLE_THEME_ID, buildConsoleTheme);
monaco.editor.registerLanguageThemeResolver(CONSOLE_THEME_ID, buildConsoleTheme);

monaco.languages.onLanguage(CONSOLE_LANG_ID, async () => {
workerProxyService.setup();
Expand Down
2 changes: 1 addition & 1 deletion packages/kbn-monaco/src/helpers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ export function registerLanguage(language: LangModuleType | CustomLangModuleType
monaco.languages.register({ id: ID });

if ('languageThemeResolver' in language) {
monaco.editor.registerLanguageThemeDefinition(ID, language.languageThemeResolver);
monaco.editor.registerLanguageThemeResolver(ID, language.languageThemeResolver);
}

monaco.languages.onLanguage(ID, async () => {
Expand Down
26 changes: 26 additions & 0 deletions packages/kbn-monaco/src/monaco_imports.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the "Elastic License
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
* Public License v 1"; you may not use this file except in compliance with, at
* your election, the "Elastic License 2.0", the "GNU Affero General Public
* License v3.0 only", or the "Server Side Public License, v 1".
*/

import { monaco } from './monaco_imports';

describe('monaco augmentation', () => {
it('has the property registerLanguageThemeResolver defined', () => {
expect(monaco.editor).toHaveProperty('registerLanguageThemeResolver', expect.any(Function));
});

it('has the property getLanguageThemeResolver defined', () => {
expect(monaco.editor).toHaveProperty('getLanguageThemeResolver', expect.any(Function));
});

it('returns the registers and returns the registered theme resolver', () => {
const themeResolver = jest.fn();
monaco.editor.registerLanguageThemeResolver('test', themeResolver);
expect(monaco.editor.getLanguageThemeResolver('test')).toBe(themeResolver);
});
});
19 changes: 11 additions & 8 deletions packages/kbn-monaco/src/monaco_imports.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,17 +55,20 @@ export {

import type { CustomLangModuleType } from './types';

const languageThemeDefinitions = new Map<string, CustomLangModuleType['languageThemeResolver']>();
const languageThemeResolverDefinitions = new Map<
string,
CustomLangModuleType['languageThemeResolver']
>();

declare module 'monaco-editor/esm/vs/editor/editor.api' {
// eslint-disable-next-line @typescript-eslint/no-namespace
export namespace editor {
// augment monaco editor types
function registerLanguageThemeDefinition(
function registerLanguageThemeResolver(
langId: string,
languageThemeDefinition: CustomLangModuleType['languageThemeResolver']
languageThemeResolver: CustomLangModuleType['languageThemeResolver']
): void;
function getLanguageThemeDefinition(
function getLanguageThemeResolver(
langId: string
): CustomLangModuleType['languageThemeResolver'];
}
Expand All @@ -76,21 +79,21 @@ Object.defineProperties(monaco.editor, {
/**
* @description Registers language theme definition for a language
*/
registerLanguageThemeDefinition: {
registerLanguageThemeResolver: {
value: (
langId: string,
languageThemeDefinition: CustomLangModuleType['languageThemeResolver']
) => {
languageThemeDefinitions.set(langId, languageThemeDefinition);
languageThemeResolverDefinitions.set(langId, languageThemeDefinition);
},
enumerable: true,
configurable: false,
},
/**
* @description Returns language theme definition for a language
*/
getLanguageThemeDefinition: {
value: (langId: string) => languageThemeDefinitions.get(langId),
getLanguageThemeResolver: {
value: (langId: string) => languageThemeResolverDefinitions.get(langId),
enumerable: true,
configurable: false,
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,11 +182,9 @@ export function MonacoEditor({

// register theme configurations for supported languages
monaco.languages.getLanguages().forEach(({ id: languageId }) => {
let languageThemeDefinition;
if (
Boolean((languageThemeDefinition = monaco.editor.getLanguageThemeDefinition(languageId)))
) {
monaco.editor.defineTheme(languageId, languageThemeDefinition(euiTheme));
let languageThemeResolver;
if (Boolean((languageThemeResolver = monaco.editor.getLanguageThemeResolver(languageId)))) {
monaco.editor.defineTheme(languageId, languageThemeResolver(euiTheme));
}
});
}, [euiTheme]);
Expand Down

0 comments on commit 9c0bf5c

Please sign in to comment.