appium-uiautomator2-driver 8.0.0 → 8.1.0
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.
- package/CHANGELOG.md +12 -0
- package/README.md +1 -0
- package/build/lib/constraints.d.ts +3 -0
- package/build/lib/constraints.d.ts.map +1 -1
- package/npm-shrinkwrap.json +67 -41
- package/package.json +4 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,15 @@
|
|
|
1
|
+
## [8.1.0](https://github.com/appium/appium-uiautomator2-driver/compare/v8.0.1...v8.1.0) (2026-07-04)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* bump android driver to support chromedriverGrantPermissions ([5eb3016](https://github.com/appium/appium-uiautomator2-driver/commit/5eb30163b9555f73745ded908b28e3b28fc119bb))
|
|
6
|
+
|
|
7
|
+
## [8.0.1](https://github.com/appium/appium-uiautomator2-driver/compare/v8.0.0...v8.0.1) (2026-07-01)
|
|
8
|
+
|
|
9
|
+
### Miscellaneous Chores
|
|
10
|
+
|
|
11
|
+
* downgrade conventional-changelog-conventionalcommits to v9 ([#1016](https://github.com/appium/appium-uiautomator2-driver/issues/1016)) ([00a56e9](https://github.com/appium/appium-uiautomator2-driver/commit/00a56e95fd98615f1cdf94cf044324a59187ad81))
|
|
12
|
+
|
|
1
13
|
## [8.0.0](https://github.com/appium/appium-uiautomator2-driver/compare/v7.6.2...v8.0.0) (2026-06-26)
|
|
2
14
|
|
|
3
15
|
### ⚠ BREAKING CHANGES
|
package/README.md
CHANGED
|
@@ -181,6 +181,7 @@ appium:chromedriverExecutableDir | Full path to the folder where chromedriver ex
|
|
|
181
181
|
appium:chromedriverChromeMappingFile | Full path to the chromedrivers mapping file. This file is used to statically map webview/browser versions to the chromedriver versions that are capable of automating them. Read [Automatic Chromedriver Discovery article](#automatic-discovery-of-compatible-chromedriver) for more details.
|
|
182
182
|
appium:chromedriverUseSystemExecutable | Set it to `true` in order to enforce the usage of chromedriver, which gets downloaded by Appium automatically upon installation. This driver might not be compatible with the destination browser or a web view. `false` by default.
|
|
183
183
|
appium:chromedriverDisableBuildCheck | Being set to `true` disables the compatibility validation between the current chromedriver and the destination browser/web view. Use it with care.
|
|
184
|
+
appium:chromedriverGrantPermissions | Being set to `true` grants all the runtime permissions to the Chrome/web view package resolved for the chromedriver session before Chrome is launched, so the automated session is not interrupted by a native runtime permission dialog (for example geolocation, camera or file access). An error is thrown if the capability is enabled but the target package name cannot be resolved. `false` by default.
|
|
184
185
|
appium:recreateChromeDriverSessions | If this capability is set to `true` then chromedriver session is always going to be killed and then recreated instead of just suspending it on context switching. `false` by default
|
|
185
186
|
appium:nativeWebScreenshot | Whether to use screenshoting endpoint provided by UiAutomator framework (`true`) rather than the one provided by chromedriver (`false`, the default value). Use it when you experience issues with the latter.
|
|
186
187
|
appium:extractChromeAndroidPackageFromContextName | If set to `true`, tell chromedriver to attach to the android package we have associated with the context name, rather than the package of the application under test. `false` by default.
|
|
@@ -107,6 +107,9 @@ declare const UIAUTOMATOR2_CONSTRAINTS: {
|
|
|
107
107
|
readonly chromedriverDisableBuildCheck: {
|
|
108
108
|
readonly isBoolean: true;
|
|
109
109
|
};
|
|
110
|
+
readonly chromedriverGrantPermissions: {
|
|
111
|
+
readonly isBoolean: true;
|
|
112
|
+
};
|
|
110
113
|
readonly chromeLoggingPrefs: {
|
|
111
114
|
readonly isObject: true;
|
|
112
115
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../lib/constraints.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,wBAAwB
|
|
1
|
+
{"version":3,"file":"constraints.d.ts","sourceRoot":"","sources":["../../lib/constraints.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmCE,CAAC;AAEjC,eAAe,wBAAwB,CAAC;AAExC,MAAM,MAAM,uBAAuB,GAAG,OAAO,wBAAwB,CAAC"}
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "appium-uiautomator2-driver",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.1.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "appium-uiautomator2-driver",
|
|
9
|
-
"version": "8.
|
|
9
|
+
"version": "8.1.0",
|
|
10
10
|
"license": "Apache-2.0",
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"@appium/css-locator-to-native": "^1.0.1",
|
|
13
13
|
"appium-adb": "^15.0.0",
|
|
14
|
-
"appium-android-driver": "^13.
|
|
14
|
+
"appium-android-driver": "^13.3.0",
|
|
15
15
|
"appium-uiautomator2-server": "^10.2.1",
|
|
16
16
|
"asyncbox": "^6.0.1",
|
|
17
17
|
"axios": "^1.16.0",
|
|
@@ -32,13 +32,13 @@
|
|
|
32
32
|
"@types/node": "^26.0.0",
|
|
33
33
|
"@types/portscanner": "^2.1.1",
|
|
34
34
|
"@types/semver": "^7.5.0",
|
|
35
|
-
"@types/sinon": "^
|
|
35
|
+
"@types/sinon": "^22.0.0",
|
|
36
36
|
"@types/unzipper": "^0.10.11",
|
|
37
37
|
"@types/ws": "^8.5.4",
|
|
38
38
|
"@xmldom/xmldom": "^0.x",
|
|
39
39
|
"chai": "^6.0.0",
|
|
40
40
|
"chai-as-promised": "^8.0.0",
|
|
41
|
-
"conventional-changelog-conventionalcommits": "^9.
|
|
41
|
+
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
42
42
|
"prettier": "^3.0.3",
|
|
43
43
|
"semantic-release": "^25.0.2",
|
|
44
44
|
"sharp": "^0.x",
|
|
@@ -86,6 +86,19 @@
|
|
|
86
86
|
"spdy": "4.0.2"
|
|
87
87
|
}
|
|
88
88
|
},
|
|
89
|
+
"node_modules/@appium/base-driver/node_modules/asyncbox": {
|
|
90
|
+
"version": "6.3.0",
|
|
91
|
+
"resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.3.0.tgz",
|
|
92
|
+
"integrity": "sha512-7IFpnQDltd5rYQjhIJIpyismJtdWmw/pOABZKJfv2WVo0a6iYh2ZzUuCJJclae5mBtK0H/EychxXg91GB7rGdQ==",
|
|
93
|
+
"license": "Apache-2.0",
|
|
94
|
+
"dependencies": {
|
|
95
|
+
"p-limit": "^7.2.0"
|
|
96
|
+
},
|
|
97
|
+
"engines": {
|
|
98
|
+
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
99
|
+
"npm": ">=10"
|
|
100
|
+
}
|
|
101
|
+
},
|
|
89
102
|
"node_modules/@appium/base-driver/node_modules/axios": {
|
|
90
103
|
"version": "1.18.0",
|
|
91
104
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.18.0.tgz",
|
|
@@ -99,9 +112,9 @@
|
|
|
99
112
|
}
|
|
100
113
|
},
|
|
101
114
|
"node_modules/@appium/css-locator-to-native": {
|
|
102
|
-
"version": "1.0.
|
|
103
|
-
"resolved": "https://registry.npmjs.org/@appium/css-locator-to-native/-/css-locator-to-native-1.0.
|
|
104
|
-
"integrity": "sha512
|
|
115
|
+
"version": "1.0.3",
|
|
116
|
+
"resolved": "https://registry.npmjs.org/@appium/css-locator-to-native/-/css-locator-to-native-1.0.3.tgz",
|
|
117
|
+
"integrity": "sha512-/g+hkuev9Sw+7BJvRK4GgpXuO1EzZUggbK1Bxm61R21Q8sgpJSK/AsvN9jl2Q4AXfE3xzDfgS5rI/yVlEC4EDg==",
|
|
105
118
|
"license": "Apache-2.0",
|
|
106
119
|
"dependencies": {
|
|
107
120
|
"css-selector-parser": "^3.3.0"
|
|
@@ -258,6 +271,19 @@
|
|
|
258
271
|
"@img/sharp-libvips-linux-x64": "1.3.0"
|
|
259
272
|
}
|
|
260
273
|
},
|
|
274
|
+
"node_modules/@appium/support/node_modules/asyncbox": {
|
|
275
|
+
"version": "6.3.0",
|
|
276
|
+
"resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.3.0.tgz",
|
|
277
|
+
"integrity": "sha512-7IFpnQDltd5rYQjhIJIpyismJtdWmw/pOABZKJfv2WVo0a6iYh2ZzUuCJJclae5mBtK0H/EychxXg91GB7rGdQ==",
|
|
278
|
+
"license": "Apache-2.0",
|
|
279
|
+
"dependencies": {
|
|
280
|
+
"p-limit": "^7.2.0"
|
|
281
|
+
},
|
|
282
|
+
"engines": {
|
|
283
|
+
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
284
|
+
"npm": ">=10"
|
|
285
|
+
}
|
|
286
|
+
},
|
|
261
287
|
"node_modules/@appium/support/node_modules/axios": {
|
|
262
288
|
"version": "1.18.0",
|
|
263
289
|
"resolved": "https://registry.npmjs.org/axios/-/axios-1.18.0.tgz",
|
|
@@ -439,9 +465,9 @@
|
|
|
439
465
|
}
|
|
440
466
|
},
|
|
441
467
|
"node_modules/appium-adb": {
|
|
442
|
-
"version": "15.0.
|
|
443
|
-
"resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-15.0.
|
|
444
|
-
"integrity": "sha512-
|
|
468
|
+
"version": "15.0.7",
|
|
469
|
+
"resolved": "https://registry.npmjs.org/appium-adb/-/appium-adb-15.0.7.tgz",
|
|
470
|
+
"integrity": "sha512-ViBTutW5XF2uTaIKKHfTS4v5z/QyX11zSpRQCDGCUal8tTAmU0yLXP8/32AfFlGfQCTtu0bSS/BQM+l71+nIdg==",
|
|
445
471
|
"license": "Apache-2.0",
|
|
446
472
|
"dependencies": {
|
|
447
473
|
"@appium/support": "^7.2.2",
|
|
@@ -458,9 +484,9 @@
|
|
|
458
484
|
}
|
|
459
485
|
},
|
|
460
486
|
"node_modules/appium-android-driver": {
|
|
461
|
-
"version": "13.
|
|
462
|
-
"resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-13.
|
|
463
|
-
"integrity": "sha512-
|
|
487
|
+
"version": "13.3.0",
|
|
488
|
+
"resolved": "https://registry.npmjs.org/appium-android-driver/-/appium-android-driver-13.3.0.tgz",
|
|
489
|
+
"integrity": "sha512-KQNohc759Tumn0uVbTUqujkZZr6fDGDjztjnc5MVWz5796nWgl6limrAchx8JLgj3m4w5piAXUjMvtKRfsa1PQ==",
|
|
464
490
|
"license": "Apache-2.0",
|
|
465
491
|
"dependencies": {
|
|
466
492
|
"@appium/support": "^7.2.2",
|
|
@@ -488,9 +514,9 @@
|
|
|
488
514
|
}
|
|
489
515
|
},
|
|
490
516
|
"node_modules/appium-chromedriver": {
|
|
491
|
-
"version": "8.4.
|
|
492
|
-
"resolved": "https://registry.npmjs.org/appium-chromedriver/-/appium-chromedriver-8.4.
|
|
493
|
-
"integrity": "sha512-
|
|
517
|
+
"version": "8.4.14",
|
|
518
|
+
"resolved": "https://registry.npmjs.org/appium-chromedriver/-/appium-chromedriver-8.4.14.tgz",
|
|
519
|
+
"integrity": "sha512-17zQa+j1bv7LfYsvz2mDIBgMs9OeqsHp9lKSJeZ5NMVteIs3gTujaZTci0lNvPHqsXTmXYSGGdXdHiCEM3axAg==",
|
|
494
520
|
"license": "Apache-2.0",
|
|
495
521
|
"dependencies": {
|
|
496
522
|
"@appium/base-driver": "^10.0.0-rc.2",
|
|
@@ -510,9 +536,9 @@
|
|
|
510
536
|
}
|
|
511
537
|
},
|
|
512
538
|
"node_modules/appium-uiautomator2-server": {
|
|
513
|
-
"version": "10.2
|
|
514
|
-
"resolved": "https://registry.npmjs.org/appium-uiautomator2-server/-/appium-uiautomator2-server-10.2.
|
|
515
|
-
"integrity": "sha512-
|
|
539
|
+
"version": "10.3.2",
|
|
540
|
+
"resolved": "https://registry.npmjs.org/appium-uiautomator2-server/-/appium-uiautomator2-server-10.3.2.tgz",
|
|
541
|
+
"integrity": "sha512-We6bbBY5HoIJJ7VaQFAj95W3tdhSbOQ2fVgYSfYu7C8UN8RsXDbxxqvFZim7gd+OmUKHumN92Zk+o54k63CL8w==",
|
|
516
542
|
"license": "Apache-2.0",
|
|
517
543
|
"engines": {
|
|
518
544
|
"node": "^20.19.0 || ^22.12.0 || >=24.0.0",
|
|
@@ -559,9 +585,9 @@
|
|
|
559
585
|
"license": "MIT"
|
|
560
586
|
},
|
|
561
587
|
"node_modules/asyncbox": {
|
|
562
|
-
"version": "6.3.
|
|
563
|
-
"resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.3.
|
|
564
|
-
"integrity": "sha512-
|
|
588
|
+
"version": "6.3.4",
|
|
589
|
+
"resolved": "https://registry.npmjs.org/asyncbox/-/asyncbox-6.3.4.tgz",
|
|
590
|
+
"integrity": "sha512-WjCWd8lgZG/HowtEFrnQpEHn/qLRXZTyqIlhHbLeqUyoo/VbcXQPUZM7+dXcd14ws6SF9EhnokZ/5HJ8Wm+eww==",
|
|
565
591
|
"license": "Apache-2.0",
|
|
566
592
|
"dependencies": {
|
|
567
593
|
"p-limit": "^7.2.0"
|
|
@@ -627,9 +653,9 @@
|
|
|
627
653
|
}
|
|
628
654
|
},
|
|
629
655
|
"node_modules/bare-fs": {
|
|
630
|
-
"version": "4.7.
|
|
631
|
-
"resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.
|
|
632
|
-
"integrity": "sha512-
|
|
656
|
+
"version": "4.7.3",
|
|
657
|
+
"resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-4.7.3.tgz",
|
|
658
|
+
"integrity": "sha512-xRgplks8SvcKkdlv2M6Z2LZmRsmqd+x0nXXGXeMEjwdibj1HSDrlnqBRLeYdMvsgCox7Bq0e+DHwfczOfsn6IA==",
|
|
633
659
|
"license": "Apache-2.0",
|
|
634
660
|
"dependencies": {
|
|
635
661
|
"bare-events": "^2.5.4",
|
|
@@ -651,9 +677,9 @@
|
|
|
651
677
|
}
|
|
652
678
|
},
|
|
653
679
|
"node_modules/bare-os": {
|
|
654
|
-
"version": "3.9.
|
|
655
|
-
"resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.
|
|
656
|
-
"integrity": "sha512-
|
|
680
|
+
"version": "3.9.3",
|
|
681
|
+
"resolved": "https://registry.npmjs.org/bare-os/-/bare-os-3.9.3.tgz",
|
|
682
|
+
"integrity": "sha512-fF4Q7QsyKVF5Rj0qvI8BgUNjqzC2JvQlpTaPLjVJVxYVUX5Zr9un+y3w1HmA4nNKdFmRBT8z/WmrjvXzXVerKQ==",
|
|
657
683
|
"license": "Apache-2.0",
|
|
658
684
|
"engines": {
|
|
659
685
|
"bare": ">=1.14.0"
|
|
@@ -797,9 +823,9 @@
|
|
|
797
823
|
}
|
|
798
824
|
},
|
|
799
825
|
"node_modules/brace-expansion": {
|
|
800
|
-
"version": "5.0.
|
|
801
|
-
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.
|
|
802
|
-
"integrity": "sha512-
|
|
826
|
+
"version": "5.0.7",
|
|
827
|
+
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.7.tgz",
|
|
828
|
+
"integrity": "sha512-7oFy703dxfY3/NLxC1fh2SUCQ0H9rmAY+5EpDVfXjUTTs+HEwR2nYaqLv+GWcTsumwxPfiz6CzCNkwXwBUwqCA==",
|
|
803
829
|
"license": "MIT",
|
|
804
830
|
"dependencies": {
|
|
805
831
|
"balanced-match": "^4.0.2"
|
|
@@ -1705,9 +1731,9 @@
|
|
|
1705
1731
|
}
|
|
1706
1732
|
},
|
|
1707
1733
|
"node_modules/iconv-lite": {
|
|
1708
|
-
"version": "0.7.
|
|
1709
|
-
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.
|
|
1710
|
-
"integrity": "sha512-
|
|
1734
|
+
"version": "0.7.3",
|
|
1735
|
+
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.3.tgz",
|
|
1736
|
+
"integrity": "sha512-IKXpvIzjnC9XTAUbVBcMfGS0EPaIXtW6v+zr+RRp+hqULEpo0owZax6wyRwPOJbWbzjYspQwusTsfVr0ifh4uQ==",
|
|
1711
1737
|
"license": "MIT",
|
|
1712
1738
|
"dependencies": {
|
|
1713
1739
|
"safer-buffer": ">= 2.1.2 < 3.0.0"
|
|
@@ -1756,9 +1782,9 @@
|
|
|
1756
1782
|
}
|
|
1757
1783
|
},
|
|
1758
1784
|
"node_modules/io.appium.settings": {
|
|
1759
|
-
"version": "7.1.
|
|
1760
|
-
"resolved": "https://registry.npmjs.org/io.appium.settings/-/io.appium.settings-7.1.
|
|
1761
|
-
"integrity": "sha512
|
|
1785
|
+
"version": "7.1.9",
|
|
1786
|
+
"resolved": "https://registry.npmjs.org/io.appium.settings/-/io.appium.settings-7.1.9.tgz",
|
|
1787
|
+
"integrity": "sha512-+gonaCuZSXcpbT2HGYVf0x+6brrygik90LhEKTjhl5GthE18h7wU0JUk/GMoVDRpPHeAq/S/p9RyjmPdU3Hwyw==",
|
|
1762
1788
|
"license": "Apache-2.0",
|
|
1763
1789
|
"dependencies": {
|
|
1764
1790
|
"@appium/logger": "^2.0.0-rc.1",
|
|
@@ -2930,9 +2956,9 @@
|
|
|
2930
2956
|
}
|
|
2931
2957
|
},
|
|
2932
2958
|
"node_modules/teen_process": {
|
|
2933
|
-
"version": "4.1.
|
|
2934
|
-
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-4.1.
|
|
2935
|
-
"integrity": "sha512-
|
|
2959
|
+
"version": "4.1.7",
|
|
2960
|
+
"resolved": "https://registry.npmjs.org/teen_process/-/teen_process-4.1.7.tgz",
|
|
2961
|
+
"integrity": "sha512-rWYaZsS8hjySi6lgrewZsOtELuya7W2xu2DEG16ibcDcH+iyqn4fyp8Y08IncBo/q8MdOibVyP9GViqzvA7nsw==",
|
|
2936
2962
|
"license": "Apache-2.0",
|
|
2937
2963
|
"dependencies": {
|
|
2938
2964
|
"shell-quote": "^1.8.1"
|
package/package.json
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
"automated testing",
|
|
8
8
|
"android"
|
|
9
9
|
],
|
|
10
|
-
"version": "8.
|
|
10
|
+
"version": "8.1.0",
|
|
11
11
|
"bugs": {
|
|
12
12
|
"url": "https://github.com/appium/appium-uiautomator2-driver/issues"
|
|
13
13
|
},
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"dependencies": {
|
|
61
61
|
"@appium/css-locator-to-native": "^1.0.1",
|
|
62
62
|
"appium-adb": "^15.0.0",
|
|
63
|
-
"appium-android-driver": "^13.
|
|
63
|
+
"appium-android-driver": "^13.3.0",
|
|
64
64
|
"appium-uiautomator2-server": "^10.2.1",
|
|
65
65
|
"asyncbox": "^6.0.1",
|
|
66
66
|
"axios": "^1.16.0",
|
|
@@ -81,13 +81,13 @@
|
|
|
81
81
|
"@types/node": "^26.0.0",
|
|
82
82
|
"@types/portscanner": "^2.1.1",
|
|
83
83
|
"@types/semver": "^7.5.0",
|
|
84
|
-
"@types/sinon": "^
|
|
84
|
+
"@types/sinon": "^22.0.0",
|
|
85
85
|
"@types/unzipper": "^0.10.11",
|
|
86
86
|
"@types/ws": "^8.5.4",
|
|
87
87
|
"@xmldom/xmldom": "^0.x",
|
|
88
88
|
"chai": "^6.0.0",
|
|
89
89
|
"chai-as-promised": "^8.0.0",
|
|
90
|
-
"conventional-changelog-conventionalcommits": "^9.
|
|
90
|
+
"conventional-changelog-conventionalcommits": "^9.3.1",
|
|
91
91
|
"prettier": "^3.0.3",
|
|
92
92
|
"semantic-release": "^25.0.2",
|
|
93
93
|
"sharp": "^0.x",
|