diff --git a/.gitignore b/.gitignore index 241cc6a1e..947e534a6 100644 --- a/.gitignore +++ b/.gitignore @@ -119,4 +119,5 @@ CLAUDE.md **/CLAUDE.md .cursor/rules/nx-rules.mdc .github/instructions/nx.instructions.md -.gemini-clipboard \ No newline at end of file +.gemini-clipboard +tsconfig.build.tsbuildinfo \ No newline at end of file diff --git a/apps/android-playground/package.json b/apps/android-playground/package.json index 6649a570f..c683e3a0e 100644 --- a/apps/android-playground/package.json +++ b/apps/android-playground/package.json @@ -29,6 +29,7 @@ "@rsbuild/plugin-node-polyfill": "1.3.0", "@rsbuild/plugin-react": "^1.3.1", "@rsbuild/plugin-svgr": "^1.1.1", + "@rsbuild/plugin-type-check": "1.2.3", "@types/react": "^18.3.1", "@types/react-dom": "^18.3.1", "archiver": "^6.0.0", diff --git a/apps/android-playground/rsbuild.config.ts b/apps/android-playground/rsbuild.config.ts index 262c41e1e..9f40ec33e 100644 --- a/apps/android-playground/rsbuild.config.ts +++ b/apps/android-playground/rsbuild.config.ts @@ -67,6 +67,9 @@ export default defineConfig({ 'react-dom': path.resolve(__dirname, 'node_modules/react-dom'), }, }, + output: { + externals: ['sharp'], + }, plugins: [ pluginReact(), pluginNodePolyfill(), diff --git a/apps/android-playground/tsconfig.json b/apps/android-playground/tsconfig.json index ca9a7367e..be2e7be82 100644 --- a/apps/android-playground/tsconfig.json +++ b/apps/android-playground/tsconfig.json @@ -17,7 +17,25 @@ /* type checking */ "strict": true, "noUnusedLocals": true, - "noUnusedParameters": true + "noUnusedParameters": true, + "composite": true }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../packages/android" + }, + { + "path": "../../packages/core" + }, + { + "path": "../../packages/shared" + }, + { + "path": "../../packages/visualizer" + }, + { + "path": "../../packages/web-integration" + } + ] } diff --git a/apps/chrome-extension/package.json b/apps/chrome-extension/package.json index d9975f127..eae93bf55 100644 --- a/apps/chrome-extension/package.json +++ b/apps/chrome-extension/package.json @@ -43,6 +43,7 @@ "archiver": "^6.0.0", "less": "^4.2.0", "tailwindcss": "4.1.11", - "typescript": "^5.8.3" + "typescript": "^5.8.3", + "openai": "4.81.0" } } diff --git a/apps/chrome-extension/src/extension/recorder/utils.ts b/apps/chrome-extension/src/extension/recorder/utils.ts index 385f0fdb5..41d098f58 100644 --- a/apps/chrome-extension/src/extension/recorder/utils.ts +++ b/apps/chrome-extension/src/extension/recorder/utils.ts @@ -8,6 +8,7 @@ import type { ChromeRecordedEvent } from '@midscene/recorder'; import { message } from 'antd'; import { saveAs } from 'file-saver'; import JSZip from 'jszip'; +import type { ChatCompletionContentPart } from 'openai/resources/index'; import type { RecordingSession } from '../../store'; import { recordLogger } from './logger'; import { isChromeExtension, safeChromeAPI } from './types'; @@ -278,7 +279,7 @@ export const generateRecordTitle = async ( const screenshots = getScreenshotsForLLM(events); // Create the message content - const messageContent: Array> = [ + const messageContent: ChatCompletionContentPart[] = [ { type: 'text', text: `Generate a concise title (5-7 words) and brief description (1-2 sentences) for a browser recording session with the following events:\n\n${JSON.stringify(summary, null, 2)}\n\nRespond with a JSON object containing "title" and "description" fields. The title should be action-oriented and highlight the main task accomplished. The description should provide slightly more detail about what was done.`, @@ -313,7 +314,7 @@ export const generateRecordTitle = async ( role: 'user', content: messageContent, }, - ]; + ] as const; const response = await callAiFn( [prompt[0], prompt[1]], diff --git a/apps/chrome-extension/tsconfig.json b/apps/chrome-extension/tsconfig.json index 48a85fd92..552a7ce2d 100644 --- a/apps/chrome-extension/tsconfig.json +++ b/apps/chrome-extension/tsconfig.json @@ -17,7 +17,25 @@ /* type checking */ "strict": true, "noUnusedLocals": false, - "noUnusedParameters": false + "noUnusedParameters": false, + "composite": true }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../packages/core" + }, + { + "path": "../../packages/recorder" + }, + { + "path": "../../packages/shared" + }, + { + "path": "../../packages/visualizer" + }, + { + "path": "../../packages/web-integration" + } + ] } diff --git a/apps/recorder-form/package.json b/apps/recorder-form/package.json index 36f10daec..35c2dd7e0 100644 --- a/apps/recorder-form/package.json +++ b/apps/recorder-form/package.json @@ -17,6 +17,7 @@ }, "devDependencies": { "@rsbuild/plugin-node-polyfill": "1.3.0", + "@rsbuild/plugin-type-check": "1.2.3", "@rsbuild/core": "^1.3.22", "@rsbuild/plugin-react": "^1.3.1", "@types/react": "^18.3.1", diff --git a/apps/report/rsbuild.config.ts b/apps/report/rsbuild.config.ts index 371e6440d..dec753f03 100644 --- a/apps/report/rsbuild.config.ts +++ b/apps/report/rsbuild.config.ts @@ -59,7 +59,10 @@ const copyReportTemplate = () => ({ const jsFiles = fs.readdirSync(corePkgDistDir, { recursive: true }); let replacedCount = 0; for (const file of jsFiles) { - if (typeof file === 'string' && file.endsWith('.js')) { + if ( + typeof file === 'string' && + (file.endsWith('.js') || file.endsWith('.mjs')) + ) { const filePath = path.join(corePkgDistDir, file.toString()); const fileContent = fs.readFileSync(filePath, 'utf-8'); if (fileContent.includes(replacedMark)) { diff --git a/apps/report/tsconfig.json b/apps/report/tsconfig.json index 748a1d7a2..273929450 100644 --- a/apps/report/tsconfig.json +++ b/apps/report/tsconfig.json @@ -21,7 +21,23 @@ "paths": { "@/*": ["./src/*"] - } + }, + "composite": true, + "declarationDir": "dist/types" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../../packages/core" + }, + { + "path": "../../packages/shared" + }, + { + "path": "../../packages/visualizer" + }, + { + "path": "../../packages/web-integration" + } + ] } diff --git a/biome.json b/biome.json index dcf437278..fe9cdf23c 100644 --- a/biome.json +++ b/biome.json @@ -29,7 +29,8 @@ "**/page-data/**", "**/dump.json", "**/dump-with-invisible.json", - "**/dump-for-utils-test.json" + "**/dump-for-utils-test.json", + "**/.rslib" ] }, "javascript": { diff --git a/packages/android-playground/package.json b/packages/android-playground/package.json index 3d9c077b2..047b00f3f 100644 --- a/packages/android-playground/package.json +++ b/packages/android-playground/package.json @@ -4,6 +4,7 @@ "description": "Android playground for Midscene", "main": "./dist/lib/index.js", "types": "./dist/types/index.d.ts", + "module": "./dist/es/index.mjs", "files": ["dist", "static", "bin", "README.md"], "bin": { "midscene-android-playground": "./bin/android-playground", diff --git a/packages/android-playground/rslib.config.ts b/packages/android-playground/rslib.config.ts index 8e741733c..53f1e88f0 100644 --- a/packages/android-playground/rslib.config.ts +++ b/packages/android-playground/rslib.config.ts @@ -8,7 +8,6 @@ export default defineConfig({ root: 'dist/lib', }, }, - autoExtension: false, format: 'cjs', syntax: 'es2020', }, @@ -18,7 +17,6 @@ export default defineConfig({ root: 'dist/es', }, }, - autoExtension: false, dts: { bundle: true, distPath: 'dist/types', diff --git a/packages/android-playground/tsconfig.json b/packages/android-playground/tsconfig.json index 2cf97401d..027f84597 100644 --- a/packages/android-playground/tsconfig.json +++ b/packages/android-playground/tsconfig.json @@ -9,15 +9,28 @@ "isolatedModules": true, "jsx": "preserve", "lib": ["DOM", "ESNext"], - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "rootDir": "src", "skipLibCheck": true, "strict": true, "module": "ES2020", "target": "es2020", - "types": ["node"] + "types": ["node"], + "composite": true, + "declarationDir": "dist/types" }, "exclude": ["**/node_modules"], - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../android" + }, + { + "path": "../shared" + }, + { + "path": "../web-integration" + } + ] } diff --git a/packages/android/package.json b/packages/android/package.json index 6ce3945c7..968af961d 100644 --- a/packages/android/package.json +++ b/packages/android/package.json @@ -10,12 +10,14 @@ "Android use" ], "main": "./dist/lib/index.js", + "module": "./dist/es/index.mjs", "types": "./dist/types/index.d.ts", "files": ["bin", "dist", "README.md"], "exports": { ".": { "types": "./dist/types/index.d.ts", - "default": "./dist/lib/index.js" + "import": "./dist/es/index.mjs", + "require": "./dist/lib/index.js" }, "./package.json": "./package.json" }, diff --git a/packages/android/rslib.config.ts b/packages/android/rslib.config.ts index 8e741733c..53f1e88f0 100644 --- a/packages/android/rslib.config.ts +++ b/packages/android/rslib.config.ts @@ -8,7 +8,6 @@ export default defineConfig({ root: 'dist/lib', }, }, - autoExtension: false, format: 'cjs', syntax: 'es2020', }, @@ -18,7 +17,6 @@ export default defineConfig({ root: 'dist/es', }, }, - autoExtension: false, dts: { bundle: true, distPath: 'dist/types', diff --git a/packages/android/tests/unit-test/page.test.ts b/packages/android/tests/unit-test/page.test.ts index 964135145..090034b8f 100644 --- a/packages/android/tests/unit-test/page.test.ts +++ b/packages/android/tests/unit-test/page.test.ts @@ -37,16 +37,23 @@ vi.mock('appium-adb', () => { vi.mock('@midscene/shared/img'); vi.mock('@midscene/core/utils'); -vi.mock('node:fs', () => ({ - promises: { - readFile: vi.fn(), - }, - default: { +vi.mock('node:fs', async (importOriginal) => { + const original = (await importOriginal()) as { + default: Record; + }; + return { + ...original, promises: { readFile: vi.fn(), }, - }, -})); + default: { + ...original.default, + promises: { + readFile: vi.fn(), + }, + }, + }; +}); describe('AndroidDevice', () => { let device: AndroidDevice; diff --git a/packages/android/tsconfig.json b/packages/android/tsconfig.json index 2cf97401d..f93427e40 100644 --- a/packages/android/tsconfig.json +++ b/packages/android/tsconfig.json @@ -9,15 +9,28 @@ "isolatedModules": true, "jsx": "preserve", "lib": ["DOM", "ESNext"], - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "rootDir": "src", "skipLibCheck": true, "strict": true, "module": "ES2020", "target": "es2020", - "types": ["node"] + "types": ["node"], + "composite": true, + "declarationDir": "dist/types" }, "exclude": ["**/node_modules"], - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../core" + }, + { + "path": "../shared" + }, + { + "path": "../web-integration" + } + ] } diff --git a/packages/cli/package.json b/packages/cli/package.json index c11040a86..4975b8902 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -5,6 +5,7 @@ "repository": "https://github.com/web-infra-dev/midscene", "homepage": "https://midscenejs.com/", "main": "./dist/lib/index.js", + "module": "./dist/es/index.mjs", "bin": { "midscene": "./bin/midscene" }, diff --git a/packages/cli/rslib.config.ts b/packages/cli/rslib.config.ts index bdf1284c6..9067fb75c 100644 --- a/packages/cli/rslib.config.ts +++ b/packages/cli/rslib.config.ts @@ -9,7 +9,6 @@ export default defineConfig({ root: 'dist/lib', }, }, - autoExtension: false, format: 'cjs', // disable default shims for import.meta.url shims: { @@ -31,7 +30,6 @@ export default defineConfig({ root: 'dist/es', }, }, - autoExtension: false, format: 'esm', syntax: 'es2020', dts: { diff --git a/packages/cli/tsconfig.json b/packages/cli/tsconfig.json index 231cacd2b..a40230fdb 100644 --- a/packages/cli/tsconfig.json +++ b/packages/cli/tsconfig.json @@ -8,15 +8,32 @@ "isolatedModules": true, "jsx": "preserve", "lib": ["ESNext", "DOM"], - "moduleResolution": "node", + "moduleResolution": "bundler", + "module": "esnext", "paths": { "@/*": ["./src/*"] }, "resolveJsonModule": true, "rootDir": ".", "skipLibCheck": true, - "strict": true + "strict": true, + "composite": true, + "declarationDir": "dist/types" }, "exclude": ["**/node_modules"], - "include": ["src", "tests"] + "include": ["src", "tests"], + "references": [ + { + "path": "../android" + }, + { + "path": "../core" + }, + { + "path": "../shared" + }, + { + "path": "../web-integration" + } + ] } diff --git a/packages/core/package.json b/packages/core/package.json index dd4905235..3626ce63e 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -7,23 +7,28 @@ "jsnext:source": "./src/index.ts", "main": "./dist/lib/index.js", "types": "./dist/types/index.d.ts", + "module": "./dist/es/index.mjs", "files": ["dist", "README.md"], "exports": { ".": { "types": "./dist/types/index.d.ts", - "default": "./dist/lib/index.js" + "import": "./dist/es/index.mjs", + "require": "./dist/lib/index.js" }, "./utils": { "types": "./dist/types/utils.d.ts", - "default": "./dist/lib/utils.js" + "import": "./dist/es/utils.mjs", + "require": "./dist/lib/utils.js" }, "./ai-model": { "types": "./dist/types/ai-model.d.ts", - "default": "./dist/lib/ai-model.js" + "import": "./dist/es/ai-model.mjs", + "require": "./dist/lib/ai-model.js" }, "./tree": { "types": "./dist/types/tree.d.ts", - "default": "./dist/lib/tree.js" + "import": "./dist/es/tree.mjs", + "require": "./dist/lib/tree.js" } }, "typesVersions": { diff --git a/packages/core/rslib.config.ts b/packages/core/rslib.config.ts index a7aa1bbe0..939f51db8 100644 --- a/packages/core/rslib.config.ts +++ b/packages/core/rslib.config.ts @@ -10,7 +10,6 @@ export default defineConfig({ root: 'dist/lib', }, }, - autoExtension: false, format: 'cjs', syntax: 'es2020', }, @@ -20,7 +19,6 @@ export default defineConfig({ root: 'dist/es', }, }, - autoExtension: false, dts: { bundle: true, distPath: 'dist/types', diff --git a/packages/core/src/ai-model/common.ts b/packages/core/src/ai-model/common.ts index 917356ef4..c2f4ce11b 100644 --- a/packages/core/src/ai-model/common.ts +++ b/packages/core/src/ai-model/common.ts @@ -15,7 +15,7 @@ import { assert } from '@midscene/shared/utils'; import type { ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam, -} from 'openai/resources'; +} from 'openai/resources/index'; import { call, callToGetJSONObject, diff --git a/packages/core/src/ai-model/index.ts b/packages/core/src/ai-model/index.ts index dbe60d2de..5cee8fe1e 100644 --- a/packages/core/src/ai-model/index.ts +++ b/packages/core/src/ai-model/index.ts @@ -17,7 +17,7 @@ export { generateYamlTestStream, } from './prompt/yaml-generator'; -export type { ChatCompletionMessageParam } from 'openai/resources'; +export type { ChatCompletionMessageParam } from 'openai/resources/index'; export { AiLocateElement, diff --git a/packages/core/src/ai-model/inspect.ts b/packages/core/src/ai-model/inspect.ts index 5876db822..7813a62f6 100644 --- a/packages/core/src/ai-model/inspect.ts +++ b/packages/core/src/ai-model/inspect.ts @@ -30,7 +30,7 @@ import { assert } from '@midscene/shared/utils'; import type { ChatCompletionSystemMessageParam, ChatCompletionUserMessageParam, -} from 'openai/resources'; +} from 'openai/resources/index'; import { AIActionType, adaptBboxToRect, diff --git a/packages/core/src/ai-model/prompt/assertion.ts b/packages/core/src/ai-model/prompt/assertion.ts index 43b548072..1fb2b3b84 100644 --- a/packages/core/src/ai-model/prompt/assertion.ts +++ b/packages/core/src/ai-model/prompt/assertion.ts @@ -1,5 +1,5 @@ import { getPreferredLanguage } from '@midscene/shared/env'; -import type { ResponseFormatJSONSchema } from 'openai/resources'; +import type { ResponseFormatJSONSchema } from 'openai/resources/index'; const defaultAssertionPrompt = 'You are a senior testing engineer. User will give an assertion and a screenshot of a page. By carefully viewing the screenshot, please tell whether the assertion is truthy.'; diff --git a/packages/core/src/ai-model/prompt/extraction.ts b/packages/core/src/ai-model/prompt/extraction.ts index c0bc64f78..26c31766b 100644 --- a/packages/core/src/ai-model/prompt/extraction.ts +++ b/packages/core/src/ai-model/prompt/extraction.ts @@ -1,5 +1,5 @@ import { PromptTemplate } from '@langchain/core/prompts'; -import type { ResponseFormatJSONSchema } from 'openai/resources'; +import type { ResponseFormatJSONSchema } from 'openai/resources/index'; export function systemPromptToExtract() { return ` diff --git a/packages/core/src/ai-model/prompt/llm-locator.ts b/packages/core/src/ai-model/prompt/llm-locator.ts index bce5d421c..15c7c3752 100644 --- a/packages/core/src/ai-model/prompt/llm-locator.ts +++ b/packages/core/src/ai-model/prompt/llm-locator.ts @@ -1,6 +1,6 @@ import { PromptTemplate } from '@langchain/core/prompts'; import type { vlLocateMode } from '@midscene/shared/env'; -import type { ResponseFormatJSONSchema } from 'openai/resources'; +import type { ResponseFormatJSONSchema } from 'openai/resources/index'; import { bboxDescription } from './common'; export function systemPromptToLocateElement( vlMode: ReturnType, diff --git a/packages/core/src/ai-model/prompt/llm-planning.ts b/packages/core/src/ai-model/prompt/llm-planning.ts index 87edd4b88..6e3e6d348 100644 --- a/packages/core/src/ai-model/prompt/llm-planning.ts +++ b/packages/core/src/ai-model/prompt/llm-planning.ts @@ -2,7 +2,7 @@ import assert from 'node:assert'; import type { DeviceAction } from '@/types'; import { PromptTemplate } from '@langchain/core/prompts'; import type { vlLocateMode } from '@midscene/shared/env'; -import type { ResponseFormatJSONSchema } from 'openai/resources'; +import type { ResponseFormatJSONSchema } from 'openai/resources/index'; import { bboxDescription } from './common'; // Note: put the log field first to trigger the CoT diff --git a/packages/core/src/ai-model/prompt/playwright-generator.ts b/packages/core/src/ai-model/prompt/playwright-generator.ts index 656b345af..e0bb0b422 100644 --- a/packages/core/src/ai-model/prompt/playwright-generator.ts +++ b/packages/core/src/ai-model/prompt/playwright-generator.ts @@ -3,7 +3,7 @@ import type { StreamingCodeGenerationOptions, } from '@/types'; import { PLAYWRIGHT_EXAMPLE_CODE } from '@midscene/shared/constants'; -import type { ChatCompletionMessageParam } from 'openai/resources'; +import type { ChatCompletionMessageParam } from 'openai/resources/index'; import { AIActionType, callAi } from '../index'; // Import shared utilities and types from yaml-generator diff --git a/packages/core/src/ai-model/service-caller/index.ts b/packages/core/src/ai-model/service-caller/index.ts index ba89f2fd0..71f28f2df 100644 --- a/packages/core/src/ai-model/service-caller/index.ts +++ b/packages/core/src/ai-model/service-caller/index.ts @@ -39,7 +39,7 @@ import { ifInBrowser } from '@midscene/shared/utils'; import { HttpsProxyAgent } from 'https-proxy-agent'; import { jsonrepair } from 'jsonrepair'; import OpenAI, { AzureOpenAI } from 'openai'; -import type { ChatCompletionMessageParam } from 'openai/resources'; +import type { ChatCompletionMessageParam } from 'openai/resources/index'; import type { Stream } from 'openai/streaming'; import { SocksProxyAgent } from 'socks-proxy-agent'; import { AIActionType, type AIArgs } from '../common'; diff --git a/packages/core/src/ai-model/ui-tars-planning.ts b/packages/core/src/ai-model/ui-tars-planning.ts index 996485ed9..a85dd44f9 100644 --- a/packages/core/src/ai-model/ui-tars-planning.ts +++ b/packages/core/src/ai-model/ui-tars-planning.ts @@ -10,11 +10,11 @@ import { vlLocateMode, } from '@midscene/shared/env'; import { resizeImgBase64 } from '@midscene/shared/img'; -import { transformHotkeyInput } from '@midscene/shared/keyboard-layout'; import { getDebug } from '@midscene/shared/logger'; +import { transformHotkeyInput } from '@midscene/shared/us-keyboard-layout'; import { assert } from '@midscene/shared/utils'; import { actionParser } from '@ui-tars/action-parser'; -import type { ChatCompletionMessageParam } from 'openai/resources'; +import type { ChatCompletionMessageParam } from 'openai/resources/index'; import { AIActionType } from './common'; import { getSummary, getUiTarsPlanningPrompt } from './prompt/ui-tars-planning'; import { call } from './service-caller/index'; diff --git a/packages/core/src/types.ts b/packages/core/src/types.ts index a168a356f..2cd0b5142 100644 --- a/packages/core/src/types.ts +++ b/packages/core/src/types.ts @@ -7,7 +7,7 @@ import type { Rect, Size, } from '@midscene/shared/types'; -import type { ChatCompletionMessageParam } from 'openai/resources'; +import type { ChatCompletionMessageParam } from 'openai/resources/index'; import type { DetailedLocateParam, MidsceneYamlFlowItem, diff --git a/packages/core/src/utils.ts b/packages/core/src/utils.ts index c53146e2c..d9e1ab557 100644 --- a/packages/core/src/utils.ts +++ b/packages/core/src/utils.ts @@ -14,7 +14,7 @@ import { getAIConfig, getAIConfigInJson, } from '@midscene/shared/env'; -import { getRunningPkgInfo } from '@midscene/shared/fs'; +import { getRunningPkgInfo } from '@midscene/shared/node'; import { assert, logMsg } from '@midscene/shared/utils'; import { escapeScriptTag, diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 8e08e7ab9..89b68187d 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -9,7 +9,7 @@ "isolatedModules": true, "jsx": "preserve", "lib": ["DOM", "ESNext"], - "moduleResolution": "node", + "moduleResolution": "bundler", "paths": { "@/*": ["./src/*"] }, @@ -18,8 +18,18 @@ "skipLibCheck": true, "strict": true, "module": "ESNext", - "target": "es2018" + "target": "es2018", + "composite": true, + "declarationDir": "dist/types" }, "exclude": ["**/node_modules"], - "include": ["src", "report"] + "include": ["src", "report"], + "references": [ + { + "path": "../shared" + }, + { + "path": "../recorder" + } + ] } diff --git a/packages/mcp/tsconfig.json b/packages/mcp/tsconfig.json index 8c5c4d6d0..feebdb396 100644 --- a/packages/mcp/tsconfig.json +++ b/packages/mcp/tsconfig.json @@ -9,7 +9,22 @@ "resolveJsonModule": true, "moduleResolution": "bundler", "useDefineForClassFields": true, - "allowImportingTsExtensions": true + "allowImportingTsExtensions": true, + "composite": true }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../core" + }, + { + "path": "../shared" + }, + { + "path": "../android" + }, + { + "path": "../web-integration" + } + ] } diff --git a/packages/recorder/package.json b/packages/recorder/package.json index f32ddaf64..00d844c85 100644 --- a/packages/recorder/package.json +++ b/packages/recorder/package.json @@ -4,11 +4,11 @@ "type": "module", "exports": { ".": { - "types": "./dist/index.d.ts", + "types": "./dist/types/src/index.d.ts", "import": "./dist/index.js" } }, - "types": "./dist/index.d.ts", + "types": "./dist/types/src/index.d.ts", "files": ["dist"], "scripts": { "build": "rslib build", diff --git a/packages/recorder/tsconfig.json b/packages/recorder/tsconfig.json index ae6b0a38b..b58748a74 100644 --- a/packages/recorder/tsconfig.json +++ b/packages/recorder/tsconfig.json @@ -8,7 +8,14 @@ "isolatedModules": true, "resolveJsonModule": true, "moduleResolution": "bundler", - "useDefineForClassFields": true + "useDefineForClassFields": true, + "composite": true, + "declarationDir": "dist/types" }, - "include": ["src"] + "include": ["src"], + "references": [ + { + "path": "../shared" + } + ] } diff --git a/packages/shared/package.json b/packages/shared/package.json index 77c5c7a1e..345068d46 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -5,71 +5,42 @@ "homepage": "https://midscenejs.com/", "types": "./dist/types/index.d.ts", "main": "./dist/lib/index.js", - "module": "./dist/es/index.js", + "module": "./dist/es/index.mjs", "exports": { ".": { "types": "./dist/types/index.d.ts", - "default": "./dist/lib/index.js" + "import": "./dist/es/index.mjs", + "require": "./dist/lib/index.js" }, "./constants": { - "types": "./dist/types/constants.d.ts", - "default": "./dist/lib/constants.js" - }, - "./fs": { - "types": "./dist/types/fs.d.ts", - "default": "./dist/lib/fs.js" - }, - "./img": { - "types": "./dist/types/img.d.ts", - "default": "./dist/lib/img.js" - }, - "./utils": { - "types": "./dist/types/utils.d.ts", - "default": "./dist/lib/utils.js" + "types": "./dist/types/constants/index.d.ts", + "import": "./dist/es/constants/index.mjs", + "require": "./dist/lib/constants/index.js" }, "./extractor": { - "types": "./dist/types/extractor.d.ts", - "default": "./dist/lib/extractor.js" - }, - "./extractor-debug": { - "types": "./dist/types/extractor-debug.d.ts", - "default": "./dist/lib/extractor-debug.js" - }, - "./keyboard-layout": { - "types": "./dist/types/us-keyboard-layout.d.ts", - "default": "./dist/lib/us-keyboard-layout.js" + "types": "./dist/types/extractor/index.d.ts", + "import": "./dist/es/extractor/index.mjs", + "require": "./dist/lib/extractor/index.js" }, - "./logger": { - "types": "./dist/types/logger.d.ts", - "default": "./dist/lib/logger.js" - }, - "./common": { - "types": "./dist/types/common.d.ts", - "default": "./dist/lib/common.js" + "./img": { + "types": "./dist/types/img/index.d.ts", + "import": "./dist/es/img/index.mjs", + "require": "./dist/lib/img/index.js" }, - "./env": { - "types": "./dist/types/env.d.ts", - "default": "./dist/lib/env.js" + "./node": { + "types": "./dist/types/node/index.d.ts", + "import": "./dist/es/node/index.mjs", + "require": "./dist/lib/node/index.js" }, "./types": { - "types": "./dist/types/types.d.ts", - "default": "./dist/lib/types.js" - } - }, - "typesVersions": { - "*": { - ".": ["./dist/types/index.d.ts"], - "constants": ["./dist/types/constants.d.ts"], - "img": ["./dist/types/img.d.ts"], - "fs": ["./dist/types/fs.d.ts"], - "utils": ["./dist/types/utils.d.ts"], - "extractor": ["./dist/types/extractor.d.ts"], - "extractor-debug": ["./dist/types/extractor-debug.d.ts"], - "keyboard-layout": ["./dist/types/us-keyboard-layout.d.ts"], - "logger": ["./dist/types/logger.d.ts"], - "common": ["./dist/types/common.d.ts"], - "env": ["./dist/types/env.d.ts"], - "types": ["./dist/types/types.d.ts"] + "types": "./dist/types/types/index.d.ts", + "import": "./dist/es/types/index.mjs", + "require": "./dist/lib/types/index.js" + }, + "./*": { + "types": "./dist/types/*.d.ts", + "default": "./dist/es/*.mjs", + "require": "./dist/lib/*.js" } }, "files": ["dist", "src", "README.md"], @@ -100,7 +71,6 @@ "sharp": "^0.34.3" }, "devDependencies": { - "@microsoft/api-extractor": "^7.52.10", "@rslib/core": "^0.11.2", "@types/debug": "4.1.12", "@types/node": "^18.0.0", diff --git a/packages/shared/rslib.config.ts b/packages/shared/rslib.config.ts index ee36bba9d..3d1d44947 100644 --- a/packages/shared/rslib.config.ts +++ b/packages/shared/rslib.config.ts @@ -15,9 +15,9 @@ export default defineConfig({ root: 'dist/lib', }, }, - autoExtension: false, format: 'cjs', syntax: 'es2020', + bundle: false, }, { output: { @@ -25,30 +25,13 @@ export default defineConfig({ root: 'dist/es', }, }, - autoExtension: false, - dts: { - bundle: true, - distPath: 'dist/types', - }, format: 'esm', syntax: 'es2020', + bundle: false, + dts: true, }, ], source: { - entry: { - index: './src/index.ts', - img: './src/img/index.ts', - constants: './src/constants/index.ts', - extractor: './src/extractor/index.ts', - 'extractor-debug': './src/extractor/debug.ts', - fs: './src/node/fs.ts', - utils: './src/utils.ts', - logger: './src/logger.ts', - common: './src/common.ts', - 'us-keyboard-layout': './src/us-keyboard-layout.ts', - env: './src/env.ts', - types: './src/types/index.ts', - }, define: { __HTML_ELEMENT_SCRIPT__: JSON.stringify(scriptStr), }, diff --git a/packages/shared/rslib.inspect.config.ts b/packages/shared/rslib.inspect.config.ts index 815faa97f..ab7a8d1c0 100644 --- a/packages/shared/rslib.inspect.config.ts +++ b/packages/shared/rslib.inspect.config.ts @@ -18,7 +18,7 @@ export default defineConfig({ htmlElementDebug: 'src/extractor/debug.ts', }, }, - syntax: 'es6', + syntax: 'esnext', tools: { rspack: { output: { diff --git a/packages/shared/src/node/index.ts b/packages/shared/src/node/index.ts new file mode 100644 index 000000000..c6a897d25 --- /dev/null +++ b/packages/shared/src/node/index.ts @@ -0,0 +1 @@ +export * from './fs'; diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index 1e93c0235..81a6e45a0 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -9,15 +9,17 @@ "isolatedModules": true, "jsx": "preserve", "lib": ["DOM", "ESNext"], - "moduleResolution": "node", + "moduleResolution": "bundler", "resolveJsonModule": true, "rootDir": "src", "skipLibCheck": true, "strict": true, "module": "ES2020", "target": "es2020", - "types": ["node"] + "types": ["node"], + "composite": true, + "declarationDir": "dist/types" }, "exclude": ["**/node_modules"], - "include": ["src", "playwright.config.ts"] + "include": ["src"] } diff --git a/packages/visualizer/package.json b/packages/visualizer/package.json index d2af29fee..55dd4b95a 100644 --- a/packages/visualizer/package.json +++ b/packages/visualizer/package.json @@ -5,11 +5,12 @@ "homepage": "https://midscenejs.com/", "types": "./dist/types/index.d.ts", "main": "./dist/lib/index.js", - "module": "./dist/es/index.js", + "module": "./dist/es/index.mjs", "exports": { ".": { "types": "./dist/types/index.d.ts", - "default": "./dist/es/index.js" + "import": "./dist/es/index.mjs", + "require": "./dist/es/index.js" } }, "files": ["dist", "html", "README.md"], diff --git a/packages/visualizer/rslib.config.ts b/packages/visualizer/rslib.config.ts index 69ab85ae6..4543788b6 100644 --- a/packages/visualizer/rslib.config.ts +++ b/packages/visualizer/rslib.config.ts @@ -13,7 +13,6 @@ export default defineConfig({ root: 'dist/lib', }, }, - autoExtension: false, bundle: false, format: 'cjs', syntax: 'es6', @@ -24,7 +23,6 @@ export default defineConfig({ root: 'dist/es', }, }, - autoExtension: false, bundle: false, format: 'esm', syntax: 'es6', diff --git a/packages/visualizer/tsconfig.json b/packages/visualizer/tsconfig.json index 462a614c8..49390e6a8 100644 --- a/packages/visualizer/tsconfig.json +++ b/packages/visualizer/tsconfig.json @@ -9,7 +9,7 @@ "isolatedModules": true, "jsx": "preserve", "lib": ["DOM", "ESNext"], - "moduleResolution": "node", + "moduleResolution": "bundler", "paths": { "@/*": ["./src/*"] }, @@ -18,8 +18,21 @@ "skipLibCheck": true, "strict": true, "target": "ES2022", - "types": ["react"] + "types": ["react"], + "composite": true, + "declarationDir": "dist/types" }, "exclude": ["**/node_modules"], - "include": ["src", "builder"] + "include": ["src", "builder"], + "references": [ + { + "path": "../core" + }, + { + "path": "../shared" + }, + { + "path": "../web-integration" + } + ] } diff --git a/packages/web-integration/package.json b/packages/web-integration/package.json index 4f03af656..2937ccd83 100644 --- a/packages/web-integration/package.json +++ b/packages/web-integration/package.json @@ -14,95 +14,85 @@ "jsnext:source": "./src/index.ts", "main": "./dist/lib/index.js", "types": "./dist/types/index.d.ts", + "module": "./dist/es/index.mjs", "bin": { "midscene-playground": "./bin/midscene-playground" }, "exports": { ".": { "types": "./dist/types/index.d.ts", - "default": "./dist/lib/index.js" + "require": "./dist/lib/index.js", + "import": "./dist/es/index.mjs" }, "./bridge-mode": { "types": "./dist/types/bridge-mode/index.d.ts", - "default": "./dist/lib/bridge-mode/index.js" + "require": "./dist/lib/bridge-mode/index.js", + "import": "./dist/es/bridge-mode/index.mjs" }, "./bridge-mode-browser": { "types": "./dist/types/bridge-mode/browser.d.ts", - "default": "./dist/lib/bridge-mode/browser.js" + "require": "./dist/lib/bridge-mode/browser.js", + "import": "./dist/es/bridge-mode/browser.mjs" }, "./utils": { "types": "./dist/types/common/utils.d.ts", - "default": "./dist/lib/common/utils.js" + "require": "./dist/lib/common/utils.js", + "import": "./dist/es/common/utils.mjs" }, "./ui-utils": { "types": "./dist/types/common/ui-utils.d.ts", - "default": "./dist/lib/common/ui-utils.js" + "require": "./dist/lib/common/ui-utils.js", + "import": "./dist/es/common/ui-utils.mjs" }, "./puppeteer": { "types": "./dist/types/puppeteer/index.d.ts", - "default": "./dist/lib/puppeteer/index.js" + "require": "./dist/lib/puppeteer/index.js", + "import": "./dist/es/puppeteer/index.mjs" }, "./puppeteer-agent-launcher": { "types": "./dist/types/puppeteer/agent-launcher.d.ts", - "default": "./dist/lib/puppeteer/agent-launcher.js" + "require": "./dist/lib/puppeteer/agent-launcher.js", + "import": "./dist/es/puppeteer/agent-launcher.mjs" }, "./playwright": { "types": "./dist/types/playwright/index.d.ts", - "default": "./dist/lib/playwright/index.js" - }, - "./playwright-report": { - "types": "./dist/types/playwright/reporter/index.d.ts", - "default": "./dist/lib/playwright/reporter/index.js" + "require": "./dist/lib/playwright/index.js", + "import": "./dist/es/playwright/index.mjs" }, "./playwright-reporter": { "types": "./dist/types/playwright/reporter/index.d.ts", - "default": "./dist/lib/playwright/reporter/index.js" + "require": "./dist/lib/playwright/reporter/index.js", + "import": "./dist/es/playwright/reporter/index.mjs" }, "./playground": { "types": "./dist/types/playground/index.d.ts", - "default": "./dist/lib/playground/index.js" + "require": "./dist/lib/playground/index.js", + "import": "./dist/es/playground/index.mjs" }, "./midscene-playground": { "types": "./dist/types/playground/bin.d.ts", - "default": "./dist/lib/playground/bin.js" + "require": "./dist/lib/playground/bin.js", + "import": "./dist/es/playground/bin.mjs" }, "./midscene-server": { "types": "./dist/types/playground/server.d.ts", - "default": "./dist/lib/playground/server.js" + "require": "./dist/lib/playground/server.js", + "import": "./dist/es/playground/server.mjs" }, "./chrome-extension": { "types": "./dist/types/chrome-extension/index.d.ts", - "default": "./dist/lib/chrome-extension/index.js" + "require": "./dist/lib/chrome-extension/index.js", + "import": "./dist/es/chrome-extension/index.mjs" }, "./yaml": { "types": "./dist/types/yaml/index.d.ts", - "default": "./dist/lib/yaml/index.js" + "require": "./dist/lib/yaml/index.js", + "import": "./dist/es/yaml/index.mjs" }, "./agent": { "types": "./dist/types/common/agent.d.ts", - "default": "./dist/lib/common/agent.js" - } - }, - "typesVersions": { - "*": { - ".": ["./dist/types/index.d.ts"], - "bridge-mode": ["./dist/types/bridge-mode/index.d.ts"], - "bridge-mode-browser": ["./dist/types/bridge-mode/browser.d.ts"], - "utils": ["./dist/types/common/utils.d.ts"], - "ui-utils": ["./dist/types/common/ui-utils.d.ts"], - "puppeteer": ["./dist/types/puppeteer/index.d.ts"], - "puppeteer-agent-launcher": [ - "./dist/types/puppeteer/agent-launcher.d.ts" - ], - "playwright": ["./dist/types/playwright/index.d.ts"], - "playwright-report": ["./dist/types/playwright/reporter/index.d.ts"], - "playwright-reporter": ["./dist/types/playwright/reporter/index.d.ts"], - "playground": ["./dist/types/playground/index.d.ts"], - "midscene-playground": ["./dist/types/playground/bin.d.ts"], - "midscene-server": ["./dist/types/playground/server.d.ts"], - "chrome-extension": ["./dist/types/chrome-extension/index.d.ts"], - "yaml": ["./dist/types/yaml/index.d.ts"], - "agent": ["./dist/types/common/agent.d.ts"] + "require": "./dist/lib/common/agent.js", + "import": "./dist/es/common/agent.mjs" } }, "watch": { @@ -116,7 +106,6 @@ "dev": "npm run build && npx npm-watch", "dev:server": "npm run build && ./bin/midscene-playground", "build": "rslib build", - "postbuild": "node scripts/check-exports.js", "build:watch": "rslib build --watch", "test": "vitest --run", "test:u": "vitest --run -u", @@ -150,7 +139,6 @@ "socket.io-client": "4.8.1" }, "devDependencies": { - "@microsoft/api-extractor": "^7.52.10", "@playwright/test": "^1.44.1", "@rslib/core": "^0.11.2", "@types/chrome": "0.0.279", diff --git a/packages/web-integration/rslib.config.ts b/packages/web-integration/rslib.config.ts index f6b49d5a0..c24a38a8c 100644 --- a/packages/web-integration/rslib.config.ts +++ b/packages/web-integration/rslib.config.ts @@ -24,7 +24,6 @@ export default defineConfig({ root: 'dist/lib', }, }, - autoExtension: false, format: 'cjs', syntax: 'es2020', }, @@ -35,7 +34,6 @@ export default defineConfig({ root: 'dist/es', }, }, - autoExtension: false, format: 'esm', syntax: 'es2020', dts: { diff --git a/packages/web-integration/scripts/check-exports.js b/packages/web-integration/scripts/check-exports.js deleted file mode 100644 index f0da67035..000000000 --- a/packages/web-integration/scripts/check-exports.js +++ /dev/null @@ -1,88 +0,0 @@ -// scripts/check-exports.js -const fs = require('node:fs'); -const path = require('node:path'); - -function checkConsistency() { - const pkgPath = path.resolve(__dirname, '../package.json'); - const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8')); - const exports = pkg.exports; - const typesVersions = pkg.typesVersions ? pkg.typesVersions['*'] || {} : {}; - const rootDir = path.dirname(pkgPath); - - const errors = []; - - // Check if each exports entry has a corresponding typesVersions entry, and check if files exist - for (const [key, value] of Object.entries(exports)) { - // Check if types file exists - const typesPath = value.types; - if (typesPath) { - const absoluteTypesPath = path.resolve(rootDir, typesPath); - if (!fs.existsSync(absoluteTypesPath)) { - errors.push(`File does not exist: ${typesPath}`); - } - - const tsVersionPath = typesVersions[key.replace('./', '')]; - if (!tsVersionPath) { - errors.push(`Missing typesVersions entry: ${key}`); - } else if (tsVersionPath[0] !== typesPath) { - errors.push( - `Path mismatch: exports[${key}].types = ${typesPath}, typesVersions[${key}] = ${tsVersionPath[0]}`, - ); - } - } - - // Check if import and require files exist - if (value.import) { - const importPath = value.import; - const absoluteImportPath = path.resolve(rootDir, importPath); - if (!fs.existsSync(absoluteImportPath)) { - errors.push(`File does not exist: ${importPath}`); - } - } - - if (value.require) { - const requirePath = value.require; - const absoluteRequirePath = path.resolve(rootDir, requirePath); - if (!fs.existsSync(absoluteRequirePath)) { - errors.push(`File does not exist: ${requirePath}`); - } - } - - // If value is a string, directly check if the file exists - if (typeof value === 'string') { - const absolutePath = path.resolve(rootDir, value); - if (!fs.existsSync(absolutePath)) { - errors.push(`File does not exist: ${value}`); - } - } - } - - // Check if each entry in typesVersions has a corresponding entry in exports - for (const [key, value] of Object.entries(typesVersions)) { - const exportKey = key === '.' ? key : `./${key}`; - if (!exports[exportKey]) { - errors.push(`Missing exports entry: ${exportKey}`); - } - - // Check if files in typesVersions exist - if (Array.isArray(value) && value.length > 0) { - const typePath = value[0]; - const absoluteTypePath = path.resolve(rootDir, typePath); - if (!fs.existsSync(absoluteTypePath)) { - errors.push(`File does not exist: ${typePath}`); - } - } - } - - if (errors.length > 0) { - console.error('Found issues with exports and typesVersions:'); - errors.forEach((err) => console.error(` - ${err}`)); - process.exit(1); - } else { - console.log( - 'exports and typesVersions configuration is consistent and all files exist ✓', - ); - } -} - -checkConsistency(); diff --git a/packages/web-integration/src/chrome-extension/cdpInput.ts b/packages/web-integration/src/chrome-extension/cdpInput.ts index 199407637..3ff05101a 100644 --- a/packages/web-integration/src/chrome-extension/cdpInput.ts +++ b/packages/web-integration/src/chrome-extension/cdpInput.ts @@ -10,7 +10,7 @@ import { type KeyDefinition, type KeyInput, _keyDefinitions, -} from '@midscene/shared/keyboard-layout'; +} from '@midscene/shared/us-keyboard-layout'; import { assert } from '@midscene/shared/utils'; type KeyDescription = Required< diff --git a/packages/web-integration/src/puppeteer/base-page.ts b/packages/web-integration/src/puppeteer/base-page.ts index 4f15fa6fb..eed50e2bf 100644 --- a/packages/web-integration/src/puppeteer/base-page.ts +++ b/packages/web-integration/src/puppeteer/base-page.ts @@ -8,11 +8,11 @@ import { sleep } from '@midscene/core/utils'; import { DEFAULT_WAIT_FOR_NAVIGATION_TIMEOUT } from '@midscene/shared/constants'; import type { ElementInfo } from '@midscene/shared/extractor'; import { treeToList } from '@midscene/shared/extractor'; +import { getDebug } from '@midscene/shared/logger'; import { getElementInfosScriptContent, getExtraReturnLogic, -} from '@midscene/shared/fs'; -import { getDebug } from '@midscene/shared/logger'; +} from '@midscene/shared/node'; import { assert } from '@midscene/shared/utils'; import type { Page as PlaywrightPage } from 'playwright'; import type { Page as PuppeteerPage } from 'puppeteer'; diff --git a/packages/web-integration/tests/unit-test/__snapshots__/task-cache.test.ts.snap b/packages/web-integration/tests/unit-test/__snapshots__/task-cache.test.ts.snap index da9802341..30b03d97f 100644 --- a/packages/web-integration/tests/unit-test/__snapshots__/task-cache.test.ts.snap +++ b/packages/web-integration/tests/unit-test/__snapshots__/task-cache.test.ts.snap @@ -37,7 +37,7 @@ exports[`TaskCache > save and retrieve cache from file 2`] = ` `; exports[`TaskCache > save and retrieve cache from file 3`] = ` -"midsceneVersion: 0.26.1 +"midsceneVersion: 0.26.2 cacheId: cacheId caches: - type: plan @@ -52,7 +52,7 @@ caches: `; exports[`TaskCache > should create cache file 1`] = ` -"midsceneVersion: 0.26.1 +"midsceneVersion: 0.26.2 cacheId: cacheId caches: - type: plan diff --git a/packages/web-integration/tests/unit-test/web-extractor.test.ts b/packages/web-integration/tests/unit-test/web-extractor.test.ts index 38e2c6a45..bacb69131 100644 --- a/packages/web-integration/tests/unit-test/web-extractor.test.ts +++ b/packages/web-integration/tests/unit-test/web-extractor.test.ts @@ -3,12 +3,12 @@ import { parseContextFromWebPage } from '@/common/utils'; import StaticPage from '@/playground/static-page'; import type { WebElementInfo } from '@/web-element'; import { traverseTree, treeToList } from '@midscene/shared/extractor'; -import { getElementInfosScriptContent } from '@midscene/shared/fs'; import { compositeElementInfoImg, imageInfoOfBase64, saveBase64Image, } from '@midscene/shared/img'; +import { getElementInfosScriptContent } from '@midscene/shared/node'; import { createServer } from 'http-server'; import { beforeAll, describe, expect, it } from 'vitest'; import { launchPage } from '../ai/web/puppeteer/utils'; diff --git a/packages/web-integration/tsconfig.json b/packages/web-integration/tsconfig.json index d7d577549..deb32e80f 100644 --- a/packages/web-integration/tsconfig.json +++ b/packages/web-integration/tsconfig.json @@ -8,7 +8,7 @@ "isolatedModules": true, "jsx": "preserve", "lib": ["DOM", "ESNext"], - "moduleResolution": "node", + "moduleResolution": "bundler", "paths": { "@/*": ["./src/*"] }, @@ -17,8 +17,18 @@ "rootDir": "./src", "skipLibCheck": true, "strict": true, - "module": "ESNext" + "module": "ESNext", + "composite": true, + "declarationDir": "dist/types" }, "exclude": ["node_modules"], - "include": ["src", "./vitest.config"] + "include": ["src", "./vitest.config"], + "references": [ + { + "path": "../core" + }, + { + "path": "../shared" + } + ] } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9571b7543..194a6128d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -123,6 +123,9 @@ importers: '@rsbuild/plugin-svgr': specifier: ^1.1.1 version: 1.2.0(@rsbuild/core@1.3.22)(typescript@5.8.3) + '@rsbuild/plugin-type-check': + specifier: 1.2.3 + version: 1.2.3(@rsbuild/core@1.3.22)(@rspack/core@1.4.11)(typescript@5.8.3) '@types/react': specifier: ^18.3.1 version: 18.3.23 @@ -232,6 +235,9 @@ importers: less: specifier: ^4.2.0 version: 4.2.2 + openai: + specifier: 4.81.0 + version: 4.81.0(ws@8.18.3)(zod@3.25.76) tailwindcss: specifier: 4.1.11 version: 4.1.11 @@ -266,6 +272,9 @@ importers: '@rsbuild/plugin-react': specifier: ^1.3.1 version: 1.3.1(@rsbuild/core@1.3.22) + '@rsbuild/plugin-type-check': + specifier: 1.2.3 + version: 1.2.3(@rsbuild/core@1.3.22)(@rspack/core@1.4.11)(typescript@5.8.3) '@types/react': specifier: ^18.3.1 version: 18.3.23 @@ -744,9 +753,6 @@ importers: specifier: ^0.34.3 version: 0.34.3 devDependencies: - '@microsoft/api-extractor': - specifier: ^7.52.10 - version: 7.52.10(@types/node@18.19.62) '@rslib/core': specifier: ^0.11.2 version: 0.11.2(@microsoft/api-extractor@7.52.10(@types/node@18.19.62))(typescript@5.8.3) @@ -923,9 +929,6 @@ importers: specifier: 4.8.1 version: 4.8.1 devDependencies: - '@microsoft/api-extractor': - specifier: ^7.52.10 - version: 7.52.10(@types/node@18.19.62) '@playwright/test': specifier: ^1.44.1 version: 1.44.1 @@ -13168,7 +13171,7 @@ snapshots: dependencies: deepmerge: 4.3.1 json5: 2.2.3 - reduce-configs: 1.1.0 + reduce-configs: 1.1.1 ts-checker-rspack-plugin: 1.1.4(@rspack/core@1.4.11)(typescript@5.8.3) optionalDependencies: '@rsbuild/core': 1.3.22