From 1c3606cebeeb15b155bbd67bb0cb4b7feed234c5 Mon Sep 17 00:00:00 2001 From: Jack Westbrook Date: Thu, 20 Jul 2023 12:36:39 +0200 Subject: [PATCH] Kusto: Move loading @kusto/language-service off the main thread (#72006) fix(kusto): move kusto off the main thread to prevent conflict with window.System --- public/lib/monaco-languages/kusto.ts | 67 ++-------------------------- 1 file changed, 4 insertions(+), 63 deletions(-) diff --git a/public/lib/monaco-languages/kusto.ts b/public/lib/monaco-languages/kusto.ts index 9c19372920f..92adf5f801e 100644 --- a/public/lib/monaco-languages/kusto.ts +++ b/public/lib/monaco-languages/kusto.ts @@ -1,64 +1,5 @@ -declare global { - interface Window { - __monacoKustoResolvePromise: (value: unknown) => void; - __grafana_public_path__: string; - } -} - -function loadScript(script: HTMLScriptElement | string): Promise { - return new Promise((resolve, reject) => { - let scriptEl: HTMLScriptElement; - - if (typeof script === 'string') { - scriptEl = document.createElement('script'); - scriptEl.src = script; - } else { - scriptEl = script; - } - - scriptEl.onload = () => resolve(); - scriptEl.onerror = (err) => reject(err); - document.body.appendChild(scriptEl); - }); -} - -const loadMonacoKusto = () => { - return new Promise((resolve) => { - window.__monacoKustoResolvePromise = resolve; - - const script = document.createElement('script'); - script.innerHTML = `require(['vs/language/kusto/monaco.contribution'], function() { - window.__monacoKustoResolvePromise(); - });`; - - return document.body.appendChild(script); - }); -}; - -export default async function loadKusto() { - const monacoPath = (window.__grafana_public_path__ ?? 'public/') + 'lib/monaco/min/vs'; - - const scripts = [ - [`${monacoPath}/language/kusto/bridge.min.js`], - [ - `${monacoPath}/language/kusto/kusto.javascript.client.min.js`, - `${monacoPath}/language/kusto/newtonsoft.json.min.js`, - `${monacoPath}/language/kusto/Kusto.Language.Bridge.min.js`, - ], - ]; - let promise = Promise.resolve(); - - for (const parallelScripts of scripts) { - await promise; - - // Load all these scripts in parallel, then wait for them all to finish before continuing - // to the next iteration - const allPromises = parallelScripts - .filter((src) => !document.querySelector(`script[src="${src}"]`)) - .map((src) => loadScript(src)); - - await Promise.all(allPromises); - } - - await loadMonacoKusto(); +export default function loadKusto() { + return new Promise((resolve) => + __non_webpack_require__(['vs/language/kusto/monaco.contribution'], () => resolve()) + ); }