extension-develop 2.1.3 → 3.0.0-next.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -25
- package/dist/930.js +44 -0
- package/dist/add-centralized-logger-script-background.js +220 -0
- package/dist/add-centralized-logger-script-content.js +172 -0
- package/dist/add-centralized-logger-script.js +332 -0
- package/dist/add-hmr-accept-code.js +5 -11
- package/dist/content-script-wrapper.js +166 -0
- package/dist/ensure-hmr-for-scripts.js +30 -11
- package/dist/minimum-chromium-file.js +6 -20
- package/dist/minimum-firefox-file.js +6 -12
- package/dist/module.js +12030 -9529
- package/dist/resolve-paths-loader.js +1391 -0
- package/dist/warn-no-default-export.js +121 -0
- package/package.json +21 -35
- package/dist/add-content-script-wrapper.js +0 -1789
- package/dist/build.d.ts +0 -2
- package/dist/cleanup.d.ts +0 -1
- package/dist/deprecated-shadow-root.js +0 -135
- package/dist/dev.d.ts +0 -2
- package/dist/develop-lib/config-types.d.ts +0 -86
- package/dist/develop-lib/extract-from-zip.d.ts +0 -1
- package/dist/develop-lib/find-nearest-package.d.ts +0 -2
- package/dist/develop-lib/generate-extension-types.d.ts +0 -1
- package/dist/develop-lib/generate-zip.d.ts +0 -2
- package/dist/develop-lib/get-extension-config.d.ts +0 -6
- package/dist/develop-lib/get-project-path.d.ts +0 -6
- package/dist/develop-lib/install-dependencies.d.ts +0 -2
- package/dist/develop-lib/messages.d.ts +0 -36
- package/dist/develop-lib/validate-user-dependencies.d.ts +0 -1
- package/dist/extensions/chrome-manager-extension/background.js +0 -84
- package/dist/extensions/chrome-manager-extension/define-initial-tab.js +0 -77
- package/dist/extensions/chrome-manager-extension/images/logo.png +0 -0
- package/dist/extensions/chrome-manager-extension/manifest.json +0 -17
- package/dist/extensions/chrome-manager-extension/pages/sakura-dark.css +0 -268
- package/dist/extensions/chrome-manager-extension/pages/sakura.css +0 -267
- package/dist/extensions/chrome-manager-extension/pages/welcome.html +0 -46
- package/dist/extensions/chrome-manager-extension/pages/welcome.js +0 -34
- package/dist/extensions/chrome-manager-extension/reload-service.js +0 -319
- package/dist/extensions/chromium-based-manager-extension/background.js +0 -84
- package/dist/extensions/chromium-based-manager-extension/define-initial-tab.js +0 -77
- package/dist/extensions/chromium-based-manager-extension/images/logo.png +0 -0
- package/dist/extensions/chromium-based-manager-extension/manifest.json +0 -17
- package/dist/extensions/chromium-based-manager-extension/pages/sakura-dark.css +0 -268
- package/dist/extensions/chromium-based-manager-extension/pages/sakura.css +0 -267
- package/dist/extensions/chromium-based-manager-extension/pages/welcome.html +0 -46
- package/dist/extensions/chromium-based-manager-extension/pages/welcome.js +0 -34
- package/dist/extensions/chromium-based-manager-extension/reload-service.js +0 -324
- package/dist/extensions/edge-manager-extension/background.js +0 -82
- package/dist/extensions/edge-manager-extension/define-initial-tab.js +0 -77
- package/dist/extensions/edge-manager-extension/images/logo.png +0 -0
- package/dist/extensions/edge-manager-extension/manifest.json +0 -17
- package/dist/extensions/edge-manager-extension/pages/sakura-dark.css +0 -268
- package/dist/extensions/edge-manager-extension/pages/sakura.css +0 -267
- package/dist/extensions/edge-manager-extension/pages/welcome.html +0 -46
- package/dist/extensions/edge-manager-extension/pages/welcome.js +0 -34
- package/dist/extensions/edge-manager-extension/reload-service.js +0 -321
- package/dist/extensions/firefox-manager-extension/background.js +0 -85
- package/dist/extensions/firefox-manager-extension/define-initial-tab.js +0 -64
- package/dist/extensions/firefox-manager-extension/images/logo.png +0 -0
- package/dist/extensions/firefox-manager-extension/manifest.json +0 -15
- package/dist/extensions/firefox-manager-extension/pages/sakura-dark.css +0 -268
- package/dist/extensions/firefox-manager-extension/pages/sakura.css +0 -267
- package/dist/extensions/firefox-manager-extension/pages/welcome.html +0 -46
- package/dist/extensions/firefox-manager-extension/pages/welcome.js +0 -34
- package/dist/extensions/firefox-manager-extension/reload-service.js +0 -178
- package/dist/extensions/gecko-based-manager-extension/background.js +0 -67
- package/dist/extensions/gecko-based-manager-extension/define-initial-tab.js +0 -69
- package/dist/extensions/gecko-based-manager-extension/images/logo.png +0 -0
- package/dist/extensions/gecko-based-manager-extension/manifest.json +0 -16
- package/dist/extensions/gecko-based-manager-extension/pages/sakura-dark.css +0 -268
- package/dist/extensions/gecko-based-manager-extension/pages/sakura.css +0 -267
- package/dist/extensions/gecko-based-manager-extension/pages/welcome.html +0 -46
- package/dist/extensions/gecko-based-manager-extension/pages/welcome.js +0 -34
- package/dist/extensions/gecko-based-manager-extension/reload-service.js +0 -171
- package/dist/inject-chromium-client-loader.js +0 -176
- package/dist/inject-firefox-client-loader.js +0 -169
- package/dist/minimum-content-file.js +0 -5
- package/dist/module.d.ts +0 -8
- package/dist/preview.d.ts +0 -2
- package/dist/rslib.config.d.ts +0 -3
- package/dist/start.d.ts +0 -2
- package/dist/types.d.ts +0 -11
- package/dist/vitest.config.d.mts +0 -2
- package/dist/webpack/dev-server.d.ts +0 -3
- package/dist/webpack/plugin-browsers/browsers-lib/add-progress-bar.d.ts +0 -1
- package/dist/webpack/plugin-browsers/browsers-lib/constants.d.ts +0 -5
- package/dist/webpack/plugin-browsers/browsers-lib/dynamic-extension-manager.d.ts +0 -35
- package/dist/webpack/plugin-browsers/browsers-lib/html-merge.d.ts +0 -1
- package/dist/webpack/plugin-browsers/browsers-lib/instance-manager.d.ts +0 -74
- package/dist/webpack/plugin-browsers/browsers-lib/messages.d.ts +0 -164
- package/dist/webpack/plugin-browsers/browsers-lib/rdp-wire.d.ts +0 -7
- package/dist/webpack/plugin-browsers/browsers-lib/shared-utils.d.ts +0 -16
- package/dist/webpack/plugin-browsers/browsers-types.d.ts +0 -131
- package/dist/webpack/plugin-browsers/index.d.ts +0 -41
- package/dist/webpack/plugin-browsers/run-chromium/browser-config.d.ts +0 -3
- package/dist/webpack/plugin-browsers/run-chromium/create-profile.d.ts +0 -10
- package/dist/webpack/plugin-browsers/run-chromium/index.d.ts +0 -28
- package/dist/webpack/plugin-browsers/run-chromium/master-preferences.d.ts +0 -161
- package/dist/webpack/plugin-browsers/run-chromium/setup-chrome-inspection/cdp-client.d.ts +0 -29
- package/dist/webpack/plugin-browsers/run-chromium/setup-chrome-inspection/index.d.ts +0 -25
- package/dist/webpack/plugin-browsers/run-firefox/firefox/binary-detector.d.ts +0 -15
- package/dist/webpack/plugin-browsers/run-firefox/firefox/browser-config.d.ts +0 -7
- package/dist/webpack/plugin-browsers/run-firefox/firefox/create-profile.d.ts +0 -13
- package/dist/webpack/plugin-browsers/run-firefox/firefox/master-preferences.d.ts +0 -95
- package/dist/webpack/plugin-browsers/run-firefox/index.d.ts +0 -26
- package/dist/webpack/plugin-browsers/run-firefox/remote-firefox/index.d.ts +0 -13
- package/dist/webpack/plugin-browsers/run-firefox/remote-firefox/message-utils.d.ts +0 -2
- package/dist/webpack/plugin-browsers/run-firefox/remote-firefox/messaging-client.d.ts +0 -42
- package/dist/webpack/plugin-browsers/run-firefox/remote-firefox/setup-firefox-inspection.d.ts +0 -31
- package/dist/webpack/plugin-compatibility/feature-browser-specific-fields.d.ts +0 -9
- package/dist/webpack/plugin-compatibility/feature-polyfill.d.ts +0 -12
- package/dist/webpack/plugin-compatibility/index.d.ts +0 -13
- package/dist/webpack/plugin-compilation/clean-dist.d.ts +0 -8
- package/dist/webpack/plugin-compilation/env.d.ts +0 -9
- package/dist/webpack/plugin-compilation/index.d.ts +0 -12
- package/dist/webpack/plugin-css/common-style-loaders.d.ts +0 -8
- package/dist/webpack/plugin-css/css-in-content-script-loader.d.ts +0 -11
- package/dist/webpack/plugin-css/css-in-html-loader.d.ts +0 -8
- package/dist/webpack/plugin-css/css-tools/less.d.ts +0 -4
- package/dist/webpack/plugin-css/css-tools/postcss.d.ts +0 -3
- package/dist/webpack/plugin-css/css-tools/sass.d.ts +0 -4
- package/dist/webpack/plugin-css/css-tools/stylelint.d.ts +0 -4
- package/dist/webpack/plugin-css/css-tools/tailwind.d.ts +0 -2
- package/dist/webpack/plugin-css/index.d.ts +0 -9
- package/dist/webpack/plugin-css/is-content-script.d.ts +0 -1
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/background.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/browser_action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/chrome_url_overrides.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/devtools_page.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/options_ui.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/page_action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/sandbox.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/side_panel.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/html-fields/sidebar_action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/browser_action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/browser_action.theme_icons.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/icons.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/normalize.d.ts +0 -6
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/page_action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/icons-fields/sidebar_action.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/index.d.ts +0 -19
- package/dist/webpack/plugin-extension/data/manifest-fields/json-fields/declarative_net_request.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/json-fields/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/json-fields/storage.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/locales-fields/index.d.ts +0 -1
- package/dist/webpack/plugin-extension/data/manifest-fields/normalize.d.ts +0 -10
- package/dist/webpack/plugin-extension/data/manifest-fields/scripts-fields/background.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/scripts-fields/content_scripts.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/scripts-fields/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/scripts-fields/service_worker.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/scripts-fields/user_scripts.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/manifest-fields/web-resources-fields/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/data/special-folders/generate-entries.d.ts +0 -4
- package/dist/webpack/plugin-extension/data/special-folders/index.d.ts +0 -12
- package/dist/webpack/plugin-extension/feature-html/__spec__/html-lib/test-utils.d.ts +0 -18
- package/dist/webpack/plugin-extension/feature-html/html-lib/parse-html.d.ts +0 -8
- package/dist/webpack/plugin-extension/feature-html/html-lib/patch-html.d.ts +0 -8
- package/dist/webpack/plugin-extension/feature-html/html-lib/utils.d.ts +0 -18
- package/dist/webpack/plugin-extension/feature-html/index.d.ts +0 -37
- package/dist/webpack/plugin-extension/feature-html/steps/add-assets-to-compilation.d.ts +0 -11
- package/dist/webpack/plugin-extension/feature-html/steps/add-scripts-and-styles-to-compilation.d.ts +0 -10
- package/dist/webpack/plugin-extension/feature-html/steps/add-to-file-dependencies.d.ts +0 -10
- package/dist/webpack/plugin-extension/feature-html/steps/emit-html-file.d.ts +0 -9
- package/dist/webpack/plugin-extension/feature-html/steps/ensure-hmr-for-scripts.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-html/steps/handle-common-errors.d.ts +0 -10
- package/dist/webpack/plugin-extension/feature-html/steps/minimum-script-file.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-html/steps/throw-if-recompile-is-needed.d.ts +0 -13
- package/dist/webpack/plugin-extension/feature-html/steps/update-html-file.d.ts +0 -10
- package/dist/webpack/plugin-extension/feature-icons/index.d.ts +0 -25
- package/dist/webpack/plugin-extension/feature-icons/steps/add-to-file-dependencies.d.ts +0 -9
- package/dist/webpack/plugin-extension/feature-icons/steps/emit-file.d.ts +0 -9
- package/dist/webpack/plugin-extension/feature-json/index.d.ts +0 -18
- package/dist/webpack/plugin-extension/feature-locales/get-locales.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-locales/index.d.ts +0 -13
- package/dist/webpack/plugin-extension/feature-manifest/index.d.ts +0 -23
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/background.d.ts +0 -10
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/chrome_url_overrides.d.ts +0 -8
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/commands.d.ts +0 -16
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/content_scripts.d.ts +0 -7
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/content_security_policy.d.ts +0 -4
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/devtools_page.d.ts +0 -4
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/icons.d.ts +0 -6
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/omnibox.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/options_page.d.ts +0 -4
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/options_ui.d.ts +0 -8
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/page_action.d.ts +0 -8
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/permissions.d.ts +0 -4
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/sandbox.d.ts +0 -7
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/sidebar_action.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/storage.d.ts +0 -6
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/theme.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/user_scripts.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/common/web_accessible_resources.d.ts +0 -9
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv2/background.d.ts +0 -10
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv2/browser_action.d.ts +0 -12
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv2/chrome_settings_overrides.d.ts +0 -24
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv2/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv2/page_action.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv2/sidebar_action.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv2/theme_experiment.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv3/action.d.ts +0 -8
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv3/background.d.ts +0 -10
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv3/declarative_net_request.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv3/host_permissions.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv3/index.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/manifest-overrides/mv3/side_panel.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-manifest/steps/add-dependencies.d.ts +0 -6
- package/dist/webpack/plugin-extension/feature-manifest/steps/check-manifest-files.d.ts +0 -17
- package/dist/webpack/plugin-extension/feature-manifest/steps/emit-manifest.d.ts +0 -7
- package/dist/webpack/plugin-extension/feature-manifest/steps/throw-if-recompile.d.ts +0 -11
- package/dist/webpack/plugin-extension/feature-manifest/steps/update-manifest.d.ts +0 -9
- package/dist/webpack/plugin-extension/feature-scripts/index.d.ts +0 -27
- package/dist/webpack/plugin-extension/feature-scripts/scripts-lib/utils.d.ts +0 -3
- package/dist/webpack/plugin-extension/feature-scripts/steps/add-content-script-wrapper.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-scripts/steps/add-hmr-accept-code.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-scripts/steps/add-public-path-for-main-world.d.ts +0 -11
- package/dist/webpack/plugin-extension/feature-scripts/steps/add-public-path-runtime-module.d.ts +0 -4
- package/dist/webpack/plugin-extension/feature-scripts/steps/add-scripts.d.ts +0 -9
- package/dist/webpack/plugin-extension/feature-scripts/steps/deprecated-shadow-root.d.ts +0 -2
- package/dist/webpack/plugin-extension/feature-scripts/steps/javascript-content-script-wrapper.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-scripts/steps/minimum-content-file.d.ts +0 -0
- package/dist/webpack/plugin-extension/feature-scripts/steps/preact-content-script-wrapper.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-scripts/steps/react-content-script-wrapper.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-scripts/steps/svelte-content-script-wrapper.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-scripts/steps/typescript-content-script-wrapper.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-scripts/steps/vue-content-script-wrapper.d.ts +0 -1
- package/dist/webpack/plugin-extension/feature-special-folders/copy-public-folder.d.ts +0 -14
- package/dist/webpack/plugin-extension/feature-special-folders/index.d.ts +0 -19
- package/dist/webpack/plugin-extension/feature-special-folders/warn-upon-folder-changes.d.ts +0 -7
- package/dist/webpack/plugin-extension/feature-web-resources/clean-matches.d.ts +0 -7
- package/dist/webpack/plugin-extension/feature-web-resources/index.d.ts +0 -18
- package/dist/webpack/plugin-extension/index.d.ts +0 -10
- package/dist/webpack/plugin-js-frameworks/index.d.ts +0 -13
- package/dist/webpack/plugin-js-frameworks/js-tools/babel.d.ts +0 -16
- package/dist/webpack/plugin-js-frameworks/js-tools/preact.d.ts +0 -3
- package/dist/webpack/plugin-js-frameworks/js-tools/react.d.ts +0 -3
- package/dist/webpack/plugin-js-frameworks/js-tools/svelte.d.ts +0 -3
- package/dist/webpack/plugin-js-frameworks/js-tools/typescript.d.ts +0 -36
- package/dist/webpack/plugin-js-frameworks/js-tools/vue.d.ts +0 -3
- package/dist/webpack/plugin-js-frameworks/load-loader-options.d.ts +0 -1
- package/dist/webpack/plugin-reload/index.d.ts +0 -13
- package/dist/webpack/plugin-reload/reload-lib/messages.d.ts +0 -106
- package/dist/webpack/plugin-reload/reload-types.d.ts +0 -14
- package/dist/webpack/plugin-reload/start-server.d.ts +0 -4
- package/dist/webpack/plugin-reload/steps/create-web-socket-server/index.d.ts +0 -14
- package/dist/webpack/plugin-reload/steps/create-web-socket-server/web-socket-server/broadcast-message.d.ts +0 -2
- package/dist/webpack/plugin-reload/steps/create-web-socket-server/web-socket-server/message-dispatcher.d.ts +0 -2
- package/dist/webpack/plugin-reload/steps/create-web-socket-server/web-socket-server/servers.d.ts +0 -2
- package/dist/webpack/plugin-reload/steps/setup-chromium-reload-client/index.d.ts +0 -3
- package/dist/webpack/plugin-reload/steps/setup-chromium-reload-client/inject-chromium-client-loader.d.ts +0 -9
- package/dist/webpack/plugin-reload/steps/setup-chromium-reload-client/minimum-chromium-file.d.ts +0 -0
- package/dist/webpack/plugin-reload/steps/setup-firefox-reload-client/index.d.ts +0 -3
- package/dist/webpack/plugin-reload/steps/setup-firefox-reload-client/inject-firefox-client-loader.d.ts +0 -9
- package/dist/webpack/plugin-reload/steps/setup-firefox-reload-client/minimum-firefox-file.d.ts +0 -0
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/index.d.ts +0 -9
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/patch-background.d.ts +0 -15
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/patch-csp.d.ts +0 -5
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/patch-externally-connectable.d.ts +0 -10
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/apply-manifest-dev-defaults/patch-web-resources.d.ts +0 -10
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/generate-manager-extension.d.ts +0 -15
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/index.d.ts +0 -10
- package/dist/webpack/plugin-reload/steps/setup-reload-strategy/target-web-extension-plugin/index.d.ts +0 -13
- package/dist/webpack/plugin-static-assets/index.d.ts +0 -12
- package/dist/webpack/webpack-config.d.ts +0 -14
- package/dist/webpack/webpack-lib/auto-exit.d.ts +0 -1
- package/dist/webpack/webpack-lib/constants.d.ts +0 -4
- package/dist/webpack/webpack-lib/messages.d.ts +0 -121
- package/dist/webpack/webpack-lib/port-manager.d.ts +0 -27
- package/dist/webpack/webpack-lib/utils.d.ts +0 -23
- package/dist/webpack/webpack-types.d.ts +0 -49
|
@@ -1,324 +0,0 @@
|
|
|
1
|
-
const TEN_SECONDS_MS = 10 * 1000
|
|
2
|
-
const INSTANT_MS = 100
|
|
3
|
-
let webSocket = null
|
|
4
|
-
|
|
5
|
-
export async function connect() {
|
|
6
|
-
if (webSocket) {
|
|
7
|
-
// If already connected, do nothing
|
|
8
|
-
return
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
// Get port from the placeholder that will be replaced during build
|
|
12
|
-
const port = '__RELOAD_PORT__'
|
|
13
|
-
|
|
14
|
-
let reconnectAttempts = 0
|
|
15
|
-
const maxReconnectAttempts = 10
|
|
16
|
-
const baseBackoffMs = 250
|
|
17
|
-
const maxBackoffMs = 5000
|
|
18
|
-
|
|
19
|
-
const establish = () => {
|
|
20
|
-
try {
|
|
21
|
-
webSocket = new WebSocket(`ws://127.0.0.1:${port}`)
|
|
22
|
-
} catch (err) {
|
|
23
|
-
webSocket = null
|
|
24
|
-
return
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
webSocket.onerror = (_event) => {
|
|
28
|
-
try {
|
|
29
|
-
webSocket && webSocket.close()
|
|
30
|
-
} catch {}
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
webSocket.onopen = () => {
|
|
34
|
-
reconnectAttempts = 0
|
|
35
|
-
console.info(
|
|
36
|
-
`[Extension.js] Connection opened. Listening on port ${port}...`
|
|
37
|
-
)
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
let reloadDebounce
|
|
41
|
-
webSocket.onmessage = async (event) => {
|
|
42
|
-
let message = null
|
|
43
|
-
try {
|
|
44
|
-
message = JSON.parse(event.data)
|
|
45
|
-
} catch {
|
|
46
|
-
return
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (message.status === 'serverReady') {
|
|
50
|
-
await requestInitialLoadData()
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
if (message.changedFile) {
|
|
54
|
-
clearTimeout(reloadDebounce)
|
|
55
|
-
reloadDebounce = setTimeout(async () => {
|
|
56
|
-
await hardReloadAllExtensions(message.changedFile)
|
|
57
|
-
}, 200)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
webSocket.onclose = () => {
|
|
62
|
-
webSocket = null
|
|
63
|
-
if (reconnectAttempts >= maxReconnectAttempts) return
|
|
64
|
-
reconnectAttempts++
|
|
65
|
-
const backoff = Math.min(
|
|
66
|
-
maxBackoffMs,
|
|
67
|
-
baseBackoffMs * 2 ** reconnectAttempts
|
|
68
|
-
)
|
|
69
|
-
setTimeout(establish, backoff)
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
establish()
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
export function disconnect() {
|
|
77
|
-
if (webSocket) {
|
|
78
|
-
webSocket.close()
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Ensure sockets are closed when the worker is suspended
|
|
83
|
-
try {
|
|
84
|
-
chrome.runtime.onSuspend.addListener(() => {
|
|
85
|
-
if (webSocket) {
|
|
86
|
-
try {
|
|
87
|
-
webSocket.close()
|
|
88
|
-
} catch {}
|
|
89
|
-
webSocket = null
|
|
90
|
-
}
|
|
91
|
-
})
|
|
92
|
-
} catch {}
|
|
93
|
-
|
|
94
|
-
async function getDevExtensions() {
|
|
95
|
-
const allExtensions = await new Promise((resolve) => {
|
|
96
|
-
chrome.management.getAll(resolve)
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
return allExtensions.filter((extension) => {
|
|
100
|
-
return (
|
|
101
|
-
// Do not include itself
|
|
102
|
-
extension.id !== chrome.runtime.id &&
|
|
103
|
-
// Manager extension
|
|
104
|
-
extension.id !== 'hkklidinfhnfidkjiknmmbmcloigimco' &&
|
|
105
|
-
// Show only unpackaged extensions
|
|
106
|
-
extension.installType === 'development'
|
|
107
|
-
)
|
|
108
|
-
})
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
async function hardReloadAllExtensions(changedFile) {
|
|
112
|
-
// For critical files like manifest.json, skip the delay entirely
|
|
113
|
-
const isCriticalFile =
|
|
114
|
-
changedFile === 'manifest.json' ||
|
|
115
|
-
changedFile === 'service_worker' ||
|
|
116
|
-
changedFile === 'declarative_net_request'
|
|
117
|
-
|
|
118
|
-
// Check if the external extension is ready with optimized timing
|
|
119
|
-
const isExtensionReady = await checkExtensionReadiness(isCriticalFile)
|
|
120
|
-
|
|
121
|
-
if (isExtensionReady) {
|
|
122
|
-
const devExtensions = await getDevExtensions()
|
|
123
|
-
const reloadAll = devExtensions.map(async (extension) => {
|
|
124
|
-
await hardReloadExtension(extension.id)
|
|
125
|
-
|
|
126
|
-
chrome.runtime.sendMessage(extension.id, {changedFile}, (response) => {
|
|
127
|
-
if (response) {
|
|
128
|
-
console.info('[Reload Service] Extension reloaded and ready.')
|
|
129
|
-
}
|
|
130
|
-
})
|
|
131
|
-
|
|
132
|
-
return true
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
await Promise.all(reloadAll)
|
|
136
|
-
} else {
|
|
137
|
-
console.info('[Reload Service] External extension is not ready.')
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
async function requestInitialLoadData() {
|
|
142
|
-
const devExtensions = await getDevExtensions()
|
|
143
|
-
|
|
144
|
-
const messagePromises = devExtensions.map(async (extension) => {
|
|
145
|
-
return await new Promise((resolve) => {
|
|
146
|
-
chrome.runtime.sendMessage(
|
|
147
|
-
extension.id,
|
|
148
|
-
{initialLoadData: true},
|
|
149
|
-
(response) => {
|
|
150
|
-
if (chrome.runtime.lastError) {
|
|
151
|
-
console.error(
|
|
152
|
-
`Error sending message to ${extension.id}: ${chrome.runtime.lastError.message}`
|
|
153
|
-
)
|
|
154
|
-
resolve(null)
|
|
155
|
-
} else {
|
|
156
|
-
resolve(response)
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
)
|
|
160
|
-
})
|
|
161
|
-
})
|
|
162
|
-
|
|
163
|
-
const responses = await Promise.all(messagePromises)
|
|
164
|
-
|
|
165
|
-
// We received the info from the use extension.
|
|
166
|
-
// All good, client is ready. Inform the server.
|
|
167
|
-
if (webSocket && webSocket.readyState === WebSocket.OPEN) {
|
|
168
|
-
const message = JSON.stringify({
|
|
169
|
-
status: 'clientReady',
|
|
170
|
-
data: responses[0]
|
|
171
|
-
})
|
|
172
|
-
|
|
173
|
-
webSocket.send(message)
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
|
|
177
|
-
async function checkExtensionReadiness(isCriticalFile = false) {
|
|
178
|
-
// For critical files like manifest.json, use minimal delay
|
|
179
|
-
// For regular files, use 1 second delay to ensure stability
|
|
180
|
-
const delayTime = isCriticalFile ? INSTANT_MS : 1000
|
|
181
|
-
await delay(delayTime)
|
|
182
|
-
// Assume the extension is ready
|
|
183
|
-
return true
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
async function delay(ms) {
|
|
187
|
-
return await new Promise((resolve) => setTimeout(resolve, ms))
|
|
188
|
-
}
|
|
189
|
-
|
|
190
|
-
export function keepAlive() {
|
|
191
|
-
const keepAliveIntervalId = setInterval(() => {
|
|
192
|
-
if (webSocket) {
|
|
193
|
-
webSocket.send(JSON.stringify({status: 'ping'}))
|
|
194
|
-
console.info('[Reload Service] Listening for changes...')
|
|
195
|
-
} else {
|
|
196
|
-
clearInterval(keepAliveIntervalId)
|
|
197
|
-
}
|
|
198
|
-
}, TEN_SECONDS_MS)
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
const toggleExtensionState = (extensionId, enabled) => {
|
|
202
|
-
if (extensionId === chrome.runtime.id) {
|
|
203
|
-
return Promise.resolve()
|
|
204
|
-
}
|
|
205
|
-
return new Promise((resolve) => {
|
|
206
|
-
chrome.management.setEnabled(extensionId, enabled, resolve)
|
|
207
|
-
})
|
|
208
|
-
}
|
|
209
|
-
|
|
210
|
-
// Smart reload strategy: Try standard method first, fallback to CDP if needed
|
|
211
|
-
async function hardReloadExtension(extensionId) {
|
|
212
|
-
try {
|
|
213
|
-
// Try the standard enable/disable reload first (feels natural)
|
|
214
|
-
await toggleExtensionState(extensionId, false)
|
|
215
|
-
await toggleExtensionState(extensionId, true)
|
|
216
|
-
|
|
217
|
-
// Verify it worked with a simple health check
|
|
218
|
-
const isHealthy = await verifyExtensionHealth(extensionId)
|
|
219
|
-
if (isHealthy) {
|
|
220
|
-
console.info(
|
|
221
|
-
`[Extension.js] Standard reload successful for ${extensionId}`
|
|
222
|
-
)
|
|
223
|
-
return true
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// If we get here, the reload "succeeded" but extension isn't healthy
|
|
227
|
-
throw new Error('Extension reloaded but not responding')
|
|
228
|
-
} catch (error) {
|
|
229
|
-
console.warn(
|
|
230
|
-
`[Extension.js] Standard reload failed for ${extensionId}, trying CDP fallback: ${error.message}`
|
|
231
|
-
)
|
|
232
|
-
|
|
233
|
-
// Only use CDP when the natural approach fails
|
|
234
|
-
return await attemptCDPFallback(extensionId)
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// CDP fallback for when standard reload fails
|
|
239
|
-
async function attemptCDPFallback(extensionId) {
|
|
240
|
-
try {
|
|
241
|
-
// Get extension info to find its source path
|
|
242
|
-
const extensionInfo = await new Promise((resolve) => {
|
|
243
|
-
chrome.management.get(extensionId, resolve)
|
|
244
|
-
})
|
|
245
|
-
|
|
246
|
-
if (!extensionInfo || !extensionInfo.path) {
|
|
247
|
-
console.warn(
|
|
248
|
-
`[Extension.js] No path info for ${extensionId}, CDP fallback not possible`
|
|
249
|
-
)
|
|
250
|
-
return false
|
|
251
|
-
}
|
|
252
|
-
|
|
253
|
-
// Use CDP client directly for seamless fallback
|
|
254
|
-
const cdpClient = await getCDPClient()
|
|
255
|
-
if (!cdpClient) {
|
|
256
|
-
console.warn(`[Extension.js] CDP client not available for ${extensionId}`)
|
|
257
|
-
return false
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
// Use CDP to force reload the extension
|
|
261
|
-
const success = await cdpClient.forceReloadExtension(extensionId)
|
|
262
|
-
if (success) {
|
|
263
|
-
console.info(`[Extension.js] CDP fallback successful for ${extensionId}`)
|
|
264
|
-
return true
|
|
265
|
-
} else {
|
|
266
|
-
console.warn(`[Extension.js] CDP fallback failed for ${extensionId}`)
|
|
267
|
-
return false
|
|
268
|
-
}
|
|
269
|
-
} catch (cdpError) {
|
|
270
|
-
console.error(
|
|
271
|
-
`[Extension.js] CDP fallback also failed for ${extensionId}: ${cdpError.message}`
|
|
272
|
-
)
|
|
273
|
-
return false
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
|
|
277
|
-
// Get CDP client instance
|
|
278
|
-
// This will be injected by the build process
|
|
279
|
-
async function getCDPClient() {
|
|
280
|
-
try {
|
|
281
|
-
// The CDP client will be available globally when injected
|
|
282
|
-
if (typeof window !== 'undefined' && window.cdpClient) {
|
|
283
|
-
return window.cdpClient
|
|
284
|
-
}
|
|
285
|
-
|
|
286
|
-
// Fallback for service worker context
|
|
287
|
-
if (typeof globalThis !== 'undefined' && globalThis.cdpClient) {
|
|
288
|
-
return globalThis.cdpClient
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
console.warn(`[Extension.js] CDP client not found in global scope`)
|
|
292
|
-
return null
|
|
293
|
-
} catch (error) {
|
|
294
|
-
console.warn(`[Extension.js] Failed to get CDP client: ${error.message}`)
|
|
295
|
-
return null
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
// Simple health check to verify extension is responsive
|
|
300
|
-
async function verifyExtensionHealth(extensionId) {
|
|
301
|
-
try {
|
|
302
|
-
// Simple ping to see if extension responds
|
|
303
|
-
await new Promise((resolve, reject) => {
|
|
304
|
-
const timeout = setTimeout(() => {
|
|
305
|
-
reject(new Error('Health check timeout'))
|
|
306
|
-
}, 2000)
|
|
307
|
-
|
|
308
|
-
chrome.runtime.sendMessage(extensionId, {type: 'PING'}, (response) => {
|
|
309
|
-
clearTimeout(timeout)
|
|
310
|
-
if (chrome.runtime.lastError) {
|
|
311
|
-
reject(new Error(chrome.runtime.lastError.message))
|
|
312
|
-
} else {
|
|
313
|
-
resolve(response)
|
|
314
|
-
}
|
|
315
|
-
})
|
|
316
|
-
})
|
|
317
|
-
return true
|
|
318
|
-
} catch (error) {
|
|
319
|
-
console.warn(
|
|
320
|
-
`[Extension.js] Health check failed for ${extensionId}: ${error.message}`
|
|
321
|
-
)
|
|
322
|
-
return false
|
|
323
|
-
}
|
|
324
|
-
}
|
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
import {createExtensionsPageTab, handleFirstRun} from './define-initial-tab.js'
|
|
2
|
-
import {connect, disconnect, keepAlive} from './reload-service.js'
|
|
3
|
-
|
|
4
|
-
function bgGreen(str) {
|
|
5
|
-
return `background: transparent; color: #0971fe; ${str}`
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
async function initManagerUI() {
|
|
9
|
-
try {
|
|
10
|
-
chrome.tabs.query({active: true, currentWindow: true}, async (tabs) => {
|
|
11
|
-
const initialTab = Array.isArray(tabs) ? tabs[0] : undefined
|
|
12
|
-
|
|
13
|
-
console.log(
|
|
14
|
-
`%c
|
|
15
|
-
██████████████████████████████████████████████████████████
|
|
16
|
-
██████████████████████████████████████████████████████████
|
|
17
|
-
████████████████████████████ ██████████████████████████
|
|
18
|
-
█████████████████████████ ██████ ███████████████
|
|
19
|
-
███████████████████████ ███ ███ ████████████
|
|
20
|
-
██████████████████████ ██████ ███ ███████████
|
|
21
|
-
███████████████████████ ██████ ██████ ███████████
|
|
22
|
-
████████████████ ██████ ██████████████ ███████████
|
|
23
|
-
█████████████ ████ ████████████ ████████████
|
|
24
|
-
███████████ ██ █████████████ ███████████████
|
|
25
|
-
██████████ ██████ █████████████████ █████████████
|
|
26
|
-
███████████ ████████████████████████████ ███████████
|
|
27
|
-
█████████████ █████████████████ ██████ ██████████
|
|
28
|
-
███████████████ ██████████████ ██ ██████████
|
|
29
|
-
████████████ ████████████ ████ █████████████
|
|
30
|
-
███████████ █████████████ ██████ ███████████████
|
|
31
|
-
███████████ ██████ ██████ ███████████████████████
|
|
32
|
-
███████████ ████ ██████ ██████████████████████
|
|
33
|
-
████████████ ██ ███ ███████████████████████
|
|
34
|
-
███████████████ ██████ █████████████████████████
|
|
35
|
-
██████████████████████████ ████████████████████████████
|
|
36
|
-
██████████████████████████████████████████████████████████
|
|
37
|
-
██████████████████████████████████████████████████████████
|
|
38
|
-
MIT (c) ${new Date().getFullYear()} - Cezar Augusto and the Extension.js Authors.
|
|
39
|
-
`,
|
|
40
|
-
bgGreen('')
|
|
41
|
-
)
|
|
42
|
-
|
|
43
|
-
if (!initialTab) {
|
|
44
|
-
try {
|
|
45
|
-
await handleFirstRun()
|
|
46
|
-
} catch {
|
|
47
|
-
try {
|
|
48
|
-
chrome.tabs.create({url: 'chrome://extensions/'})
|
|
49
|
-
} catch {}
|
|
50
|
-
}
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
if (
|
|
55
|
-
initialTab.url === 'chrome://newtab/' ||
|
|
56
|
-
initialTab.url === 'chrome://welcome/'
|
|
57
|
-
) {
|
|
58
|
-
await handleFirstRun()
|
|
59
|
-
} else {
|
|
60
|
-
createExtensionsPageTab(initialTab, 'chrome://extensions/')
|
|
61
|
-
}
|
|
62
|
-
})
|
|
63
|
-
} catch {}
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
chrome.runtime.onStartup.addListener(async () => {
|
|
67
|
-
await initManagerUI()
|
|
68
|
-
})
|
|
69
|
-
|
|
70
|
-
chrome.runtime.onInstalled.addListener(async () => {
|
|
71
|
-
let isConnected = false
|
|
72
|
-
|
|
73
|
-
await initManagerUI()
|
|
74
|
-
|
|
75
|
-
if (isConnected) {
|
|
76
|
-
disconnect()
|
|
77
|
-
} else {
|
|
78
|
-
await connect()
|
|
79
|
-
isConnected = true
|
|
80
|
-
keepAlive()
|
|
81
|
-
}
|
|
82
|
-
})
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
async function getDevExtension() {
|
|
2
|
-
const allExtensions = await new Promise((resolve) => {
|
|
3
|
-
chrome.management.getAll(resolve)
|
|
4
|
-
})
|
|
5
|
-
|
|
6
|
-
const devExtensions = allExtensions.filter((extension) => {
|
|
7
|
-
return (
|
|
8
|
-
// Do not include itself
|
|
9
|
-
extension.id !== chrome.runtime.id &&
|
|
10
|
-
// Reload extension
|
|
11
|
-
extension.id !== 'igcijhgmihmjbbahdabahfbpffalcfnn' &&
|
|
12
|
-
// Show only unpackaged extensions
|
|
13
|
-
extension.installType === 'development'
|
|
14
|
-
)
|
|
15
|
-
})
|
|
16
|
-
|
|
17
|
-
return devExtensions[0]
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
// Ideas here are adapted from
|
|
21
|
-
// https://github.com/jeremyben/webpack-chrome-extension-launcher
|
|
22
|
-
// Released under MIT license.
|
|
23
|
-
|
|
24
|
-
// Create a new tab and set it to background.
|
|
25
|
-
// We want the user-selected page to be active,
|
|
26
|
-
// not chrome://extensions.
|
|
27
|
-
export function createExtensionsPageTab(initialTab, url) {
|
|
28
|
-
// Check if url tab is open
|
|
29
|
-
chrome.tabs.query({url: 'chrome://extensions/'}, (tabs) => {
|
|
30
|
-
const extensionsTabExist = tabs.length > 0
|
|
31
|
-
|
|
32
|
-
// Return if url exists
|
|
33
|
-
if (extensionsTabExist) return
|
|
34
|
-
|
|
35
|
-
// Create an inactive tab
|
|
36
|
-
chrome.tabs.create(
|
|
37
|
-
{url, active: false},
|
|
38
|
-
function setBackgroundTab(extensionsTab) {
|
|
39
|
-
// Get current url tab and move it left.
|
|
40
|
-
// This action auto-activates the tab
|
|
41
|
-
chrome.tabs.move(extensionsTab.id, {index: 0}, () => {
|
|
42
|
-
// Get user-selected initial page tab and activate the right tab
|
|
43
|
-
setTimeout(() => {
|
|
44
|
-
chrome.tabs.update(initialTab.id, {active: true})
|
|
45
|
-
}, 500)
|
|
46
|
-
})
|
|
47
|
-
}
|
|
48
|
-
)
|
|
49
|
-
})
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
// Function to handle first run logic
|
|
53
|
-
export async function handleFirstRun() {
|
|
54
|
-
chrome.tabs.update({url: 'chrome://extensions/'})
|
|
55
|
-
|
|
56
|
-
const devExtension = await getDevExtension()
|
|
57
|
-
|
|
58
|
-
chrome.storage.local.get(devExtension.id, (result) => {
|
|
59
|
-
if (result[devExtension.id] && result[devExtension.id].didRun) {
|
|
60
|
-
return
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
// Guard against opening multiple welcome pages
|
|
64
|
-
chrome.tabs.query(
|
|
65
|
-
{url: chrome.runtime.getURL('pages/welcome.html')},
|
|
66
|
-
(tabs) => {
|
|
67
|
-
if (Array.isArray(tabs) && tabs.length > 0) {
|
|
68
|
-
// Already open; do not create another
|
|
69
|
-
return
|
|
70
|
-
}
|
|
71
|
-
chrome.tabs.create({url: 'pages/welcome.html'})
|
|
72
|
-
}
|
|
73
|
-
)
|
|
74
|
-
// Ensure the welcome page shows only once per extension installation
|
|
75
|
-
chrome.storage.local.set({[devExtension.id]: {didRun: true}})
|
|
76
|
-
})
|
|
77
|
-
}
|
|
Binary file
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "Extension.js DevTools",
|
|
3
|
-
"description": "Extension.js built-in developer tools for browser instance ID __INSTANCE_ID__",
|
|
4
|
-
"version": "1.0.0",
|
|
5
|
-
"manifest_version": 3,
|
|
6
|
-
"key": "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAolEJq/DBHxY5dBpOqBRWNCl7vRPBvJPlpEzF19fYFVzzaH44AF6+sKjN3jwIKlsgI82F3TIuwoNFiN1yBu5Unf8SVBE4BTO92P02/ACcGYQxicgCLFUGQKlq4uSrwSPaBYl7FHcYl5SERgxnIGCGnaGMdL2vC7waCj2/U/iKoBF9I1lBH9/aKCSjTd3h2UYo7gg6n5nY/ENbzylDt42T3ATmvnVJfYhSNKA9Dv/zryknfnHYYgBKHtz7pDZwWnYdxs78n2VEKwGj7TgbXuIPDpCkrMnU9PTKpHbXFYARA4H9qYORQmYazfIxUZRnKQNSR+GAOGrb8JK+ijeQdwzDAwIDAQAB",
|
|
7
|
-
"background": {
|
|
8
|
-
"service_worker": "background.js",
|
|
9
|
-
"type": "module"
|
|
10
|
-
},
|
|
11
|
-
"icons": {
|
|
12
|
-
"16": "images/logo.png",
|
|
13
|
-
"48": "images/logo.png",
|
|
14
|
-
"128": "images/logo.png"
|
|
15
|
-
},
|
|
16
|
-
"permissions": ["management", "tabs", "storage"]
|
|
17
|
-
}
|