browser-extension-manager 1.3.48 → 1.4.0

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 (47) hide show
  1. package/README.md +109 -70
  2. package/dist/background.js +4 -0
  3. package/dist/build.js +3 -0
  4. package/dist/cli.js +1 -0
  5. package/dist/commands/test.js +55 -0
  6. package/dist/content.js +4 -0
  7. package/dist/defaults/CLAUDE.md +66 -6
  8. package/dist/gulp/tasks/defaults.js +20 -4
  9. package/dist/gulp/tasks/distribute.js +36 -33
  10. package/dist/gulp/tasks/html.js +82 -79
  11. package/dist/gulp/tasks/utils/template-transform.js +35 -35
  12. package/dist/offscreen.js +4 -0
  13. package/dist/options.js +4 -0
  14. package/dist/page.js +4 -0
  15. package/dist/popup.js +4 -0
  16. package/dist/sidepanel.js +4 -0
  17. package/dist/test/assert.js +120 -0
  18. package/dist/test/fixtures/consumer-extension/dist/background.js +15 -0
  19. package/dist/test/fixtures/consumer-extension/dist/manifest.json +20 -0
  20. package/dist/test/fixtures/consumer-extension/dist/options.html +10 -0
  21. package/dist/test/fixtures/consumer-extension/dist/popup.html +11 -0
  22. package/dist/test/harness/extension/background.js +26 -0
  23. package/dist/test/harness/extension/manifest.json +27 -0
  24. package/dist/test/harness/extension/options.html +12 -0
  25. package/dist/test/harness/extension/popup.html +12 -0
  26. package/dist/test/harness/extension/sidepanel.html +12 -0
  27. package/dist/test/index.js +63 -0
  28. package/dist/test/runner.js +407 -0
  29. package/dist/test/runners/boot.js +201 -0
  30. package/dist/test/runners/chromium.js +399 -0
  31. package/dist/test/suites/background/messaging.test.js +42 -0
  32. package/dist/test/suites/background/storage.test.js +44 -0
  33. package/dist/test/suites/background/sw-context.test.js +47 -0
  34. package/dist/test/suites/boot/extension-loads.test.js +56 -0
  35. package/dist/test/suites/build/affiliatizer.test.js +63 -0
  36. package/dist/test/suites/build/cli.test.js +123 -0
  37. package/dist/test/suites/build/expect.test.js +47 -0
  38. package/dist/test/suites/build/exports.test.js +52 -0
  39. package/dist/test/suites/build/extension-fallback.test.js +41 -0
  40. package/dist/test/suites/build/logger-lite.test.js +59 -0
  41. package/dist/test/suites/build/manager.test.js +162 -0
  42. package/dist/test/suites/build/mode-helpers.test.js +96 -0
  43. package/dist/test/suites/view/options-and-sidepanel.test.js +14 -0
  44. package/dist/test/suites/view/popup-context.test.js +51 -0
  45. package/dist/test/suites/view/sidepanel.test.js +14 -0
  46. package/dist/utils/mode-helpers.js +92 -0
  47. package/package.json +16 -13
