diff --git a/keep-ui/package.json b/keep-ui/package.json index 507658c793..1c01b5e418 100644 --- a/keep-ui/package.json +++ b/keep-ui/package.json @@ -5,7 +5,7 @@ "main": "next.config.js", "scripts": { "build-monaco-workers": "node scripts/build-monaco-workers-turbopack.js", - "build": "./next_build.sh", + "build": "npm run build-monaco-workers && ./next_build.sh", "build:workflow-yaml-json-schema": "ts-node -P tsconfig.scripts.json scripts/generate-workflow-yaml-json-schema.ts", "dev": "npm run build-monaco-workers && next dev --turbopack -p 3000", "dev:webpack": "next dev -p 3000", diff --git a/keep-ui/shared/ui/MonacoCELEditor/MonacoCel.tsx b/keep-ui/shared/ui/MonacoCELEditor/MonacoCel.tsx index fa53400fc5..559b26a2e4 100644 --- a/keep-ui/shared/ui/MonacoCELEditor/MonacoCel.tsx +++ b/keep-ui/shared/ui/MonacoCELEditor/MonacoCel.tsx @@ -18,6 +18,21 @@ interface MonacoCelProps extends EditorProps { const monacoConfigPromise: Promise | null = typeof window !== "undefined" ? import("monaco-editor").then((monaco) => { + // Workers are pre-built into public/monaco-workers by the + // build-monaco-workers script; Next.js standalone output doesn't + // trace the workers webpack emits from node_modules, so they are + // missing from the production Docker image otherwise. + self.MonacoEnvironment = { + getWorkerUrl: (_moduleId: string, label: string) => { + if (label === "json") { + return "/monaco-workers/json.worker.js"; + } + if (label === "yaml") { + return "/monaco-workers/yaml.worker.js"; + } + return "/monaco-workers/editor.worker.js"; + }, + }; loader.config({ monaco }); }) : null;