web-ext 7.4.0 → 7.6.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.
- package/README.md +3 -2
- package/lib/cmd/build.js +0 -1
- package/lib/cmd/build.js.map +1 -1
- package/lib/cmd/docs.js +0 -1
- package/lib/cmd/docs.js.map +1 -1
- package/lib/cmd/index.js +0 -3
- package/lib/cmd/index.js.map +1 -1
- package/lib/cmd/lint.js +0 -1
- package/lib/cmd/lint.js.map +1 -1
- package/lib/cmd/run.js +0 -1
- package/lib/cmd/run.js.map +1 -1
- package/lib/cmd/sign.js +14 -4
- package/lib/cmd/sign.js.map +1 -1
- package/lib/config.js +0 -1
- package/lib/config.js.map +1 -1
- package/lib/errors.js +0 -1
- package/lib/errors.js.map +1 -1
- package/lib/extension-runners/base.js +0 -2
- package/lib/extension-runners/base.js.map +1 -1
- package/lib/extension-runners/chromium.js +0 -3
- package/lib/extension-runners/chromium.js.map +1 -1
- package/lib/extension-runners/firefox-android.js +0 -3
- package/lib/extension-runners/firefox-android.js.map +1 -1
- package/lib/extension-runners/firefox-desktop.js +0 -4
- package/lib/extension-runners/firefox-desktop.js.map +1 -1
- package/lib/extension-runners/index.js +0 -2
- package/lib/extension-runners/index.js.map +1 -1
- package/lib/firefox/index.js +0 -1
- package/lib/firefox/index.js.map +1 -1
- package/lib/firefox/package-identifiers.js +0 -2
- package/lib/firefox/package-identifiers.js.map +1 -1
- package/lib/firefox/preferences.js +0 -1
- package/lib/firefox/preferences.js.map +1 -1
- package/lib/firefox/rdp-client.js +0 -1
- package/lib/firefox/rdp-client.js.map +1 -1
- package/lib/firefox/remote.js +0 -1
- package/lib/firefox/remote.js.map +1 -1
- package/lib/main.js +0 -1
- package/lib/main.js.map +1 -1
- package/lib/program.js +13 -5
- package/lib/program.js.map +1 -1
- package/lib/util/adb.js +0 -1
- package/lib/util/adb.js.map +1 -1
- package/lib/util/artifacts.js +0 -1
- package/lib/util/artifacts.js.map +1 -1
- package/lib/util/desktop-notifier.js +0 -1
- package/lib/util/desktop-notifier.js.map +1 -1
- package/lib/util/file-exists.js +0 -1
- package/lib/util/file-exists.js.map +1 -1
- package/lib/util/file-filter.js +0 -1
- package/lib/util/file-filter.js.map +1 -1
- package/lib/util/is-directory.js +0 -1
- package/lib/util/is-directory.js.map +1 -1
- package/lib/util/logger.js +0 -1
- package/lib/util/logger.js.map +1 -1
- package/lib/util/manifest.js +0 -1
- package/lib/util/manifest.js.map +1 -1
- package/lib/util/promisify.js +0 -2
- package/lib/util/promisify.js.map +1 -1
- package/lib/util/stdin.js +0 -2
- package/lib/util/stdin.js.map +1 -1
- package/lib/util/submit-addon.js +12 -4
- package/lib/util/submit-addon.js.map +1 -1
- package/lib/util/temp-dir.js +0 -1
- package/lib/util/temp-dir.js.map +1 -1
- package/lib/util/updates.js +0 -1
- package/lib/util/updates.js.map +1 -1
- package/lib/watcher.js +0 -1
- package/lib/watcher.js.map +1 -1
- package/package.json +22 -22
package/README.md
CHANGED
|
@@ -217,8 +217,9 @@ which was released in April of 2016.
|
|
|
217
217
|
## Get Involved
|
|
218
218
|
|
|
219
219
|
Hi! This tool is under active development. To get involved you can watch the repo,
|
|
220
|
-
file issues, create pull requests, or
|
|
221
|
-
[
|
|
220
|
+
file issues, create pull requests, or
|
|
221
|
+
[contact us](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/Contact_us)
|
|
222
|
+
to ask a question.
|
|
222
223
|
Read the [contributing section](CONTRIBUTING.md) for how to develop new features.
|
|
223
224
|
|
|
224
225
|
## Some Questions and Answers
|
package/lib/cmd/build.js
CHANGED
package/lib/cmd/build.js.map
CHANGED
|
@@ -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":"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"}
|
|
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":"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"}
|
package/lib/cmd/docs.js
CHANGED
package/lib/cmd/docs.js.map
CHANGED
|
@@ -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":"
|
|
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"}
|
package/lib/cmd/index.js
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
1
|
// This module exports entry points for all supported commands. For performance
|
|
4
2
|
// reasons (faster start-up), the implementations are not statically imported
|
|
5
3
|
// at the top of the file, but lazily loaded in the (exported) functions.
|
|
6
4
|
// The latter would slow down start-up by several seconds, as seen in #1302 .
|
|
7
|
-
|
|
8
5
|
async function build(params, options) {
|
|
9
6
|
const {
|
|
10
7
|
default: runCommand
|
package/lib/cmd/index.js.map
CHANGED
|
@@ -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":"
|
|
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"}
|
package/lib/cmd/lint.js
CHANGED
package/lib/cmd/lint.js.map
CHANGED
|
@@ -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":"
|
|
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;;AAoDA,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,CAAC,CACZ;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,EAAE;AACrB"}
|
package/lib/cmd/run.js
CHANGED
package/lib/cmd/run.js.map
CHANGED
|
@@ -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","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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"}
|
package/lib/cmd/sign.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
import path from 'path';
|
|
3
2
|
import { fs } from 'mz';
|
|
4
3
|
import { signAddon as defaultAddonSigner } from 'sign-addon';
|
|
@@ -9,6 +8,7 @@ import { createLogger } from '../util/logger.js';
|
|
|
9
8
|
import getValidatedManifest, { getManifestId } from '../util/manifest.js';
|
|
10
9
|
import { signAddon as defaultSubmitAddonSigner, saveIdToFile } from '../util/submit-addon.js';
|
|
11
10
|
import { withTempDir } from '../util/temp-dir.js';
|
|
11
|
+
import { isTTY } from '../util/stdin.js';
|
|
12
12
|
const log = createLogger(import.meta.url);
|
|
13
13
|
const defaultAsyncFsReadFile = fs.readFile.bind(fs);
|
|
14
14
|
export const extensionIdFile = '.web-extension-id';
|
|
@@ -27,9 +27,11 @@ export default function sign({
|
|
|
27
27
|
ignoreFiles = [],
|
|
28
28
|
sourceDir,
|
|
29
29
|
timeout,
|
|
30
|
+
disableProgressBar = !isTTY(process.stdin),
|
|
30
31
|
verbose,
|
|
31
32
|
channel,
|
|
32
|
-
amoMetadata
|
|
33
|
+
amoMetadata,
|
|
34
|
+
webextVersion
|
|
33
35
|
}, {
|
|
34
36
|
build = defaultBuilder,
|
|
35
37
|
preValidatedManifest,
|
|
@@ -93,6 +95,7 @@ export default function sign({
|
|
|
93
95
|
throw new UsageError('Invalid JSON in listing metadata');
|
|
94
96
|
}
|
|
95
97
|
}
|
|
98
|
+
const userAgentString = `web-ext/${webextVersion}`;
|
|
96
99
|
const signSubmitArgs = {
|
|
97
100
|
apiKey,
|
|
98
101
|
apiSecret,
|
|
@@ -111,7 +114,8 @@ export default function sign({
|
|
|
111
114
|
// $FlowIgnore: we verify 'channel' is set above
|
|
112
115
|
channel,
|
|
113
116
|
savedIdPath,
|
|
114
|
-
metaDataJson
|
|
117
|
+
metaDataJson,
|
|
118
|
+
userAgentString
|
|
115
119
|
});
|
|
116
120
|
} else {
|
|
117
121
|
const {
|
|
@@ -122,8 +126,14 @@ export default function sign({
|
|
|
122
126
|
...signSubmitArgs,
|
|
123
127
|
apiUrlPrefix,
|
|
124
128
|
apiProxy,
|
|
129
|
+
disableProgressBar,
|
|
125
130
|
verbose,
|
|
126
|
-
version: manifestData.version
|
|
131
|
+
version: manifestData.version,
|
|
132
|
+
apiRequestConfig: {
|
|
133
|
+
headers: {
|
|
134
|
+
'User-Agent': userAgentString
|
|
135
|
+
}
|
|
136
|
+
}
|
|
127
137
|
});
|
|
128
138
|
if (!success) {
|
|
129
139
|
throw new Error('The extension could not be signed');
|
package/lib/cmd/sign.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sign.js","names":["path","fs","signAddon","defaultAddonSigner","defaultBuilder","isErrorWithCode","UsageError","WebExtError","prepareArtifactsDir","createLogger","getValidatedManifest","getManifestId","defaultSubmitAddonSigner","saveIdToFile","withTempDir","log","import","meta","url","defaultAsyncFsReadFile","readFile","bind","extensionIdFile","sign","amoBaseUrl","apiKey","apiProxy","apiSecret","apiUrlPrefix","useSubmissionApi","artifactsDir","id","ignoreFiles","sourceDir","timeout","verbose","channel","amoMetadata","build","preValidatedManifest","submitAddon","asyncFsReadFile","tmpDir","manifestData","savedIdPath","join","buildResult","idFromSourceDir","Promise","all","showReadyMessage","getIdFromFile","manifestId","debug","info","warn","metaDataJson","metadataFileBuffer","JSON","parse","toString","err","signSubmitArgs","xpiPath","extensionPath","downloadDir","result","success","newId","downloadedFiles","version","Error","clientError","message","filePath","content","error","lines","split","filter","line","trim","startsWith"],"sources":["../../src/cmd/sign.js"],"sourcesContent":["/* @flow */\nimport path from 'path';\n\nimport { fs } from 'mz';\nimport { signAddon as defaultAddonSigner } from 'sign-addon';\n\nimport defaultBuilder from './build.js';\nimport { isErrorWithCode, UsageError, WebExtError } from '../errors.js';\nimport { prepareArtifactsDir } from '../util/artifacts.js';\nimport { createLogger } from '../util/logger.js';\nimport getValidatedManifest, { getManifestId } from '../util/manifest.js';\nimport type { ExtensionManifest } from '../util/manifest.js';\nimport {\n signAddon as defaultSubmitAddonSigner,\n saveIdToFile,\n} from '../util/submit-addon.js';\nimport type { SignResult } from '../util/submit-addon.js';\nimport { withTempDir } from '../util/temp-dir.js';\n\nexport type { SignResult };\n\nconst log = createLogger(import.meta.url);\n\nconst defaultAsyncFsReadFile: (string) => Promise<Buffer> =\n fs.readFile.bind(fs);\n\nexport const extensionIdFile = '.web-extension-id';\n\n// Sign command types and implementation.\n\nexport type SignParams = {|\n amoBaseUrl: string,\n apiKey: string,\n apiProxy?: string,\n apiSecret: string,\n apiUrlPrefix: string,\n useSubmissionApi?: boolean,\n artifactsDir: string,\n id?: string,\n ignoreFiles?: Array<string>,\n sourceDir: string,\n timeout: number,\n verbose?: boolean,\n channel?: string,\n amoMetadata?: string,\n|};\n\nexport type SignOptions = {\n build?: typeof defaultBuilder,\n signAddon?: typeof defaultAddonSigner,\n submitAddon?: typeof defaultSubmitAddonSigner,\n preValidatedManifest?: ExtensionManifest,\n shouldExitProgram?: boolean,\n asyncFsReadFile?: typeof defaultAsyncFsReadFile,\n};\n\nexport default function sign(\n {\n amoBaseUrl,\n apiKey,\n apiProxy,\n apiSecret,\n apiUrlPrefix,\n useSubmissionApi = false,\n artifactsDir,\n id,\n ignoreFiles = [],\n sourceDir,\n timeout,\n verbose,\n channel,\n amoMetadata,\n }: SignParams,\n {\n build = defaultBuilder,\n preValidatedManifest,\n signAddon = defaultAddonSigner,\n submitAddon = defaultSubmitAddonSigner,\n asyncFsReadFile = defaultAsyncFsReadFile,\n }: SignOptions = {}\n): Promise<SignResult> {\n return withTempDir(async function (tmpDir) {\n await prepareArtifactsDir(artifactsDir);\n\n let manifestData;\n const savedIdPath = path.join(sourceDir, extensionIdFile);\n\n if (preValidatedManifest) {\n manifestData = preValidatedManifest;\n } else {\n manifestData = await getValidatedManifest(sourceDir);\n }\n\n const [buildResult, idFromSourceDir] = await Promise.all([\n build(\n { sourceDir, ignoreFiles, artifactsDir: tmpDir.path() },\n { manifestData, showReadyMessage: false }\n ),\n getIdFromFile(savedIdPath),\n ]);\n\n const manifestId = getManifestId(manifestData);\n\n if (useSubmissionApi && id && !manifestId) {\n throw new UsageError(\n `Cannot set custom ID ${id} - addon submission API requires a ` +\n 'custom ID be specified in the manifest'\n );\n }\n if (useSubmissionApi && idFromSourceDir && !manifestId) {\n throw new UsageError(\n 'Cannot use previously auto-generated extension ID ' +\n `${idFromSourceDir} - addon submission API ` +\n 'requires a custom ID be specified in the manifest'\n );\n }\n if (id && manifestId) {\n throw new UsageError(\n `Cannot set custom ID ${id} because manifest.json ` +\n `declares ID ${manifestId}`\n );\n }\n if (id) {\n log.debug(`Using custom ID declared as --id=${id}`);\n }\n\n if (manifestId) {\n id = manifestId;\n }\n\n if (!id && idFromSourceDir) {\n log.info(\n `Using previously auto-generated extension ID: ${idFromSourceDir}`\n );\n id = idFromSourceDir;\n }\n\n if (!id) {\n log.warn('No extension ID specified (it will be auto-generated)');\n }\n\n if (useSubmissionApi && !channel) {\n throw new UsageError(\n 'channel is a required parameter for the addon submission API'\n );\n }\n\n if (useSubmissionApi && apiProxy) {\n // https://github.com/mozilla/web-ext/issues/2472\n throw new UsageError(\n \"apiProxy isn't yet supported for the addon submission API. \" +\n 'See https://github.com/mozilla/web-ext/issues/2472'\n );\n }\n\n let metaDataJson;\n if (amoMetadata) {\n const metadataFileBuffer = await asyncFsReadFile(amoMetadata);\n try {\n metaDataJson = JSON.parse(metadataFileBuffer.toString());\n } catch (err) {\n throw new UsageError('Invalid JSON in listing metadata');\n }\n }\n\n const signSubmitArgs = {\n apiKey,\n apiSecret,\n timeout,\n id,\n xpiPath: buildResult.extensionPath,\n downloadDir: artifactsDir,\n channel,\n };\n\n let result;\n try {\n if (useSubmissionApi) {\n result = await submitAddon({\n ...signSubmitArgs,\n amoBaseUrl,\n // $FlowIgnore: we verify 'channel' is set above\n channel,\n savedIdPath,\n metaDataJson,\n });\n } else {\n const {\n success,\n id: newId,\n downloadedFiles,\n } = await signAddon({\n ...signSubmitArgs,\n apiUrlPrefix,\n apiProxy,\n verbose,\n version: manifestData.version,\n });\n if (!success) {\n throw new Error('The extension could not be signed');\n }\n result = { id: newId, downloadedFiles };\n // All information about the downloaded files would have already been\n // logged by signAddon(). submitAddon() calls saveIdToFile itself.\n await saveIdToFile(savedIdPath, newId);\n log.info(`Extension ID: ${newId}`);\n log.info('SUCCESS');\n }\n } catch (clientError) {\n log.info('FAIL');\n throw new WebExtError(clientError.message);\n }\n\n return result;\n });\n}\n\nexport async function getIdFromFile(\n filePath: string,\n asyncFsReadFile: typeof defaultAsyncFsReadFile = defaultAsyncFsReadFile\n): Promise<string | void> {\n let content;\n\n try {\n content = await asyncFsReadFile(filePath);\n } catch (error) {\n if (isErrorWithCode('ENOENT', error)) {\n log.debug(`No ID file found at: ${filePath}`);\n return;\n }\n throw error;\n }\n\n let lines = content.toString().split('\\n');\n lines = lines.filter((line) => {\n line = line.trim();\n if (line && !line.startsWith('#')) {\n return line;\n }\n });\n\n const id = lines[0];\n log.debug(`Found extension ID ${id} in ${filePath}`);\n\n if (!id) {\n throw new UsageError(`No ID found in extension ID file ${filePath}`);\n }\n\n return id;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sign.js","names":["path","fs","signAddon","defaultAddonSigner","defaultBuilder","isErrorWithCode","UsageError","WebExtError","prepareArtifactsDir","createLogger","getValidatedManifest","getManifestId","defaultSubmitAddonSigner","saveIdToFile","withTempDir","isTTY","log","import","meta","url","defaultAsyncFsReadFile","readFile","bind","extensionIdFile","sign","amoBaseUrl","apiKey","apiProxy","apiSecret","apiUrlPrefix","useSubmissionApi","artifactsDir","id","ignoreFiles","sourceDir","timeout","disableProgressBar","process","stdin","verbose","channel","amoMetadata","webextVersion","build","preValidatedManifest","submitAddon","asyncFsReadFile","tmpDir","manifestData","savedIdPath","join","buildResult","idFromSourceDir","Promise","all","showReadyMessage","getIdFromFile","manifestId","debug","info","warn","metaDataJson","metadataFileBuffer","JSON","parse","toString","err","userAgentString","signSubmitArgs","xpiPath","extensionPath","downloadDir","result","success","newId","downloadedFiles","version","apiRequestConfig","headers","Error","clientError","message","filePath","content","error","lines","split","filter","line","trim","startsWith"],"sources":["../../src/cmd/sign.js"],"sourcesContent":["/* @flow */\nimport path from 'path';\n\nimport { fs } from 'mz';\nimport { signAddon as defaultAddonSigner } from 'sign-addon';\n\nimport defaultBuilder from './build.js';\nimport { isErrorWithCode, UsageError, WebExtError } from '../errors.js';\nimport { prepareArtifactsDir } from '../util/artifacts.js';\nimport { createLogger } from '../util/logger.js';\nimport getValidatedManifest, { getManifestId } from '../util/manifest.js';\nimport type { ExtensionManifest } from '../util/manifest.js';\nimport {\n signAddon as defaultSubmitAddonSigner,\n saveIdToFile,\n} from '../util/submit-addon.js';\nimport type { SignResult } from '../util/submit-addon.js';\nimport { withTempDir } from '../util/temp-dir.js';\nimport { isTTY } from '../util/stdin.js';\n\nexport type { SignResult };\n\nconst log = createLogger(import.meta.url);\n\nconst defaultAsyncFsReadFile: (string) => Promise<Buffer> =\n fs.readFile.bind(fs);\n\nexport const extensionIdFile = '.web-extension-id';\n\n// Sign command types and implementation.\n\nexport type SignParams = {|\n amoBaseUrl: string,\n apiKey: string,\n apiProxy?: string,\n apiSecret: string,\n apiUrlPrefix: string,\n useSubmissionApi?: boolean,\n artifactsDir: string,\n id?: string,\n ignoreFiles?: Array<string>,\n sourceDir: string,\n timeout: number,\n disableProgressBar?: boolean,\n verbose?: boolean,\n channel?: string,\n amoMetadata?: string,\n webextVersion: string,\n|};\n\nexport type SignOptions = {\n build?: typeof defaultBuilder,\n signAddon?: typeof defaultAddonSigner,\n submitAddon?: typeof defaultSubmitAddonSigner,\n preValidatedManifest?: ExtensionManifest,\n shouldExitProgram?: boolean,\n asyncFsReadFile?: typeof defaultAsyncFsReadFile,\n};\n\nexport default function sign(\n {\n amoBaseUrl,\n apiKey,\n apiProxy,\n apiSecret,\n apiUrlPrefix,\n useSubmissionApi = false,\n artifactsDir,\n id,\n ignoreFiles = [],\n sourceDir,\n timeout,\n disableProgressBar = !isTTY(process.stdin),\n verbose,\n channel,\n amoMetadata,\n webextVersion,\n }: SignParams,\n {\n build = defaultBuilder,\n preValidatedManifest,\n signAddon = defaultAddonSigner,\n submitAddon = defaultSubmitAddonSigner,\n asyncFsReadFile = defaultAsyncFsReadFile,\n }: SignOptions = {}\n): Promise<SignResult> {\n return withTempDir(async function (tmpDir) {\n await prepareArtifactsDir(artifactsDir);\n\n let manifestData;\n const savedIdPath = path.join(sourceDir, extensionIdFile);\n\n if (preValidatedManifest) {\n manifestData = preValidatedManifest;\n } else {\n manifestData = await getValidatedManifest(sourceDir);\n }\n\n const [buildResult, idFromSourceDir] = await Promise.all([\n build(\n { sourceDir, ignoreFiles, artifactsDir: tmpDir.path() },\n { manifestData, showReadyMessage: false }\n ),\n getIdFromFile(savedIdPath),\n ]);\n\n const manifestId = getManifestId(manifestData);\n\n if (useSubmissionApi && id && !manifestId) {\n throw new UsageError(\n `Cannot set custom ID ${id} - addon submission API requires a ` +\n 'custom ID be specified in the manifest'\n );\n }\n if (useSubmissionApi && idFromSourceDir && !manifestId) {\n throw new UsageError(\n 'Cannot use previously auto-generated extension ID ' +\n `${idFromSourceDir} - addon submission API ` +\n 'requires a custom ID be specified in the manifest'\n );\n }\n if (id && manifestId) {\n throw new UsageError(\n `Cannot set custom ID ${id} because manifest.json ` +\n `declares ID ${manifestId}`\n );\n }\n if (id) {\n log.debug(`Using custom ID declared as --id=${id}`);\n }\n\n if (manifestId) {\n id = manifestId;\n }\n\n if (!id && idFromSourceDir) {\n log.info(\n `Using previously auto-generated extension ID: ${idFromSourceDir}`\n );\n id = idFromSourceDir;\n }\n\n if (!id) {\n log.warn('No extension ID specified (it will be auto-generated)');\n }\n\n if (useSubmissionApi && !channel) {\n throw new UsageError(\n 'channel is a required parameter for the addon submission API'\n );\n }\n\n if (useSubmissionApi && apiProxy) {\n // https://github.com/mozilla/web-ext/issues/2472\n throw new UsageError(\n \"apiProxy isn't yet supported for the addon submission API. \" +\n 'See https://github.com/mozilla/web-ext/issues/2472'\n );\n }\n\n let metaDataJson;\n if (amoMetadata) {\n const metadataFileBuffer = await asyncFsReadFile(amoMetadata);\n try {\n metaDataJson = JSON.parse(metadataFileBuffer.toString());\n } catch (err) {\n throw new UsageError('Invalid JSON in listing metadata');\n }\n }\n const userAgentString = `web-ext/${webextVersion}`;\n\n const signSubmitArgs = {\n apiKey,\n apiSecret,\n timeout,\n id,\n xpiPath: buildResult.extensionPath,\n downloadDir: artifactsDir,\n channel,\n };\n\n let result;\n try {\n if (useSubmissionApi) {\n result = await submitAddon({\n ...signSubmitArgs,\n amoBaseUrl,\n // $FlowIgnore: we verify 'channel' is set above\n channel,\n savedIdPath,\n metaDataJson,\n userAgentString,\n });\n } else {\n const {\n success,\n id: newId,\n downloadedFiles,\n } = await signAddon({\n ...signSubmitArgs,\n apiUrlPrefix,\n apiProxy,\n disableProgressBar,\n verbose,\n version: manifestData.version,\n apiRequestConfig: { headers: { 'User-Agent': userAgentString } },\n });\n if (!success) {\n throw new Error('The extension could not be signed');\n }\n result = { id: newId, downloadedFiles };\n // All information about the downloaded files would have already been\n // logged by signAddon(). submitAddon() calls saveIdToFile itself.\n await saveIdToFile(savedIdPath, newId);\n log.info(`Extension ID: ${newId}`);\n log.info('SUCCESS');\n }\n } catch (clientError) {\n log.info('FAIL');\n throw new WebExtError(clientError.message);\n }\n\n return result;\n });\n}\n\nexport async function getIdFromFile(\n filePath: string,\n asyncFsReadFile: typeof defaultAsyncFsReadFile = defaultAsyncFsReadFile\n): Promise<string | void> {\n let content;\n\n try {\n content = await asyncFsReadFile(filePath);\n } catch (error) {\n if (isErrorWithCode('ENOENT', error)) {\n log.debug(`No ID file found at: ${filePath}`);\n return;\n }\n throw error;\n }\n\n let lines = content.toString().split('\\n');\n lines = lines.filter((line) => {\n line = line.trim();\n if (line && !line.startsWith('#')) {\n return line;\n }\n });\n\n const id = lines[0];\n log.debug(`Found extension ID ${id} in ${filePath}`);\n\n if (!id) {\n throw new UsageError(`No ID found in extension ID file ${filePath}`);\n }\n\n return id;\n}\n"],"mappings":"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"}
|
package/lib/config.js
CHANGED
package/lib/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","names":["os","path","importFresh","camelCase","decamelize","fileExists","createLogger","UsageError","WebExtError","log","import","meta","url","applyConfigToArgv","argv","argvFromCLI","configObject","options","configFileName","newArgv","option","Object","keys","Array","isArray","decamelizedOptName","separator","type","undefined","expectedType","optionType","defaultValue","default","wasValueSetOnCLI","debug","coerce","loadJSConfigFile","filePath","resolvedFilePath","resolve","error","message","endsWith","webExt","length","discoverConfigFiles","getHomeDir","homedir","magicConfigName","possibleConfigs","join","process","cwd","configs","Promise","all","map","fileName","resolvedFileName","existingConfigs","forEach","f","push"],"sources":["../src/config.js"],"sourcesContent":["/* @flow */\nimport os from 'os';\nimport path from 'path';\n\nimport importFresh from 'import-fresh';\nimport camelCase from 'camelcase';\nimport decamelize from 'decamelize';\n\nimport fileExists from './util/file-exists.js';\nimport { createLogger } from './util/logger.js';\nimport { UsageError, WebExtError } from './errors.js';\n\nconst log = createLogger(import.meta.url);\n\ntype ApplyConfigToArgvParams = {|\n // This is the argv object which will get updated by each\n // config applied.\n argv: Object,\n // This is the argv that only has CLI values applied to it.\n argvFromCLI: Object,\n configObject: Object,\n options: Object,\n configFileName: string,\n|};\n\nexport function applyConfigToArgv({\n argv,\n argvFromCLI,\n configObject,\n options,\n configFileName,\n}: ApplyConfigToArgvParams): Object {\n let newArgv = { ...argv };\n\n for (const option of Object.keys(configObject)) {\n if (camelCase(option) !== option) {\n throw new UsageError(\n `The config option \"${option}\" must be ` +\n `specified in camel case: \"${camelCase(option)}\"`\n );\n }\n\n // A config option cannot be a sub-command config\n // object if it is an array.\n if (\n !Array.isArray(configObject[option]) &&\n typeof options[option] === 'object' &&\n typeof configObject[option] === 'object'\n ) {\n // Descend into the nested configuration for a sub-command.\n newArgv = applyConfigToArgv({\n argv: newArgv,\n argvFromCLI,\n configObject: configObject[option],\n options: options[option],\n configFileName,\n });\n continue;\n }\n\n const decamelizedOptName = decamelize(option, { separator: '-' });\n\n if (typeof options[decamelizedOptName] !== 'object') {\n throw new UsageError(\n `The config file at ${configFileName} specified ` +\n `an unknown option: \"${option}\"`\n );\n }\n if (options[decamelizedOptName].type === undefined) {\n // This means yargs option type wasn't not defined correctly\n throw new WebExtError(`Option: ${option} was defined without a type.`);\n }\n\n const expectedType =\n options[decamelizedOptName].type === 'count'\n ? 'number'\n : options[decamelizedOptName].type;\n\n const optionType = Array.isArray(configObject[option])\n ? 'array'\n : typeof configObject[option];\n\n if (optionType !== expectedType) {\n throw new UsageError(\n `The config file at ${configFileName} specified ` +\n `the type of \"${option}\" incorrectly as \"${optionType}\"` +\n ` (expected type \"${expectedType}\")`\n );\n }\n\n let defaultValue;\n if (options[decamelizedOptName]) {\n if (options[decamelizedOptName].default !== undefined) {\n defaultValue = options[decamelizedOptName].default;\n } else if (expectedType === 'boolean') {\n defaultValue = false;\n }\n }\n\n // This is our best effort (without patching yargs) to detect\n // if a value was set on the CLI instead of in the config.\n // It looks for a default value and if the argv value is\n // different, it assumes that the value was configured on the CLI.\n\n const wasValueSetOnCLI =\n typeof argvFromCLI[option] !== 'undefined' &&\n argvFromCLI[option] !== defaultValue;\n if (wasValueSetOnCLI) {\n log.debug(\n `Favoring CLI: ${option}=${argvFromCLI[option]} over ` +\n `configuration: ${option}=${configObject[option]}`\n );\n newArgv[option] = argvFromCLI[option];\n continue;\n }\n\n newArgv[option] = configObject[option];\n\n const coerce = options[decamelizedOptName].coerce;\n if (coerce) {\n log.debug(`Calling coerce() on configured value for ${option}`);\n newArgv[option] = coerce(newArgv[option]);\n }\n\n newArgv[decamelizedOptName] = newArgv[option];\n }\n return newArgv;\n}\n\nexport function loadJSConfigFile(filePath: string): Object {\n const resolvedFilePath = path.resolve(filePath);\n log.debug(\n `Loading JS config file: \"${filePath}\" ` +\n `(resolved to \"${resolvedFilePath}\")`\n );\n let configObject;\n try {\n configObject = importFresh(resolvedFilePath);\n } catch (error) {\n log.debug('Handling error:', error);\n throw new UsageError(\n `Cannot read config file: ${resolvedFilePath}\\n` +\n `Error: ${error.message}`\n );\n }\n if (filePath.endsWith('package.json')) {\n log.debug('Looking for webExt key inside package.json file');\n configObject = configObject.webExt || {};\n }\n if (Object.keys(configObject).length === 0) {\n log.debug(\n `Config file ${resolvedFilePath} did not define any options. ` +\n 'Did you set module.exports = {...}?'\n );\n }\n return configObject;\n}\n\ntype DiscoverConfigFilesParams = {\n getHomeDir: () => string,\n};\n\nexport async function discoverConfigFiles({\n getHomeDir = os.homedir,\n}: DiscoverConfigFilesParams = {}): Promise<Array<string>> {\n const magicConfigName = 'web-ext-config.js';\n\n // Config files will be loaded in this order.\n const possibleConfigs = [\n // Look for a magic hidden config (preceded by dot) in home dir.\n path.join(getHomeDir(), `.${magicConfigName}`),\n // Look for webExt key inside package.json file\n path.join(process.cwd(), 'package.json'),\n // Look for a magic config in the current working directory.\n path.join(process.cwd(), magicConfigName),\n ];\n\n const configs = await Promise.all(\n possibleConfigs.map(async (fileName) => {\n const resolvedFileName = path.resolve(fileName);\n if (await fileExists(resolvedFileName)) {\n return resolvedFileName;\n } else {\n log.debug(\n `Discovered config \"${resolvedFileName}\" does not ` +\n 'exist or is not readable'\n );\n return undefined;\n }\n })\n );\n\n const existingConfigs = [];\n configs.forEach((f) => {\n if (typeof f === 'string') {\n existingConfigs.push(f);\n }\n });\n return existingConfigs;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","names":["os","path","importFresh","camelCase","decamelize","fileExists","createLogger","UsageError","WebExtError","log","import","meta","url","applyConfigToArgv","argv","argvFromCLI","configObject","options","configFileName","newArgv","option","Object","keys","Array","isArray","decamelizedOptName","separator","type","undefined","expectedType","optionType","defaultValue","default","wasValueSetOnCLI","debug","coerce","loadJSConfigFile","filePath","resolvedFilePath","resolve","error","message","endsWith","webExt","length","discoverConfigFiles","getHomeDir","homedir","magicConfigName","possibleConfigs","join","process","cwd","configs","Promise","all","map","fileName","resolvedFileName","existingConfigs","forEach","f","push"],"sources":["../src/config.js"],"sourcesContent":["/* @flow */\nimport os from 'os';\nimport path from 'path';\n\nimport importFresh from 'import-fresh';\nimport camelCase from 'camelcase';\nimport decamelize from 'decamelize';\n\nimport fileExists from './util/file-exists.js';\nimport { createLogger } from './util/logger.js';\nimport { UsageError, WebExtError } from './errors.js';\n\nconst log = createLogger(import.meta.url);\n\ntype ApplyConfigToArgvParams = {|\n // This is the argv object which will get updated by each\n // config applied.\n argv: Object,\n // This is the argv that only has CLI values applied to it.\n argvFromCLI: Object,\n configObject: Object,\n options: Object,\n configFileName: string,\n|};\n\nexport function applyConfigToArgv({\n argv,\n argvFromCLI,\n configObject,\n options,\n configFileName,\n}: ApplyConfigToArgvParams): Object {\n let newArgv = { ...argv };\n\n for (const option of Object.keys(configObject)) {\n if (camelCase(option) !== option) {\n throw new UsageError(\n `The config option \"${option}\" must be ` +\n `specified in camel case: \"${camelCase(option)}\"`\n );\n }\n\n // A config option cannot be a sub-command config\n // object if it is an array.\n if (\n !Array.isArray(configObject[option]) &&\n typeof options[option] === 'object' &&\n typeof configObject[option] === 'object'\n ) {\n // Descend into the nested configuration for a sub-command.\n newArgv = applyConfigToArgv({\n argv: newArgv,\n argvFromCLI,\n configObject: configObject[option],\n options: options[option],\n configFileName,\n });\n continue;\n }\n\n const decamelizedOptName = decamelize(option, { separator: '-' });\n\n if (typeof options[decamelizedOptName] !== 'object') {\n throw new UsageError(\n `The config file at ${configFileName} specified ` +\n `an unknown option: \"${option}\"`\n );\n }\n if (options[decamelizedOptName].type === undefined) {\n // This means yargs option type wasn't not defined correctly\n throw new WebExtError(`Option: ${option} was defined without a type.`);\n }\n\n const expectedType =\n options[decamelizedOptName].type === 'count'\n ? 'number'\n : options[decamelizedOptName].type;\n\n const optionType = Array.isArray(configObject[option])\n ? 'array'\n : typeof configObject[option];\n\n if (optionType !== expectedType) {\n throw new UsageError(\n `The config file at ${configFileName} specified ` +\n `the type of \"${option}\" incorrectly as \"${optionType}\"` +\n ` (expected type \"${expectedType}\")`\n );\n }\n\n let defaultValue;\n if (options[decamelizedOptName]) {\n if (options[decamelizedOptName].default !== undefined) {\n defaultValue = options[decamelizedOptName].default;\n } else if (expectedType === 'boolean') {\n defaultValue = false;\n }\n }\n\n // This is our best effort (without patching yargs) to detect\n // if a value was set on the CLI instead of in the config.\n // It looks for a default value and if the argv value is\n // different, it assumes that the value was configured on the CLI.\n\n const wasValueSetOnCLI =\n typeof argvFromCLI[option] !== 'undefined' &&\n argvFromCLI[option] !== defaultValue;\n if (wasValueSetOnCLI) {\n log.debug(\n `Favoring CLI: ${option}=${argvFromCLI[option]} over ` +\n `configuration: ${option}=${configObject[option]}`\n );\n newArgv[option] = argvFromCLI[option];\n continue;\n }\n\n newArgv[option] = configObject[option];\n\n const coerce = options[decamelizedOptName].coerce;\n if (coerce) {\n log.debug(`Calling coerce() on configured value for ${option}`);\n newArgv[option] = coerce(newArgv[option]);\n }\n\n newArgv[decamelizedOptName] = newArgv[option];\n }\n return newArgv;\n}\n\nexport function loadJSConfigFile(filePath: string): Object {\n const resolvedFilePath = path.resolve(filePath);\n log.debug(\n `Loading JS config file: \"${filePath}\" ` +\n `(resolved to \"${resolvedFilePath}\")`\n );\n let configObject;\n try {\n configObject = importFresh(resolvedFilePath);\n } catch (error) {\n log.debug('Handling error:', error);\n throw new UsageError(\n `Cannot read config file: ${resolvedFilePath}\\n` +\n `Error: ${error.message}`\n );\n }\n if (filePath.endsWith('package.json')) {\n log.debug('Looking for webExt key inside package.json file');\n configObject = configObject.webExt || {};\n }\n if (Object.keys(configObject).length === 0) {\n log.debug(\n `Config file ${resolvedFilePath} did not define any options. ` +\n 'Did you set module.exports = {...}?'\n );\n }\n return configObject;\n}\n\ntype DiscoverConfigFilesParams = {\n getHomeDir: () => string,\n};\n\nexport async function discoverConfigFiles({\n getHomeDir = os.homedir,\n}: DiscoverConfigFilesParams = {}): Promise<Array<string>> {\n const magicConfigName = 'web-ext-config.js';\n\n // Config files will be loaded in this order.\n const possibleConfigs = [\n // Look for a magic hidden config (preceded by dot) in home dir.\n path.join(getHomeDir(), `.${magicConfigName}`),\n // Look for webExt key inside package.json file\n path.join(process.cwd(), 'package.json'),\n // Look for a magic config in the current working directory.\n path.join(process.cwd(), magicConfigName),\n ];\n\n const configs = await Promise.all(\n possibleConfigs.map(async (fileName) => {\n const resolvedFileName = path.resolve(fileName);\n if (await fileExists(resolvedFileName)) {\n return resolvedFileName;\n } else {\n log.debug(\n `Discovered config \"${resolvedFileName}\" does not ` +\n 'exist or is not readable'\n );\n return undefined;\n }\n })\n );\n\n const existingConfigs = [];\n configs.forEach((f) => {\n if (typeof f === 'string') {\n existingConfigs.push(f);\n }\n });\n return existingConfigs;\n}\n"],"mappings":"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"}
|
package/lib/errors.js
CHANGED
package/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","names":["ExtendableError","WebExtError","constructor","message","UsageError","InvalidManifest","RemoteTempInstallNotSupported","MultiExtensionsReloadError","errorsMap","errors","sourceDir","error","msg","String","errorsBySourceDir","onlyInstancesOf","predicate","errorHandler","onlyErrorsWithCode","codeWanted","throwError","Array","isArray","indexOf","code","errno","isErrorWithCode"],"sources":["../src/errors.js"],"sourcesContent":["/* @flow */\nimport ExtendableError from 'es6-error';\n\n/*\n * Base error for all custom web-ext errors.\n */\nexport class WebExtError extends ExtendableError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The class for errors that can be fixed by the developer.\n */\nexport class UsageError extends WebExtError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The manifest for the extension is invalid (or missing).\n */\nexport class InvalidManifest extends UsageError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The remote Firefox does not support temporary add-on installation.\n */\nexport class RemoteTempInstallNotSupported extends WebExtError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The errors collected when reloading all extensions at once\n * (initialized from a map of errors by extensionSourceDir string).\n */\nexport class MultiExtensionsReloadError extends WebExtError {\n constructor(errorsMap: Map<string, Error>) {\n let errors = '';\n for (const [sourceDir, error] of errorsMap) {\n const msg = String(error);\n errors += `\\nError on extension loaded from ${sourceDir}: ${msg}\\n`;\n }\n const message = `Reload errors: ${errors}`;\n\n super(message);\n this.errorsBySourceDir = errorsMap;\n }\n}\n\n/*\n * Sugar-y way to catch only instances of a certain error.\n *\n * Usage:\n *\n * Promise.reject(SyntaxError)\n * .catch(onlyInstancesOf(SyntaxError, (error) => {\n * // error is guaranteed to be an instance of SyntaxError\n * }))\n *\n * All other errors will be re-thrown.\n *\n */\nexport function onlyInstancesOf(\n predicate: Function,\n errorHandler: Function\n): Function {\n return (error) => {\n if (error instanceof predicate) {\n return errorHandler(error);\n } else {\n throw error;\n }\n };\n}\n\n/*\n * Sugar-y way to catch only errors having certain code(s).\n *\n * Usage:\n *\n * Promise.resolve()\n * .catch(onlyErrorsWithCode('ENOENT', (error) => {\n * // error.code is guaranteed to be ENOENT\n * }))\n *\n * or:\n *\n * Promise.resolve()\n * .catch(onlyErrorsWithCode(['ENOENT', 'ENOTDIR'], (error) => {\n * // ...\n * }))\n *\n * All other errors will be re-thrown.\n *\n */\nexport function onlyErrorsWithCode(\n codeWanted: (string | number) | Array<string | number>,\n errorHandler: Function\n): Function {\n return (error) => {\n let throwError = true;\n\n if (Array.isArray(codeWanted)) {\n if (\n codeWanted.indexOf(error.code) !== -1 ||\n codeWanted.indexOf(error.errno) !== -1\n ) {\n throwError = false;\n }\n } else if (error.code === codeWanted || error.errno === codeWanted) {\n throwError = false;\n }\n\n if (throwError) {\n throw error;\n }\n\n return errorHandler(error);\n };\n}\n\nexport function isErrorWithCode(\n codeWanted: string | Array<string>,\n error: Object\n): boolean {\n if (Array.isArray(codeWanted) && codeWanted.indexOf(error.code) !== -1) {\n return true;\n } else if (error.code === codeWanted) {\n return true;\n }\n\n return false;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.js","names":["ExtendableError","WebExtError","constructor","message","UsageError","InvalidManifest","RemoteTempInstallNotSupported","MultiExtensionsReloadError","errorsMap","errors","sourceDir","error","msg","String","errorsBySourceDir","onlyInstancesOf","predicate","errorHandler","onlyErrorsWithCode","codeWanted","throwError","Array","isArray","indexOf","code","errno","isErrorWithCode"],"sources":["../src/errors.js"],"sourcesContent":["/* @flow */\nimport ExtendableError from 'es6-error';\n\n/*\n * Base error for all custom web-ext errors.\n */\nexport class WebExtError extends ExtendableError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The class for errors that can be fixed by the developer.\n */\nexport class UsageError extends WebExtError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The manifest for the extension is invalid (or missing).\n */\nexport class InvalidManifest extends UsageError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The remote Firefox does not support temporary add-on installation.\n */\nexport class RemoteTempInstallNotSupported extends WebExtError {\n constructor(message: string) {\n super(message);\n }\n}\n\n/*\n * The errors collected when reloading all extensions at once\n * (initialized from a map of errors by extensionSourceDir string).\n */\nexport class MultiExtensionsReloadError extends WebExtError {\n constructor(errorsMap: Map<string, Error>) {\n let errors = '';\n for (const [sourceDir, error] of errorsMap) {\n const msg = String(error);\n errors += `\\nError on extension loaded from ${sourceDir}: ${msg}\\n`;\n }\n const message = `Reload errors: ${errors}`;\n\n super(message);\n this.errorsBySourceDir = errorsMap;\n }\n}\n\n/*\n * Sugar-y way to catch only instances of a certain error.\n *\n * Usage:\n *\n * Promise.reject(SyntaxError)\n * .catch(onlyInstancesOf(SyntaxError, (error) => {\n * // error is guaranteed to be an instance of SyntaxError\n * }))\n *\n * All other errors will be re-thrown.\n *\n */\nexport function onlyInstancesOf(\n predicate: Function,\n errorHandler: Function\n): Function {\n return (error) => {\n if (error instanceof predicate) {\n return errorHandler(error);\n } else {\n throw error;\n }\n };\n}\n\n/*\n * Sugar-y way to catch only errors having certain code(s).\n *\n * Usage:\n *\n * Promise.resolve()\n * .catch(onlyErrorsWithCode('ENOENT', (error) => {\n * // error.code is guaranteed to be ENOENT\n * }))\n *\n * or:\n *\n * Promise.resolve()\n * .catch(onlyErrorsWithCode(['ENOENT', 'ENOTDIR'], (error) => {\n * // ...\n * }))\n *\n * All other errors will be re-thrown.\n *\n */\nexport function onlyErrorsWithCode(\n codeWanted: (string | number) | Array<string | number>,\n errorHandler: Function\n): Function {\n return (error) => {\n let throwError = true;\n\n if (Array.isArray(codeWanted)) {\n if (\n codeWanted.indexOf(error.code) !== -1 ||\n codeWanted.indexOf(error.errno) !== -1\n ) {\n throwError = false;\n }\n } else if (error.code === codeWanted || error.errno === codeWanted) {\n throwError = false;\n }\n\n if (throwError) {\n throw error;\n }\n\n return errorHandler(error);\n };\n}\n\nexport function isErrorWithCode(\n codeWanted: string | Array<string>,\n error: Object\n): boolean {\n if (Array.isArray(codeWanted) && codeWanted.indexOf(error.code) !== -1) {\n return true;\n } else if (error.code === codeWanted) {\n return true;\n }\n\n return false;\n}\n"],"mappings":"AACA,OAAOA,eAAe,MAAM,WAAW;;AAEvC;AACA;AACA;AACA,OAAO,MAAMC,WAAW,SAASD,eAAe,CAAC;EAC/CE,WAAWA,CAACC,OAAe,EAAE;IAC3B,KAAK,CAACA,OAAO,CAAC;EAChB;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMC,UAAU,SAASH,WAAW,CAAC;EAC1CC,WAAWA,CAACC,OAAe,EAAE;IAC3B,KAAK,CAACA,OAAO,CAAC;EAChB;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAME,eAAe,SAASD,UAAU,CAAC;EAC9CF,WAAWA,CAACC,OAAe,EAAE;IAC3B,KAAK,CAACA,OAAO,CAAC;EAChB;AACF;;AAEA;AACA;AACA;AACA,OAAO,MAAMG,6BAA6B,SAASL,WAAW,CAAC;EAC7DC,WAAWA,CAACC,OAAe,EAAE;IAC3B,KAAK,CAACA,OAAO,CAAC;EAChB;AACF;;AAEA;AACA;AACA;AACA;AACA,OAAO,MAAMI,0BAA0B,SAASN,WAAW,CAAC;EAC1DC,WAAWA,CAACM,SAA6B,EAAE;IACzC,IAAIC,MAAM,GAAG,EAAE;IACf,KAAK,MAAM,CAACC,SAAS,EAAEC,KAAK,CAAC,IAAIH,SAAS,EAAE;MAC1C,MAAMI,GAAG,GAAGC,MAAM,CAACF,KAAK,CAAC;MACzBF,MAAM,IAAK,oCAAmCC,SAAU,KAAIE,GAAI,IAAG;IACrE;IACA,MAAMT,OAAO,GAAI,kBAAiBM,MAAO,EAAC;IAE1C,KAAK,CAACN,OAAO,CAAC;IACd,IAAI,CAACW,iBAAiB,GAAGN,SAAS;EACpC;AACF;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,eAAeA,CAC7BC,SAAmB,EACnBC,YAAsB,EACZ;EACV,OAAQN,KAAK,IAAK;IAChB,IAAIA,KAAK,YAAYK,SAAS,EAAE;MAC9B,OAAOC,YAAY,CAACN,KAAK,CAAC;IAC5B,CAAC,MAAM;MACL,MAAMA,KAAK;IACb;EACF,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASO,kBAAkBA,CAChCC,UAAsD,EACtDF,YAAsB,EACZ;EACV,OAAQN,KAAK,IAAK;IAChB,IAAIS,UAAU,GAAG,IAAI;IAErB,IAAIC,KAAK,CAACC,OAAO,CAACH,UAAU,CAAC,EAAE;MAC7B,IACEA,UAAU,CAACI,OAAO,CAACZ,KAAK,CAACa,IAAI,CAAC,KAAK,CAAC,CAAC,IACrCL,UAAU,CAACI,OAAO,CAACZ,KAAK,CAACc,KAAK,CAAC,KAAK,CAAC,CAAC,EACtC;QACAL,UAAU,GAAG,KAAK;MACpB;IACF,CAAC,MAAM,IAAIT,KAAK,CAACa,IAAI,KAAKL,UAAU,IAAIR,KAAK,CAACc,KAAK,KAAKN,UAAU,EAAE;MAClEC,UAAU,GAAG,KAAK;IACpB;IAEA,IAAIA,UAAU,EAAE;MACd,MAAMT,KAAK;IACb;IAEA,OAAOM,YAAY,CAACN,KAAK,CAAC;EAC5B,CAAC;AACH;AAEA,OAAO,SAASe,eAAeA,CAC7BP,UAAkC,EAClCR,KAAa,EACJ;EACT,IAAIU,KAAK,CAACC,OAAO,CAACH,UAAU,CAAC,IAAIA,UAAU,CAACI,OAAO,CAACZ,KAAK,CAACa,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;IACtE,OAAO,IAAI;EACb,CAAC,MAAM,IAAIb,KAAK,CAACa,IAAI,KAAKL,UAAU,EAAE;IACpC,OAAO,IAAI;EACb;EAEA,OAAO,KAAK;AACd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","names":["showDesktopNotification","defaultDesktopNotifications"],"sources":["../../src/extension-runners/base.js"],"sourcesContent":["/* @flow */\n\nimport { showDesktopNotification as defaultDesktopNotifications } from '../util/desktop-notifier';\nimport type { ExtensionManifest } from '../util/manifest';\n\nexport type Extension = {|\n sourceDir: string,\n manifestData: ExtensionManifest,\n|};\n\nexport type ExtensionRunnerParams = {|\n // Common cli params.\n extensions: Array<Extension>,\n profilePath?: string,\n keepProfileChanges: boolean,\n startUrl: ?string | ?Array<string>,\n args?: Array<string>,\n\n // Common injected dependencies.\n desktopNotifications: typeof defaultDesktopNotifications,\n|};\n\nexport type ExtensionRunnerReloadResult = {|\n runnerName: string,\n reloadError?: Error,\n sourceDir?: string,\n|};\n\nexport interface IExtensionRunner {\n getName(): string;\n run(): Promise<void>;\n reloadAllExtensions(): Promise<Array<ExtensionRunnerReloadResult>>;\n reloadExtensionBySourceDir(\n extensionSourceDir: string\n ): Promise<Array<ExtensionRunnerReloadResult>>;\n registerCleanup(fn: Function): void;\n exit(): Promise<void>;\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"base.js","names":["showDesktopNotification","defaultDesktopNotifications"],"sources":["../../src/extension-runners/base.js"],"sourcesContent":["/* @flow */\n\nimport { showDesktopNotification as defaultDesktopNotifications } from '../util/desktop-notifier';\nimport type { ExtensionManifest } from '../util/manifest';\n\nexport type Extension = {|\n sourceDir: string,\n manifestData: ExtensionManifest,\n|};\n\nexport type ExtensionRunnerParams = {|\n // Common cli params.\n extensions: Array<Extension>,\n profilePath?: string,\n keepProfileChanges: boolean,\n startUrl: ?string | ?Array<string>,\n args?: Array<string>,\n\n // Common injected dependencies.\n desktopNotifications: typeof defaultDesktopNotifications,\n|};\n\nexport type ExtensionRunnerReloadResult = {|\n runnerName: string,\n reloadError?: Error,\n sourceDir?: string,\n|};\n\nexport interface IExtensionRunner {\n getName(): string;\n run(): Promise<void>;\n reloadAllExtensions(): Promise<Array<ExtensionRunnerReloadResult>>;\n reloadExtensionBySourceDir(\n extensionSourceDir: string\n ): Promise<Array<ExtensionRunnerReloadResult>>;\n registerCleanup(fn: Function): void;\n exit(): Promise<void>;\n}\n"],"mappings":"AAEA,SAASA,uBAAuB,IAAIC,2BAA2B,QAAQ,0BAA0B"}
|