appium 2.0.0-beta.46 → 2.0.0-beta.47

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (138) hide show
  1. package/README.md +145 -44
  2. package/build/lib/appium.d.ts +3 -103
  3. package/build/lib/appium.d.ts.map +1 -1
  4. package/build/lib/appium.js +679 -549
  5. package/build/lib/appium.js.map +1 -1
  6. package/build/lib/cli/args.js +247 -127
  7. package/build/lib/cli/args.js.map +1 -1
  8. package/build/lib/cli/driver-command.js +63 -88
  9. package/build/lib/cli/driver-command.js.map +1 -1
  10. package/build/lib/cli/extension-command.d.ts +32 -23
  11. package/build/lib/cli/extension-command.d.ts.map +1 -1
  12. package/build/lib/cli/extension-command.js +730 -512
  13. package/build/lib/cli/extension-command.js.map +1 -1
  14. package/build/lib/cli/extension.d.ts +7 -6
  15. package/build/lib/cli/extension.d.ts.map +1 -1
  16. package/build/lib/cli/extension.js +68 -65
  17. package/build/lib/cli/extension.js.map +1 -1
  18. package/build/lib/cli/parser.d.ts +3 -3
  19. package/build/lib/cli/parser.d.ts.map +1 -1
  20. package/build/lib/cli/parser.js +234 -192
  21. package/build/lib/cli/parser.js.map +1 -1
  22. package/build/lib/cli/plugin-command.js +58 -87
  23. package/build/lib/cli/plugin-command.js.map +1 -1
  24. package/build/lib/cli/utils.js +66 -69
  25. package/build/lib/cli/utils.js.map +1 -1
  26. package/build/lib/config-file.d.ts.map +1 -1
  27. package/build/lib/config-file.js +189 -120
  28. package/build/lib/config-file.js.map +1 -1
  29. package/build/lib/config.d.ts.map +1 -1
  30. package/build/lib/config.js +254 -213
  31. package/build/lib/config.js.map +1 -1
  32. package/build/lib/constants.d.ts +5 -5
  33. package/build/lib/constants.d.ts.map +1 -1
  34. package/build/lib/constants.js +64 -59
  35. package/build/lib/constants.js.map +1 -1
  36. package/build/lib/extension/driver-config.js +199 -164
  37. package/build/lib/extension/driver-config.js.map +1 -1
  38. package/build/lib/extension/extension-config.d.ts +18 -16
  39. package/build/lib/extension/extension-config.d.ts.map +1 -1
  40. package/build/lib/extension/extension-config.js +523 -396
  41. package/build/lib/extension/extension-config.js.map +1 -1
  42. package/build/lib/extension/index.js +98 -68
  43. package/build/lib/extension/index.js.map +1 -1
  44. package/build/lib/extension/manifest-migrations.d.ts +27 -0
  45. package/build/lib/extension/manifest-migrations.d.ts.map +1 -0
  46. package/build/lib/extension/manifest-migrations.js +99 -0
  47. package/build/lib/extension/manifest-migrations.js.map +1 -0
  48. package/build/lib/extension/manifest.d.ts +7 -56
  49. package/build/lib/extension/manifest.d.ts.map +1 -1
  50. package/build/lib/extension/manifest.js +432 -240
  51. package/build/lib/extension/manifest.js.map +1 -1
  52. package/build/lib/extension/package-changed.js +57 -61
  53. package/build/lib/extension/package-changed.js.map +1 -1
  54. package/build/lib/extension/plugin-config.d.ts +2 -3
  55. package/build/lib/extension/plugin-config.d.ts.map +1 -1
  56. package/build/lib/extension/plugin-config.js +94 -70
  57. package/build/lib/extension/plugin-config.js.map +1 -1
  58. package/build/lib/grid-register.js +119 -137
  59. package/build/lib/grid-register.js.map +1 -1
  60. package/build/lib/logger.d.ts +1 -1
  61. package/build/lib/logger.d.ts.map +1 -1
  62. package/build/lib/logger.js +5 -15
  63. package/build/lib/logger.js.map +1 -1
  64. package/build/lib/logsink.d.ts.map +1 -1
  65. package/build/lib/logsink.js +189 -183
  66. package/build/lib/logsink.js.map +1 -1
  67. package/build/lib/main.d.ts +19 -12
  68. package/build/lib/main.d.ts.map +1 -1
  69. package/build/lib/main.js +330 -304
  70. package/build/lib/main.js.map +1 -1
  71. package/build/lib/schema/arg-spec.js +153 -108
  72. package/build/lib/schema/arg-spec.js.map +1 -1
  73. package/build/lib/schema/cli-args.js +203 -164
  74. package/build/lib/schema/cli-args.js.map +1 -1
  75. package/build/lib/schema/cli-transformers.js +117 -72
  76. package/build/lib/schema/cli-transformers.js.map +1 -1
  77. package/build/lib/schema/index.js +17 -32
  78. package/build/lib/schema/index.js.map +1 -1
  79. package/build/lib/schema/keywords.js +125 -67
  80. package/build/lib/schema/keywords.js.map +1 -1
  81. package/build/lib/schema/schema.d.ts.map +1 -1
  82. package/build/lib/schema/schema.js +582 -417
  83. package/build/lib/schema/schema.js.map +1 -1
  84. package/build/lib/utils.d.ts +41 -255
  85. package/build/lib/utils.d.ts.map +1 -1
  86. package/build/lib/utils.js +342 -193
  87. package/build/lib/utils.js.map +1 -1
  88. package/build/tsconfig.tsbuildinfo +1 -1
  89. package/build/types/cli.d.ts +45 -34
  90. package/build/types/cli.d.ts.map +1 -1
  91. package/build/types/cli.js +3 -0
  92. package/build/types/cli.js.map +1 -0
  93. package/build/types/index.d.ts +1 -2
  94. package/build/types/index.d.ts.map +1 -1
  95. package/build/types/index.js +19 -0
  96. package/build/types/index.js.map +1 -0
  97. package/build/types/manifest/base.d.ts +135 -0
  98. package/build/types/manifest/base.d.ts.map +1 -0
  99. package/build/types/manifest/base.js +3 -0
  100. package/build/types/manifest/base.js.map +1 -0
  101. package/build/types/manifest/index.d.ts +19 -0
  102. package/build/types/manifest/index.d.ts.map +1 -0
  103. package/build/types/manifest/index.js +40 -0
  104. package/build/types/manifest/index.js.map +1 -0
  105. package/build/types/manifest/v3.d.ts +139 -0
  106. package/build/types/manifest/v3.d.ts.map +1 -0
  107. package/build/types/manifest/v3.js +3 -0
  108. package/build/types/manifest/v3.js.map +1 -0
  109. package/lib/appium.js +1 -1
  110. package/lib/cli/args.js +1 -1
  111. package/lib/cli/extension-command.js +116 -61
  112. package/lib/cli/extension.js +9 -8
  113. package/lib/cli/parser.js +2 -2
  114. package/lib/config-file.js +2 -3
  115. package/lib/config.js +3 -2
  116. package/lib/constants.js +6 -5
  117. package/lib/extension/extension-config.js +24 -25
  118. package/lib/extension/manifest-migrations.js +99 -0
  119. package/lib/extension/manifest.js +79 -72
  120. package/lib/extension/plugin-config.js +1 -2
  121. package/lib/logsink.js +26 -5
  122. package/lib/main.js +58 -50
  123. package/lib/schema/schema.js +6 -1
  124. package/lib/utils.js +62 -0
  125. package/package.json +23 -24
  126. package/scripts/autoinstall-extensions.js +78 -26
  127. package/types/cli.ts +81 -42
  128. package/types/index.ts +1 -2
  129. package/types/manifest/README.md +30 -0
  130. package/types/manifest/base.ts +158 -0
  131. package/types/manifest/index.ts +27 -0
  132. package/types/manifest/v3.ts +161 -0
  133. package/build/types/appium-manifest.d.ts +0 -59
  134. package/build/types/appium-manifest.d.ts.map +0 -1
  135. package/build/types/extension-manifest.d.ts +0 -55
  136. package/build/types/extension-manifest.d.ts.map +0 -1
  137. package/types/appium-manifest.ts +0 -73
  138. package/types/extension-manifest.ts +0 -64
