Commit Graph
60 Commits
Author SHA1 Message Date
Jonathan Lipps eae3efd1d7 fix(base-driver): don't assign log to jwproxy from opts 2022-06-03 12:48:27 -07:00
Christopher Hiller 59b885aa66 chore(base-driver): guard against null sessions if proxy used weirdly 2022-05-12 12:32:57 -07:00
Christopher Hiller 0676cd27c3 chore(appium,support,opencv,docutils): assorted type fixes
- Some types in `appium` were renamed
- Others avoid errors
- Some are minor tweaks to `tsconfig.json` files

# Conflicts:
#	packages/appium/lib/extension/extension-config.js
#	packages/appium/types/extension-manifest.ts
#	packages/appium/types/extension.ts
#	packages/base-driver/lib/jsonwp-proxy/proxy.js
#	packages/support/lib/logging.js
#	packages/support/test/unit/logger/logger-force.spec.js
2022-05-12 12:32:57 -07:00
Christopher Hiller e5b21b5674 chore(base-driver): enable type checks
and a bunch of associated fixes

# Conflicts:
#	packages/base-driver/lib/basedriver/core.js
#	packages/base-driver/lib/basedriver/desired-caps.js
#	packages/base-driver/lib/basedriver/helpers.js
#	packages/base-driver/lib/express/server.js
2022-05-12 12:32:57 -07:00
Christopher Hiller 133db5355f chore: reformat everything
this reformats all `.js`, `.ts`, and `.d.ts` files.
2022-05-09 19:09:50 -07:00
Christopher Hiller ab6dfb3158 fix(base-driver): supportedLogTypes does not get overwritten
Closes #16738

There's a difference between assigning things to a prototype and public class fields, evidently.

To test this would be best done via interaction between drivers and `base-driver`, but affected drivers do not necessarily run the reusable test suite.  Fundamentally, a unit test for this would be testing Babel.  Unsure of best way to add an E2E test

- Also fiddled with some types, which still aren't quite right, but better.
- Simplified a `_.reduce()` call
2022-04-20 11:50:21 -07:00
Christopher Hiller 237529c1ac chore(types,base-driver): rename DriverOpts => ServerArgs
- these are first and foremost _server_ args, so go with that, except they _also_ get provided to drivers, so we can use the `DriverOpts` alias there.
- simplify `tsconfig.json` in `@appium/types`
2022-04-14 14:30:00 -07:00
Christopher Hiller 2d76923e72 fix(base-driver): do not throw if updateSettings aren't provided
BREAKING CHANGES

Some plugin tests were calling code which called the `update()` method of `DeviceSettings`, but there's apparently no code that actually sets the `onUpdateSettings` listener anywhere (maybe drivers can opt-in to this behavior?), which was causing exceptions to get thrown.

The E2E tests expected this code to reject, but the plugin tests expected it to _not_ reject, so I'm not sure what's right.

- adds unit tests for `DeviceSettings`