@@ -0,0 +1,92 @@
1
+ // Runtime mode helpers (BEM/EM-pattern), shared across BXM's eight context Managers
2
+ // (build / background / popup / options / content / sidepanel / page / offscreen).
3
+ //
4
+ // Three orthogonal concepts:
5
+ // isDevelopment() — true when running unpacked from disk (an unpacked extension
6
+ // loaded via chrome://extensions or a dev build of the framework).
7
+ // Browser detection uses `chrome.runtime.getManifest().update_url`
8
+ // — packed extensions from the Web Store have one, unpacked ones
9
+ // do not. Falls back to NODE_ENV in Node contexts.
10
+ // isProduction() — inverse. Running from a packed .crx / store-installed extension.
11
+ // isTesting() — true when BXM's test framework is running this process. Set by
12
+ // BXM's test runners (BXM_TEST_MODE=true) and consumer test setups
13
+ // that want the same signal.
14
+ //
15
+ // Use these whenever behavior should differ by *what kind of process* you're in —
16
+ // shorter timeouts in tests, DevTools menu items only in dev, prompts suppressed in
17
+ // tests. Don't use them for "should we hit dev or prod backends" — that's a config
18
+ // concern; use `getEnvironment()` for that (in build.js).
19
+ //
20
+ // Context caveat: in build-time Node (gulp / CLI), `chrome` is undefined. We detect
21
+ // via `typeof chrome` so the same code works in every context. In test mode the
22
+ // browser-side check is short-circuited via BXM_TEST_MODE so `isDevelopment()`
23
+ // returns a stable value regardless of which test layer is running.
24
+
25
+ function isDevelopment() {
26
+ // Browser-side: rely on `update_url` being absent for unpacked extensions.
27
+ // (Store-installed extensions have `update_url` set to clients2.google.com / similar.)
28
+ if (typeof chrome !== 'undefined' && chrome.runtime && typeof chrome.runtime.getManifest === 'function') {
29
+ try {
30
+ const manifest = chrome.runtime.getManifest();
31
+ return !manifest.update_url;
32
+ } catch (_) { /* fall through */ }
33
+ }
34
+ // Node / build-time fallback.
35
+ if (process.env.NODE_ENV === 'development') return true;
36
+ if (process.env.BXM_BUILD_MODE === 'true') return false;
37
+ if (this && this.config && this.config.bxm && this.config.bxm.environment === 'development') return true;
38
+ return false;
39
+ }
40
+
41
+ function isProduction() {
42
+ return !this.isDevelopment();
43
+ }
44
+
45
+ function isTesting() {
46
+ // Canonical signal — set by BXM's test runners and consumer test setups alike.
47
+ // Works in Node (process.env) AND in extension contexts (the harness extension
48
+ // sets globalThis.BXM_TEST_MODE before any consumer code runs).
49
+ if (typeof process !== 'undefined' && process.env && process.env.BXM_TEST_MODE === 'true') return true;
50
+ if (typeof globalThis !== 'undefined' && globalThis.BXM_TEST_MODE === true) return true;
51
+ return false;
52
+ }
53
+
54
+ // `getVersion()` — returns the extension's version string.
55
+ // 1. `chrome.runtime.getManifest().version` when running inside an extension context.
56
+ // 2. `<cwd>/package.json#version` for build-time scripts.
57
+ // 3. null when neither resolves.
58
+ function getVersion() {
59
+ if (typeof chrome !== 'undefined' && chrome.runtime && typeof chrome.runtime.getManifest === 'function') {
60
+ try {
61
+ return chrome.runtime.getManifest().version || null;
62
+ } catch (_) { /* fall through */ }
63
+ }
64
+ try {
65
+ const path = require('path');
66
+ const pkg = require(path.join(process.cwd(), 'package.json'));
67
+ return pkg.version || null;
68
+ } catch (_) {
69
+ return null;
70
+ }
71
+ }
72
+
73
+ // Mix the helpers into a Manager constructor's prototype + the constructor itself
74
+ // (so `Manager.isTesting()` works statically too, matching BEM/EM pattern).
75
+ function attachTo(Manager) {
76
+ Manager.prototype.isDevelopment = isDevelopment;
77
+ Manager.prototype.isProduction = isProduction;
78
+ Manager.prototype.isTesting = isTesting;
79
+ Manager.prototype.getVersion = getVersion;
80
+ Manager.isDevelopment = isDevelopment;
81
+ Manager.isProduction = isProduction;
82
+ Manager.isTesting = isTesting;
83
+ Manager.getVersion = getVersion;
84
+ }
85
+
86
+ module.exports = {
87
+ attachTo,
88
+ isDevelopment,
89
+ isProduction,
90
+ isTesting,
91
+ getVersion,
92
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browser-extension-manager",
3
- "version": "1.3.48",
3
+ "version": "1.4.0",
4
4
  "description": "Browser Extension Manager dependency manager",
5
5
  "main": "dist/index.js",
6
6
  "exports": {
@@ -22,6 +22,7 @@
22
22
  "start": "npm run prepare:watch",
23
23
  "prepare": "node -e \"require('prepare-package')()\"",
24
24
  "prepare:watch": "node -e \"require('prepare-package/watch')()\"",
25
+ "test": "node ./bin/browser-extension-manager test",
25
26
  "wm:prod": "npm uninstall web-manager && npm i web-manager@latest",
26
27
  "wm:local": "npm uninstall web-manager && npm i ../web-manager"
27
28
  },
@@ -39,14 +40,16 @@
39
40
  "input": "./src",
40
41
  "output": "./dist",
41
42
  "replace": {},
42
- "type": "copy"
43
+ "type": "copy",
44
+ "hooks": {}
43
45
  },