@@ -1 +1 @@
1
- {"version":3,"file":"extension-config.js","names":["INSTALL_TYPE_NPM","INSTALL_TYPE_LOCAL","INSTALL_TYPE_GITHUB","INSTALL_TYPE_GIT","INSTALL_TYPES","Set","ExtensionConfig","extensionType","configKey","installedExtensions","log","manifest","_listDataCache","constructor","getExtensionData","manifestPath","appiumHome","getProblems","extName","extManifest","getGenericConfigProblems","getConfigProblems","getSchemaProblems","getWarnings","genericConfigWarnings","configWarnings","B","all","getGenericConfigWarnings","getConfigWarnings","getValidationResultSummaries","errorMap","Map","warningMap","errorSummaries","problems","entries","_","isEmpty","push","util","pluralize","length","problem","err","JSON","stringify","val","warningSummaries","warnings","extTypeText","capitalize","problemEnumerationText","warning","_validate","exts","toPairs","errors","set","error","size","summary","warn","getListData","CommandClass","commandClasses","cmd","config","json","listData","list","showInstalled","showUpdates","appiumVersion","installSpec","installType","pkgName","invalidFields","isString","has","invalidFieldsEnumerationText","invalidFieldsText","map","field","join","createPeerWarning","reason","APPIUM_VER","satisfies","extListData","installed","updateVersion","upToDate","schema","argSchemaPath","extDataHasSchema","isAllowedSchemaFileExtension","readExtensionSchema","message","ALLOWED_SCHEMA_EXTENSIONS","isPlainObject","version","mainClass","addExtension","write","updateExtension","removeExtension","print","activeNames","info","extensionDesc","Error","getInstallPath","path","require","reqPath","reqResolved","resolve","ReferenceError","process","env","APPIUM_RELOAD_EXTENSIONS","cache","debug","MainClass","isInstalled","includes","Object","keys","_readExtensionSchema","extType","TypeError","moduleObject","schemaPath","resolveFrom","__esModule","default","registerSchema","isObject"],"sources":["../../../lib/extension/extension-config.js"],"sourcesContent":["import _ from 'lodash';\nimport B from 'bluebird';\nimport path from 'path';\nimport resolveFrom from 'resolve-from';\nimport {satisfies} from 'semver';\nimport {util} from '@appium/support';\nimport {commandClasses} from '../cli/extension';\nimport {APPIUM_VER} from '../config';\nimport log from '../logger';\nimport {\n ALLOWED_SCHEMA_EXTENSIONS,\n isAllowedSchemaFileExtension,\n registerSchema,\n} from '../schema/schema';\n\nconst INSTALL_TYPE_NPM = 'npm';\nconst INSTALL_TYPE_LOCAL = 'local';\nconst INSTALL_TYPE_GITHUB = 'github';\nconst INSTALL_TYPE_GIT = 'git';\n\n/** @type {Set<InstallType>} */\nconst INSTALL_TYPES = new Set([\n INSTALL_TYPE_GIT,\n INSTALL_TYPE_GITHUB,\n INSTALL_TYPE_LOCAL,\n INSTALL_TYPE_NPM,\n]);\n\n/**\n * This class is abstract. It should not be instantiated directly.\n *\n * Subclasses should provide the generic parameter to implement.\n * @template {ExtensionType} ExtType\n */\nexport class ExtensionConfig {\n /** @type {ExtType} */\n extensionType;\n\n /** @type {`${ExtType}s`} */\n configKey;\n\n /** @type {ExtRecord<ExtType>} */\n installedExtensions;\n\n /** @type {import('@appium/types').AppiumLogger} */\n log;\n\n /** @type {Manifest} */\n manifest;\n\n /**\n * @type {ExtensionListData}\n */\n _listDataCache;\n\n /**\n * @protected\n * @param {ExtType} extensionType - Type of extension\n * @param {Manifest} manifest - `Manifest` instance\n */\n constructor(extensionType, manifest) {\n this.extensionType = extensionType;\n this.configKey = `${extensionType}s`;\n this.installedExtensions = manifest.getExtensionData(extensionType);\n this.manifest = manifest;\n }\n\n get manifestPath() {\n return this.manifest.manifestPath;\n }\n\n get appiumHome() {\n return this.manifest.appiumHome;\n }\n\n /**\n * Returns a list of errors for a given extension.\n *\n * @param {ExtName<ExtType>} extName\n * @param {ExtManifest<ExtType>} extManifest\n * @returns {ExtManifestProblem[]}\n */\n getProblems(extName, extManifest) {\n return [\n ...this.getGenericConfigProblems(extManifest, extName),\n ...this.getConfigProblems(extManifest, extName),\n ...this.getSchemaProblems(extManifest, extName),\n ];\n }\n\n /**\n * Returns a list of warnings for a given extension.\n *\n * @param {ExtName<ExtType>} extName\n * @param {ExtManifest<ExtType>} extManifest\n * @returns {Promise<string[]>}\n */\n async getWarnings(extName, extManifest) {\n const [genericConfigWarnings, configWarnings] = await B.all([\n this.getGenericConfigWarnings(extManifest, extName),\n this.getConfigWarnings(extManifest, extName),\n ]);\n\n return [...genericConfigWarnings, ...configWarnings];\n }\n\n /**\n * Returns a list of extension-type-specific issues. To be implemented by subclasses.\n * @abstract\n * @param {ExtManifest<ExtType>} extManifest\n * @param {ExtName<ExtType>} extName\n * @returns {Promise<string[]>}\n */\n // eslint-disable-next-line no-unused-vars,require-await\n async getConfigWarnings(extManifest, extName) {\n return [];\n }\n\n /**\n *\n * @param {Map<ExtName<ExtType>,ExtManifestProblem[]>} [errorMap]\n * @param {Map<ExtName<ExtType>,string[]>} [warningMap]\n */\n getValidationResultSummaries(errorMap = new Map(), warningMap = new Map()) {\n /**\n * Array of computed strings\n * @type {string[]}\n */\n const errorSummaries = [];\n for (const [extName, problems] of errorMap.entries()) {\n if (_.isEmpty(problems)) {\n continue;\n }\n // remove this extension from the list since it's not valid\n errorSummaries.push(\n `${this.extensionType} \"${extName}\" had ${util.pluralize(\n 'error',\n problems.length\n )} and will not be available:`\n );\n for (const problem of problems) {\n errorSummaries.push(\n ` - ${problem.err} (Actual value: ` + `${JSON.stringify(problem.val)})`\n );\n }\n }\n /** @type {string[]} */\n const warningSummaries = [];\n for (const [extName, warnings] of warningMap.entries()) {\n if (_.isEmpty(warnings)) {\n continue;\n }\n const extTypeText = _.capitalize(this.extensionType);\n const problemEnumerationText = util.pluralize('potential problem', warnings.length, true);\n warningSummaries.push(`${extTypeText} \"${extName}\" has ${problemEnumerationText}: `);\n for (const warning of warnings) {\n warningSummaries.push(` - ${warning}`);\n }\n }\n\n return {errorSummaries, warningSummaries};\n }\n\n /**\n * Checks extensions for problems. To be called by subclasses' `validate` method.\n *\n * Errors and warnings will be displayed to the user.\n *\n * This method mutates `exts`.\n *\n * @protected\n * @param {ExtRecord<ExtType>} exts - Lookup of extension names to {@linkcode ExtManifest} objects\n * @returns {Promise<ExtRecord<ExtType>>} The same lookup, but picking only error-free extensions\n */\n async _validate(exts) {\n /**\n * Lookup of extension names to {@linkcode ExtManifestProblem ExtManifestProblems}\n * @type {Map<ExtName<ExtType>,ExtManifestProblem[]>}\n */\n const errorMap = new Map();\n /**\n * Lookup of extension names to warnings.\n * @type {Map<ExtName<ExtType>,string[]>}\n */\n const warningMap = new Map();\n\n for (const [extName, extManifest] of _.toPairs(exts)) {\n const [errors, warnings] = await B.all([\n this.getProblems(extName, extManifest),\n this.getWarnings(extName, extManifest),\n ]);\n if (errors.length) {\n delete exts[extName];\n }\n errorMap.set(extName, errors);\n warningMap.set(extName, warnings);\n }\n\n const {errorSummaries, warningSummaries} = this.getValidationResultSummaries(\n errorMap,\n warningMap\n );\n\n if (!_.isEmpty(errorSummaries)) {\n log.error(\n `Appium encountered ${util.pluralize('error', errorMap.size, true)} while validating ${\n this.configKey\n } found in manifest ${this.manifestPath}`\n );\n for (const summary of errorSummaries) {\n log.error(summary);\n }\n } else {\n // only display warnings if there are no errors!\n\n if (!_.isEmpty(warningSummaries)) {\n log.warn(\n `Appium encountered ${util.pluralize(\n 'warning',\n warningMap.size,\n true\n )} while validating ${this.configKey} found in manifest ${this.manifestPath}`\n );\n for (const summary of warningSummaries) {\n log.warn(summary);\n }\n }\n }\n return exts;\n }\n\n /**\n * Retrieves listing data for extensions via command class.\n * Caches the result in {@linkcode ExtensionConfig._listDataCache}\n * @protected\n * @returns {Promise<ExtensionListData>}\n */\n async getListData() {\n if (this._listDataCache) {\n return this._listDataCache;\n }\n const CommandClass = /** @type {ExtCommand<ExtType>} */ (commandClasses[this.extensionType]);\n const cmd = new CommandClass({config: this, json: true});\n const listData = await cmd.list({showInstalled: true, showUpdates: true});\n this._listDataCache = listData;\n return listData;\n }\n\n /**\n * Returns a list of warnings for a particular extension.\n *\n * By definition, a non-empty list of warnings does _not_ imply the extension cannot be loaded,\n * but it may not work as expected or otherwise throw an exception at runtime.\n *\n * @param {ExtManifest<ExtType>} extManifest\n * @param {ExtName<ExtType>} extName\n * @returns {Promise<string[]>}\n */\n async getGenericConfigWarnings(extManifest, extName) {\n const {appiumVersion, installSpec, installType, pkgName} = extManifest;\n const warnings = [];\n\n const invalidFields = [];\n if (!_.isString(installSpec)) {\n invalidFields.push('installSpec');\n }\n\n if (!INSTALL_TYPES.has(installType)) {\n invalidFields.push('installType');\n }\n\n const extTypeText = _.capitalize(this.extensionType);\n\n if (invalidFields.length) {\n const invalidFieldsEnumerationText = util.pluralize(\n 'invalid or missing field',\n invalidFields.length,\n true\n );\n const invalidFieldsText = invalidFields.map((field) => `\"${field}\"`).join(', ');\n\n warnings.push(\n `${extTypeText} \"${extName}\" (package \\`${pkgName}\\`) has ${invalidFieldsEnumerationText} (${invalidFieldsText}) in \\`extensions.yaml\\`; this may cause upgrades done via the \\`appium\\` CLI tool to fail. Please reinstall with \\`appium ${this.extensionType} uninstall ${extName}\\` and \\`appium ${this.extensionType} install ${extName}\\` to attempt a fix.`\n );\n }\n\n /**\n * Helps concatenate warning messages related to peer dependencies\n * @param {string} reason\n * @returns string\n */\n const createPeerWarning = (reason) =>\n `${extTypeText} \"${extName}\" (package \\`${pkgName}\\`) may be incompatible with the current version of Appium (v${APPIUM_VER}) due to ${reason}`;\n\n if (_.isString(appiumVersion) && !satisfies(APPIUM_VER, appiumVersion)) {\n const listData = await this.getListData();\n const extListData = /** @type {InstalledExtensionListData} */ (listData[extName]);\n if (extListData?.installed) {\n const {updateVersion, upToDate} = extListData;\n if (!upToDate) {\n warnings.push(\n createPeerWarning(\n `its peer dependency on older Appium v${appiumVersion}. Please upgrade \\`${pkgName}\\` to v${updateVersion} or newer.`\n )\n );\n } else {\n warnings.push(\n createPeerWarning(\n `its peer dependency on older Appium v${appiumVersion}. Please ask the developer of \\`${pkgName}\\` to update the peer dependency on Appium to v${APPIUM_VER}.`\n )\n );\n }\n }\n } else if (!_.isString(appiumVersion)) {\n const listData = await this.getListData();\n const extListData = /** @type {InstalledExtensionListData} */ (listData[extName]);\n if (!extListData?.upToDate && extListData?.updateVersion) {\n warnings.push(\n createPeerWarning(\n `an invalid or missing peer dependency on Appium. A newer version of \\`${pkgName}\\` is available; please attempt to upgrade \"${extName}\" to v${extListData.updateVersion} or newer.`\n )\n );\n } else {\n warnings.push(\n createPeerWarning(\n `an invalid or missing peer dependency on Appium. Please ask the developer of \\`${pkgName}\\` to add a peer dependency on \\`^appium@${APPIUM_VER}\\`.`\n )\n );\n }\n }\n return warnings;\n }\n /**\n * Returns list of unrecoverable errors (if any) for the given extension _if_ it has a `schema` property.\n *\n * @param {ExtManifest<ExtType>} extManifest - Extension data (from manifest)\n * @param {ExtName<ExtType>} extName - Extension name (from manifest)\n * @returns {ExtManifestProblem[]}\n */\n getSchemaProblems(extManifest, extName) {\n /** @type {ExtManifestProblem[]} */\n const problems = [];\n const {schema: argSchemaPath} = extManifest;\n if (ExtensionConfig.extDataHasSchema(extManifest)) {\n if (_.isString(argSchemaPath)) {\n if (isAllowedSchemaFileExtension(argSchemaPath)) {\n try {\n this.readExtensionSchema(extName, extManifest);\n } catch (err) {\n problems.push({\n err: `Unable to register schema at path ${argSchemaPath}; ${err.message}`,\n val: argSchemaPath,\n });\n }\n } else {\n problems.push({\n err: `Schema file has unsupported extension. Allowed: ${[\n ...ALLOWED_SCHEMA_EXTENSIONS,\n ].join(', ')}`,\n val: argSchemaPath,\n });\n }\n } else if (_.isPlainObject(argSchemaPath)) {\n try {\n this.readExtensionSchema(extName, extManifest);\n } catch (err) {\n problems.push({\n err: `Unable to register embedded schema; ${err.message}`,\n val: argSchemaPath,\n });\n }\n } else {\n problems.push({\n err: 'Incorrectly formatted schema field; must be a path to a schema file or a schema object.',\n val: argSchemaPath,\n });\n }\n }\n return problems;\n }\n\n /**\n * Return a list of generic unrecoverable errors for the given extension\n * @param {ExtManifest<ExtType>} extManifest - Extension data (from manifest)\n * @param {ExtName<ExtType>} extName - Extension name (from manifest)\n * @returns {ExtManifestProblem[]}\n */\n // eslint-disable-next-line no-unused-vars\n getGenericConfigProblems(extManifest, extName) {\n const {version, pkgName, mainClass} = extManifest;\n const problems = [];\n\n if (!_.isString(version)) {\n problems.push({\n err: `Invalid or missing \\`version\\` field in my \\`package.json\\` and/or \\`extensions.yaml\\` (must be a string)`,\n val: version,\n });\n }\n\n if (!_.isString(pkgName)) {\n problems.push({\n err: `Invalid or missing \\`name\\` field in my \\`package.json\\` and/or \\`extensions.yaml\\` (must be a string)`,\n val: pkgName,\n });\n }\n\n if (!_.isString(mainClass)) {\n problems.push({\n err: `Invalid or missing \\`appium.mainClass\\` field in my \\`package.json\\` and/or \\`mainClass\\` field in \\`extensions.yaml\\` (must be a string)`,\n val: mainClass,\n });\n }\n\n return problems;\n }\n\n /**\n * @abstract\n * @param {ExtManifest<ExtType>} extManifest\n * @param {ExtName<ExtType>} extName\n * @returns {ExtManifestProblem[]}\n */\n // eslint-disable-next-line no-unused-vars\n getConfigProblems(extManifest, extName) {\n // shoud override this method if special validation is necessary for this extension type\n return [];\n }\n\n /**\n * @param {string} extName\n * @param {ExtManifest<ExtType>} extManifest\n * @param {ExtensionConfigMutationOpts} [opts]\n * @returns {Promise<void>}\n */\n async addExtension(extName, extManifest, {write = true} = {}) {\n this.manifest.addExtension(this.extensionType, extName, extManifest);\n if (write) {\n await this.manifest.write();\n }\n }\n\n /**\n * @param {ExtName<ExtType>} extName\n * @param {ExtManifest<ExtType>|import('../cli/extension-command').ExtensionFields<ExtType>} extManifest\n * @param {ExtensionConfigMutationOpts} [opts]\n * @returns {Promise<void>}\n */\n async updateExtension(extName, extManifest, {write = true} = {}) {\n this.installedExtensions[extName] = {\n ...this.installedExtensions[extName],\n ...extManifest,\n };\n if (write) {\n await this.manifest.write();\n }\n }\n\n /**\n * Remove an extension from the list of installed extensions, and optionally avoid a write to the manifest file.\n *\n * @param {ExtName<ExtType>} extName\n * @param {ExtensionConfigMutationOpts} [opts]\n * @returns {Promise<void>}\n */\n async removeExtension(extName, {write = true} = {}) {\n delete this.installedExtensions[extName];\n if (write) {\n await this.manifest.write();\n }\n }\n\n /**\n * @param {ExtName<ExtType>[]} [activeNames]\n * @returns {void}\n */\n // eslint-disable-next-line no-unused-vars\n print(activeNames) {\n if (_.isEmpty(this.installedExtensions)) {\n log.info(\n `No ${this.configKey} have been installed in ${this.appiumHome}. Use the \"appium ${this.extensionType}\" ` +\n 'command to install the one(s) you want to use.'\n );\n return;\n }\n\n log.info(`Available ${this.configKey}:`);\n for (const [extName, extManifest] of /** @type {[string, ExtManifest<ExtType>][]} */ (\n _.toPairs(this.installedExtensions)\n )) {\n log.info(` - ${this.extensionDesc(extName, extManifest)}`);\n }\n }\n\n /**\n * Returns a string describing the extension. Subclasses must implement.\n * @param {ExtName<ExtType>} extName - Extension name\n * @param {ExtManifest<ExtType>} extManifest - Extension data\n * @returns {string}\n * @abstract\n */\n // eslint-disable-next-line no-unused-vars\n extensionDesc(extName, extManifest) {\n throw new Error('This must be implemented in a subclass');\n }\n\n /**\n * @param {string} extName\n * @returns {string}\n */\n getInstallPath(extName) {\n return path.join(this.appiumHome, 'node_modules', this.installedExtensions[extName].pkgName);\n }\n\n /**\n * Loads extension and returns its main class (constructor)\n * @param {ExtName<ExtType>} extName\n * @returns {ExtClass<ExtType>}\n */\n require(extName) {\n const {mainClass} = this.installedExtensions[extName];\n const reqPath = this.getInstallPath(extName);\n /** @type {string} */\n let reqResolved;\n try {\n reqResolved = require.resolve(reqPath);\n } catch (err) {\n throw new ReferenceError(`Could not find a ${this.extensionType} installed at ${reqPath}`);\n }\n // note: this will only reload the entry point\n if (process.env.APPIUM_RELOAD_EXTENSIONS && require.cache[reqResolved]) {\n log.debug(`Removing ${reqResolved} from require cache`);\n delete require.cache[reqResolved];\n }\n log.debug(`Requiring ${this.extensionType} at ${reqPath}`);\n const MainClass = require(reqPath)[mainClass];\n if (!MainClass) {\n throw new ReferenceError(\n `Could not find a class named \"${mainClass}\" exported by ${this.extensionType} \"${extName}\"`\n );\n }\n return MainClass;\n }\n\n /**\n * @param {string} extName\n * @returns {boolean}\n */\n isInstalled(extName) {\n return _.includes(Object.keys(this.installedExtensions), extName);\n }\n\n /**\n * Intended to be called by corresponding instance methods of subclass.\n * @private\n * @template {ExtensionType} ExtType\n * @param {string} appiumHome\n * @param {ExtType} extType\n * @param {ExtName<ExtType>} extName - Extension name (unique to its type)\n * @param {ExtManifestWithSchema<ExtType>} extManifest - Extension config\n * @returns {import('ajv').SchemaObject|undefined}\n */\n static _readExtensionSchema(appiumHome, extType, extName, extManifest) {\n const {pkgName, schema: argSchemaPath} = extManifest;\n if (!argSchemaPath) {\n throw new TypeError(\n `No \\`schema\\` property found in config for ${extType} ${pkgName} -- why is this function being called?`\n );\n }\n let moduleObject;\n if (_.isString(argSchemaPath)) {\n const schemaPath = resolveFrom(appiumHome, path.join(pkgName, argSchemaPath));\n moduleObject = require(schemaPath);\n } else {\n moduleObject = argSchemaPath;\n }\n // this sucks. default exports should be destroyed\n const schema = moduleObject.__esModule ? moduleObject.default : moduleObject;\n registerSchema(extType, extName, schema);\n return schema;\n }\n\n /**\n * Returns `true` if a specific {@link ExtManifest} object has a `schema` prop.\n * The {@link ExtManifest} object becomes a {@link ExtManifestWithSchema} object.\n * @template {ExtensionType} ExtType\n * @param {ExtManifest<ExtType>} extManifest\n * @returns {extManifest is ExtManifestWithSchema<ExtType>}\n */\n static extDataHasSchema(extManifest) {\n return _.isString(extManifest?.schema) || _.isObject(extManifest?.schema);\n }\n\n /**\n * If an extension provides a schema, this will load the schema and attempt to\n * register it with the schema registrar.\n * @param {ExtName<ExtType>} extName - Name of extension\n * @param {ExtManifestWithSchema<ExtType>} extManifest - Extension data\n * @returns {import('ajv').SchemaObject|undefined}\n */\n readExtensionSchema(extName, extManifest) {\n return ExtensionConfig._readExtensionSchema(\n this.appiumHome,\n this.extensionType,\n extName,\n extManifest\n );\n }\n}\n\nexport {INSTALL_TYPE_NPM, INSTALL_TYPE_GIT, INSTALL_TYPE_LOCAL, INSTALL_TYPE_GITHUB, INSTALL_TYPES};\n\n/**\n * An issue with the {@linkcode ExtManifest} for a particular extension.\n *\n * The existance of such an object implies that the extension cannot be loaded.\n * @typedef ExtManifestProblem\n * @property {string} err - Error message\n * @property {any} val - Associated value\n */\n\n/**\n * An optional logging function provided to an {@link ExtensionConfig} subclass.\n * @callback ExtensionLogFn\n * @param {...any} args\n * @returns {void}\n */\n\n/**\n * @typedef {import('@appium/types').ExtensionType} ExtensionType\n * @typedef {import('./manifest').Manifest} Manifest\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtManifest<T>} ExtManifest\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtManifestWithSchema<T>} ExtManifestWithSchema\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtName<T>} ExtName\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtClass<T>} ExtClass\n */\n\n/**\n * @template T\n * @typedef {import('appium/types').ExtRecord<T>} ExtRecord\n */\n\n/**\n * @template T\n * @typedef {import('../cli/extension').ExtCommand<T>} ExtCommand\n */\n\n/**\n * Options for various methods in {@link ExtensionConfig}\n * @typedef ExtensionConfigMutationOpts\n * @property {boolean} [write=true] Whether or not to write the manifest to disk after a mutation operation\n */\n\n/**\n * A valid install type\n * @typedef {typeof INSTALL_TYPE_NPM | typeof INSTALL_TYPE_GIT | typeof INSTALL_TYPE_LOCAL | typeof INSTALL_TYPE_GITHUB} InstallType\n */\n\n/**\n * @typedef {import('../cli/extension-command').ExtensionListData} ExtensionListData\n * @typedef {import('../cli/extension-command').InstalledExtensionListData} InstalledExtensionListData\n */\n"],"mappings":"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"}
1
+ {"version":3,"file":"extension-config.js","sourceRoot":"","sources":["../../../lib/extension/extension-config.js"],"names":[],"mappings":"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"}
@@ -1,75 +1,105 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.getActiveDrivers = getActiveDrivers;
7
- exports.getActivePlugins = getActivePlugins;
8
- exports.loadExtensions = loadExtensions;
9
-
10
- require("source-map-support/register");
11
-
12
- var _lodash = _interopRequireDefault(require("lodash"));
13
-
14
- var _constants = require("../constants");
15
-
16
- var _logger = _interopRequireDefault(require("../logger"));
17
-
18
- var _driverConfig = require("./driver-config");
19
-
20
- var _manifest = require("./manifest");
21
-
22
- var _pluginConfig = require("./plugin-config");
23
-
24
- var _bluebird = _interopRequireDefault(require("bluebird"));
25
-
26
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
27
-
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getActiveDrivers = exports.getActivePlugins = exports.loadExtensions = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ const constants_1 = require("../constants");
9
+ const logger_1 = __importDefault(require("../logger"));
10
+ const driver_config_1 = require("./driver-config");
11
+ const manifest_1 = require("./manifest");
12
+ const plugin_config_1 = require("./plugin-config");
13
+ const bluebird_1 = __importDefault(require("bluebird"));
14
+ /**
15
+ * Loads extensions and creates `ExtensionConfig` instances.
16
+ *
17
+ * - Reads the manifest file, creating if necessary
18
+ * - Using the parsed extension data, creates/gets the `ExtensionConfig` subclass instances
19
+ * - Returns these instances
20
+ *
21
+ * If `appiumHome` is needed, use `resolveAppiumHome` from the `env` module in `@appium/support`.
22
+ * @param {string} appiumHome
23
+ * @returns {Promise<ExtensionConfigs>}
24
+ */
28
25
  async function loadExtensions(appiumHome) {
29
- const manifest = _manifest.Manifest.getInstance(appiumHome);
30
-
31
- await manifest.read();
32
-
33
- const driverConfig = _driverConfig.DriverConfig.getInstance(manifest) ?? _driverConfig.DriverConfig.create(manifest);
34
-
35
- const pluginConfig = _pluginConfig.PluginConfig.getInstance(manifest) ?? _pluginConfig.PluginConfig.create(manifest);
36
-
37
- await _bluebird.default.all([driverConfig.validate(), pluginConfig.validate()]);
38
- return {
39
- driverConfig,
40
- pluginConfig
41
- };
26
+ const manifest = manifest_1.Manifest.getInstance(appiumHome);
27
+ await manifest.read();
28
+ const driverConfig = driver_config_1.DriverConfig.getInstance(manifest) ?? driver_config_1.DriverConfig.create(manifest);
29
+ const pluginConfig = plugin_config_1.PluginConfig.getInstance(manifest) ?? plugin_config_1.PluginConfig.create(manifest);
30
+ await bluebird_1.default.all([driverConfig.validate(), pluginConfig.validate()]);
31
+ return { driverConfig, pluginConfig };
42
32
  }