_Note: after further investigation, I think this was throwing simply due to `base-plugin` using an old version of `appium-fake-driver` which used an old `appium-base-driver`.  @jlipps says this change is OK._
2022-04-14 14:30:00 -07:00
Mykola Mokhnach cad6272f6b chore(base-driver): Update the deprecated 'del' method name (#16765) 2022-04-13 21:30:54 +02:00
Mykola Mokhnach 78a46375ae feat(base-driver): Add a route for new window creation (#16748)
* feat(base-driver): Add a route for new window creation

* Update param name

* Update types
2022-04-12 14:51:16 -07:00
Mykola Mokhnach 46b7df3f77 chore(base-driver): Only parse session id when necessary 2022-04-11 08:24:55 +02:00
Mykola Mokhnach ad3b4b2c96 fix(base-driver): isErrorType import 2022-04-11 08:16:42 +02:00
Mykola Mokhnach 5d2156a06b fix(base-driver): Make sure proxyReqRes helper never throws any exceptions (#16742) 2022-04-11 07:59:30 +02:00
Mykola Mokhnach ff3b290c77 chore(base-driver): Update ws dependency (#16739) 2022-04-09 22:56:01 +02:00
Mykola Mokhnach a9651d3c59 fix(base-driver): Update/simplify the logic for logger prefix (#16683) 2022-04-01 22:34:57 +02:00
Mykola Mokhnach d8a9b4da36 feat(base-driver): Add more shadow root-related W3C routes (#16700) 2022-03-31 17:46:44 +02:00
Christopher Hiller 06f75a281c chore(base-driver): remove ts-expect-error directive from elementShadowRoot route 2022-03-30 14:42:56 -07:00
Mykola Mokhnach 6973f54e06 chore: Fix indentation (#16678) 2022-03-29 08:00:54 +02:00
Mykola Mokhnach c63e9bf8e0 fix(base-driver): Make sure we never mutate incoming args (#16670) 2022-03-28 20:35:37 +02:00
Christopher Hiller 164bedb2f1 feat(base-driver): generate declaration files
This was not as easy as the other two.  The main issue involves the `BaseDriver` class and is threefold:

1. `BaseDriver` and a valid external subclass thereof (a `Driver`) are not the same, because the former is essentially _abstract_. There is no notion of an abstract class in JS nor in TS for JS.
2. Splitting `BaseDriver` into several modules and "mixing in" some modules is just not well-understood by TS.
3. `AppiumDriver` inherits _most_ of `BaseDriver`, but overrides some functions with differing signatures. This is unsupported by TS.

To work around these problems, I had to:

1. Move the `Driver` interface into `@appium/types`, since other packages may depend on it.  We do not want circular dependencies, which is likely to occur otherwise.  Further, there is no way to tell TS for JS that a class _implements_ an interface or type.
2. Refactor the mixins (in `basedriver/commands/`) into "mixin classes", as understood by typescript. These are dynamic classes returned by functions which accept a class parameter, and _extend_ that class. The result is marginally better, but the implementation is ... well, see for yourself.  It is not possible to use declaration merging to just "trick" TS into thinking that `BaseDriver` has all of these extra methods; classes cannot be merged, and even if you could, you can't use declaration merging to "add" methods afaict.
3. `BaseDriver` is now an empty class which inherits from all mixins applied to `DriverCore`.  Due to syntactic restrictions, it must be a `class` statement in order to use the `@implements` tag, which causes TS to check that the result fully implements `Driver`.  `AppiumDriver` _also_ inherits from `DriverCore`, since it does not override `BaseDriver` "properly".  `BaseDriverCore` itself is pretty small, containing only those functions which `AppiumDriver` defines as differing.

Otherwise:

- `BaseDriver` does not inherit from `Protocol`, which is just an empty class. `Protocol` was removed.
- All of the error classes are exported from `protocol/errors`, because TS cannot see them otherwise.
- Exported missing `GET_STATUS_COMMAND` from `protocol/index`
- Re-exported `normalizeBasePath` from `server` instead of `protocol`, since that's where it's defined
- Removed `index.d.ts`
- Mixins use `@implements` as well. Note that `@implements` does not support `import('..')` syntax.

chore(base-driver): attempted to make types for mixins less awful

fixed a couple issues in the types in `driver.js`

core(base-driver): add capabilities types

- also move the bluebird config into the index
- fix references to `DriverOpts`
- add `assignServer()` to `BaseDriverCore`, used by `AppiumDriver`

chore(base-driver): fix more types

add missing reference to `@appium/types` in `tsconfig.json`

fix(base-driver): ensure getLogEvents is async

fix(base-driver): add some more type checks and fix logCustomEvent to be async

chore(base-driver): reformat
2022-03-25 14:54:45 -07:00
Mykola Mokhnach bbfc7ef51d fix(base-driver): Use WeakRef to reference the driver instance in the log prefix generator (#16636) 2022-03-23 18:48:33 +01:00
Kazuaki Matsuo 3ee93ba5bd fix: revert 15809 (#16621)
* fix: revert 15809

* change comment
2022-03-21 10:10:35 -07:00
Kazuaki Matsuo 2de0e383cc chore(base-driver): address zip/unzip in the docstring of configureApp (#16548)
* fix(base): do not skip unzip even onPostProcess is function

* address unzip/zip
2022-03-10 11:22:54 -08:00
Christopher Hiller d9fd258eee chore: make typedefs less verbose
`@typedef {Object} Foo` is the same as `@typedef Foo`, and one of those is shorter.
2022-03-09 14:50:45 -08:00
Mykola Mokhnach 493c48d190 feat: Add a missing route for element shadow root (#16538) 2022-03-09 18:51:41 +01:00
Mykola Mokhnach 16b2e8f14b chore: Switch @dabh/colors to @colors/colors (#16539) 2022-03-09 18:51:24 +01:00
Mykola Mokhnach 3c7ac49478 refactor(base-driver): Tune the logic for the destination logger extraction (#16488) 2022-02-23 11:11:41 +01:00
Mykola Mokhnach 83493941ee refactor: Make loggers connected to the particular driver instances (#16478) 2022-02-23 07:49:42 +01:00
Mykola Mokhnach 1165269644 fix: Update property name after lru-cache package bump (#16446) 2022-02-14 11:22:52 +01:00
Mykola Mokhnach 632b75227c chore(base-driver): Bump lru-cache (#16431) 2022-02-10 08:27:05 +01:00
Kazuaki Matsuo 5aae1ae8a7 fix: remove BASEDRIVER_HANDLED_SETTINGS (#16368) 2022-02-09 17:41:50 +01:00
Mykola Mokhnach a881ae992a feat(base-driver): Add the size validation of the passed settings objects (#16420) 2022-02-09 08:09:25 +01:00
Mykola Mokhnach ed50a38657 refactor: Allow any of createSession arguments to be W3C capabilities object (#16408) 2022-02-07 15:27:55 +01:00
Mykola Mokhnach 40a6f054dc fix: Switch colors package to a non-compomised repository (#16317) 2022-01-11 06:45:13 +01:00
Mykola Mokhnach d69fc6002c refactor(base-driver): Make configureApp helper more flexible (#16168) 2021-12-15 09:51:00 +01:00
Kazuaki Matsuo 9a85a41b9e fix(base-driver): follow W3C capabilities more strictly (#16193)
* fix(base-driver): strict capabilities to follow W3C spec more strictly

* fix typo

* just leave a warning message
2021-12-12 01:49:20 +09:00
Jonathan Lipps 7b3893a362 fix(appium): fix incorrect handling of delete session with regard to plugin driver assignment
also take the opportunity to constantize a few more strings
2021-12-01 09:42:25 -08:00
Mykola Mokhnach 07887b7c18 refactor(base-driver): Always assume the returned responses are in W3C format (#16175) 2021-11-29 22:55:48 +01:00
Jonathan Lipps 0e7b19aabe chore!(base-driver): remove support for execute driver script since it will be a plugin moving forward 2021-11-23 09:54:19 -08:00
Christopher Hiller 85cd55bc2c fix(base-driver): create cjs wrapper 2021-11-18 12:08:50 -08:00
Kazuaki Matsuo 1307b2554a chore(base): Make useSystemUnzip option configurable via process environment (#16082) 2021-11-13 17:40:46 +09:00
Jonathan Lipps 5b9a4c2ffa chore(appium): some cosmetic improvements to session and proxy naming etc 2021-11-12 22:15:06 -05:00
Jonathan Lipps 70910087d1 fix(appium): fix interaction of plugins with proxying
Previously, you could not 'await next()' in a plugin and trigger the default proxy behaviour.
Now this is possible.
2021-11-12 22:15:06 -05:00
Jonathan Lipps c5f363f5d9 refactor(base-driver): all drivers now support executeCommand 2021-11-12 22:15:06 -05:00
Christopher Hiller 548310d018 chore(appium): use Ajv to validate CLI args
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
2021-11-09 11:57:26 -08:00
Kazuaki Matsuo 829eb6623d chore(base-driver): Add params to setWindowRect handler (#15974) 2021-10-17 08:07:04 +09:00
Jonathan Lipps 3e5aec945b feat(base-driver): allow drivers, and plugins to declare that certain routes must never be proxied 2021-09-16 10:13:57 -07:00
Jonathan LippsandAyan Khan 050d099e87 feat!(appium): support driver-specific args via --driver-args
Co-authored-by: Ayan Khan <ayan@headspin.io>
2021-09-10 10:35:56 -07:00
Kazuaki Matsuo 6b8ac24b25 chore(base-driver): remove non-W3C route which are already in W3C (#15809)
* chore: remove some mjsonwp route

* update hash
2021-09-10 14:46:54 +09:00
Kazuaki Matsuo 71e50c5619 feat(base-driver): add /se route for log (#15788)
* feat(base-driver): add /se route for log

* fix(base-driver): fix test
2021-08-30 15:11:06 +09:00