diff --git a/src/components/Playground/CodeEditor/Editor/ata.ts b/src/components/Playground/CodeEditor/Editor/ata.ts index df03b68..61ea987 100644 --- a/src/components/Playground/CodeEditor/Editor/ata.ts +++ b/src/components/Playground/CodeEditor/Editor/ata.ts @@ -36,6 +36,31 @@ export const createATA = async (): Promise => { // @ts-expect-error // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const ts = await import('https://esm.sh/typescript@5.3.3') + + const maxConcurrentRequests = 50 + let activeRequests = 0 + const requestQueue: Array<() => void> = [] + const fetchWithQueue = (input: RequestInfo | URL, init?: RequestInit | undefined) => + new Promise((resolve, reject) => { + const attemptRequest = () => { + if (activeRequests < maxConcurrentRequests) { + activeRequests++ + fetch(input, init) + .then((response) => resolve(response)) + .catch((error) => reject(error)) + .finally(() => { + activeRequests-- + if (requestQueue.length > 0) { + requestQueue.shift()?.() + } + }) + } else { + requestQueue.push(attemptRequest) + } + } + attemptRequest() + }) + const ata = setupTypeAcquisition({ projectName: 'monaco-ts', // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -43,7 +68,7 @@ export const createATA = async (): Promise => { logger: console, fetcher: (input, init) => { try { - return fetch(input, init) + return fetchWithQueue(input, init) } catch (error) { console.error('Error fetching data:', error) } @@ -92,6 +117,7 @@ export const createATA = async (): Promise => { } return { + // eslint-disable-next-line @typescript-eslint/no-misused-promises acquireType, addListener, removeListener, diff --git a/src/components/Playground/CodeEditor/Editor/hooks.ts b/src/components/Playground/CodeEditor/Editor/hooks.ts index 2224b2f..b8aab77 100644 --- a/src/components/Playground/CodeEditor/Editor/hooks.ts +++ b/src/components/Playground/CodeEditor/Editor/hooks.ts @@ -12,8 +12,8 @@ export const useEditor = () => { const selection = input.options ? input.options.selection : null if (selection) { if ( - typeof selection.endLineNumber === 'number' && - typeof selection.endColumn === 'number' + typeof selection?.endLineNumber === 'number' && + typeof selection?.endColumn === 'number' ) { editor.setSelection(selection) editor.revealRangeInCenter(selection, ScrollType.Immediate)