43
-
33
+ exports.loadExtensions = loadExtensions;
34
+ /**
35
+ * Find any plugin name which has been installed, and which has been requested for activation by
36
+ * using the --use-plugins flag, and turn each one into its class, so we can send them as objects
37
+ * to the server init. We also want to send/assign them to the umbrella driver so it can use them
38
+ * to wrap command execution
39
+ *
40
+ * @param {import('./plugin-config').PluginConfig} pluginConfig - a plugin extension config
41
+ * @param {string[]} usePlugins
42
+ * @returns {PluginNameMap} Mapping of PluginClass to name
43
+ */
44
44
  function getActivePlugins(pluginConfig, usePlugins = []) {
45
- return new Map(_lodash.default.compact(Object.keys(pluginConfig.installedExtensions).filter(pluginName => _lodash.default.includes(usePlugins, pluginName) || usePlugins.length === 1 && usePlugins[0] === _constants.USE_ALL_PLUGINS).map(pluginName => {
46
- try {
47
- _logger.default.info(`Attempting to load plugin ${pluginName}...`);
48
-
49
- const PluginClass = pluginConfig.require(pluginName);
50
-
51
- return [PluginClass, pluginName];
52
- } catch (err) {
53
- _logger.default.error(`Could not load plugin '${pluginName}', so it will not be available. Error ` + `in loading the plugin was: ${err.message}`);
54
-
55
- _logger.default.debug(err.stack);
56
- }
57
- })));
45
+ return new Map(lodash_1.default.compact(Object.keys(pluginConfig.installedExtensions)
46
+ .filter((pluginName) => lodash_1.default.includes(usePlugins, pluginName) ||
47
+ (usePlugins.length === 1 && usePlugins[0] === constants_1.USE_ALL_PLUGINS))
48
+ .map((pluginName) => {
49
+ try {
50
+ logger_1.default.info(`Attempting to load plugin ${pluginName}...`);
51
+ const PluginClass = pluginConfig.require(pluginName);
52
+ return [PluginClass, pluginName];
53
+ }
54
+ catch (err) {
55
+ logger_1.default.error(`Could not load plugin '${pluginName}', so it will not be available. Error ` +
56
+ `in loading the plugin was: ${err.message}`);
57
+ logger_1.default.debug(err.stack);
58
+ }
59
+ })));
58
60
  }
