extension 4.0.35 → 4.1.1

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 CHANGED
@@ -41,7 +41,7 @@ Browser extensions ship with the worst dev experience in modern web. Manifest V3
41
41
 
42
42
  ## Watch it work
43
43
 
44
- [60-second demo](https://github.com/cezaraugusto/extension/assets/4672033/7263d368-99c4-434f-a60a-72c489672586)
44
+ [![Extension.js in 60 seconds: one command, a running extension](https://media.extension.land/video/extension-js/sixty-second-demo.gif)](https://extension.js.org/docs)
45
45
 
46
46
  Or skip the install and try a [live template](https://templates.extension.dev) in your browser.
47
47
 
@@ -155,7 +155,9 @@ npm install extension@latest --save-dev
155
155
  }
156
156
  ```
157
157
 
158
- Run `npm run dev` to develop, `npm run build` for production, and `npm run preview` to inspect the production output. [See it in action.](https://github.com/cezaraugusto/extension/assets/4672033/48694a23-b7f1-4098-9c5d-eff49983739c)
158
+ Run `npm run dev` to develop, `npm run build` for production, and `npm run preview` to inspect the production output.
159
+
160
+ [![extension dev: the browser opens with the extension loaded](https://media.extension.land/video/extension-js/dev-build-preview.gif)](https://extension.js.org/docs/commands/dev)
159
161
 
160
162
  ## Start from a Chrome sample
161
163
 
@@ -165,7 +167,7 @@ Pull any sample from [Chrome Extension Samples](https://github.com/GoogleChrome/
165
167
  npx extension@latest dev https://github.com/GoogleChrome/chrome-extensions-samples/tree/main/functional-samples/sample.page-redder --browser=edge
166
168
  ```
167
169
 
168
- [Watch demo](https://github.com/cezaraugusto/extension/assets/4672033/ee221a94-6ec7-4e04-8553-8812288927f1)
170
+ [![Running a Chrome sample straight from its GitHub URL](https://media.extension.land/video/extension-js/run-chrome-sample.gif)](https://extension.js.org/docs/getting-started/immediately)
169
171
 
170
172
  ## Package managers
171
173
 
package/dist/browsers.cjs CHANGED
@@ -237,10 +237,6 @@ var __webpack_modules__ = {
237
237
  label: 'Browser',
238
238
  value: provenanceNote ? `${browserLabel} ${provenanceNote}` : browserLabel
239
239
  },
240
- {
241
- label: 'Binary',
242
- value: provenanceNote ? _messages__rspack_import_5.Yy(opts.binaryPath || '') : ''
243
- },
244
240
  {
245
241
  label: 'Output',
246
242
  value: _messages__rspack_import_5.Yy(opts.outPath)
@@ -784,8 +780,6 @@ var __webpack_modules__ = {
784
780
  }
785
781
  function binaryProvenanceNote(provenance) {
786
782
  if ('pinned' === provenance) return '(pinned with --chromium-binary)';
787
- if ('system' === provenance) return '(system, not the managed default)';
788
- if ('snapshot' === provenance) return '(cached snapshot)';
789
783
  return '';
790
784
  }
791
785
  function runningInDevelopment(manifest, browser, message, browserVersionLine, updateSuffix, opts) {
@@ -824,7 +818,6 @@ var __webpack_modules__ = {
824
818
  }));
825
819
  const provenanceNote = binaryProvenanceNote(opts?.binaryProvenance);
826
820
  const browserLabel = provenanceNote ? `${baseBrowserLabel} ${provenanceNote}` : baseBrowserLabel;
827
- const binaryRowValue = provenanceNote ? collapseHomeDirInCardValue(String(opts?.binaryPath || '').trim()) : '';
828
821
  const cleanId = String(id || '').trim();
829
822
  const includeExtensionId = opts?.includeExtensionId !== false;
830
823
  const updateNotice = updateSuffix ? ` ${updateSuffix}` : '';
@@ -838,18 +831,10 @@ var __webpack_modules__ = {
838
831
  label: 'Browser',
839
832
  value: browserLabel
840
833
  },
841
- {
842
- label: 'Binary',
843
- value: binaryRowValue
844
- },
845
834
  {
846
835
  label: 'Extension',
847
836
  value: displayVersion ? `${displayName} ${displayVersion}` : displayName
848
837
  },
849
- {
850
- label: 'Extension ID',
851
- value: includeExtensionId ? cleanId : ''
852
- },
853
838
  {
854
839
  label: 'Profile',
855
840
  value: collapseHomeDirInCardValue(String(opts?.profilePath || '').trim())
@@ -857,6 +842,10 @@ var __webpack_modules__ = {
857
842
  {
858
843
  label: 'Run ID',
859
844
  value: opts?.runLabel || ''
845
+ },
846
+ {
847
+ label: 'Extension ID',
848
+ value: includeExtensionId ? cleanId : ''
860
849
  }
861
850
  ]
862
851
  });
@@ -1361,6 +1350,10 @@ var __webpack_modules__ = {
1361
1350
  if ('number' == typeof details?.browserPid && Number.isFinite(details.browserPid)) ready.browserPid = details.browserPid;
1362
1351
  const extensionId = String(details?.extensionId || '').trim();
1363
1352
  if (extensionId) ready.extensionId = extensionId;
1353
+ const binary = String(details?.binary || '').trim();
1354
+ if (binary) ready.binary = binary;
1355
+ const provenance = String(details?.binaryProvenance || '').trim();
1356
+ if (provenance) ready.binaryProvenance = provenance;
1364
1357
  node_fs__rspack_import_0.writeFileSync(readyPath, JSON.stringify(ready, null, 2));
1365
1358
  } catch {}
1366
1359
  }
@@ -3244,6 +3237,8 @@ var __webpack_modules__ = {
3244
3237
  (0, ready_stamp.M)(launchOutputPath, {
3245
3238
  profilePath: chromiumConfig.find((flag)=>flag.startsWith('--user-data-dir='))?.slice('--user-data-dir='.length).replace(/^"|"$/g, ''),
3246
3239
  browserPid: child?.pid,
3240
+ binary: browserBinaryLocation ?? void 0,
3241
+ binaryProvenance,
3247
3242
  extensionId: launchOutputPath ? (0, banner.vy)(launchOutputPath) : void 0
3248
3243
  });
3249
3244
  const pipeStreams = usePipe && child?.stdio?.[3] && child?.stdio?.[4] ? {
@@ -5946,11 +5941,12 @@ var __webpack_modules__ = {
5946
5941
  console.error(...parts);
5947
5942
  }
5948
5943
  const CARD_LABEL_WIDTH = 15;
5944
+ const MAX_CARD_ROWS = 3;
5949
5945
  function card(input = {}) {
5950
5946
  const version = String(input.version || '').trim();
5951
5947
  const suffix = String(input.suffix || '').trim();
5952
- const head = ` 🧩 ${pintor__rspack_import_0_default().brightBlue('Extension.js')}` + (version ? ` ${pintor__rspack_import_0_default().gray(version)}` : '') + (suffix ? ` ${suffix}` : '');
5953
- const body = (input.rows || []).filter((row)=>String(row.value || '').trim().length > 0).map((row)=>{
5948
+ const head = ` 🧩 Extension.js` + (version ? ` ${pintor__rspack_import_0_default().gray(version)}` : '') + (suffix ? ` ${suffix}` : '');
5949
+ const body = (input.rows || []).filter((row)=>String(row.value || '').trim().length > 0).slice(0, MAX_CARD_ROWS).map((row)=>{
5954
5950
  const label = row.label.padEnd(CARD_LABEL_WIDTH);
5955
5951
  return ` ${label}${pintor__rspack_import_0_default().gray(String(row.value).trim())}`;
5956
5952
  });
package/dist/cli.cjs CHANGED
@@ -238,10 +238,6 @@ var __webpack_modules__ = {
238
238
  label: 'Browser',
239
239
  value: provenanceNote ? `${browserLabel} ${provenanceNote}` : browserLabel
240
240
  },
241
- {
242
- label: 'Binary',
243
- value: provenanceNote ? _messages__rspack_import_5.Yy(opts.binaryPath || '') : ''
244
- },
245
241
  {
246
242
  label: 'Output',
247
243
  value: _messages__rspack_import_5.Yy(opts.outPath)
@@ -785,8 +781,6 @@ var __webpack_modules__ = {
785
781
  }
786
782
  function binaryProvenanceNote(provenance) {
787
783
  if ('pinned' === provenance) return '(pinned with --chromium-binary)';
788
- if ('system' === provenance) return '(system, not the managed default)';
789
- if ('snapshot' === provenance) return '(cached snapshot)';
790
784
  return '';
791
785
  }
792
786
  function runningInDevelopment(manifest, browser, message, browserVersionLine, updateSuffix, opts) {
@@ -825,7 +819,6 @@ var __webpack_modules__ = {
825
819
  }));
826
820
  const provenanceNote = binaryProvenanceNote(opts?.binaryProvenance);
827
821
  const browserLabel = provenanceNote ? `${baseBrowserLabel} ${provenanceNote}` : baseBrowserLabel;
828
- const binaryRowValue = provenanceNote ? collapseHomeDirInCardValue(String(opts?.binaryPath || '').trim()) : '';
829
822
  const cleanId = String(id || '').trim();
830
823
  const includeExtensionId = opts?.includeExtensionId !== false;
831
824
  const updateNotice = updateSuffix ? ` ${updateSuffix}` : '';
@@ -839,18 +832,10 @@ var __webpack_modules__ = {
839
832
  label: 'Browser',
840
833
  value: browserLabel
841
834
  },
842
- {
843
- label: 'Binary',
844
- value: binaryRowValue
845
- },
846
835
  {
847
836
  label: 'Extension',
848
837
  value: displayVersion ? `${displayName} ${displayVersion}` : displayName
849
838
  },
850
- {
851
- label: 'Extension ID',
852
- value: includeExtensionId ? cleanId : ''
853
- },
854
839
  {
855
840
  label: 'Profile',
856
841
  value: collapseHomeDirInCardValue(String(opts?.profilePath || '').trim())
@@ -858,6 +843,10 @@ var __webpack_modules__ = {
858
843
  {
859
844
  label: 'Run ID',
860
845
  value: opts?.runLabel || ''
846
+ },
847
+ {
848
+ label: 'Extension ID',
849
+ value: includeExtensionId ? cleanId : ''
861
850
  }
862
851
  ]
863
852
  });
@@ -1362,6 +1351,10 @@ var __webpack_modules__ = {
1362
1351
  if ('number' == typeof details?.browserPid && Number.isFinite(details.browserPid)) ready.browserPid = details.browserPid;
1363
1352
  const extensionId = String(details?.extensionId || '').trim();
1364
1353
  if (extensionId) ready.extensionId = extensionId;
1354
+ const binary = String(details?.binary || '').trim();
1355
+ if (binary) ready.binary = binary;
1356
+ const provenance = String(details?.binaryProvenance || '').trim();
1357
+ if (provenance) ready.binaryProvenance = provenance;
1365
1358
  node_fs__rspack_import_0.writeFileSync(readyPath, JSON.stringify(ready, null, 2));
1366
1359
  } catch {}
1367
1360
  }
@@ -3235,6 +3228,8 @@ var __webpack_modules__ = {
3235
3228
  (0, ready_stamp.M)(launchOutputPath, {
3236
3229
  profilePath: chromiumConfig.find((flag)=>flag.startsWith('--user-data-dir='))?.slice('--user-data-dir='.length).replace(/^"|"$/g, ''),
3237
3230
  browserPid: child?.pid,
3231
+ binary: browserBinaryLocation ?? void 0,
3232
+ binaryProvenance,
3238
3233
  extensionId: launchOutputPath ? (0, banner.vy)(launchOutputPath) : void 0
3239
3234
  });
3240
3235
  const pipeStreams = usePipe && child?.stdio?.[3] && child?.stdio?.[4] ? {
@@ -5959,11 +5954,12 @@ var __webpack_modules__ = {
5959
5954
  }
5960
5955
  };
5961
5956
  const CARD_LABEL_WIDTH = 15;
5957
+ const MAX_CARD_ROWS = 3;
5962
5958
  function card(input = {}) {
5963
5959
  const version = String(input.version || '').trim();
5964
5960
  const suffix = String(input.suffix || '').trim();
5965
- const head = ` 🧩 ${pintor__rspack_import_0_default().brightBlue('Extension.js')}` + (version ? ` ${pintor__rspack_import_0_default().gray(version)}` : '') + (suffix ? ` ${suffix}` : '');
5966
- const body = (input.rows || []).filter((row)=>String(row.value || '').trim().length > 0).map((row)=>{
5961
+ const head = ` 🧩 Extension.js` + (version ? ` ${pintor__rspack_import_0_default().gray(version)}` : '') + (suffix ? ` ${suffix}` : '');
5962
+ const body = (input.rows || []).filter((row)=>String(row.value || '').trim().length > 0).slice(0, MAX_CARD_ROWS).map((row)=>{
5967
5963
  const label = row.label.padEnd(CARD_LABEL_WIDTH);
5968
5964
  return ` ${label}${pintor__rspack_import_0_default().gray(String(row.value).trim())}`;
5969
5965
  });
@@ -9111,6 +9107,14 @@ Cross-browser compatibility
9111
9107
  }
9112
9108
  });
9113
9109
  }
9110
+ function binaryDetailSuffix(ready) {
9111
+ const binary = String(ready?.binary || '').trim();
9112
+ if (!binary) return '';
9113
+ const home = external_node_os_.homedir();
9114
+ const shown = home && binary.startsWith(home + external_node_path_default().sep) ? `~${binary.slice(home.length)}` : binary;
9115
+ const provenance = String(ready?.binaryProvenance || '').trim();
9116
+ return provenance ? `, ${shown} (${provenance})` : `, ${shown}`;
9117
+ }
9114
9118
  const CONNECT_TIMEOUT_MS = 5000;
9115
9119
  const PROBE_TIMEOUT_MS = 3000;
9116
9120
  const EXECUTOR_ATTACH_GRACE_MS = 10000;
@@ -9362,18 +9366,18 @@ Cross-browser compatibility
9362
9366
  if (ready.browserExitedAt) results.push({
9363
9367
  check: 'browser',
9364
9368
  status: 'fail',
9365
- detail: `browser exited at ${ready.browserExitedAt}${null != ready.browserExitCode ? ` (code ${ready.browserExitCode})` : ''} while the dev server kept running`,
9369
+ detail: `browser exited at ${ready.browserExitedAt}${null != ready.browserExitCode ? ` (code ${ready.browserExitCode})` : ''} while the dev server kept running${binaryDetailSuffix(ready)}`,
9366
9370
  remediation: 'Restart the dev session to relaunch the browser'
9367
9371
  });
9368
9372
  else if (null != ready.cdpPort) results.push({
9369
9373
  check: 'browser',
9370
9374
  status: 'pass',
9371
- detail: `browser running (cdpPort ${ready.cdpPort})`
9375
+ detail: `browser running (cdpPort ${ready.cdpPort})${binaryDetailSuffix(ready)}`
9372
9376
  });
9373
9377
  else results.push({
9374
9378
  check: 'browser',
9375
9379
  status: 'skip',
9376
- detail: 'browser liveness unknown (no cdpPort stamped yet and no exit recorded)',
9380
+ detail: `browser liveness unknown (no cdpPort stamped yet and no exit recorded)${binaryDetailSuffix(ready)}`,
9377
9381
  remediation: 'If the browser should be up, wait for launch to finish or restart the dev session'
9378
9382
  });
9379
9383
  return results;
@@ -3,6 +3,8 @@ export declare function stampReadyBrowserLaunch(extensionOutputPath: string | un
3
3
  profilePath?: string;
4
4
  browserPid?: number;
5
5
  extensionId?: string;
6
+ binary?: string;
7
+ binaryProvenance?: 'managed' | 'pinned' | 'system' | 'snapshot';
6
8
  }): void;
7
9
  export declare function stampReadyExtensionId(extensionOutputPath: string | undefined, extensionId: string | undefined): void;
8
10
  export declare function stampReadyExtensionLoadRefused(extensionOutputPath: string | undefined, reason: string): void;
@@ -23,6 +23,7 @@ export interface CardInput {
23
23
  suffix?: string;
24
24
  rows?: CardRow[];
25
25
  }
26
+ export declare const MAX_CARD_ROWS = 3;
26
27
  export declare function card(input?: CardInput): string;
27
28
  export declare function browserRowValue(browser: string, versionLine?: string): string;
28
29
  export declare function isCardKeyClaimed(key: string): boolean;
package/package.json CHANGED
@@ -38,7 +38,7 @@
38
38
  "extension": "./bin/extension.cjs"
39
39
  },
40
40
  "name": "extension",
41
- "version": "4.0.35",
41
+ "version": "4.1.1",
42
42
  "description": "The cross-browser extension framework. Build Chrome, Edge, Firefox, and Safari extensions with no build configuration.",
43
43
  "homepage": "https://extension.js.org/",
44
44
  "bugs": {
@@ -106,9 +106,9 @@
106
106
  "vivaldi-location2": "2.1.1",
107
107
  "waterfox-location": "2.1.1",
108
108
  "yandex-location": "2.1.1",
109
- "extension-create": "4.0.35",
110
- "extension-develop": "4.0.35",
111
- "extension-install": "4.0.35",
109
+ "extension-create": "4.1.1",
110
+ "extension-develop": "4.1.1",
111
+ "extension-install": "4.1.1",
112
112
  "commander": "^15.0.0",
113
113
  "pintor": "0.3.0",
114
114
  "semver": "^7.7.3",