diff --git a/example/.umirc.ts b/example/.umirc.ts index 8b91b66..822eb46 100644 --- a/example/.umirc.ts +++ b/example/.umirc.ts @@ -6,8 +6,6 @@ export default defineConfig({ extensions: { name: 'Umi Extension Plugin', description: '用于 Chrome 插件开发的 Umi 插件', - manifestVersion: 2, - minimumChromeVersion: '80', icons: { 16: 'logo/logo@16.png', 32: 'logo/logo@32.png', @@ -20,17 +18,12 @@ export default defineConfig({ openInTab: true, }, popupUI: '@/pages/index', - permissions: ['http://*/*', 'https://*/*'], + permissions: ['storage'], + host_permissions: ['http://*/*', 'https://*/*'], background: { - scripts: ['@/background/index'], - persistent: true, + service_worker: '@/background/index', }, contentScripts: [ - { - matches: ['http://*/*', 'https://*/*'], - entries: ['jquery', 'require.js'], - runAt: 'document_end', - }, { matches: ['https://github.com/*'], entries: ['@/contentScripts/github'], @@ -41,7 +34,12 @@ export default defineConfig({ }, ], extends: { - web_accessible_resources: ['*'], + web_accessible_resources: [ + { + resources: ['test1.png', 'test2.png'], + matches: ['https://web-accessible-resources-1.glitch.me/*'], + }, + ], }, }, }); diff --git a/example/package.json b/example/package.json index 1766083..91e83dd 100644 --- a/example/package.json +++ b/example/package.json @@ -1,10 +1,10 @@ { + "version": "1.0.0", "dependencies": { "jquery": "^3.6.0", "require.js": "^1.0.0" }, "devDependencies": { "@types/jquery": "^3.5.5" - }, - "version": "1.0.0" + } } diff --git a/example/src/contentScripts/github/index.tsx b/example/src/contentScripts/github/index.tsx index a7441e3..661ea16 100644 --- a/example/src/contentScripts/github/index.tsx +++ b/example/src/contentScripts/github/index.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import ReactDOM from 'react-dom'; +import ReactDOM from 'react-dom/client'; import styles from './style.less'; console.log(`Current page's url must be prefixed with https://github.com`); @@ -10,7 +10,9 @@ const App = () => { }; const container = document.createElement('div'); + container.id = 'umi'; document.body.append(container); -ReactDOM.render(, container); +const root = ReactDOM.createRoot(container); +root.render(); diff --git a/package.json b/package.json index 4e958ee..f6d3ed2 100644 --- a/package.json +++ b/package.json @@ -118,6 +118,6 @@ "typedoc-plugin-external-module-map": "^1.3.2", "typedoc-plugin-markdown": "^3.13.4", "typescript": "^4.2.3", - "umi": "^3.4.11" + "umi": "^3.5.33" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b7eaf4a..ae01991 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4,107 +4,119 @@ overrides: react: ^18.0.0 react-dom: ^18.0.0 -specifiers: - '@ant-design/pro-skeleton': ^1.0.13 - '@commitlint/cli': ^12.0.0 - '@testing-library/react': ^13.0.0 - '@testing-library/react-hooks': ^8.0.0 - '@types/fs-extra': ^9.0.6 - '@types/generate-json-webpack-plugin': ^0.3.2 - '@types/jest': ^26.0.20 - '@types/lodash': ^4.14.168 - '@types/node': ^18.7.2 - '@types/react': ^18.0.0 - '@types/react-dom': ^18.0.0 - '@umijs/fabric': ^2.4.8 - '@umijs/preset-dumi': ^1.0.38 - '@umijs/test': ^3.0.10 - '@umijs/test-utils': ^3.3.7 - antd: ^4.22.4 - babel-plugin-import: ^1.13.3 - body-parser: ^1.18.2 - commitlint-config-gitmoji: ^2.2.0 - concurrently: ^6.0.0 - conventional-changelog-gitmoji-config: ^1.3.6 - cross-env: ^7.0.3 - eslint: ^7.7.0 - eslint-import-resolver-alias: ^1.1.2 - eslint-import-resolver-typescript: ^2.4.0 - express: ^4.15.3 - father-build: ^1.19.1 - fs-extra: ^9.0.1 - generate-json-webpack-plugin: ^1.0.0 - gh-pages: ^3.1.0 - got: ^11.8.2 - husky: ^8.0.1 - lint-staged: ^10.0.8 - npm-run-all: ^4.1.5 - pify: ^5.0.0 - prettier: ^2.7.1 - puppeteer: ^16.1.0 - react: ^18.0.0 - react-dom: ^18.0.0 - semantic-release: ^19.0.3 - semantic-release-config-gitmoji: ^1.2.4 - test-umi-plugin: ^0.1.0 - ts-jest: ^26.4.4 - typedoc: ^0.23.10 - typedoc-plugin-external-module-map: ^1.3.2 - typedoc-plugin-markdown: ^3.13.4 - typescript: ^4.2.3 - umi: ^3.4.11 - -dependencies: - fs-extra: 9.1.0 - generate-json-webpack-plugin: 1.0.0 - got: 11.8.5 - -devDependencies: - '@ant-design/pro-skeleton': 1.0.13_biqbaboplfbrettd7655fr4n2y - '@commitlint/cli': 12.1.4 - '@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y - '@testing-library/react-hooks': 8.0.1_zxljzmqdrxwnuenbkrz77w74uy - '@types/fs-extra': 9.0.13 - '@types/generate-json-webpack-plugin': 0.3.4 - '@types/jest': 26.0.24 - '@types/lodash': 4.14.182 - '@types/node': 18.7.2 - '@types/react': 18.0.17 - '@types/react-dom': 18.0.6 - '@umijs/fabric': 2.12.2 - '@umijs/preset-dumi': 1.1.47_4lhw5mpypdqkwh5z6al4n52e3y - '@umijs/test': 3.5.32 - '@umijs/test-utils': 3.5.32_ywhf64p4izmzhohh4vp5ldnspu - antd: 4.22.4_biqbaboplfbrettd7655fr4n2y - babel-plugin-import: 1.13.5 - body-parser: 1.20.0 - commitlint-config-gitmoji: 2.2.5 - concurrently: 6.5.1 - conventional-changelog-gitmoji-config: 1.4.3 - cross-env: 7.0.3 - eslint: 7.32.0 - eslint-import-resolver-alias: 1.1.2 - eslint-import-resolver-typescript: 2.7.1_eslint@7.32.0 - express: 4.18.1 - father-build: 1.22.3 - gh-pages: 3.2.3 - husky: 8.0.1 - lint-staged: 10.5.4 - npm-run-all: 4.1.5 - pify: 5.0.0 - prettier: 2.7.1 - puppeteer: 16.1.0 - react: 18.2.0 - react-dom: 18.2.0_react@18.2.0 - semantic-release: 19.0.3 - semantic-release-config-gitmoji: 1.2.4_semantic-release@19.0.3 - test-umi-plugin: 0.1.0_k2z3nzfesuepgroq35dngb5t2e - ts-jest: 26.5.6_typescript@4.7.4 - typedoc: 0.23.10_typescript@4.7.4 - typedoc-plugin-external-module-map: 1.3.2_typedoc@0.23.10 - typedoc-plugin-markdown: 3.13.4_typedoc@0.23.10 - typescript: 4.7.4 - umi: 3.5.32 +importers: + + .: + specifiers: + '@ant-design/pro-skeleton': ^1.0.13 + '@commitlint/cli': ^12.0.0 + '@testing-library/react': ^13.0.0 + '@testing-library/react-hooks': ^8.0.0 + '@types/fs-extra': ^9.0.6 + '@types/generate-json-webpack-plugin': ^0.3.2 + '@types/jest': ^26.0.20 + '@types/lodash': ^4.14.168 + '@types/node': ^18.7.2 + '@types/react': ^18.0.0 + '@types/react-dom': ^18.0.0 + '@umijs/fabric': ^2.4.8 + '@umijs/preset-dumi': ^1.0.38 + '@umijs/test': ^3.0.10 + '@umijs/test-utils': ^3.3.7 + antd: ^4.22.4 + babel-plugin-import: ^1.13.3 + body-parser: ^1.18.2 + commitlint-config-gitmoji: ^2.2.0 + concurrently: ^6.0.0 + conventional-changelog-gitmoji-config: ^1.3.6 + cross-env: ^7.0.3 + eslint: ^7.7.0 + eslint-import-resolver-alias: ^1.1.2 + eslint-import-resolver-typescript: ^2.4.0 + express: ^4.15.3 + father-build: ^1.19.1 + fs-extra: ^9.0.1 + generate-json-webpack-plugin: ^1.0.0 + gh-pages: ^3.1.0 + got: ^11.8.2 + husky: ^8.0.1 + lint-staged: ^10.0.8 + npm-run-all: ^4.1.5 + pify: ^5.0.0 + prettier: ^2.7.1 + puppeteer: ^16.1.0 + react: ^18.0.0 + react-dom: ^18.0.0 + semantic-release: ^19.0.3 + semantic-release-config-gitmoji: ^1.2.4 + test-umi-plugin: ^0.1.0 + ts-jest: ^26.4.4 + typedoc: ^0.23.10 + typedoc-plugin-external-module-map: ^1.3.2 + typedoc-plugin-markdown: ^3.13.4 + typescript: ^4.2.3 + umi: ^3.5.33 + dependencies: + fs-extra: 9.1.0 + generate-json-webpack-plugin: 1.0.0 + got: 11.8.5 + devDependencies: + '@ant-design/pro-skeleton': 1.0.13_biqbaboplfbrettd7655fr4n2y + '@commitlint/cli': 12.1.4 + '@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y + '@testing-library/react-hooks': 8.0.1_zxljzmqdrxwnuenbkrz77w74uy + '@types/fs-extra': 9.0.13 + '@types/generate-json-webpack-plugin': 0.3.4 + '@types/jest': 26.0.24 + '@types/lodash': 4.14.182 + '@types/node': 18.7.2 + '@types/react': 18.0.17 + '@types/react-dom': 18.0.6 + '@umijs/fabric': 2.12.2 + '@umijs/preset-dumi': 1.1.47_qihto5vn43dnf7aiieqqpk5rqa + '@umijs/test': 3.5.32 + '@umijs/test-utils': 3.5.32_d5wpjxy7xfft2omllrhzjkyjyy + antd: 4.22.4_biqbaboplfbrettd7655fr4n2y + babel-plugin-import: 1.13.5 + body-parser: 1.20.0 + commitlint-config-gitmoji: 2.2.5 + concurrently: 6.5.1 + conventional-changelog-gitmoji-config: 1.4.3 + cross-env: 7.0.3 + eslint: 7.32.0 + eslint-import-resolver-alias: 1.1.2 + eslint-import-resolver-typescript: 2.7.1_eslint@7.32.0 + express: 4.18.1 + father-build: 1.22.3 + gh-pages: 3.2.3 + husky: 8.0.1 + lint-staged: 10.5.4 + npm-run-all: 4.1.5 + pify: 5.0.0 + prettier: 2.7.1 + puppeteer: 16.1.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + semantic-release: 19.0.3 + semantic-release-config-gitmoji: 1.2.4_semantic-release@19.0.3 + test-umi-plugin: 0.1.0_5ltsttlm5hyxok7ztxon766wla + ts-jest: 26.5.6_typescript@4.7.4 + typedoc: 0.23.10_typescript@4.7.4 + typedoc-plugin-external-module-map: 1.3.2_typedoc@0.23.10 + typedoc-plugin-markdown: 3.13.4_typedoc@0.23.10 + typescript: 4.7.4 + umi: 3.5.33 + + example: + specifiers: + '@types/jquery': ^3.5.5 + jquery: ^3.6.0 + require.js: ^1.0.0 + dependencies: + jquery: 3.6.1 + require.js: 1.0.0 + devDependencies: + '@types/jquery': 3.5.14 packages: @@ -3991,6 +4003,12 @@ packages: pretty-format: 26.6.2 dev: true + /@types/jquery/3.5.14: + resolution: {integrity: sha512-X1gtMRMbziVQkErhTQmSe2jFwwENA/Zr+PprCkF63vFq+Yt5PZ4AlKqgmeNlwgn7dhsXEK888eIW2520EpC+xg==} + dependencies: + '@types/sizzle': 2.3.3 + dev: true + /@types/json-buffer/3.0.0: resolution: {integrity: sha512-3YP80IxxFJB4b5tYC2SUPwkg0XQLiu0nWvhRgEatgjf+29IcWO9X1k8xRv5DGssJ/lCrjYTjQPcobJr2yWIVuQ==} dev: false @@ -4158,6 +4176,10 @@ packages: '@types/node': 18.7.2 dev: true + /@types/sizzle/2.3.3: + resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} + dev: true + /@types/source-list-map/0.1.2: resolution: {integrity: sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==} dev: true @@ -4409,18 +4431,36 @@ packages: '@umijs/utils': 3.5.32 dev: true + /@umijs/ast/3.5.33: + resolution: {integrity: sha512-ZX5tjvfkwwUdnGQ9PtR0sie1YM8EcLwVxtsGdm1hrzSFuLY9aw1PZYvTRlt+b3/wYq4a+4/NAvnTtZrBRWcCuw==} + dependencies: + '@umijs/utils': 3.5.33 + dev: true + /@umijs/babel-plugin-auto-css-modules/3.5.32: resolution: {integrity: sha512-ofkGlYLVHdaSfFrCVwcbK8AfsUCXZa3FOtWrxo3dyFdQ9Usv7DrCFaQDYZldvNxcSa2N13ZpNvko3uie27OzCQ==} dependencies: '@umijs/utils': 3.5.32 dev: true + /@umijs/babel-plugin-auto-css-modules/3.5.33: + resolution: {integrity: sha512-P4xwUPBhaeZ4ngpSpZ2tZv+SPJZxrYaLOBT+2foGamlNBDXQ/QmtDLtV8HnUCCBbZJG5CUUrNNibkqzNKUjN+w==} + dependencies: + '@umijs/utils': 3.5.33 + dev: true + /@umijs/babel-plugin-import-to-await-require/3.5.32: resolution: {integrity: sha512-038abo0+uCdtXJd4apOFBw3+H1Egl8r++gIzF76kjCc83J7WZBhv+PAtqBZnUirAzU1G399SFjmZ5cG4EnELqw==} dependencies: '@umijs/utils': 3.5.32 dev: true + /@umijs/babel-plugin-import-to-await-require/3.5.33: + resolution: {integrity: sha512-bZZXqr6MjGhTpuiweZMU3shq4HVFccOZfXyBDALpEXX8ngdh8kVGIY22zpGcutfpuPLKz3j8G1sgsZoCGq7Xig==} + dependencies: + '@umijs/utils': 3.5.33 + dev: true + /@umijs/babel-plugin-lock-core-js-3/3.5.32: resolution: {integrity: sha512-QebjIiwGR2zTFIwPrHpkonomc7PBSizBruTPFeZbWkAbhLXIjrlGMUVOjOzz5v8FZZvCqQljzfYgdK0WGawV2g==} dependencies: @@ -4428,12 +4468,25 @@ packages: core-js: 3.6.5 dev: true + /@umijs/babel-plugin-lock-core-js-3/3.5.33: + resolution: {integrity: sha512-DBjjwtsROW0DfHaiBU+OK0X1e/aJ3vmtKvpA3p4DGQkzhINCeif7ciBsnHD0U8s6C6+S+q6Z4uqYg8HMsZbQjQ==} + dependencies: + '@umijs/utils': 3.5.33 + core-js: 3.6.5 + dev: true + /@umijs/babel-plugin-no-anonymous-default-export/3.5.32: resolution: {integrity: sha512-lY09KzAjyZFEWz3V9Th5lFySKJEW9nNzu4/Gh2cypYk1YQoJtEZ+onpWmdWKr5k372bJGnc8jLUi0baHeDsMcw==} dependencies: '@umijs/utils': 3.5.32 dev: true + /@umijs/babel-plugin-no-anonymous-default-export/3.5.33: + resolution: {integrity: sha512-zKK2BN0rMVIgOMkQS8AqtXGDRjljIj/iaOqaaBqh3u3YBgFb2eLh4XXrQW3h0Nw8aWTwH05zqdu/EimxSueDCQ==} + dependencies: + '@umijs/utils': 3.5.33 + dev: true + /@umijs/babel-preset-umi/3.5.32: resolution: {integrity: sha512-G1Qp2HFz/O3HVKI5sppQeDBs6wKArMWz/MJUy4Kge2L084BSL8FKcGkIrG+z6CeXciSQL2aro8WW+f2tO3uL1g==} dependencies: @@ -4446,39 +4499,51 @@ packages: '@umijs/utils': 3.5.32 dev: true - /@umijs/bundler-utils/3.5.32_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-xTPtPBsM1VUztz2Y0gGviH0LgGy2meMnwcTpKoLHCNoUWzzFCXKWrD88NLDBJMzUkEoaGXPReZutDnMx/Ip3YQ==} + /@umijs/babel-preset-umi/3.5.33: + resolution: {integrity: sha512-y5B7capTn5oJp/Vd4hwhiMEK/pe+l2tUgv65Kzw8x9hnbpGVvgsWajHnJIYu6ScsTlzp9myHVDco7J2AtDjt6g==} dependencies: - '@umijs/babel-preset-umi': 3.5.32 - '@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y - '@umijs/utils': 3.5.32 + '@babel/runtime': 7.18.6 + '@umijs/babel-plugin-auto-css-modules': 3.5.33 + '@umijs/babel-plugin-import-to-await-require': 3.5.33 + '@umijs/babel-plugin-lock-core-js-3': 3.5.33 + '@umijs/babel-plugin-no-anonymous-default-export': 3.5.33 + '@umijs/deps': 3.5.33 + '@umijs/utils': 3.5.33 + dev: true + + /@umijs/bundler-utils/3.5.33_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-OiWkdGiw4N8Y1a5+lmPy8kvcjnlObvYlcUI2Y713LHr1jqzG+A6FaXVWNM92MdqKNUhFJ39IZTT/+ezcdFDaWA==} + dependencies: + '@umijs/babel-preset-umi': 3.5.33 + '@umijs/types': 3.5.33_biqbaboplfbrettd7655fr4n2y + '@umijs/utils': 3.5.33 transitivePeerDependencies: - react - react-dom - react-router dev: true - /@umijs/bundler-utils/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa: - resolution: {integrity: sha512-xTPtPBsM1VUztz2Y0gGviH0LgGy2meMnwcTpKoLHCNoUWzzFCXKWrD88NLDBJMzUkEoaGXPReZutDnMx/Ip3YQ==} + /@umijs/bundler-utils/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa: + resolution: {integrity: sha512-OiWkdGiw4N8Y1a5+lmPy8kvcjnlObvYlcUI2Y713LHr1jqzG+A6FaXVWNM92MdqKNUhFJ39IZTT/+ezcdFDaWA==} dependencies: - '@umijs/babel-preset-umi': 3.5.32 - '@umijs/types': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa - '@umijs/utils': 3.5.32 + '@umijs/babel-preset-umi': 3.5.33 + '@umijs/types': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa + '@umijs/utils': 3.5.33 transitivePeerDependencies: - react - react-dom - react-router dev: true - /@umijs/bundler-webpack/3.5.32_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-a6ZkJJLHhXZBhGWvOUOjXc3gqlcRFcr6ln8cMHI9DmvLF8U4l0D6KsfDX/I31JtPm3aUnb/vjZ31MfV9LiSbaw==} + /@umijs/bundler-webpack/3.5.33_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-7S78lXAnuh0lMAdGzOzMEWlLUc+cYEo0M5aUQREIYfdjzAOioo7p7p09jss5dLpbhs0jBXrGkJBAxyc2E+2d2A==} hasBin: true dependencies: - '@umijs/bundler-utils': 3.5.32_biqbaboplfbrettd7655fr4n2y + '@umijs/bundler-utils': 3.5.33_biqbaboplfbrettd7655fr4n2y '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 - '@umijs/deps': 3.5.32 - '@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y - '@umijs/utils': 3.5.32 + '@umijs/deps': 3.5.33 + '@umijs/types': 3.5.33_biqbaboplfbrettd7655fr4n2y + '@umijs/utils': 3.5.33 jest-worker: 26.6.2 node-libs-browser: 2.2.1 normalize-url: 1.9.1 @@ -4495,15 +4560,15 @@ packages: - react-router dev: true - /@umijs/bundler-webpack/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa: - resolution: {integrity: sha512-a6ZkJJLHhXZBhGWvOUOjXc3gqlcRFcr6ln8cMHI9DmvLF8U4l0D6KsfDX/I31JtPm3aUnb/vjZ31MfV9LiSbaw==} + /@umijs/bundler-webpack/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa: + resolution: {integrity: sha512-7S78lXAnuh0lMAdGzOzMEWlLUc+cYEo0M5aUQREIYfdjzAOioo7p7p09jss5dLpbhs0jBXrGkJBAxyc2E+2d2A==} hasBin: true dependencies: - '@umijs/bundler-utils': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa + '@umijs/bundler-utils': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa '@umijs/case-sensitive-paths-webpack-plugin': 1.0.1 - '@umijs/deps': 3.5.32 - '@umijs/types': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa - '@umijs/utils': 3.5.32 + '@umijs/deps': 3.5.33 + '@umijs/types': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa + '@umijs/utils': 3.5.33 jest-worker: 26.6.2 node-libs-browser: 2.2.1 normalize-url: 1.9.1 @@ -4533,6 +4598,15 @@ packages: '@umijs/utils': 3.5.32 dev: true + /@umijs/core/3.5.33: + resolution: {integrity: sha512-b3X3ZTYo4dsFm4F27HjbJOfTnczNJ6DN4/38Bzc5YwQmt5NUOF8Dpbh5jkGVHmxvj7bu0zygMnHXwlrl3VAmhQ==} + dependencies: + '@umijs/ast': 3.5.33 + '@umijs/babel-preset-umi': 3.5.33 + '@umijs/deps': 3.5.33 + '@umijs/utils': 3.5.33 + dev: true + /@umijs/deps/3.5.32: resolution: {integrity: sha512-fH25YLknGKg+q3ogWtcK3/dlKDRPD842KgKBf7S6F/d3HJEINijxkcCprfXRftYXN6WzvKzYsHU7l5FaTbY7vA==} dependencies: @@ -4545,6 +4619,18 @@ packages: regenerate-unicode-properties: 10.0.1 dev: true + /@umijs/deps/3.5.33: + resolution: {integrity: sha512-WlnesWIUQawiBAmZS5YG0CdNYIF5uWJ76VjEFvEfz5nlvjd7ouAOEkxqJqhcaJ9//V2C90/WIYf3V6jx2n6c7Q==} + dependencies: + '@bloomberg/record-tuple-polyfill': 0.0.3 + chokidar: 3.5.1 + clipboardy: 2.3.0 + esbuild: 0.12.15 + jest-worker: 24.9.0 + prettier: 2.2.1 + regenerate-unicode-properties: 10.0.1 + dev: true + /@umijs/fabric/2.12.2: resolution: {integrity: sha512-3fLQ3SOFmyzEbv0ELUPBRMfgMGNkWtJVnhgMmcvgtOfq4g3croDVKQetxjfjJ3cfYqVGtFfbQJ//RuEdYU3+2A==} hasBin: true @@ -4585,30 +4671,30 @@ packages: - supports-color dev: true - /@umijs/plugin-analytics/0.2.3_umi@3.5.32: + /@umijs/plugin-analytics/0.2.3_umi@3.5.33: resolution: {integrity: sha512-6Fj+EOzd2vXe1YHjK1aqhHlITWBXcnhPd6pxAEjeGu3vAxDcfp1yM3PoRr//baBXk8CYF2krWDQGYy+OlRXM4A==} peerDependencies: umi: 3.x dependencies: - umi: 3.5.32 + umi: 3.5.33 dev: true - /@umijs/preset-built-in/3.5.32_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-5ndKv96AmUNmQ4QcAjvJFg0+C4Xpd/OICLHVM0vgnpWzKcjB+I0Obm8D+RQjM+qTo9Mmviu+Q7FNpYa3Vc3OEw==} + /@umijs/preset-built-in/3.5.33_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-ctmcpC/T2YSKepgGo1BVTl00cIzqSfyGQSWp9deMurOX/Ry6U+qUstYuW+D/PbxP9ZOhsx67/XWHNudpt1dzNA==} peerDependencies: react: 16.x || 17.x dependencies: '@types/react-router-config': 5.0.2 - '@umijs/babel-preset-umi': 3.5.32 - '@umijs/bundler-webpack': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa - '@umijs/core': 3.5.32 - '@umijs/deps': 3.5.32 - '@umijs/renderer-mpa': 3.5.32_biqbaboplfbrettd7655fr4n2y - '@umijs/renderer-react': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa - '@umijs/runtime': 3.5.32_react@18.2.0 - '@umijs/server': 3.5.32 - '@umijs/types': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa - '@umijs/utils': 3.5.32 + '@umijs/babel-preset-umi': 3.5.33 + '@umijs/bundler-webpack': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa + '@umijs/core': 3.5.33 + '@umijs/deps': 3.5.33 + '@umijs/renderer-mpa': 3.5.33_biqbaboplfbrettd7655fr4n2y + '@umijs/renderer-react': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa + '@umijs/runtime': 3.5.33_react@18.2.0 + '@umijs/server': 3.5.33 + '@umijs/types': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa + '@umijs/utils': 3.5.33 ansi-html: 0.0.7 core-js: 3.6.5 core-js-pure: 3.24.1 @@ -4629,7 +4715,7 @@ packages: - react-dom dev: true - /@umijs/preset-dumi/1.1.47_4lhw5mpypdqkwh5z6al4n52e3y: + /@umijs/preset-dumi/1.1.47_qihto5vn43dnf7aiieqqpk5rqa: resolution: {integrity: sha512-yv3dzeMSCc5CjmRe8nkVtodNYcJefyRev3T+hhjx74hPtwxNOVlx7PsDov66xdnw9uWUNbfBL7c5g3xT1sCWJQ==} peerDependencies: umi: ^3.0.0 @@ -4642,7 +4728,7 @@ packages: '@mapbox/hast-util-to-jsx': 1.0.0 '@umijs/babel-preset-umi': 3.5.32 '@umijs/core': 3.5.32 - '@umijs/plugin-analytics': 0.2.3_umi@3.5.32 + '@umijs/plugin-analytics': 0.2.3_umi@3.5.33 '@umijs/runtime': 3.5.32_react@18.2.0 '@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y '@umijs/utils': 3.5.32 @@ -4677,7 +4763,7 @@ packages: sitemap: 6.4.0 slash2: 2.0.0 terser: 5.14.2 - umi: 3.5.32 + umi: 3.5.33 unified: 8.4.2 unist-util-visit: 2.0.3 unist-util-visit-parents: 3.1.1 @@ -4692,15 +4778,15 @@ packages: - utf-8-validate dev: true - /@umijs/renderer-mpa/3.5.32_biqbaboplfbrettd7655fr4n2y: - resolution: {integrity: sha512-JSKGmx9QS8xJZFz2PRNqTO0JmLxyebDoMJEdrXJHLHCQ3koP/xb5UDAkgAiJjJttEzeZncPC1fGBaAv14bsXnQ==} + /@umijs/renderer-mpa/3.5.33_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-xBGX1duw395718DAJasLNFwxhc+N0bEMfBf0flGYFj2tS+dOyU+2zMOBbNpwJOVVpc8nRh17x2ioNY23Xei34w==} peerDependencies: react: 16.x || 17.x react-dom: 16.x || 17.x dependencies: '@types/react': 16.14.30 '@types/react-dom': 16.9.16 - '@umijs/runtime': 3.5.32_react@18.2.0 + '@umijs/runtime': 3.5.33_react@18.2.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 dev: true @@ -4722,8 +4808,8 @@ packages: - react-router dev: true - /@umijs/renderer-react/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa: - resolution: {integrity: sha512-CvArmiKf4xzu/eLmR1rgDt485AqAR7idaQaVFXWkvigVCSnpNEe+vMi8ldl7GNnl8kEEKoJnTezM8dqjnjuCMA==} + /@umijs/renderer-react/3.5.33_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-zMGSF+eBneC5ob4RFxuC17IV5rf/xrQ4HJVog9Ap9ug6/afzGJjcp9A9tUL3ae+qXMzBAih46tAWaOG7RLNbPQ==} peerDependencies: react: 16.x || 17.x react-dom: 16.x || 17.x @@ -4731,7 +4817,24 @@ packages: '@types/react': 16.14.30 '@types/react-dom': 16.9.16 '@types/react-router-config': 5.0.6 - '@umijs/runtime': 3.5.32_react@18.2.0 + '@umijs/runtime': 3.5.33_react@18.2.0 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + react-router-config: 5.1.1_react@18.2.0 + transitivePeerDependencies: + - react-router + dev: true + + /@umijs/renderer-react/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa: + resolution: {integrity: sha512-zMGSF+eBneC5ob4RFxuC17IV5rf/xrQ4HJVog9Ap9ug6/afzGJjcp9A9tUL3ae+qXMzBAih46tAWaOG7RLNbPQ==} + peerDependencies: + react: 16.x || 17.x + react-dom: 16.x || 17.x + dependencies: + '@types/react': 16.14.30 + '@types/react-dom': 16.9.16 + '@types/react-router-config': 5.0.6 + '@umijs/runtime': 3.5.33_react@18.2.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-router-config: 5.1.1_cngu5vvr3qrvleghcym2mjf55u @@ -4753,6 +4856,20 @@ packages: use-subscription: 1.5.1_react@18.2.0 dev: true + /@umijs/runtime/3.5.33_react@18.2.0: + resolution: {integrity: sha512-9YL0XcGhQszxu2OLWigPn1sWbvuWaPn7PZXvlp7q+AhMrFTz0kwyU3H1/aPphtv0t7k7e+5yJmG1G15fW7Oppg==} + peerDependencies: + react: 16.x || 17.x + dependencies: + '@types/react-router': 5.1.12 + '@types/react-router-dom': 5.1.7 + history-with-query: 4.10.4 + react: 18.2.0 + react-router: 5.2.0_react@18.2.0 + react-router-dom: 5.2.0_react@18.2.0 + use-subscription: 1.5.1_react@18.2.0 + dev: true + /@umijs/server/3.5.32: resolution: {integrity: sha512-GRB4vfnXxX/7TfuRo73teUoIk1FuiW00jcm4lrXbJuw76QoUIbtI59dalTleIlKaclzRObanmpoRTI3JTu9LUg==} dependencies: @@ -4761,14 +4878,22 @@ packages: '@umijs/utils': 3.5.32 dev: true - /@umijs/test-utils/3.5.32_ywhf64p4izmzhohh4vp5ldnspu: + /@umijs/server/3.5.33: + resolution: {integrity: sha512-isYwXJsJjUT1IH8VW/44T9K8+dKnd9ul+PC6+6DyWIq5vUfVx7CCVlDzHrP0CUr60XQY7YRwTFwgd4n7mrFpJQ==} + dependencies: + '@umijs/core': 3.5.33 + '@umijs/deps': 3.5.33 + '@umijs/utils': 3.5.33 + dev: true + + /@umijs/test-utils/3.5.32_d5wpjxy7xfft2omllrhzjkyjyy: resolution: {integrity: sha512-FlYV5BdpR/YOqyRUMn3jtCj7SgnOh+WJeEKhDoU1cBh3q40AuJm6+oJv1AnJW/kiux2Japz389d4eV5XX7+qVg==} peerDependencies: '@testing-library/react': ^9.4.0 umi: ^3.0.0 dependencies: '@testing-library/react': 13.3.0_biqbaboplfbrettd7655fr4n2y - umi: 3.5.32 + umi: 3.5.33 dev: true /@umijs/test/3.5.32: @@ -4809,15 +4934,31 @@ packages: - react-router dev: true - /@umijs/types/3.5.32_r2jggmk3i5ygztb6jtd24c3zsa: - resolution: {integrity: sha512-Mk2Kmz4vSey9beg8FKm2tuu3nYFGycgL1AtukZ6TFlrhhocjPrJzQ7Klx5DcfIBvqbrDSsUq/u16fAU5vpPYbQ==} + /@umijs/types/3.5.33_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-rRsqs1EkVsUrw52a2gEob5CWITwKy4k72IXkpQwvQZhSuRRzwJFeN7+vu8gZHxJIQtm7vvUjVPxCF6xUw6Iqzw==} dependencies: - '@umijs/babel-preset-umi': 3.5.32 - '@umijs/core': 3.5.32 - '@umijs/deps': 3.5.32 - '@umijs/renderer-react': 3.5.32_r2jggmk3i5ygztb6jtd24c3zsa - '@umijs/server': 3.5.32 - '@umijs/utils': 3.5.32 + '@umijs/babel-preset-umi': 3.5.33 + '@umijs/core': 3.5.33 + '@umijs/deps': 3.5.33 + '@umijs/renderer-react': 3.5.33_biqbaboplfbrettd7655fr4n2y + '@umijs/server': 3.5.33 + '@umijs/utils': 3.5.33 + webpack-chain: 6.5.1 + transitivePeerDependencies: + - react + - react-dom + - react-router + dev: true + + /@umijs/types/3.5.33_r2jggmk3i5ygztb6jtd24c3zsa: + resolution: {integrity: sha512-rRsqs1EkVsUrw52a2gEob5CWITwKy4k72IXkpQwvQZhSuRRzwJFeN7+vu8gZHxJIQtm7vvUjVPxCF6xUw6Iqzw==} + dependencies: + '@umijs/babel-preset-umi': 3.5.33 + '@umijs/core': 3.5.33 + '@umijs/deps': 3.5.33 + '@umijs/renderer-react': 3.5.33_r2jggmk3i5ygztb6jtd24c3zsa + '@umijs/server': 3.5.33 + '@umijs/utils': 3.5.33 webpack-chain: 6.5.1 transitivePeerDependencies: - react @@ -4832,6 +4973,13 @@ packages: '@umijs/deps': 3.5.32 dev: true + /@umijs/utils/3.5.33: + resolution: {integrity: sha512-Urg4FXbKN03+frIzc5nnC1vTQDGmgW4d0Kh1WRZ9V/6J6o6a9ks3jRDMU/8ak1IeAO2jbWqcTAd1ub23oVXYPg==} + dependencies: + '@umijs/babel-preset-umi': 3.5.33 + '@umijs/deps': 3.5.33 + dev: true + /JSONStream/1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -7550,7 +7698,7 @@ packages: '@umijs/preset-dumi': 1.x react: ^16.13.1 || ^17.0.0 dependencies: - '@umijs/preset-dumi': 1.1.47_4lhw5mpypdqkwh5z6al4n52e3y + '@umijs/preset-dumi': 1.1.47_qihto5vn43dnf7aiieqqpk5rqa lodash.throttle: 4.1.1 prism-react-renderer: 1.3.5_react@18.2.0 prismjs: 1.28.0 @@ -11098,6 +11246,10 @@ packages: - utf-8-validate dev: true + /jquery/3.6.1: + resolution: {integrity: sha512-opJeO4nCucVnsjiXOE+/PcCgYw9Gwpvs/a6B1LL/lQhwWwpbVEVYDZ1FokFr8PRc7ghYlrFPuyHuiiDNTQxmcw==} + dev: false + /js-tokens/4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true @@ -15547,6 +15699,10 @@ packages: resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} dev: true + /require.js/1.0.0: + resolution: {integrity: sha512-+KwgNIkkrtblYf9Agaxy8p1eTnf7QkZQGk/gq+3rfZr4tROFpCMrz9/ImWfV6dQAO34MaR+VML3jKhen0Ea03A==} + dev: false + /reserved-words/0.1.2: resolution: {integrity: sha512-0S5SrIUJ9LfpbVl4Yzij6VipUdafHrOTzvmfazSw/jeZrZtQK303OPZW+obtkaw7jQlTQppy0UvZWm9872PbRw==} dev: true @@ -17093,7 +17249,7 @@ packages: minimatch: 3.1.2 dev: true - /test-umi-plugin/0.1.0_k2z3nzfesuepgroq35dngb5t2e: + /test-umi-plugin/0.1.0_5ltsttlm5hyxok7ztxon766wla: resolution: {integrity: sha512-+yo4clw963nHNxGiE/FaDU/dlz3maeOXDvKqKea0jBaB08naH6pv50maWKdfYUoOB8aRcQVEVeBS/Tab3YohMw==} peerDependencies: puppeteer: '1' @@ -17101,7 +17257,7 @@ packages: dependencies: puppeteer: 16.1.0 serve-static: 1.15.0 - umi: 3.5.32 + umi: 3.5.33 transitivePeerDependencies: - supports-color dev: true @@ -17549,17 +17705,17 @@ packages: dev: true optional: true - /umi/3.5.32: - resolution: {integrity: sha512-LTvlCHJ3sV/jbcUneRUUR/H+iZpmNRfmMV+9vcYaOkMz6C/gOTqXRQ8SeLXzFDzRUk8hbnzemxwHdRGPWvjpyg==} + /umi/3.5.33: + resolution: {integrity: sha512-ltbxoU1j+78by8wYXOO/8aGiUhS+7zZNhuRqF4R9jYFzz7wldpFaqLUUntqcdlDX+zEytaXhJHKncUJX/8Ck0Q==} hasBin: true dependencies: - '@umijs/bundler-webpack': 3.5.32_biqbaboplfbrettd7655fr4n2y - '@umijs/core': 3.5.32 - '@umijs/deps': 3.5.32 - '@umijs/preset-built-in': 3.5.32_biqbaboplfbrettd7655fr4n2y - '@umijs/runtime': 3.5.32_react@18.2.0 - '@umijs/types': 3.5.32_biqbaboplfbrettd7655fr4n2y - '@umijs/utils': 3.5.32 + '@umijs/bundler-webpack': 3.5.33_biqbaboplfbrettd7655fr4n2y + '@umijs/core': 3.5.33 + '@umijs/deps': 3.5.33 + '@umijs/preset-built-in': 3.5.33_biqbaboplfbrettd7655fr4n2y + '@umijs/runtime': 3.5.33_react@18.2.0 + '@umijs/types': 3.5.33_biqbaboplfbrettd7655fr4n2y + '@umijs/utils': 3.5.33 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 v8-compile-cache: 2.3.0 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml new file mode 100644 index 0000000..77e5e3c --- /dev/null +++ b/pnpm-workspace.yaml @@ -0,0 +1,4 @@ +packages: + - '.' + # all packages in subdirs of components/ + - 'example' diff --git a/src/fixtures/normal/.umirc.ts b/src/fixtures/normal/.umirc.ts index 637b442..9f41502 100644 --- a/src/fixtures/normal/.umirc.ts +++ b/src/fixtures/normal/.umirc.ts @@ -17,8 +17,7 @@ export default { }, permissions: ['http://*/*', 'https://*/*'], background: { - scripts: ['@/background/index'], - persistent: true, + service_worker: '@/background/index', }, contentScripts: [ { diff --git a/src/functions/background.ts b/src/functions/background.ts index 0c95d00..734a1f6 100644 --- a/src/functions/background.ts +++ b/src/functions/background.ts @@ -17,12 +17,12 @@ export default (api: IApi) => { const { background } = api.config.extensions; // 如果没有 background 就直接结束 - if (!background || background?.scripts.length === 0) { + if (!background?.server_worker) { return config; } // 将 background 作为一个入口插入打包对象中 - config.entry('background').merge(background.scripts); + config.entry('background').merge([background.server_worker]); return config; }); diff --git a/src/functions/base.ts b/src/functions/base.ts index 9746aba..89ab872 100644 --- a/src/functions/base.ts +++ b/src/functions/base.ts @@ -44,7 +44,7 @@ export default (api: IApi) => { config.devServer = { ...config.devServer, // 将插件所需的文件全部写入到 dist 目录 - writeToDisk: (filePath) => { + writeToDisk: (filePath: string) => { const isUmiFile = filePath.match(/umi\./); const isHotUpdateFile = filePath.match(/hot-update\.js.*/); return !(isUmiFile || isHotUpdateFile); diff --git a/src/functions/configSchema.ts b/src/functions/configSchema.ts index 616975d..cc3f01b 100644 --- a/src/functions/configSchema.ts +++ b/src/functions/configSchema.ts @@ -27,13 +27,11 @@ export default (api: IApi) => { name: pkg.name || 'umi extension template', version: pkg.version || '1.0.0', description: pkg.description || '基于 Umi 的 Chrome 插件开发脚手架', - manifestVersion: 2, - minimumChromeVersion: '80', + manifestVersion: 3, + minimumChromeVersion: '88', permissions: [], - background: { - scripts: [], - persistent: true, - }, + host_permissions: [], + background: {}, contentScripts: [], icons: {}, contentSecurityPolicy: { @@ -152,6 +150,7 @@ export default (api: IApi) => { manifestVersion: joi.number(), minimumChromeVersion: joi.string(), permissions, + host_permissions: joi.array().items(joi.string()), contentSecurityPolicy: joi.object({ nonce: stringArr, inlineScript: stringArr, @@ -159,8 +158,7 @@ export default (api: IApi) => { }), contentScripts: joi.array().items(contentScript), background: joi.object({ - scripts: stringArr, - persistent: joi.boolean(), + service_worker: joi.string(), }), optionsUI: joi.alternatives( joi.string(), diff --git a/src/utils/csp.ts b/src/utils/csp.ts index 668a049..b94a144 100644 --- a/src/utils/csp.ts +++ b/src/utils/csp.ts @@ -78,6 +78,7 @@ export const getCSPHashFromScript = async (path: string | undefined) => { // 将 html 中的 inlineScript 全部记录到 inlineScriptSHAList 中 extractInlineScript(html).forEach((script) => { + console.log(script); scriptList.push(getScriptSHA(script)); }); }) diff --git a/src/utils/manifest.ts b/src/utils/manifest.ts index e75efcc..c40c915 100644 --- a/src/utils/manifest.ts +++ b/src/utils/manifest.ts @@ -84,8 +84,7 @@ export const generateManifestFromConfig = ( url, }); - const backgroundStr = - background && background.scripts.length > 0 ? background : undefined; + const backgroundStr = background?.server_worker ? background : undefined; // 处理 option 参数项 const option = {}; @@ -101,27 +100,16 @@ export const generateManifestFromConfig = ( // 处理 popup 的参数项 const popup = {}; if (typeof popupUI === 'string') { - popup['browser_action'] = { + popup['action'] = { default_popup: UIPageKeyMap.popup.key, }; } if (typeof popupUI === 'object') { - switch (popupUI.type) { - default: - case 'browserAction': - popup['browser_action'] = { - default_popup: UIPageKeyMap.popup.key, - default_icon: popupUI.icon, - default_title: popupUI.title, - }; - break; - case 'pageAction': - popup['page_action'] = { - default_popup: UIPageKeyMap.popup.key, - default_icon: popupUI.icon, - default_title: popupUI.title, - }; - } + popup['action'] = { + default_popup: UIPageKeyMap.popup.key, + default_icon: popupUI.icon, + default_title: popupUI.title, + }; } // 处理 content scripts @@ -178,7 +166,7 @@ export const updateUIPath = (manifest: string): string => { export const updateBackground = (manifest: chromeManifest.Manifest) => { const data = manifest; if (data.background) { - data.background.scripts = ['background.js']; + data.background.server_worker = 'background.js'; } return data; }; @@ -189,10 +177,10 @@ export const updateBackground = (manifest: chromeManifest.Manifest) => { */ export const updateHotLoad = (manifest: chromeManifest.Manifest) => { const data = manifest; + // TODO:如何集成新的热加载? if (data.background) { - data.background.scripts.push('hot-reload.js'); } else { - data.background = { persistent: true, scripts: ['hot-reload.js'] }; + data.background = { server_worker: 'hot-reload.js' }; } return data; }; diff --git a/test/utils/manifest.spec.ts b/test/utils/manifest.spec.ts index 504752e..68a259b 100644 --- a/test/utils/manifest.spec.ts +++ b/test/utils/manifest.spec.ts @@ -33,7 +33,7 @@ const base = { const baseResult = { version: '1.0.0', - browser_action: { + action: { default_popup: '__TO_REPLACE_POPUP__', }, content_security_policy: "script-src 'self'; object-src 'self'", @@ -72,21 +72,18 @@ describe('generateManifestFromConfig', () => { title: 'hello', type: 'pageAction', }, - background: { scripts: ['bg'], persistent: true }, + background: { server_worker: 'bg' }, }), ).toEqual({ ...baseResult, - background: { - persistent: true, - scripts: ['bg'], - }, + background: { server_worker: 'bg' }, options_ui: { page: '__TO_REPLACE_OPTION__', open_in_tab: true, }, browser_action: undefined, option_page: undefined, - page_action: { + action: { default_popup: '__TO_REPLACE_POPUP__', default_title: 'hello', }, @@ -103,7 +100,7 @@ describe('generateManifestFromConfig', () => { }), ).toEqual({ ...baseResult, - browser_action: { + action: { default_popup: '__TO_REPLACE_POPUP__', default_title: 'hello', }, @@ -145,20 +142,17 @@ describe('validateVersion', () => { test('updateBackground', () => { expect(updateBackground({ background: {} })).toEqual({ - background: { scripts: ['background.js'] }, + background: { server_worker: 'background.js' }, }); expect(updateBackground({})).toEqual({}); }); test('updateHotLoad', () => { - expect(updateHotLoad({ background: { scripts: [] } })).toEqual({ - background: { scripts: ['hot-reload.js'] }, + expect(updateHotLoad({ background: { server_worker: '' } })).toEqual({ + background: { server_worker: '' }, }); expect(updateHotLoad({})).toEqual({ - background: { - persistent: true, - scripts: ['hot-reload.js'], - }, + background: { server_worker: 'hot-reload.js' }, }); }); diff --git a/types/chromeManifest/Manifest.d.ts b/types/chromeManifest/Manifest.d.ts index c973105..5644078 100644 --- a/types/chromeManifest/Manifest.d.ts +++ b/types/chromeManifest/Manifest.d.ts @@ -11,9 +11,9 @@ declare namespace chromeManifest { * One integer specifying the version of * the manifest file format your package requires. * As of Chrome 18, developers should specify 2 (without quotes) - * @see https://developer.chrome.com/docs/extensions/mv2/manifest/manifest_version/ + * @see https://developer.chrome.com/docs/extensions/mv3/manifest/ */ - manifest_version: ManifestVersion; + manifest_version: ManifestVersionV3; /** * Specifies the subdirectory of `_locales` that * contains the default strings for this extension. @@ -300,6 +300,7 @@ declare namespace chromeManifest { } export type ManifestVersion = 1 | 2 | 3; + export type ManifestVersionV3 = 3; export interface IconStruct { 16?: string; @@ -332,9 +333,20 @@ declare namespace chromeManifest { default_popup?: string; } + /** + * Background pages have been a fundamental component of the Chrome Extension platform since its introduction. + * To put it simply, background pages provide extension authors with an environment that lives independent of any other window or tab. + * This allows extensions to observe and take action in response to events. + */ export interface Background { - scripts: string[]; - persistent: boolean; + /** + * In Manifest V3, the Chrome extension platform moves from background pages to service workers. + * As stated in Service Workers: an Introduction, a "service worker is a script that your browser runs in the background, separate from a web page, opening the door to features that don't need a web page or user interaction." + * This is the technology that enables native-like experiences such as push notifications, rich offline support, background sync, and "Add to Home Screen" on the open web. + * Service workers were inspired in part by background pages in Chrome Extensions, but they iterate and improve on this model by tuning it for web-scale. + */ + server_worker: string; + type?: string; } export interface ChromeUrlOverrides { diff --git a/types/extensionsPlugin/index.d.ts b/types/extensionsPlugin/index.d.ts index 42fd8e7..65cd716 100644 --- a/types/extensionsPlugin/index.d.ts +++ b/types/extensionsPlugin/index.d.ts @@ -18,10 +18,10 @@ declare namespace extensionsPlugin { /** * manifest 版本 * @description - * manifest 目前出了 3 个版本: 1 已经淘汰了; 2 是目前使用的版本 3 预计在 2021 年开始逐渐启用 - * @default 2 + * manifest 目前出了 3 个版本: 1 和 2 已经淘汰; 3 是目前使用的版本 + * @default 3 */ - manifestVersion: chromeManifest.ManifestVersion; + manifestVersion: chromeManifest.ManifestVersionV3; /** * 最低 Chrome 版本号 */