web-ext 7.11.0 → 8.0.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 (66) hide show
  1. package/README.md +6 -8
  2. package/bin/web-ext.js +1 -1
  3. package/lib/cmd/build.js +1 -3
  4. package/lib/cmd/build.js.map +1 -1
  5. package/lib/cmd/docs.js +1 -0
  6. package/lib/cmd/docs.js.map +1 -1
  7. package/lib/cmd/dump-config.js +6 -0
  8. package/lib/cmd/dump-config.js.map +1 -0
  9. package/lib/cmd/index.js +16 -8
  10. package/lib/cmd/index.js.map +1 -1
  11. package/lib/cmd/lint.js +0 -8
  12. package/lib/cmd/lint.js.map +1 -1
  13. package/lib/cmd/run.js +0 -7
  14. package/lib/cmd/run.js.map +1 -1
  15. package/lib/cmd/sign.js +29 -85
  16. package/lib/cmd/sign.js.map +1 -1
  17. package/lib/config.js +53 -7
  18. package/lib/config.js.map +1 -1
  19. package/lib/errors.js.map +1 -1
  20. package/lib/extension-runners/chromium.js +11 -3
  21. package/lib/extension-runners/chromium.js.map +1 -1
  22. package/lib/extension-runners/firefox-android.js +15 -3
  23. package/lib/extension-runners/firefox-android.js.map +1 -1
  24. package/lib/extension-runners/firefox-desktop.js +7 -8
  25. package/lib/extension-runners/firefox-desktop.js.map +1 -1
  26. package/lib/extension-runners/index.js +2 -2
  27. package/lib/extension-runners/index.js.map +1 -1
  28. package/lib/firefox/index.js +1 -8
  29. package/lib/firefox/index.js.map +1 -1
  30. package/lib/firefox/package-identifiers.js +3 -1
  31. package/lib/firefox/package-identifiers.js.map +1 -1
  32. package/lib/firefox/preferences.js +0 -2
  33. package/lib/firefox/preferences.js.map +1 -1
  34. package/lib/firefox/rdp-client.js +10 -2
  35. package/lib/firefox/rdp-client.js.map +1 -1
  36. package/lib/firefox/remote.js +3 -2
  37. package/lib/firefox/remote.js.map +1 -1
  38. package/lib/main.js.map +1 -1
  39. package/lib/program.js +25 -48
  40. package/lib/program.js.map +1 -1
  41. package/lib/util/adb.js +26 -10
  42. package/lib/util/adb.js.map +1 -1
  43. package/lib/util/artifacts.js.map +1 -1
  44. package/lib/util/desktop-notifier.js.map +1 -1
  45. package/lib/util/file-exists.js +1 -0
  46. package/lib/util/file-exists.js.map +1 -1
  47. package/lib/util/file-filter.js +2 -0
  48. package/lib/util/file-filter.js.map +1 -1
  49. package/lib/util/is-directory.js.map +1 -1
  50. package/lib/util/logger.js +5 -5
  51. package/lib/util/logger.js.map +1 -1
  52. package/lib/util/manifest.js +1 -1
  53. package/lib/util/manifest.js.map +1 -1
  54. package/lib/util/promisify.js +0 -7
  55. package/lib/util/promisify.js.map +1 -1
  56. package/lib/util/stdin.js +0 -2
  57. package/lib/util/stdin.js.map +1 -1
  58. package/lib/util/submit-addon.js +214 -50
  59. package/lib/util/submit-addon.js.map +1 -1
  60. package/lib/util/temp-dir.js +2 -0
  61. package/lib/util/temp-dir.js.map +1 -1
  62. package/lib/util/updates.js.map +1 -1
  63. package/lib/watcher.js.map +1 -1
  64. package/package.json +38 -40
  65. package/lib/extension-runners/base.js +0 -2
  66. package/lib/extension-runners/base.js.map +0 -1
package/README.md CHANGED
@@ -5,8 +5,6 @@ This is a command line tool to help build, run, and test
5
5
 