59
-
61
+ exports.getActivePlugins = getActivePlugins;
62
+ /**
63
+ * Find any driver name which has been installed, and turn each one into its class, so we can send
64
+ * them as objects to the server init in case they need to add methods/routes or update the server.
65
+ * If the --drivers flag was given, this method only loads the given drivers.
66
+ *
67
+ * @param {import('./driver-config').DriverConfig} driverConfig - a driver extension config
68
+ * @param {string[]} [useDrivers] - optional list of drivers to load
69
+ * @returns {DriverNameMap}
70
+ */
60
71
  function getActiveDrivers(driverConfig, useDrivers = []) {
61
- return new Map(_lodash.default.compact(Object.keys(driverConfig.installedExtensions).filter(driverName => _lodash.default.includes(useDrivers, driverName) || useDrivers.length === 0).map(driverName => {
62
- try {
63
- _logger.default.info(`Attempting to load driver ${driverName}...`);
64
-
65
- const DriverClass = driverConfig.require(driverName);
66
-
67
- return [DriverClass, driverName];
68
- } catch (err) {
69
- _logger.default.error(`Could not load driver '${driverName}', so it will not be available. Error ` + `in loading the driver was: ${err.message}`);
70
-
71
- _logger.default.debug(err.stack);
72
- }
73
- })));
72
+ return new Map(lodash_1.default.compact(Object.keys(driverConfig.installedExtensions)
73
+ .filter((driverName) => lodash_1.default.includes(useDrivers, driverName) || useDrivers.length === 0)
74
+ .map((driverName) => {
75
+ try {
76
+ logger_1.default.info(`Attempting to load driver ${driverName}...`);
77
+ const DriverClass = driverConfig.require(driverName);
78
+ return [DriverClass, driverName];
79
+ }
80
+ catch (err) {
81
+ logger_1.default.error(`Could not load driver '${driverName}', so it will not be available. Error ` +
82
+ `in loading the driver was: ${err.message}`);
83
+ logger_1.default.debug(err.stack);
84
+ }
85
+ })));
74
86
  }
