From a8b960db80cc43ba862eb03de39231d64189c599 Mon Sep 17 00:00:00 2001 From: BBQ <35603386+HoneyBBQ@users.noreply.github.com> Date: Wed, 4 Mar 2026 22:11:08 +0800 Subject: [PATCH] fix(agent): replace jsdom with linkedom to fix Docker EISDIR error (#186) jsdom relies on Node.js-specific APIs that Bun cannot properly resolve when running a bundled artifact. This caused an EISDIR error in Docker containers (Bun tried to read the jsdom directory as a file). Replace jsdom with linkedom, a lightweight pure-JS DOM implementation that is fully compatible with Bun and @mozilla/readability. Also remove the --external jsdom build flag since linkedom bundles cleanly. Closes #181 --- agent/package.json | 6 +- docker/Dockerfile.agent | 2 +- packages/agent/package.json | 3 +- packages/agent/src/tools/web.ts | 6 +- pnpm-lock.yaml | 212 ++++++++++++++++++++++++-------- 5 files changed, 166 insertions(+), 63 deletions(-) diff --git a/agent/package.json b/agent/package.json index bd865ac7..0df5ef85 100644 --- a/agent/package.json +++ b/agent/package.json @@ -7,17 +7,15 @@ "start": "pnpm run build && bun run dist/index.js" }, "dependencies": { - "@memoh/config": "workspace:*", - "@memoh/agent": "workspace:*", "@elysiajs/bearer": "^1.4.2", "@elysiajs/cors": "^1.4.1", + "@memoh/agent": "workspace:*", + "@memoh/config": "workspace:*", "@modelcontextprotocol/sdk": "^1.25.2", "@mozilla/readability": "^0.6.0", - "@types/jsdom": "^27.0.0", "@types/turndown": "^5.0.6", "ai": "^6.0.25", "elysia": "latest", - "jsdom": "^27.4.0", "toml": "^3.0.0", "turndown": "^7.2.2", "zod": "^4.3.5" diff --git a/docker/Dockerfile.agent b/docker/Dockerfile.agent index 48407f4b..f9f513e2 100644 --- a/docker/Dockerfile.agent +++ b/docker/Dockerfile.agent @@ -18,7 +18,7 @@ COPY packages/config/ ./packages/config/ COPY packages/agent/ ./packages/agent/ COPY agent/ ./agent/ -RUN cd agent && bun run build --external jsdom +RUN cd agent && bun run build FROM oven/bun:1-alpine diff --git a/packages/agent/package.json b/packages/agent/package.json index bf8a9956..999aabce 100644 --- a/packages/agent/package.json +++ b/packages/agent/package.json @@ -17,10 +17,9 @@ "@ai-sdk/mcp": "^1.0.6", "@ai-sdk/openai": "^3.0.7", "@mozilla/readability": "^0.6.0", - "@types/jsdom": "^27.0.0", "@types/turndown": "^5.0.6", "ai": "^6.0.25", - "jsdom": "^27.4.0", + "linkedom": "^0.18.12", "toml": "^3.0.0", "turndown": "^7.2.2", "yaml": "^2.8.2", diff --git a/packages/agent/src/tools/web.ts b/packages/agent/src/tools/web.ts index 45cb0565..1d63113e 100644 --- a/packages/agent/src/tools/web.ts +++ b/packages/agent/src/tools/web.ts @@ -1,7 +1,7 @@ import { tool } from 'ai' import { z } from 'zod' import { Readability } from '@mozilla/readability' -import { JSDOM } from 'jsdom' +import { parseHTML } from 'linkedom' import TurndownService from 'turndown' const turndownService = new TurndownService() @@ -76,8 +76,8 @@ export const getWebTools = () => { case 'markdown': { try { - const dom = new JSDOM(content, { url }) - const reader = new Readability(dom.window.document) + const { document } = parseHTML(content) + const reader = new Readability(document as unknown as Document) const article = reader.parse() if (!article || !article.content) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a04de4b4..d0a62014 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -66,9 +66,6 @@ importers: '@mozilla/readability': specifier: ^0.6.0 version: 0.6.0 - '@types/jsdom': - specifier: ^27.0.0 - version: 27.0.0 '@types/turndown': specifier: ^5.0.6 version: 5.0.6 @@ -78,9 +75,6 @@ importers: elysia: specifier: latest version: 1.4.25(@sinclair/typebox@0.34.47)(@types/bun@1.3.9)(exact-mirror@0.2.6(@sinclair/typebox@0.34.47))(file-type@21.3.0)(openapi-types@12.1.3)(typescript@5.9.3) - jsdom: - specifier: ^27.4.0 - version: 27.4.0 toml: specifier: ^3.0.0 version: 3.0.0 @@ -121,18 +115,15 @@ importers: '@mozilla/readability': specifier: ^0.6.0 version: 0.6.0 - '@types/jsdom': - specifier: ^27.0.0 - version: 27.0.0 '@types/turndown': specifier: ^5.0.6 version: 5.0.6 ai: specifier: ^6.0.25 version: 6.0.25(zod@4.3.6) - jsdom: - specifier: ^27.4.0 - version: 27.4.0 + linkedom: + specifier: ^0.18.12 + version: 0.18.12 toml: specifier: ^3.0.0 version: 3.0.0 @@ -2217,9 +2208,6 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/jsdom@27.0.0': - resolution: {integrity: sha512-NZyFl/PViwKzdEkQg96gtnB8wm+1ljhdDay9ahn4hgb+SfVtPCbm3TlmDUFXTA+MGN3CijicnMhG18SI5H3rFw==} - '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -2244,9 +2232,6 @@ packages: '@types/node@25.0.3': resolution: {integrity: sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==} - '@types/tough-cookie@4.0.5': - resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -2886,15 +2871,25 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + css-tree@3.1.0: resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + cssstyle@5.3.7: resolution: {integrity: sha512-7D2EPVltRrsTkhpQmksIu+LxeWAIEk6wRDMJ1qljlv+CKHJM+cJLlfhWIzNA44eAsHXSNe3+vO6DW1yCYx8SuQ==} engines: {node: '>=20'} @@ -3124,9 +3119,22 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + dompurify@3.3.1: resolution: {integrity: sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dotenv@17.2.3: resolution: {integrity: sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w==} engines: {node: '>=12'} @@ -3192,6 +3200,10 @@ packages: resolution: {integrity: sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==} engines: {node: '>=0.12'} + entities@7.0.1: + resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} + engines: {node: '>=0.12'} + error-stack-parser-es@1.0.5: resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==} @@ -3509,9 +3521,15 @@ packages: resolution: {integrity: sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg==} engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0} + html-escaper@3.0.3: + resolution: {integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==} + html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + htmlparser2@10.1.0: + resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} + http-errors@2.0.1: resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} engines: {node: '>= 0.8'} @@ -3822,6 +3840,15 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkedom@0.18.12: + resolution: {integrity: sha512-jalJsOwIKuQJSeTvsgzPe9iJzyfVaEJiEXl+25EkKevsULHvMJzpNqwvj1jOESWdmgKDiXObyjOYwlUqG7wo1Q==} + engines: {node: '>=16'} + peerDependencies: + canvas: '>= 2' + peerDependenciesMeta: + canvas: + optional: true + linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} @@ -4155,9 +4182,6 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - parse5@8.0.0: resolution: {integrity: sha512-9m4m5GSgXjL4AjumKzq1Fgfp3Z8rsvjRNbnkVwfu2ImRqE5D0LnY2QfDen18FSY9C573YU5XxSapdHZTZ2WolA==} @@ -4762,6 +4786,9 @@ packages: ufo@1.6.2: resolution: {integrity: sha512-heMioaxBcG9+Znsda5Q8sQbWnLJSl98AFDXTO80wELWEzX3hordXsTdxrIfMQoO9IY1MEnoGoPjpoKpMj+Yx0Q==} + uhyphen@0.2.0: + resolution: {integrity: sha512-qz3o9CHXmJJPGBdqzab7qAYuW8kQGKNEuoHFYrBwV6hWIMcpAmxDLXojcHfFr9US1Pe6zUswEIJIbLI610fuqA==} + uint8array-extras@1.5.0: resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==} engines: {node: '>=18'} @@ -5218,7 +5245,8 @@ packages: snapshots: - '@acemir/cssom@0.9.31': {} + '@acemir/cssom@0.9.31': + optional: true '@ai-sdk/anthropic@3.0.9(zod@4.3.6)': dependencies: @@ -5408,6 +5436,7 @@ snapshots: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 lru-cache: 11.2.5 + optional: true '@asamuzakjp/dom-selector@6.7.6': dependencies: @@ -5416,8 +5445,10 @@ snapshots: css-tree: 3.1.0 is-potential-custom-element-name: 1.0.1 lru-cache: 11.2.5 + optional: true - '@asamuzakjp/nwsapi@2.3.9': {} + '@asamuzakjp/nwsapi@2.3.9': + optional: true '@babel/code-frame@7.27.1': dependencies: @@ -5634,12 +5665,14 @@ snapshots: '@chevrotain/utils@11.0.3': {} - '@csstools/color-helpers@5.1.0': {} + '@csstools/color-helpers@5.1.0': + optional: true '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 + optional: true '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': dependencies: @@ -5647,14 +5680,18 @@ snapshots: '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) '@csstools/css-tokenizer': 3.0.4 + optional: true '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': dependencies: '@csstools/css-tokenizer': 3.0.4 + optional: true - '@csstools/css-syntax-patches-for-csstree@1.0.26': {} + '@csstools/css-syntax-patches-for-csstree@1.0.26': + optional: true - '@csstools/css-tokenizer@3.0.4': {} + '@csstools/css-tokenizer@3.0.4': + optional: true '@docsearch/css@3.8.2': {} @@ -6037,7 +6074,8 @@ snapshots: '@eslint/core': 0.17.0 levn: 0.4.1 - '@exodus/bytes@1.10.0': {} + '@exodus/bytes@1.10.0': + optional: true '@floating-ui/core@1.7.3': dependencies: @@ -6927,12 +6965,6 @@ snapshots: dependencies: '@types/unist': 3.0.3 - '@types/jsdom@27.0.0': - dependencies: - '@types/node': 24.10.4 - '@types/tough-cookie': 4.0.5 - parse5: 7.3.0 - '@types/json-schema@7.0.15': {} '@types/linkify-it@5.0.0': {} @@ -6960,8 +6992,6 @@ snapshots: dependencies: undici-types: 7.16.0 - '@types/tough-cookie@4.0.5': {} - '@types/trusted-types@2.0.7': optional: true @@ -7340,7 +7370,8 @@ snapshots: acorn@8.15.0: {} - agent-base@7.1.4: {} + agent-base@7.1.4: + optional: true ai@6.0.25(zod@4.3.5): dependencies: @@ -7470,6 +7501,7 @@ snapshots: bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 + optional: true birpc@2.9.0: {} @@ -7699,19 +7731,33 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + css-tree@3.1.0: dependencies: mdn-data: 2.12.2 source-map-js: 1.2.1 + optional: true + + css-what@6.2.2: {} cssesc@3.0.0: {} + cssom@0.5.0: {} + cssstyle@5.3.7: dependencies: '@asamuzakjp/css-color': 4.1.1 '@csstools/css-syntax-patches-for-csstree': 1.0.26 css-tree: 3.1.0 lru-cache: 11.2.5 + optional: true csstype@3.2.3: {} @@ -7903,6 +7949,7 @@ snapshots: dependencies: whatwg-mimetype: 5.0.0 whatwg-url: 15.1.0 + optional: true dayjs@1.11.19: {} @@ -7910,7 +7957,8 @@ snapshots: dependencies: ms: 2.1.3 - decimal.js@10.6.0: {} + decimal.js@10.6.0: + optional: true deep-is@0.1.4: {} @@ -7946,10 +7994,28 @@ snapshots: diff@8.0.2: {} + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domelementtype@2.3.0: {} + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + dompurify@3.3.1: optionalDependencies: '@types/trusted-types': 2.0.7 + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dotenv@17.2.3: {} drizzle-kit@0.31.8: @@ -8004,10 +8070,13 @@ snapshots: entities@4.5.0: {} - entities@6.0.1: {} + entities@6.0.1: + optional: true entities@7.0.0: {} + entities@7.0.1: {} + error-stack-parser-es@1.0.5: {} es-define-property@1.0.1: {} @@ -8464,9 +8533,19 @@ snapshots: '@exodus/bytes': 1.10.0 transitivePeerDependencies: - '@noble/hashes' + optional: true + + html-escaper@3.0.3: {} html-void-elements@3.0.0: {} + htmlparser2@10.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 7.0.1 + http-errors@2.0.1: dependencies: depd: 2.0.0 @@ -8481,6 +8560,7 @@ snapshots: debug: 4.4.3 transitivePeerDependencies: - supports-color + optional: true https-proxy-agent@7.0.6: dependencies: @@ -8488,6 +8568,7 @@ snapshots: debug: 4.4.3 transitivePeerDependencies: - supports-color + optional: true husky@9.1.7: {} @@ -8556,7 +8637,8 @@ snapshots: is-interactive@2.0.0: {} - is-potential-custom-element-name@1.0.1: {} + is-potential-custom-element-name@1.0.1: + optional: true is-promise@4.0.0: {} @@ -8615,6 +8697,7 @@ snapshots: - bufferutil - supports-color - utf-8-validate + optional: true jsesc@3.1.0: {} @@ -8724,6 +8807,14 @@ snapshots: lines-and-columns@1.2.4: {} + linkedom@0.18.12: + dependencies: + css-select: 5.2.2 + cssom: 0.5.0 + html-escaper: 3.0.3 + htmlparser2: 10.1.0 + uhyphen: 0.2.0 + linkify-it@5.0.0: dependencies: uc.micro: 2.1.0 @@ -8757,7 +8848,8 @@ snapshots: chalk: 5.6.2 is-unicode-supported: 1.3.0 - lru-cache@11.2.5: {} + lru-cache@11.2.5: + optional: true lru-cache@5.1.1: dependencies: @@ -8828,7 +8920,8 @@ snapshots: unist-util-visit: 5.0.0 vfile: 6.0.3 - mdn-data@2.12.2: {} + mdn-data@2.12.2: + optional: true mdurl@2.0.0: {} @@ -9059,13 +9152,10 @@ snapshots: dependencies: callsites: 3.1.0 - parse5@7.3.0: - dependencies: - entities: 6.0.1 - parse5@8.0.0: dependencies: entities: 6.0.1 + optional: true parseurl@1.3.3: {} @@ -9308,6 +9398,7 @@ snapshots: saxes@6.0.0: dependencies: xmlchars: 2.2.0 + optional: true search-insights@2.17.3: {} @@ -9526,7 +9617,8 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - symbol-tree@3.2.4: {} + symbol-tree@3.2.4: + optional: true tabbable@6.4.0: {} @@ -9565,11 +9657,13 @@ snapshots: tinyrainbow@3.0.3: {} - tldts-core@7.0.19: {} + tldts-core@7.0.19: + optional: true tldts@7.0.19: dependencies: tldts-core: 7.0.19 + optional: true toidentifier@1.0.1: {} @@ -9586,10 +9680,12 @@ snapshots: tough-cookie@6.0.0: dependencies: tldts: 7.0.19 + optional: true tr46@6.0.0: dependencies: punycode: 2.3.1 + optional: true tree-kill@1.2.2: {} @@ -9680,6 +9776,8 @@ snapshots: ufo@1.6.2: {} + uhyphen@0.2.0: {} + uint8array-extras@1.5.0: {} undici-types@6.21.0: {} @@ -10034,19 +10132,24 @@ snapshots: w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 + optional: true - webidl-conversions@8.0.1: {} + webidl-conversions@8.0.1: + optional: true webpack-virtual-modules@0.6.2: {} - whatwg-mimetype@4.0.0: {} + whatwg-mimetype@4.0.0: + optional: true - whatwg-mimetype@5.0.0: {} + whatwg-mimetype@5.0.0: + optional: true whatwg-url@15.1.0: dependencies: tr46: 6.0.0 webidl-conversions: 8.0.1 + optional: true which@2.0.2: dependencies: @@ -10071,7 +10174,8 @@ snapshots: wrappy@1.0.2: {} - ws@8.19.0: {} + ws@8.19.0: + optional: true wsl-utils@0.1.0: dependencies: @@ -10084,9 +10188,11 @@ snapshots: xml-name-validator@4.0.0: {} - xml-name-validator@5.0.0: {} + xml-name-validator@5.0.0: + optional: true - xmlchars@2.2.0: {} + xmlchars@2.2.0: + optional: true yallist@3.1.1: {}