6
6
  [![CircleCI](https://circleci.com/gh/mozilla/web-ext.svg?style=svg)](https://circleci.com/gh/mozilla/web-ext)
7
7
  [![codecov](https://codecov.io/gh/mozilla/web-ext/branch/master/graph/badge.svg)](https://codecov.io/gh/mozilla/web-ext)
8
- [![Dependency Status](https://david-dm.org/mozilla/web-ext.svg)](https://david-dm.org/mozilla/web-ext)
9
- [![devDependency Status](https://david-dm.org/mozilla/web-ext/dev-status.svg)](https://david-dm.org/mozilla/web-ext#info=devDependencies)
10
8
  [![npm version](https://badge.fury.io/js/web-ext.svg)](https://badge.fury.io/js/web-ext)
11
9
 
12
10
  Ultimately, it aims to support browser extensions in a standard, portable,
@@ -16,7 +14,7 @@ cross-platform way. Initially, it will provide a streamlined experience for deve
16
14
  ## Documentation
17
15
 
18
16
  - [Getting started with web-ext][web-ext-user-docs]
19
- - [Command reference](https://extensionworkshop.com/documentation/develop/web-ext-command-reference)
17
+ - [Command reference](https://extensionworkshop.com/documentation/develop/web-ext-command-reference/)
20
18
 
21
19
  Here are the commands you can run. Click on each one for detailed documentation or use `--help` on the command line, such as `web-ext build --help`.
22
20
 
@@ -76,8 +74,8 @@ version on the command line with this:
76
74
 
77
75
  You'll need:
78
76
 
79
- - [Node.js](https://nodejs.org/en/), 14.0.0 or higher
80
- - [npm](https://www.npmjs.com/), 6.9.0 or higher is recommended
77
+ - [Node.js](https://nodejs.org/en/) (current [LTS](https://github.com/nodejs/LTS))
78
+ - [npm](https://www.npmjs.com/), 8.0.0 or higher is recommended
81
79
 
82
80
  Optionally, you may like:
83
81
 
@@ -141,7 +139,7 @@ webExt.cmd
141
139
  // You need to specify this one so that your NodeJS application
142
140
  // can continue running after web-ext is finished.
143
141
  shouldExitProgram: false,
144
- }
142
+ },
145
143
  )
146
144
  .then((extensionRunner) => {
147
145
  // The command has finished. Each command resolves its
@@ -203,7 +201,7 @@ webExt.cmd.run(
203
201
  version: '1.0.0',
204
202
  }),
205
203
  shouldExitProgram: false,
206
- }
204
+ },
207
205
  );
208
206
  ```
209
207
 
@@ -237,7 +235,7 @@ Here is a partial list of examples:
237
235
  - Integrating with services.
238
236
  - Mozilla offers some useful services such as
239
237
  [linting](https://github.com/mozilla/addons-linter) and
240
- [signing](https://addons-server.readthedocs.io/en/latest/topics/api/signing.html)
238
+ [signing](https://addons-server.readthedocs.io/en/latest/topics/api/v4_frozen/signing.html)
241
239
  extensions.
242
240
 
243
241
  [web-ext-user-docs]: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Getting_started_with_web-ext
package/bin/web-ext.js CHANGED
@@ -7,7 +7,7 @@ import webExt from '../lib/main.js';
7
7
 
8
8
  const absolutePackageDir = path.join(
9
9
  path.dirname(fileURLToPath(import.meta.url)),
10
- '..'
10
+ '..',
11
11
  );
12
12
 
13
13
  await webExt.main(absolutePackageDir);
package/lib/cmd/build.js CHANGED
@@ -10,9 +10,7 @@ import getValidatedManifest, { getManifestId } from '../util/manifest.js';
10
10
  import { prepareArtifactsDir } from '../util/artifacts.js';
11
11
  import { createLogger } from '../util/logger.js';
12
12
  import { UsageError, isErrorWithCode } from '../errors.js';
13
- import { createFileFilter as defaultFileFilterCreator, FileFilter } from '../util/file-filter.js';
14
- // Import flow types.
15
-
13
+ import { createFileFilter as defaultFileFilterCreator } from '../util/file-filter.js';
16
14
  const log = createLogger(import.meta.url);
17
15
  const DEFAULT_FILENAME_TEMPLATE = '{name}-{version}.zip';
18
16
  export function safeFileName(name) {
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","names":["path","createWriteStream","fs","parseJSON","stripBom","defaultFromEvent","zipDir","defaultSourceWatcher","getValidatedManifest","getManifestId","prepareArtifactsDir","createLogger","UsageError","isErrorWithCode","createFileFilter","defaultFileFilterCreator","FileFilter","log","import","meta","url","DEFAULT_FILENAME_TEMPLATE","safeFileName","name","toLowerCase","replace","getDefaultLocalizedName","messageFile","manifestData","messageData","messageContents","extensionName","readFile","encoding","error","default","stripJsonComments","match","messageName","message","Promise","resolve","getStringPropertyValue","prop","obj","properties","split","value","reduce","prev","curr","includes","stringValue","length","getPackageNameFromTemplate","filenameTemplate","packageName","manifestProperty","parsed","parse","dir","ext","defaultPackageCreator","sourceDir","fileFilter","artifactsDir","overwriteDest","showReadyMessage","filename","fromEvent","id","debug","buffer","filter","args","wantFile","default_locale","join","extensionPath","stream","flags","write","end","info","overwriteStream","build","asNeeded","ignoreFiles","onSourceChange","packageCreator","rebuildAsNeeded","createPackage","result","onChange","catch","stack","shouldWatchFile"],"sources":["../../src/cmd/build.js"],"sourcesContent":["/* @flow */\nimport path from 'path';\nimport { createWriteStream } from 'fs';\n\nimport { fs } from 'mz';\nimport parseJSON from 'parse-json';\nimport stripBom from 'strip-bom';\nimport defaultFromEvent from 'promise-toolbox/fromEvent';\nimport zipDir from 'zip-dir';\n\nimport defaultSourceWatcher from '../watcher.js';\nimport getValidatedManifest, { getManifestId } from '../util/manifest.js';\nimport { prepareArtifactsDir } from '../util/artifacts.js';\nimport { createLogger } from '../util/logger.js';\nimport { UsageError, isErrorWithCode } from '../errors.js';\nimport {\n createFileFilter as defaultFileFilterCreator,\n FileFilter,\n} from '../util/file-filter.js';\n// Import flow types.\nimport type { OnSourceChangeFn } from '../watcher.js';\nimport type { ExtensionManifest } from '../util/manifest.js';\nimport type { FileFilterCreatorFn } from '../util/file-filter.js';\n\nconst log = createLogger(import.meta.url);\nconst DEFAULT_FILENAME_TEMPLATE = '{name}-{version}.zip';\n\nexport function safeFileName(name: string): string {\n return name.toLowerCase().replace(/[^a-z0-9.-]+/g, '_');\n}\n\n// defaultPackageCreator types and implementation.\n\nexport type ExtensionBuildResult = {|\n extensionPath: string,\n|};\n\nexport type PackageCreatorParams = {|\n manifestData?: ExtensionManifest,\n sourceDir: string,\n fileFilter: FileFilter,\n artifactsDir: string,\n overwriteDest: boolean,\n showReadyMessage: boolean,\n filename?: string,\n|};\n\nexport type LocalizedNameParams = {|\n messageFile: string,\n manifestData: ExtensionManifest,\n|};\n\nexport type PackageCreatorOptions = {\n fromEvent: typeof defaultFromEvent,\n};\n\n// This defines the _locales/messages.json type. See:\n// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Internationalization#Providing_localized_strings_in__locales\ntype LocalizedMessageData = {|\n [messageName: string]: {|\n description: string,\n message: string,\n |},\n|};\n\nexport async function getDefaultLocalizedName({\n messageFile,\n manifestData,\n}: LocalizedNameParams): Promise<string> {\n let messageData: LocalizedMessageData;\n let messageContents: string | Buffer;\n let extensionName: string = manifestData.name;\n\n try {\n messageContents = await fs.readFile(messageFile, { encoding: 'utf-8' });\n } catch (error) {\n throw new UsageError(\n `Error reading messages.json file at ${messageFile}: ${error}`\n );\n }\n\n messageContents = stripBom(messageContents);\n\n const { default: stripJsonComments } = await import('strip-json-comments');\n try {\n messageData = parseJSON(stripJsonComments(messageContents));\n } catch (error) {\n throw new UsageError(\n `Error parsing messages.json file at ${messageFile}: ${error}`\n );\n }\n\n extensionName = manifestData.name.replace(\n /__MSG_([A-Za-z0-9@_]+?)__/g,\n (match, messageName) => {\n if (!(messageData[messageName] && messageData[messageName].message)) {\n const error = new UsageError(\n `The locale file ${messageFile} ` + `is missing key: ${messageName}`\n );\n throw error;\n } else {\n return messageData[messageName].message;\n }\n }\n );\n return Promise.resolve(extensionName);\n}\n\n// https://stackoverflow.com/a/22129960\nexport function getStringPropertyValue(prop: string, obj: Object): string {\n const properties = prop.split('.');\n const value = properties.reduce((prev, curr) => prev && prev[curr], obj);\n if (!['string', 'number'].includes(typeof value)) {\n throw new UsageError(\n `Manifest key \"${prop}\" is missing or has an invalid type: ${value}`\n );\n }\n const stringValue = `${value}`;\n if (!stringValue.length) {\n throw new UsageError(`Manifest key \"${prop}\" value is an empty string`);\n }\n return stringValue;\n}\n\nfunction getPackageNameFromTemplate(\n filenameTemplate: string,\n manifestData: ExtensionManifest\n): string {\n const packageName = filenameTemplate.replace(\n /{([A-Za-z0-9._]+?)}/g,\n (match, manifestProperty) => {\n return safeFileName(\n getStringPropertyValue(manifestProperty, manifestData)\n );\n }\n );\n\n // Validate the resulting packageName string, after interpolating the manifest property\n // specified in the template string.\n const parsed = path.parse(packageName);\n if (parsed.dir) {\n throw new UsageError(\n `Invalid filename template \"${filenameTemplate}\". ` +\n `Filename \"${packageName}\" should not contain a path`\n );\n }\n if (!['.zip', '.xpi'].includes(parsed.ext)) {\n throw new UsageError(\n `Invalid filename template \"${filenameTemplate}\". ` +\n `Filename \"${packageName}\" should have a zip or xpi extension`\n );\n }\n\n return packageName;\n}\n\nexport type PackageCreatorFn = (\n params: PackageCreatorParams\n) => Promise<ExtensionBuildResult>;\n\nexport async function defaultPackageCreator(\n {\n manifestData,\n sourceDir,\n fileFilter,\n artifactsDir,\n overwriteDest,\n showReadyMessage,\n filename = DEFAULT_FILENAME_TEMPLATE,\n }: PackageCreatorParams,\n { fromEvent = defaultFromEvent }: PackageCreatorOptions = {}\n): Promise<ExtensionBuildResult> {\n let id;\n if (manifestData) {\n id = getManifestId(manifestData);\n log.debug(`Using manifest id=${id || '[not specified]'}`);\n } else {\n manifestData = await getValidatedManifest(sourceDir);\n }\n\n const buffer = await zipDir(sourceDir, {\n filter: (...args) => fileFilter.wantFile(...args),\n });\n\n let filenameTemplate = filename;\n\n let { default_locale } = manifestData;\n if (default_locale) {\n default_locale = default_locale.replace(/-/g, '_');\n const messageFile = path.join(\n sourceDir,\n '_locales',\n default_locale,\n 'messages.json'\n );\n log.debug('Manifest declared default_locale, localizing extension name');\n const extensionName = await getDefaultLocalizedName({\n messageFile,\n manifestData,\n });\n // allow for a localized `{name}`, without mutating `manifestData`\n filenameTemplate = filenameTemplate.replace(/{name}/g, extensionName);\n }\n\n const packageName = safeFileName(\n getPackageNameFromTemplate(filenameTemplate, manifestData)\n );\n const extensionPath = path.join(artifactsDir, packageName);\n\n // Added 'wx' flags to avoid overwriting of existing package.\n const stream = createWriteStream(extensionPath, { flags: 'wx' });\n\n stream.write(buffer, () => {\n stream.end();\n });\n\n try {\n await fromEvent(stream, 'close');\n } catch (error) {\n if (!isErrorWithCode('EEXIST', error)) {\n throw error;\n }\n if (!overwriteDest) {\n throw new UsageError(\n `Extension exists at the destination path: ${extensionPath}\\n` +\n 'Use --overwrite-dest to enable overwriting.'\n );\n }\n log.info(`Destination exists, overwriting: ${extensionPath}`);\n const overwriteStream = createWriteStream(extensionPath);\n overwriteStream.write(buffer, () => {\n overwriteStream.end();\n });\n await fromEvent(overwriteStream, 'close');\n }\n\n if (showReadyMessage) {\n log.info(`Your web extension is ready: ${extensionPath}`);\n }\n return { extensionPath };\n}\n\n// Build command types and implementation.\n\nexport type BuildCmdParams = {|\n sourceDir: string,\n artifactsDir: string,\n asNeeded?: boolean,\n overwriteDest?: boolean,\n ignoreFiles?: Array<string>,\n filename?: string,\n|};\n\nexport type BuildCmdOptions = {\n manifestData?: ExtensionManifest,\n fileFilter?: FileFilter,\n onSourceChange?: OnSourceChangeFn,\n packageCreator?: PackageCreatorFn,\n showReadyMessage?: boolean,\n createFileFilter?: FileFilterCreatorFn,\n shouldExitProgram?: boolean,\n};\n\nexport default async function build(\n {\n sourceDir,\n artifactsDir,\n asNeeded = false,\n overwriteDest = false,\n ignoreFiles = [],\n filename = DEFAULT_FILENAME_TEMPLATE,\n }: BuildCmdParams,\n {\n manifestData,\n createFileFilter = defaultFileFilterCreator,\n fileFilter = createFileFilter({\n sourceDir,\n artifactsDir,\n ignoreFiles,\n }),\n onSourceChange = defaultSourceWatcher,\n packageCreator = defaultPackageCreator,\n showReadyMessage = true,\n }: BuildCmdOptions = {}\n): Promise<ExtensionBuildResult> {\n const rebuildAsNeeded = asNeeded; // alias for `build --as-needed`\n log.info(`Building web extension from ${sourceDir}`);\n\n const createPackage = () =>\n packageCreator({\n manifestData,\n sourceDir,\n fileFilter,\n artifactsDir,\n overwriteDest,\n showReadyMessage,\n filename,\n });\n\n await prepareArtifactsDir(artifactsDir);\n const result = await createPackage();\n\n if (rebuildAsNeeded) {\n log.info('Rebuilding when files change...');\n onSourceChange({\n sourceDir,\n artifactsDir,\n onChange: () => {\n return createPackage().catch((error) => {\n log.error(error.stack);\n throw error;\n });\n },\n shouldWatchFile: (...args) => fileFilter.wantFile(...args),\n });\n }\n\n return result;\n}\n"],"mappings":"AACA,OAAOA,IAAI,MAAM,MAAM;AACvB,SAASC,iBAAiB,QAAQ,IAAI;AAEtC,SAASC,EAAE,QAAQ,IAAI;AACvB,OAAOC,SAAS,MAAM,YAAY;AAClC,OAAOC,QAAQ,MAAM,WAAW;AAChC,OAAOC,gBAAgB,MAAM,2BAA2B;AACxD,OAAOC,MAAM,MAAM,SAAS;AAE5B,OAAOC,oBAAoB,MAAM,eAAe;AAChD,OAAOC,oBAAoB,IAAIC,aAAa,QAAQ,qBAAqB;AACzE,SAASC,mBAAmB,QAAQ,sBAAsB;AAC1D,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,UAAU,EAAEC,eAAe,QAAQ,cAAc;AAC1D,SACEC,gBAAgB,IAAIC,wBAAwB,EAC5CC,UAAU,QACL,wBAAwB;AAC/B;;AAKA,MAAMC,GAAG,GAAGN,YAAY,CAACO,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC;AACzC,MAAMC,yBAAyB,GAAG,sBAAsB;AAExD,OAAO,SAASC,YAAYA,CAACC,IAAY,EAAU;EACjD,OAAOA,IAAI,CAACC,WAAW,CAAC,CAAC,CAACC,OAAO,CAAC,eAAe,EAAE,GAAG,CAAC;AACzD;;AAEA;;AAyBA;AACA;;AAQA,OAAO,eAAeC,uBAAuBA,CAAC;EAC5CC,WAAW;EACXC;AACmB,CAAC,EAAmB;EACvC,IAAIC,WAAiC;EACrC,IAAIC,eAAgC;EACpC,IAAIC,aAAqB,GAAGH,YAAY,CAACL,IAAI;EAE7C,IAAI;IACFO,eAAe,GAAG,MAAM5B,EAAE,CAAC8B,QAAQ,CAACL,WAAW,EAAE;MAAEM,QAAQ,EAAE;IAAQ,CAAC,CAAC;EACzE,CAAC,CAAC,OAAOC,KAAK,EAAE;IACd,MAAM,IAAItB,UAAU,CACjB,uCAAsCe,WAAY,KAAIO,KAAM,EAC/D,CAAC;EACH;EAEAJ,eAAe,GAAG1B,QAAQ,CAAC0B,eAAe,CAAC;EAE3C,MAAM;IAAEK,OAAO,EAAEC;EAAkB,CAAC,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC;EAC1E,IAAI;IACFP,WAAW,GAAG1B,SAAS,CAACiC,iBAAiB,CAACN,eAAe,CAAC,CAAC;EAC7D,CAAC,CAAC,OAAOI,KAAK,EAAE;IACd,MAAM,IAAItB,UAAU,CACjB,uCAAsCe,WAAY,KAAIO,KAAM,EAC/D,CAAC;EACH;EAEAH,aAAa,GAAGH,YAAY,CAACL,IAAI,CAACE,OAAO,CACvC,4BAA4B,EAC5B,CAACY,KAAK,EAAEC,WAAW,KAAK;IACtB,IAAI,EAAET,WAAW,CAACS,WAAW,CAAC,IAAIT,WAAW,CAACS,WAAW,CAAC,CAACC,OAAO,CAAC,EAAE;MACnE,MAAML,KAAK,GAAG,IAAItB,UAAU,CACzB,mBAAkBe,WAAY,GAAE,GAAI,mBAAkBW,WAAY,EACrE,CAAC;MACD,MAAMJ,KAAK;IACb,CAAC,MAAM;MACL,OAAOL,WAAW,CAACS,WAAW,CAAC,CAACC,OAAO;IACzC;EACF,CACF,CAAC;EACD,OAAOC,OAAO,CAACC,OAAO,CAACV,aAAa,CAAC;AACvC;;AAEA;AACA,OAAO,SAASW,sBAAsBA,CAACC,IAAY,EAAEC,GAAW,EAAU;EACxE,MAAMC,UAAU,GAAGF,IAAI,CAACG,KAAK,CAAC,GAAG,CAAC;EAClC,MAAMC,KAAK,GAAGF,UAAU,CAACG,MAAM,CAAC,CAACC,IAAI,EAAEC,IAAI,KAAKD,IAAI,IAAIA,IAAI,CAACC,IAAI,CAAC,EAAEN,GAAG,CAAC;EACxE,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAACO,QAAQ,CAAC,OAAOJ,KAAK,CAAC,EAAE;IAChD,MAAM,IAAInC,UAAU,CACjB,iBAAgB+B,IAAK,wCAAuCI,KAAM,EACrE,CAAC;EACH;EACA,MAAMK,WAAW,GAAI,GAAEL,KAAM,EAAC;EAC9B,IAAI,CAACK,WAAW,CAACC,MAAM,EAAE;IACvB,MAAM,IAAIzC,UAAU,CAAE,iBAAgB+B,IAAK,4BAA2B,CAAC;EACzE;EACA,OAAOS,WAAW;AACpB;AAEA,SAASE,0BAA0BA,CACjCC,gBAAwB,EACxB3B,YAA+B,EACvB;EACR,MAAM4B,WAAW,GAAGD,gBAAgB,CAAC9B,OAAO,CAC1C,sBAAsB,EACtB,CAACY,KAAK,EAAEoB,gBAAgB,KAAK;IAC3B,OAAOnC,YAAY,CACjBoB,sBAAsB,CAACe,gBAAgB,EAAE7B,YAAY,CACvD,CAAC;EACH,CACF,CAAC;;EAED;EACA;EACA,MAAM8B,MAAM,GAAG1D,IAAI,CAAC2D,KAAK,CAACH,WAAW,CAAC;EACtC,IAAIE,MAAM,CAACE,GAAG,EAAE;IACd,MAAM,IAAIhD,UAAU,CACjB,8BAA6B2C,gBAAiB,KAAI,GAChD,aAAYC,WAAY,6BAC7B,CAAC;EACH;EACA,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAACL,QAAQ,CAACO,MAAM,CAACG,GAAG,CAAC,EAAE;IAC1C,MAAM,IAAIjD,UAAU,CACjB,8BAA6B2C,gBAAiB,KAAI,GAChD,aAAYC,WAAY,sCAC7B,CAAC;EACH;EAEA,OAAOA,WAAW;AACpB;AAMA,OAAO,eAAeM,qBAAqBA,CACzC;EACElC,YAAY;EACZmC,SAAS;EACTC,UAAU;EACVC,YAAY;EACZC,aAAa;EACbC,gBAAgB;EAChBC,QAAQ,GAAG/C;AACS,CAAC,EACvB;EAAEgD,SAAS,GAAGhE;AAAwC,CAAC,GAAG,CAAC,CAAC,EAC7B;EAC/B,IAAIiE,EAAE;EACN,IAAI1C,YAAY,EAAE;IAChB0C,EAAE,GAAG7D,aAAa,CAACmB,YAAY,CAAC;IAChCX,GAAG,CAACsD,KAAK,CAAE,qBAAoBD,EAAE,IAAI,iBAAkB,EAAC,CAAC;EAC3D,CAAC,MAAM;IACL1C,YAAY,GAAG,MAAMpB,oBAAoB,CAACuD,SAAS,CAAC;EACtD;EAEA,MAAMS,MAAM,GAAG,MAAMlE,MAAM,CAACyD,SAAS,EAAE;IACrCU,MAAM,EAAEA,CAAC,GAAGC,IAAI,KAAKV,UAAU,CAACW,QAAQ,CAAC,GAAGD,IAAI;EAClD,CAAC,CAAC;EAEF,IAAInB,gBAAgB,GAAGa,QAAQ;EAE/B,IAAI;IAAEQ;EAAe,CAAC,GAAGhD,YAAY;EACrC,IAAIgD,cAAc,EAAE;IAClBA,cAAc,GAAGA,cAAc,CAACnD,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;IAClD,MAAME,WAAW,GAAG3B,IAAI,CAAC6E,IAAI,CAC3Bd,SAAS,EACT,UAAU,EACVa,cAAc,EACd,eACF,CAAC;IACD3D,GAAG,CAACsD,KAAK,CAAC,6DAA6D,CAAC;IACxE,MAAMxC,aAAa,GAAG,MAAML,uBAAuB,CAAC;MAClDC,WAAW;MACXC;IACF,CAAC,CAAC;IACF;IACA2B,gBAAgB,GAAGA,gBAAgB,CAAC9B,OAAO,CAAC,SAAS,EAAEM,aAAa,CAAC;EACvE;EAEA,MAAMyB,WAAW,GAAGlC,YAAY,CAC9BgC,0BAA0B,CAACC,gBAAgB,EAAE3B,YAAY,CAC3D,CAAC;EACD,MAAMkD,aAAa,GAAG9E,IAAI,CAAC6E,IAAI,CAACZ,YAAY,EAAET,WAAW,CAAC;;EAE1D;EACA,MAAMuB,MAAM,GAAG9E,iBAAiB,CAAC6E,aAAa,EAAE;IAAEE,KAAK,EAAE;EAAK,CAAC,CAAC;EAEhED,MAAM,CAACE,KAAK,CAACT,MAAM,EAAE,MAAM;IACzBO,MAAM,CAACG,GAAG,CAAC,CAAC;EACd,CAAC,CAAC;EAEF,IAAI;IACF,MAAMb,SAAS,CAACU,MAAM,EAAE,OAAO,CAAC;EAClC,CAAC,CAAC,OAAO7C,KAAK,EAAE;IACd,IAAI,CAACrB,eAAe,CAAC,QAAQ,EAAEqB,KAAK,CAAC,EAAE;MACrC,MAAMA,KAAK;IACb;IACA,IAAI,CAACgC,aAAa,EAAE;MAClB,MAAM,IAAItD,UAAU,CACjB,6CAA4CkE,aAAc,IAAG,GAC5D,6CACJ,CAAC;IACH;IACA7D,GAAG,CAACkE,IAAI,CAAE,oCAAmCL,aAAc,EAAC,CAAC;IAC7D,MAAMM,eAAe,GAAGnF,iBAAiB,CAAC6E,aAAa,CAAC;IACxDM,eAAe,CAACH,KAAK,CAACT,MAAM,EAAE,MAAM;MAClCY,eAAe,CAACF,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC;IACF,MAAMb,SAAS,CAACe,eAAe,EAAE,OAAO,CAAC;EAC3C;EAEA,IAAIjB,gBAAgB,EAAE;IACpBlD,GAAG,CAACkE,IAAI,CAAE,gCAA+BL,aAAc,EAAC,CAAC;EAC3D;EACA,OAAO;IAAEA;EAAc,CAAC;AAC1B;;AAEA;;AAqBA,eAAe,eAAeO,KAAKA,CACjC;EACEtB,SAAS;EACTE,YAAY;EACZqB,QAAQ,GAAG,KAAK;EAChBpB,aAAa,GAAG,KAAK;EACrBqB,WAAW,GAAG,EAAE;EAChBnB,QAAQ,GAAG/C;AACG,CAAC,EACjB;EACEO,YAAY;EACZd,gBAAgB,GAAGC,wBAAwB;EAC3CiD,UAAU,GAAGlD,gBAAgB,CAAC;IAC5BiD,SAAS;IACTE,YAAY;IACZsB;EACF,CAAC,CAAC;EACFC,cAAc,GAAGjF,oBAAoB;EACrCkF,cAAc,GAAG3B,qBAAqB;EACtCK,gBAAgB,GAAG;AACJ,CAAC,GAAG,CAAC,CAAC,EACQ;EAC/B,MAAMuB,eAAe,GAAGJ,QAAQ,CAAC,CAAC;EAClCrE,GAAG,CAACkE,IAAI,CAAE,+BAA8BpB,SAAU,EAAC,CAAC;EAEpD,MAAM4B,aAAa,GAAGA,CAAA,KACpBF,cAAc,CAAC;IACb7D,YAAY;IACZmC,SAAS;IACTC,UAAU;IACVC,YAAY;IACZC,aAAa;IACbC,gBAAgB;IAChBC;EACF,CAAC,CAAC;EAEJ,MAAM1D,mBAAmB,CAACuD,YAAY,CAAC;EACvC,MAAM2B,MAAM,GAAG,MAAMD,aAAa,CAAC,CAAC;EAEpC,IAAID,eAAe,EAAE;IACnBzE,GAAG,CAACkE,IAAI,CAAC,iCAAiC,CAAC;IAC3CK,cAAc,CAAC;MACbzB,SAAS;MACTE,YAAY;MACZ4B,QAAQ,EAAEA,CAAA,KAAM;QACd,OAAOF,aAAa,CAAC,CAAC,CAACG,KAAK,CAAE5D,KAAK,IAAK;UACtCjB,GAAG,CAACiB,KAAK,CAACA,KAAK,CAAC6D,KAAK,CAAC;UACtB,MAAM7D,KAAK;QACb,CAAC,CAAC;MACJ,CAAC;MACD8D,eAAe,EAAEA,CAAC,GAAGtB,IAAI,KAAKV,UAAU,CAACW,QAAQ,CAAC,GAAGD,IAAI;IAC3D,CAAC,CAAC;EACJ;EAEA,OAAOkB,MAAM;AACf"}
1
+ {"version":3,"file":"build.js","names":["path","createWriteStream","fs","parseJSON","stripBom","defaultFromEvent","zipDir","defaultSourceWatcher","getValidatedManifest","getManifestId","prepareArtifactsDir","createLogger","UsageError","isErrorWithCode","createFileFilter","defaultFileFilterCreator","log","import","meta","url","DEFAULT_FILENAME_TEMPLATE","safeFileName","name","toLowerCase","replace","getDefaultLocalizedName","messageFile","manifestData","messageData","messageContents","extensionName","readFile","encoding","error","default","stripJsonComments","match","messageName","message","Promise","resolve","getStringPropertyValue","prop","obj","properties","split","value","reduce","prev","curr","includes","stringValue","length","getPackageNameFromTemplate","filenameTemplate","packageName","manifestProperty","parsed","parse","dir","ext","defaultPackageCreator","sourceDir","fileFilter","artifactsDir","overwriteDest","showReadyMessage","filename","fromEvent","id","debug","buffer","filter","args","wantFile","default_locale","join","extensionPath","stream","flags","write","end","info","overwriteStream","build","asNeeded","ignoreFiles","onSourceChange","packageCreator","rebuildAsNeeded","createPackage","result","onChange","catch","stack","shouldWatchFile"],"sources":["../../src/cmd/build.js"],"sourcesContent":["import path from 'path';\nimport { createWriteStream } from 'fs';\n\nimport { fs } from 'mz';\nimport parseJSON from 'parse-json';\nimport stripBom from 'strip-bom';\nimport defaultFromEvent from 'promise-toolbox/fromEvent';\nimport zipDir from 'zip-dir';\n\nimport defaultSourceWatcher from '../watcher.js';\nimport getValidatedManifest, { getManifestId } from '../util/manifest.js';\nimport { prepareArtifactsDir } from '../util/artifacts.js';\nimport { createLogger } from '../util/logger.js';\nimport { UsageError, isErrorWithCode } from '../errors.js';\nimport { createFileFilter as defaultFileFilterCreator } from '../util/file-filter.js';\n\nconst log = createLogger(import.meta.url);\nconst DEFAULT_FILENAME_TEMPLATE = '{name}-{version}.zip';\n\nexport function safeFileName(name) {\n return name.toLowerCase().replace(/[^a-z0-9.-]+/g, '_');\n}\n\n// defaultPackageCreator types and implementation.\n\n// This defines the _locales/messages.json type. See:\n// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Internationalization#Providing_localized_strings_in__locales\n\nexport async function getDefaultLocalizedName({ messageFile, manifestData }) {\n let messageData;\n let messageContents;\n let extensionName = manifestData.name;\n\n try {\n messageContents = await fs.readFile(messageFile, { encoding: 'utf-8' });\n } catch (error) {\n throw new UsageError(\n `Error reading messages.json file at ${messageFile}: ${error}`,\n );\n }\n\n messageContents = stripBom(messageContents);\n\n const { default: stripJsonComments } = await import('strip-json-comments');\n try {\n messageData = parseJSON(stripJsonComments(messageContents));\n } catch (error) {\n throw new UsageError(\n `Error parsing messages.json file at ${messageFile}: ${error}`,\n );\n }\n\n extensionName = manifestData.name.replace(\n /__MSG_([A-Za-z0-9@_]+?)__/g,\n (match, messageName) => {\n if (!(messageData[messageName] && messageData[messageName].message)) {\n const error = new UsageError(\n `The locale file ${messageFile} ` + `is missing key: ${messageName}`,\n );\n throw error;\n } else {\n return messageData[messageName].message;\n }\n },\n );\n return Promise.resolve(extensionName);\n}\n\n// https://stackoverflow.com/a/22129960\nexport function getStringPropertyValue(prop, obj) {\n const properties = prop.split('.');\n const value = properties.reduce((prev, curr) => prev && prev[curr], obj);\n if (!['string', 'number'].includes(typeof value)) {\n throw new UsageError(\n `Manifest key \"${prop}\" is missing or has an invalid type: ${value}`,\n );\n }\n const stringValue = `${value}`;\n if (!stringValue.length) {\n throw new UsageError(`Manifest key \"${prop}\" value is an empty string`);\n }\n return stringValue;\n}\n\nfunction getPackageNameFromTemplate(filenameTemplate, manifestData) {\n const packageName = filenameTemplate.replace(\n /{([A-Za-z0-9._]+?)}/g,\n (match, manifestProperty) => {\n return safeFileName(\n getStringPropertyValue(manifestProperty, manifestData),\n );\n },\n );\n\n // Validate the resulting packageName string, after interpolating the manifest property\n // specified in the template string.\n const parsed = path.parse(packageName);\n if (parsed.dir) {\n throw new UsageError(\n `Invalid filename template \"${filenameTemplate}\". ` +\n `Filename \"${packageName}\" should not contain a path`,\n );\n }\n if (!['.zip', '.xpi'].includes(parsed.ext)) {\n throw new UsageError(\n `Invalid filename template \"${filenameTemplate}\". ` +\n `Filename \"${packageName}\" should have a zip or xpi extension`,\n );\n }\n\n return packageName;\n}\n\nexport async function defaultPackageCreator(\n {\n manifestData,\n sourceDir,\n fileFilter,\n artifactsDir,\n overwriteDest,\n showReadyMessage,\n filename = DEFAULT_FILENAME_TEMPLATE,\n },\n { fromEvent = defaultFromEvent } = {},\n) {\n let id;\n if (manifestData) {\n id = getManifestId(manifestData);\n log.debug(`Using manifest id=${id || '[not specified]'}`);\n } else {\n manifestData = await getValidatedManifest(sourceDir);\n }\n\n const buffer = await zipDir(sourceDir, {\n filter: (...args) => fileFilter.wantFile(...args),\n });\n\n let filenameTemplate = filename;\n\n let { default_locale } = manifestData;\n if (default_locale) {\n default_locale = default_locale.replace(/-/g, '_');\n const messageFile = path.join(\n sourceDir,\n '_locales',\n default_locale,\n 'messages.json',\n );\n log.debug('Manifest declared default_locale, localizing extension name');\n const extensionName = await getDefaultLocalizedName({\n messageFile,\n manifestData,\n });\n // allow for a localized `{name}`, without mutating `manifestData`\n filenameTemplate = filenameTemplate.replace(/{name}/g, extensionName);\n }\n\n const packageName = safeFileName(\n getPackageNameFromTemplate(filenameTemplate, manifestData),\n );\n const extensionPath = path.join(artifactsDir, packageName);\n\n // Added 'wx' flags to avoid overwriting of existing package.\n const stream = createWriteStream(extensionPath, { flags: 'wx' });\n\n stream.write(buffer, () => {\n stream.end();\n });\n\n try {\n await fromEvent(stream, 'close');\n } catch (error) {\n if (!isErrorWithCode('EEXIST', error)) {\n throw error;\n }\n if (!overwriteDest) {\n throw new UsageError(\n `Extension exists at the destination path: ${extensionPath}\\n` +\n 'Use --overwrite-dest to enable overwriting.',\n );\n }\n log.info(`Destination exists, overwriting: ${extensionPath}`);\n const overwriteStream = createWriteStream(extensionPath);\n overwriteStream.write(buffer, () => {\n overwriteStream.end();\n });\n await fromEvent(overwriteStream, 'close');\n }\n\n if (showReadyMessage) {\n log.info(`Your web extension is ready: ${extensionPath}`);\n }\n return { extensionPath };\n}\n\n// Build command types and implementation.\n\nexport default async function build(\n {\n sourceDir,\n artifactsDir,\n asNeeded = false,\n overwriteDest = false,\n ignoreFiles = [],\n filename = DEFAULT_FILENAME_TEMPLATE,\n },\n {\n manifestData,\n createFileFilter = defaultFileFilterCreator,\n fileFilter = createFileFilter({\n sourceDir,\n artifactsDir,\n ignoreFiles,\n }),\n onSourceChange = defaultSourceWatcher,\n packageCreator = defaultPackageCreator,\n showReadyMessage = true,\n } = {},\n) {\n const rebuildAsNeeded = asNeeded; // alias for `build --as-needed`\n log.info(`Building web extension from ${sourceDir}`);\n\n const createPackage = () =>\n packageCreator({\n manifestData,\n sourceDir,\n fileFilter,\n artifactsDir,\n overwriteDest,\n showReadyMessage,\n filename,\n });\n\n await prepareArtifactsDir(artifactsDir);\n const result = await createPackage();\n\n if (rebuildAsNeeded) {\n log.info('Rebuilding when files change...');\n onSourceChange({\n sourceDir,\n artifactsDir,\n onChange: () => {\n return createPackage().catch((error) => {\n log.error(error.stack);\n throw error;\n });\n },\n shouldWatchFile: (...args) => fileFilter.wantFile(...args),\n });\n }\n\n return result;\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/cmd/docs.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import open from 'open';
2
2
  import { createLogger } from '../util/logger.js';
3
3
  const log = createLogger(import.meta.url);
4
+
4
5
  // eslint-disable-next-line max-len
5
6
  export const url = 'https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/';
6
7
  export default async function docs(params, {
@@ -1 +1 @@
1
- {"version":3,"file":"docs.js","names":["open","createLogger","log","import","meta","url","docs","params","openUrl","error","debug"],"sources":["../../src/cmd/docs.js"],"sourcesContent":["/* @flow */\nimport open from 'open';\n\nimport { createLogger } from '../util/logger.js';\n\nconst log = createLogger(import.meta.url);\n\nexport type DocsParams = {\n noInput?: boolean,\n shouldExitProgram?: boolean,\n};\n\nexport type DocsOptions = {\n openUrl?: typeof open,\n};\n\n// eslint-disable-next-line max-len\nexport const url =\n 'https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/';\n\nexport default async function docs(\n params: DocsParams,\n { openUrl = open }: DocsOptions = {}\n): Promise<void> {\n try {\n await openUrl(url);\n } catch (error) {\n log.debug(`Encountered an error while opening URL ${url}`, error);\n throw error;\n }\n}\n"],"mappings":"AACA,OAAOA,IAAI,MAAM,MAAM;AAEvB,SAASC,YAAY,QAAQ,mBAAmB;AAEhD,MAAMC,GAAG,GAAGD,YAAY,CAACE,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC;AAWzC;AACA,OAAO,MAAMA,GAAG,GACd,mFAAmF;AAErF,eAAe,eAAeC,IAAIA,CAChCC,MAAkB,EAClB;EAAEC,OAAO,GAAGR;AAAkB,CAAC,GAAG,CAAC,CAAC,EACrB;EACf,IAAI;IACF,MAAMQ,OAAO,CAACH,GAAG,CAAC;EACpB,CAAC,CAAC,OAAOI,KAAK,EAAE;IACdP,GAAG,CAACQ,KAAK,CAAE,0CAAyCL,GAAI,EAAC,EAAEI,KAAK,CAAC;IACjE,MAAMA,KAAK;EACb;AACF"}
1
+ {"version":3,"file":"docs.js","names":["open","createLogger","log","import","meta","url","docs","params","openUrl","error","debug"],"sources":["../../src/cmd/docs.js"],"sourcesContent":["import open from 'open';\n\nimport { createLogger } from '../util/logger.js';\n\nconst log = createLogger(import.meta.url);\n\n// eslint-disable-next-line max-len\nexport const url =\n 'https://extensionworkshop.com/documentation/develop/getting-started-with-web-ext/';\n\nexport default async function docs(params, { openUrl = open } = {}) {\n try {\n await openUrl(url);\n } catch (error) {\n log.debug(`Encountered an error while opening URL ${url}`, error);\n throw error;\n }\n}\n"],"mappings":"AAAA,OAAOA,IAAI,MAAM,MAAM;AAEvB,SAASC,YAAY,QAAQ,mBAAmB;AAEhD,MAAMC,GAAG,GAAGD,YAAY,CAACE,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC;;AAEzC;AACA,OAAO,MAAMA,GAAG,GACd,mFAAmF;AAErF,eAAe,eAAeC,IAAIA,CAACC,MAAM,EAAE;EAAEC,OAAO,GAAGR;AAAK,CAAC,GAAG,CAAC,CAAC,EAAE;EAClE,IAAI;IACF,MAAMQ,OAAO,CAACH,GAAG,CAAC;EACpB,CAAC,CAAC,OAAOI,KAAK,EAAE;IACdP,GAAG,CAACQ,KAAK,CAAC,0CAA0CL,GAAG,EAAE,EAAEI,KAAK,CAAC;IACjE,MAAMA,KAAK;EACb;AACF","ignoreList":[]}
@@ -0,0 +1,6 @@
1
+ import { createLogger } from '../util/logger.js';
2
+ const log = createLogger(import.meta.url);
3
+ export default async function config(configData) {
4
+ log.info(JSON.stringify(configData, null, 2));
5
+ }
6
+ //# sourceMappingURL=dump-config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dump-config.js","names":["createLogger","log","import","meta","url","config","configData","info","JSON","stringify"],"sources":["../../src/cmd/dump-config.js"],"sourcesContent":["import { createLogger } from '../util/logger.js';\n\nconst log = createLogger(import.meta.url);\n\nexport default async function config(configData) {\n log.info(JSON.stringify(configData, null, 2));\n}\n"],"mappings":"AAAA,SAASA,YAAY,QAAQ,mBAAmB;AAEhD,MAAMC,GAAG,GAAGD,YAAY,CAACE,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC;AAEzC,eAAe,eAAeC,MAAMA,CAACC,UAAU,EAAE;EAC/CL,GAAG,CAACM,IAAI,CAACC,IAAI,CAACC,SAAS,CAACH,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/C","ignoreList":[]}
package/lib/cmd/index.js CHANGED
@@ -2,12 +2,25 @@
2
2
  // reasons (faster start-up), the implementations are not statically imported
3
3
  // at the top of the file, but lazily loaded in the (exported) functions.
4
4
  // The latter would slow down start-up by several seconds, as seen in #1302 .
5
+
5
6
  async function build(params, options) {
6
7
  const {
7
8
  default: runCommand
8
9
  } = await import('./build.js');
9
10
  return runCommand(params, options);
10
11
  }
12
+ async function docs(params, options) {
13
+ const {
14
+ default: runCommand
15
+ } = await import('./docs.js');
16
+ return runCommand(params, options);
17
+ }
18
+ async function dumpConfig(params, options) {
19
+ const {
20
+ default: runCommand
21
+ } = await import('./dump-config.js');
22
+ return runCommand(params, options);
23
+ }
11
24
  async function lint(params, options) {
12
25
  const {
13
26
  default: runCommand
@@ -26,17 +39,12 @@ async function sign(params, options) {
26
39
  } = await import('./sign.js');
27
40
  return runCommand(params, options);
28
41
  }
29
- async function docs(params, options) {
30
- const {
31
- default: runCommand
32
- } = await import('./docs.js');
33
- return runCommand(params, options);
34
- }
35
42
  export default {
36
43
  build,
44
+ docs,
45
+ dumpConfig,
37
46
  lint,
38
47
  run,
39
- sign,
40
- docs
48
+ sign
41
49
  };
42
50
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["build","params","options","default","runCommand","lint","run","sign","docs"],"sources":["../../src/cmd/index.js"],"sourcesContent":["/* @flow */\n\nimport type {\n BuildCmdParams,\n BuildCmdOptions,\n ExtensionBuildResult,\n} from './build.js';\nimport type { LintCmdParams, LintCmdOptions } from './lint.js';\nimport type { CmdRunParams, CmdRunOptions } from './run.js';\nimport type { MultiExtensionRunner } from '../extension-runners/index.js';\nimport type { SignParams, SignOptions, SignResult } from './sign.js';\nimport type { DocsParams, DocsOptions } from './docs.js';\n\n// This module exports entry points for all supported commands. For performance\n// reasons (faster start-up), the implementations are not statically imported\n// at the top of the file, but lazily loaded in the (exported) functions.\n// The latter would slow down start-up by several seconds, as seen in #1302 .\n\nasync function build(\n params: BuildCmdParams,\n options: BuildCmdOptions\n): Promise<ExtensionBuildResult> {\n const { default: runCommand } = await import('./build.js');\n return runCommand(params, options);\n}\n\nasync function lint(\n params: LintCmdParams,\n options: LintCmdOptions\n): Promise<void> {\n const { default: runCommand } = await import('./lint.js');\n return runCommand(params, options);\n}\n\nasync function run(\n params: CmdRunParams,\n options: CmdRunOptions\n): Promise<MultiExtensionRunner> {\n const { default: runCommand } = await import('./run.js');\n return runCommand(params, options);\n}\n\nasync function sign(\n params: SignParams,\n options: SignOptions\n): Promise<SignResult> {\n const { default: runCommand } = await import('./sign.js');\n return runCommand(params, options);\n}\n\nasync function docs(params: DocsParams, options: DocsOptions): Promise<void> {\n const { default: runCommand } = await import('./docs.js');\n return runCommand(params, options);\n}\n\nexport default { build, lint, run, sign, docs };\n"],"mappings":"AAaA;AACA;AACA;AACA;AAEA,eAAeA,KAAKA,CAClBC,MAAsB,EACtBC,OAAwB,EACO;EAC/B,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;EAC1D,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeG,IAAIA,CACjBJ,MAAqB,EACrBC,OAAuB,EACR;EACf,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;EACzD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeI,GAAGA,CAChBL,MAAoB,EACpBC,OAAsB,EACS;EAC/B,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;EACxD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeK,IAAIA,CACjBN,MAAkB,EAClBC,OAAoB,EACC;EACrB,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;EACzD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeM,IAAIA,CAACP,MAAkB,EAAEC,OAAoB,EAAiB;EAC3E,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;EACzD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAe;EAAEF,KAAK;EAAEK,IAAI;EAAEC,GAAG;EAAEC,IAAI;EAAEC;AAAK,CAAC"}
1
+ {"version":3,"file":"index.js","names":["build","params","options","default","runCommand","docs","dumpConfig","lint","run","sign"],"sources":["../../src/cmd/index.js"],"sourcesContent":["// This module exports entry points for all supported commands. For performance\n// reasons (faster start-up), the implementations are not statically imported\n// at the top of the file, but lazily loaded in the (exported) functions.\n// The latter would slow down start-up by several seconds, as seen in #1302 .\n\nasync function build(params, options) {\n const { default: runCommand } = await import('./build.js');\n return runCommand(params, options);\n}\n\nasync function docs(params, options) {\n const { default: runCommand } = await import('./docs.js');\n return runCommand(params, options);\n}\n\nasync function dumpConfig(params, options) {\n const { default: runCommand } = await import('./dump-config.js');\n return runCommand(params, options);\n}\n\nasync function lint(params, options) {\n const { default: runCommand } = await import('./lint.js');\n return runCommand(params, options);\n}\n\nasync function run(params, options) {\n const { default: runCommand } = await import('./run.js');\n return runCommand(params, options);\n}\n\nasync function sign(params, options) {\n const { default: runCommand } = await import('./sign.js');\n return runCommand(params, options);\n}\n\nexport default { build, docs, dumpConfig, lint, run, sign };\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAEA,eAAeA,KAAKA,CAACC,MAAM,EAAEC,OAAO,EAAE;EACpC,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC;EAC1D,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeG,IAAIA,CAACJ,MAAM,EAAEC,OAAO,EAAE;EACnC,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;EACzD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeI,UAAUA,CAACL,MAAM,EAAEC,OAAO,EAAE;EACzC,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC;EAChE,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeK,IAAIA,CAACN,MAAM,EAAEC,OAAO,EAAE;EACnC,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;EACzD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeM,GAAGA,CAACP,MAAM,EAAEC,OAAO,EAAE;EAClC,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC;EACxD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAeO,IAAIA,CAACR,MAAM,EAAEC,OAAO,EAAE;EACnC,MAAM;IAAEC,OAAO,EAAEC;EAAW,CAAC,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC;EACzD,OAAOA,UAAU,CAACH,MAAM,EAAEC,OAAO,CAAC;AACpC;AAEA,eAAe;EAAEF,KAAK;EAAEK,IAAI;EAAEC,UAAU;EAAEC,IAAI;EAAEC,GAAG;EAAEC;AAAK,CAAC","ignoreList":[]}
package/lib/cmd/lint.js CHANGED
@@ -1,18 +1,13 @@
1
1
  import { createInstance as defaultLinterCreator } from 'addons-linter';
2
2
  import { createLogger } from '../util/logger.js';
3
3
  import { createFileFilter as defaultFileFilterCreator } from '../util/file-filter.js';
4
- // import flow types
5
-
6
4
  const log = createLogger(import.meta.url);
7
5
 
8
- // Define the needed 'addons-linter' module flow types.
9
-
10
6
  // Lint command types and implementation.
11
7
 
12
8
  export default function lint({
13
9
  artifactsDir,
14
10
  boring,
15
- firefoxPreview = [],
16
11
  ignoreFiles,
17
12
  metadata,
18
13
  output,
@@ -49,9 +44,6 @@ export default function lint({
49
44
  // the directory to the extension.
50
45
  _: [sourceDir]
51
46
  };
52
- if (firefoxPreview.includes('mv3')) {
53
- log.warn(['Manifest Version 3 is now officially supported and', '"--firefox-preview=mv3" is no longer needed.', 'In addition, the "mv3" value will be removed in the future.'].join(' '));
54
- }
55
47
  log.debug(`Running addons-linter on ${sourceDir}`);
56
48
  const linter = createLinter({
57
49
  config,
@@ -1 +1 @@
1
- {"version":3,"file":"lint.js","names":["createInstance","defaultLinterCreator","createLogger","createFileFilter","defaultFileFilterCreator","log","import","meta","url","lint","artifactsDir","boring","firefoxPreview","ignoreFiles","metadata","output","pretty","privileged","sourceDir","selfHosted","verbose","warningsAsErrors","createLinter","shouldExitProgram","fileFilter","config","logLevel","stack","Boolean","shouldScanFile","fileName","wantFile","minManifestVersion","maxManifestVersion","_","includes","warn","join","debug","linter","runAsBinary","run"],"sources":["../../src/cmd/lint.js"],"sourcesContent":["/* @flow */\nimport { createInstance as defaultLinterCreator } from 'addons-linter';\n\nimport { createLogger } from '../util/logger.js';\nimport { createFileFilter as defaultFileFilterCreator } from '../util/file-filter.js';\n// import flow types\nimport type { FileFilterCreatorFn } from '../util/file-filter.js';\n\nconst log = createLogger(import.meta.url);\n\n// Define the needed 'addons-linter' module flow types.\n\nexport type LinterOutputType = 'text' | 'json';\n\nexport type LinterCreatorParams = {|\n config: {|\n logLevel: 'debug' | 'fatal',\n stack: boolean,\n pretty?: boolean,\n warningsAsErrors?: boolean,\n metadata?: boolean,\n minManifestVersion?: number,\n maxManifestVersion?: number,\n output?: LinterOutputType,\n privileged?: boolean,\n boring?: boolean,\n selfHosted?: boolean,\n shouldScanFile: (fileName: string) => boolean,\n _: Array<string>,\n |},\n runAsBinary: boolean,\n|};\n\nexport type Linter = {|\n run: () => Promise<void>,\n|};\n\nexport type LinterCreatorFn = (params: LinterCreatorParams) => Linter;\n\n// Lint command types and implementation.\n\nexport type LintCmdParams = {|\n artifactsDir?: string,\n boring?: boolean,\n firefoxPreview: Array<string>,\n ignoreFiles?: Array<string>,\n metadata?: boolean,\n output?: LinterOutputType,\n pretty?: boolean,\n privileged?: boolean,\n selfHosted?: boolean,\n sourceDir: string,\n verbose?: boolean,\n warningsAsErrors?: boolean,\n|};\n\nexport type LintCmdOptions = {\n createLinter?: LinterCreatorFn,\n createFileFilter?: FileFilterCreatorFn,\n shouldExitProgram?: boolean,\n};\n\nexport default function lint(\n {\n artifactsDir,\n boring,\n firefoxPreview = [],\n ignoreFiles,\n metadata,\n output,\n pretty,\n privileged,\n sourceDir,\n selfHosted,\n verbose,\n warningsAsErrors,\n }: LintCmdParams,\n {\n createLinter = defaultLinterCreator,\n createFileFilter = defaultFileFilterCreator,\n shouldExitProgram = true,\n }: LintCmdOptions = {}\n): Promise<void> {\n const fileFilter = createFileFilter({ sourceDir, ignoreFiles, artifactsDir });\n\n const config = {\n logLevel: verbose ? 'debug' : 'fatal',\n stack: Boolean(verbose),\n pretty,\n privileged,\n warningsAsErrors,\n metadata,\n output,\n boring,\n selfHosted,\n shouldScanFile: (fileName) => fileFilter.wantFile(fileName),\n minManifestVersion: 2,\n maxManifestVersion: 3,\n // This mimics the first command line argument from yargs, which should be\n // the directory to the extension.\n _: [sourceDir],\n };\n\n if (firefoxPreview.includes('mv3')) {\n log.warn(\n [\n 'Manifest Version 3 is now officially supported and',\n '\"--firefox-preview=mv3\" is no longer needed.',\n 'In addition, the \"mv3\" value will be removed in the future.',\n ].join(' ')\n );\n }\n\n log.debug(`Running addons-linter on ${sourceDir}`);\n const linter = createLinter({ config, runAsBinary: shouldExitProgram });\n return linter.run();\n}\n"],"mappings":"AACA,SAASA,cAAc,IAAIC,oBAAoB,QAAQ,eAAe;AAEtE,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,gBAAgB,IAAIC,wBAAwB,QAAQ,wBAAwB;AACrF;;AAGA,MAAMC,GAAG,GAAGH,YAAY,CAACI,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC;;AAEzC;;AA6BA;;AAuBA,eAAe,SAASC,IAAIA,CAC1B;EACEC,YAAY;EACZC,MAAM;EACNC,cAAc,GAAG,EAAE;EACnBC,WAAW;EACXC,QAAQ;EACRC,MAAM;EACNC,MAAM;EACNC,UAAU;EACVC,SAAS;EACTC,UAAU;EACVC,OAAO;EACPC;AACa,CAAC,EAChB;EACEC,YAAY,GAAGrB,oBAAoB;EACnCE,gBAAgB,GAAGC,wBAAwB;EAC3CmB,iBAAiB,GAAG;AACN,CAAC,GAAG,CAAC,CAAC,EACP;EACf,MAAMC,UAAU,GAAGrB,gBAAgB,CAAC;IAAEe,SAAS;IAAEL,WAAW;IAAEH;EAAa,CAAC,CAAC;EAE7E,MAAMe,MAAM,GAAG;IACbC,QAAQ,EAAEN,OAAO,GAAG,OAAO,GAAG,OAAO;IACrCO,KAAK,EAAEC,OAAO,CAACR,OAAO,CAAC;IACvBJ,MAAM;IACNC,UAAU;IACVI,gBAAgB;IAChBP,QAAQ;IACRC,MAAM;IACNJ,MAAM;IACNQ,UAAU;IACVU,cAAc,EAAGC,QAAQ,IAAKN,UAAU,CAACO,QAAQ,CAACD,QAAQ,CAAC;IAC3DE,kBAAkB,EAAE,CAAC;IACrBC,kBAAkB,EAAE,CAAC;IACrB;IACA;IACAC,CAAC,EAAE,CAAChB,SAAS;EACf,CAAC;EAED,IAAIN,cAAc,CAACuB,QAAQ,CAAC,KAAK,CAAC,EAAE;IAClC9B,GAAG,CAAC+B,IAAI,CACN,CACE,oDAAoD,EACpD,8CAA8C,EAC9C,6DAA6D,CAC9D,CAACC,IAAI,CAAC,GAAG,CACZ,CAAC;EACH;EAEAhC,GAAG,CAACiC,KAAK,CAAE,4BAA2BpB,SAAU,EAAC,CAAC;EAClD,MAAMqB,MAAM,GAAGjB,YAAY,CAAC;IAAEG,MAAM;IAAEe,WAAW,EAAEjB;EAAkB,CAAC,CAAC;EACvE,OAAOgB,MAAM,CAACE,GAAG,CAAC,CAAC;AACrB"}
1
+ {"version":3,"file":"lint.js","names":["createInstance","defaultLinterCreator","createLogger","createFileFilter","defaultFileFilterCreator","log","import","meta","url","lint","artifactsDir","boring","ignoreFiles","metadata","output","pretty","privileged","sourceDir","selfHosted","verbose","warningsAsErrors","createLinter","shouldExitProgram","fileFilter","config","logLevel","stack","Boolean","shouldScanFile","fileName","wantFile","minManifestVersion","maxManifestVersion","_","debug","linter","runAsBinary","run"],"sources":["../../src/cmd/lint.js"],"sourcesContent":["import { createInstance as defaultLinterCreator } from 'addons-linter';\n\nimport { createLogger } from '../util/logger.js';\nimport { createFileFilter as defaultFileFilterCreator } from '../util/file-filter.js';\n\nconst log = createLogger(import.meta.url);\n\n// Lint command types and implementation.\n\nexport default function lint(\n {\n artifactsDir,\n boring,\n ignoreFiles,\n metadata,\n output,\n pretty,\n privileged,\n sourceDir,\n selfHosted,\n verbose,\n warningsAsErrors,\n },\n {\n createLinter = defaultLinterCreator,\n createFileFilter = defaultFileFilterCreator,\n shouldExitProgram = true,\n } = {},\n) {\n const fileFilter = createFileFilter({ sourceDir, ignoreFiles, artifactsDir });\n\n const config = {\n logLevel: verbose ? 'debug' : 'fatal',\n stack: Boolean(verbose),\n pretty,\n privileged,\n warningsAsErrors,\n metadata,\n output,\n boring,\n selfHosted,\n shouldScanFile: (fileName) => fileFilter.wantFile(fileName),\n minManifestVersion: 2,\n maxManifestVersion: 3,\n // This mimics the first command line argument from yargs, which should be\n // the directory to the extension.\n _: [sourceDir],\n };\n\n log.debug(`Running addons-linter on ${sourceDir}`);\n const linter = createLinter({ config, runAsBinary: shouldExitProgram });\n return linter.run();\n}\n"],"mappings":"AAAA,SAASA,cAAc,IAAIC,oBAAoB,QAAQ,eAAe;AAEtE,SAASC,YAAY,QAAQ,mBAAmB;AAChD,SAASC,gBAAgB,IAAIC,wBAAwB,QAAQ,wBAAwB;AAErF,MAAMC,GAAG,GAAGH,YAAY,CAACI,MAAM,CAACC,IAAI,CAACC,GAAG,CAAC;;AAEzC;;AAEA,eAAe,SAASC,IAAIA,CAC1B;EACEC,YAAY;EACZC,MAAM;EACNC,WAAW;EACXC,QAAQ;EACRC,MAAM;EACNC,MAAM;EACNC,UAAU;EACVC,SAAS;EACTC,UAAU;EACVC,OAAO;EACPC;AACF,CAAC,EACD;EACEC,YAAY,GAAGpB,oBAAoB;EACnCE,gBAAgB,GAAGC,wBAAwB;EAC3CkB,iBAAiB,GAAG;AACtB,CAAC,GAAG,CAAC,CAAC,EACN;EACA,MAAMC,UAAU,GAAGpB,gBAAgB,CAAC;IAAEc,SAAS;IAAEL,WAAW;IAAEF;EAAa,CAAC,CAAC;EAE7E,MAAMc,MAAM,GAAG;IACbC,QAAQ,EAAEN,OAAO,GAAG,OAAO,GAAG,OAAO;IACrCO,KAAK,EAAEC,OAAO,CAACR,OAAO,CAAC;IACvBJ,MAAM;IACNC,UAAU;IACVI,gBAAgB;IAChBP,QAAQ;IACRC,MAAM;IACNH,MAAM;IACNO,UAAU;IACVU,cAAc,EAAGC,QAAQ,IAAKN,UAAU,CAACO,QAAQ,CAACD,QAAQ,CAAC;IAC3DE,kBAAkB,EAAE,CAAC;IACrBC,kBAAkB,EAAE,CAAC;IACrB;IACA;IACAC,CAAC,EAAE,CAAChB,SAAS;EACf,CAAC;EAEDZ,GAAG,CAAC6B,KAAK,CAAC,4BAA4BjB,SAAS,EAAE,CAAC;EAClD,MAAMkB,MAAM,GAAGd,YAAY,CAAC;IAAEG,MAAM;IAAEY,WAAW,EAAEd;EAAkB,CAAC,CAAC;EACvE,OAAOa,MAAM,CAACE,GAAG,CAAC,CAAC;AACrB","ignoreList":[]}
package/lib/cmd/run.js CHANGED
@@ -7,8 +7,6 @@ import { createLogger } from '../util/logger.js';
7
7
  import defaultGetValidatedManifest from '../util/manifest.js';
8
8
  import { UsageError } from '../errors.js';
9
9
  import { createExtensionRunner, defaultReloadStrategy, MultiExtensionRunner as DefaultMultiExtensionRunner } from '../extension-runners/index.js';
10
- // Import objects that are only used as Flow types.
11
-
12
10
  const log = createLogger(import.meta.url);
13
11
 
14
12
  // Run command types and implementation.
@@ -32,7 +30,6 @@ export default async function run({
32
30
  startUrl,
33
31
  target,
34
32
  args,
35
- firefoxPreview = [],
36
33
  // Android CLI options.
37
34
  adbBin,
38
35
  adbHost,
@@ -68,10 +65,6 @@ export default async function run({
68
65
  const customPrefs = {
69
66
  ...pref
70
67
  };
71
- if (firefoxPreview.includes('mv3')) {
72
- log.info('Configuring Firefox preferences for Manifest V3');
73
- customPrefs['extensions.manifestV3.enabled'] = true;
74
- }
75
68
  const manifestData = await getValidatedManifest(sourceDir);
76
69
  const profileDir = firefoxProfile || chromiumProfile;
77
70
  if (profileCreateIfMissing) {
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","names":["fs","defaultBuildExtension","showDesktopNotification","defaultDesktopNotifications","defaultFirefoxApp","connectWithMaxRetries","defaultFirefoxClient","createLogger","defaultGetValidatedManifest","UsageError","createExtensionRunner","defaultReloadStrategy","MultiExtensionRunner","DefaultMultiExtensionRunner","log","import","meta","url","run","artifactsDir","browserConsole","devtools","pref","firefox","firefoxProfile","profileCreateIfMissing","keepProfileChanges","ignoreFiles","noInput","noReload","preInstall","sourceDir","watchFile","watchIgnored","startUrl","target","args","firefoxPreview","adbBin","adbHost","adbPort","adbDevice","adbDiscoveryTimeout","adbRemoveOldArtifacts","firefoxApk","firefoxApkComponent","chromiumBinary","chromiumProfile","buildExtension","desktopNotifications","firefoxApp","firefoxClient","reloadStrategy","getValidatedManifest","info","Array","isArray","every","el","customPrefs","includes","manifestData","profileDir","isDir","existsSync","mkdir","runners","commonRunnerParams","extensions","length","firefoxDesktopRunnerParams","firefoxBinary","profilePath","firefoxDesktopRunner","params","push","firefoxAndroidRunnerParams","buildSourceDir","extensionSourceDir","tmpArtifactsDir","asNeeded","showReadyMessage","firefoxAndroidRunner","chromiumRunnerParams","chromiumRunner","extensionRunner"],"sources":["../../src/cmd/run.js"],"sourcesContent":["/* @flow */\nimport { fs } from 'mz';\n\nimport defaultBuildExtension from './build.js';\nimport { showDesktopNotification as defaultDesktopNotifications } from '../util/desktop-notifier.js';\nimport * as defaultFirefoxApp from '../firefox/index.js';\nimport { connectWithMaxRetries as defaultFirefoxClient } from '../firefox/remote.js';\nimport { createLogger } from '../util/logger.js';\nimport defaultGetValidatedManifest from '../util/manifest.js';\nimport { UsageError } from '../errors.js';\nimport {\n createExtensionRunner,\n defaultReloadStrategy,\n MultiExtensionRunner as DefaultMultiExtensionRunner,\n} from '../extension-runners/index.js';\n// Import objects that are only used as Flow types.\nimport type { FirefoxPreferences } from '../firefox/preferences.js';\n\nconst log = createLogger(import.meta.url);\n\n// Run command types and implementation.\n\nexport type CmdRunParams = {|\n artifactsDir: string,\n browserConsole: boolean,\n devtools: boolean,\n pref?: FirefoxPreferences,\n firefox: string,\n firefoxProfile?: string,\n profileCreateIfMissing?: boolean,\n ignoreFiles?: Array<string>,\n keepProfileChanges: boolean,\n noInput?: boolean,\n noReload: boolean,\n preInstall: boolean,\n sourceDir: string,\n watchFile?: Array<string>,\n watchIgnored?: Array<string>,\n startUrl?: Array<string>,\n target?: Array<string>,\n args?: Array<string>,\n firefoxPreview: Array<string>,\n\n // Android CLI options.\n adbBin?: string,\n adbHost?: string,\n adbPort?: string,\n adbDevice?: string,\n adbDiscoveryTimeout?: number,\n adbRemoveOldArtifacts?: boolean,\n firefoxApk?: string,\n firefoxApkComponent?: string,\n\n // Chromium Desktop CLI options.\n chromiumBinary?: string,\n chromiumProfile?: string,\n|};\n\nexport type CmdRunOptions = {\n buildExtension: typeof defaultBuildExtension,\n desktopNotifications: typeof defaultDesktopNotifications,\n firefoxApp: typeof defaultFirefoxApp,\n firefoxClient: typeof defaultFirefoxClient,\n reloadStrategy: typeof defaultReloadStrategy,\n shouldExitProgram?: boolean,\n MultiExtensionRunner?: typeof DefaultMultiExtensionRunner,\n getValidatedManifest?: typeof defaultGetValidatedManifest,\n};\n\nexport default async function run(\n {\n artifactsDir,\n browserConsole = false,\n devtools = false,\n pref,\n firefox,\n firefoxProfile,\n profileCreateIfMissing,\n keepProfileChanges = false,\n ignoreFiles,\n noInput = false,\n noReload = false,\n preInstall = false,\n sourceDir,\n watchFile,\n watchIgnored,\n startUrl,\n target,\n args,\n firefoxPreview = [],\n // Android CLI options.\n adbBin,\n adbHost,\n adbPort,\n adbDevice,\n adbDiscoveryTimeout,\n adbRemoveOldArtifacts,\n firefoxApk,\n firefoxApkComponent,\n // Chromium CLI options.\n chromiumBinary,\n chromiumProfile,\n }: CmdRunParams,\n {\n buildExtension = defaultBuildExtension,\n desktopNotifications = defaultDesktopNotifications,\n firefoxApp = defaultFirefoxApp,\n firefoxClient = defaultFirefoxClient,\n reloadStrategy = defaultReloadStrategy,\n MultiExtensionRunner = DefaultMultiExtensionRunner,\n getValidatedManifest = defaultGetValidatedManifest,\n }: CmdRunOptions = {}\n): Promise<DefaultMultiExtensionRunner> {\n log.info(`Running web extension from ${sourceDir}`);\n if (preInstall) {\n log.info(\n \"Disabled auto-reloading because it's not possible with \" +\n '--pre-install'\n );\n noReload = true;\n }\n\n if (\n watchFile != null &&\n (!Array.isArray(watchFile) ||\n !watchFile.every((el) => typeof el === 'string'))\n ) {\n throw new UsageError('Unexpected watchFile type');\n }\n\n // Create an alias for --pref since it has been transformed into an\n // object containing one or more preferences.\n const customPrefs: FirefoxPreferences = { ...pref };\n if (firefoxPreview.includes('mv3')) {\n log.info('Configuring Firefox preferences for Manifest V3');\n customPrefs['extensions.manifestV3.enabled'] = true;\n }\n\n const manifestData = await getValidatedManifest(sourceDir);\n\n const profileDir = firefoxProfile || chromiumProfile;\n\n if (profileCreateIfMissing) {\n if (!profileDir) {\n throw new UsageError(\n '--profile-create-if-missing requires ' +\n '--firefox-profile or --chromium-profile'\n );\n }\n const isDir = fs.existsSync(profileDir);\n if (isDir) {\n log.info(`Profile directory ${profileDir} already exists`);\n } else {\n log.info(`Profile directory not found. Creating directory ${profileDir}`);\n await fs.mkdir(profileDir);\n }\n }\n\n const runners = [];\n\n const commonRunnerParams = {\n // Common options.\n extensions: [{ sourceDir, manifestData }],\n keepProfileChanges,\n startUrl,\n args,\n desktopNotifications,\n };\n\n if (!target || target.length === 0 || target.includes('firefox-desktop')) {\n const firefoxDesktopRunnerParams = {\n ...commonRunnerParams,\n\n // Firefox specific CLI options.\n firefoxBinary: firefox,\n profilePath: firefoxProfile,\n customPrefs,\n browserConsole,\n devtools,\n preInstall,\n\n // Firefox runner injected dependencies.\n firefoxApp,\n firefoxClient,\n };\n\n const firefoxDesktopRunner = await createExtensionRunner({\n target: 'firefox-desktop',\n params: firefoxDesktopRunnerParams,\n });\n runners.push(firefoxDesktopRunner);\n }\n\n if (target && target.includes('firefox-android')) {\n const firefoxAndroidRunnerParams = {\n ...commonRunnerParams,\n\n // Firefox specific CLI options.\n profilePath: firefoxProfile,\n customPrefs,\n browserConsole,\n preInstall,\n firefoxApk,\n firefoxApkComponent,\n adbDevice,\n adbHost,\n adbPort,\n adbBin,\n adbDiscoveryTimeout,\n adbRemoveOldArtifacts,\n\n // Injected dependencies.\n firefoxApp,\n firefoxClient,\n desktopNotifications: defaultDesktopNotifications,\n buildSourceDir: (extensionSourceDir: string, tmpArtifactsDir: string) => {\n return buildExtension(\n {\n sourceDir: extensionSourceDir,\n ignoreFiles,\n asNeeded: false,\n // Use a separate temporary directory for building the extension zip file\n // that we are going to upload on the android device.\n artifactsDir: tmpArtifactsDir,\n },\n {\n // Suppress the message usually logged by web-ext build.\n showReadyMessage: false,\n }\n );\n },\n };\n\n const firefoxAndroidRunner = await createExtensionRunner({\n target: 'firefox-android',\n params: firefoxAndroidRunnerParams,\n });\n runners.push(firefoxAndroidRunner);\n }\n\n if (target && target.includes('chromium')) {\n const chromiumRunnerParams = {\n ...commonRunnerParams,\n chromiumBinary,\n chromiumProfile,\n };\n\n const chromiumRunner = await createExtensionRunner({\n target: 'chromium',\n params: chromiumRunnerParams,\n });\n runners.push(chromiumRunner);\n }\n\n const extensionRunner = new MultiExtensionRunner({\n desktopNotifications,\n runners,\n });\n\n await extensionRunner.run();\n\n if (noReload) {\n log.info('Automatic extension reloading has been disabled');\n } else {\n log.info('The extension will reload if any source file changes');\n\n reloadStrategy({\n extensionRunner,\n sourceDir,\n watchFile,\n watchIgnored,\n artifactsDir,\n ignoreFiles,\n noInput,\n });\n }\n\n return extensionRunner;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"run.js","names":["fs","defaultBuildExtension","showDesktopNotification","defaultDesktopNotifications","defaultFirefoxApp","connectWithMaxRetries","defaultFirefoxClient","createLogger","defaultGetValidatedManifest","UsageError","createExtensionRunner","defaultReloadStrategy","MultiExtensionRunner","DefaultMultiExtensionRunner","log","import","meta","url","run","artifactsDir","browserConsole","devtools","pref","firefox","firefoxProfile","profileCreateIfMissing","keepProfileChanges","ignoreFiles","noInput","noReload","preInstall","sourceDir","watchFile","watchIgnored","startUrl","target","args","adbBin","adbHost","adbPort","adbDevice","adbDiscoveryTimeout","adbRemoveOldArtifacts","firefoxApk","firefoxApkComponent","chromiumBinary","chromiumProfile","buildExtension","desktopNotifications","firefoxApp","firefoxClient","reloadStrategy","getValidatedManifest","info","Array","isArray","every","el","customPrefs","manifestData","profileDir","isDir","existsSync","mkdir","runners","commonRunnerParams","extensions","length","includes","firefoxDesktopRunnerParams","firefoxBinary","profilePath","firefoxDesktopRunner","params","push","firefoxAndroidRunnerParams","buildSourceDir","extensionSourceDir","tmpArtifactsDir","asNeeded","showReadyMessage","firefoxAndroidRunner","chromiumRunnerParams","chromiumRunner","extensionRunner"],"sources":["../../src/cmd/run.js"],"sourcesContent":["import { fs } from 'mz';\n\nimport defaultBuildExtension from './build.js';\nimport { showDesktopNotification as defaultDesktopNotifications } from '../util/desktop-notifier.js';\nimport * as defaultFirefoxApp from '../firefox/index.js';\nimport { connectWithMaxRetries as defaultFirefoxClient } from '../firefox/remote.js';\nimport { createLogger } from '../util/logger.js';\nimport defaultGetValidatedManifest from '../util/manifest.js';\nimport { UsageError } from '../errors.js';\nimport {\n createExtensionRunner,\n defaultReloadStrategy,\n MultiExtensionRunner as DefaultMultiExtensionRunner,\n} from '../extension-runners/index.js';\n\nconst log = createLogger(import.meta.url);\n\n// Run command types and implementation.\n\nexport default async function run(\n {\n artifactsDir,\n browserConsole = false,\n devtools = false,\n pref,\n firefox,\n firefoxProfile,\n profileCreateIfMissing,\n keepProfileChanges = false,\n ignoreFiles,\n noInput = false,\n noReload = false,\n preInstall = false,\n sourceDir,\n watchFile,\n watchIgnored,\n startUrl,\n target,\n args,\n // Android CLI options.\n adbBin,\n adbHost,\n adbPort,\n adbDevice,\n adbDiscoveryTimeout,\n adbRemoveOldArtifacts,\n firefoxApk,\n firefoxApkComponent,\n // Chromium CLI options.\n chromiumBinary,\n chromiumProfile,\n },\n {\n buildExtension = defaultBuildExtension,\n desktopNotifications = defaultDesktopNotifications,\n firefoxApp = defaultFirefoxApp,\n firefoxClient = defaultFirefoxClient,\n reloadStrategy = defaultReloadStrategy,\n MultiExtensionRunner = DefaultMultiExtensionRunner,\n getValidatedManifest = defaultGetValidatedManifest,\n } = {},\n) {\n log.info(`Running web extension from ${sourceDir}`);\n if (preInstall) {\n log.info(\n \"Disabled auto-reloading because it's not possible with \" +\n '--pre-install',\n );\n noReload = true;\n }\n\n if (\n watchFile != null &&\n (!Array.isArray(watchFile) ||\n !watchFile.every((el) => typeof el === 'string'))\n ) {\n throw new UsageError('Unexpected watchFile type');\n }\n\n // Create an alias for --pref since it has been transformed into an\n // object containing one or more preferences.\n const customPrefs = { ...pref };\n const manifestData = await getValidatedManifest(sourceDir);\n\n const profileDir = firefoxProfile || chromiumProfile;\n\n if (profileCreateIfMissing) {\n if (!profileDir) {\n throw new UsageError(\n '--profile-create-if-missing requires ' +\n '--firefox-profile or --chromium-profile',\n );\n }\n const isDir = fs.existsSync(profileDir);\n if (isDir) {\n log.info(`Profile directory ${profileDir} already exists`);\n } else {\n log.info(`Profile directory not found. Creating directory ${profileDir}`);\n await fs.mkdir(profileDir);\n }\n }\n\n const runners = [];\n\n const commonRunnerParams = {\n // Common options.\n extensions: [{ sourceDir, manifestData }],\n keepProfileChanges,\n startUrl,\n args,\n desktopNotifications,\n };\n\n if (!target || target.length === 0 || target.includes('firefox-desktop')) {\n const firefoxDesktopRunnerParams = {\n ...commonRunnerParams,\n\n // Firefox specific CLI options.\n firefoxBinary: firefox,\n profilePath: firefoxProfile,\n customPrefs,\n browserConsole,\n devtools,\n preInstall,\n\n // Firefox runner injected dependencies.\n firefoxApp,\n firefoxClient,\n };\n\n const firefoxDesktopRunner = await createExtensionRunner({\n target: 'firefox-desktop',\n params: firefoxDesktopRunnerParams,\n });\n runners.push(firefoxDesktopRunner);\n }\n\n if (target && target.includes('firefox-android')) {\n const firefoxAndroidRunnerParams = {\n ...commonRunnerParams,\n\n // Firefox specific CLI options.\n profilePath: firefoxProfile,\n customPrefs,\n browserConsole,\n preInstall,\n firefoxApk,\n firefoxApkComponent,\n adbDevice,\n adbHost,\n adbPort,\n adbBin,\n adbDiscoveryTimeout,\n adbRemoveOldArtifacts,\n\n // Injected dependencies.\n firefoxApp,\n firefoxClient,\n desktopNotifications: defaultDesktopNotifications,\n buildSourceDir: (extensionSourceDir, tmpArtifactsDir) => {\n return buildExtension(\n {\n sourceDir: extensionSourceDir,\n ignoreFiles,\n asNeeded: false,\n // Use a separate temporary directory for building the extension zip file\n // that we are going to upload on the android device.\n artifactsDir: tmpArtifactsDir,\n },\n {\n // Suppress the message usually logged by web-ext build.\n showReadyMessage: false,\n },\n );\n },\n };\n\n const firefoxAndroidRunner = await createExtensionRunner({\n target: 'firefox-android',\n params: firefoxAndroidRunnerParams,\n });\n runners.push(firefoxAndroidRunner);\n }\n\n if (target && target.includes('chromium')) {\n const chromiumRunnerParams = {\n ...commonRunnerParams,\n chromiumBinary,\n chromiumProfile,\n };\n\n const chromiumRunner = await createExtensionRunner({\n target: 'chromium',\n params: chromiumRunnerParams,\n });\n runners.push(chromiumRunner);\n }\n\n const extensionRunner = new MultiExtensionRunner({\n desktopNotifications,\n runners,\n });\n\n await extensionRunner.run();\n\n if (noReload) {\n log.info('Automatic extension reloading has been disabled');\n } else {\n log.info('The extension will reload if any source file changes');\n\n reloadStrategy({\n extensionRunner,\n sourceDir,\n watchFile,\n watchIgnored,\n artifactsDir,\n ignoreFiles,\n noInput,\n });\n }\n\n return extensionRunner;\n}\n"],"mappings":"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","ignoreList":[]}
package/lib/cmd/sign.js CHANGED
@@ -1,17 +1,14 @@
1
1
  import path from 'path';
2
- import { fs } from 'mz';
3
- import { signAddon as defaultAddonSigner } from 'sign-addon';
4
2
  import defaultBuilder from './build.js';
5
3
  import { isErrorWithCode, UsageError, WebExtError } from '../errors.js';
6
4
  import { prepareArtifactsDir } from '../util/artifacts.js';
7
5
  import { createLogger } from '../util/logger.js';
8
6
  import getValidatedManifest, { getManifestId } from '../util/manifest.js';
9
- import { signAddon as defaultSubmitAddonSigner, saveIdToFile } from '../util/submit-addon.js';
7
+ import { defaultAsyncFsReadFile, signAddon as defaultSubmitAddonSigner } from '../util/submit-addon.js';
10
8
  import { withTempDir } from '../util/temp-dir.js';
11
- import { isTTY } from '../util/stdin.js';
12
9
  const log = createLogger(import.meta.url);
13
- const defaultAsyncFsReadFile = fs.readFile.bind(fs);
14
10
  export const extensionIdFile = '.web-extension-id';
11
+ export const uploadUuidFile = '.amo-upload-uuid';
15
12
 
16
13
  // Sign command types and implementation.
17
14
 
@@ -20,32 +17,26 @@ export default function sign({
20
17
  apiKey,
21
18
  apiProxy,
22
19
  apiSecret,
23
- apiUrlPrefix,
24
- useSubmissionApi = false,
25
20
  artifactsDir,
26
- id,
27
21
  ignoreFiles = [],
28
22
  sourceDir,
29
23
  timeout,
30
- disableProgressBar = !isTTY(process.stdin),
31
- verbose,
24
+ approvalTimeout,
32
25
  channel,
33
26
  amoMetadata,
27
+ uploadSourceCode,
34
28
  webextVersion
35
29
  }, {
36
30
  build = defaultBuilder,
37
31
  preValidatedManifest,
38
- signAddon = defaultAddonSigner,
39
32
  submitAddon = defaultSubmitAddonSigner,
40
33
  asyncFsReadFile = defaultAsyncFsReadFile
41
34
  } = {}) {
42
- if (!useSubmissionApi) {
43
- log.warn('IMPORTANT: web-ext v8 will introduce a new AMO submission API for signing and you might need to take actions when upgrading from v7 to v8. You can test this upcoming change now by specifying `--use-submission-api` to the `sign` command. If you want to keep using the API you are using now (via "sign-addon"), you must stay on v7.');
44
- }
45
35
  return withTempDir(async function (tmpDir) {
46
36
  await prepareArtifactsDir(artifactsDir);
47
37
  let manifestData;
48
38
  const savedIdPath = path.join(sourceDir, extensionIdFile);
39
+ const savedUploadUuidPath = path.join(sourceDir, uploadUuidFile);
49
40
  if (preValidatedManifest) {
50
41
  manifestData = preValidatedManifest;
51
42
  } else {
@@ -59,35 +50,19 @@ export default function sign({
59
50
  manifestData,
60
51
  showReadyMessage: false
61
52
  }), getIdFromFile(savedIdPath)]);
62
- const manifestId = getManifestId(manifestData);
63
- if (useSubmissionApi && id && !manifestId) {
64
- throw new UsageError(`Cannot set custom ID ${id} - addon submission API requires a ` + 'custom ID be specified in the manifest');
65
- }
66
- if (useSubmissionApi && idFromSourceDir && !manifestId) {
67
- throw new UsageError('Cannot use previously auto-generated extension ID ' + `${idFromSourceDir} - addon submission API ` + 'requires a custom ID be specified in the manifest');
68
- }
69
- if (id && manifestId) {
70
- throw new UsageError(`Cannot set custom ID ${id} because manifest.json ` + `declares ID ${manifestId}`);
71
- }
72
- if (id) {
73
- log.debug(`Using custom ID declared as --id=${id}`);
74
- }
75
- if (manifestId) {
76
- id = manifestId;
77
- }
78
- if (!id && idFromSourceDir) {
79
- log.info(`Using previously auto-generated extension ID: ${idFromSourceDir}`);
80
- id = idFromSourceDir;
53
+ const id = getManifestId(manifestData);
54
+ if (idFromSourceDir && !id) {
55
+ throw new UsageError('Cannot use previously auto-generated extension ID ' + `${idFromSourceDir} - This extension ID must be specified in the manifest.json file.`);
81
56
  }
82
57
  if (!id) {
83
- log.warn('No extension ID specified (it will be auto-generated)');
84
- }
85
- if (useSubmissionApi && !channel) {
86
- throw new UsageError('channel is a required parameter for the addon submission API');
58
+ // We only auto-generate add-on IDs for MV2 add-ons on AMO.
59
+ if (manifestData.manifest_version !== 2) {
60
+ throw new UsageError('An extension ID must be specified in the manifest.json file.');
61
+ }
62
+ log.warn('No extension ID specified (it will be auto-generated the first time)');
87
63
  }
88
- if (useSubmissionApi && apiProxy) {
89
- // https://github.com/mozilla/web-ext/issues/2472
90
- throw new UsageError("apiProxy isn't yet supported for the addon submission API. " + 'See https://github.com/mozilla/web-ext/issues/2472');
64
+ if (!channel) {
65
+ throw new UsageError('You must specify a channel');
91
66
  }
92
67
  let metaDataJson;
93
68
  if (amoMetadata) {
@@ -102,60 +77,29 @@ export default function sign({
102
77
  const signSubmitArgs = {
103
78
  apiKey,
104
79
  apiSecret,
105
- timeout,
80
+ apiProxy,
106
81
  id,
107
82
  xpiPath: buildResult.extensionPath,
108
83
  downloadDir: artifactsDir,
109
84
  channel
110
85
  };
111
- let result;
112
86
  try {
113
- if (useSubmissionApi) {
114
- result = await submitAddon({
115
- ...signSubmitArgs,
116
- amoBaseUrl,
117
- // $FlowIgnore: we verify 'channel' is set above
118
- channel,
119
- savedIdPath,
120
- metaDataJson,
121
- userAgentString
122
- });
123
- } else {
124
- const {
125
- success,
126
- id: newId,
127
- downloadedFiles
128
- } = await signAddon({
129
- ...signSubmitArgs,
130
- apiUrlPrefix,
131
- apiProxy,
132
- disableProgressBar,
133
- verbose,
134
- version: manifestData.version,
135
- apiRequestConfig: {
136
- headers: {
137
- 'User-Agent': userAgentString
138
- }
139
- }
140
- });
141
- if (!success) {
142
- throw new Error('The extension could not be signed');
143
- }
144
- result = {
145
- id: newId,
146
- downloadedFiles
147
- };
148
- // All information about the downloaded files would have already been
149
- // logged by signAddon(). submitAddon() calls saveIdToFile itself.
150
- await saveIdToFile(savedIdPath, newId);
151
- log.info(`Extension ID: ${newId}`);
152
- log.info('SUCCESS');
153
- }
87
+ const result = await submitAddon({
88
+ ...signSubmitArgs,
89
+ amoBaseUrl,
90
+ channel,
91
+ savedIdPath,
92
+ savedUploadUuidPath,
93
+ metaDataJson,
94
+ userAgentString,
95
+ validationCheckTimeout: timeout,
96
+ approvalCheckTimeout: approvalTimeout !== undefined ? approvalTimeout : timeout,
97
+ submissionSource: uploadSourceCode
98
+ });
99
+ return result;
154
100
  } catch (clientError) {
155
- log.info('FAIL');
156
101
  throw new WebExtError(clientError.message);
157
102
  }
158
- return result;
159
103
  });
160
104
  }
161
105
  export async function getIdFromFile(filePath, asyncFsReadFile = defaultAsyncFsReadFile) {