mirror of
https://github.com/appium/appium.git
synced 2026-02-22 11:19:06 -06:00
This changes the TS configuration to to a) emit declarations for supported packages, and b) build declarations incrementally by package. To begin, we are targeting `appium`, `@appium/base-driver` and `@appium/support` for declarations; these three are intended to be published with declarations generated via their JS. Both `@appium/support` and `appium` are fully typechecked (sans implicit `any` types), but `@appium/base-driver` is mostly not. Regardless, declarations are generated for all three. Each package will have its own `tsconfig.json` which "inherits" from `config/tsconfig.base.json`. Each will also need to declare relative paths to dependencies. e.g., the `appium` package must configure its `tsconfig.json` so that it depends on the declarations of `@appium/support` and also where to find `@appium/support`. Essentially, a small dependency tree gets built, and those at the "root" get their declarations built first; then the consumers use those declarations. Also reorganized some scripts and added `npm-run-all` to help and added a "typecheck" job to CI. Since `npm install` will build, it's pretty inconvenient to have `npm` abort installation if the build fails. In that case, if any of the build steps fail (see `build:loose`) the installation will continue. Added a `prepublishOnly` which runs a build in "strict" mode where everything must pass. _Note: there's still a strong coupling of "what `BaseDriver` provides" and "what an external driver *may* provide". It's unclear to me if this is a problem, though there seem to be a handful of methods that external drivers *must* implement. The easiest way to get around this would probably be to extract these required properties and methods into their own interface (duplication) if we cannot otherwise declare methods as "abstract". As it stands, the `Driver` is basically just `BaseDriver`._ Also: - Moved some configuration types out of `appium` and into here, since they are used both by `appium` and `base-driver` via `DriverOpts` - Split `Driver` type into "the thing that BaseDriver is" and "all the other methods external drivers can implement" - Added missing `proxyCommand` method - Better generics for `LogType` - Remove unused `Constructor` type - Better types for `getSession`/`getSessions` - Added util `Class` type - Added many missing typings from DefinitelyTyped - Added `ts-node` for `@wdio/types` (I need to send a PR to webdriver to eliminate this dependency) - Type checks in their CI step