Compare commits

...
Author SHA1 Message Date
Christopher Hiller 922725b4f1 chore: publish
- appium@2.0.0-beta.70
 - @appium/docutils@0.3.13
2023-05-19 15:24:13 -07:00
Christopher Hiller f0ebe2e02f fix(docutils): fix broken executable 2023-05-19 15:22:46 -07:00
Christopher Hiller 2ca1581870 chore: publish
- appium@2.0.0-beta.69
 - @appium/docutils@0.3.12
2023-05-19 14:56:44 -07:00
Christopher Hiller 6aec50b074 chore(docutils): lint
- consolidate some eslint overrides
2023-05-19 13:42:08 -07:00
Christopher Hiller 426830d14a fix(docutils): exec mike/mkdocs via python -m
- also adds a "custom typedoc path" option
- consolidate the `whichPython*` functions into a single `findPython` fn
2023-05-19 13:42:08 -07:00
Christopher Hiller 9538c34131 fix(docutils): add @types/which as it is exported 2023-05-19 13:42:08 -07:00
Christopher Hiller 5d24ea1ad2 fix(docutils): run mkdocs via python -m 2023-05-19 13:42:08 -07:00
Christopher Hiller db73971018 fix(docutils): provide CJS executable for proper linking 2023-05-19 13:42:08 -07:00
Christopher Hiller 7b17754786 fix(docutils): try python3 if python not in PATH 2023-05-19 13:42:08 -07:00
Christopher Hiller ba07d2a854 docs(typedoc-plugin-appium): update README.md
- add option documentation
- add warning about using the module directly
- add instructions for updating snapshots
2023-05-19 12:49:48 -07:00
Jonathan Lipps ee365ad168 chore: publish
- appium@2.0.0-beta.68
 - @appium/base-driver@9.3.9
 - @appium/base-plugin@2.2.9
 - @appium/doctor@2.0.16
 - @appium/docutils@0.3.11
 - @appium/fake-plugin@3.1.13
 - @appium/images-plugin@2.1.1
 - @appium/support@4.0.1
 - @appium/test-support@3.0.15