75
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJsb2FkRXh0ZW5zaW9ucyIsImFwcGl1bUhvbWUiLCJtYW5pZmVzdCIsIk1hbmlmZXN0IiwiZ2V0SW5zdGFuY2UiLCJyZWFkIiwiZHJpdmVyQ29uZmlnIiwiRHJpdmVyQ29uZmlnIiwiY3JlYXRlIiwicGx1Z2luQ29uZmlnIiwiUGx1Z2luQ29uZmlnIiwiQiIsImFsbCIsInZhbGlkYXRlIiwiZ2V0QWN0aXZlUGx1Z2lucyIsInVzZVBsdWdpbnMiLCJNYXAiLCJfIiwiY29tcGFjdCIsIk9iamVjdCIsImtleXMiLCJpbnN0YWxsZWRFeHRlbnNpb25zIiwiZmlsdGVyIiwicGx1Z2luTmFtZSIsImluY2x1ZGVzIiwibGVuZ3RoIiwiVVNFX0FMTF9QTFVHSU5TIiwibWFwIiwibG9nIiwiaW5mbyIsIlBsdWdpbkNsYXNzIiwicmVxdWlyZSIsImVyciIsImVycm9yIiwibWVzc2FnZSIsImRlYnVnIiwic3RhY2siLCJnZXRBY3RpdmVEcml2ZXJzIiwidXNlRHJpdmVycyIsImRyaXZlck5hbWUiLCJEcml2ZXJDbGFzcyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYi9leHRlbnNpb24vaW5kZXguanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF8gZnJvbSAnbG9kYXNoJztcbmltcG9ydCB7VVNFX0FMTF9QTFVHSU5TfSBmcm9tICcuLi9jb25zdGFudHMnO1xuaW1wb3J0IGxvZyBmcm9tICcuLi9sb2dnZXInO1xuaW1wb3J0IHtEcml2ZXJDb25maWd9IGZyb20gJy4vZHJpdmVyLWNvbmZpZyc7XG5pbXBvcnQge01hbmlmZXN0fSBmcm9tICcuL21hbmlmZXN0JztcbmltcG9ydCB7UGx1Z2luQ29uZmlnfSBmcm9tICcuL3BsdWdpbi1jb25maWcnO1xuaW1wb3J0IEIgZnJvbSAnYmx1ZWJpcmQnO1xuXG4vKipcbiAqIExvYWRzIGV4dGVuc2lvbnMgYW5kIGNyZWF0ZXMgYEV4dGVuc2lvbkNvbmZpZ2AgaW5zdGFuY2VzLlxuICpcbiAqIC0gUmVhZHMgdGhlIG1hbmlmZXN0IGZpbGUsIGNyZWF0aW5nIGlmIG5lY2Vzc2FyeVxuICogLSBVc2luZyB0aGUgcGFyc2VkIGV4dGVuc2lvbiBkYXRhLCBjcmVhdGVzL2dldHMgdGhlIGBFeHRlbnNpb25Db25maWdgIHN1YmNsYXNzIGluc3RhbmNlc1xuICogLSBSZXR1cm5zIHRoZXNlIGluc3RhbmNlc1xuICpcbiAqIElmIGBhcHBpdW1Ib21lYCBpcyBuZWVkZWQsIHVzZSBgcmVzb2x2ZUFwcGl1bUhvbWVgIGZyb20gdGhlIGBlbnZgIG1vZHVsZSBpbiBgQGFwcGl1bS9zdXBwb3J0YC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBhcHBpdW1Ib21lXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxFeHRlbnNpb25Db25maWdzPn1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRFeHRlbnNpb25zKGFwcGl1bUhvbWUpIHtcbiAgY29uc3QgbWFuaWZlc3QgPSBNYW5pZmVzdC5nZXRJbnN0YW5jZShhcHBpdW1Ib21lKTtcbiAgYXdhaXQgbWFuaWZlc3QucmVhZCgpO1xuICBjb25zdCBkcml2ZXJDb25maWcgPSBEcml2ZXJDb25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IERyaXZlckNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuICBjb25zdCBwbHVnaW5Db25maWcgPSBQbHVnaW5Db25maWcuZ2V0SW5zdGFuY2UobWFuaWZlc3QpID8/IFBsdWdpbkNvbmZpZy5jcmVhdGUobWFuaWZlc3QpO1xuXG4gIGF3YWl0IEIuYWxsKFtkcml2ZXJDb25maWcudmFsaWRhdGUoKSwgcGx1Z2luQ29uZmlnLnZhbGlkYXRlKCldKTtcbiAgcmV0dXJuIHtkcml2ZXJDb25maWcsIHBsdWdpbkNvbmZpZ307XG59XG5cbi8qKlxuICogRmluZCBhbnkgcGx1Z2luIG5hbWUgd2hpY2ggaGFzIGJlZW4gaW5zdGFsbGVkLCBhbmQgd2hpY2ggaGFzIGJlZW4gcmVxdWVzdGVkIGZvciBhY3RpdmF0aW9uIGJ5XG4gKiB1c2luZyB0aGUgLS11c2UtcGx1Z2lucyBmbGFnLCBhbmQgdHVybiBlYWNoIG9uZSBpbnRvIGl0cyBjbGFzcywgc28gd2UgY2FuIHNlbmQgdGhlbSBhcyBvYmplY3RzXG4gKiB0byB0aGUgc2VydmVyIGluaXQuIFdlIGFsc28gd2FudCB0byBzZW5kL2Fzc2lnbiB0aGVtIHRvIHRoZSB1bWJyZWxsYSBkcml2ZXIgc28gaXQgY2FuIHVzZSB0aGVtXG4gKiB0byB3cmFwIGNvbW1hbmQgZXhlY3V0aW9uXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vcGx1Z2luLWNvbmZpZycpLlBsdWdpbkNvbmZpZ30gcGx1Z2luQ29uZmlnIC0gYSBwbHVnaW4gZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gdXNlUGx1Z2luc1xuICogQHJldHVybnMge1BsdWdpbk5hbWVNYXB9IE1hcHBpbmcgb2YgUGx1Z2luQ2xhc3MgdG8gbmFtZVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlUGx1Z2lucyhwbHVnaW5Db25maWcsIHVzZVBsdWdpbnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhwbHVnaW5Db25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcihcbiAgICAgICAgICAocGx1Z2luTmFtZSkgPT5cbiAgICAgICAgICAgIF8uaW5jbHVkZXModXNlUGx1Z2lucywgcGx1Z2luTmFtZSkgfHxcbiAgICAgICAgICAgICh1c2VQbHVnaW5zLmxlbmd0aCA9PT0gMSAmJiB1c2VQbHVnaW5zWzBdID09PSBVU0VfQUxMX1BMVUdJTlMpXG4gICAgICAgIClcbiAgICAgICAgLm1hcCgocGx1Z2luTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIHBsdWdpbiAke3BsdWdpbk5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBQbHVnaW5DbGFzcyA9IHBsdWdpbkNvbmZpZy5yZXF1aXJlKHBsdWdpbk5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtQbHVnaW5DbGFzcywgcGx1Z2luTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBwbHVnaW4gJyR7cGx1Z2luTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBwbHVnaW4gd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEZpbmQgYW55IGRyaXZlciBuYW1lIHdoaWNoIGhhcyBiZWVuIGluc3RhbGxlZCwgYW5kIHR1cm4gZWFjaCBvbmUgaW50byBpdHMgY2xhc3MsIHNvIHdlIGNhbiBzZW5kXG4gKiB0aGVtIGFzIG9iamVjdHMgdG8gdGhlIHNlcnZlciBpbml0IGluIGNhc2UgdGhleSBuZWVkIHRvIGFkZCBtZXRob2RzL3JvdXRlcyBvciB1cGRhdGUgdGhlIHNlcnZlci5cbiAqIElmIHRoZSAtLWRyaXZlcnMgZmxhZyB3YXMgZ2l2ZW4sIHRoaXMgbWV0aG9kIG9ubHkgbG9hZHMgdGhlIGdpdmVuIGRyaXZlcnMuXG4gKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnIC0gYSBkcml2ZXIgZXh0ZW5zaW9uIGNvbmZpZ1xuICogQHBhcmFtIHtzdHJpbmdbXX0gW3VzZURyaXZlcnNdIC0gb3B0aW9uYWwgbGlzdCBvZiBkcml2ZXJzIHRvIGxvYWRcbiAqIEByZXR1cm5zIHtEcml2ZXJOYW1lTWFwfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0QWN0aXZlRHJpdmVycyhkcml2ZXJDb25maWcsIHVzZURyaXZlcnMgPSBbXSkge1xuICByZXR1cm4gbmV3IE1hcChcbiAgICBfLmNvbXBhY3QoXG4gICAgICBPYmplY3Qua2V5cyhkcml2ZXJDb25maWcuaW5zdGFsbGVkRXh0ZW5zaW9ucylcbiAgICAgICAgLmZpbHRlcigoZHJpdmVyTmFtZSkgPT4gXy5pbmNsdWRlcyh1c2VEcml2ZXJzLCBkcml2ZXJOYW1lKSB8fCB1c2VEcml2ZXJzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgLm1hcCgoZHJpdmVyTmFtZSkgPT4ge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsb2cuaW5mbyhgQXR0ZW1wdGluZyB0byBsb2FkIGRyaXZlciAke2RyaXZlck5hbWV9Li4uYCk7XG4gICAgICAgICAgICBjb25zdCBEcml2ZXJDbGFzcyA9IGRyaXZlckNvbmZpZy5yZXF1aXJlKGRyaXZlck5hbWUpO1xuICAgICAgICAgICAgcmV0dXJuIFtEcml2ZXJDbGFzcywgZHJpdmVyTmFtZV07XG4gICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBsb2cuZXJyb3IoXG4gICAgICAgICAgICAgIGBDb3VsZCBub3QgbG9hZCBkcml2ZXIgJyR7ZHJpdmVyTmFtZX0nLCBzbyBpdCB3aWxsIG5vdCBiZSBhdmFpbGFibGUuIEVycm9yIGAgK1xuICAgICAgICAgICAgICAgIGBpbiBsb2FkaW5nIHRoZSBkcml2ZXIgd2FzOiAke2Vyci5tZXNzYWdlfWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBsb2cuZGVidWcoZXJyLnN0YWNrKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKVxuICApO1xufVxuXG4vKipcbiAqIEEgbWFwcGluZyBvZiB7QGxpbmtjb2RlIFBsdWdpbkNsYXNzfSBjbGFzc2VzIHRvIHRoZWlyIG5hbWVzLlxuICogQHR5cGVkZWYge01hcDxQbHVnaW5DbGFzcyxzdHJpbmc+fSBQbHVnaW5OYW1lTWFwXG4gKi9cblxuLyoqXG4gKiBBIG1hcHBpbmcgb2Yge0BsaW5rY29kZSBEcml2ZXJDbGFzc30gY2xhc3NlcyB0byB0aGVpciBuYW1lcy5cbiAqIEB0eXBlZGVmIHtNYXA8RHJpdmVyQ2xhc3Msc3RyaW5nPn0gRHJpdmVyTmFtZU1hcFxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLlBsdWdpbkNsYXNzfSBQbHVnaW5DbGFzc1xuICogQHR5cGVkZWYge2ltcG9ydCgnQGFwcGl1bS90eXBlcycpLkRyaXZlckNsYXNzfSBEcml2ZXJDbGFzc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYgRXh0ZW5zaW9uQ29uZmlnc1xuICogQHByb3BlcnR5IHtpbXBvcnQoJy4vZHJpdmVyLWNvbmZpZycpLkRyaXZlckNvbmZpZ30gZHJpdmVyQ29uZmlnXG4gKiBAcHJvcGVydHkge2ltcG9ydCgnLi9wbHVnaW4tY29uZmlnJykuUGx1Z2luQ29uZmlnfSBwbHVnaW5Db25maWdcbiAqL1xuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7OztBQUFBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOztBQUNBOzs7O0FBYU8sZUFBZUEsY0FBZixDQUE4QkMsVUFBOUIsRUFBMEM7RUFDL0MsTUFBTUMsUUFBUSxHQUFHQyxrQkFBQSxDQUFTQyxXQUFULENBQXFCSCxVQUFyQixDQUFqQjs7RUFDQSxNQUFNQyxRQUFRLENBQUNHLElBQVQsRUFBTjs7RUFDQSxNQUFNQyxZQUFZLEdBQUdDLDBCQUFBLENBQWFILFdBQWIsQ0FBeUJGLFFBQXpCLEtBQXNDSywwQkFBQSxDQUFhQyxNQUFiLENBQW9CTixRQUFwQixDQUEzRDs7RUFDQSxNQUFNTyxZQUFZLEdBQUdDLDBCQUFBLENBQWFOLFdBQWIsQ0FBeUJGLFFBQXpCLEtBQXNDUSwwQkFBQSxDQUFhRixNQUFiLENBQW9CTixRQUFwQixDQUEzRDs7RUFFQSxNQUFNUyxpQkFBQSxDQUFFQyxHQUFGLENBQU0sQ0FBQ04sWUFBWSxDQUFDTyxRQUFiLEVBQUQsRUFBMEJKLFlBQVksQ0FBQ0ksUUFBYixFQUExQixDQUFOLENBQU47RUFDQSxPQUFPO0lBQUNQLFlBQUQ7SUFBZUc7RUFBZixDQUFQO0FBQ0Q7O0FBWU0sU0FBU0ssZ0JBQVQsQ0FBMEJMLFlBQTFCLEVBQXdDTSxVQUFVLEdBQUcsRUFBckQsRUFBeUQ7RUFDOUQsT0FBTyxJQUFJQyxHQUFKLENBQ0xDLGVBQUEsQ0FBRUMsT0FBRixDQUNFQyxNQUFNLENBQUNDLElBQVAsQ0FBWVgsWUFBWSxDQUFDWSxtQkFBekIsRUFDR0MsTUFESCxDQUVLQyxVQUFELElBQ0VOLGVBQUEsQ0FBRU8sUUFBRixDQUFXVCxVQUFYLEVBQXVCUSxVQUF2QixLQUNDUixVQUFVLENBQUNVLE1BQVgsS0FBc0IsQ0FBdEIsSUFBMkJWLFVBQVUsQ0FBQyxDQUFELENBQVYsS0FBa0JXLDBCQUpwRCxFQU1HQyxHQU5ILENBTVFKLFVBQUQsSUFBZ0I7SUFDbkIsSUFBSTtNQUNGSyxlQUFBLENBQUlDLElBQUosQ0FBVSw2QkFBNEJOLFVBQVcsS0FBakQ7O01BQ0EsTUFBTU8sV0FBVyxHQUFHckIsWUFBWSxDQUFDc0IsT0FBYixDQUFxQlIsVUFBckIsQ0FBcEI7O01BQ0EsT0FBTyxDQUFDTyxXQUFELEVBQWNQLFVBQWQsQ0FBUDtJQUNELENBSkQsQ0FJRSxPQUFPUyxHQUFQLEVBQVk7TUFDWkosZUFBQSxDQUFJSyxLQUFKLENBQ0csMEJBQXlCVixVQUFXLHdDQUFyQyxHQUNHLDhCQUE2QlMsR0FBRyxDQUFDRSxPQUFRLEVBRjlDOztNQUlBTixlQUFBLENBQUlPLEtBQUosQ0FBVUgsR0FBRyxDQUFDSSxLQUFkO0lBQ0Q7RUFDRixDQWxCSCxDQURGLENBREssQ0FBUDtBQXVCRDs7QUFXTSxTQUFTQyxnQkFBVCxDQUEwQi9CLFlBQTFCLEVBQXdDZ0MsVUFBVSxHQUFHLEVBQXJELEVBQXlEO0VBQzlELE9BQU8sSUFBSXRCLEdBQUosQ0FDTEMsZUFBQSxDQUFFQyxPQUFGLENBQ0VDLE1BQU0sQ0FBQ0MsSUFBUCxDQUFZZCxZQUFZLENBQUNlLG1CQUF6QixFQUNHQyxNQURILENBQ1dpQixVQUFELElBQWdCdEIsZUFBQSxDQUFFTyxRQUFGLENBQVdjLFVBQVgsRUFBdUJDLFVBQXZCLEtBQXNDRCxVQUFVLENBQUNiLE1BQVgsS0FBc0IsQ0FEdEYsRUFFR0UsR0FGSCxDQUVRWSxVQUFELElBQWdCO0lBQ25CLElBQUk7TUFDRlgsZUFBQSxDQUFJQyxJQUFKLENBQVUsNkJBQTRCVSxVQUFXLEtBQWpEOztNQUNBLE1BQU1DLFdBQVcsR0FBR2xDLFlBQVksQ0FBQ3lCLE9BQWIsQ0FBcUJRLFVBQXJCLENBQXBCOztNQUNBLE9BQU8sQ0FBQ0MsV0FBRCxFQUFjRCxVQUFkLENBQVA7SUFDRCxDQUpELENBSUUsT0FBT1AsR0FBUCxFQUFZO01BQ1pKLGVBQUEsQ0FBSUssS0FBSixDQUNHLDBCQUF5Qk0sVUFBVyx3Q0FBckMsR0FDRyw4QkFBNkJQLEdBQUcsQ0FBQ0UsT0FBUSxFQUY5Qzs7TUFJQU4sZUFBQSxDQUFJTyxLQUFKLENBQVVILEdBQUcsQ0FBQ0ksS0FBZDtJQUNEO0VBQ0YsQ0FkSCxDQURGLENBREssQ0FBUDtBQW1CRCJ9
87
+ exports.getActiveDrivers = getActiveDrivers;
88
+ /**
89
+ * A mapping of {@linkcode PluginClass} classes to their names.
90
+ * @typedef {Map<PluginClass,string>} PluginNameMap
91
+ */
92
+ /**
93
+ * A mapping of {@linkcode DriverClass} classes to their names.
94
+ * @typedef {Map<DriverClass,string>} DriverNameMap
95
+ */
96
+ /**
97
+ * @typedef {import('@appium/types').PluginClass} PluginClass
98
+ * @typedef {import('@appium/types').DriverClass} DriverClass
99
+ */
100
+ /**
101
+ * @typedef ExtensionConfigs
102
+ * @property {import('./driver-config').DriverConfig} driverConfig
103
+ * @property {import('./plugin-config').PluginConfig} pluginConfig
104
+ */
105
+ //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["loadExtensions","appiumHome","manifest","Manifest","getInstance","read","driverConfig","DriverConfig","create","pluginConfig","PluginConfig","B","all","validate","getActivePlugins","usePlugins","Map","_","compact","Object","keys","installedExtensions","filter","pluginName","includes","length","USE_ALL_PLUGINS","map","log","info","PluginClass","require","err","error","message","debug","stack","getActiveDrivers","useDrivers","driverName","DriverClass"],"sources":["../../../lib/extension/index.js"],"sourcesContent":["import _ from 'lodash';\nimport {USE_ALL_PLUGINS} from '../constants';\nimport log from '../logger';\nimport {DriverConfig} from './driver-config';\nimport {Manifest} from './manifest';\nimport {PluginConfig} from './plugin-config';\nimport B from 'bluebird';\n\n/**\n * Loads extensions and creates `ExtensionConfig` instances.\n *\n * - Reads the manifest file, creating if necessary\n * - Using the parsed extension data, creates/gets the `ExtensionConfig` subclass instances\n * - Returns these instances\n *\n * If `appiumHome` is needed, use `resolveAppiumHome` from the `env` module in `@appium/support`.\n * @param {string} appiumHome\n * @returns {Promise<ExtensionConfigs>}\n */\nexport async function loadExtensions(appiumHome) {\n const manifest = Manifest.getInstance(appiumHome);\n await manifest.read();\n const driverConfig = DriverConfig.getInstance(manifest) ?? DriverConfig.create(manifest);\n const pluginConfig = PluginConfig.getInstance(manifest) ?? PluginConfig.create(manifest);\n\n await B.all([driverConfig.validate(), pluginConfig.validate()]);\n return {driverConfig, pluginConfig};\n}\n\n/**\n * Find any plugin name which has been installed, and which has been requested for activation by\n * using the --use-plugins flag, and turn each one into its class, so we can send them as objects\n * to the server init. We also want to send/assign them to the umbrella driver so it can use them\n * to wrap command execution\n *\n * @param {import('./plugin-config').PluginConfig} pluginConfig - a plugin extension config\n * @param {string[]} usePlugins\n * @returns {PluginNameMap} Mapping of PluginClass to name\n */\nexport function getActivePlugins(pluginConfig, usePlugins = []) {\n return new Map(\n _.compact(\n Object.keys(pluginConfig.installedExtensions)\n .filter(\n (pluginName) =>\n _.includes(usePlugins, pluginName) ||\n (usePlugins.length === 1 && usePlugins[0] === USE_ALL_PLUGINS)\n )\n .map((pluginName) => {\n try {\n log.info(`Attempting to load plugin ${pluginName}...`);\n const PluginClass = pluginConfig.require(pluginName);\n return [PluginClass, pluginName];\n } catch (err) {\n log.error(\n `Could not load plugin '${pluginName}', so it will not be available. Error ` +\n `in loading the plugin was: ${err.message}`\n );\n log.debug(err.stack);\n }\n })\n )\n );\n}\n\n/**\n * Find any driver name which has been installed, and turn each one into its class, so we can send\n * them as objects to the server init in case they need to add methods/routes or update the server.\n * If the --drivers flag was given, this method only loads the given drivers.\n *\n * @param {import('./driver-config').DriverConfig} driverConfig - a driver extension config\n * @param {string[]} [useDrivers] - optional list of drivers to load\n * @returns {DriverNameMap}\n */\nexport function getActiveDrivers(driverConfig, useDrivers = []) {\n return new Map(\n _.compact(\n Object.keys(driverConfig.installedExtensions)\n .filter((driverName) => _.includes(useDrivers, driverName) || useDrivers.length === 0)\n .map((driverName) => {\n try {\n log.info(`Attempting to load driver ${driverName}...`);\n const DriverClass = driverConfig.require(driverName);\n return [DriverClass, driverName];\n } catch (err) {\n log.error(\n `Could not load driver '${driverName}', so it will not be available. Error ` +\n `in loading the driver was: ${err.message}`\n );\n log.debug(err.stack);\n }\n })\n )\n );\n}\n\n/**\n * A mapping of {@linkcode PluginClass} classes to their names.\n * @typedef {Map<PluginClass,string>} PluginNameMap\n */\n\n/**\n * A mapping of {@linkcode DriverClass} classes to their names.\n * @typedef {Map<DriverClass,string>} DriverNameMap\n */\n\n/**\n * @typedef {import('@appium/types').PluginClass} PluginClass\n * @typedef {import('@appium/types').DriverClass} DriverClass\n */\n\n/**\n * @typedef ExtensionConfigs\n * @property {import('./driver-config').DriverConfig} driverConfig\n * @property {import('./plugin-config').PluginConfig} pluginConfig\n */\n"],"mappings":";;;;;;;;;;;AAAA;;AACA;;AACA;;AACA;;AACA;;AACA;;AACA;;;;AAaO,eAAeA,cAAf,CAA8BC,UAA9B,EAA0C;EAC/C,MAAMC,QAAQ,GAAGC,kBAAA,CAASC,WAAT,CAAqBH,UAArB,CAAjB;;EACA,MAAMC,QAAQ,CAACG,IAAT,EAAN;;EACA,MAAMC,YAAY,GAAGC,0BAAA,CAAaH,WAAb,CAAyBF,QAAzB,KAAsCK,0BAAA,CAAaC,MAAb,CAAoBN,QAApB,CAA3D;;EACA,MAAMO,YAAY,GAAGC,0BAAA,CAAaN,WAAb,CAAyBF,QAAzB,KAAsCQ,0BAAA,CAAaF,MAAb,CAAoBN,QAApB,CAA3D;;EAEA,MAAMS,iBAAA,CAAEC,GAAF,CAAM,CAACN,YAAY,CAACO,QAAb,EAAD,EAA0BJ,YAAY,CAACI,QAAb,EAA1B,CAAN,CAAN;EACA,OAAO;IAACP,YAAD;IAAeG;EAAf,CAAP;AACD;;AAYM,SAASK,gBAAT,CAA0BL,YAA1B,EAAwCM,UAAU,GAAG,EAArD,EAAyD;EAC9D,OAAO,IAAIC,GAAJ,CACLC,eAAA,CAAEC,OAAF,CACEC,MAAM,CAACC,IAAP,CAAYX,YAAY,CAACY,mBAAzB,EACGC,MADH,CAEKC,UAAD,IACEN,eAAA,CAAEO,QAAF,CAAWT,UAAX,EAAuBQ,UAAvB,KACCR,UAAU,CAACU,MAAX,KAAsB,CAAtB,IAA2BV,UAAU,CAAC,CAAD,CAAV,KAAkBW,0BAJpD,EAMGC,GANH,CAMQJ,UAAD,IAAgB;IACnB,IAAI;MACFK,eAAA,CAAIC,IAAJ,CAAU,6BAA4BN,UAAW,KAAjD;;MACA,MAAMO,WAAW,GAAGrB,YAAY,CAACsB,OAAb,CAAqBR,UAArB,CAApB;;MACA,OAAO,CAACO,WAAD,EAAcP,UAAd,CAAP;IACD,CAJD,CAIE,OAAOS,GAAP,EAAY;MACZJ,eAAA,CAAIK,KAAJ,CACG,0BAAyBV,UAAW,wCAArC,GACG,8BAA6BS,GAAG,CAACE,OAAQ,EAF9C;;MAIAN,eAAA,CAAIO,KAAJ,CAAUH,GAAG,CAACI,KAAd;IACD;EACF,CAlBH,CADF,CADK,CAAP;AAuBD;;AAWM,SAASC,gBAAT,CAA0B/B,YAA1B,EAAwCgC,UAAU,GAAG,EAArD,EAAyD;EAC9D,OAAO,IAAItB,GAAJ,CACLC,eAAA,CAAEC,OAAF,CACEC,MAAM,CAACC,IAAP,CAAYd,YAAY,CAACe,mBAAzB,EACGC,MADH,CACWiB,UAAD,IAAgBtB,eAAA,CAAEO,QAAF,CAAWc,UAAX,EAAuBC,UAAvB,KAAsCD,UAAU,CAACb,MAAX,KAAsB,CADtF,EAEGE,GAFH,CAEQY,UAAD,IAAgB;IACnB,IAAI;MACFX,eAAA,CAAIC,IAAJ,CAAU,6BAA4BU,UAAW,KAAjD;;MACA,MAAMC,WAAW,GAAGlC,YAAY,CAACyB,OAAb,CAAqBQ,UAArB,CAApB;;MACA,OAAO,CAACC,WAAD,EAAcD,UAAd,CAAP;IACD,CAJD,CAIE,OAAOP,GAAP,EAAY;MACZJ,eAAA,CAAIK,KAAJ,CACG,0BAAyBM,UAAW,wCAArC,GACG,8BAA6BP,GAAG,CAACE,OAAQ,EAF9C;;MAIAN,eAAA,CAAIO,KAAJ,CAAUH,GAAG,CAACI,KAAd;IACD;EACF,CAdH,CADF,CADK,CAAP;AAmBD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/extension/index.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Applies a series of migration functions to a manifest to update its manifest schema version.
3
+ *
4
+ * `data` is modified in-place.
5
+ *
6
+ * @param {Manifest} manifest
7
+ * @param {AnyManifestDataVersion} data
8
+ * @returns {Promise<boolean>} If `true` existing packages should be synced from disk and the manifest should be persisted.
9
+ */
10
+ export function migrate(manifest: Manifest, data: AnyManifestDataVersion): Promise<boolean>;
11
+ /**
12
+ * Migration functions take a {@linkcode Manifest } and its data and **mutates `data` in-place**.
13
+ *
14
+ * A migration function should not modify `schemaRev`, as this is done automatically.
15
+ *
16
+ * A migration function can also call out to, say, {@linkcode Manifest.syncWithInstalledExtensions }, which
17
+ * may apply the mutation itself.
18
+ *
19
+ * Note that at the time of writing, we're not able to determine the version of the _current_ manifest file if there is no `schemaRev` prop present (and we may not want to trust it anyway).
20
+ */
21
+ export type Migration = (data: AnyManifestDataVersion, manifest: Manifest) => boolean | Promise<boolean>;
22
+ export type ManifestData = import('appium/types').ManifestData;
23
+ export type AnyManifestDataVersion = import('appium/types').AnyManifestDataVersion;
24
+ export type ManifestDataVersions = import('appium/types').ManifestDataVersions;
25
+ export type ManifestDataV2 = import('appium/types').ManifestV2.ManifestData;
26
+ export type Manifest = import('./manifest').Manifest;
27
+ //# sourceMappingURL=manifest-migrations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-migrations.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest-migrations.js"],"names":[],"mappings":"AAqDA;;;;;;;;GAQG;AACH,kCAJW,QAAQ,QACR,sBAAsB,GACpB,QAAQ,OAAO,CAAC,CAe5B;;;;;;;;;;;+BAYU,sBAAsB,YACtB,QAAQ,KACN,OAAO,GAAC,QAAQ,OAAO,CAAC;2BAIxB,OAAO,cAAc,EAAE,YAAY;qCACnC,OAAO,cAAc,EAAE,sBAAsB;mCAC7C,OAAO,cAAc,EAAE,oBAAoB;6BAC3C,OAAO,cAAc,EAAE,UAAU,CAAC,YAAY;uBAC9C,OAAO,YAAY,EAAE,QAAQ"}
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.migrate = void 0;
7
+ const logger_1 = __importDefault(require("../logger"));
8
+ /**
9
+ * This contains logic to migrate old versions of `extensions.yaml` to new versions.
10
+ *
11
+ * @module
12
+ */
13
+ /**
14
+ * Constant for v3 of the schema rev.
15
+ */
16
+ const SCHEMA_REV_3 = 3;
17
+ /**
18
+ * Collection of functions to migrate from one version to another
19
+ * @type {{[P in keyof ManifestDataVersions]?: Migration}}
20
+ */
21
+ const Migrations = {
22
+ /**
23
+ * If `installPath` is missing from the `ExtManifest` for any extension, return `true`.
24
+ *
25
+ * We cannot easily determine the path of any given extension here, but returning `true`
26
+ * will cause the `Manifest` to sync with the filesystem, which will populate the missing field.
27
+ *
28
+ * @type {Migration}
29
+ */
30
+ [SCHEMA_REV_3]: (data) => {
31
+ let shouldSync = false;
32
+ const allExtData = [...Object.values(data.drivers), ...Object.values(data.plugins)];
33
+ for (const metadata of allExtData) {
34
+ if (!('installPath' in metadata)) {
35
+ shouldSync = true;
36
+ break;
37
+ }
38
+ }
39
+ return shouldSync;
40
+ },
41
+ };
42
+ /**
43
+ * Set `schemaRev` to a specific version
44
+ * @param {AnyManifestDataVersion} data
45
+ * @param {keyof ManifestDataVersions} version
46
+ * @returns {boolean} Whether the data was modified
47
+ */
48
+ function setSchemaRev(data, version) {
49
+ if (data.schemaRev ?? 0 < version) {
50
+ data.schemaRev = version;
51
+ return true;
52
+ }
53
+ return false;
54
+ }
55
+ /**
56
+ * Applies a series of migration functions to a manifest to update its manifest schema version.
57
+ *
58
+ * `data` is modified in-place.
59
+ *
60
+ * @param {Manifest} manifest
61
+ * @param {AnyManifestDataVersion} data
62
+ * @returns {Promise<boolean>} If `true` existing packages should be synced from disk and the manifest should be persisted.
63
+ */
64
+ async function migrate(manifest, data) {
65
+ let didChange = false;
66
+ for await (const [v, migration] of Object.entries(Migrations)) {
67
+ const version = /** @type {keyof ManifestDataVersions} */ (Number(v));
68
+ didChange = (await migration(data, manifest)) || didChange;
69
+ didChange = setSchemaRev(data, version) || didChange;
70
+ }
71
+ if (didChange) {
72
+ // this is not _technically_ true, since we don't actually write the file here.
73
+ logger_1.default.info(`Upgraded extension manifest to schema v${data.schemaRev}`);
74
+ }
75
+ return didChange;
76
+ }
77
+ exports.migrate = migrate;
78
+ /**
79
+ * Migration functions take a {@linkcode Manifest} and its data and **mutates `data` in-place**.
80
+ *
81
+ * A migration function should not modify `schemaRev`, as this is done automatically.
82
+ *
83
+ * A migration function can also call out to, say, {@linkcode Manifest.syncWithInstalledExtensions}, which
84
+ * may apply the mutation itself.
85
+ *
86
+ * Note that at the time of writing, we're not able to determine the version of the _current_ manifest file if there is no `schemaRev` prop present (and we may not want to trust it anyway).
87
+ * @callback Migration
88
+ * @param {AnyManifestDataVersion} data - The raw data from `Manifest`
89
+ * @param {Manifest} manifest - The `Manifest` instance
90
+ * @returns {boolean|Promise<boolean>} If `true`, then something changed
91
+ */
92
+ /**
93
+ * @typedef {import('appium/types').ManifestData} ManifestData
94
+ * @typedef {import('appium/types').AnyManifestDataVersion} AnyManifestDataVersion
95
+ * @typedef {import('appium/types').ManifestDataVersions} ManifestDataVersions
96
+ * @typedef {import('appium/types').ManifestV2.ManifestData} ManifestDataV2
97
+ * @typedef {import('./manifest').Manifest} Manifest
98
+ */
99
+ //# sourceMappingURL=manifest-migrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest-migrations.js","sourceRoot":"","sources":["../../../lib/extension/manifest-migrations.js"],"names":[],"mappings":";;;;;;AAAA,uDAA4B;AAE5B;;;;GAIG;AAEH;;GAEG;AACH,MAAM,YAAY,GAAG,CAAC,CAAC;AAEvB;;;GAGG;AACH,MAAM,UAAU,GAAG;IACjB;;;;;;;OAOG;IACH,CAAC,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE;QACvB,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,MAAM,UAAU,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QACpF,KAAK,MAAM,QAAQ,IAAI,UAAU,EAAE;YACjC,IAAI,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC,EAAE;gBAChC,UAAU,GAAG,IAAI,CAAC;gBAClB,MAAM;aACP;SACF;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;CACF,CAAC;AAEF;;;;;GAKG;AACH,SAAS,YAAY,CAAC,IAAI,EAAE,OAAO;IACjC,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,GAAG,OAAO,EAAE;QACjC,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC;QACzB,OAAO,IAAI,CAAC;KACb;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;GAQG;AACI,KAAK,UAAU,OAAO,CAAC,QAAQ,EAAE,IAAI;IAC1C,IAAI,SAAS,GAAG,KAAK,CAAC;IACtB,IAAI,KAAK,EAAE,MAAM,CAAC,CAAC,EAAE,SAAS,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE;QAC7D,MAAM,OAAO,GAAG,yCAAyC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACtE,SAAS,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,IAAI,SAAS,CAAC;QAC3D,SAAS,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC;KACtD;IAED,IAAI,SAAS,EAAE;QACb,+EAA+E;QAC/E,gBAAG,CAAC,IAAI,CAAC,0CAA0C,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;KACtE;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAbD,0BAaC;AAED;;;;;;;;;;;;;GAaG;AAEH;;;;;;GAMG"}
@@ -20,48 +20,6 @@ export class Manifest {
20
20
  * @private
21
21
  */
22
22
  private constructor();
23
- /**
24
- * The entire contents of a parsed YAML extension config file.
25
- *
26
- * Contains proxies for automatic persistence on disk
27
- * @type {ManifestData}
28
- * @private
29
- */
30
- private _data;
31
- /**
32
- * Path to `APPIUM_HOME`.
33
- * @private
34
- * @type {Readonly<string>}
35
- */
36
- private _appiumHome;
37
- /**
38
- * Path to `extensions.yaml`
39
- * @type {string}
40
- * Not set until {@link Manifest.read} is called.
41
- */
42
- _manifestPath: string;
43
- /**
44
- * Helps avoid writing multiple times.
45
- *
46
- * If this is `undefined`, calling {@link Manifest.write} will cause it to be
47
- * set to a `Promise`. When the call to `write()` is complete, the `Promise`
48
- * will resolve and then this value will be set to `undefined`. Concurrent calls
49
- * made while this value is a `Promise` will return the `Promise` itself.
50
- * @private
51
- * @type {Promise<boolean>|undefined}
52
- */
53
- private _writing;
54
- /**
55
- * Helps avoid reading multiple times.
56
- *
57
- * If this is `undefined`, calling {@link Manifest.read} will cause it to be
58
- * set to a `Promise`. When the call to `read()` is complete, the `Promise`
59
- * will resolve and then this value will be set to `undefined`. Concurrent calls
60
- * made while this value is a `Promise` will return the `Promise` itself.
61
- * @private
62
- * @type {Promise<void>|undefined}
63
- */
64
- private _reading;
65
23
  /**
66
24
  * Searches `APPIUM_HOME` for installed extensions and adds them to the manifest.
67
25
  * @returns {Promise<boolean>} `true` if any extensions were added, `false` otherwise.
@@ -102,11 +60,11 @@ export class Manifest {
102
60
  */
103
61
  addExtension<ExtType_1 extends import("@appium/types").ExtensionType>(extType: ExtType_1, extName: string, extData: ExtManifest<ExtType_1>): ExtManifest<ExtType_1>;
104
62
  /**
105
- * Returns the APPIUM_HOME path
63
+ * Returns the `APPIUM_HOME` path
106
64
  */
107
65
  get appiumHome(): string;
108
66
  /**
109
- * Returns the path to the manifest file
67
+ * Returns the path to the manifest file (`extensions.yaml`)
110
68
  */
111
69
  get manifestPath(): string;
112
70
  /**
@@ -124,18 +82,10 @@ export class Manifest {
124
82
  *
125
83
  * If `APPIUM_HOME` contains a `package.json` with an `appium` dependency, then a hash of the `package.json` will be taken. If this hash differs from the last hash, the contents of `APPIUM_HOME/node_modules` will be scanned for extensions that may have been installed outside of the `appium` CLI. Any found extensions will be added to the manifest file, and if so, the manifest file will be written to disk.
126
84
  *
127
- * Only one read operation should happen at a time. This is controlled via the {@link Manifest._reading} property.
85
+ * Only one read operation should happen at a time.
128
86
  * @returns {Promise<ManifestData>} The data
129
87
  */
130
88
  read(): Promise<ManifestData>;
131
- /**
132
- * Ensures {@link Manifest._manifestPath} is set.
133
- *
134
- * Creates the directory if necessary.
135
- * @private
136
- * @returns {Promise<string>}
137
- */
138
- private _setManifestPath;
139
89
  /**
140
90
  * Writes the data if it need s writing.
141
91
  *
@@ -145,6 +95,7 @@ export class Manifest {
145
95
  * @returns {Promise<boolean>} Whether the data was written
146
96
  */
147
97
  write(): Promise<boolean>;
98
+ #private;
148
99
  }
