From 259917545e83bb931df4783b72cc1e70e2923675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E4=B8=80=E4=B9=8B?= Date: Wed, 9 Apr 2025 22:33:46 +0800 Subject: [PATCH] =?UTF-8?q?=E8=84=9A=E6=9C=AC=E6=89=93=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- eslint.config.mjs | 9 +- package.json | 3 + packages/message/window_message.ts | 34 +-- pnpm-lock.yaml | 297 +++++++++++++++++++++- rspack.config.ts | 13 +- scripts/pack.js | 123 +++++++++ src/app/service/offscreen/gm_api.ts | 4 +- src/app/service/service_worker/gm_api.ts | 6 +- src/app/service/service_worker/runtime.ts | 2 - src/app/service/service_worker/value.ts | 1 - src/assets/_locales/en/messages.json | 5 +- src/assets/_locales/vi/messages.json | 3 + src/assets/_locales/zh_CN/messages.json | 3 + src/manifest.json | 3 +- src/pages/popup/main.tsx | 1 + src/pkg/utils/monaco-editor.ts | 158 +++++------- 16 files changed, 540 insertions(+), 125 deletions(-) create mode 100644 scripts/pack.js diff --git a/eslint.config.mjs b/eslint.config.mjs index 8f5435f..3e471d5 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -3,11 +3,16 @@ import js from "@eslint/js"; import reactHooks from "eslint-plugin-react-hooks"; import reactJsx from "eslint-plugin-react/configs/jsx-runtime.js"; import react from "eslint-plugin-react/configs/recommended.js"; -import globals from "globals"; import ts from "typescript-eslint"; export default [ - { languageOptions: { globals: globals.browser } }, + { + env: { + browser: true, + es2020: true, + webextensions: true, + }, + }, js.configs.recommended, ...ts.configs.recommended, ...fixupConfigRules([ diff --git a/package.json b/package.json index 8507441..57e9e04 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "coverage": "vitest run --coverage", "build": "cross-env NODE_ENV=production rspack build", "dev": "cross-env NODE_ENV=development rspack", + "pack": "node ./scripts/pack.js", "format": "prettier --write .", "lint": "eslint .", "lint-fix": "eslint --fix ." @@ -58,12 +59,14 @@ "@vitest/coverage-v8": "2.1.4", "autoprefixer": "^10.4.20", "cross-env": "^7.0.3", + "crx": "^5.0.1", "eslint": "^9.24.0", "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^5.2.0", "fake-indexeddb": "^6.0.0", "globals": "^16.0.0", "jsdom": "^25.0.1", + "jszip": "^3.10.1", "mock-xmlhttprequest": "^8.4.1", "postcss": "^8.4.49", "postcss-loader": "^8.1.1", diff --git a/packages/message/window_message.ts b/packages/message/window_message.ts index 60102b6..263753e 100644 --- a/packages/message/window_message.ts +++ b/packages/message/window_message.ts @@ -168,11 +168,13 @@ export class ServiceWorkerMessageSend implements MessageSend { constructor() {} async init() { - const list = await self.clients.matchAll({ includeUncontrolled: true, type: "window" }); - this.target = list[0]; - self.addEventListener("message", (e) => { - this.messageHandle(e.data); - }); + if (!this.target) { + const list = await self.clients.matchAll({ includeUncontrolled: true, type: "window" }); + this.target = list[0]; + self.addEventListener("message", (e) => { + this.messageHandle(e.data); + }); + } } messageHandle(data: WindowMessageBody) { @@ -187,20 +189,20 @@ export class ServiceWorkerMessageSend implements MessageSend { } } - connect(data: any): Promise { - return new Promise((resolve) => { - const body: WindowMessageBody = { - messageId: uuidv4(), - type: "connect", - data, - }; - this.target!.postMessage(body); - resolve(new WindowMessageConnect(body.messageId, this.EE, this.target!)); - }); + async connect(data: any): Promise { + await this.init(); + const body: WindowMessageBody = { + messageId: uuidv4(), + type: "connect", + data, + }; + this.target!.postMessage(body); + return new WindowMessageConnect(body.messageId, this.EE, this.target!); } // 发送消息 注意不进行回调的内存泄漏 - sendMessage(data: any): Promise { + async sendMessage(data: any): Promise { + await this.init(); return new Promise((resolve) => { const body: WindowMessageBody = { messageId: uuidv4(), diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c224372..ff7b33a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -129,6 +129,9 @@ importers: cross-env: specifier: ^7.0.3 version: 7.0.3 + crx: + specifier: ^5.0.1 + version: 5.0.1 eslint: specifier: ^9.24.0 version: 9.24.0(jiti@1.21.7) @@ -147,6 +150,9 @@ importers: jsdom: specifier: ^25.0.1 version: 25.0.1 + jszip: + specifier: ^3.10.1 + version: 3.10.1 mock-xmlhttprequest: specifier: ^8.4.1 version: 8.4.1 @@ -1727,6 +1733,14 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + archiver-utils@2.1.0: + resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} + engines: {node: '>= 6'} + + archiver@3.1.1: + resolution: {integrity: sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==} + engines: {node: '>= 6'} + arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} @@ -1776,10 +1790,16 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} + async@2.6.4: + resolution: {integrity: sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -1803,6 +1823,9 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -1810,6 +1833,9 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -1840,9 +1866,15 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -1951,6 +1983,10 @@ packages: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} + compress-commons@2.1.1: + resolution: {integrity: sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==} + engines: {node: '>= 6'} + compressible@2.0.18: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} @@ -2014,6 +2050,13 @@ packages: typescript: optional: true + crc32-stream@3.0.1: + resolution: {integrity: sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==} + engines: {node: '>= 6.9.0'} + + crc@3.8.0: + resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -2033,6 +2076,11 @@ packages: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} + crx@5.0.1: + resolution: {integrity: sha512-n/PzBx/fR1+xZCiJBats9y5zw/a+YBcoJ0ABnUaY56xb1RpXuFhsiCMpNY6WjVtylLzhUUXSWsbitesVg7v2vg==} + engines: {node: '>=10'} + hasBin: true + crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} @@ -2227,6 +2275,9 @@ packages: resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} engines: {node: '>= 0.8'} + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + enhanced-resolve@5.18.1: resolution: {integrity: sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==} engines: {node: '>=10.13.0'} @@ -2561,6 +2612,12 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2626,6 +2683,10 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + globals@14.0.0: resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} engines: {node: '>=18'} @@ -2766,10 +2827,16 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + ignore@5.3.2: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + immer@10.1.1: resolution: {integrity: sha512-s2MPrmjovJcoMaHtx6K11Ra7oD05NT97w1IC5zpMkT6Atjr7H8LjaDd81iIxUYpMKSRRNMJE703M1Fhr/TctHw==} @@ -2784,6 +2851,10 @@ packages: resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} engines: {node: '>=0.8.19'} + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.3: resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} @@ -3099,6 +3170,9 @@ packages: resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} engines: {node: '>=4.0'} + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -3111,10 +3185,17 @@ packages: launch-editor@2.9.1: resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + levn@0.4.1: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} @@ -3134,9 +3215,24 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.difference@4.5.0: + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} + + lodash.flatten@4.4.0: + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + lodash.union@4.6.0: + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -3307,6 +3403,9 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-rsa@1.1.1: + resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -3379,6 +3478,9 @@ packages: resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} engines: {node: '>= 0.8'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + onetime@5.1.2: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} @@ -3425,6 +3527,9 @@ packages: package-manager-detector@0.2.5: resolution: {integrity: sha512-3dS7y28uua+UDbRCLBqltMBrbI+A5U2mI9YuxHRxIWYmLj3DwntEBmERYzIAQ4DMeuCUOBSak7dBHHoXKpOTYQ==} + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + pako@2.1.0: resolution: {integrity: sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==} @@ -3447,6 +3552,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -3471,6 +3580,10 @@ packages: resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} engines: {node: '>= 14.16'} + pbf@3.3.0: + resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} + hasBin: true + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -3540,6 +3653,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + protocol-buffers-schema@3.6.0: + resolution: {integrity: sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -3745,6 +3861,9 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + resolve-protobuf-schema@2.1.0: + resolution: {integrity: sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==} + resolve@1.22.10: resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} engines: {node: '>= 0.4'} @@ -3897,6 +4016,9 @@ packages: resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} engines: {node: '>= 0.4'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.1.0: resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} @@ -4079,6 +4201,10 @@ packages: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -4627,6 +4753,9 @@ packages: resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} engines: {node: '>=12'} + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@7.5.10: resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} @@ -4699,6 +4828,10 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + zip-stream@2.1.3: + resolution: {integrity: sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==} + engines: {node: '>= 6'} + snapshots: '@ampproject/remapping@2.3.0': @@ -6286,6 +6419,29 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + archiver-utils@2.1.0: + dependencies: + glob: 7.2.3 + graceful-fs: 4.2.11 + lazystream: 1.0.1 + lodash.defaults: 4.2.0 + lodash.difference: 4.5.0 + lodash.flatten: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.union: 4.6.0 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + + archiver@3.1.1: + dependencies: + archiver-utils: 2.1.0 + async: 2.6.4 + buffer-crc32: 0.2.13 + glob: 7.2.3 + readable-stream: 3.6.2 + tar-stream: 2.2.0 + zip-stream: 2.1.3 + arg@4.1.3: {} argparse@2.0.1: {} @@ -6370,8 +6526,16 @@ snapshots: get-intrinsic: 1.2.7 is-array-buffer: 3.0.5 + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + assertion-error@2.0.1: {} + async@2.6.4: + dependencies: + lodash: 4.17.21 + asynckit@0.4.0: {} autoprefixer@10.4.20(postcss@8.4.49): @@ -6394,10 +6558,18 @@ snapshots: balanced-match@1.0.2: {} + base64-js@1.5.1: {} + batch@0.6.1: {} binary-extensions@2.3.0: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -6453,9 +6625,16 @@ snapshots: update-browserslist-db: 1.1.3(browserslist@4.24.4) optional: true + buffer-crc32@0.2.13: {} + buffer-from@1.1.2: optional: true + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -6568,11 +6747,17 @@ snapshots: dependencies: delayed-stream: 1.0.0 - commander@2.20.3: - optional: true + commander@2.20.3: {} commander@7.2.0: {} + compress-commons@2.1.1: + dependencies: + buffer-crc32: 0.2.13 + crc32-stream: 3.0.1 + normalize-path: 3.0.0 + readable-stream: 2.3.8 + compressible@2.0.18: dependencies: mime-db: 1.54.0 @@ -6636,6 +6821,15 @@ snapshots: optionalDependencies: typescript: 5.7.3 + crc32-stream@3.0.1: + dependencies: + crc: 3.8.0 + readable-stream: 3.6.2 + + crc@3.8.0: + dependencies: + buffer: 5.7.1 + create-require@1.1.1: {} cron@3.2.1: @@ -6659,6 +6853,13 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + crx@5.0.1: + dependencies: + archiver: 3.1.1 + commander: 2.20.3 + node-rsa: 1.1.1 + pbf: 3.3.0 + crypto-js@4.2.0: {} css-tree@3.0.1: @@ -6822,6 +7023,10 @@ snapshots: encodeurl@2.0.0: {} + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + enhanced-resolve@5.18.1: dependencies: graceful-fs: 4.2.11 @@ -7464,6 +7669,10 @@ snapshots: fresh@0.5.2: {} + fs-constants@1.0.0: {} + + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -7553,6 +7762,15 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + globals@14.0.0: {} globals@15.11.0: {} @@ -7694,8 +7912,12 @@ snapshots: dependencies: safer-buffer: 2.1.2 + ieee754@1.2.1: {} + ignore@5.3.2: {} + immediate@3.0.6: {} + immer@10.1.1: {} import-fresh@3.3.0: @@ -7717,6 +7939,11 @@ snapshots: imurmurhash@0.1.4: {} + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.3: {} inherits@2.0.4: {} @@ -8044,6 +8271,13 @@ snapshots: object.assign: 4.1.5 object.values: 1.2.1 + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -8060,11 +8294,19 @@ snapshots: picocolors: 1.1.1 shell-quote: 1.8.1 + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + levn@0.4.1: dependencies: prelude-ls: 1.2.1 type-check: 0.4.0 + lie@3.3.0: + dependencies: + immediate: 3.0.6 + lines-and-columns@1.2.4: {} load-tsconfig@0.2.5: {} @@ -8081,8 +8323,18 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.defaults@4.2.0: {} + + lodash.difference@4.5.0: {} + + lodash.flatten@4.4.0: {} + + lodash.isplainobject@4.0.6: {} + lodash.merge@4.6.2: {} + lodash.union@4.6.0: {} + lodash@4.17.21: {} loose-envify@1.4.0: @@ -8218,6 +8470,10 @@ snapshots: node-releases@2.0.19: optional: true + node-rsa@1.1.1: + dependencies: + asn1: 0.2.6 + normalize-path@3.0.0: {} normalize-range@0.1.2: {} @@ -8294,6 +8550,10 @@ snapshots: on-headers@1.0.2: {} + once@1.4.0: + dependencies: + wrappy: 1.0.2 + onetime@5.1.2: dependencies: mimic-fn: 2.1.0 @@ -8351,6 +8611,8 @@ snapshots: package-manager-detector@0.2.5: {} + pako@1.0.11: {} + pako@2.1.0: {} parent-module@1.0.1: @@ -8372,6 +8634,8 @@ snapshots: path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -8389,6 +8653,11 @@ snapshots: pathval@2.0.0: {} + pbf@3.3.0: + dependencies: + ieee754: 1.2.1 + resolve-protobuf-schema: 2.1.0 + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -8447,6 +8716,8 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + protocol-buffers-schema@3.6.0: {} + proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -8670,6 +8941,10 @@ snapshots: resolve-pkg-maps@1.0.0: {} + resolve-protobuf-schema@2.1.0: + dependencies: + protocol-buffers-schema: 3.6.0 + resolve@1.22.10: dependencies: is-core-module: 2.16.1 @@ -8885,6 +9160,8 @@ snapshots: es-errors: 1.3.0 es-object-atoms: 1.0.0 + setimmediate@1.0.5: {} + setprototypeof@1.1.0: {} setprototypeof@1.2.0: {} @@ -9126,6 +9403,14 @@ snapshots: tapable@2.2.1: optional: true + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + terser-webpack-plugin@5.3.14(esbuild@0.23.1)(webpack@5.96.1(esbuild@0.23.1)): dependencies: '@jridgewell/trace-mapping': 0.3.25 @@ -9936,6 +10221,8 @@ snapshots: string-width: 5.1.2 strip-ansi: 7.1.0 + wrappy@1.0.2: {} + ws@7.5.10: {} ws@8.18.0: {} @@ -9975,3 +10262,9 @@ snapshots: yn@3.1.1: {} yocto-queue@0.1.0: {} + + zip-stream@2.1.3: + dependencies: + archiver-utils: 2.1.0 + compress-commons: 2.1.1 + readable-stream: 3.6.2 diff --git a/rspack.config.ts b/rspack.config.ts index a00afee..3e19e1c 100644 --- a/rspack.config.ts +++ b/rspack.config.ts @@ -20,7 +20,10 @@ export default defineConfig({ mode: "development", devtool: "inline-source-map", } - : {}), + : { + mode: "production", + devtool: false, + }), context: __dirname, entry: { service_worker: `${src}/service_worker.ts`, @@ -116,15 +119,15 @@ export default defineConfig({ // 将manifest.json内版本号替换为package.json中版本号 transform(content: Buffer) { const manifest = JSON.parse(content.toString()); - if (isDev) { - manifest.name = "ScriptCat - Dev"; + if (isDev || isBeta) { + manifest.name = "__MSG_scriptcat_beta__"; // manifest.content_security_policy = "script-src 'self' https://cdn.crowdin.com; object-src 'self'"; } return JSON.stringify(manifest); }, }, { - from: `${assets}/logo${isDev ? "-beta" : ""}.png`, + from: `${assets}/logo${isDev || isBeta ? "-beta" : ""}.png`, to: `${dist}/ext/assets/logo.png`, }, { from: `${assets}/logo`, to: `${dist}/ext/assets/logo` }, @@ -175,7 +178,7 @@ export default defineConfig({ ].filter(Boolean), optimization: { minimizer: [ - new rspack.SwcJsMinimizerRspackPlugin(), + new rspack.SwcJsMinimizerRspackPlugin({}), new rspack.LightningCssMinimizerRspackPlugin({ minimizerOptions: { targets }, }), diff --git a/scripts/pack.js b/scripts/pack.js new file mode 100644 index 0000000..e9629b1 --- /dev/null +++ b/scripts/pack.js @@ -0,0 +1,123 @@ +const fs = require("fs"); +const JSZip = require("jszip"); +const ChromeExtension = require("crx"); +const { execSync } = require("child_process"); +const semver = require("semver"); +const manifest = require("../src/manifest.json"); +const package = require("../package.json"); + +// 判断是否为beta版本 +const version = semver.parse(package.version); +if (version.prerelease.length) { + // 替换manifest中的版本 + let betaVersion = 1000; + switch (version.prerelease[0]) { + case "alpha": + // 第一位进1 + betaVersion += parseInt(version.prerelease[1] || "0", 10) + 1 || 1; + break; + case "beta": + // 第二位进1 + betaVersion += 10 * (parseInt(version.prerelease[1] || "0", 10) + 1 || 1); + break; + default: + throw new Error("未知的版本类型"); + } + manifest.version = `${version.major.toString()}.${version.minor.toString()}.${version.patch.toString()}.${betaVersion.toString()}`; + manifest.name = `${manifest.name} Beta`; +} else { + manifest.version = package.version; +} + +// 处理manifest version +let str = fs.readFileSync("./src/manifest.json").toString(); +str = str.replace(/"version": "(.*?)"/, `"version": "${manifest.version}"`); +fs.writeFileSync("./src/manifest.json", str); + +// 处理configSystem version +let configSystem = fs.readFileSync("./src/app/const.ts").toString(); +// 如果是由github action的分支触发的构建,在版本中再加上commit id +if (process.env.GITHUB_REF_TYPE === "branch") { + configSystem = configSystem.replace( + "ExtVersion = version;", + `ExtVersion = \`\${version}+${process.env.GITHUB_SHA.substring(0, 7)}\`;` + ); + fs.writeFileSync("./src/app/const.ts", configSystem); +} + +execSync("npm run build", { stdio: "inherit" }); + +// 处理firefox和chrome的zip压缩包 + +const firefoxManifest = { ...manifest }; +const chromeManifest = { ...manifest }; + +delete chromeManifest.content_security_policy; + +delete firefoxManifest.sandbox; +// firefoxManifest.content_security_policy = +// "script-src 'self' blob:; object-src 'self' blob:"; +firefoxManifest.browser_specific_settings = { + gecko: { strict_min_version: "91.1.0" }, +}; + +const chrome = new JSZip(); +const firefox = new JSZip(); + +function addDir(zip, localDir, toDir, filters) { + const files = fs.readdirSync(localDir); + files.forEach((file) => { + const localPath = `${localDir}/${file}`; + const toPath = `${toDir}${file}`; + const stats = fs.statSync(localPath); + if (stats.isDirectory()) { + addDir(zip, localPath, `${toPath}/`, filters); + } else { + if (filters && filters.includes(file)) { + return; + } + zip.file(toPath, fs.readFileSync(localPath)); + } + }); +} + +chrome.file("manifest.json", JSON.stringify(chromeManifest)); +firefox.file("manifest.json", JSON.stringify(firefoxManifest)); + +addDir(chrome, "./dist/ext", "", ["manifest.json"]); +addDir(firefox, "./dist/ext", "", ["manifest.json", "ts.worker.js"]); +// 添加ts.worker.js名字为gz +firefox.file("src/ts.worker.js.gz", fs.readFileSync("./dist/ext/src/ts.worker.js")); + +// 导出zip包 +chrome + .generateNodeStream({ + type: "nodebuffer", + streamFiles: true, + compression: "DEFLATE", + }) + .pipe(fs.createWriteStream(`./dist/${package.name}-v${package.version}-chrome.zip`)); + +firefox + .generateNodeStream({ + type: "nodebuffer", + streamFiles: true, + compression: "DEFLATE", + }) + .pipe(fs.createWriteStream(`./dist/${package.name}-v${package.version}-firefox.zip`)); + +// 处理crx +const crx = new ChromeExtension({ + privateKey: fs.readFileSync("./dist/scriptcat.pem"), +}); + +crx + .load("./dist/ext") + .then((crxFile) => crxFile.pack()) + .then((crxBuffer) => { + fs.writeFileSync(`./dist/${package.name}-v${package.version}-chrome.crx`, crxBuffer); + }) + .catch((err) => { + // eslint-disable-next-line no-console + console.error(err); + }); diff --git a/src/app/service/offscreen/gm_api.ts b/src/app/service/offscreen/gm_api.ts index f7a6c5f..d54fc69 100644 --- a/src/app/service/offscreen/gm_api.ts +++ b/src/app/service/offscreen/gm_api.ts @@ -21,8 +21,8 @@ export default class GMApi { readyState: xhr.readyState, status: xhr.status, statusText: xhr.statusText, - // header由service_worker处理 - // responseHeaders: xhr.getAllResponseHeaders().replace(removeXCat, ""), + // header由service_worker处理,但是存在特殊域名(例如:edge.microsoft.com)无法获取的情况,在这里增加一个默认值 + responseHeaders: xhr.getAllResponseHeaders(), responseType: details.responseType, }; if (xhr.readyState === 4) { diff --git a/src/app/service/service_worker/gm_api.ts b/src/app/service/service_worker/gm_api.ts index 0c36ed5..e4fdccf 100644 --- a/src/app/service/service_worker/gm_api.ts +++ b/src/app/service/service_worker/gm_api.ts @@ -168,7 +168,7 @@ export default class GMApi { "headersReceived:" + requestId, (details: chrome.webRequest.WebResponseHeadersDetails) => { details.responseHeaders?.forEach((header) => { - responseHeader += header.name + ": " + header.value + "\n"; + responseHeader += header.name + ": " + header.value + "\r\n"; }); this.gmXhrHeadersReceived.removeAllListeners("headersReceived:" + requestId); } @@ -178,7 +178,9 @@ export default class GMApi { offscreenCon.onMessage((msg: { action: string; data: any }) => { // 发送到content // 替换msg.data.responseHeaders - msg.data.responseHeaders = responseHeader; + if (responseHeader) { + msg.data.responseHeaders = responseHeader; + } con.getConnect().sendMessage(msg); }); } diff --git a/src/app/service/service_worker/runtime.ts b/src/app/service/service_worker/runtime.ts index 7af774b..ce7947b 100644 --- a/src/app/service/service_worker/runtime.ts +++ b/src/app/service/service_worker/runtime.ts @@ -194,8 +194,6 @@ export class RuntimeService { }) ); - console.log("pageLoad", enableScript); - this.mq.emit("pageLoad", { tabId: chromeSender.tab?.id, frameId: chromeSender.frameId, diff --git a/src/app/service/service_worker/value.ts b/src/app/service/service_worker/value.ts index 0dd75ed..ce81008 100644 --- a/src/app/service/service_worker/value.ts +++ b/src/app/service/service_worker/value.ts @@ -57,7 +57,6 @@ export class ValueService { valueModel.data[key] = value; await this.valueDAO.save(storageName, valueModel); } - console.log(valueModel); return true; }); const sendData: ValueUpdateData = { diff --git a/src/assets/_locales/en/messages.json b/src/assets/_locales/en/messages.json index b900c38..4165381 100644 --- a/src/assets/_locales/en/messages.json +++ b/src/assets/_locales/en/messages.json @@ -5,7 +5,10 @@ "scriptcat": { "message": "ScriptCat" }, + "scriptcat_beta": { + "message": "ScriptCat Beta" + }, "scriptcat_description": { "message": "Everything can be scripted, allowing your browser to do more!" } -} +} \ No newline at end of file diff --git a/src/assets/_locales/vi/messages.json b/src/assets/_locales/vi/messages.json index 5f80cfa..24a61e8 100644 --- a/src/assets/_locales/vi/messages.json +++ b/src/assets/_locales/vi/messages.json @@ -5,6 +5,9 @@ "scriptcat": { "message": "ScriptCat" }, + "scriptcat_beta": { + "message": "ScriptCat Beta" + }, "scriptcat_description": { "message": "Mọi thứ đều có thể viết được, cho phép trình duyệt của bạn làm được nhiều việc hơn!" } diff --git a/src/assets/_locales/zh_CN/messages.json b/src/assets/_locales/zh_CN/messages.json index e33b0ae..0b7d577 100644 --- a/src/assets/_locales/zh_CN/messages.json +++ b/src/assets/_locales/zh_CN/messages.json @@ -5,6 +5,9 @@ "scriptcat": { "message": "脚本猫" }, + "scriptcat_beta": { + "message": "脚本猫 Beta" + }, "scriptcat_description": { "message": "万物皆可脚本化,让你的浏览器可以做更多的事情!" } diff --git a/src/manifest.json b/src/manifest.json index b0e83b6..c5a4396 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -23,7 +23,6 @@ "default_locale": "zh_CN", "permissions": [ "tabs", - "action", "storage", "offscreen", "scripting", @@ -35,7 +34,7 @@ "declarativeNetRequest" ], "host_permissions": [ - "*://*/*" + "" ], "sandbox": { "pages": [ diff --git a/src/pages/popup/main.tsx b/src/pages/popup/main.tsx index 18bd8c0..0dfb338 100644 --- a/src/pages/popup/main.tsx +++ b/src/pages/popup/main.tsx @@ -8,6 +8,7 @@ import DBWriter from "@App/app/logger/db_writer.ts"; import "@arco-design/web-react/dist/css/arco.css"; import "@App/locales/locales"; import "@App/index.css"; +import "./index.css"; import { Provider } from "react-redux"; import { store } from "../store/store.ts"; diff --git a/src/pkg/utils/monaco-editor.ts b/src/pkg/utils/monaco-editor.ts index e675a97..4237c38 100644 --- a/src/pkg/utils/monaco-editor.ts +++ b/src/pkg/utils/monaco-editor.ts @@ -1,36 +1,14 @@ import dts from "@App/types/scriptcat.d.ts"; import { languages } from "monaco-editor"; -import pako from "pako"; -import Cache from "@App/app/cache"; -import { isDebug, isFirefox } from "./utils"; -import EventEmitter from "eventemitter3"; // 注册eslint -const linterWorker = new Worker("/src/linter.worker.js"); +// const linterWorker = new Worker("/src/linter.worker.js"); export default function registerEditor() { - // @ts-ignore - window.tsUrl = ""; - - fetch(chrome.runtime.getURL(`/src/ts.worker.js${isFirefox() ? ".gz" : ""}`)) - .then((resp) => resp.blob()) - .then(async (blob) => { - let result: ArrayBuffer; - if (isDebug()) { - result = await blob.arrayBuffer(); - } else { - result = pako.inflate(await blob.arrayBuffer()); - } - // @ts-ignore - window.tsUrl = URL.createObjectURL(new Blob([result])); - }); - // @ts-ignore window.MonacoEnvironment = { getWorkerUrl(moduleId: any, label: any) { if (label === "typescript" || label === "javascript") { - // return "/src/ts.worker.js"; - // @ts-ignore - return window.tsUrl; + return "/src/ts.worker.js"; } return "/src/editor.worker.js"; }, @@ -81,74 +59,74 @@ export default function registerEditor() { }, }); - // 处理quick fix - languages.registerCodeActionProvider("javascript", { - provideCodeActions: (model /** ITextModel */, range /** Range */, context /** CodeActionContext */) => { - const actions: languages.CodeAction[] = []; - const eslintFix = >Cache.getInstance().get("eslint-fix"); - for (let i = 0; i < context.markers.length; i += 1) { - // 判断有没有修复方案 - const val = context.markers[i]; - const code = typeof val.code === "string" ? val.code : val.code!.value; - const fix = eslintFix.get( - `${code}|${val.startLineNumber}|${val.endLineNumber}|${val.startColumn}|${val.endColumn}` - ); - if (fix) { - const edit: languages.IWorkspaceTextEdit = { - resource: model.uri, - textEdit: { - range: fix.range, - text: fix.text, - }, - versionId: undefined, - }; - actions.push({ - title: `修复 ${code} 问题`, - diagnostics: [val], - kind: "quickfix", - edit: { - edits: [edit], - }, - isPreferred: true, - }); - } - } + // // 处理quick fix + // languages.registerCodeActionProvider("javascript", { + // provideCodeActions: (model /** ITextModel */, range /** Range */, context /** CodeActionContext */) => { + // // const actions: languages.CodeAction[] = []; + // // const eslintFix = >Cache.getInstance().get("eslint-fix"); + // // for (let i = 0; i < context.markers.length; i += 1) { + // // // 判断有没有修复方案 + // // const val = context.markers[i]; + // // const code = typeof val.code === "string" ? val.code : val.code!.value; + // // const fix = eslintFix.get( + // // `${code}|${val.startLineNumber}|${val.endLineNumber}|${val.startColumn}|${val.endColumn}` + // // ); + // // if (fix) { + // // const edit: languages.IWorkspaceTextEdit = { + // // resource: model.uri, + // // textEdit: { + // // range: fix.range, + // // text: fix.text, + // // }, + // // versionId: undefined, + // // }; + // // actions.push({ + // // title: `修复 ${code} 问题`, + // // diagnostics: [val], + // // kind: "quickfix", + // // edit: { + // // edits: [edit], + // // }, + // // isPreferred: true, + // // }); + // // } + // // } - // const actions = context.markers.map((error) => { - // const edit: languages.IWorkspaceTextEdit = { - // resource: model.uri, - // textEdit: { - // range, - // text: "console.log(1)", - // }, - // versionId: undefined, - // }; - // return { - // title: ``, - // diagnostics: [error], - // kind: "quickfix", - // edit: { - // edits: [edit], - // }, - // isPreferred: true, - // }; - // }); - return { - actions, - dispose: () => {}, - }; - }, - }); + // // const actions = context.markers.map((error) => { + // // const edit: languages.IWorkspaceTextEdit = { + // // resource: model.uri, + // // textEdit: { + // // range, + // // text: "console.log(1)", + // // }, + // // versionId: undefined, + // // }; + // // return { + // // title: ``, + // // diagnostics: [error], + // // kind: "quickfix", + // // edit: { + // // edits: [edit], + // // }, + // // isPreferred: true, + // // }; + // // }); + // return { + // actions, + // dispose: () => {}, + // }; + // }, + // }); } -export class LinterWorker { - static hook = new EventEmitter(); +// export class LinterWorker { +// static hook = new EventEmitter(); - static sendLinterMessage(data: unknown) { - linterWorker.postMessage(data); - } -} +// static sendLinterMessage(data: unknown) { +// linterWorker.postMessage(data); +// } +// } -linterWorker.onmessage = (event) => { - LinterWorker.hook.emit("message", event.data); -}; +// linterWorker.onmessage = (event) => { +// LinterWorker.hook.emit("message", event.data); +// };