From 84fd770b6c7bc3fdd62af6d337889e3c2596ef15 Mon Sep 17 00:00:00 2001 From: Kamil Kisiela Date: Mon, 20 Jan 2025 16:26:02 +0100 Subject: [PATCH] Add typings for global.lab to Monaco Editor (#6393) --- .changeset/stupid-candles-arrive.md | 5 +++ .../lib/preflight-sandbox/graphiql-plugin.tsx | 16 ++++++++- .../preflight-sandbox/lab-api-declaration.ts | 34 +++++++++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 .changeset/stupid-candles-arrive.md create mode 100644 packages/web/app/src/lib/preflight-sandbox/lab-api-declaration.ts diff --git a/.changeset/stupid-candles-arrive.md b/.changeset/stupid-candles-arrive.md new file mode 100644 index 000000000..5883da8e7 --- /dev/null +++ b/.changeset/stupid-candles-arrive.md @@ -0,0 +1,5 @@ +--- +'hive': minor +--- + +Add type definitions of global.lab to Preflight Script editor diff --git a/packages/web/app/src/lib/preflight-sandbox/graphiql-plugin.tsx b/packages/web/app/src/lib/preflight-sandbox/graphiql-plugin.tsx index c84f12ca6..2247c450e 100644 --- a/packages/web/app/src/lib/preflight-sandbox/graphiql-plugin.tsx +++ b/packages/web/app/src/lib/preflight-sandbox/graphiql-plugin.tsx @@ -28,7 +28,7 @@ import { useToast } from '@/components/ui/use-toast'; import { FragmentType, graphql, useFragment } from '@/gql'; import { useLocalStorage, useToggle } from '@/lib/hooks'; import { GraphiQLPlugin } from '@graphiql/react'; -import { Editor as MonacoEditor, OnMount } from '@monaco-editor/react'; +import { Editor as MonacoEditor, OnMount, type Monaco } from '@monaco-editor/react'; import { Cross2Icon, CrossCircledIcon, @@ -39,6 +39,7 @@ import { } from '@radix-ui/react-icons'; import { useParams } from '@tanstack/react-router'; import { cn } from '../utils'; +import labApiDefinitionRaw from './lab-api-declaration?raw'; import type { LogMessage } from './preflight-script-worker'; import { IFrameEvents } from './shared-types'; @@ -568,6 +569,18 @@ function PreflightScriptModal({ const handleEnvEditorDidMount: OnMount = useCallback(editor => { envEditorRef.current = editor; }, []); + + const handleMonacoEditorBeforeMount = useCallback((monaco: Monaco) => { + // Add custom typings for globalThis + monaco.languages.typescript.javascriptDefaults.addExtraLib( + ` + ${labApiDefinitionRaw} + declare const lab: LabAPI; + `, + 'global.d.ts', + ); + }, []); + const handleSubmit = useCallback(() => { onScriptValueChange(scriptEditorRef.current?.getValue() ?? ''); onEnvValueChange(envEditorRef.current?.getValue() ?? ''); @@ -646,6 +659,7 @@ function PreflightScriptModal({ ; +}