44
46
  "projectScripts": {
45
47
  "start": "npx mgr clean && npx mgr setup && npm run gulp --",
46
48
  "gulp": "gulp --cwd ./ --gulpfile ./node_modules/browser-extension-manager/dist/gulp/main.js",
47
49
  "build": "npx mgr clean && npx mgr setup && BXM_BUILD_MODE=true npm run gulp -- build",
48
50
  "publish": "BXM_IS_PUBLISH=true npm run gulp -- publish",
49
- "release": "npm run build && npm run publish"
51
+ "release": "npm run build && npm run publish",
52
+ "test": "npx mgr test"
50
53
  },
51
54
  "engines": {
52
55
  "node": "22"
@@ -72,17 +75,17 @@
72
75
  },
73
76
  "homepage": "https://template.itwcreativeworks.com",
74
77
  "dependencies": {
75
- "@anthropic-ai/claude-agent-sdk": "^0.2.90",
78
+ "@anthropic-ai/claude-agent-sdk": "^0.2.138",
76
79
  "@babel/core": "^7.29.0",
77
- "@babel/preset-env": "^7.29.2",
80
+ "@babel/preset-env": "^7.29.5",
78
81
  "@popperjs/core": "^2.11.8",
79
82
  "babel-loader": "^10.1.1",
80
83
  "chalk": "^5.6.2",
81
- "dotenv": "^17.4.0",
84
+ "dotenv": "^17.4.2",
82
85
  "fs-jetpack": "^5.1.0",
83
86
  "glob": "^13.0.6",
84
87
  "gulp-clean-css": "^4.3.0",
85
- "gulp-filter": "^9.0.1",
88
+ "gulp-filter": "^10.0.0",
86
89
  "gulp-rename": "^2.1.0",
87
90
  "gulp-responsive-modern": "^1.0.0",
88
91
  "gulp-sass": "^6.0.1",
@@ -92,11 +95,10 @@
92
95
  "minimatch": "^10.2.5",
93
96
  "node-powertools": "^3.0.0",
94
97
  "npm-api": "^1.0.1",
95
- "sass": "^1.98.0",
96
- "through2": "^4.0.2",
97
- "web-manager": "^4.1.36",
98
- "webpack": "^5.105.4",
99
- "wonderful-fetch": "^2.0.4",
98
+ "sass": "^1.99.0",
99
+ "web-manager": "^4.1.42",
100
+ "webpack": "^5.106.2",
101
+ "wonderful-fetch": "^2.0.5",
100
102
  "wonderful-version": "^1.3.2",
101
103
  "ws": "^8.20.0",
102
104
  "yargs": "^18.0.0"
@@ -105,6 +107,7 @@
105
107
  "gulp": "^5.0.1"
106
108
  },
107
109
  "devDependencies": {
108
- "prepare-package": "^2.0.7"
110
+ "prepare-package": "^2.1.0",
111
+ "puppeteer": "^24.43.1"
109
112
  }
110
113
  }