149
100
  /**
150
101
  * Type of the string referring to a driver (typically as a key or type string)
@@ -162,9 +113,9 @@ export type SyncWithInstalledExtensionsOpts = {
162
113
  };
163
114
  export type ManifestData = import('appium/types').ManifestData;
164
115
  export type InternalMetadata = import('appium/types').InternalMetadata;
165
- export type ExtPackageJson<T> = import('appium/types').ExtPackageJson<T>;
166
- export type ExtManifest<T> = import('appium/types').ExtManifest<T>;
167
- export type ExtRecord<T> = import('appium/types').ExtRecord<T>;
116
+ export type ExtPackageJson<ExtType extends import("@appium/types").ExtensionType> = import('appium/types').ExtPackageJson<ExtType>;
117
+ export type ExtManifest<ExtType extends import("@appium/types").ExtensionType> = import('appium/types').ExtManifest<ExtType>;
118
+ export type ExtRecord<ExtType extends import("@appium/types").ExtensionType> = import('appium/types').ExtRecord<ExtType>;
168
119
  /**
169
120
  * Either `driver` or `plugin` rn
170
121
  */
@@ -1 +1 @@
1
- {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"AAoFA;;;;GAIG;AACH;IA4DE;;;;;;OAMG;IACH,yEAEG;IArBH;;;;;;OAMG;IACH,sBAGC;IAzDD;;;;;;OAMG;IACH,cAAM;IAEN;;;;OAIG;IACH,oBAAY;IAEZ;;;;OAIG;IACH,eAHU,MAAM,CAGF;IAEd;;;;;;;;;OASG;IACH,iBAAS;IAET;;;;;;;;;OASG;IACH,iBAAS;IAyBT;;;OAGG;IACH,+BAFa,QAAQ,OAAO,CAAC,CAqD5B;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,0HAHW,MAAM,GACJ,OAAO,CAuCnB;IAED;;;;;;;;;;OAUG;IACH,mGAJW,MAAM,2DAQhB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;;;OAMG;IACH,oHAEC;IAED;;;;;;;;;OASG;IACH,QAFa,QAAQ,YAAY,CAAC,CAuDjC;IAED;;;;;;OAMG;IACH,yBAaC;IAED;;;;;;;OAOG;IACH,SAFa,QAAQ,OAAO,CAAC,CAgC5B;CACF;;;;yBAIY,OAAO,eAAe,EAAE,UAAU;;;;yBAKlC,OAAO,eAAe,EAAE,UAAU;;;;;;;2BASlC,OAAO,cAAc,EAAE,YAAY;+BACnC,OAAO,cAAc,EAAE,gBAAgB;gCAKvC,OAAO,cAAc,EAAE,cAAc,CAAC,CAAC,CAAC;6BAKxC,OAAO,cAAc,EAAE,WAAW,CAAC,CAAC,CAAC;2BAKrC,OAAO,cAAc,EAAE,SAAS,CAAC,CAAC,CAAC;;;;4BAKnC,OAAO,eAAe,EAAE,aAAa"}
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../../../lib/extension/manifest.js"],"names":[],"mappings":"AAgFA;;;;GAIG;AACH;IAwDE;;;;;;OAMG;IACH,yEAEG;IArBH;;;;;;OAMG;IACH,sBAGC;IAaD;;;OAGG;IACH,+BAFa,QAAQ,OAAO,CAAC,CAqD5B;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,gBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;;;;OAQG;IACH,0HAHW,MAAM,GACJ,OAAO,CAwCnB;IAED;;;;;;;;;;OAUG;IACH,mGAJW,MAAM,2DAQhB;IAED;;OAEG;IACH,yBAEC;IAED;;OAEG;IACH,2BAEC;IAED;;;;;;OAMG;IACH,oHAEC;IAED;;;;;;;;;OASG;IACH,QAFa,QAAQ,YAAY,CAAC,CAmEjC;IAyBD;;;;;;;OAOG;IACH,SAFa,QAAQ,OAAO,CAAC,CAiC5B;;CACF;;;;yBAIY,OAAO,eAAe,EAAE,UAAU;;;;yBAKlC,OAAO,eAAe,EAAE,UAAU;;;;;;;2BASlC,OAAO,cAAc,EAAE,YAAY;+BACnC,OAAO,cAAc,EAAE,gBAAgB;oFAKvC,OAAO,cAAc,EAAE,cAAc,CAAC,OAAO,CAAC;iFAK9C,OAAO,cAAc,EAAE,WAAW,CAAC,OAAO,CAAC;+EAK3C,OAAO,cAAc,EAAE,SAAS,CAAC,OAAO,CAAC;;;;4BAKzC,OAAO,eAAe,EAAE,aAAa"}