This now consumes Ajv directly to validate CLI args. Since a JSON schema is made of JSON schemas, we can simply validate an argument against _the schema for that argument_.
- Replaced parser transformation functions (`parseSecurityFeatures()`, `parseJsonStringOrFile()`) with custom transforms which are bound to keyword `appiumCliTransformer`. e.g., any option that can now accept a JSON string or filepath on the command line may use `appiumCliTransformer: 'json'`. This is the default behavior for `array` and `object` -type options, which cannot easily be expressed on the CLI. The config file does _not_ support this behavior, so the value must be whatever the schema `type` says (e.g., an `object` instead of a JSON string or filepath). To this end, removed `parser-helpers.js`
- Further, we now disallow union types in the schema. A prop must have a single type.
- Added custom keywords `appiumCliDest`, `appiumCliDescription`, and `appiumCliTransformer`. Previously (if existed), this could have been any value--these are now typed by the schema--e.g., a number for `appiumCliDest` will fail.
- Added more types and TS checks around
- Fixed misspelling of "successfully" in various places
- Removed `@oclifg/errors` because we can now use `better-ajv-errors` to display them, as intended. It looks great!
- Moved all schema-related stuff to `lib/schema/` because I had too many modules
- Added more constants to please @mykola-mokhnach 😄
- Handles untyped properties or `null`-typed properties
- `getSchema()`, `validate()` etc now accept a schema ID. The schema ID is derived from the argument name. This is how we handle validation for each argument individually. The config file is still validated against the entire schema at once.
- Fixed problem where only `driverConfigs` were ever used to call extension commands!
- Added some semaphore-like things to `ExtConfigIO` to avoid multiple reads/writes at once
- Fixed display of metavars in `--help`
- More tests; removed tests for removed code
Just a bunch of random (mostly path-related) fixes.
## Monorepo
- Make `npm run clean` work cross-platform
- Sort root `package.json`
- Update Babel configs to suppress warning about `@babel/plugin-proposal-private-property-in-object`
- Add `.nyc_output` and `*.lerna_backup` to `.gitignore`
- Replace references to `appium-support`
- Sync `package.json` fields
- Add a [Wallaby](https://wallabyjs.com) configuration file
## appium
- `lib/config`: `package.json` resolution
- split some tests out of `config-specs.js` and into `config-e2e-specs.js` since they are very clearly not unit tests
- Improve `PROJECT_ROOT` resolution, which is still a hack
- Copy fixtures & fix paths to fixtures in tests
## @appium/base-driver
- `lib/basedriver/driver`: `package.json` resolution
- Fix broken tests when run in isolation (`chai.should()`)
## @appium/doctor
- `lib/doctor`: `package.json` resolution
- `lib/utils`: `package.json` resolution & exposed `resetLog()` which undoes what `configureBinaryLog()` does (for testing purposes)
- `utils-specs.js`: clean up after `onLogMessage` test
- copy fixtures into `build` upon transpile
- Upgrade `@appium/gulp-plugins`
## @appium/gulp-plugins
- Ensure `postTranspile` is run when `transpile` is run before tests
- Fix `.babelrc` like `babel.config.json`
## @appium/support
- Fixture resolution
- Fix broken tests when run in isolation (`chai-as-promised`)
- Copy fixtures when transpiling
* feat: add ability for drivers and plugins to recieve cli args
* chore: fix typo
* fix: make changes based on feedback
* feat: remove driver-specific server args from appium
* fix: resolve merge conflict
* fix: make changes based on feedback
* feat: add support for driver cli args in base driver
* feat: add support for testing driver args in fake-driver
* refactor: remove support for -custom locator strategy(should be handled by plugins instead)
* fix: makes changes based on feedback
* fix: remove outdated/unused args
* fix: fix docs
* fix: make changes based on feedback
* fix: make changes based on feedback
* fix: make changes based on feedback
* fix: make changes based on feedback
* fix: make tests pass
* test: tests are passing locally but not in CI, try something different to get them to pass
* test: try uninstalling fake-driver and reinstalling fake driver from packages
* fix: revert driver-e2e-specs.js and update node.js.yml
* fix: update package.json
* fix: add special case to npm
* fix: add todo
* fix: how relative paths are resolved in linkPackage
* chore: update @appium/fake-driver to use @appium/base-driver
BREAKING CHANGE: `fake-driver` now depends upon `@appium/base-driver@8.x`
## `@appium/fake-driver`
- need to use w3c capabilities only
- fix: find `app.xml` fixture properly when running tests via `mocha --require=@babel/register`
## `@appium/base-driver`
- fixed a dead URL in a comment
- updated the "logging" tests to manually supply w3c capabilities. `createSession()` does it for you, but `executeCommand('createSession')` does not.
- display the name of the driver under test when executing base driver's test suite with other drivers
Ref: #15425
* fix(fake-driver): add naive css selector support
* fix(fake-driver): helpers now use wdio instead of wd
- exported more constants as base-driver helpers do
- `deleteSession()` now expects a wdio `browser` (`driver`) object; removed closure
* fix(fake-driver): find-element-tests and driver-e2e-specs members passing
- alert-tests, context-tests, element-interaction-tests, general-tests all failing still
* fix(fake-driver): update interaction tests
replace unsupported `getLocation` with `getElementRect`
* fix(fake-driver): update alert tests
* fix(fake-driver): udpate context tests
* fix(fake-driver): update unit tests
* fix(base-driver): implement missing route for releaseActions
is the call to `this.proxyReleaseActions` even necessary?
* fix(fake-driver): update generic actions tests
also add a stub implementation of `releaseActions`, which wdio calls
* chore(fake-driver): remove redundant tests from find-element-tests
covered by other strategies
* fix(fake-driver): update generic actions tests
also fix path to screenshot (`screen.png`) when running tests outside of `build`
* chore(fake-driver): use fs module from @appium/support
* chore(base-driver): update hash in protocol consistency test
* fix(base-driver): update e2e test fn to prefer provided address/port over default
* chore: formatting