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":"main.js","names":["resolveAppiumHome","env","preflightChecks","args","throwInsteadOfExit","checkNodeOk","checkNpmOk","longStacktrace","require","async_trace_limit","showBuildInfo","process","exit","warnNodeDeprecations","validate","tmpDir","validateTmpDir","err","logger","error","message","red","logNonDefaultArgsWarning","info","inspect","logDefaultCapabilitiesWarning","caps","logStartupInfo","welcome","APPIUM_VER","appiumRev","getGitRev","showArgs","getNonDefaultServerArgs","_","size","isEmpty","defaultCapabilities","logServerPort","address","port","logMessage","getServerUpdaters","driverClasses","pluginClasses","compact","map","keys","getExtraMethodMap","reduce","klass","newMethodMap","areServerCommandArgs","subcommand","SERVER_SUBCOMMAND","init","appiumHome","adjustNodePath","driverConfig","pluginConfig","loadExtensions","parser","getParser","preConfigArgs","parseArgs","configResult","readConfigFile","configFile","errors","Error","filepath","reason","defaults","getDefaultsForSchema","serverArgs","defaultsDeep","config","server","showConfig","logsinkInit","logFilters","issues","rules","logFactory","loadSecureValuesPreprocessingRules","JSON","stringify","warn","util","pluralize","length","appiumDriver","AppiumDriver","parsedArgs","extensionCommandArgs","DRIVER_TYPE","runExtensionCommand","PLUGIN_TYPE","main","getActivePlugins","usePlugins","routeConfiguringFunction","makeRouter","getActiveDrivers","useDrivers","serverUpdaters","extraMethodMap","serverOpts","hostname","allowCors","basePath","cliArgs","keepAliveTimeout","baseServer","debug","stack","nodeconfig","registerNode","close","signal","once","onSignal","deleteAllSessions","force","e","print","values","module","asyncify"],"sources":["../../lib/main.js"],"sourcesContent":["#!/usr/bin/env node\n\nimport {init as logsinkInit} from './logsink'; // this import needs to come first since it sets up global npmlog\nimport logger from './logger'; // logger needs to remain second\n// @ts-ignore\nimport {routeConfiguringFunction as makeRouter, server as baseServer} from '@appium/base-driver';\nimport {logger as logFactory, util, env} from '@appium/support';\nimport {asyncify} from 'asyncbox';\nimport _ from 'lodash';\nimport {AppiumDriver} from './appium';\nimport {runExtensionCommand} from './cli/extension';\nimport {getParser} from './cli/parser';\nimport {\n APPIUM_VER,\n checkNodeOk,\n getGitRev,\n getNonDefaultServerArgs,\n showConfig,\n showBuildInfo,\n validateTmpDir,\n warnNodeDeprecations,\n checkNpmOk,\n} from './config';\nimport {readConfigFile} from './config-file';\nimport {loadExtensions, getActivePlugins, getActiveDrivers} from './extension';\nimport {DRIVER_TYPE, PLUGIN_TYPE, SERVER_SUBCOMMAND} from './constants';\nimport registerNode from './grid-register';\nimport {getDefaultsForSchema, validate} from './schema/schema';\nimport {inspect, adjustNodePath} from './utils';\n\nconst {resolveAppiumHome} = env;\n\n/**\n *\n * @param {ParsedArgs} args\n * @param {boolean} [throwInsteadOfExit]\n */\nasync function preflightChecks(args, throwInsteadOfExit = false) {\n try {\n checkNodeOk();\n await checkNpmOk();\n if (args.longStacktrace) {\n require('longjohn').async_trace_limit = -1;\n }\n if (args.showBuildInfo) {\n await showBuildInfo();\n process.exit(0);\n }\n warnNodeDeprecations();\n\n validate(args);\n\n if (args.tmpDir) {\n await validateTmpDir(args.tmpDir);\n }\n } catch (err) {\n logger.error(err.message.red);\n if (throwInsteadOfExit) {\n throw err;\n }\n\n process.exit(1);\n }\n}\n\n/**\n * @param {Args} args\n */\nfunction logNonDefaultArgsWarning(args) {\n logger.info('Non-default server args:');\n inspect(args);\n}\n\n/**\n * @param {Args['defaultCapabilities']} caps\n */\nfunction logDefaultCapabilitiesWarning(caps) {\n logger.info(\n 'Default capabilities, which will be added to each request ' +\n 'unless overridden by desired capabilities:'\n );\n inspect(caps);\n}\n\n/**\n * @param {ParsedArgs} args\n */\nasync function logStartupInfo(args) {\n let welcome = `Welcome to Appium v${APPIUM_VER}`;\n let appiumRev = await getGitRev();\n if (appiumRev) {\n welcome += ` (REV ${appiumRev})`;\n }\n logger.info(welcome);\n\n let showArgs = getNonDefaultServerArgs(args);\n if (_.size(showArgs)) {\n logNonDefaultArgsWarning(showArgs);\n }\n if (!_.isEmpty(args.defaultCapabilities)) {\n logDefaultCapabilitiesWarning(args.defaultCapabilities);\n }\n // TODO: bring back loglevel reporting below once logger is flushed out\n // logger.info('Console LogLevel: ' + logger.transports.console.level);\n // if (logger.transports.file) {\n // logger.info('File LogLevel: ' + logger.transports.file.level);\n // }\n}\n\n/**\n * Logs the address and port the server is listening on\n * @param {string} address - Address\n * @param {number} port - Port\n * @returns {void}\n */\nfunction logServerPort(address, port) {\n let logMessage = `Appium REST http interface listener started on ` + `${address}:${port}`;\n logger.info(logMessage);\n}\n\n/**\n * Gets a list of `updateServer` functions from all extensions\n * @param {DriverNameMap} driverClasses\n * @param {PluginNameMap} pluginClasses\n * @returns {import('@appium/types').UpdateServerCallback[]}\n */\nfunction getServerUpdaters(driverClasses, pluginClasses) {\n return _.compact(_.map([...driverClasses.keys(), ...pluginClasses.keys()], 'updateServer'));\n}\n\n/**\n * Makes a big `MethodMap` from all the little `MethodMap`s in the extensions\n * @param {DriverNameMap} driverClasses\n * @param {PluginNameMap} pluginClasses\n * @returns {import('@appium/types').MethodMap}\n */\nfunction getExtraMethodMap(driverClasses, pluginClasses) {\n return [...driverClasses.keys(), ...pluginClasses.keys()].reduce(\n (map, klass) => ({\n ...map,\n ...(klass.newMethodMap ?? {}),\n }),\n {}\n );\n}\n\n/**\n * @template [T=WithServerSubcommand]\n * @param {Args<T>} args\n * @returns {args is Args<WithServerSubcommand>}\n */\nfunction areServerCommandArgs(args) {\n return args.subcommand === SERVER_SUBCOMMAND;\n}\n\n/**\n * Initializes Appium, but does not start the server.\n *\n * Use this to get at the configuration schema.\n *\n * If `args` contains a non-empty `subcommand` which is not `server`, this function will return an empty object.\n *\n * @template [T=WithServerSubcommand]\n * @param {Args<T>} [args] - Partial args (progammatic usage only)\n * @returns {Promise<ServerInitResult | ExtCommandInitResult>}\n * @example\n * import {init, getSchema} from 'appium';\n * const options = {}; // config object\n * await init(options);\n * const schema = getSchema(); // entire config schema including plugins and drivers\n */\nasync function init(args) {\n const appiumHome = args?.appiumHome ?? (await resolveAppiumHome());\n\n adjustNodePath();\n\n const {driverConfig, pluginConfig} = await loadExtensions(appiumHome);\n\n const parser = getParser();\n let throwInsteadOfExit = false;\n /** @type {Args<T>} */\n let preConfigArgs;\n\n if (args) {\n // if we have a containing package instead of running as a CLI process,\n // that package might not appreciate us calling 'process.exit' willy-\n // nilly, so give it the option to have us throw instead of exit\n if (args.throwInsteadOfExit) {\n throwInsteadOfExit = true;\n // but remove it since it's not a real server arg per se\n delete args.throwInsteadOfExit;\n }\n preConfigArgs = {...args, subcommand: args.subcommand ?? SERVER_SUBCOMMAND};\n } else {\n // otherwise parse from CLI\n preConfigArgs = /** @type {Args<T>} */ (parser.parseArgs());\n }\n\n const configResult = await readConfigFile(preConfigArgs.configFile);\n\n if (!_.isEmpty(configResult.errors)) {\n throw new Error(\n `Errors in config file ${configResult.filepath}:\\n ${\n configResult.reason ?? configResult.errors\n }`\n );\n }\n\n // merge config and apply defaults.\n // the order of precendece is:\n // 1. command line args\n // 2. config file\n // 3. defaults from config file.\n if (areServerCommandArgs(preConfigArgs)) {\n const defaults = getDefaultsForSchema(false);\n\n /** @type {ParsedArgs} */\n const serverArgs = _.defaultsDeep(preConfigArgs, configResult.config?.server, defaults);\n\n if (preConfigArgs.showConfig) {\n showConfig(getNonDefaultServerArgs(preConfigArgs), configResult, defaults, serverArgs);\n return {};\n }\n\n await logsinkInit(serverArgs);\n\n if (serverArgs.logFilters) {\n const {issues, rules} = await logFactory.loadSecureValuesPreprocessingRules(\n serverArgs.logFilters\n );\n if (!_.isEmpty(issues)) {\n throw new Error(\n `The log filtering rules config '${serverArgs.logFilters}' has issues: ` +\n JSON.stringify(issues, null, 2)\n );\n }\n if (_.isEmpty(rules)) {\n logger.warn(\n `Found no log filtering rules in '${serverArgs.logFilters}'. Is that expected?`\n );\n } else {\n logger.info(\n `Loaded ${util.pluralize('filtering rule', rules.length, true)} from '${\n serverArgs.logFilters\n }'`\n );\n }\n }\n\n const appiumDriver = new AppiumDriver(serverArgs);\n // set the config on the umbrella driver so it can match drivers to caps\n appiumDriver.driverConfig = driverConfig;\n await preflightChecks(serverArgs, throwInsteadOfExit);\n\n return /** @type {ServerInitResult} */ ({\n appiumDriver,\n parsedArgs: serverArgs,\n driverConfig,\n pluginConfig,\n });\n } else {\n const extensionCommandArgs = /** @type {Args<import('appium/types').WithExtSubcommand>} */ (\n preConfigArgs\n );\n // if the user has requested the 'driver' CLI, don't run the normal server,\n // but instead pass control to the driver CLI\n if (preConfigArgs.subcommand === DRIVER_TYPE) {\n await runExtensionCommand(extensionCommandArgs, driverConfig);\n return {};\n }\n if (preConfigArgs.subcommand === PLUGIN_TYPE) {\n await runExtensionCommand(extensionCommandArgs, pluginConfig);\n return {};\n }\n /* istanbul ignore next */\n return {}; // should never happen\n }\n}\n\n/**\n * Initializes Appium's config. Starts server if appropriate and resolves the\n * server instance if so; otherwise resolves w/ `undefined`.\n * @template [T=WithServerSubcommand]\n * @param {Args<T>} [args] - Arguments from CLI or otherwise\n * @returns {Promise<import('@appium/types').AppiumServer|undefined>}\n */\nasync function main(args) {\n const {appiumDriver, parsedArgs, pluginConfig, driverConfig} = /** @type {ServerInitResult} */ (\n await init(args)\n );\n\n if (!appiumDriver || !parsedArgs || !pluginConfig || !driverConfig) {\n // if this branch is taken, we've run a different subcommand, so there's nothing\n // left to do here.\n return;\n }\n\n const pluginClasses = getActivePlugins(pluginConfig, parsedArgs.usePlugins);\n // set the active plugins on the umbrella driver so it can use them for commands\n appiumDriver.pluginClasses = pluginClasses;\n\n await logStartupInfo(parsedArgs);\n let routeConfiguringFunction = makeRouter(appiumDriver);\n\n const driverClasses = getActiveDrivers(driverConfig, parsedArgs.useDrivers);\n const serverUpdaters = getServerUpdaters(driverClasses, pluginClasses);\n const extraMethodMap = getExtraMethodMap(driverClasses, pluginClasses);\n\n /** @type {import('@appium/base-driver').ServerOpts} */\n const serverOpts = {\n routeConfiguringFunction,\n port: parsedArgs.port,\n hostname: parsedArgs.address,\n allowCors: parsedArgs.allowCors,\n basePath: parsedArgs.basePath,\n serverUpdaters,\n extraMethodMap,\n cliArgs: parsedArgs,\n };\n if (parsedArgs.keepAliveTimeout) {\n serverOpts.keepAliveTimeout = parsedArgs.keepAliveTimeout * 1000;\n }\n let server;\n try {\n server = await baseServer(serverOpts);\n } catch (err) {\n logger.error(\n `Could not configure Appium server. It's possible that a driver or plugin tried ` +\n `to update the server and failed. Original error: ${err.message}`\n );\n logger.debug(err.stack);\n return process.exit(1);\n }\n\n if (parsedArgs.allowCors) {\n logger.warn(\n 'You have enabled CORS requests from any host. Be careful not ' +\n 'to visit sites which could maliciously try to start Appium ' +\n 'sessions on your machine'\n );\n }\n appiumDriver.server = server;\n try {\n // configure as node on grid, if necessary\n // falsy values should not cause this to run\n if (parsedArgs.nodeconfig) {\n await registerNode(\n parsedArgs.nodeconfig,\n parsedArgs.address,\n parsedArgs.port,\n parsedArgs.basePath\n );\n }\n } catch (err) {\n await server.close();\n throw err;\n }\n\n for (const signal of ['SIGINT', 'SIGTERM']) {\n process.once(signal, async function onSignal() {\n logger.info(`Received ${signal} - shutting down`);\n try {\n await appiumDriver.deleteAllSessions({\n force: true,\n reason: `The process has received ${signal} signal`,\n });\n await server.close();\n process.exit(0);\n } catch (e) {\n logger.warn(e);\n process.exit(1);\n }\n });\n }\n\n logServerPort(parsedArgs.address, parsedArgs.port);\n driverConfig.print();\n pluginConfig.print([...pluginClasses.values()]);\n\n return server;\n}\n\n// NOTE: this is here for backwards compat for any scripts referencing `main.js` directly\n// (more specifically, `build/lib/main.js`)\n// the executable is now `../index.js`, so that module will typically be `require.main`.\nif (require.main === module) {\n asyncify(main);\n}\n\n// everything below here is intended to be a public API.\nexport {readConfigFile} from './config-file';\nexport {finalizeSchema, getSchema, validate} from './schema/schema';\nexport {main, init, resolveAppiumHome};\n\n/**\n * @typedef {import('@appium/types').DriverType} DriverType\n * @typedef {import('@appium/types').PluginType} PluginType\n * @typedef {import('@appium/types').DriverClass} DriverClass\n * @typedef {import('@appium/types').PluginClass} PluginClass\n * @typedef {import('appium/types').WithServerSubcommand} WithServerSubcommand\n * @typedef {import('./extension').DriverNameMap} DriverNameMap\n * @typedef {import('./extension').PluginNameMap} PluginNameMap\n */\n\n/**\n * Literally an empty object\n * @typedef { {} } ExtCommandInitResult\n */\n\n/**\n * @typedef ServerInitData\n * @property {import('./appium').AppiumDriver} appiumDriver - The Appium driver\n * @property {import('appium/types').ParsedArgs} parsedArgs - The parsed arguments\n */\n\n/**\n * @typedef {ServerInitData & import('./extension').ExtensionConfigs} ServerInitResult\n */\n\n/**\n * @template [T=WithServerSubcommand]\n * @typedef {import('appium/types').Args<T>} Args\n */\n\n/**\n * @template [T=WithServerSubcommand]\n * @typedef {import('appium/types').ParsedArgs<T>} ParsedArgs\n */\n"],"mappings":"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"}
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../../lib/main.js"],"names":[],"mappings":"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"}
@@ -1,119 +1,164 @@
1
1
  "use strict";
