extension-develop 0.0.0-next-20250825144602

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