2023-05-19 09:47:39 -07:00
renovate[bot] 5e351dc503 chore(deps): update definitelytyped 2023-05-19 14:04:30 +00:00
Mykola Mokhnach f512e596eb fix(images-plugin): Add the missing dependency to support (#18652) 2023-05-19 11:13:23 +02:00
Mykola Mokhnach 3eec0227a2 docs(support): Update readme (#18647) 2023-05-19 08:14:06 +02:00
Christopher Hiller ea42548442 fix(support): add missing @types/which 2023-05-18 13:09:03 -07:00
renovate[bot] e1fa6c2133 chore(deps): update dependency rimraf to v5 2023-05-18 11:30:26 -07:00
34 changed files with 1005 additions and 278 deletions
+9 -7
View File
@@ -10,12 +10,6 @@
"files": "packages/*/test/**/*",
"rules": {"func-names": "off"}
},
{
"files": ["packages/*/index.js", "packages/*/scripts/**/*.js", "test/*.js"],
"parserOptions": {
"sourceType": "script"
}
},
{
"files": [
"packages/appium/support.js",
@@ -27,9 +21,17 @@
}
},
{
"files": ["./test/setup.js", "./**/scripts/**/*.js", "./packages/*/index.js"],
"files": [
"./test/setup.js",
"./**/scripts/**/*.js",
"./packages/*/index.js",
"./packages/docutils/bin/appium-docs.js"
],
"rules": {
"@typescript-eslint/no-var-requires": "off"
},
"parserOptions": {
"sourceType": "script"
}
},
{
+517 -52
View File
@@ -20,9 +20,9 @@
"@types/chai-as-promised": "7.1.5",
"@types/diff": "5.0.3",
"@types/mocha": "10.0.1",
"@types/node": "18.16.5",
"@types/node": "18.16.13",
"@types/semver": "7.3.13",
"@types/sinon": "10.0.14",
"@types/sinon": "10.0.15",
"@types/sinon-chai": "3.2.9",
"@types/teen_process": "2.0.0",
"@types/ws": "8.5.4",
@@ -59,7 +59,7 @@
"npm-run-all": "4.1.5",
"prettier": "2.8.8",
"rewiremock": "3.14.5",
"rimraf": "3.0.2",
"rimraf": "5.0.1",
"serve-static": "1.15.0",
"sinon": "15.0.4",
"sinon-chai": "3.7.0",
@@ -3906,6 +3906,21 @@
"node": ">=10"
}
},
"node_modules/@npmcli/move-file/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/@npmcli/name-from-folder": {
"version": "2.0.0",
"dev": true,
@@ -4765,9 +4780,9 @@
}
},
"node_modules/@types/node": {
"version": "18.16.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.5.tgz",
"integrity": "sha512-seOA34WMo9KB+UA78qaJoCO20RJzZGVXQ5Sh6FWu0g/hfT44nKXnej3/tCQl7FL97idFpBhisLYCTB50S0EirA=="
"version": "18.16.13",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.13.tgz",
"integrity": "sha512-uZRomboV1vBL61EBXneL4j9/hEn+1Yqa4LQdpGrKmXFyJmVfWc9JV9+yb2AlnOnuaDnb2PDO3hC6/LKmzJxP1A=="
},
"node_modules/@types/normalize-package-data": {
"version": "2.4.1",
@@ -4854,9 +4869,10 @@
"license": "MIT"
},
"node_modules/@types/sinon": {
"version": "10.0.14",
"version": "10.0.15",
"resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz",
"integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==",
"dev": true,
"license": "MIT",
"dependencies": {
"@types/sinonjs__fake-timers": "*"
}
@@ -5798,6 +5814,59 @@
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
}
},
"node_modules/appium-adb/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/appium-adb/node_modules/rimraf/node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/appium-adb/node_modules/rimraf/node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/appium-adb/node_modules/rimraf/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/appium-adb/node_modules/semver": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
@@ -6680,6 +6749,63 @@
"node": ">=10"
}
},
"node_modules/cacache/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/cacache/node_modules/rimraf/node_modules/brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"node_modules/cacache/node_modules/rimraf/node_modules/glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
},
"engines": {
"node": "*"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/cacache/node_modules/rimraf/node_modules/minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"dependencies": {
"brace-expansion": "^1.1.7"
},
"engines": {
"node": "*"
}
},
"node_modules/cacheable-lookup": {
"version": "5.0.4",
"license": "MIT",
@@ -8346,6 +8472,21 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
"node_modules/del/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/del/node_modules/slash": {
"version": "3.0.0",
"dev": true,
@@ -9938,6 +10079,20 @@
"node": "^10.12.0 || >=12.0.0"
}
},
"node_modules/flat-cache/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/flatted": {
"version": "3.2.7",
"license": "ISC"
@@ -15874,6 +16029,21 @@
"node": "^12.13.0 || ^14.15.0 || >=16.0.0"
}
},
"node_modules/node-gyp/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/node-int64": {
"version": "0.4.0",
"dev": true,
@@ -16681,6 +16851,21 @@
"node": "*"
}
},
"node_modules/nx/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/nx/node_modules/semver": {
"version": "7.3.4",
"dev": true,
@@ -18343,6 +18528,20 @@
"node": ">=8"
}
},
"node_modules/puppeteer-core/node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/puppeteer-core/node_modules/ws": {
"version": "8.5.0",
"license": "MIT",
@@ -19048,18 +19247,78 @@
"license": "MIT"
},
"node_modules/rimraf": {
"version": "3.0.2",
"license": "ISC",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz",
"integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==",
"dev": true,
"dependencies": {
"glob": "^7.1.3"
"glob": "^10.2.5"
},
"bin": {
"rimraf": "bin.js"
"rimraf": "dist/cjs/src/bin.js"
},
"engines": {
"node": ">=14"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
},
"node_modules/rimraf/node_modules/glob": {
"version": "10.2.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.2.5.tgz",
"integrity": "sha512-Gj+dFYPZ5hc5dazjXzB0iHg2jKWJZYMjITXYPBRQ/xc2Buw7H0BINknRTwURJ6IC6MEFpYbLvtgVb3qD+DwyuA==",
"dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.0.3",
"minimatch": "^9.0.0",
"minipass": "^5.0.0 || ^6.0.2",
"path-scurry": "^1.7.0"
},
"bin": {
"glob": "dist/cjs/src/bin.js"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/minimatch": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz",
"integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==",
"dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
"engines": {
"node": ">=16 || 14 >=14.17"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/rimraf/node_modules/minipass": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz",
"integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==",
"dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
}
},
"node_modules/ripemd160": {
"version": "2.0.2",
"dev": true,
@@ -22355,15 +22614,15 @@
}
},
"packages/appium": {
"version": "2.0.0-beta.67",
"version": "2.0.0-beta.70",
"hasInstallScript": true,
"license": "Apache-2.0",
"dependencies": {
"@appium/base-driver": "^9.3.8",
"@appium/base-plugin": "^2.2.8",
"@appium/docutils": "^0.3.10",
"@appium/base-driver": "^9.3.9",
"@appium/base-plugin": "^2.2.9",
"@appium/docutils": "^0.3.13",
"@appium/schema": "^0.2.6",
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/types": "^0.11.1",
"@sidvind/better-ajv-errors": "2.1.0",
"@types/argparse": "2.0.10",
@@ -22567,10 +22826,10 @@
},
"packages/base-driver": {
"name": "@appium/base-driver",
"version": "9.3.8",
"version": "9.3.9",
"license": "Apache-2.0",
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/types": "^0.11.1",
"@colors/colors": "1.5.0",
"@types/async-lock": "1.4.0",
@@ -22618,11 +22877,11 @@
},
"packages/base-plugin": {
"name": "@appium/base-plugin",
"version": "2.2.8",
"version": "2.2.9",
"license": "Apache-2.0",
"dependencies": {
"@appium/base-driver": "^9.3.8",
"@appium/support": "^4.0.0"
"@appium/base-driver": "^9.3.9",
"@appium/support": "^4.0.1"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
@@ -22631,10 +22890,10 @@
},
"packages/doctor": {
"name": "@appium/doctor",
"version": "2.0.15",
"version": "2.0.16",
"license": "Apache-2.0",
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@colors/colors": "1.5.0",
"@types/bluebird": "3.5.38",
"@types/teen_process": "2.0.0",
@@ -22656,13 +22915,14 @@
},
"packages/docutils": {
"name": "@appium/docutils",
"version": "0.3.10",
"version": "0.3.13",
"license": "Apache-2.0",
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/tsconfig": "^0.3.0",
"@appium/typedoc-plugin-appium": "^0.6.4",
"@sliphua/lilconfig-ts-loader": "3.2.2",
"@types/which": "3.0.0",
"chalk": "4.1.2",
"consola": "2.15.3",
"diff": "5.1.0",
@@ -22687,13 +22947,18 @@
"yargs-parser": "21.1.1"
},
"bin": {
"appium-docs": "build/lib/cli/index.js"
"appium-docs": "bin/appium-docs.js"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
"npm": ">=8"
}
},
"packages/docutils/node_modules/@types/which": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.0.tgz",
"integrity": "sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ=="
},
"packages/docutils/node_modules/ansi-styles": {
"version": "4.3.0",
"license": "MIT",
@@ -22893,11 +23158,11 @@
},
"packages/fake-plugin": {
"name": "@appium/fake-plugin",
"version": "3.1.12",
"version": "3.1.13",
"license": "Apache-2.0",
"dependencies": {
"@appium/base-plugin": "^2.2.8",
"@appium/support": "^4.0.0",
"@appium/base-plugin": "^2.2.9",
"@appium/support": "^4.0.1",
"@types/bluebird": "3.5.38",
"bluebird": "3.7.2",
"lodash": "4.17.21",
@@ -22913,7 +23178,7 @@
},
"packages/images-plugin": {
"name": "@appium/images-plugin",
"version": "2.1.0",
"version": "2.1.1",
"license": "Apache-2.0",
"dependencies": {
"@appium/opencv": "^2.1.0",
@@ -23019,7 +23284,7 @@
},
"packages/support": {
"name": "@appium/support",
"version": "4.0.0",
"version": "4.0.1",
"license": "Apache-2.0",
"dependencies": {
"@appium/tsconfig": "^0.3.0",
@@ -23041,6 +23306,7 @@
"@types/supports-color": "8.1.1",
"@types/teen_process": "2.0.0",
"@types/uuid": "9.0.1",
"@types/which": "3.0.0",
"archiver": "5.3.1",
"axios": "1.4.0",
"base64-stream": "1.0.0",
@@ -23082,6 +23348,11 @@
"npm": ">=8"
}
},
"packages/support/node_modules/@types/which": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.0.tgz",
"integrity": "sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ=="
},
"packages/support/node_modules/are-we-there-yet": {
"version": "4.0.0",
"license": "ISC",
@@ -23258,10 +23529,10 @@
},
"packages/test-support": {
"name": "@appium/test-support",
"version": "3.0.14",
"version": "3.0.15",
"license": "Apache-2.0",
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@colors/colors": "1.5.0",
"bluebird": "3.7.2",
"lodash": "4.17.21",
@@ -23362,7 +23633,7 @@
"@appium/base-driver": {
"version": "file:packages/base-driver",
"requires": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/types": "^0.11.1",
"@colors/colors": "1.5.0",
"@types/async-lock": "1.4.0",
@@ -23404,14 +23675,14 @@
"@appium/base-plugin": {
"version": "file:packages/base-plugin",
"requires": {
"@appium/base-driver": "^9.3.8",
"@appium/support": "^4.0.0"
"@appium/base-driver": "^9.3.9",
"@appium/support": "^4.0.1"
}
},
"@appium/doctor": {
"version": "file:packages/doctor",
"requires": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@colors/colors": "1.5.0",
"@types/bluebird": "3.5.38",
"@types/teen_process": "2.0.0",
@@ -23427,10 +23698,11 @@
"@appium/docutils": {
"version": "file:packages/docutils",
"requires": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/tsconfig": "^0.3.0",
"@appium/typedoc-plugin-appium": "^0.6.4",
"@sliphua/lilconfig-ts-loader": "3.2.2",
"@types/which": "3.0.0",
"chalk": "4.1.2",
"consola": "2.15.3",
"diff": "5.1.0",
@@ -23455,6 +23727,11 @@
"yargs-parser": "21.1.1"
},
"dependencies": {
"@types/which": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.0.tgz",
"integrity": "sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ=="
},
"ansi-styles": {
"version": "4.3.0",
"requires": {
@@ -23561,8 +23838,8 @@
"@appium/fake-plugin": {
"version": "file:packages/fake-plugin",
"requires": {
"@appium/base-plugin": "^2.2.8",
"@appium/support": "^4.0.0",
"@appium/base-plugin": "^2.2.9",
"@appium/support": "^4.0.1",
"@types/bluebird": "3.5.38",
"bluebird": "3.7.2",
"lodash": "4.17.21",
@@ -23649,6 +23926,7 @@
"@types/supports-color": "8.1.1",
"@types/teen_process": "2.0.0",
"@types/uuid": "9.0.1",
"@types/which": "3.0.0",
"archiver": "5.3.1",
"axios": "1.4.0",
"base64-stream": "1.0.0",
@@ -23686,6 +23964,11 @@
"yauzl": "2.10.0"
},
"dependencies": {
"@types/which": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/@types/which/-/which-3.0.0.tgz",
"integrity": "sha512-ASCxdbsrwNfSMXALlC3Decif9rwDMu+80KGp5zI2RLRotfMsTv7fHL8W8VDp24wymzDyIFudhUeSCugrgRFfHQ=="
},
"are-we-there-yet": {
"version": "4.0.0",
"requires": {
@@ -23795,7 +24078,7 @@
"@appium/test-support": {
"version": "file:packages/test-support",
"requires": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@colors/colors": "1.5.0",
"bluebird": "3.7.2",
"lodash": "4.17.21",
@@ -26389,6 +26672,15 @@
"mkdirp": {
"version": "1.0.4",
"dev": true
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
}
}
},
@@ -27000,9 +27292,9 @@
}
},
"@types/node": {
"version": "18.16.5",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.5.tgz",
"integrity": "sha512-seOA34WMo9KB+UA78qaJoCO20RJzZGVXQ5Sh6FWu0g/hfT44nKXnej3/tCQl7FL97idFpBhisLYCTB50S0EirA=="
"version": "18.16.13",
"resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.13.tgz",
"integrity": "sha512-uZRomboV1vBL61EBXneL4j9/hEn+1Yqa4LQdpGrKmXFyJmVfWc9JV9+yb2AlnOnuaDnb2PDO3hC6/LKmzJxP1A=="
},
"@types/normalize-package-data": {
"version": "2.4.1"
@@ -27076,7 +27368,9 @@
"version": "1.7.1"
},
"@types/sinon": {
"version": "10.0.14",
"version": "10.0.15",
"resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-10.0.15.tgz",
"integrity": "sha512-3lrFNQG0Kr2LDzvjyjB6AMJk4ge+8iYhQfdnSwIwlG88FUOV43kPcQqDZkDa/h3WSZy6i8Fr0BSjfQtB1B3xuQ==",
"dev": true,
"requires": {
"@types/sinonjs__fake-timers": "*"
@@ -27510,11 +27804,11 @@
"appium": {
"version": "file:packages/appium",
"requires": {
"@appium/base-driver": "^9.3.8",
"@appium/base-plugin": "^2.2.8",
"@appium/docutils": "^0.3.10",
"@appium/base-driver": "^9.3.9",
"@appium/base-plugin": "^2.2.9",
"@appium/docutils": "^0.3.13",
"@appium/schema": "^0.2.6",
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/types": "^0.11.1",
"@sidvind/better-ajv-errors": "2.1.0",
"@types/argparse": "2.0.10",
@@ -27829,6 +28123,46 @@
"process": "^0.11.10"
}
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"requires": {
"glob": "^7.1.3"
},
"dependencies": {
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"requires": {
"brace-expansion": "^1.1.7"
}
}
}
},
"semver": {
"version": "7.4.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.4.0.tgz",
@@ -28439,6 +28773,50 @@
"mkdirp": {
"version": "1.0.4",
"dev": true
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
},
"dependencies": {
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"glob": {
"version": "7.2.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
"integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.1.1",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"minimatch": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
"integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
}
}
}
}
},
@@ -29485,6 +29863,15 @@
"slash": "^3.0.0"
},
"dependencies": {
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"slash": {
"version": "3.0.0",
"dev": true
@@ -30570,6 +30957,16 @@
"requires": {
"flatted": "^3.1.0",
"rimraf": "^3.0.2"
},
"dependencies": {
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"requires": {
"glob": "^7.1.3"
}
}
}
},
"flatted": {
@@ -34503,6 +34900,15 @@
"requires": {
"abbrev": "^1.0.0"
}
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
}
}
},
@@ -35081,6 +35487,15 @@
"brace-expansion": "^1.1.7"
}
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dev": true,
"requires": {
"glob": "^7.1.3"
}
},
"semver": {
"version": "7.3.4",
"dev": true,
@@ -36171,6 +36586,14 @@
"find-up": "^4.0.0"
}
},
"rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"requires": {
"glob": "^7.1.3"
}
},
"ws": {
"version": "8.5.0",
"requires": {}
@@ -36620,9 +37043,51 @@
"version": "0.2.5"
},
"rimraf": {
"version": "3.0.2",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz",
"integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==",
"dev": true,
"requires": {
"glob": "^7.1.3"
"glob": "^10.2.5"
},
"dependencies": {
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0"
}
},
"glob": {
"version": "10.2.5",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.2.5.tgz",
"integrity": "sha512-Gj+dFYPZ5hc5dazjXzB0iHg2jKWJZYMjITXYPBRQ/xc2Buw7H0BINknRTwURJ6IC6MEFpYbLvtgVb3qD+DwyuA==",
"dev": true,
"requires": {
"foreground-child": "^3.1.0",
"jackspeak": "^2.0.3",
"minimatch": "^9.0.0",
"minipass": "^5.0.0 || ^6.0.2",
"path-scurry": "^1.7.0"
}
},
"minimatch": {
"version": "9.0.0",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.0.tgz",
"integrity": "sha512-0jJj8AvgKqWN05mrwuqi8QYKx1WmYSUoKSxu5Qhs9prezTz10sxAHGNZe9J9cqIJzta8DWsleh2KaVaLl6Ru2w==",
"dev": true,
"requires": {
"brace-expansion": "^2.0.1"
}
},
"minipass": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-6.0.2.tgz",
"integrity": "sha512-MzWSV5nYVT7mVyWCwn2o7JH13w2TBRmmSqSRCKzTw+lmft9X4z+3wjvs06Tzijo5z4W/kahUCDpRXTF+ZrmF/w==",
"dev": true
}
}
},
"ripemd160": {
+3 -3
View File
@@ -92,9 +92,9 @@
"@types/chai-as-promised": "7.1.5",
"@types/diff": "5.0.3",
"@types/mocha": "10.0.1",
"@types/node": "18.16.5",
"@types/node": "18.16.13",
"@types/semver": "7.3.13",
"@types/sinon": "10.0.14",
"@types/sinon": "10.0.15",
"@types/sinon-chai": "3.2.9",
"@types/teen_process": "2.0.0",
"@types/ws": "8.5.4",
@@ -131,7 +131,7 @@
"npm-run-all": "4.1.5",
"prettier": "2.8.8",
"rewiremock": "3.14.5",
"rimraf": "3.0.2",
"rimraf": "5.0.1",
"serve-static": "1.15.0",
"sinon": "15.0.4",
"sinon-chai": "3.7.0",
+24
View File
@@ -3,6 +3,30 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.0.0-beta.70](https://github.com/appium/appium/compare/appium@2.0.0-beta.69...appium@2.0.0-beta.70) (2023-05-19)
**Note:** Version bump only for package appium
## [2.0.0-beta.69](https://github.com/appium/appium/compare/appium@2.0.0-beta.68...appium@2.0.0-beta.69) (2023-05-19)
**Note:** Version bump only for package appium
## [2.0.0-beta.68](https://github.com/appium/appium/compare/appium@2.0.0-beta.67...appium@2.0.0-beta.68) (2023-05-19)
**Note:** Version bump only for package appium
## [2.0.0-beta.67](https://github.com/appium/appium/compare/appium@2.0.0-beta.66...appium@2.0.0-beta.67) (2023-05-17)
+5 -5
View File
@@ -1,6 +1,6 @@
{
"name": "appium",
"version": "2.0.0-beta.67",
"version": "2.0.0-beta.70",
"description": "Automation for Apps.",
"keywords": [
"automation",
@@ -60,11 +60,11 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-driver": "^9.3.8",
"@appium/base-plugin": "^2.2.8",
"@appium/docutils": "^0.3.10",
"@appium/base-driver": "^9.3.9",
"@appium/base-plugin": "^2.2.9",
"@appium/docutils": "^0.3.13",
"@appium/schema": "^0.2.6",
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/types": "^0.11.1",
"@sidvind/better-ajv-errors": "2.1.0",
"@types/argparse": "2.0.10",
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [9.3.9](https://github.com/appium/appium/compare/@appium/base-driver@9.3.8...@appium/base-driver@9.3.9) (2023-05-19)
**Note:** Version bump only for package @appium/base-driver
## [9.3.8](https://github.com/appium/appium/compare/@appium/base-driver@9.3.7...@appium/base-driver@9.3.8) (2023-05-17)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/base-driver",
"version": "9.3.8",
"version": "9.3.9",
"description": "Base driver class for Appium drivers",
"keywords": [
"automation",
@@ -44,7 +44,7 @@
"test:types": "tsd"
},
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/types": "^0.11.1",
"@colors/colors": "1.5.0",
"@types/async-lock": "1.4.0",
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.2.9](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.8...@appium/base-plugin@2.2.9) (2023-05-19)
**Note:** Version bump only for package @appium/base-plugin
## [2.2.8](https://github.com/appium/appium/compare/@appium/base-plugin@2.2.7...@appium/base-plugin@2.2.8) (2023-05-17)
**Note:** Version bump only for package @appium/base-plugin
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/base-plugin",
"version": "2.2.8",
"version": "2.2.9",
"description": "The base plugin used to create Appium 2.0 plugins",
"keywords": [
"automation",
@@ -40,8 +40,8 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-driver": "^9.3.8",
"@appium/support": "^4.0.0"
"@appium/base-driver": "^9.3.9",
"@appium/support": "^4.0.1"
},
"engines": {
"node": "^14.17.0 || ^16.13.0 || >=18.0.0",
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.0.16](https://github.com/appium/appium/compare/@appium/doctor@2.0.15...@appium/doctor@2.0.16) (2023-05-19)
**Note:** Version bump only for package @appium/doctor
## [2.0.15](https://github.com/appium/appium/compare/@appium/doctor@2.0.14...@appium/doctor@2.0.15) (2023-05-17)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/doctor",
"version": "2.0.15",
"version": "2.0.16",
"description": "Test environment for fitness to run Appium",
"keywords": [
"automation",
@@ -44,7 +44,7 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@colors/colors": "1.5.0",
"@types/bluebird": "3.5.38",
"@types/teen_process": "2.0.0",
+30
View File
@@ -3,6 +3,36 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [0.3.13](https://github.com/appium/appium/compare/@appium/docutils@0.3.12...@appium/docutils@0.3.13) (2023-05-19)
### Bug Fixes
* **docutils:** fix broken executable ([f0ebe2e](https://github.com/appium/appium/commit/f0ebe2e02f3e4164f07fd10ca36f460ff7a61682))
## [0.3.12](https://github.com/appium/appium/compare/@appium/docutils@0.3.11...@appium/docutils@0.3.12) (2023-05-19)
### Bug Fixes
* **docutils:** add @types/which as it is exported ([9538c34](https://github.com/appium/appium/commit/9538c34131cd2f8a3c45039efd65678bc0980497))
* **docutils:** exec mike/mkdocs via python -m ([426830d](https://github.com/appium/appium/commit/426830d14a348f163535a7f935a65b028008738d))
* **docutils:** provide CJS executable for proper linking ([db73971](https://github.com/appium/appium/commit/db73971018b560ca47527173094720eee3d20a55))
* **docutils:** run mkdocs via python -m ([5d24ea1](https://github.com/appium/appium/commit/5d24ea1ad294fa28f7ecce125e5342b081a84c83))
* **docutils:** try python3 if python not in PATH ([7b17754](https://github.com/appium/appium/commit/7b177547865a8343625cf089c97cebfb93fd6955))
## [0.3.11](https://github.com/appium/appium/compare/@appium/docutils@0.3.10...@appium/docutils@0.3.11) (2023-05-19)
**Note:** Version bump only for package @appium/docutils
## [0.3.10](https://github.com/appium/appium/compare/@appium/docutils@0.3.9...@appium/docutils@0.3.10) (2023-05-17)
+13
View File
@@ -0,0 +1,13 @@
#!/usr/bin/env node
'use strict';
const {main} = require('../build/lib/cli');
const {getLogger} = require('../build/lib/logger');
const log = getLogger('cli');
// eslint-disable-next-line promise/prefer-await-to-then, promise/prefer-await-to-callbacks
main().catch((err) => {
log.error('Caught otherwise-unhandled rejection (this is probably a bug):', err);
});
+28 -15
View File
@@ -13,10 +13,12 @@ import {
DEFAULT_SERVE_HOST,
DEFAULT_SERVE_PORT,
NAME_BIN,
NAME_MIKE,
NAME_MKDOCS_YML,
NAME_PYTHON,
} from '../constants';
import {DocutilsError} from '../error';
import {findMkDocsYml, readPackageJson, whichMike} from '../fs';
import {findMkDocsYml, findPython, readPackageJson} from '../fs';
import {getLogger} from '../logger';
import {argify, spawnBackgroundProcess, SpawnBackgroundProcessOpts, stopwatch} from '../util';
@@ -24,31 +26,33 @@ const log = getLogger('builder:deploy');
/**
* Runs `mike serve`
* @param pythonPath Path to Python 3 executable
* @param args Extra args to `mike build`
* @param opts Extra options for `teen_process.Subprocess.start`
* @param mikePath Path to `mike` executable
*/
async function doServe(
pythonPath: string,
args: string[] = [],
opts: SpawnBackgroundProcessOpts = {},
mikePath?: string
opts: SpawnBackgroundProcessOpts = {}
) {
mikePath = mikePath ?? (await whichMike());
const finalArgs = ['serve', ...args];
return spawnBackgroundProcess(mikePath, finalArgs, opts);
const finalArgs = ['-m,', NAME_MIKE, 'serve', ...args];
return spawnBackgroundProcess(pythonPath, finalArgs, opts);
}
/**
* Runs `mike build`
* @param pythonPath Path to Python 3 executable
* @param args Extra args to `mike build`
* @param opts Extra options to `teen_process.exec`
* @param mikePath Path to `mike` executable
*/
async function doDeploy(args: string[] = [], opts: TeenProcessExecOptions = {}, mikePath?: string) {
mikePath = mikePath ?? (await whichMike());
const finalArgs = ['deploy', ...args];
log.debug('Launching %s with args: %O', mikePath, finalArgs);
return await exec(mikePath, finalArgs, opts);
async function doDeploy(
pythonPath: string,
args: string[] = [],
opts: TeenProcessExecOptions = {}
) {
const finalArgs = ['-m', NAME_MIKE, 'deploy', ...args];
log.debug('Executing %s via: %s %O', NAME_MIKE, pythonPath, finalArgs);
return await exec(pythonPath, finalArgs, opts);
}
/**
@@ -90,6 +94,15 @@ export async function deploy({
execOpts,
}: DeployOpts = {}) {
const stop = stopwatch('deploy');
const pythonPath = await findPython();
if (!pythonPath) {
throw new DocutilsError(
`Could not find ${NAME_PYTHON}3/${NAME_PYTHON} executable in PATH; please install Python v3`
);
}
mkDocsYmlPath = mkDocsYmlPath ?? (await findMkDocsYml(cwd));
if (!mkDocsYmlPath) {
throw new DocutilsError(
@@ -122,7 +135,7 @@ export async function deploy({
}
stop(); // discard
// unsure about how SIGHUP is handled here
await doServe(mikeArgs, serveOpts);
await doServe(pythonPath, mikeArgs, serveOpts);
} else {
log.info('Deploying into branch %s', branch);
const mikeArgs = [
@@ -137,7 +150,7 @@ export async function deploy({
if (alias) {
mikeArgs.push(alias);
}
await doDeploy(mikeArgs, execOpts);
await doDeploy(pythonPath, mikeArgs, execOpts);
log.success('Finished deployment into branch %s (%dms)', branch, stop());
}
+2
View File
@@ -75,6 +75,7 @@ export function parseNav(nav: MkDocsYmlNav): ParsedNavData[] {
const queue: QueueItem[] = [{entries, keypath: ''}];
while (queue.length) {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const {entries, keypath} = queue.shift()!;
for (const [key, item] of entries) {
if (_.isString(item)) {
@@ -153,6 +154,7 @@ function getRootHeaderKeypath(headerItems: ParsedNavData[], header: string) {
// these are the parts of the keypath of the first item, which will contain the header string. it
// dosn't matter whether we pick the first one or any one; they will all contain the same root
// keypath by definition.
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const rootHeaderKeypathParts = _.toPath(_.first(headerItems)!.keypath);
// this is the keypath up to the header string, inclusive.
+23 -21
View File
@@ -7,9 +7,9 @@
import path from 'node:path';
import {exec, TeenProcessExecOptions} from 'teen_process';
import {DEFAULT_SITE_DIR, NAME_BIN, NAME_MKDOCS_YML} from '../constants';
import {DEFAULT_SITE_DIR, NAME_BIN, NAME_MKDOCS, NAME_MKDOCS_YML, NAME_PYTHON} from '../constants';
import {DocutilsError} from '../error';
import {findMkDocsYml, readMkDocsYml, whichMkDocs} from '../fs';
import {findMkDocsYml, findPython, readMkDocsYml} from '../fs';
import {getLogger} from '../logger';
import {relative, spawnBackgroundProcess, SpawnBackgroundProcessOpts, stopwatch} from '../util';
@@ -17,37 +17,31 @@ const log = getLogger('mkdocs');
/**
* Runs `mkdocs serve`
* @param pythonPath Path to Python 3 executable
* @param args Extra args to `mkdocs build`
* @param opts Extra options for `teen_process.Subprocess.start`
* @param mkDocsPath Path to `mkdocs` executable
*/
async function doServe(
pythonPath: string,
args: string[] = [],
opts: SpawnBackgroundProcessOpts = {},
mkDocsPath?: string
opts: SpawnBackgroundProcessOpts = {}
) {
mkDocsPath = mkDocsPath ?? (await whichMkDocs());
const finalArgs = ['serve', ...args];
log.debug('Launching %s with args: %s', mkDocsPath, finalArgs);
return spawnBackgroundProcess(mkDocsPath, finalArgs, opts);
const finalArgs = ['-m', NAME_MKDOCS, 'serve', ...args];
log.debug('Executing %s via: %s, %O', NAME_MKDOCS, pythonPath, finalArgs);
return spawnBackgroundProcess(pythonPath, finalArgs, opts);
}
/**
* Runs `mkdocs build`
* @param pythonPath Path to Python 3 executable
* @param args Extra args to `mkdocs build`
* @param opts Extra options to `teen_process.exec`
* @param mkDocsPath Path to `mkdocs` executable
*/
async function doBuild(
args: string[] = [],
opts: TeenProcessExecOptions = {},
mkDocsPath?: string
) {
mkDocsPath = mkDocsPath ?? (await whichMkDocs());
const finalArgs = ['build', ...args];
log.debug('Launching %s with args: %O', mkDocsPath, finalArgs);
return await exec(mkDocsPath, finalArgs, opts);
async function doBuild(pythonPath: string, args: string[] = [], opts: TeenProcessExecOptions = {}) {
const finalArgs = ['-m', NAME_MKDOCS, 'build', ...args];
log.debug('Executing %s via: %s, %O', NAME_MKDOCS, pythonPath, finalArgs);
return await exec(pythonPath, finalArgs, opts);
}
/**
@@ -63,6 +57,14 @@ export async function buildSite({
execOpts,
}: BuildMkDocsOpts = {}) {
const stop = stopwatch('build-mkdocs');
const pythonPath = await findPython();
if (!pythonPath) {
throw new DocutilsError(
`Could not find ${NAME_PYTHON}3/${NAME_PYTHON} executable in PATH; please install Python v3`
);
}
mkDocsYmlPath = mkDocsYmlPath
? path.resolve(process.cwd(), mkDocsYmlPath)
: await findMkDocsYml(cwd);
@@ -77,10 +79,10 @@ export async function buildSite({
}
if (serve) {
// unsure about how SIGHUP is handled here
await doServe(mkdocsArgs, serveOpts);
await doServe(pythonPath, mkdocsArgs, serveOpts);
} else {
log.info('Building site...');
await doBuild(mkdocsArgs, execOpts);
await doBuild(pythonPath, mkdocsArgs, execOpts);
let relSiteDir;
if (siteDir) {
relSiteDir = relative(cwd, siteDir);
+10 -1
View File
@@ -50,7 +50,7 @@ const opts = {
},
'python-path': {
defaultDescription: '(derived from shell)',
description: 'Path to python 3 executable',
description: 'Path to python3 executable',
group: ValidateCommandGroup.Paths,
nargs: 1,
normalize: true,
@@ -81,6 +81,15 @@ const opts = {
requiresArg: true,
type: 'string',
},
'typedoc-path': {
defaultDescription: '(derived from shell)',
description: 'Path to typedoc executable',
group: ValidateCommandGroup.Paths,
nargs: 1,
normalize: true,
requiresArg: true,
type: 'string',
},
typescript: {
default: true,
description: 'Validate TypeScript environment',
+41 -20
View File
@@ -3,27 +3,26 @@
* @module
*/
import findUp from 'find-up';
import YAML from 'yaml';
import readPkg, {NormalizedPackageJson, PackageJson} from 'read-pkg';
import path from 'node:path';
import {JsonValue} from 'type-fest';
import {fs} from '@appium/support';
import findUp from 'find-up';
import * as JSON5 from 'json5';
import _ from 'lodash';
import path from 'node:path';
import _pkgDir from 'pkg-dir';
import {getLogger} from './logger';
import readPkg, {NormalizedPackageJson, PackageJson} from 'read-pkg';
import {JsonValue} from 'type-fest';
import {Application, TypeDocReader} from 'typedoc';
import YAML from 'yaml';
import {
NAME_TYPEDOC_JSON,
NAME_MKDOCS_YML,
NAME_PACKAGE_JSON,
NAME_MKDOCS,
NAME_NPM,
NAME_PACKAGE_JSON,
NAME_PYTHON,
NAME_MIKE,
NAME_TYPEDOC,
NAME_TYPEDOC_JSON,
} from './constants';
import {DocutilsError} from './error';
import {getLogger} from './logger';
import {MkDocsYml} from './model';
const log = getLogger('fs');
@@ -207,27 +206,49 @@ export function safeWriteFile(filepath: string, content: JsonValue, overwrite =
/**
* `which` with memoization
*/
export const cachedWhich = _.memoize(fs.which);
/**
* Finds `mkdocs` executable
*/
export const whichMkDocs = _.partial(cachedWhich, NAME_MKDOCS);
const cachedWhich = _.memoize(fs.which as typeof import('which'));
/**
* Finds `npm` executable
*/
export const whichNpm = _.partial(cachedWhich, NAME_NPM);
export const whichNpm = _.partial(cachedWhich, NAME_NPM, {nothrow: true});
/**
* Finds `python` executable
*/
export const whichPython = _.partial(cachedWhich, NAME_PYTHON);
const whichPython = _.partial(cachedWhich, NAME_PYTHON, {nothrow: true});
/**
* Finds `mike` executable
* Finds `python3` executable
*/
export const whichMike = _.partial(cachedWhich, NAME_MIKE);
const whichPython3 = _.partial(cachedWhich, `${NAME_PYTHON}3`, {nothrow: true});
/**
* Finds `typedoc` executable
*/
const whichTypeDoc = _.partial(cachedWhich, NAME_TYPEDOC, {nothrow: true});
/**
* Finds the `typedoc` executable.
*
* Looks in the `node_modules/.bin` dir from the current working directory, and if this fails, in the `node_modules` dir for the file which `.bin/typedoc` should be a symlink of, and if _that_ fails, try the `PATH`.
*/
export const findTypeDoc = _.memoize(async (cwd = process.cwd()): Promise<string | undefined> => {
// .cmd is for win32, of course. note that glob _always_ uses posix dir separators.
const globResult =
(await fs.glob('node_modules/.bin/typedoc?(.cmd)', {cwd, nodir: true})) ??
(await fs.glob('node_modules/**/typedoc/bin/typedoc', {cwd, nodir: true, follow: true}));
return _.first(globResult) ?? (await whichTypeDoc());
});
/**
* Finds the `python3` or `python` executable in the user's `PATH`.
*
* `python3` is preferred over `python`, since the latter could be Python 2.
*/
export const findPython = _.memoize(
async (): Promise<string | undefined> => (await whichPython3()) ?? (await whichPython())
);
/**
* Reads an `mkdocs.yml` file, merges inherited configs, and returns the result. The result is cached.
+4 -2
View File
@@ -20,7 +20,7 @@ import {createScaffoldTask, ScaffoldTaskOptions} from './scaffold';
import {getLogger} from './logger';
import {MkDocsYml, TsConfigJson, TypeDocJson} from './model';
import _ from 'lodash';
import {stringifyJson5, stringifyYaml} from './fs';
import {findPython, stringifyJson5, stringifyYaml} from './fs';
/**
* Data for the base `mkdocs.yml` file
@@ -158,10 +158,12 @@ export const initMkDocs = createScaffoldTask<InitMkDocsOptions, MkDocsYml>(
* @param opts Options
*/
export async function initPython({
pythonPath = NAME_PYTHON,
pythonPath,
dryRun = false,
upgrade = false,
}: InitPythonOptions = {}): Promise<void> {
pythonPath = pythonPath ?? (await findPython()) ?? NAME_PYTHON;
const args = ['-m', 'pip', 'install', '-r', REQUIREMENTS_TXT_PATH];
if (upgrade) {
args.push('--upgrade');
+9 -10
View File
@@ -6,20 +6,19 @@
* @module
*/
import figures from 'figures';
import logSymbols from 'log-symbols';
import chalk, {ForegroundColor, BackgroundColor} from 'chalk';
import chalk, {type BackgroundColor, type ForegroundColor} from 'chalk';
import consola, {
logType as LogType,
ConsolaReporterLogObject,
type Consola,
type ConsolaReporterLogObject,
FancyReporter,
FancyReporterOptions,
Consola,
ConsolaOptions,
LogLevel,
type FancyReporterOptions,
type LogLevel,
type logType as LogType,
} from 'consola';
import {DEFAULT_LOG_LEVEL, LogLevelMap} from './constants';
import figures from 'figures';
import _ from 'lodash';
import logSymbols from 'log-symbols';
import {DEFAULT_LOG_LEVEL, LogLevelMap} from './constants';
/**
* This is a reporter for `consola` which uses some extra/custom icons and colors.
+1 -2
View File
@@ -6,7 +6,6 @@
import _ from 'lodash';
import {SpawnOptions, spawn} from 'node:child_process';
import path from 'node:path';
import type {SubProcess} from 'teen_process';
/**
* Computes a relative path, prepending `./`
@@ -26,7 +25,7 @@ export function stopwatch(id: string) {
const start = Date.now();
stopwatch.cache.set(id, start);
return () => {
const result = Date.now() - stopwatch.cache.get(id)!;
const result = Date.now() - (stopwatch.cache.get(id) ?? 0);
stopwatch.cache.delete(id);
return result;
};
+49 -30
View File
@@ -31,14 +31,14 @@ import {
} from './constants';
import {DocutilsError} from './error';
import {
findPkgDir,
findMkDocsYml,
findPkgDir,
findTypeDoc,
readJson5,
readTypedocJson,
whichMkDocs,
whichNpm,
whichPython,
readMkDocsYml,
readTypedocJson,
whichNpm,
findPython,
} from './fs';
import {getLogger} from './logger';
import {MkDocsYml, PipPackage, TypeDocJson} from './model';
@@ -62,7 +62,7 @@ const TYPEDOC_VERSION_REGEX = /TypeDoc\s(\d+\.\d+\..+)/;
/**
* Matches the MkDocs version string from `mkdocs --version`
*/
const MKDOCS_VERSION_REGEX = /mkdocs,\s+version\s+(\d+\.\d+\.\S+)/;
const MKDOCS_VERSION_REGEX = /\s+version\s+(\d+\.\d+\.\S+)/;
const log = getLogger('validate');
@@ -95,12 +95,12 @@ export class DocutilsValidator extends EventEmitter {
/**
* Path to `npm` executable.
*/
protected readonly npmPath: string | undefined;
protected readonly npmPath?: string;
/**
* Path to `python` executable.
*/
protected readonly pythonPath: string | undefined;
protected readonly pythonPath?: string;
/**
* List of validations to perform
@@ -120,27 +120,29 @@ export class DocutilsValidator extends EventEmitter {
/**
* Path to `mkdocs.yml`. If not provided, will be lazily resolved.
*/
protected mkDocsYmlPath: string | undefined;
protected mkDocsYmlPath?: string;
/**
* Path to `package.json`. If not provided, will be lazily resolved.
*/
protected packageJsonPath: string | undefined;
protected packageJsonPath?: string;
/**
* Path to the package directory. If not provided, will be lazily resolved.
*/
protected pkgDir: string | undefined;
protected pkgDir?: string;
/**
* Path to `tsconfig.json`. If not provided, will be lazily resolved.
*/
protected tsconfigJsonPath: string | undefined;
protected tsconfigJsonPath?: string;
/**
* Path to `typedoc.json`. If not provided, will be lazily resolved.
*/
protected typeDocJsonPath: string | undefined;
protected typeDocJsonPath?: string;
protected typeDocPath?: string;
/**
* Emitted when validation begins with a list of validation kinds to be performed
@@ -181,6 +183,7 @@ export class DocutilsValidator extends EventEmitter {
this.typeDocJsonPath = opts.typedocJson;
this.npmPath = opts.npm;
this.mkDocsYmlPath = opts.mkdocsYml;
this.typeDocPath = opts.typedocPath;
if (opts.python) {
this.validations.add(NAME_PYTHON);
@@ -314,21 +317,19 @@ export class DocutilsValidator extends EventEmitter {
* Validates that the correct version of `mkdocs` is installed
*/
protected async validateMkDocs() {
let mkDocsPath: string | undefined;
try {
mkDocsPath = await whichMkDocs();
} catch {
// _pretty sure_ the exception code is always ENOENT
const pythonPath = this.pythonPath ?? (await findPython());
if (!pythonPath) {
return this.fail(
`Could not find ${NAME_MKDOCS} executable in PATH. If it is installed, check your PATH environment variable.`
`Could not find ${NAME_PYTHON} executable in PATH. If it is installed, check your PATH environment variable.`
);
}
let rawMkDocsVersion: string | undefined;
try {
({stdout: rawMkDocsVersion} = await exec(mkDocsPath, ['--version']));
({stdout: rawMkDocsVersion} = await exec(pythonPath, ['-m', NAME_MKDOCS, '--version']));
} catch (err) {
return this.fail(`${mkDocsPath} --version failed: ${err}`);
return this.fail(`Failed to get MkDocs version: ${err}`);
}
const match = rawMkDocsVersion.match(MKDOCS_VERSION_REGEX);
if (match) {
@@ -343,12 +344,12 @@ export class DocutilsValidator extends EventEmitter {
const {version: mkDocsReqdVersion} = mkDocsPipPkg;
if (version !== mkDocsReqdVersion) {
return this.fail(
`${NAME_MKDOCS} at ${mkDocsPath} is v${version}, but ${REQUIREMENTS_TXT_PATH} requires v${mkDocsReqdVersion}`
`${NAME_MKDOCS} is v${version}, but ${REQUIREMENTS_TXT_PATH} requires v${mkDocsReqdVersion}`
);
}
} else {
throw new DocutilsError(
`Could not parse version from "${mkDocsPath} --version". This is a bug. Output was ${rawMkDocsVersion}`
`Could not parse version from MkDocs. This is a bug. Output was ${rawMkDocsVersion}`
);
}
@@ -423,7 +424,7 @@ export class DocutilsValidator extends EventEmitter {
*/
protected async validatePythonDeps() {
let pipListOutput: string;
const pythonPath = this.pythonPath ?? (await whichPython());
const pythonPath = this.pythonPath ?? (await findPython());
if (!pythonPath) {
return this.fail(`Could not find ${NAME_PYTHON} in PATH. Is it installed?`);
}
@@ -499,7 +500,7 @@ export class DocutilsValidator extends EventEmitter {
* Asserts that the Python version is 3.x
*/
protected async validatePythonVersion() {
const pythonPath = this.pythonPath ?? (await whichPython());
const pythonPath = this.pythonPath ?? (await findPython());
if (!pythonPath) {
return this.fail(`Could not find ${NAME_PYTHON} in PATH. Is it installed?`);
}
@@ -520,17 +521,30 @@ export class DocutilsValidator extends EventEmitter {
/**
* Asserts TypeDoc is installed, runnable, the correct version, and that the config file is readable
* and constaints required options
*
* @todo Another option would be to `npm exec typedoc@<version>` which delegates to `npx`.
*/
protected async validateTypeDoc() {
const pkgDir = await this.findPkgDir();
const typeDocPath = this.typeDocPath ?? (await findTypeDoc(pkgDir));
if (!typeDocPath) {
return this.fail(`Could not find ${NAME_TYPEDOC}; is it installed?`);
}
log.debug('Found %s at %s', NAME_TYPEDOC, typeDocPath);
let rawTypeDocVersion: string;
let typeDocVersion: string;
try {
({stdout: rawTypeDocVersion} = await exec('npm', ['exec', NAME_TYPEDOC, '--', '--version'], {
({stdout: rawTypeDocVersion} = await exec(process.execPath, [typeDocPath, '--version'], {
cwd: pkgDir,
}));
} catch {
return this.fail(`Could not find ${NAME_TYPEDOC} executable from ${pkgDir}`);
} catch (err) {
return this.fail(
`Could not execute ${process.execPath} ${typeDocPath} from ${pkgDir}. Reason: ${
(err as Error).message
}`
);
}
if (rawTypeDocVersion) {
@@ -543,7 +557,8 @@ export class DocutilsValidator extends EventEmitter {
);
}
const reqdTypeDocVersion = DOCUTILS_PKG.dependencies!.typedoc!;
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
const reqdTypeDocVersion = DOCUTILS_PKG.dependencies!.typedoc!; // this is our own package.json
if (!satisfies(typeDocVersion, reqdTypeDocVersion)) {
return this.fail(
`Found TypeDoc version ${typeDocVersion}, but ${reqdTypeDocVersion} is required`
@@ -596,7 +611,7 @@ export class DocutilsValidator extends EventEmitter {
if (!typeDocJson.out) {
return this.fail(
new DocutilsError(
`Missing "out" property in ${relTypeDocJsonPath}; path "${DEFAULT_REL_TYPEDOC_OUT_PATH} is recommended`
`Missing "out" property in ${relTypeDocJsonPath}; path "${DEFAULT_REL_TYPEDOC_OUT_PATH}" is recommended`
)
);
}
@@ -714,6 +729,10 @@ export interface DocutilsValidatorOpts {
* If `true`, run TypeDoc validation
*/
typedoc?: boolean;
/**
* Path to `typedoc` executable
*/
typedocPath?: string;
/**
* Path to `typedoc.json`
*/
+4 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/docutils",
"version": "0.3.10",
"version": "0.3.13",
"description": "Documentation generation utilities for Appium and related projects",
"keywords": [
"automation",
@@ -28,7 +28,7 @@
"lib": "lib"
},
"bin": {
"appium-docs": "./build/lib/cli/index.js"
"appium-docs": "./bin/appium-docs.js"
},
"files": [
"index.js",
@@ -49,10 +49,11 @@
"start": "node ./build/lib/cli/index.js"
},
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@appium/tsconfig": "^0.3.0",
"@appium/typedoc-plugin-appium": "^0.6.4",
"@sliphua/lilconfig-ts-loader": "3.2.2",
"@types/which": "3.0.0",
"chalk": "4.1.2",
"consola": "2.15.3",
"diff": "5.1.0",
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.1.13](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.12...@appium/fake-plugin@3.1.13) (2023-05-19)
**Note:** Version bump only for package @appium/fake-plugin
## [3.1.12](https://github.com/appium/appium/compare/@appium/fake-plugin@3.1.11...@appium/fake-plugin@3.1.12) (2023-05-17)
**Note:** Version bump only for package @appium/fake-plugin
+3 -3
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/fake-plugin",
"version": "3.1.12",
"version": "3.1.13",
"description": "A fake Appium 2.0 plugin",
"keywords": [
"automation",
@@ -39,8 +39,8 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/base-plugin": "^2.2.8",
"@appium/support": "^4.0.0",
"@appium/base-plugin": "^2.2.9",
"@appium/support": "^4.0.1",
"@types/bluebird": "3.5.38",
"bluebird": "3.7.2",
"lodash": "4.17.21",
+9
View File
@@ -3,6 +3,15 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [2.1.1](https://github.com/appium/appium/compare/@appium/images-plugin@2.1.0...@appium/images-plugin@2.1.1) (2023-05-19)
### Bug Fixes
* **images-plugin:** Add the missing dependency to support ([#18652](https://github.com/appium/appium/issues/18652)) ([f512e59](https://github.com/appium/appium/commit/f512e596eb54edb5ca8993b3451aa4a22184bc57))
## [2.1.0](https://github.com/appium/appium/compare/@appium/images-plugin@2.0.10...@appium/images-plugin@2.1.0) (2023-05-17)
+1 -1
View File
@@ -1,4 +1,4 @@
import {node} from '@appium/support';
import {node} from 'appium/support';
export const IMAGE_STRATEGY = '-image';
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/images-plugin",
"version": "2.1.0",
"version": "2.1.1",
"description": "Plugin for working with images and image elements in Appium",
"keywords": [
"automation",
+9
View File
@@ -3,6 +3,15 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [4.0.1](https://github.com/appium/appium/compare/@appium/support@4.0.0...@appium/support@4.0.1) (2023-05-19)
### Bug Fixes
* **support:** add missing @types/which ([ea42548](https://github.com/appium/appium/commit/ea42548442713f3fefa711719d4ad54dff212f04))
## [4.0.0](https://github.com/appium/appium/compare/@appium/support@3.1.11...@appium/support@4.0.0) (2023-05-17)
+121 -72
View File
@@ -1,62 +1,112 @@
# appium-support
Utility functions used to support libs used across appium packages.
Utility functions used to support Appium drivers and plugins.
`npm install appium-support`
# Usage in drivers and plugins
Appium, as of version 1.5 is all based on promises, so this module provides promise wrappers for some common operations.
It is recommended to have Appium as a peer dependency in driver and plugin packages.
Add the following line to `peerDependencies` section of your module's `package.json`:
Most notably, we wrap `fs` for file system commands. Note the addition of `hasAccess`.
Also note that `fs.mkdir` doesn't throw an error if the directory already exists, it will just resolve.
```js
"peerDependencies": {
"appium": "^<minimum_server_version>"
}
```
### Methods
Afterwards import it in your code similarly to the below example:
- system.isWindows
- system.isMac
- system.isLinux
- system.isOSWin64
- system.arch
- system.macOsxVersion
```js
import {timing, util} from 'appium/support';
```
- util.hasContent - returns true if input string has content
- util.hasValue - returns true if input value is not undefined and no null
- util.escapeSpace
- util.escapeSpecialChars
- util.localIp
- util.cancellableDelay
- util.multiResolve - multiple path.resolve
- util.unwrapElement - parse an element ID from an element object: e.g.: `{ELEMENT: 123, "element-6066-11e4-a52e-4f735466cecf": 123}` returns `123`
- util.wrapElement - convert an element ID to an element object of the form: e.g.: `123` returns `{ELEMENT: 123, "element-6066-11e4-a52e-4f735466cecf": 123}`
# Usage in helper modules
- *fs.hasAccess* - use this over `fs.access`
- *fs.exists* - calls `fs.hasAccess`
- *fs.rimraf*
- *fs.mkdir* - doesn't throw an error if directory already exists
- *fs.copyFile*
- fs.open
- fs.close
- fs.access
- fs.readFile
- fs.writeFile
- fs.write
- fs.readlink
- fs.chmod
- fs.unlink
- fs.readdir
- fs.stat
- fs.rename
- *fs.md5*
If you want to use this module in a helper library, which is not a driver or a plugin,
then add the following line to `dependencies` section of your module's `package.json`:
- plist.parsePlistFile
- plist.updatePlistFile
```js
"dependencies": {
"@appium/support": "<module_version>"
}
```
- mkdirp
Afterwards import it in your code similarly to the below example:
- logger
```js
import {timing, util} from '@appium/support';
```
- zip.extractAllTo - Extracts contents of a zipfile to a directory
- zip.readEntries - Reads entries (files and directories) of a zipfile
- zip.toInMemoryZip - Converts a directory into a base64 zipfile
### Categories
All utility functions are split into a bunch of different categories. Each category has its own file under the `lib` folder. All utility functions in these files are documented.
#### fs
Most of the functions there are just thin wrappers over utility functions available in [Promises API](https://nodejs.org/api/fs.html#promises-api).
#### env
Several helpers needed by the server to cope with internal dependencies and manifests.
#### console
Wrappers for the command line interface abstraction used by the Appium server.
#### image-util
Utilities to work with images. Use [sharp](https://github.com/lovell/sharp) under the hood.
#### log-internal
Utilities needed for internal Appium log config assistance.
#### logging
See [below](#logger)
#### mjpeg
Helpers needed to implement [MJPEG streaming](https://en.wikipedia.org/wiki/Motion_JPEG#Video_streaming).
#### net
Helpers needed for network interactions, for example, upload and download of files.
#### node
Set of Node.js-specific utility functions needed, for example, to ensure objects immutability or to calculate their sizes.
#### npm
Set of [npm](https://en.wikipedia.org/wiki/Npm_(software))-related helpers.
#### plist
Set of utilities used to read and write data from [plist](https://en.wikipedia.org/wiki/Property_List) files in javascript.
#### process
Helpers for interactions with system processes. These APIs don't support Windows.
#### system
Set of helper functions needed to determine properties of the current operating system.
#### tempdir
Set of helpers that allow interactions with temporary folders.
#### timing
Helpers that allow to measure execution time.
#### util
Miscellaneous utilities.
#### zip
Helpers that allow to work with archives in .ZIP format.
## logger
@@ -85,10 +135,9 @@ Will produce
warn mymodule a warning
```
### Environment variables
There are two environment variable flags that affect the way `appium-base-driver` `logger` works.
There are two environment variable flags that affect the way `logger` works.
`_TESTING`
@@ -108,43 +157,43 @@ There are two environment variable flags that affect the way `appium-base-driver
`log[level](message)`
- logs to `level`
```js
import { logger } from 'appium-support';
let log = logger.getLogger('mymodule');
```js
import { logger } from 'appium-support';
let log = logger.getLogger('mymodule');
log.info('hi!');
// => info mymodule hi!
```
log.info('hi!');
// => info mymodule hi!
```
`log.unwrap()`
- retrieves the underlying [npmlog](https://github.com/npm/npmlog) object, in order to manage how logging is done at a low level (e.g., changing output streams, retrieving an array of messages, adding log levels, etc.).
```js
import { getLogger } from 'appium-base-driver';
let log = getLogger('mymodule');
```js
import { getLogger } from 'appium-base-driver';
let log = getLogger('mymodule');
log.info('hi!');
log.info('hi!');
let npmlogger = log.unwrap();
let npmlogger = log.unwrap();
// any `npmlog` methods
let logs = npmlogger.record;
// logs === [ { id: 0, level: 'info', prefix: 'mymodule', message: 'hi!', messageRaw: [ 'hi!' ] }]
```
// any `npmlog` methods
let logs = npmlogger.record;
// logs === [ { id: 0, level: 'info', prefix: 'mymodule', message: 'hi!', messageRaw: [ 'hi!' ] }]
```
`log.errorAndThrow(error)`
- logs the error passed in, at `error` level, and then throws the error. If the error passed in is not an instance of [Error](https://nodejs.org/api/errors.html#errors_class_error) (either directly, or a subclass of `Error`) it will be wrapped in a generic `Error` object.
```js
import { getLogger } from 'appium-base-driver';
let log = getLogger('mymodule');
```js
import { getLogger } from 'appium-base-driver';
let log = getLogger('mymodule');
// previously there would be two lines
log.error('This is an error');
throw new Error('This is an error');
// previously there would be two lines
log.error('This is an error');
throw new Error('This is an error');
// now is compacted
log.errorAndThrow('This is an error');
```
// now is compacted
log.errorAndThrow('This is an error');
```
+2 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/support",
"version": "4.0.0",
"version": "4.0.1",
"description": "Support libs used across appium packages",
"keywords": [
"automation",
@@ -60,6 +60,7 @@
"@types/supports-color": "8.1.1",
"@types/teen_process": "2.0.0",
"@types/uuid": "9.0.1",
"@types/which": "3.0.0",
"archiver": "5.3.1",
"axios": "1.4.0",
"base64-stream": "1.0.0",
+8
View File
@@ -3,6 +3,14 @@
All notable changes to this project will be documented in this file.
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
## [3.0.15](https://github.com/appium/appium/compare/@appium/test-support@3.0.14...@appium/test-support@3.0.15) (2023-05-19)
**Note:** Version bump only for package @appium/test-support
## [3.0.14](https://github.com/appium/appium/compare/@appium/test-support@3.0.13...@appium/test-support@3.0.14) (2023-05-17)
+2 -2
View File
@@ -1,6 +1,6 @@
{
"name": "@appium/test-support",
"version": "3.0.14",
"version": "3.0.15",
"description": "A collection of test utilities used across Appium packages",
"keywords": [
"automation",
@@ -45,7 +45,7 @@
"test:unit": "mocha \"./test/unit/**/*.spec.js\""
},
"dependencies": {
"@appium/support": "^4.0.0",
"@appium/support": "^4.0.1",
"@colors/colors": "1.5.0",
"bluebird": "3.7.2",
"lodash": "4.17.21",
+38 -20
View File
@@ -6,32 +6,34 @@
This package leverages [TypeDoc](https://typedoc.org) to generate command documentation (HTTP endpoints, payload information, etc.) for Appium v2+ drivers and plugins.
## Important Note
_If you are an Appium extension author and just want to build HTML docs_, **don't install this directly**--instead, install [`@appium/docutils`](https://github.com/appium/appium/tree/master/packages/docutils), which is a higher-level package that configures everything for you.
If you _only_ want to build markdown docs for your extension, then you can use this package directly.
## Installation
`npm` v8+ is required to install this package.
```bash
npm install appium@next typedoc @appium/typedoc-plugin-appium --save-dev
npm install @appium/typedoc-plugin-appium --save-dev
```
`typedoc` and `appium` are peer dependencies of this package. Newer versions of `npm` will install these automatically (if possible).
The above command installs the plugin as well as all necessary peer dependencies. See [`package.json`](https://github.com/appium/appium/blob/master/packages/docutils/package.json) for the full list of dependencies.
## Usage
TypeDoc is configured via a `typedoc.json` or `typedoc.js` file ([read the docs](https://typedoc.org/guides/options/) for more information).
An Appium extension author wishing to generate documentation for their extension will need to create a `typedoc.json`. At minimum, it should contain:
> TODO: The plugin should be able to detect the entry points automatically, so this should not be necessary
An Appium extension author wishing to generate markdown documentation for their extension will need to create a `typedoc.json`. At minimum, it should contain:
```json
{
"entryPointStrategy": "packages",
"entryPoints": [
"./node_modules/appium",
"./node_modules/@appium/base-driver",
"./node_modules/@appium/types",
"."
],
"entryPoints": ["."],
"name": "<name of extension>",
"theme": "appium",
"out": "<path to output directory>"
}
```
@@ -42,21 +44,37 @@ Once this file is created, you can run `typedoc` to generate the documentation,
This plugin supports all of the options from [typedoc-plugin-markdown](https://npm.im/typedoc-plugin-markdown), as well as the following:
### `commandsDir`
### `outputModules`
> TODO
### `forceBreadcrumbs`
> TODO
`boolean` - Output module, class, interface, and other type information (the usual TypeDoc output) in addition to command documentation. This is needed for full documentation of types. _Default value: `true`_
### `outputBuiltinCommands`
> TODO
`boolean` - Outputs _all_ commands and types from Appium builtins--not just your extension. This is intended to be used by Appium itself. _Default value: `false`_
### `outputModules`
### `packageTitles`
> TODO
`Array<{name: string, title: string}>`: An array of objects containing module name `name` and display name `title`. By default, the module name is used for the title; use this to override that behavior. _Default value: `undefined`_
### `commandsDir`
`string` - The name of the "commands" directory relative to the TypeDoc output directory (`out`). _Default value: `commands`_
### `forceBreadcrumbs`
`boolean` - Forces breadcrumbs to be output; overrides `hideBreadcrumbs` from `typedoc-plugin-markdown`. _Default value: `false`_
## Development
This packages uses snapshot tests to assert the generated markdown is correct. If you have made changes which affect the plugin's output, you will need to update the snapshots.
To update the snapshots, execute:
```bash
UPDATE_SNAPSHOT=1 npm test
```
This will (likely) modify the snapshots in your working copy, so you will then need to commit them.
## License