2
-
3
- Object.defineProperty(exports, "__esModule", {
4
- value: true
5
- });
6
- exports.SERVER_PROP_NAME = exports.ArgSpec = exports.APPIUM_CONFIG_SCHEMA_ID = void 0;
7
-
8
- require("source-map-support/register");
9
-
10
- var _lodash = _interopRequireDefault(require("lodash"));
11
-
12
- function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
- const APPIUM_CONFIG_SCHEMA_ID = 'appium.json';
15
- exports.APPIUM_CONFIG_SCHEMA_ID = APPIUM_CONFIG_SCHEMA_ID;
16
- const SERVER_PROP_NAME = 'server';
17
- exports.SERVER_PROP_NAME = SERVER_PROP_NAME;
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.ArgSpec = exports.SERVER_PROP_NAME = exports.APPIUM_CONFIG_SCHEMA_ID = void 0;
7
+ const lodash_1 = __importDefault(require("lodash"));
8
+ /**
9
+ * The original ID of the Appium config schema.
10
+ * We use this in the CLI to convert it to `argparse` options.
11
+ */
12
+ exports.APPIUM_CONFIG_SCHEMA_ID = 'appium.json';
13
+ /**
14
+ * The schema prop containing server-related options. Everything in here
15
+ * is "native" to Appium.
16
+ * Used by {@link flattenSchema} for transforming the schema into CLI args.
17
+ */
18
+ exports.SERVER_PROP_NAME = 'server';
19
+ /**
20
+ * Used to parse extension info from a schema ID.
21
+ */
18
22
  const SCHEMA_ID_REGEXP = /^(?<extType>.+?)-(?<normalizedExtName>.+)\.json$/;
