prototypey.org - atproto lexicon typescript toolkit - mirror https://github.com/tylersayshi/prototypey

tests passing

Tyler 305a208f 2a836c01

+98 -17
+19 -15
packages/site/src/components/Editor.tsx
··· 5 5 import jsonWorker from "monaco-editor/esm/vs/language/json/json.worker?worker"; 6 6 import tsWorker from "monaco-editor/esm/vs/language/typescript/ts.worker?worker"; 7 7 8 - // Configure loader to use local monaco-editor 0.52.0 instead of CDN 0.54.0 9 - self.MonacoEnvironment = { 10 - getWorker(_: string, label: string) { 11 - if (label === "json") { 12 - return new jsonWorker(); 13 - } 14 - if (label === "typescript" || label === "javascript") { 15 - return new tsWorker(); 16 - } 17 - return new editorWorker(); 18 - }, 19 - }; 8 + // Configure Monaco Environment for web workers 9 + if (typeof self !== "undefined") { 10 + self.MonacoEnvironment = { 11 + getWorker(_: string, label: string) { 12 + if (label === "json") { 13 + return new jsonWorker(); 14 + } 15 + if (label === "typescript" || label === "javascript") { 16 + return new tsWorker(); 17 + } 18 + return new editorWorker(); 19 + }, 20 + }; 21 + } 20 22 21 - loader.config({ monaco }); 23 + // Configure loader to use local monaco-editor 0.52.0 instead of CDN 0.54.0 24 + if (loader?.config) { 25 + loader.config({ monaco }); 26 + } 22 27 23 28 interface EditorProps { 24 29 value: string; ··· 36 41 monaco.languages.typescript.typescriptDefaults.setCompilerOptions({ 37 42 target: monaco.languages.typescript.ScriptTarget.ES2020, 38 43 allowNonTsExtensions: true, 39 - moduleResolution: 40 - monaco.languages.typescript.ModuleResolutionKind.NodeJs, 44 + moduleResolution: monaco.languages.typescript.ModuleResolutionKind.NodeJs, 41 45 module: monaco.languages.typescript.ModuleKind.ESNext, 42 46 noEmit: true, 43 47 esModuleInterop: true,
+15
packages/site/tests/components/Editor.test.tsx
··· 11 11 onChange={(e) => onChange(e.target.value)} 12 12 /> 13 13 ), 14 + useMonaco: () => ({ 15 + languages: { 16 + typescript: { 17 + typescriptDefaults: { 18 + setCompilerOptions: vi.fn(), 19 + setDiagnosticsOptions: vi.fn(), 20 + addExtraLib: vi.fn(), 21 + }, 22 + ScriptTarget: { ES2020: 7 }, 23 + ModuleResolutionKind: { NodeJs: 2 }, 24 + ModuleKind: { ESNext: 99 }, 25 + }, 26 + }, 27 + }), 14 28 loader: { 29 + config: vi.fn(), 15 30 init: vi.fn(() => 16 31 Promise.resolve({ 17 32 languages: {
+15 -1
packages/site/tests/components/Playground.test.tsx
··· 10 10 onChange={(e) => onChange(e.target.value)} 11 11 /> 12 12 ), 13 - useMonaco: () => null, 13 + useMonaco: () => ({ 14 + languages: { 15 + typescript: { 16 + typescriptDefaults: { 17 + setCompilerOptions: vi.fn(), 18 + setDiagnosticsOptions: vi.fn(), 19 + addExtraLib: vi.fn(), 20 + }, 21 + ScriptTarget: { ES2020: 7 }, 22 + ModuleResolutionKind: { NodeJs: 2 }, 23 + ModuleKind: { ESNext: 99 }, 24 + }, 25 + }, 26 + }), 14 27 loader: { 28 + config: vi.fn(), 15 29 init: vi.fn(() => 16 30 Promise.resolve({ 17 31 languages: {
+2
packages/site/tests/mocks/monaco-editor.ts
··· 1 + // Mock monaco-editor for tests 2 + export default {};
+2
packages/site/tests/mocks/worker.ts
··· 1 + // Mock worker for tests 2 + export default class MockWorker {}
+15
packages/site/tests/setup.ts
··· 1 1 import { vi } from "vitest"; 2 2 import "@testing-library/jest-dom/vitest"; 3 3 4 + // Mock @monaco-editor/react BEFORE any imports 5 + vi.mock("@monaco-editor/react", () => ({ 6 + default: vi.fn(() => null), 7 + useMonaco: vi.fn(() => null), 8 + loader: { 9 + config: vi.fn(), 10 + init: vi.fn(() => Promise.resolve({})), 11 + }, 12 + })); 13 + 4 14 global.fetch = vi.fn( 5 15 () => 6 16 Promise.resolve({ 7 17 text: () => Promise.resolve(""), 8 18 }) as any, 9 19 ); 20 + 21 + // Mock MonacoEnvironment 22 + (global as any).MonacoEnvironment = { 23 + getWorker: () => ({}) as any, 24 + };
+30 -1
packages/site/vitest.config.ts
··· 1 1 import { defineConfig } from "vitest/config"; 2 2 import react from "@vitejs/plugin-react"; 3 3 4 + // Plugin to mock monaco-editor workers in tests 5 + function mockMonacoWorkers() { 6 + return { 7 + name: "mock-monaco-workers", 8 + resolveId(id: string) { 9 + if (id.includes("monaco-editor") && id.includes("?worker")) { 10 + return id; 11 + } 12 + }, 13 + load(id: string) { 14 + if (id.includes("monaco-editor") && id.includes("?worker")) { 15 + return "export default class MockWorker {}"; 16 + } 17 + }, 18 + }; 19 + } 20 + 4 21 export default defineConfig({ 5 - plugins: [react()], 22 + plugins: [ 23 + react({ 24 + babel: { 25 + plugins: [], 26 + }, 27 + }), 28 + mockMonacoWorkers(), 29 + ], 6 30 test: { 7 31 environment: "jsdom", 8 32 globals: true, 9 33 setupFiles: ["./tests/setup.ts"], 34 + }, 35 + resolve: { 36 + alias: { 37 + "monaco-editor": "/Users/tyler/gitspace/prototypey/packages/site/tests/mocks/monaco-editor.ts", 38 + }, 10 39 }, 11 40 });