From 4d27d49752a32e00e111189a49b2ba2c75ee14df Mon Sep 17 00:00:00 2001 From: Simon <10131203+gaomeng1900@users.noreply.github.com> Date: Sun, 12 Apr 2026 02:04:21 +0800 Subject: [PATCH 1/3] refactor(setup): upgrade to TypeScript 6 with source-first monorepo resolution --- AGENTS.md | 2 +- package-lock.json | 8 ++-- package.json | 7 +-- packages/core/package.json | 26 ++++++---- packages/core/tsconfig.dts.json | 9 ---- packages/core/tsconfig.json | 20 ++------ packages/core/vite.config.js | 10 +++- .../extension/src/agent/TabsController.ts | 8 ++-- packages/extension/tsconfig.json | 21 ++------ packages/llms/package.json | 26 ++++++---- packages/llms/tsconfig.dts.json | 9 ---- packages/llms/tsconfig.json | 6 +-- packages/llms/vite.config.js | 12 ++++- packages/page-agent/package.json | 26 ++++++---- packages/page-agent/tsconfig.dts.json | 9 ---- packages/page-agent/tsconfig.json | 24 ++-------- packages/page-agent/vite.config.js | 10 +++- packages/page-agent/vite.iife.config.js | 9 +--- packages/page-controller/package.json | 26 ++++++---- .../src/dom/dom_tree/index.d.ts | 16 +++++++ packages/page-controller/tsconfig.dts.json | 9 ---- packages/page-controller/tsconfig.json | 6 +-- packages/page-controller/vite.config.js | 10 +++- packages/ui/package.json | 26 ++++++---- packages/ui/tsconfig.dts.json | 9 ---- packages/ui/tsconfig.json | 6 +-- packages/ui/vite.config.js | 10 +++- packages/website/package.json | 3 +- packages/website/tsconfig.json | 27 ++--------- packages/website/vite.config.js | 9 ---- scripts/prepare-publish.js | 48 +++++++++++++++++++ scripts/restore-dev.js | 45 +++++++++++++++++ tsconfig.base.json | 9 ++-- tsconfig.json | 14 ------ tsconfig.typecheck.json | 25 ++++++++++ 35 files changed, 305 insertions(+), 235 deletions(-) delete mode 100644 packages/core/tsconfig.dts.json delete mode 100644 packages/llms/tsconfig.dts.json delete mode 100644 packages/page-agent/tsconfig.dts.json create mode 100644 packages/page-controller/src/dom/dom_tree/index.d.ts delete mode 100644 packages/page-controller/tsconfig.dts.json delete mode 100644 packages/ui/tsconfig.dts.json create mode 100644 scripts/prepare-publish.js create mode 100644 scripts/restore-dev.js delete mode 100644 tsconfig.json create mode 100644 tsconfig.typecheck.json diff --git a/AGENTS.md b/AGENTS.md index 5252909..8a0309e 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -21,7 +21,7 @@ Internal packages: npm start # Start website dev server npm run build # Build all packages npm run build:libs # Build all libraries -npm run lint # ESLint with TypeScript strict rules +npm run lint # ESLint npm run zip -w @page-agent/ext # Zip the extension package ``` diff --git a/package-lock.json b/package-lock.json index 206de67..3bbae75 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "husky": "^9.1.7", "lint-staged": "^16.4.0", "prettier": "^3.8.1", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "typescript-eslint": "^8.58.1", "unplugin-dts": "^1.0.0-beta.6", "vite": "^7.3.2", @@ -11349,9 +11349,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "5.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", - "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.2.tgz", + "integrity": "sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==", "dev": true, "license": "Apache-2.0", "bin": { diff --git a/package.json b/package.json index 725782c..803dd08 100644 --- a/package.json +++ b/package.json @@ -33,8 +33,9 @@ "build:website": "npm run build:website --workspace=@page-agent/website", "build:ext": "npm run build:libs && npm run zip -w @page-agent/ext", "version": "node scripts/sync-version.js", + "typecheck": "tsc --noEmit -p tsconfig.typecheck.json && tsc --noEmit -p packages/extension/tsconfig.json", "lint": "eslint .", - "cleanup": "rm -rf packages/*/dist", + "cleanup": "rm -rf packages/*/dist && rm -rf packages/*/.output", "prepare": "husky || true" }, "devDependencies": { @@ -55,7 +56,7 @@ "husky": "^9.1.7", "lint-staged": "^16.4.0", "prettier": "^3.8.1", - "typescript": "^5.9.3", + "typescript": "^6.0.2", "typescript-eslint": "^8.58.1", "unplugin-dts": "^1.0.0-beta.6", "vite": "^7.3.2", @@ -63,7 +64,7 @@ "vite-plugin-css-injected-by-js": "^4.0.1" }, "overrides": { - "typescript": "^5.9.3", + "typescript": "^6.0.2", "@vitejs/plugin-react": "^5.2.0" }, "lint-staged": { diff --git a/packages/core/package.json b/packages/core/package.json index dbafb46..f58864d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,14 +3,24 @@ "private": false, "version": "1.7.1", "type": "module", - "main": "./dist/esm/page-agent-core.js", - "module": "./dist/esm/page-agent-core.js", - "types": "./dist/esm/PageAgentCore.d.ts", + "main": "./src/PageAgentCore.ts", + "types": "./src/PageAgentCore.ts", "exports": { ".": { - "types": "./dist/esm/PageAgentCore.d.ts", - "import": "./dist/esm/page-agent-core.js", - "default": "./dist/esm/page-agent-core.js" + "types": "./src/PageAgentCore.ts", + "default": "./src/PageAgentCore.ts" + } + }, + "publishConfig": { + "main": "./dist/esm/page-agent-core.js", + "module": "./dist/esm/page-agent-core.js", + "types": "./dist/esm/PageAgentCore.d.ts", + "exports": { + ".": { + "types": "./dist/esm/PageAgentCore.d.ts", + "import": "./dist/esm/page-agent-core.js", + "default": "./dist/esm/page-agent-core.js" + } } }, "files": [ @@ -39,8 +49,8 @@ "scripts": { "build": "vite build", "dev:iife": "concurrently \"vite build --config vite.iife.config.js --watch\" \"npx serve dist/iife -p 5174\"", - "prepublishOnly": "node -e \"const fs=require('fs');['README.md','LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['README.md','LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/prepare-publish.js", + "postpublish": "node ../../scripts/restore-dev.js" }, "dependencies": { "chalk": "^5.6.2", diff --git a/packages/core/tsconfig.dts.json b/packages/core/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/core/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/core/tsconfig.json b/packages/core/tsconfig.json index 81291bd..d45abe9 100644 --- a/packages/core/tsconfig.json +++ b/packages/core/tsconfig.json @@ -1,22 +1,8 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist", - "paths": { - // - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"] - } + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, - "include": ["**/*.ts"], - "exclude": ["dist", "node_modules"], - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" } - ] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/core/vite.config.js b/packages/core/vite.config.js index f8d58a1..c8061a4 100644 --- a/packages/core/vite.config.js +++ b/packages/core/vite.config.js @@ -11,7 +11,15 @@ const __dirname = dirname(fileURLToPath(import.meta.url)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/extension/src/agent/TabsController.ts b/packages/extension/src/agent/TabsController.ts index 9d77ad5..f5457a5 100644 --- a/packages/extension/src/agent/TabsController.ts +++ b/packages/extension/src/agent/TabsController.ts @@ -24,7 +24,7 @@ export class TabsController { currentTabId: number | null = null private disposed = false - private port: chrome.runtime.Port | null = null + private port?: chrome.runtime.Port private portRetries = 0 private windowId: number | null = null @@ -44,7 +44,7 @@ export class TabsController { this.currentTabId = null this.disposed = false - this.port = null + this.port = undefined this.portRetries = 0 this.windowId = null @@ -338,7 +338,7 @@ export class TabsController { }) this.port.onDisconnect.addListener(() => { - this.port = null + this.port = undefined if (this.disposed) return if (this.portRetries >= 7) { console.error(PREFIX, 'tab events port failed after 7 retries, giving up') @@ -354,7 +354,7 @@ export class TabsController { debug('dispose') this.disposed = true this.port?.disconnect() - this.port = null + this.port = undefined } } diff --git a/packages/extension/tsconfig.json b/packages/extension/tsconfig.json index 98a679a..04d525d 100644 --- a/packages/extension/tsconfig.json +++ b/packages/extension/tsconfig.json @@ -3,26 +3,11 @@ "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", "useDefineForClassFields": true, - "noEmit": false, - "allowImportingTsExtensions": false, "strictNullChecks": true, "jsx": "react-jsx", - "baseUrl": ".", + "types": ["node", "chrome"], "paths": { - // Self root - "@/*": ["src/*"], - - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"], - "@page-agent/core": ["../core/src/PageAgentCore.ts"], - "@page-agent/ui": ["../ui/src/index.ts"] + "@/*": ["./src/*"] } - }, - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" }, - { "path": "../core" }, - { "path": "../ui" } - ] + } } diff --git a/packages/llms/package.json b/packages/llms/package.json index abf74f9..9a520ed 100644 --- a/packages/llms/package.json +++ b/packages/llms/package.json @@ -2,14 +2,24 @@ "name": "@page-agent/llms", "version": "1.7.1", "type": "module", - "main": "./dist/lib/page-agent-llms.js", - "module": "./dist/lib/page-agent-llms.js", - "types": "./dist/lib/index.d.ts", + "main": "./src/index.ts", + "types": "./src/index.ts", "exports": { ".": { - "types": "./dist/lib/index.d.ts", - "import": "./dist/lib/page-agent-llms.js", - "default": "./dist/lib/page-agent-llms.js" + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "publishConfig": { + "main": "./dist/lib/page-agent-llms.js", + "module": "./dist/lib/page-agent-llms.js", + "types": "./dist/lib/index.d.ts", + "exports": { + ".": { + "types": "./dist/lib/index.d.ts", + "import": "./dist/lib/page-agent-llms.js", + "default": "./dist/lib/page-agent-llms.js" + } } }, "files": [ @@ -33,8 +43,8 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node -e \"const fs=require('fs');['LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/prepare-publish.js", + "postpublish": "node ../../scripts/restore-dev.js" }, "dependencies": { "chalk": "^5.6.2" diff --git a/packages/llms/tsconfig.dts.json b/packages/llms/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/llms/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/llms/tsconfig.json b/packages/llms/tsconfig.json index b6973ce..fb30544 100644 --- a/packages/llms/tsconfig.json +++ b/packages/llms/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist" + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, "include": ["**/*.ts"], "exclude": ["dist", "node_modules"] diff --git a/packages/llms/vite.config.js b/packages/llms/vite.config.js index 13e599e..a061c36 100644 --- a/packages/llms/vite.config.js +++ b/packages/llms/vite.config.js @@ -11,7 +11,17 @@ console.log(chalk.cyan(`📦 Building @page-agent/llms`)) export default defineConfig({ clearScreen: false, - plugins: [dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true })], + plugins: [ + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), + ], publicDir: false, esbuild: { keepNames: true, diff --git a/packages/page-agent/package.json b/packages/page-agent/package.json index d250da0..fc753a0 100644 --- a/packages/page-agent/package.json +++ b/packages/page-agent/package.json @@ -3,14 +3,24 @@ "private": false, "version": "1.7.1", "type": "module", - "main": "./dist/esm/page-agent.js", - "module": "./dist/esm/page-agent.js", - "types": "./dist/esm/PageAgent.d.ts", + "main": "./src/PageAgent.ts", + "types": "./src/PageAgent.ts", "exports": { ".": { - "types": "./dist/esm/PageAgent.d.ts", - "import": "./dist/esm/page-agent.js", - "default": "./dist/esm/page-agent.js" + "types": "./src/PageAgent.ts", + "default": "./src/PageAgent.ts" + } + }, + "publishConfig": { + "main": "./dist/esm/page-agent.js", + "module": "./dist/esm/page-agent.js", + "types": "./dist/esm/PageAgent.d.ts", + "exports": { + ".": { + "types": "./dist/esm/PageAgent.d.ts", + "import": "./dist/esm/page-agent.js", + "default": "./dist/esm/page-agent.js" + } } }, "files": [ @@ -40,8 +50,8 @@ "build": "vite build && npm run build:demo", "build:demo": "vite build --config vite.iife.config.js", "dev:demo": "concurrently \"vite build --config vite.iife.config.js --watch\" \"npx serve dist/iife -p 5174\"", - "prepublishOnly": "node -e \"const fs=require('fs');['README.md','LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['README.md','LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/prepare-publish.js", + "postpublish": "node ../../scripts/restore-dev.js" }, "dependencies": { "@page-agent/core": "1.7.1", diff --git a/packages/page-agent/tsconfig.dts.json b/packages/page-agent/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/page-agent/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/page-agent/tsconfig.json b/packages/page-agent/tsconfig.json index 8f1362c..d45abe9 100644 --- a/packages/page-agent/tsconfig.json +++ b/packages/page-agent/tsconfig.json @@ -1,26 +1,8 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist", - "paths": { - // - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"], - "@page-agent/core": ["../core/src/PageAgentCore.ts"], - "@page-agent/ui": ["../ui/src/index.ts"] - } + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, - "include": ["**/*.ts"], - "exclude": ["dist", "node_modules"], - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" }, - { "path": "../core" }, - { "path": "../ui" } - ] + "include": ["src/**/*.ts"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/page-agent/vite.config.js b/packages/page-agent/vite.config.js index fe286b1..063b210 100644 --- a/packages/page-agent/vite.config.js +++ b/packages/page-agent/vite.config.js @@ -11,7 +11,15 @@ const __dirname = dirname(fileURLToPath(import.meta.url)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/page-agent/vite.iife.config.js b/packages/page-agent/vite.iife.config.js index caca982..24bb1bb 100644 --- a/packages/page-agent/vite.iife.config.js +++ b/packages/page-agent/vite.iife.config.js @@ -24,14 +24,7 @@ export default defineConfig(() => ({ esbuild: { keepNames: true, }, - resolve: { - alias: { - '@page-agent/page-controller': resolve(__dirname, '../page-controller/src/PageController.ts'), - '@page-agent/llms': resolve(__dirname, '../llms/src/index.ts'), - '@page-agent/core': resolve(__dirname, '../core/src/PageAgentCore.ts'), - '@page-agent/ui': resolve(__dirname, '../ui/src/index.ts'), - }, - }, + resolve: {}, build: { lib: { entry: resolve(__dirname, 'src/demo.ts'), diff --git a/packages/page-controller/package.json b/packages/page-controller/package.json index 5bd9d00..cfb58a0 100644 --- a/packages/page-controller/package.json +++ b/packages/page-controller/package.json @@ -2,14 +2,24 @@ "name": "@page-agent/page-controller", "version": "1.7.1", "type": "module", - "main": "./dist/lib/page-controller.js", - "module": "./dist/lib/page-controller.js", - "types": "./dist/lib/PageController.d.ts", + "main": "./src/PageController.ts", + "types": "./src/PageController.ts", "exports": { ".": { - "types": "./dist/lib/PageController.d.ts", - "import": "./dist/lib/page-controller.js", - "default": "./dist/lib/page-controller.js" + "types": "./src/PageController.ts", + "default": "./src/PageController.ts" + } + }, + "publishConfig": { + "main": "./dist/lib/page-controller.js", + "module": "./dist/lib/page-controller.js", + "types": "./dist/lib/PageController.d.ts", + "exports": { + ".": { + "types": "./dist/lib/PageController.d.ts", + "import": "./dist/lib/page-controller.js", + "default": "./dist/lib/page-controller.js" + } } }, "files": [ @@ -32,8 +42,8 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node -e \"const fs=require('fs');['LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/prepare-publish.js", + "postpublish": "node ../../scripts/restore-dev.js" }, "dependencies": { "ai-motion": "^0.4.8" diff --git a/packages/page-controller/src/dom/dom_tree/index.d.ts b/packages/page-controller/src/dom/dom_tree/index.d.ts new file mode 100644 index 0000000..4e37d52 --- /dev/null +++ b/packages/page-controller/src/dom/dom_tree/index.d.ts @@ -0,0 +1,16 @@ +import type { FlatDomTree } from './type' + +interface DomTreeArgs { + doHighlightElements?: boolean + focusHighlightIndex?: number + viewportExpansion?: number + debugMode?: boolean + interactiveBlacklist?: Element[] + interactiveWhitelist?: Element[] + highlightOpacity?: number + highlightLabelOpacity?: number +} + +declare const domTree: (args?: DomTreeArgs) => FlatDomTree + +export default domTree diff --git a/packages/page-controller/tsconfig.dts.json b/packages/page-controller/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/page-controller/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/page-controller/tsconfig.json b/packages/page-controller/tsconfig.json index 058b45d..4344771 100644 --- a/packages/page-controller/tsconfig.json +++ b/packages/page-controller/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist" + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, "include": ["**/*.ts", "**/*.js"], "exclude": ["dist", "node_modules"] diff --git a/packages/page-controller/vite.config.js b/packages/page-controller/vite.config.js index 3588c6c..b64fee3 100644 --- a/packages/page-controller/vite.config.js +++ b/packages/page-controller/vite.config.js @@ -13,7 +13,15 @@ console.log(chalk.cyan(`📦 Building @page-agent/page-controller`)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/ui/package.json b/packages/ui/package.json index bc23678..f98f06c 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -2,14 +2,24 @@ "name": "@page-agent/ui", "version": "1.7.1", "type": "module", - "main": "./dist/lib/page-agent-ui.js", - "module": "./dist/lib/page-agent-ui.js", - "types": "./dist/lib/index.d.ts", + "main": "./src/index.ts", + "types": "./src/index.ts", "exports": { ".": { - "types": "./dist/lib/index.d.ts", - "import": "./dist/lib/page-agent-ui.js", - "default": "./dist/lib/page-agent-ui.js" + "types": "./src/index.ts", + "default": "./src/index.ts" + } + }, + "publishConfig": { + "main": "./dist/lib/page-agent-ui.js", + "module": "./dist/lib/page-agent-ui.js", + "types": "./dist/lib/index.d.ts", + "exports": { + ".": { + "types": "./dist/lib/index.d.ts", + "import": "./dist/lib/page-agent-ui.js", + "default": "./dist/lib/page-agent-ui.js" + } } }, "files": [ @@ -32,7 +42,7 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node -e \"const fs=require('fs');['LICENSE'].forEach(f=>fs.copyFileSync('../../'+f,f))\"", - "postpublish": "node -e \"['LICENSE'].forEach(f=>{try{require('fs').unlinkSync(f)}catch{}})\"" + "prepublishOnly": "node ../../scripts/prepare-publish.js", + "postpublish": "node ../../scripts/restore-dev.js" } } diff --git a/packages/ui/tsconfig.dts.json b/packages/ui/tsconfig.dts.json deleted file mode 100644 index 70eceb9..0000000 --- a/packages/ui/tsconfig.dts.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - // @workaround DTS bug - // dts do not work with monorepo path mapping - // disable path mapping for it - "paths": {} - } -} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index 058b45d..4344771 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,11 +1,7 @@ { "extends": "../../tsconfig.base.json", "compilerOptions": { - "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist" + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo" }, "include": ["**/*.ts", "**/*.js"], "exclude": ["dist", "node_modules"] diff --git a/packages/ui/vite.config.js b/packages/ui/vite.config.js index fee1231..6a928e2 100644 --- a/packages/ui/vite.config.js +++ b/packages/ui/vite.config.js @@ -13,7 +13,15 @@ console.log(chalk.cyan(`📦 Building @page-agent/ui`)) export default defineConfig({ clearScreen: false, plugins: [ - dts({ tsconfigPath: './tsconfig.dts.json', bundleTypes: true }), + dts({ + bundleTypes: true, + compilerOptions: { + composite: true, + noEmit: false, + emitDeclarationOnly: true, + declaration: true, + }, + }), cssInjectedByJsPlugin({ relativeCSSInjection: true }), ], publicDir: false, diff --git a/packages/website/package.json b/packages/website/package.json index 9f32f4a..385942f 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -6,8 +6,7 @@ "scripts": { "dev": "vite --host 0.0.0.0", "build:website": "vite build", - "preview": "vite preview", - "typecheck": "tsc --noEmit" + "preview": "vite preview" }, "devDependencies": { "@radix-ui/react-icons": "^1.3.2", diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json index 9e1dda9..b9fbd7e 100644 --- a/packages/website/tsconfig.json +++ b/packages/website/tsconfig.json @@ -2,31 +2,10 @@ "extends": "../../tsconfig.base.json", "compilerOptions": { "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - "noEmit": false, - "allowImportingTsExtensions": false, - "baseUrl": ".", - "outDir": "dist", "paths": { - // Self root - "@/*": ["src/*"], - - "@page-agent/llms": ["../llms/src/index.ts"], - "@page-agent/page-controller": ["../page-controller/src/PageController.ts"], - "@page-agent/core": ["../core/src/PageAgentCore.ts"], - "@page-agent/ui": ["../ui/src/index.ts"], - - "page-agent": ["../page-agent/src/PageAgent.ts"] + "@/*": ["./src/*"] } }, - "include": ["**/*.ts", "**/*.tsx"], - "exclude": ["dist", "node_modules"], - "references": [ - // - { "path": "../llms" }, - { "path": "../page-controller" }, - { "path": "../core" }, - { "path": "../ui" }, - - { "path": "../page-agent" } - ] + "include": ["src/**/*.ts", "src/**/*.tsx"], + "exclude": ["dist", "node_modules"] } diff --git a/packages/website/vite.config.js b/packages/website/vite.config.js index 4001337..fdf45a0 100644 --- a/packages/website/vite.config.js +++ b/packages/website/vite.config.js @@ -90,16 +90,7 @@ export default defineConfig(({ mode }) => ({ }, resolve: { alias: { - // Self root '@': resolve(__dirname, 'src'), - - // Monorepo packages (always bundle local code instead of npm versions) - '@page-agent/page-controller': resolve(__dirname, '../page-controller/src/PageController.ts'), - '@page-agent/llms': resolve(__dirname, '../llms/src/index.ts'), - '@page-agent/core': resolve(__dirname, '../core/src/PageAgentCore.ts'), - '@page-agent/ui': resolve(__dirname, '../ui/src/index.ts'), - - 'page-agent': resolve(__dirname, '../page-agent/src/PageAgent.ts'), }, }, define: { diff --git a/scripts/prepare-publish.js b/scripts/prepare-publish.js new file mode 100644 index 0000000..1880afe --- /dev/null +++ b/scripts/prepare-publish.js @@ -0,0 +1,48 @@ +#!/usr/bin/env node +/** + * Swap source-first dev entrypoints for dist-first publish entrypoints. + * + * This script is called by `prepublishOnly` in each publishable package. + * It reads the `publishConfig` object and promotes its fields to top level, + * storing the original dev fields in `_devConfig` so `restore-dev.js` can undo it. + * + * Usage: node ../../scripts/prepare-publish.js + */ +import { copyFileSync, readFileSync, writeFileSync } from 'fs' +import { join } from 'path' + +const pkgPath = join(process.cwd(), 'package.json') +const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) + +const publishConfig = pkg.publishConfig +if (!publishConfig) { + console.log(' No publishConfig found, skipping manifest rewrite.') + process.exit(0) +} + +const PUBLISH_FIELDS = ['main', 'module', 'types', 'exports'] + +const devConfig = {} +for (const field of PUBLISH_FIELDS) { + if (field in publishConfig) { + devConfig[field] = pkg[field] + pkg[field] = publishConfig[field] + } +} + +pkg._devConfig = devConfig +delete pkg.publishConfig + +writeFileSync(pkgPath, JSON.stringify(pkg, null, ' ') + '\n') +console.log(` ✓ Manifest rewritten for publish (${Object.keys(devConfig).join(', ')})`) + +const root = join(process.cwd(), '../..') +copyFileSync(join(root, 'LICENSE'), join(process.cwd(), 'LICENSE')) +console.log(' ✓ LICENSE copied') + +const readmeSrc = join(root, 'README.md') +const readmeDest = join(process.cwd(), 'README.md') +if (pkg.name === 'page-agent') { + copyFileSync(readmeSrc, readmeDest) + console.log(' ✓ README.md copied') +} diff --git a/scripts/restore-dev.js b/scripts/restore-dev.js new file mode 100644 index 0000000..e29bd90 --- /dev/null +++ b/scripts/restore-dev.js @@ -0,0 +1,45 @@ +#!/usr/bin/env node +/** + * Restore source-first dev entrypoints after publish. + * + * Undoes what `prepare-publish.js` did by reading `_devConfig` + * and reinstating the original dev fields + `publishConfig`. + * + * Usage: node ../../scripts/restore-dev.js + */ +import { readFileSync, rmSync, writeFileSync } from 'fs' +import { join } from 'path' + +const pkgPath = join(process.cwd(), 'package.json') +const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) + +const devConfig = pkg._devConfig +if (!devConfig) { + console.log(' No _devConfig found, skipping manifest restore.') + process.exit(0) +} + +const PUBLISH_FIELDS = ['main', 'module', 'types', 'exports'] + +const publishConfig = {} +for (const field of PUBLISH_FIELDS) { + if (field in devConfig) { + publishConfig[field] = pkg[field] + pkg[field] = devConfig[field] + } +} + +pkg.publishConfig = publishConfig +delete pkg._devConfig + +writeFileSync(pkgPath, JSON.stringify(pkg, null, ' ') + '\n') +console.log(` ✓ Manifest restored for dev (${Object.keys(publishConfig).join(', ')})`) + +const licensePath = join(process.cwd(), 'LICENSE') +rmSync(licensePath, { force: true }) +console.log(' ✓ LICENSE removed') + +if (pkg.name === 'page-agent') { + rmSync(join(process.cwd(), 'README.md'), { force: true }) + console.log(' ✓ README.md removed') +} diff --git a/tsconfig.base.json b/tsconfig.base.json index a31f78c..927d771 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,16 +1,13 @@ { "compilerOptions": { - "composite": true, "target": "ES2024", "useDefineForClassFields": true, - "lib": ["ES2024", "DOM", "DOM.Iterable"], + "lib": ["ES2024", "DOM"], "module": "ESNext", "skipLibCheck": true, "allowJs": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.tsbuildinfo", - // "baseUrl": "src", - "baseUrl": ".", "outDir": "dist", // "incremental": true, @@ -27,6 +24,8 @@ "noUnusedParameters": false, "erasableSyntaxOnly": true, "noFallthroughCasesInSwitch": true, - "noUncheckedSideEffectImports": true + "noUncheckedSideEffectImports": true, + + "types": ["node"] } } diff --git a/tsconfig.json b/tsconfig.json deleted file mode 100644 index f3616a9..0000000 --- a/tsconfig.json +++ /dev/null @@ -1,14 +0,0 @@ -// this is only for IDE ts language server to work. -// do not use this for building or linting. -{ - "extends": "./tsconfig.base.json", - "references": [ - { "path": "./packages/page-controller" }, - { "path": "./packages/ui" }, - { "path": "./packages/llms" }, - { "path": "./packages/page-agent" }, - { "path": "./packages/website" } - ], - "include": ["packages/*/src/**/*.ts", "packages/*/src/**/*.tsx"], - "exclude": ["node_modules", "dist", "packages/*/dist"] -} diff --git a/tsconfig.typecheck.json b/tsconfig.typecheck.json new file mode 100644 index 0000000..7965ad8 --- /dev/null +++ b/tsconfig.typecheck.json @@ -0,0 +1,25 @@ +// Unified typecheck config for all lib/website packages. +// Run: tsc --noEmit -p tsconfig.typecheck.json +// Extension is checked separately (WXT has its own tsconfig base). +// +// With source-first package.json exports, TS resolves @page-agent/* +// to sibling src/ via workspace symlinks — no paths mapping needed. +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "composite": false, + "noEmit": true, + "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.typecheck.tsbuildinfo", + "paths": { + "@/*": ["./packages/website/src/*"] + } + }, + "include": [ + "packages/llms/src/**/*", + "packages/page-controller/src/**/*", + "packages/ui/src/**/*", + "packages/core/src/**/*", + "packages/page-agent/src/**/*", + "packages/website/src/**/*" + ] +} From acfb336a9abc2864d68f70f06fae829b88d966bc Mon Sep 17 00:00:00 2001 From: Simon <10131203+gaomeng1900@users.noreply.github.com> Date: Sun, 12 Apr 2026 03:16:13 +0800 Subject: [PATCH 2/3] fix: pre-publish and post-publish hooks --- .gitignore | 3 ++ package.json | 1 + packages/core/package.json | 4 +-- packages/llms/package.json | 4 +-- packages/page-agent/package.json | 4 +-- packages/page-controller/package.json | 4 +-- packages/ui/package.json | 4 +-- scripts/post-publish.js | 30 +++++++++++++++++ scripts/pre-publish.js | 42 +++++++++++++++++++++++ scripts/prepare-publish.js | 48 --------------------------- scripts/restore-dev.js | 45 ------------------------- 11 files changed, 86 insertions(+), 103 deletions(-) create mode 100644 scripts/post-publish.js create mode 100644 scripts/pre-publish.js delete mode 100644 scripts/prepare-publish.js delete mode 100644 scripts/restore-dev.js diff --git a/.gitignore b/.gitignore index 0b911cf..c4776a4 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,9 @@ dist-ssr *.sw? .qoder +# publish backup +package.json.bak + # env files .env .env.* diff --git a/package.json b/package.json index 803dd08..0705ae6 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "build:website": "npm run build:website --workspace=@page-agent/website", "build:ext": "npm run build:libs && npm run zip -w @page-agent/ext", "version": "node scripts/sync-version.js", + "postpublish": "npm run postpublish --workspaces --if-present", "typecheck": "tsc --noEmit -p tsconfig.typecheck.json && tsc --noEmit -p packages/extension/tsconfig.json", "lint": "eslint .", "cleanup": "rm -rf packages/*/dist && rm -rf packages/*/.output", diff --git a/packages/core/package.json b/packages/core/package.json index f58864d..202e7ab 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -49,8 +49,8 @@ "scripts": { "build": "vite build", "dev:iife": "concurrently \"vite build --config vite.iife.config.js --watch\" \"npx serve dist/iife -p 5174\"", - "prepublishOnly": "node ../../scripts/prepare-publish.js", - "postpublish": "node ../../scripts/restore-dev.js" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "chalk": "^5.6.2", diff --git a/packages/llms/package.json b/packages/llms/package.json index 9a520ed..e56a205 100644 --- a/packages/llms/package.json +++ b/packages/llms/package.json @@ -43,8 +43,8 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node ../../scripts/prepare-publish.js", - "postpublish": "node ../../scripts/restore-dev.js" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "chalk": "^5.6.2" diff --git a/packages/page-agent/package.json b/packages/page-agent/package.json index fc753a0..4bd2ed8 100644 --- a/packages/page-agent/package.json +++ b/packages/page-agent/package.json @@ -50,8 +50,8 @@ "build": "vite build && npm run build:demo", "build:demo": "vite build --config vite.iife.config.js", "dev:demo": "concurrently \"vite build --config vite.iife.config.js --watch\" \"npx serve dist/iife -p 5174\"", - "prepublishOnly": "node ../../scripts/prepare-publish.js", - "postpublish": "node ../../scripts/restore-dev.js" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "@page-agent/core": "1.7.1", diff --git a/packages/page-controller/package.json b/packages/page-controller/package.json index cfb58a0..9ec3eb6 100644 --- a/packages/page-controller/package.json +++ b/packages/page-controller/package.json @@ -42,8 +42,8 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node ../../scripts/prepare-publish.js", - "postpublish": "node ../../scripts/restore-dev.js" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" }, "dependencies": { "ai-motion": "^0.4.8" diff --git a/packages/ui/package.json b/packages/ui/package.json index f98f06c..0eacaa5 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -42,7 +42,7 @@ "homepage": "https://alibaba.github.io/page-agent/", "scripts": { "build": "vite build", - "prepublishOnly": "node ../../scripts/prepare-publish.js", - "postpublish": "node ../../scripts/restore-dev.js" + "prepublishOnly": "node ../../scripts/pre-publish.js", + "postpublish": "node ../../scripts/post-publish.js" } } diff --git a/scripts/post-publish.js b/scripts/post-publish.js new file mode 100644 index 0000000..e429700 --- /dev/null +++ b/scripts/post-publish.js @@ -0,0 +1,30 @@ +#!/usr/bin/env node +/** + * Restore package.json from the backup created by pre-publish.js, + * then clean up temporary files (backup, LICENSE, README.md). + * + * Usage: node ../../scripts/post-publish.js (from a package dir) + */ +import { existsSync, readFileSync, renameSync, rmSync } from 'fs' +import { join } from 'path' + +const pkgPath = join(process.cwd(), 'package.json') +const bakPath = pkgPath + '.bak' + +if (!existsSync(bakPath)) { + console.log(' No backup found, nothing to restore.') + process.exit(0) +} + +const name = JSON.parse(readFileSync(pkgPath, 'utf-8')).name + +renameSync(bakPath, pkgPath) +console.log(' ✓ package.json restored from backup') + +rmSync(join(process.cwd(), 'LICENSE'), { force: true }) +console.log(' ✓ LICENSE removed') + +if (name === 'page-agent') { + rmSync(join(process.cwd(), 'README.md'), { force: true }) + console.log(' ✓ README.md removed') +} diff --git a/scripts/pre-publish.js b/scripts/pre-publish.js new file mode 100644 index 0000000..44dc929 --- /dev/null +++ b/scripts/pre-publish.js @@ -0,0 +1,42 @@ +#!/usr/bin/env node +/** + * Backup package.json, then rewrite it for publish: + * - Promote `publishConfig` fields to top level + * - Remove `publishConfig` (npm doesn't need the wrapper) + * - Copy LICENSE (and README.md for the main package) + * + * Usage: node ../../scripts/pre-publish.js (from a package dir) + */ +import { copyFileSync, readFileSync, writeFileSync } from 'fs' +import { join } from 'path' + +const pkgPath = join(process.cwd(), 'package.json') +const raw = readFileSync(pkgPath, 'utf-8') +const pkg = JSON.parse(raw) + +const publishConfig = pkg.publishConfig +if (!publishConfig) { + console.log(' No publishConfig found, skipping manifest rewrite.') + process.exit(0) +} + +// Backup the original file byte-for-byte +copyFileSync(pkgPath, pkgPath + '.bak') +console.log(' ✓ package.json backed up') + +for (const [field, value] of Object.entries(publishConfig)) { + pkg[field] = value +} +delete pkg.publishConfig + +writeFileSync(pkgPath, JSON.stringify(pkg, null, ' ') + '\n') +console.log(` ✓ Manifest rewritten for publish (${Object.keys(publishConfig).join(', ')})`) + +const root = join(process.cwd(), '../..') +copyFileSync(join(root, 'LICENSE'), join(process.cwd(), 'LICENSE')) +console.log(' ✓ LICENSE copied') + +if (pkg.name === 'page-agent') { + copyFileSync(join(root, 'README.md'), join(process.cwd(), 'README.md')) + console.log(' ✓ README.md copied') +} diff --git a/scripts/prepare-publish.js b/scripts/prepare-publish.js deleted file mode 100644 index 1880afe..0000000 --- a/scripts/prepare-publish.js +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env node -/** - * Swap source-first dev entrypoints for dist-first publish entrypoints. - * - * This script is called by `prepublishOnly` in each publishable package. - * It reads the `publishConfig` object and promotes its fields to top level, - * storing the original dev fields in `_devConfig` so `restore-dev.js` can undo it. - * - * Usage: node ../../scripts/prepare-publish.js - */ -import { copyFileSync, readFileSync, writeFileSync } from 'fs' -import { join } from 'path' - -const pkgPath = join(process.cwd(), 'package.json') -const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) - -const publishConfig = pkg.publishConfig -if (!publishConfig) { - console.log(' No publishConfig found, skipping manifest rewrite.') - process.exit(0) -} - -const PUBLISH_FIELDS = ['main', 'module', 'types', 'exports'] - -const devConfig = {} -for (const field of PUBLISH_FIELDS) { - if (field in publishConfig) { - devConfig[field] = pkg[field] - pkg[field] = publishConfig[field] - } -} - -pkg._devConfig = devConfig -delete pkg.publishConfig - -writeFileSync(pkgPath, JSON.stringify(pkg, null, ' ') + '\n') -console.log(` ✓ Manifest rewritten for publish (${Object.keys(devConfig).join(', ')})`) - -const root = join(process.cwd(), '../..') -copyFileSync(join(root, 'LICENSE'), join(process.cwd(), 'LICENSE')) -console.log(' ✓ LICENSE copied') - -const readmeSrc = join(root, 'README.md') -const readmeDest = join(process.cwd(), 'README.md') -if (pkg.name === 'page-agent') { - copyFileSync(readmeSrc, readmeDest) - console.log(' ✓ README.md copied') -} diff --git a/scripts/restore-dev.js b/scripts/restore-dev.js deleted file mode 100644 index e29bd90..0000000 --- a/scripts/restore-dev.js +++ /dev/null @@ -1,45 +0,0 @@ -#!/usr/bin/env node -/** - * Restore source-first dev entrypoints after publish. - * - * Undoes what `prepare-publish.js` did by reading `_devConfig` - * and reinstating the original dev fields + `publishConfig`. - * - * Usage: node ../../scripts/restore-dev.js - */ -import { readFileSync, rmSync, writeFileSync } from 'fs' -import { join } from 'path' - -const pkgPath = join(process.cwd(), 'package.json') -const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) - -const devConfig = pkg._devConfig -if (!devConfig) { - console.log(' No _devConfig found, skipping manifest restore.') - process.exit(0) -} - -const PUBLISH_FIELDS = ['main', 'module', 'types', 'exports'] - -const publishConfig = {} -for (const field of PUBLISH_FIELDS) { - if (field in devConfig) { - publishConfig[field] = pkg[field] - pkg[field] = devConfig[field] - } -} - -pkg.publishConfig = publishConfig -delete pkg._devConfig - -writeFileSync(pkgPath, JSON.stringify(pkg, null, ' ') + '\n') -console.log(` ✓ Manifest restored for dev (${Object.keys(publishConfig).join(', ')})`) - -const licensePath = join(process.cwd(), 'LICENSE') -rmSync(licensePath, { force: true }) -console.log(' ✓ LICENSE removed') - -if (pkg.name === 'page-agent') { - rmSync(join(process.cwd(), 'README.md'), { force: true }) - console.log(' ✓ README.md removed') -} From ca197d14e987907b42b229ceb66be40374739fee Mon Sep 17 00:00:00 2001 From: Simon <10131203+gaomeng1900@users.noreply.github.com> Date: Sun, 12 Apr 2026 03:16:39 +0800 Subject: [PATCH 3/3] fix: dom typing --- packages/page-controller/src/PageController.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/page-controller/src/PageController.ts b/packages/page-controller/src/PageController.ts index d058001..0369185 100644 --- a/packages/page-controller/src/PageController.ts +++ b/packages/page-controller/src/PageController.ts @@ -185,7 +185,7 @@ export class PageController extends EventTarget { const blacklist = [ ...(this.config.interactiveBlacklist || []), - ...document.querySelectorAll('[data-page-agent-not-interactive]').values(), + ...Array.from(document.querySelectorAll('[data-page-agent-not-interactive]')), ] this.flatTree = dom.getFlatTree({