23
+ /**
24
+ * Avoid typos by using constants!
25
+ */
19
26
  const PROPERTIES = 'properties';
20
-
27
+ /**
28
+ * An `ArgSpec` is a class representing metadata about an argument (or config
29
+ * option) used for cross-referencing.
30
+ *
31
+ * This class has no instance methods, and is basically just a read-only "struct".
32
+ * @template D
33
+ */
21
34
  class ArgSpec {
22
- name;
23
- extType;
24
- extName;
25
- ref;
26
- arg;
27
- dest;
28
- rawDest;
29
- defaultValue;
30
-
31
- constructor(name, {
32
- extType,
33
- extName,
34
- dest,
35
- defaultValue
36
- } = {}) {
37
- const arg = ArgSpec.toArg(name, extType, extName);
38
- const ref = ArgSpec.toSchemaRef(name, extType, extName);
39
-
40
- const rawDest = _lodash.default.camelCase(dest ?? name);
41
-
42
- const destKeypath = extType && extName ? [extType, extName, rawDest].join('.') : rawDest;
43
- this.defaultValue = defaultValue;
44
- this.name = name;
45
- this.extType = extType;
46
- this.extName = extName;
47
- this.arg = arg;
48
- this.dest = destKeypath;
49
- this.ref = ref;
50
- this.rawDest = rawDest;
51
- }
52
-
53
- static toSchemaRef(name, extType, extName) {
54
- const baseRef = ArgSpec.toSchemaBaseRef(extType, extName);
55
-
56
- if (extType && extName) {
57
- return [`${baseRef}#`, PROPERTIES, name].join('/');
35
+ /**
36
+ * Builds some computed fields and assigns them to the instance.
37
+ *
38
+ * Undefined properties are not assigned.
39
+ *
40
+ * The _constructor_ is private. Use {@link ArgSpec.create} instead.
41
+ * @private
42
+ * @param {string} name
43
+ * @param {ArgSpecOptions<D>} [opts]
44
+ */
45
+ constructor(name, { extType, extName, dest, defaultValue } = {}) {
46
+ // we must normalize the extension name to fit into our convention for CLI
47
+ // args.
48
+ const arg = ArgSpec.toArg(name, extType, extName);
49
+ const ref = ArgSpec.toSchemaRef(name, extType, extName);
50
+ // if no explicit `dest` provided, just camelCase the name to avoid needing
51
+ // to use bracket syntax when accessing props on the parsed args object.
52
+ const rawDest = lodash_1.default.camelCase(dest ?? name);
53
+ const destKeypath = extType && extName ? [extType, extName, rawDest].join('.') : rawDest;
54
+ this.defaultValue = defaultValue;
55
+ this.name = name;
56
+ this.extType = extType;
57
+ this.extName = extName;
58
+ this.arg = arg;
59
+ this.dest = destKeypath;
60
+ this.ref = ref;
61
+ this.rawDest = rawDest;
58
62
  }
59
-
60
- return [`${baseRef}#`, PROPERTIES, SERVER_PROP_NAME, PROPERTIES, name].join('/');
61
- }
62
-
63
- static toSchemaBaseRef(extType, extName) {
64
- if (extType && extName) {
65
- return `${extType}-${ArgSpec.toNormalizedExtName(extName)}.json`;
63
+ /**
64
+ * Return the schema ID (`$id`) for the **argument** given the parameters.
65
+ *
66
+ * If you need the "root" or "base" schema ID, use {@link ArgSpec.toSchemaBaseRef} instead.
67
+ * @param {string} name - Argument name
68
+ * @param {ExtensionType} [extType] - Extension type
69
+ * @param {string} [extName] - Extension name
70
+ * @returns {string} Schema ID
71
+ */
72
+ static toSchemaRef(name, extType, extName) {
73
+ const baseRef = ArgSpec.toSchemaBaseRef(extType, extName);
74
+ if (extType && extName) {
75
+ return [`${baseRef}#`, PROPERTIES, name].join('/');
76
+ }
77
+ return [`${baseRef}#`, PROPERTIES, exports.SERVER_PROP_NAME, PROPERTIES, name].join('/');
66
78
  }
67
-
68
- return APPIUM_CONFIG_SCHEMA_ID;
69
- }
70
-
71
- static toArg(name, extType, extName) {
72
- const properName = _lodash.default.kebabCase(name.replace(/^--?/, ''));
73
-
74
- if (extType && extName) {
75
- return [extType, _lodash.default.kebabCase(extName), properName].join('-');
79
+ /**
80
+ * Return the schema ID for an extension or the base schema ID.
81
+ * @param {ExtensionType} [extType] - Extension type
82
+ * @param {string} [extName] - Extension name
83
+ */
84
+ static toSchemaBaseRef(extType, extName) {
85
+ if (extType && extName) {
86
+ return `${extType}-${ArgSpec.toNormalizedExtName(extName)}.json`;
87
+ }
88
+ return exports.APPIUM_CONFIG_SCHEMA_ID;
76
89
  }
77
-
78
- return properName;
79
- }
80
-
81
- static toNormalizedExtName(extName) {
82
- return _lodash.default.kebabCase(extName);
83
- }
84
-
85
- static extensionInfoFromRootSchemaId(schemaId) {
86
- const matches = schemaId.match(SCHEMA_ID_REGEXP);
87
-
88
- if (matches !== null && matches !== void 0 && matches.groups) {
89
- const {
90
- extType,
91
- normalizedExtName
92
- } = matches.groups;
93
- return {
94
- extType,
95
- normalizedExtName
96
- };
90
+ /**
91
+ * Return the unique ID for the argument given the parameters.
92
+ * @param {string} name - Argument name
93
+ * @param {ExtensionType} [extType] - Extension type
94
+ * @param {string} [extName] - Extension name
95
+ * @returns {string} Unique ID
96
+ */
97
+ static toArg(name, extType, extName) {
98
+ const properName = lodash_1.default.kebabCase(name.replace(/^--?/, ''));
99
+ if (extType && extName) {
100
+ return [extType, lodash_1.default.kebabCase(extName), properName].join('-');
101
+ }
102
+ return properName;
97
103
  }
98
-
99
- return {};
100
- }
101
-
102
- static create(name, opts) {
103
- return Object.freeze(new ArgSpec(name, opts));
104
- }
105
-
106
- toString() {
107
- let str = `[ArgSpec] ${this.name} (${this.ref})`;
108
-
109
- if (this.extType && this.extName) {
110
- str += ` (ext: ${this.extType}/${this.extName})`;
104
+ /**
105
+ * Normalizes a raw extension name (not including the type).
106
+ * @param {string} extName - Extension name
107
+ * @returns {string} Normalized extension name
108
+ */
109
+ static toNormalizedExtName(extName) {
110
+ return lodash_1.default.kebabCase(extName);
111
+ }
112
+ /**
113
+ * When given the root ID of a schema for an extension (`<extType>-<normalizedExtName>.json`) Returns an object containing the extension type and the _normalized_ extension name.
114
+ * @param {string} schemaId - Root schema ID
115
+ * @returns { {extType?: ExtensionType, normalizedExtName?: string} }
116
+ */
117
+ static extensionInfoFromRootSchemaId(schemaId) {
118
+ const matches = schemaId.match(SCHEMA_ID_REGEXP);
119
+ if (matches?.groups) {
120
+ const { extType, normalizedExtName } =
121
+ /** @type { {extType: ExtensionType, normalizedExtName: string} } */ (matches.groups);
122
+ return { extType, normalizedExtName };
123
+ }
124
+ return {};
125
+ }
126
+ /**
127
+ * Creates an `ArgSpec`
128
+ *
129
+ * @param {string} name - The canonical name of the argument. Corresponds to a key in a schema's
130
+ * `properties` property.
131
+ * @template D
132
+ * @param {ArgSpecOptions<D>} [opts] - Options
133
+ * @returns {Readonly<ArgSpec>}
134
+ */
135
+ static create(name, opts) {
136
+ return Object.freeze(new ArgSpec(name, opts));
137
+ }
138
+ /**
139
+ * String representation, useful for debugging
140
+ * @returns {string}
141
+ */
142
+ /* istanbul ignore next */
143
+ toString() {
144
+ let str = `[ArgSpec] ${this.name} (${this.ref})`;
145
+ if (this.extType && this.extName) {
146
+ str += ` (ext: ${this.extType}/${this.extName})`;
147
+ }
148
+ return str;
111
149
  }
112
-
113
- return str;
114
- }
115
-
116
150
  }
117
-
118
151
  exports.ArgSpec = ArgSpec;
119
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJBUFBJVU1fQ09ORklHX1NDSEVNQV9JRCIsIlNFUlZFUl9QUk9QX05BTUUiLCJTQ0hFTUFfSURfUkVHRVhQIiwiUFJPUEVSVElFUyIsIkFyZ1NwZWMiLCJuYW1lIiwiZXh0VHlwZSIsImV4dE5hbWUiLCJyZWYiLCJhcmciLCJkZXN0IiwicmF3RGVzdCIsImRlZmF1bHRWYWx1ZSIsImNvbnN0cnVjdG9yIiwidG9BcmciLCJ0b1NjaGVtYVJlZiIsIl8iLCJjYW1lbENhc2UiLCJkZXN0S2V5cGF0aCIsImpvaW4iLCJiYXNlUmVmIiwidG9TY2hlbWFCYXNlUmVmIiwidG9Ob3JtYWxpemVkRXh0TmFtZSIsInByb3Blck5hbWUiLCJrZWJhYkNhc2UiLCJyZXBsYWNlIiwiZXh0ZW5zaW9uSW5mb0Zyb21Sb290U2NoZW1hSWQiLCJzY2hlbWFJZCIsIm1hdGNoZXMiLCJtYXRjaCIsImdyb3VwcyIsIm5vcm1hbGl6ZWRFeHROYW1lIiwiY3JlYXRlIiwib3B0cyIsIk9iamVjdCIsImZyZWV6ZSIsInRvU3RyaW5nIiwic3RyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vbGliL3NjaGVtYS9hcmctc3BlYy5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgXyBmcm9tICdsb2Rhc2gnO1xuXG4vKipcbiAqIFRoZSBvcmlnaW5hbCBJRCBvZiB0aGUgQXBwaXVtIGNvbmZpZyBzY2hlbWEuXG4gKiBXZSB1c2UgdGhpcyBpbiB0aGUgQ0xJIHRvIGNvbnZlcnQgaXQgdG8gYGFyZ3BhcnNlYCBvcHRpb25zLlxuICovXG5leHBvcnQgY29uc3QgQVBQSVVNX0NPTkZJR19TQ0hFTUFfSUQgPSAnYXBwaXVtLmpzb24nO1xuXG4vKipcbiAqIFRoZSBzY2hlbWEgcHJvcCBjb250YWluaW5nIHNlcnZlci1yZWxhdGVkIG9wdGlvbnMuIEV2ZXJ5dGhpbmcgaW4gaGVyZVxuICogaXMgXCJuYXRpdmVcIiB0byBBcHBpdW0uXG4gKiBVc2VkIGJ5IHtAbGluayBmbGF0dGVuU2NoZW1hfSBmb3IgdHJhbnNmb3JtaW5nIHRoZSBzY2hlbWEgaW50byBDTEkgYXJncy5cbiAqL1xuZXhwb3J0IGNvbnN0IFNFUlZFUl9QUk9QX05BTUUgPSAnc2VydmVyJztcblxuLyoqXG4gKiBVc2VkIHRvIHBhcnNlIGV4dGVuc2lvbiBpbmZvIGZyb20gYSBzY2hlbWEgSUQuXG4gKi9cbmNvbnN0IFNDSEVNQV9JRF9SRUdFWFAgPSAvXig/PGV4dFR5cGU+Lis/KS0oPzxub3JtYWxpemVkRXh0TmFtZT4uKylcXC5qc29uJC87XG5cbi8qKlxuICogQXZvaWQgdHlwb3MgYnkgdXNpbmcgY29uc3RhbnRzIVxuICovXG5jb25zdCBQUk9QRVJUSUVTID0gJ3Byb3BlcnRpZXMnO1xuXG4vKipcbiAqIEFuIGBBcmdTcGVjYCBpcyBhIGNsYXNzIHJlcHJlc2VudGluZyBtZXRhZGF0YSBhYm91dCBhbiBhcmd1bWVudCAob3IgY29uZmlnXG4gKiBvcHRpb24pIHVzZWQgZm9yIGNyb3NzLXJlZmVyZW5jaW5nLlxuICpcbiAqIFRoaXMgY2xhc3MgaGFzIG5vIGluc3RhbmNlIG1ldGhvZHMsIGFuZCBpcyBiYXNpY2FsbHkganVzdCBhIHJlYWQtb25seSBcInN0cnVjdFwiLlxuICogQHRlbXBsYXRlIERcbiAqL1xuZXhwb3J0IGNsYXNzIEFyZ1NwZWMge1xuICAvKipcbiAgICogVGhlIGNhbm9uaWNhbCBuYW1lIG9mIHRoZSBhcmd1bWVudC4gQ29ycmVzcG9uZHMgdG8ga2V5IGluIHNjaGVtYSdzIGBwcm9wZXJ0aWVzYCBwcm9wLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgbmFtZTtcblxuICAvKipcbiAgICogVGhlIGBFeHRlbnNpb25UeXBlYCBvZiB0aGUgYXJndW1lbnQuIFRoaXMgd2lsbCBiZSBzZXQgaWYgdGhlIGFyZyBjYW1lIGZyb20gYW4gZXh0ZW5zaW9uO1xuICAgKiBvdGhlcndpc2UgaXQgd2lsbCBiZSBgdW5kZWZpbmVkYC5cbiAgICogQHR5cGUge0V4dGVuc2lvblR5cGV8dW5kZWZpbmVkfVxuICAgKi9cbiAgZXh0VHlwZTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGV4dGVuc2lvbiwgaWYgdGhpcyBhcmd1bWVudCBjYW1lIGZyb20gYW4gZXh0ZW5zaW9uLlxuICAgKlxuICAgKiBPdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqIEB0eXBlIHtzdHJpbmd8dW5kZWZpbmVkfVxuICAgKi9cbiAgZXh0TmFtZTtcblxuICAvKipcbiAgICogVGhlIHNjaGVtYSBJRCAoYCRpZGApIGZvciB0aGUgYXJndW1lbnQuICBUaGlzIGlzIGF1dG9tYXRpY2FsbHkgZGV0ZXJtaW5lZCwgYW5kIGFueSB1c2VyLXByb3ZpZGVkIGAkaWRgcyB3aWxsIGJlIG92ZXJ3cml0dGVuLlxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgcmVmO1xuXG4gIC8qKlxuICAgKiBUaGUgQ0xJIGFyZ3VtZW50LCBzYW5zIGxlYWRpbmcgZGFzaGVzLlxuICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgKi9cbiAgYXJnO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzaXJlZCBrZXlwYXRoIGZvciB0aGUgYXJndW1lbnQgYWZ0ZXIgYXJndW1lbnRzIGhhdmUgYmVlbiBwYXJzZWQuXG4gICAqXG4gICAqIFR5cGljYWxseSB0aGlzIGlzIGNhbWVsQ2FzZWQuICBJZiB0aGUgYXJnIGNhbWUgZnJvbSBhbiBleHRlbnNpb24sIGl0IHdpbGwgYmUgcHJlZml4ZWQgd2l0aFxuICAgKiBgPGV4dFR5cGU+LjxleHROYW1lPi5gXG4gICAqIEB0eXBlIHtzdHJpbmd9XG4gICAqL1xuICBkZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgc2FtZSBhcyB7QGxpbmsgQXJnU3BlYy5kZXN0fSBidXQgd2l0aG91dCB0aGUgbGVhZGluZyBgPGV4dFR5cGU+LjxleHROYW1lPi5gIHByZWZpeC5cbiAgICovXG4gIHJhd0Rlc3Q7XG5cbiAgLyoqXG4gICAqIFdoYXRldmVyIHRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoaXMgYXJndW1lbnQgaXMsIGFzIHNwZWNpZmllZCBieSB0aGVcbiAgICogYGRlZmF1bHRgIHByb3BlcnR5IG9mIHRoZSBzY2hlbWEuXG4gICAqIEB0eXBlIHtEfHVuZGVmaW5lZH1cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTtcblxuICAvKipcbiAgICogQnVpbGRzIHNvbWUgY29tcHV0ZWQgZmllbGRzIGFuZCBhc3NpZ25zIHRoZW0gdG8gdGhlIGluc3RhbmNlLlxuICAgKlxuICAgKiBVbmRlZmluZWQgcHJvcGVydGllcyBhcmUgbm90IGFzc2lnbmVkLlxuICAgKlxuICAgKiBUaGUgX2NvbnN0cnVjdG9yXyBpcyBwcml2YXRlLiBVc2Uge0BsaW5rIEFyZ1NwZWMuY3JlYXRlfSBpbnN0ZWFkLlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge0FyZ1NwZWNPcHRpb25zPEQ+fSBbb3B0c11cbiAgICovXG4gIGNvbnN0cnVjdG9yKG5hbWUsIHtleHRUeXBlLCBleHROYW1lLCBkZXN0LCBkZWZhdWx0VmFsdWV9ID0ge30pIHtcbiAgICAvLyB3ZSBtdXN0IG5vcm1hbGl6ZSB0aGUgZXh0ZW5zaW9uIG5hbWUgdG8gZml0IGludG8gb3VyIGNvbnZlbnRpb24gZm9yIENMSVxuICAgIC8vIGFyZ3MuXG4gICAgY29uc3QgYXJnID0gQXJnU3BlYy50b0FyZyhuYW1lLCBleHRUeXBlLCBleHROYW1lKTtcblxuICAgIGNvbnN0IHJlZiA9IEFyZ1NwZWMudG9TY2hlbWFSZWYobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSk7XG5cbiAgICAvLyBpZiBubyBleHBsaWNpdCBgZGVzdGAgcHJvdmlkZWQsIGp1c3QgY2FtZWxDYXNlIHRoZSBuYW1lIHRvIGF2b2lkIG5lZWRpbmdcbiAgICAvLyB0byB1c2UgYnJhY2tldCBzeW50YXggd2hlbiBhY2Nlc3NpbmcgcHJvcHMgb24gdGhlIHBhcnNlZCBhcmdzIG9iamVjdC5cbiAgICBjb25zdCByYXdEZXN0ID0gXy5jYW1lbENhc2UoZGVzdCA/PyBuYW1lKTtcblxuICAgIGNvbnN0IGRlc3RLZXlwYXRoID0gZXh0VHlwZSAmJiBleHROYW1lID8gW2V4dFR5cGUsIGV4dE5hbWUsIHJhd0Rlc3RdLmpvaW4oJy4nKSA6IHJhd0Rlc3Q7XG5cbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IGRlZmF1bHRWYWx1ZTtcbiAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIHRoaXMuZXh0VHlwZSA9IGV4dFR5cGU7XG4gICAgdGhpcy5leHROYW1lID0gZXh0TmFtZTtcbiAgICB0aGlzLmFyZyA9IGFyZztcbiAgICB0aGlzLmRlc3QgPSBkZXN0S2V5cGF0aDtcbiAgICB0aGlzLnJlZiA9IHJlZjtcbiAgICB0aGlzLnJhd0Rlc3QgPSByYXdEZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB0aGUgc2NoZW1hIElEIChgJGlkYCkgZm9yIHRoZSAqKmFyZ3VtZW50KiogZ2l2ZW4gdGhlIHBhcmFtZXRlcnMuXG4gICAqXG4gICAqIElmIHlvdSBuZWVkIHRoZSBcInJvb3RcIiBvciBcImJhc2VcIiBzY2hlbWEgSUQsIHVzZSB7QGxpbmsgQXJnU3BlYy50b1NjaGVtYUJhc2VSZWZ9IGluc3RlYWQuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gQXJndW1lbnQgbmFtZVxuICAgKiBAcGFyYW0ge0V4dGVuc2lvblR5cGV9IFtleHRUeXBlXSAtIEV4dGVuc2lvbiB0eXBlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXh0TmFtZV0gLSBFeHRlbnNpb24gbmFtZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBTY2hlbWEgSURcbiAgICovXG4gIHN0YXRpYyB0b1NjaGVtYVJlZihuYW1lLCBleHRUeXBlLCBleHROYW1lKSB7XG4gICAgY29uc3QgYmFzZVJlZiA9IEFyZ1NwZWMudG9TY2hlbWFCYXNlUmVmKGV4dFR5cGUsIGV4dE5hbWUpO1xuICAgIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICAgIHJldHVybiBbYCR7YmFzZVJlZn0jYCwgUFJPUEVSVElFUywgbmFtZV0uam9pbignLycpO1xuICAgIH1cbiAgICByZXR1cm4gW2Ake2Jhc2VSZWZ9I2AsIFBST1BFUlRJRVMsIFNFUlZFUl9QUk9QX05BTUUsIFBST1BFUlRJRVMsIG5hbWVdLmpvaW4oJy8nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHNjaGVtYSBJRCBmb3IgYW4gZXh0ZW5zaW9uIG9yIHRoZSBiYXNlIHNjaGVtYSBJRC5cbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICovXG4gIHN0YXRpYyB0b1NjaGVtYUJhc2VSZWYoZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICAgIHJldHVybiBgJHtleHRUeXBlfS0ke0FyZ1NwZWMudG9Ob3JtYWxpemVkRXh0TmFtZShleHROYW1lKX0uanNvbmA7XG4gICAgfVxuICAgIHJldHVybiBBUFBJVU1fQ09ORklHX1NDSEVNQV9JRDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gdGhlIHVuaXF1ZSBJRCBmb3IgdGhlIGFyZ3VtZW50IGdpdmVuIHRoZSBwYXJhbWV0ZXJzLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIEFyZ3VtZW50IG5hbWVcbiAgICogQHBhcmFtIHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV0gLSBFeHRlbnNpb24gdHlwZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2V4dE5hbWVdIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ30gVW5pcXVlIElEXG4gICAqL1xuICBzdGF0aWMgdG9BcmcobmFtZSwgZXh0VHlwZSwgZXh0TmFtZSkge1xuICAgIGNvbnN0IHByb3Blck5hbWUgPSBfLmtlYmFiQ2FzZShuYW1lLnJlcGxhY2UoL14tLT8vLCAnJykpO1xuICAgIGlmIChleHRUeXBlICYmIGV4dE5hbWUpIHtcbiAgICAgIHJldHVybiBbZXh0VHlwZSwgXy5rZWJhYkNhc2UoZXh0TmFtZSksIHByb3Blck5hbWVdLmpvaW4oJy0nKTtcbiAgICB9XG4gICAgcmV0dXJuIHByb3Blck5hbWU7XG4gIH1cblxuICAvKipcbiAgICogTm9ybWFsaXplcyBhIHJhdyBleHRlbnNpb24gbmFtZSAobm90IGluY2x1ZGluZyB0aGUgdHlwZSkuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleHROYW1lIC0gRXh0ZW5zaW9uIG5hbWVcbiAgICogQHJldHVybnMge3N0cmluZ30gTm9ybWFsaXplZCBleHRlbnNpb24gbmFtZVxuICAgKi9cbiAgc3RhdGljIHRvTm9ybWFsaXplZEV4dE5hbWUoZXh0TmFtZSkge1xuICAgIHJldHVybiBfLmtlYmFiQ2FzZShleHROYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXaGVuIGdpdmVuIHRoZSByb290IElEIG9mIGEgc2NoZW1hIGZvciBhbiBleHRlbnNpb24gKGA8ZXh0VHlwZT4tPG5vcm1hbGl6ZWRFeHROYW1lPi5qc29uYCkgUmV0dXJucyBhbiBvYmplY3QgY29udGFpbmluZyB0aGUgZXh0ZW5zaW9uIHR5cGUgYW5kIHRoZSBfbm9ybWFsaXplZF8gZXh0ZW5zaW9uIG5hbWUuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzY2hlbWFJZCAtIFJvb3Qgc2NoZW1hIElEXG4gICAqIEByZXR1cm5zIHsge2V4dFR5cGU/OiBFeHRlbnNpb25UeXBlLCBub3JtYWxpemVkRXh0TmFtZT86IHN0cmluZ30gfVxuICAgKi9cbiAgc3RhdGljIGV4dGVuc2lvbkluZm9Gcm9tUm9vdFNjaGVtYUlkKHNjaGVtYUlkKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHNjaGVtYUlkLm1hdGNoKFNDSEVNQV9JRF9SRUdFWFApO1xuICAgIGlmIChtYXRjaGVzPy5ncm91cHMpIHtcbiAgICAgIGNvbnN0IHtleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZX0gPVxuICAgICAgICAvKiogQHR5cGUgeyB7ZXh0VHlwZTogRXh0ZW5zaW9uVHlwZSwgbm9ybWFsaXplZEV4dE5hbWU6IHN0cmluZ30gfSAqLyAobWF0Y2hlcy5ncm91cHMpO1xuICAgICAgcmV0dXJuIHtleHRUeXBlLCBub3JtYWxpemVkRXh0TmFtZX07XG4gICAgfVxuICAgIHJldHVybiB7fTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGFuIGBBcmdTcGVjYFxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSAtIFRoZSBjYW5vbmljYWwgbmFtZSBvZiB0aGUgYXJndW1lbnQuIENvcnJlc3BvbmRzIHRvIGEga2V5IGluIGEgc2NoZW1hJ3NcbiAgICogYHByb3BlcnRpZXNgIHByb3BlcnR5LlxuICAgKiBAdGVtcGxhdGUgRFxuICAgKiBAcGFyYW0ge0FyZ1NwZWNPcHRpb25zPEQ+fSBbb3B0c10gLSBPcHRpb25zXG4gICAqIEByZXR1cm5zIHtSZWFkb25seTxBcmdTcGVjPn1cbiAgICovXG4gIHN0YXRpYyBjcmVhdGUobmFtZSwgb3B0cykge1xuICAgIHJldHVybiBPYmplY3QuZnJlZXplKG5ldyBBcmdTcGVjKG5hbWUsIG9wdHMpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdHJpbmcgcmVwcmVzZW50YXRpb24sIHVzZWZ1bCBmb3IgZGVidWdnaW5nXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICB0b1N0cmluZygpIHtcbiAgICBsZXQgc3RyID0gYFtBcmdTcGVjXSAke3RoaXMubmFtZX0gKCR7dGhpcy5yZWZ9KWA7XG4gICAgaWYgKHRoaXMuZXh0VHlwZSAmJiB0aGlzLmV4dE5hbWUpIHtcbiAgICAgIHN0ciArPSBgIChleHQ6ICR7dGhpcy5leHRUeXBlfS8ke3RoaXMuZXh0TmFtZX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIHtAbGluayBBcmdTcGVjLmNyZWF0ZX1cbiAqIEB0ZW1wbGF0ZSBEXG4gKiBAdHlwZWRlZiBBcmdTcGVjT3B0aW9uc1xuICogQHByb3BlcnR5IHtzdHJpbmd9IFtleHROYW1lXVxuICogQHByb3BlcnR5IHtFeHRlbnNpb25UeXBlfSBbZXh0VHlwZV1cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGVzdF1cbiAqIEBwcm9wZXJ0eSB7RH0gW2RlZmF1bHRWYWx1ZV1cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtpbXBvcnQoJ0BhcHBpdW0vdHlwZXMnKS5FeHRlbnNpb25UeXBlfSBFeHRlbnNpb25UeXBlXG4gKi9cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUE7Ozs7QUFNTyxNQUFNQSx1QkFBdUIsR0FBRyxhQUFoQzs7QUFPQSxNQUFNQyxnQkFBZ0IsR0FBRyxRQUF6Qjs7QUFLUCxNQUFNQyxnQkFBZ0IsR0FBRyxrREFBekI7QUFLQSxNQUFNQyxVQUFVLEdBQUcsWUFBbkI7O0FBU08sTUFBTUMsT0FBTixDQUFjO0VBS25CQyxJQUFJO0VBT0pDLE9BQU87RUFRUEMsT0FBTztFQU9QQyxHQUFHO0VBTUhDLEdBQUc7RUFTSEMsSUFBSTtFQUtKQyxPQUFPO0VBT1BDLFlBQVk7O0VBWVpDLFdBQVcsQ0FBQ1IsSUFBRCxFQUFPO0lBQUNDLE9BQUQ7SUFBVUMsT0FBVjtJQUFtQkcsSUFBbkI7SUFBeUJFO0VBQXpCLElBQXlDLEVBQWhELEVBQW9EO0lBRzdELE1BQU1ILEdBQUcsR0FBR0wsT0FBTyxDQUFDVSxLQUFSLENBQWNULElBQWQsRUFBb0JDLE9BQXBCLEVBQTZCQyxPQUE3QixDQUFaO0lBRUEsTUFBTUMsR0FBRyxHQUFHSixPQUFPLENBQUNXLFdBQVIsQ0FBb0JWLElBQXBCLEVBQTBCQyxPQUExQixFQUFtQ0MsT0FBbkMsQ0FBWjs7SUFJQSxNQUFNSSxPQUFPLEdBQUdLLGVBQUEsQ0FBRUMsU0FBRixDQUFZUCxJQUFJLElBQUlMLElBQXBCLENBQWhCOztJQUVBLE1BQU1hLFdBQVcsR0FBR1osT0FBTyxJQUFJQyxPQUFYLEdBQXFCLENBQUNELE9BQUQsRUFBVUMsT0FBVixFQUFtQkksT0FBbkIsRUFBNEJRLElBQTVCLENBQWlDLEdBQWpDLENBQXJC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
152
+ /**
153
+ * Options for {@link ArgSpec.create}
154
+ * @template D
155
+ * @typedef ArgSpecOptions
156
+ * @property {string} [extName]
157
+ * @property {ExtensionType} [extType]
158
+ * @property {string} [dest]
159
+ * @property {D} [defaultValue]
160
+ */
161
+ /**
162
+ * @typedef {import('@appium/types').ExtensionType} ExtensionType
163
+ */
164
+ //# sourceMappingURL=arg-spec.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"arg-spec.js","names":["APPIUM_CONFIG_SCHEMA_ID","SERVER_PROP_NAME","SCHEMA_ID_REGEXP","PROPERTIES","ArgSpec","name","extType","extName","ref","arg","dest","rawDest","defaultValue","constructor","toArg","toSchemaRef","_","camelCase","destKeypath","join","baseRef","toSchemaBaseRef","toNormalizedExtName","properName","kebabCase","replace","extensionInfoFromRootSchemaId","schemaId","matches","match","groups","normalizedExtName","create","opts","Object","freeze","toString","str"],"sources":["../../../lib/schema/arg-spec.js"],"sourcesContent":["import _ from 'lodash';\n\n/**\n * The original ID of the Appium config schema.\n * We use this in the CLI to convert it to `argparse` options.\n */\nexport const APPIUM_CONFIG_SCHEMA_ID = 'appium.json';\n\n/**\n * The schema prop containing server-related options. Everything in here\n * is \"native\" to Appium.\n * Used by {@link flattenSchema} for transforming the schema into CLI args.\n */\nexport const SERVER_PROP_NAME = 'server';\n\n/**\n * Used to parse extension info from a schema ID.\n */\nconst SCHEMA_ID_REGEXP = /^(?<extType>.+?)-(?<normalizedExtName>.+)\\.json$/;\n\n/**\n * Avoid typos by using constants!\n */\nconst PROPERTIES = 'properties';\n\n/**\n * An `ArgSpec` is a class representing metadata about an argument (or config\n * option) used for cross-referencing.\n *\n * This class has no instance methods, and is basically just a read-only \"struct\".\n * @template D\n */\nexport class ArgSpec {\n /**\n * The canonical name of the argument. Corresponds to key in schema's `properties` prop.\n * @type {string}\n */\n name;\n\n /**\n * The `ExtensionType` of the argument. This will be set if the arg came from an extension;\n * otherwise it will be `undefined`.\n * @type {ExtensionType|undefined}\n */\n extType;\n\n /**\n * The name of the extension, if this argument came from an extension.\n *\n * Otherwise `undefined`.\n * @type {string|undefined}\n */\n extName;\n\n /**\n * The schema ID (`$id`) for the argument. This is automatically determined, and any user-provided `$id`s will be overwritten.\n *\n * @type {string}\n */\n ref;\n\n /**\n * The CLI argument, sans leading dashes.\n * @type {string}\n */\n arg;\n\n /**\n * The desired keypath for the argument after arguments have been parsed.\n *\n * Typically this is camelCased. If the arg came from an extension, it will be prefixed with\n * `<extType>.<extName>.`\n * @type {string}\n */\n dest;\n\n /**\n * The same as {@link ArgSpec.dest} but without the leading `<extType>.<extName>.` prefix.\n */\n rawDest;\n\n /**\n * Whatever the default value of this argument is, as specified by the\n * `default` property of the schema.\n * @type {D|undefined}\n */\n defaultValue;\n\n /**\n * Builds some computed fields and assigns them to the instance.\n *\n * Undefined properties are not assigned.\n *\n * The _constructor_ is private. Use {@link ArgSpec.create} instead.\n * @private\n * @param {string} name\n * @param {ArgSpecOptions<D>} [opts]\n */\n constructor(name, {extType, extName, dest, defaultValue} = {}) {\n // we must normalize the extension name to fit into our convention for CLI\n // args.\n const arg = ArgSpec.toArg(name, extType, extName);\n\n const ref = ArgSpec.toSchemaRef(name, extType, extName);\n\n // if no explicit `dest` provided, just camelCase the name to avoid needing\n // to use bracket syntax when accessing props on the parsed args object.\n const rawDest = _.camelCase(dest ?? name);\n\n const destKeypath = extType && extName ? [extType, extName, rawDest].join('.') : rawDest;\n\n this.defaultValue = defaultValue;\n this.name = name;\n this.extType = extType;\n this.extName = extName;\n this.arg = arg;\n this.dest = destKeypath;\n this.ref = ref;\n this.rawDest = rawDest;\n }\n\n /**\n * Return the schema ID (`$id`) for the **argument** given the parameters.\n *\n * If you need the \"root\" or \"base\" schema ID, use {@link ArgSpec.toSchemaBaseRef} instead.\n * @param {string} name - Argument name\n * @param {ExtensionType} [extType] - Extension type\n * @param {string} [extName] - Extension name\n * @returns {string} Schema ID\n */\n static toSchemaRef(name, extType, extName) {\n const baseRef = ArgSpec.toSchemaBaseRef(extType, extName);\n if (extType && extName) {\n return [`${baseRef}#`, PROPERTIES, name].join('/');\n }\n return [`${baseRef}#`, PROPERTIES, SERVER_PROP_NAME, PROPERTIES, name].join('/');\n }\n\n /**\n * Return the schema ID for an extension or the base schema ID.\n * @param {ExtensionType} [extType] - Extension type\n * @param {string} [extName] - Extension name\n */\n static toSchemaBaseRef(extType, extName) {\n if (extType && extName) {\n return `${extType}-${ArgSpec.toNormalizedExtName(extName)}.json`;\n }\n return APPIUM_CONFIG_SCHEMA_ID;\n }\n\n /**\n * Return the unique ID for the argument given the parameters.\n * @param {string} name - Argument name\n * @param {ExtensionType} [extType] - Extension type\n * @param {string} [extName] - Extension name\n * @returns {string} Unique ID\n */\n static toArg(name, extType, extName) {\n const properName = _.kebabCase(name.replace(/^--?/, ''));\n if (extType && extName) {\n return [extType, _.kebabCase(extName), properName].join('-');\n }\n return properName;\n }\n\n /**\n * Normalizes a raw extension name (not including the type).\n * @param {string} extName - Extension name\n * @returns {string} Normalized extension name\n */\n static toNormalizedExtName(extName) {\n return _.kebabCase(extName);\n }\n\n /**\n * When given the root ID of a schema for an extension (`<extType>-<normalizedExtName>.json`) Returns an object containing the extension type and the _normalized_ extension name.\n * @param {string} schemaId - Root schema ID\n * @returns { {extType?: ExtensionType, normalizedExtName?: string} }\n */\n static extensionInfoFromRootSchemaId(schemaId) {\n const matches = schemaId.match(SCHEMA_ID_REGEXP);\n if (matches?.groups) {\n const {extType, normalizedExtName} =\n /** @type { {extType: ExtensionType, normalizedExtName: string} } */ (matches.groups);\n return {extType, normalizedExtName};\n }\n return {};\n }\n\n /**\n * Creates an `ArgSpec`\n *\n * @param {string} name - The canonical name of the argument. Corresponds to a key in a schema's\n * `properties` property.\n * @template D\n * @param {ArgSpecOptions<D>} [opts] - Options\n * @returns {Readonly<ArgSpec>}\n */\n static create(name, opts) {\n return Object.freeze(new ArgSpec(name, opts));\n }\n\n /**\n * String representation, useful for debugging\n * @returns {string}\n */\n /* istanbul ignore next */\n toString() {\n let str = `[ArgSpec] ${this.name} (${this.ref})`;\n if (this.extType && this.extName) {\n str += ` (ext: ${this.extType}/${this.extName})`;\n }\n return str;\n }\n}\n\n/**\n * Options for {@link ArgSpec.create}\n * @template D\n * @typedef ArgSpecOptions\n * @property {string} [extName]\n * @property {ExtensionType} [extType]\n * @property {string} [dest]\n * @property {D} [defaultValue]\n */\n\n/**\n * @typedef {import('@appium/types').ExtensionType} ExtensionType\n */\n"],"mappings":"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"}
1
+ {"version":3,"file":"arg-spec.js","sourceRoot":"","sources":["../../../lib/schema/arg-spec.js"],"names":[],"mappings":"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"}