--- /dev/null
+# AURUM(Tizen UI Automator)
+- Aurum is a UI automation framework without UI Toolkit dependency.
+
+ Provides Commands to interact with the device¡¯s UI by simulation user actions and introspection of the screen content.
+
+ It relies on the platform accessibility APIs to introspect the screen.
+
+- User can use the IDL defined in Proto to create an automation app or script in a variety of languages without a language dependency.
+
+ [List of Supported Command With Python Example](https://code.sec.samsung.net/confluence/pages/viewpage.action?pageId=212993496)
+
+
+### Running on TV
+- Pre-condition
+
+ The TV device and Host PC should be already connected through SDB
+
+- Gets Aurum latest version and checkout to tizen branch
+
+ [Aurum Github](https://github.sec.samsung.net/tizen/aurum)
+
+- Set up a python virtual environment and run UI Automation (working directory: aurum/)
+
+ (host) cd ui_automation/python/tv
+
+ #### Create virtual env
+ (host) python3 -m venv v
+
+ #### Activate a virtual env
+ Linux
+ (host) source v/bin/activate
+ Window
+ (host) v/Scripts/activate.bat
+
+ #### Install required pkg (only once)
+ (python_virtual) pip3 install -r ../../../protocol/resources/python/requirements.txt
+
+ #### Generate aurum.proto file for python (only once)
+ (python_virtual) python3 -m grpc_tools.protoc --python_out=./ --grpc_python_out=./ -I ./../../../protocol/ ../../../protocol/aurum.proto
+
+ #### Target setup such as sdb forward, bootstrap execution
+ (python_virtual) python3 ../../../protocol/resources/python/tv/tvSetup.py
+
+ #### Then Run your test script (Please refer sample scripts in 'aurum/protocol/resources/python/tv')
+ (python_virtual) python3 myTest.py
+
+ #### Deactivate a virtual env
+ (python_virtual) deactivate
+
+### Reference and Tip
+- [How to run aurum on TM1](https://code.sec.samsung.net/confluence/display/GFX/04.+NUITizenGallery+Test+Script+Guide)
+
+++ /dev/null
-#!/bin/bash -xe
-
-repo_url=http://download.tizen.org/snapshots/tizen/unified/latest/repos/standard/packages/armv7l/
-repo_dbg_url=http://download.tizen.org/snapshots/tizen/unified/latest/repos/standard/debug/
-
-libgrpc_filter=" -A libgrpc* "
-grpc_filter=" -A grpc-* "
-grpc_dbg_filter=" -A grpc-debug*armv7l* -A libatspi-debug*armv7l&"
-libgrpc_dbg_filter=" -A libgrpc-debug*armv7l* "
-
-test -d rpm && rm -rf rpm
-
-wget -P rpm --recursive -nd -nH -np $repo_url $grpc_filter
-wget -P rpm --recursive -nd -nH -np $repo_url $libgrpc_filter
-
-wget -P rpm --recursive -nd -nH -np $repo_dbg_url $grpc_dbg_filter
-wget -P rpm --recursive -nd -nH -np $repo_dbg_url $libgrpc_dbg_filter
+++ /dev/null
-export TIZEN_WAYLAND_SHM_DIR=/run/.efl
-export beam_delta=0.5
-export EVAS_FONT_DPI=72
-export HOSTNAME=
-export LISTEN_PID=774
-export beam=15
-export WAYLAND_DISPLAY=wayland-0
-export ECORE_INPUT_CANCEL=1
-export EINA_LOG_ABORT_LEVEL=0
-export SHELL=/bin/bash
-export left_context=0
-export HISTSIZE=1000
-export fbank_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/fbank.conf
-export ac_weight=0.75
-export ELM_ENGINE=wayland_egl
-export LC_ALL=POSIX
-export lattice_beam=8.0
-export USER=owner
-export GST_DEBUG=2
-export WRT_BLOCK_SINGLE_PROCESS=OFF
-export right_context=3
-export symtab=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/lm/words.txt
-export ECORE_IMF_MODULE=wayland
-export MAIL=/var/spool/mail/owner
-export PATH=/bin:/usr/bin:/sbin:/usr/sbin
-export ECTOR_BACKEND=default
-export LISTEN_FDNAMES=launchpad-process-pool.socket
-export max_active=7000
-export EINA_LOG_DLOG_ENABLE=1
-export ELM_ATSPI_MODE=1
-export online=true
-export PWD=/opt/usr/home/owner
-export result=/usr/apps/org.tizen.stt-engine-embedded/shared/res/result.txt
-export lattice_out=lat.kor
-export nnet_in=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/am/converted_2_Eigen_Mat.nnet
-export prior=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/am/label.counts
-export LANG=en_US.UTF-8
-export PYTHONSTARTUP=/etc/pythonstart
-export global_cmvn=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/am/global_cmvn0412.ark
-export EVAS_SHM_FLUSH=1
-export fst_in=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/lm/TLG.fst
-export HISTCONTROL=ignoredups
-export hyp_filtering_cmd=cat
-export EINA_LOG_LEVEL=2
-export SHLVL=1
-export HOME=/opt/usr/home/owner
-export use_gpu=no
-export ECORE_ANIMATOR_SKIP=1
-export big_lm=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/lm/Mix_Bixby_VD_64k.1e8.arpa.carpa
-export ECORE_IMF_INPUT_PANEL_ENABLED=1
-export LOGNAME=owner
-export splice_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/splice.conf
-export cmvn_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/online_cmvn.conf
-export EVAS_GL_NO_BLACKLIST=1
-export DBUS_SESSION_BUS_ADDRESS="kernel:path=/sys/fs/kdbus/5001-user/bus;unix:path=/run/user/5001/bus"
-export res_dir=/usr/apps/org.tizen.stt-engine-embedded/shared/res
-export word_ins_penalty=1.0
-export delta_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/delta.conf
-export MANAGERPID=610
-export JOURNAL_STREAM=7:22973
-export EINA_LOG_ABORT=1
-export XDG_RUNTIME_DIR=/run/user/5001
-export ELM_DISPLAY=wl
-export GTK_IM_MODULE=scim
-export LISTEN_FDS=1
-export G_BROKEN_FILENAMES=1
-export ELM_PROFILE=mobile
-export work_dir=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model
-export _=/usr/bin/launchpad-process-pool
+++ /dev/null
-#!/bin/bash
-sdb forward --remove-all
-sdb forward tcp:50051 tcp:50051
-sdb shell app_launcher -t org.tizen.aurum-bootstrap
-sdb shell app_launcher -s org.tizen.aurum-bootstrap
+++ /dev/null
-```sh
-npm install
-npm install -g grpc-tools
-
-grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./ --grpc_out=./ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` ../../aurum.proto
-
-grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` aurum.proto
-```
+++ /dev/null
-
-var messages = require('./aurum_pb');
-var services = require('./aurum_grpc_pb');
-
-var grpc = require('grpc');
-
-function main() {
- var client = new services.BootstrapClient('localhost:50051',
- grpc.credentials.createInsecure());
-
- var request = new messages.ReqFindElement();
-
- request.setStrategy(proto.aurum.ReqFindElement.RequestType.TEXT);
- request.setTextfield("DONE");
-
- client.findElement(request, function(err, response) {
- if (err) {
- console.log(err);
- return;
- }
- var returnList = response.getElementsList();
- console.log(returnList);
- if (returnList.length > 0)
- {
- var request2 = new messages.ReqClick();
- request2.setType(proto.aurum.ReqClick.RequestType.ELEMENTID)
- request2.setElementid(returnList[0].getElementid());
- client.click(request2, function(err, response2) {
- if (err) {
- console.log(err);
- return;
- }
- console.log(response2);
- });
- }
- });
-}
-
-main();
+++ /dev/null
-#!/bin/bash
-
-grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./ \
- --grpc_out=./ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin`\
- -I ./../../ ../../aurum.proto
-
+++ /dev/null
-{
- "name": "ua-node-example",
- "version": "0.1.0",
- "lockfileVersion": 1,
- "requires": true,
- "dependencies": {
- "@grpc/proto-loader": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.1.0.tgz",
- "integrity": "sha512-GHoZBR5N+65AWazsCiJDxeMSbUpp2qNYbjeD3mP27L2PT25+GvIupIIJiCgULH87NAiAd9SmWMRBVz+uSiHpgA==",
- "requires": {
- "@types/lodash": "^4.14.104",
- "@types/node": "^9.4.6",
- "lodash": "^4.17.5",
- "protobufjs": "^6.8.6"
- }
- },
- "@protobufjs/aspromise": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
- "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
- },
- "@protobufjs/base64": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
- "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
- },
- "@protobufjs/codegen": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
- "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
- },
- "@protobufjs/eventemitter": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
- "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
- },
- "@protobufjs/fetch": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
- "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
- "requires": {
- "@protobufjs/aspromise": "^1.1.1",
- "@protobufjs/inquire": "^1.1.0"
- }
- },
- "@protobufjs/float": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
- "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
- },
- "@protobufjs/inquire": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
- "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
- },
- "@protobufjs/path": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
- "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
- },
- "@protobufjs/pool": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
- "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
- },
- "@protobufjs/utf8": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
- "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
- },
- "@types/bytebuffer": {
- "version": "5.0.40",
- "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.40.tgz",
- "integrity": "sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g==",
- "requires": {
- "@types/long": "*",
- "@types/node": "*"
- }
- },
- "@types/lodash": {
- "version": "4.14.138",
- "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.138.tgz",
- "integrity": "sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg=="
- },
- "@types/long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
- "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
- },
- "@types/node": {
- "version": "9.6.51",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.51.tgz",
- "integrity": "sha512-5lhC7QM2J3b/+epdwaNfRuG2peN4c9EX+mkd27+SqLKhJSdswHTZvc4aZLBZChi+Wo32+E1DeMZs0fSpu/uBXQ=="
- },
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
- },
- "ascli": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
- "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
- "requires": {
- "colour": "~0.7.1",
- "optjs": "~3.2.2"
- }
- },
- "async": {
- "version": "1.5.2",
- "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
- "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
- },
- "bytebuffer": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
- "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
- "requires": {
- "long": "~3"
- },
- "dependencies": {
- "long": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
- "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
- }
- }
- },
- "camelcase": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
- "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
- },
- "colour": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
- "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
- },
- "google-protobuf": {
- "version": "3.9.1",
- "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.9.1.tgz",
- "integrity": "sha512-tkz7SVwBktFbqFK3teXFUY/VM57+mbUgV9bSD+sZH1ocHJ7uk7BfEWMRdU24dd0ciUDokreA7ghH2fYFIczQdw=="
- },
- "grpc": {
- "version": "1.23.3",
- "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.23.3.tgz",
- "integrity": "sha512-7vdzxPw9s5UYch4aUn4hyM5tMaouaxUUkwkgJlwbR4AXMxiYZJOv19N2ps2eKiuUbJovo5fnGF9hg/X91gWYjw==",
- "requires": {
- "@types/bytebuffer": "^5.0.40",
- "lodash.camelcase": "^4.3.0",
- "lodash.clone": "^4.5.0",
- "nan": "^2.13.2",
- "node-pre-gyp": "^0.13.0",
- "protobufjs": "^5.0.3"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.2",
- "bundled": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true
- },
- "fs-minipass": {
- "version": "1.2.6",
- "bundled": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.4",
- "bundled": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "1.2.0",
- "bundled": true
- },
- "minipass": {
- "version": "2.3.5",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "minipass": "^2.2.1"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- },
- "dependencies": {
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- }
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true
- },
- "needle": {
- "version": "2.4.0",
- "bundled": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.13.0",
- "bundled": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.0.6",
- "bundled": true
- },
- "npm-packlist": {
- "version": "1.4.4",
- "bundled": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true
- },
- "protobufjs": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
- "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
- "requires": {
- "ascli": "~1",
- "bytebuffer": "~5",
- "glob": "^7.0.5",
- "yargs": "^3.10.0"
- }
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
- },
- "tar": {
- "version": "4.4.10",
- "bundled": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.3.5",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "yallist": {
- "version": "3.0.3",
- "bundled": true
- }
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
- },
- "lodash.camelcase": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
- "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
- },
- "lodash.clone": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
- "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
- },
- "long": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
- "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
- },
- "minimist": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
- "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
- },
- "nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
- },
- "npm": {
- "version": "6.13.4",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.13.4.tgz",
- "integrity": "sha512-vTcUL4SCg3AzwInWTbqg1OIaOXlzKSS8Mb8kc5avwrJpcvevDA5J9BhYSuei+fNs3pwOp4lzA5x2FVDXACvoXA==",
- "requires": {
- "JSONStream": "^1.3.5",
- "abbrev": "~1.1.1",
- "ansicolors": "~0.3.2",
- "ansistyles": "~0.1.3",
- "aproba": "^2.0.0",
- "archy": "~1.0.0",
- "bin-links": "^1.1.6",
- "bluebird": "^3.5.5",
- "byte-size": "^5.0.1",
- "cacache": "^12.0.3",
- "call-limit": "^1.1.1",
- "chownr": "^1.1.3",
- "ci-info": "^2.0.0",
- "cli-columns": "^3.1.2",
- "cli-table3": "^0.5.1",
- "cmd-shim": "^3.0.3",
- "columnify": "~1.5.4",
- "config-chain": "^1.1.12",
- "debuglog": "*",
- "detect-indent": "~5.0.0",
- "detect-newline": "^2.1.0",
- "dezalgo": "~1.0.3",
- "editor": "~1.0.0",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "fs-vacuum": "~1.2.10",
- "fs-write-stream-atomic": "~1.0.10",
- "gentle-fs": "^2.3.0",
- "glob": "^7.1.4",
- "graceful-fs": "^4.2.3",
- "has-unicode": "~2.0.1",
- "hosted-git-info": "^2.8.5",
- "iferr": "^1.0.2",
- "imurmurhash": "*",
- "infer-owner": "^1.0.4",
- "inflight": "~1.0.6",
- "inherits": "^2.0.4",
- "ini": "^1.3.5",
- "init-package-json": "^1.10.3",
- "is-cidr": "^3.0.0",
- "json-parse-better-errors": "^1.0.2",
- "lazy-property": "~1.0.0",
- "libcipm": "^4.0.7",
- "libnpm": "^3.0.1",
- "libnpmaccess": "^3.0.2",
- "libnpmhook": "^5.0.3",
- "libnpmorg": "^1.0.1",
- "libnpmsearch": "^2.0.2",
- "libnpmteam": "^1.0.2",
- "libnpx": "^10.2.0",
- "lock-verify": "^2.1.0",
- "lockfile": "^1.0.4",
- "lodash._baseindexof": "*",
- "lodash._baseuniq": "~4.6.0",
- "lodash._bindcallback": "*",
- "lodash._cacheindexof": "*",
- "lodash._createcache": "*",
- "lodash._getnative": "*",
- "lodash.clonedeep": "~4.5.0",
- "lodash.restparam": "*",
- "lodash.union": "~4.6.0",
- "lodash.uniq": "~4.5.0",
- "lodash.without": "~4.4.0",
- "lru-cache": "^5.1.1",
- "meant": "~1.0.1",
- "mississippi": "^3.0.0",
- "mkdirp": "~0.5.1",
- "move-concurrently": "^1.0.1",
- "node-gyp": "^5.0.5",
- "nopt": "~4.0.1",
- "normalize-package-data": "^2.5.0",
- "npm-audit-report": "^1.3.2",
- "npm-cache-filename": "~1.0.2",
- "npm-install-checks": "^3.0.2",
- "npm-lifecycle": "^3.1.4",
- "npm-package-arg": "^6.1.1",
- "npm-packlist": "^1.4.7",
- "npm-pick-manifest": "^3.0.2",
- "npm-profile": "^4.0.2",
- "npm-registry-fetch": "^4.0.2",
- "npm-user-validate": "~1.0.0",
- "npmlog": "~4.1.2",
- "once": "~1.4.0",
- "opener": "^1.5.1",
- "osenv": "^0.1.5",
- "pacote": "^9.5.11",
- "path-is-inside": "~1.0.2",
- "promise-inflight": "~1.0.1",
- "qrcode-terminal": "^0.12.0",
- "query-string": "^6.8.2",
- "qw": "~1.0.1",
- "read": "~1.0.7",
- "read-cmd-shim": "^1.0.5",
- "read-installed": "~4.0.3",
- "read-package-json": "^2.1.1",
- "read-package-tree": "^5.3.1",
- "readable-stream": "^3.4.0",
- "readdir-scoped-modules": "^1.1.0",
- "request": "^2.88.0",
- "retry": "^0.12.0",
- "rimraf": "^2.6.3",
- "safe-buffer": "^5.1.2",
- "semver": "^5.7.1",
- "sha": "^3.0.0",
- "slide": "~1.1.6",
- "sorted-object": "~2.0.1",
- "sorted-union-stream": "~2.1.3",
- "ssri": "^6.0.1",
- "stringify-package": "^1.0.1",
- "tar": "^4.4.13",
- "text-table": "~0.2.0",
- "tiny-relative-date": "^1.3.0",
- "uid-number": "0.0.6",
- "umask": "~1.1.0",
- "unique-filename": "^1.1.1",
- "unpipe": "~1.0.0",
- "update-notifier": "^2.5.0",
- "uuid": "^3.3.3",
- "validate-npm-package-license": "^3.0.4",
- "validate-npm-package-name": "~3.0.0",
- "which": "^1.3.1",
- "worker-farm": "^1.7.0",
- "write-file-atomic": "^2.4.3"
- },
- "dependencies": {
- "JSONStream": {
- "version": "1.3.5",
- "bundled": true,
- "requires": {
- "jsonparse": "^1.2.0",
- "through": ">=2.2.7 <3"
- }
- },
- "abbrev": {
- "version": "1.1.1",
- "bundled": true
- },
- "agent-base": {
- "version": "4.3.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- },
- "agentkeepalive": {
- "version": "3.5.2",
- "bundled": true,
- "requires": {
- "humanize-ms": "^1.2.1"
- }
- },
- "ajv": {
- "version": "5.5.2",
- "bundled": true,
- "requires": {
- "co": "^4.6.0",
- "fast-deep-equal": "^1.0.0",
- "fast-json-stable-stringify": "^2.0.0",
- "json-schema-traverse": "^0.3.0"
- }
- },
- "ansi-align": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "string-width": "^2.0.0"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
- "requires": {
- "color-convert": "^1.9.0"
- }
- },
- "ansicolors": {
- "version": "0.3.2",
- "bundled": true
- },
- "ansistyles": {
- "version": "0.1.3",
- "bundled": true
- },
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- },
- "archy": {
- "version": "1.0.0",
- "bundled": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "asap": {
- "version": "2.0.6",
- "bundled": true
- },
- "asn1": {
- "version": "0.2.4",
- "bundled": true,
- "requires": {
- "safer-buffer": "~2.1.0"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true
- },
- "asynckit": {
- "version": "0.4.0",
- "bundled": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "bundled": true
- },
- "aws4": {
- "version": "1.8.0",
- "bundled": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "tweetnacl": "^0.14.3"
- }
- },
- "bin-links": {
- "version": "1.1.6",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.3",
- "cmd-shim": "^3.0.0",
- "gentle-fs": "^2.3.0",
- "graceful-fs": "^4.1.15",
- "npm-normalize-package-bin": "^1.0.0",
- "write-file-atomic": "^2.3.0"
- }
- },
- "bluebird": {
- "version": "3.5.5",
- "bundled": true
- },
- "boxen": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "ansi-align": "^2.0.0",
- "camelcase": "^4.0.0",
- "chalk": "^2.0.1",
- "cli-boxes": "^1.0.0",
- "string-width": "^2.0.0",
- "term-size": "^1.2.0",
- "widest-line": "^2.0.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer-from": {
- "version": "1.0.0",
- "bundled": true
- },
- "builtins": {
- "version": "1.0.3",
- "bundled": true
- },
- "byline": {
- "version": "5.0.0",
- "bundled": true
- },
- "byte-size": {
- "version": "5.0.1",
- "bundled": true
- },
- "cacache": {
- "version": "12.0.3",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.5",
- "chownr": "^1.1.1",
- "figgy-pudding": "^3.5.1",
- "glob": "^7.1.4",
- "graceful-fs": "^4.1.15",
- "infer-owner": "^1.0.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "move-concurrently": "^1.0.1",
- "promise-inflight": "^1.0.1",
- "rimraf": "^2.6.3",
- "ssri": "^6.0.1",
- "unique-filename": "^1.1.1",
- "y18n": "^4.0.0"
- }
- },
- "call-limit": {
- "version": "1.1.1",
- "bundled": true
- },
- "camelcase": {
- "version": "4.1.0",
- "bundled": true
- },
- "capture-stack-trace": {
- "version": "1.0.0",
- "bundled": true
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true
- },
- "chalk": {
- "version": "2.4.1",
- "bundled": true,
- "requires": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- }
- },
- "chownr": {
- "version": "1.1.3",
- "bundled": true
- },
- "ci-info": {
- "version": "2.0.0",
- "bundled": true
- },
- "cidr-regex": {
- "version": "2.0.10",
- "bundled": true,
- "requires": {
- "ip-regex": "^2.1.0"
- }
- },
- "cli-boxes": {
- "version": "1.0.0",
- "bundled": true
- },
- "cli-columns": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "string-width": "^2.0.0",
- "strip-ansi": "^3.0.1"
- }
- },
- "cli-table3": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "colors": "^1.1.2",
- "object-assign": "^4.1.0",
- "string-width": "^2.1.1"
- }
- },
- "cliui": {
- "version": "4.1.0",
- "bundled": true,
- "requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "clone": {
- "version": "1.0.4",
- "bundled": true
- },
- "cmd-shim": {
- "version": "3.0.3",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "mkdirp": "~0.5.0"
- }
- },
- "co": {
- "version": "4.6.0",
- "bundled": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "color-convert": {
- "version": "1.9.1",
- "bundled": true,
- "requires": {
- "color-name": "^1.1.1"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "bundled": true
- },
- "colors": {
- "version": "1.3.3",
- "bundled": true,
- "optional": true
- },
- "columnify": {
- "version": "1.5.4",
- "bundled": true,
- "requires": {
- "strip-ansi": "^3.0.0",
- "wcwidth": "^1.0.0"
- }
- },
- "combined-stream": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "delayed-stream": "~1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "bundled": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "config-chain": {
- "version": "1.1.12",
- "bundled": true,
- "requires": {
- "ini": "^1.3.4",
- "proto-list": "~1.2.1"
- }
- },
- "configstore": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "dot-prop": "^4.1.0",
- "graceful-fs": "^4.1.2",
- "make-dir": "^1.0.0",
- "unique-string": "^1.0.0",
- "write-file-atomic": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.1",
- "fs-write-stream-atomic": "^1.0.8",
- "iferr": "^0.1.5",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.0"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- }
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "create-error-class": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "capture-stack-trace": "^1.0.0"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "lru-cache": "^4.0.1",
- "shebang-command": "^1.2.0",
- "which": "^1.2.9"
- },
- "dependencies": {
- "lru-cache": {
- "version": "4.1.5",
- "bundled": true,
- "requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
- }
- },
- "yallist": {
- "version": "2.1.2",
- "bundled": true
- }
- }
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "bundled": true
- },
- "cyclist": {
- "version": "0.2.2",
- "bundled": true
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "debuglog": {
- "version": "1.0.1",
- "bundled": true
- },
- "decamelize": {
- "version": "1.2.0",
- "bundled": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "bundled": true
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true
- },
- "defaults": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "clone": "^1.0.2"
- }
- },
- "define-properties": {
- "version": "1.1.3",
- "bundled": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true
- },
- "detect-indent": {
- "version": "5.0.0",
- "bundled": true
- },
- "detect-newline": {
- "version": "2.1.0",
- "bundled": true
- },
- "dezalgo": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "asap": "^2.0.0",
- "wrappy": "1"
- }
- },
- "dot-prop": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "is-obj": "^1.0.0"
- }
- },
- "dotenv": {
- "version": "5.0.1",
- "bundled": true
- },
- "duplexer3": {
- "version": "0.1.4",
- "bundled": true
- },
- "duplexify": {
- "version": "3.6.0",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.1.0"
- }
- },
- "editor": {
- "version": "1.0.0",
- "bundled": true
- },
- "encoding": {
- "version": "0.1.12",
- "bundled": true,
- "requires": {
- "iconv-lite": "~0.4.13"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "env-paths": {
- "version": "1.0.0",
- "bundled": true
- },
- "err-code": {
- "version": "1.1.2",
- "bundled": true
- },
- "errno": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "prr": "~1.0.1"
- }
- },
- "es-abstract": {
- "version": "1.12.0",
- "bundled": true,
- "requires": {
- "es-to-primitive": "^1.1.1",
- "function-bind": "^1.1.1",
- "has": "^1.0.1",
- "is-callable": "^1.1.3",
- "is-regex": "^1.0.4"
- }
- },
- "es-to-primitive": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "is-callable": "^1.1.4",
- "is-date-object": "^1.0.1",
- "is-symbol": "^1.0.2"
- }
- },
- "es6-promise": {
- "version": "4.2.8",
- "bundled": true
- },
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "^4.0.3"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "bundled": true
- },
- "execa": {
- "version": "0.7.0",
- "bundled": true,
- "requires": {
- "cross-spawn": "^5.0.1",
- "get-stream": "^3.0.0",
- "is-stream": "^1.1.0",
- "npm-run-path": "^2.0.0",
- "p-finally": "^1.0.0",
- "signal-exit": "^3.0.0",
- "strip-eof": "^1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "bundled": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "bundled": true
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "bundled": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "bundled": true
- },
- "figgy-pudding": {
- "version": "3.5.1",
- "bundled": true
- },
- "find-npm-prefix": {
- "version": "1.0.2",
- "bundled": true
- },
- "find-up": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "locate-path": "^2.0.0"
- }
- },
- "flush-write-stream": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.4"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true
- },
- "form-data": {
- "version": "2.3.2",
- "bundled": true,
- "requires": {
- "asynckit": "^0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "^2.1.12"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "requires": {
- "minipass": "^2.6.0"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "fs-vacuum": {
- "version": "1.2.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "path-is-inside": "^1.0.1",
- "rimraf": "^2.5.2"
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- },
- "dependencies": {
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true
- },
- "function-bind": {
- "version": "1.1.1",
- "bundled": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "genfun": {
- "version": "5.0.0",
- "bundled": true
- },
- "gentle-fs": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.2",
- "chownr": "^1.1.2",
- "cmd-shim": "^3.0.3",
- "fs-vacuum": "^1.2.10",
- "graceful-fs": "^4.1.11",
- "iferr": "^0.1.5",
- "infer-owner": "^1.0.4",
- "mkdirp": "^0.5.1",
- "path-is-inside": "^1.0.2",
- "read-cmd-shim": "^1.0.1",
- "slide": "^1.1.6"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- }
- }
- },
- "get-caller-file": {
- "version": "1.0.2",
- "bundled": true
- },
- "get-stream": {
- "version": "4.1.0",
- "bundled": true,
- "requires": {
- "pump": "^3.0.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0"
- }
- },
- "glob": {
- "version": "7.1.4",
- "bundled": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "bundled": true,
- "requires": {
- "ini": "^1.3.4"
- }
- },
- "got": {
- "version": "6.7.1",
- "bundled": true,
- "requires": {
- "create-error-class": "^3.0.0",
- "duplexer3": "^0.1.4",
- "get-stream": "^3.0.0",
- "is-redirect": "^1.0.0",
- "is-retry-allowed": "^1.0.0",
- "is-stream": "^1.0.0",
- "lowercase-keys": "^1.0.0",
- "safe-buffer": "^5.0.1",
- "timed-out": "^4.0.0",
- "unzip-response": "^2.0.1",
- "url-parse-lax": "^1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "graceful-fs": {
- "version": "4.2.3",
- "bundled": true
- },
- "har-schema": {
- "version": "2.0.0",
- "bundled": true
- },
- "har-validator": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "ajv": "^5.3.0",
- "har-schema": "^2.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "bundled": true
- },
- "has-symbols": {
- "version": "1.0.0",
- "bundled": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true
- },
- "hosted-git-info": {
- "version": "2.8.5",
- "bundled": true
- },
- "http-cache-semantics": {
- "version": "3.8.1",
- "bundled": true
- },
- "http-proxy-agent": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "agent-base": "4",
- "debug": "3.1.0"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "jsprim": "^1.2.2",
- "sshpk": "^1.7.0"
- }
- },
- "https-proxy-agent": {
- "version": "2.2.4",
- "bundled": true,
- "requires": {
- "agent-base": "^4.3.0",
- "debug": "^3.1.0"
- }
- },
- "humanize-ms": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "ms": "^2.0.0"
- }
- },
- "iconv-lite": {
- "version": "0.4.23",
- "bundled": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "iferr": {
- "version": "1.0.2",
- "bundled": true
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "bundled": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "bundled": true
- },
- "infer-owner": {
- "version": "1.0.4",
- "bundled": true
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true
- },
- "init-package-json": {
- "version": "1.10.3",
- "bundled": true,
- "requires": {
- "glob": "^7.1.1",
- "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
- "promzard": "^0.3.0",
- "read": "~1.0.1",
- "read-package-json": "1 || 2",
- "semver": "2.x || 3.x || 4 || 5",
- "validate-npm-package-license": "^3.0.1",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "bundled": true
- },
- "ip": {
- "version": "1.1.5",
- "bundled": true
- },
- "ip-regex": {
- "version": "2.1.0",
- "bundled": true
- },
- "is-callable": {
- "version": "1.1.4",
- "bundled": true
- },
- "is-ci": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "ci-info": "^1.0.0"
- },
- "dependencies": {
- "ci-info": {
- "version": "1.6.0",
- "bundled": true
- }
- }
- },
- "is-cidr": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "cidr-regex": "^2.0.10"
- }
- },
- "is-date-object": {
- "version": "1.0.1",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "bundled": true,
- "requires": {
- "global-dirs": "^0.1.0",
- "is-path-inside": "^1.0.0"
- }
- },
- "is-npm": {
- "version": "1.0.0",
- "bundled": true
- },
- "is-obj": {
- "version": "1.0.1",
- "bundled": true
- },
- "is-path-inside": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "path-is-inside": "^1.0.1"
- }
- },
- "is-redirect": {
- "version": "1.0.0",
- "bundled": true
- },
- "is-regex": {
- "version": "1.0.4",
- "bundled": true,
- "requires": {
- "has": "^1.0.1"
- }
- },
- "is-retry-allowed": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-symbol": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "has-symbols": "^1.0.0"
- }
- },
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "isexe": {
- "version": "2.0.0",
- "bundled": true
- },
- "isstream": {
- "version": "0.1.2",
- "bundled": true
- },
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "optional": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "bundled": true
- },
- "json-schema": {
- "version": "0.2.3",
- "bundled": true
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "bundled": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "bundled": true
- },
- "jsprim": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "latest-version": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "package-json": "^4.0.0"
- }
- },
- "lazy-property": {
- "version": "1.0.0",
- "bundled": true
- },
- "lcid": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "libcipm": {
- "version": "4.0.7",
- "bundled": true,
- "requires": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.5.1",
- "find-npm-prefix": "^1.0.2",
- "graceful-fs": "^4.1.11",
- "ini": "^1.3.5",
- "lock-verify": "^2.0.2",
- "mkdirp": "^0.5.1",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "pacote": "^9.1.0",
- "read-package-json": "^2.0.13",
- "rimraf": "^2.6.2",
- "worker-farm": "^1.6.0"
- }
- },
- "libnpm": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "bin-links": "^1.1.2",
- "bluebird": "^3.5.3",
- "find-npm-prefix": "^1.0.2",
- "libnpmaccess": "^3.0.2",
- "libnpmconfig": "^1.2.1",
- "libnpmhook": "^5.0.3",
- "libnpmorg": "^1.0.1",
- "libnpmpublish": "^1.1.2",
- "libnpmsearch": "^2.0.2",
- "libnpmteam": "^1.0.2",
- "lock-verify": "^2.0.2",
- "npm-lifecycle": "^3.0.0",
- "npm-logical-tree": "^1.2.1",
- "npm-package-arg": "^6.1.0",
- "npm-profile": "^4.0.2",
- "npm-registry-fetch": "^4.0.0",
- "npmlog": "^4.1.2",
- "pacote": "^9.5.3",
- "read-package-json": "^2.0.13",
- "stringify-package": "^1.0.0"
- }
- },
- "libnpmaccess": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "get-stream": "^4.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmconfig": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "find-up": "^3.0.0",
- "ini": "^1.3.5"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "locate-path": "^3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-locate": "^3.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "p-limit": {
- "version": "2.2.0",
- "bundled": true,
- "requires": {
- "p-try": "^2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-limit": "^2.0.0"
- }
- },
- "p-try": {
- "version": "2.2.0",
- "bundled": true
- }
- }
- },
- "libnpmhook": {
- "version": "5.0.3",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmorg": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmpublish": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "lodash.clonedeep": "^4.5.0",
- "normalize-package-data": "^2.4.0",
- "npm-package-arg": "^6.1.0",
- "npm-registry-fetch": "^4.0.0",
- "semver": "^5.5.1",
- "ssri": "^6.0.1"
- }
- },
- "libnpmsearch": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpmteam": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "aproba": "^2.0.0",
- "figgy-pudding": "^3.4.1",
- "get-stream": "^4.0.0",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "libnpx": {
- "version": "10.2.0",
- "bundled": true,
- "requires": {
- "dotenv": "^5.0.1",
- "npm-package-arg": "^6.0.0",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.0",
- "update-notifier": "^2.3.0",
- "which": "^1.3.0",
- "y18n": "^4.0.0",
- "yargs": "^11.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "p-locate": "^2.0.0",
- "path-exists": "^3.0.0"
- }
- },
- "lock-verify": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "npm-package-arg": "^6.1.0",
- "semver": "^5.4.1"
- }
- },
- "lockfile": {
- "version": "1.0.4",
- "bundled": true,
- "requires": {
- "signal-exit": "^3.0.2"
- }
- },
- "lodash._baseindexof": {
- "version": "3.1.0",
- "bundled": true
- },
- "lodash._baseuniq": {
- "version": "4.6.0",
- "bundled": true,
- "requires": {
- "lodash._createset": "~4.0.0",
- "lodash._root": "~3.0.0"
- }
- },
- "lodash._bindcallback": {
- "version": "3.0.1",
- "bundled": true
- },
- "lodash._cacheindexof": {
- "version": "3.0.2",
- "bundled": true
- },
- "lodash._createcache": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "lodash._getnative": "^3.0.0"
- }
- },
- "lodash._createset": {
- "version": "4.0.3",
- "bundled": true
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "bundled": true
- },
- "lodash._root": {
- "version": "3.0.1",
- "bundled": true
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.restparam": {
- "version": "3.6.1",
- "bundled": true
- },
- "lodash.union": {
- "version": "4.6.0",
- "bundled": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.without": {
- "version": "4.4.0",
- "bundled": true
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "bundled": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "bundled": true,
- "requires": {
- "yallist": "^3.0.2"
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "pify": "^3.0.0"
- }
- },
- "make-fetch-happen": {
- "version": "5.0.2",
- "bundled": true,
- "requires": {
- "agentkeepalive": "^3.4.1",
- "cacache": "^12.0.0",
- "http-cache-semantics": "^3.8.1",
- "http-proxy-agent": "^2.1.0",
- "https-proxy-agent": "^2.2.3",
- "lru-cache": "^5.1.1",
- "mississippi": "^3.0.0",
- "node-fetch-npm": "^2.0.2",
- "promise-retry": "^1.1.1",
- "socks-proxy-agent": "^4.0.0",
- "ssri": "^6.0.0"
- }
- },
- "meant": {
- "version": "1.0.1",
- "bundled": true
- },
- "mem": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "mimic-fn": "^1.0.0"
- }
- },
- "mime-db": {
- "version": "1.35.0",
- "bundled": true
- },
- "mime-types": {
- "version": "2.1.19",
- "bundled": true,
- "requires": {
- "mime-db": "~1.35.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "bundled": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "requires": {
- "minipass": "^2.9.0"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "mississippi": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "concat-stream": "^1.5.0",
- "duplexify": "^3.4.2",
- "end-of-stream": "^1.1.0",
- "flush-write-stream": "^1.0.0",
- "from2": "^2.1.0",
- "parallel-transform": "^1.1.0",
- "pump": "^3.0.0",
- "pumpify": "^1.3.3",
- "stream-each": "^1.1.0",
- "through2": "^2.0.0"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "move-concurrently": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.1",
- "copy-concurrently": "^1.0.0",
- "fs-write-stream-atomic": "^1.0.8",
- "mkdirp": "^0.5.1",
- "rimraf": "^2.5.4",
- "run-queue": "^1.0.3"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "bundled": true
- },
- "node-fetch-npm": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "encoding": "^0.1.11",
- "json-parse-better-errors": "^1.0.0",
- "safe-buffer": "^5.1.1"
- }
- },
- "node-gyp": {
- "version": "5.0.5",
- "bundled": true,
- "requires": {
- "env-paths": "^1.0.0",
- "glob": "^7.0.3",
- "graceful-fs": "^4.1.2",
- "mkdirp": "^0.5.0",
- "nopt": "2 || 3",
- "npmlog": "0 || 1 || 2 || 3 || 4",
- "request": "^2.87.0",
- "rimraf": "2",
- "semver": "~5.3.0",
- "tar": "^4.4.12",
- "which": "1"
- },
- "dependencies": {
- "nopt": {
- "version": "3.0.6",
- "bundled": true,
- "requires": {
- "abbrev": "1"
- }
- },
- "semver": {
- "version": "5.3.0",
- "bundled": true
- }
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "bundled": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- },
- "dependencies": {
- "resolve": {
- "version": "1.10.0",
- "bundled": true,
- "requires": {
- "path-parse": "^1.0.6"
- }
- }
- }
- },
- "npm-audit-report": {
- "version": "1.3.2",
- "bundled": true,
- "requires": {
- "cli-table3": "^0.5.0",
- "console-control-strings": "^1.1.0"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-cache-filename": {
- "version": "1.0.2",
- "bundled": true
- },
- "npm-install-checks": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "semver": "^2.3.0 || 3.x || 4 || 5"
- }
- },
- "npm-lifecycle": {
- "version": "3.1.4",
- "bundled": true,
- "requires": {
- "byline": "^5.0.0",
- "graceful-fs": "^4.1.15",
- "node-gyp": "^5.0.2",
- "resolve-from": "^4.0.0",
- "slide": "^1.1.6",
- "uid-number": "0.0.6",
- "umask": "^1.1.0",
- "which": "^1.3.1"
- }
- },
- "npm-logical-tree": {
- "version": "1.2.1",
- "bundled": true
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true
- },
- "npm-package-arg": {
- "version": "6.1.1",
- "bundled": true,
- "requires": {
- "hosted-git-info": "^2.7.1",
- "osenv": "^0.1.5",
- "semver": "^5.6.0",
- "validate-npm-package-name": "^3.0.0"
- }
- },
- "npm-packlist": {
- "version": "1.4.7",
- "bundled": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npm-pick-manifest": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1",
- "npm-package-arg": "^6.0.0",
- "semver": "^5.4.1"
- }
- },
- "npm-profile": {
- "version": "4.0.2",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.2 || 2",
- "figgy-pudding": "^3.4.1",
- "npm-registry-fetch": "^4.0.0"
- }
- },
- "npm-registry-fetch": {
- "version": "4.0.2",
- "bundled": true,
- "requires": {
- "JSONStream": "^1.3.4",
- "bluebird": "^3.5.1",
- "figgy-pudding": "^3.4.1",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "npm-package-arg": "^6.1.0",
- "safe-buffer": "^5.2.0"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.2.0",
- "bundled": true
- }
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "path-key": "^2.0.0"
- }
- },
- "npm-user-validate": {
- "version": "1.0.0",
- "bundled": true
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "object-keys": {
- "version": "1.0.12",
- "bundled": true
- },
- "object.getownpropertydescriptors": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "define-properties": "^1.1.2",
- "es-abstract": "^1.5.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "opener": {
- "version": "1.5.1",
- "bundled": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-locale": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "execa": "^0.7.0",
- "lcid": "^1.0.0",
- "mem": "^1.1.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "bundled": true
- },
- "p-limit": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "p-try": "^1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "p-limit": "^1.1.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "bundled": true
- },
- "package-json": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "got": "^6.7.1",
- "registry-auth-token": "^3.0.1",
- "registry-url": "^3.0.3",
- "semver": "^5.1.0"
- }
- },
- "pacote": {
- "version": "9.5.11",
- "bundled": true,
- "requires": {
- "bluebird": "^3.5.3",
- "cacache": "^12.0.2",
- "chownr": "^1.1.2",
- "figgy-pudding": "^3.5.1",
- "get-stream": "^4.1.0",
- "glob": "^7.1.3",
- "infer-owner": "^1.0.4",
- "lru-cache": "^5.1.1",
- "make-fetch-happen": "^5.0.0",
- "minimatch": "^3.0.4",
- "minipass": "^2.3.5",
- "mississippi": "^3.0.0",
- "mkdirp": "^0.5.1",
- "normalize-package-data": "^2.4.0",
- "npm-normalize-package-bin": "^1.0.0",
- "npm-package-arg": "^6.1.0",
- "npm-packlist": "^1.1.12",
- "npm-pick-manifest": "^3.0.0",
- "npm-registry-fetch": "^4.0.0",
- "osenv": "^0.1.5",
- "promise-inflight": "^1.0.1",
- "promise-retry": "^1.1.1",
- "protoduck": "^5.0.1",
- "rimraf": "^2.6.2",
- "safe-buffer": "^5.1.2",
- "semver": "^5.6.0",
- "ssri": "^6.0.1",
- "tar": "^4.4.10",
- "unique-filename": "^1.1.1",
- "which": "^1.3.1"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "cyclist": "~0.2.2",
- "inherits": "^2.0.3",
- "readable-stream": "^2.1.5"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "bundled": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "bundled": true
- },
- "path-key": {
- "version": "2.0.1",
- "bundled": true
- },
- "path-parse": {
- "version": "1.0.6",
- "bundled": true
- },
- "performance-now": {
- "version": "2.1.0",
- "bundled": true
- },
- "pify": {
- "version": "3.0.0",
- "bundled": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "bundled": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true
- },
- "promise-inflight": {
- "version": "1.0.1",
- "bundled": true
- },
- "promise-retry": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "err-code": "^1.0.0",
- "retry": "^0.10.0"
- },
- "dependencies": {
- "retry": {
- "version": "0.10.1",
- "bundled": true
- }
- }
- },
- "promzard": {
- "version": "0.3.0",
- "bundled": true,
- "requires": {
- "read": "1"
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "bundled": true
- },
- "protoduck": {
- "version": "5.0.1",
- "bundled": true,
- "requires": {
- "genfun": "^5.0.0"
- }
- },
- "prr": {
- "version": "1.0.1",
- "bundled": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "bundled": true
- },
- "psl": {
- "version": "1.1.29",
- "bundled": true
- },
- "pump": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "bundled": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- }
- }
- },
- "punycode": {
- "version": "1.4.1",
- "bundled": true
- },
- "qrcode-terminal": {
- "version": "0.12.0",
- "bundled": true
- },
- "qs": {
- "version": "6.5.2",
- "bundled": true
- },
- "query-string": {
- "version": "6.8.2",
- "bundled": true,
- "requires": {
- "decode-uri-component": "^0.2.0",
- "split-on-first": "^1.0.0",
- "strict-uri-encode": "^2.0.0"
- }
- },
- "qw": {
- "version": "1.0.1",
- "bundled": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "requires": {
- "deep-extend": "^0.5.1",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "read": {
- "version": "1.0.7",
- "bundled": true,
- "requires": {
- "mute-stream": "~0.0.4"
- }
- },
- "read-cmd-shim": {
- "version": "1.0.5",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2"
- }
- },
- "read-installed": {
- "version": "4.0.3",
- "bundled": true,
- "requires": {
- "debuglog": "^1.0.1",
- "graceful-fs": "^4.1.2",
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "semver": "2 || 3 || 4 || 5",
- "slide": "~1.1.3",
- "util-extend": "^1.0.1"
- }
- },
- "read-package-json": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "glob": "^7.1.1",
- "graceful-fs": "^4.1.2",
- "json-parse-better-errors": "^1.0.1",
- "normalize-package-data": "^2.0.0",
- "npm-normalize-package-bin": "^1.0.0"
- }
- },
- "read-package-tree": {
- "version": "5.3.1",
- "bundled": true,
- "requires": {
- "read-package-json": "^2.0.0",
- "readdir-scoped-modules": "^1.0.0",
- "util-promisify": "^2.1.0"
- }
- },
- "readable-stream": {
- "version": "3.4.0",
- "bundled": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdir-scoped-modules": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "debuglog": "^1.0.1",
- "dezalgo": "^1.0.0",
- "graceful-fs": "^4.1.2",
- "once": "^1.3.0"
- }
- },
- "registry-auth-token": {
- "version": "3.3.2",
- "bundled": true,
- "requires": {
- "rc": "^1.1.6",
- "safe-buffer": "^5.0.1"
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "rc": "^1.0.1"
- }
- },
- "request": {
- "version": "2.88.0",
- "bundled": true,
- "requires": {
- "aws-sign2": "~0.7.0",
- "aws4": "^1.8.0",
- "caseless": "~0.12.0",
- "combined-stream": "~1.0.6",
- "extend": "~3.0.2",
- "forever-agent": "~0.6.1",
- "form-data": "~2.3.2",
- "har-validator": "~5.1.0",
- "http-signature": "~1.2.0",
- "is-typedarray": "~1.0.0",
- "isstream": "~0.1.2",
- "json-stringify-safe": "~5.0.1",
- "mime-types": "~2.1.19",
- "oauth-sign": "~0.9.0",
- "performance-now": "^2.1.0",
- "qs": "~6.5.2",
- "safe-buffer": "^5.1.2",
- "tough-cookie": "~2.4.3",
- "tunnel-agent": "^0.6.0",
- "uuid": "^3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "bundled": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "bundled": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "bundled": true
- },
- "retry": {
- "version": "0.12.0",
- "bundled": true
- },
- "rimraf": {
- "version": "2.6.3",
- "bundled": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "aproba": "^1.1.1"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true
- },
- "semver-diff": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "semver": "^5.0.3"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- },
- "sha": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.2"
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "shebang-regex": "^1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "slide": {
- "version": "1.1.6",
- "bundled": true
- },
- "smart-buffer": {
- "version": "4.1.0",
- "bundled": true
- },
- "socks": {
- "version": "2.3.3",
- "bundled": true,
- "requires": {
- "ip": "1.1.5",
- "smart-buffer": "^4.1.0"
- }
- },
- "socks-proxy-agent": {
- "version": "4.0.2",
- "bundled": true,
- "requires": {
- "agent-base": "~4.2.1",
- "socks": "~2.3.2"
- },
- "dependencies": {
- "agent-base": {
- "version": "4.2.1",
- "bundled": true,
- "requires": {
- "es6-promisify": "^5.0.0"
- }
- }
- }
- },
- "sorted-object": {
- "version": "2.0.1",
- "bundled": true
- },
- "sorted-union-stream": {
- "version": "2.1.3",
- "bundled": true,
- "requires": {
- "from2": "^1.3.0",
- "stream-iterate": "^1.1.0"
- },
- "dependencies": {
- "from2": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "inherits": "~2.0.1",
- "readable-stream": "~1.1.10"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "bundled": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "string_decoder": {
- "version": "0.10.31",
- "bundled": true
- }
- }
- },
- "spdx-correct": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "bundled": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.3",
- "bundled": true
- },
- "split-on-first": {
- "version": "1.1.0",
- "bundled": true
- },
- "sshpk": {
- "version": "1.14.2",
- "bundled": true,
- "requires": {
- "asn1": "~0.2.3",
- "assert-plus": "^1.0.0",
- "bcrypt-pbkdf": "^1.0.0",
- "dashdash": "^1.12.0",
- "ecc-jsbn": "~0.1.1",
- "getpass": "^0.1.1",
- "jsbn": "~0.1.0",
- "safer-buffer": "^2.0.2",
- "tweetnacl": "~0.14.0"
- }
- },
- "ssri": {
- "version": "6.0.1",
- "bundled": true,
- "requires": {
- "figgy-pudding": "^3.5.1"
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "stream-shift": "^1.0.0"
- }
- },
- "stream-iterate": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "stream-shift": "^1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- },
- "strict-uri-encode": {
- "version": "2.0.0",
- "bundled": true
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "^3.0.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "stringify-package": {
- "version": "1.0.1",
- "bundled": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-eof": {
- "version": "1.0.0",
- "bundled": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
- },
- "supports-color": {
- "version": "5.4.0",
- "bundled": true,
- "requires": {
- "has-flag": "^3.0.0"
- }
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- },
- "dependencies": {
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- }
- }
- },
- "term-size": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "execa": "^0.7.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "bundled": true
- },
- "through": {
- "version": "2.3.8",
- "bundled": true
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "readable-stream": "^2.1.5",
- "xtend": "~4.0.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "bundled": true
- },
- "tiny-relative-date": {
- "version": "1.3.0",
- "bundled": true
- },
- "tough-cookie": {
- "version": "2.4.3",
- "bundled": true,
- "requires": {
- "psl": "^1.1.24",
- "punycode": "^1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "^5.0.1"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
- "optional": true
- },
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true
- },
- "umask": {
- "version": "1.1.0",
- "bundled": true
- },
- "unique-filename": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "unique-slug": "^2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "imurmurhash": "^0.1.4"
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "crypto-random-string": "^1.0.0"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "bundled": true
- },
- "unzip-response": {
- "version": "2.0.1",
- "bundled": true
- },
- "update-notifier": {
- "version": "2.5.0",
- "bundled": true,
- "requires": {
- "boxen": "^1.2.1",
- "chalk": "^2.0.1",
- "configstore": "^3.0.0",
- "import-lazy": "^2.1.0",
- "is-ci": "^1.0.10",
- "is-installed-globally": "^0.1.0",
- "is-npm": "^1.0.0",
- "latest-version": "^3.0.0",
- "semver-diff": "^2.0.0",
- "xdg-basedir": "^3.0.0"
- }
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "prepend-http": "^1.0.1"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "util-extend": {
- "version": "1.0.3",
- "bundled": true
- },
- "util-promisify": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "object.getownpropertydescriptors": "^2.0.3"
- }
- },
- "uuid": {
- "version": "3.3.3",
- "bundled": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "validate-npm-package-name": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "builtins": "^1.0.3"
- }
- },
- "verror": {
- "version": "1.10.0",
- "bundled": true,
- "requires": {
- "assert-plus": "^1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "^1.2.0"
- }
- },
- "wcwidth": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "defaults": "^1.0.3"
- }
- },
- "which": {
- "version": "1.3.1",
- "bundled": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "bundled": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "string-width": "^1.0.2"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "widest-line": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "string-width": "^2.1.1"
- }
- },
- "worker-farm": {
- "version": "1.7.0",
- "bundled": true,
- "requires": {
- "errno": "~0.1.7"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "write-file-atomic": {
- "version": "2.4.3",
- "bundled": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "bundled": true
- },
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- },
- "y18n": {
- "version": "4.0.0",
- "bundled": true
- },
- "yallist": {
- "version": "3.0.3",
- "bundled": true
- },
- "yargs": {
- "version": "11.0.0",
- "bundled": true,
- "requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.1.1",
- "find-up": "^2.1.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^2.0.0",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
- "which-module": "^2.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^9.0.2"
- },
- "dependencies": {
- "y18n": {
- "version": "3.2.1",
- "bundled": true
- }
- }
- },
- "yargs-parser": {
- "version": "9.0.2",
- "bundled": true,
- "requires": {
- "camelcase": "^4.1.0"
- }
- }
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "optjs": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
- "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "protobufjs": {
- "version": "6.8.8",
- "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
- "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
- "requires": {
- "@protobufjs/aspromise": "^1.1.2",
- "@protobufjs/base64": "^1.1.2",
- "@protobufjs/codegen": "^2.0.4",
- "@protobufjs/eventemitter": "^1.1.0",
- "@protobufjs/fetch": "^1.1.0",
- "@protobufjs/float": "^1.0.2",
- "@protobufjs/inquire": "^1.1.0",
- "@protobufjs/path": "^1.1.2",
- "@protobufjs/pool": "^1.1.0",
- "@protobufjs/utf8": "^1.1.0",
- "@types/long": "^4.0.0",
- "@types/node": "^10.1.0",
- "long": "^4.0.0"
- },
- "dependencies": {
- "@types/node": {
- "version": "10.14.16",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz",
- "integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA=="
- }
- }
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "window-size": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
- "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- }
- },
- "y18n": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
- "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
- },
- "yargs": {
- "version": "3.32.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
- "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
- "requires": {
- "camelcase": "^2.0.1",
- "cliui": "^3.0.3",
- "decamelize": "^1.1.1",
- "os-locale": "^1.4.0",
- "string-width": "^1.0.1",
- "window-size": "^0.1.4",
- "y18n": "^3.2.0"
- }
- }
- }
-}
+++ /dev/null
-{
- "name": "ua-node-example",
- "version": "0.1.0",
- "dependencies": {
- "@grpc/proto-loader": "^0.1.0",
- "async": "^1.5.2",
- "google-protobuf": "^3.0.0",
- "grpc": "^1.11.0",
- "lodash": "^4.6.1",
- "minimist": "^1.2.0",
- "npm": "^6.13.4"
- }
-}
+++ /dev/null
-```sh
-
-python3 -m venv v
-
-source v/bin/activate
-
-pip3 install -r requirements.txt
-
-./gen.sh
-
-python3 sample01.py
-
-./deactivate
-
-```
+++ /dev/null
-#!/bin/bash
-
-python3 -m grpc_tools.protoc --python_out=./ --grpc_python_out=./ -I ./../../ ../../aurum.proto
-
+++ /dev/null
-from __future__ import print_function
-import aurum_pb2
-import aurum_pb2_grpc
-import logging
-import grpc
-import time
-
-def back(stub):
- rsp_key = stub.sendKey(aurum_pb2.ReqKey(
- type='BACK',
- actionType='STROKE',
- )
- )
-
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField='TestMemo'
- )
- )
-
- for item in rsp_find.elements:
- print(item)
- stub.click(aurum_pb2.ReqClick(
- type='ELEMENTID',
- elementId=item.elementId
- )
- )
-
-def findNclick(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField=text
- )
- )
-
- for item in rsp_find.elements:
- print(item)
- stub.click(aurum_pb2.ReqClick(
- type='ELEMENTID',
- elementId=item.elementId
- )
- )
-
-def flick(stub):
- rsp_flick = stub.flick(aurum_pb2.ReqFlick(
- startPoint=aurum_pb2.Point(x=100, y=100),
- endPoint=aurum_pb2.Point(x=400, y=400),
- durationMs=1
- ))
-
-def launchApp(stub):
- rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
- packageName='org.example.uicomponents'
- ))
-
-def closeApp(stub):
- rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
- packageName='org.example.uicomponents'
- ))
-
-CHUNK_SIZE = 1024 * 1024
-def get_file_chunks(filename):
- with open(filename, 'rb') as f:
- while True:
- piece = f.read(CHUNK_SIZE)
- if len(piece) == 0:
- return
- yield aurum_pb2.ReqInstallApp(package=piece)
-
-def installApp(stub):
- in_file_name = './org.tizen.uicomponents.arm.tpk'
- chunks_generator = get_file_chunks(in_file_name)
- rsp_install = stub.installApp(chunks_generator)
-
-def removeApp(stub):
- rsp_install = stub.removeApp(aurum_pb2.ReqRemoveApp(
- packageName='org.example.uicomponents'
- )
- )
-
-def getAppInfo(stub):
- rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName='org.example.uicomponents'))
- print(rsp_info)
-
-def touchdown(stub, xx, yy):
- rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchmove(stub, xx, yy):
- rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchup(stub, xx, yy):
- rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = aurum_pb2_grpc.BootstrapStub(channel)
-
- findNclick(stub, 'Testmemo')
- back(stub)
- flick(stub)
- installApp(stub)
- time.sleep(1)
- launchApp(stub)
- time.sleep(1)
- getAppInfo(stub)
- time.sleep(1)
- closeApp(stub)
- time.sleep(1)
-# removeApp(stub)
- flick(stub)
- touchdown(stub, 300, 300)
- touchmove(stub, 250, 250)
- touchmove(stub, 200, 200)
- touchmove(stub, 110, 110)
- touchup(stub, 100, 100)
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
+++ /dev/null
-from __future__ import print_function
-import aurum_pb2
-import aurum_pb2_grpc
-import logging
-import grpc
-import time
-
-def sendKey(stub, key):
- rsp_key = stub.sendKey(aurum_pb2.ReqKey(
- type=key,
- actionType='STROKE',
- )
- )
- time.sleep(1)
-
-def launchApp(stub, pkgname):
- rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
- packageName=pkgname
- ))
-
-def closeApp(stub, pkgname):
- rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
- packageName=pkgname
- ))
-
-def getAppInfo(stub, pkgname):
- rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
- print(rsp_info)
-
-def touchdown(stub, xx, yy):
- rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchmove(stub, xx, yy):
- rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchup(stub, xx, yy):
- rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def new_memo(stub):
- touchdown(stub, 630,1140)
- time.sleep(0.1)
- touchup(stub, 630,1140)
- time.sleep(0.5)
-
-def findElementByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField=text
- )
- )
- for item in rsp_find.elements:
- return item.elementId
- return None
-
-def findElementsByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField=text
- )
- )
- return rsp_find.elements
-
-def clickById(stub, id):
- stub.click(aurum_pb2.ReqClick(
- type='ELEMENTID',
- elementId=id
- )
- )
-
-def getAttrById(stub, id, attr):
- rsp = stub.getAttribute(aurum_pb2.ReqGetAttribute(attribute=attr, elementId=id))
- print(rsp)
-
-def run_memo(stub):
- foundId = findElementByText(stub, 'All apps')
- time.sleep(1)
- if foundId != None:
- getAttrById(stub, foundId, 'VISIBLE')
- getAttrById(stub, foundId, 'CLICKABLE')
- getAttrById(stub, foundId, 'FOCUSED')
- getAttrById(stub, foundId, 'ENABLED')
- getAttrById(stub, foundId, 'CHECKED')
- clickById(stub, foundId)
- time.sleep(1)
-
- foundId = findElementByText(stub, 'Memo')
- time.sleep(1)
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(2)
-
-def set_text(stub, text):
- foundId = findElementByText(stub, 'Title')
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(1.2)
- stub.setValue(aurum_pb2.ReqSetValue(
- elementId=foundId,
- stringValue=text))
- foundIds = findElementsByText(stub, "Memo")
- if len(foundIds) >= 2:
- stub.setValue(aurum_pb2.ReqSetValue(
- elementId=foundIds[1].elementId,
- stringValue=text))
- time.sleep(0.2)
- foundId = findElementByText(stub, 'DONE')
- if foundId != None:
- clickById(stub, foundId)
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = aurum_pb2_grpc.BootstrapStub(channel)
-
- getAppInfo(stub, 'org.tizen.memo')
- time.sleep(1)
- sendKey(stub, 'HOME')
- time.sleep(1)
- closeApp(stub, 'org.tizen.memo')
- time.sleep(1)
- getAppInfo(stub, 'org.tizen.memo')
- time.sleep(1)
- run_memo(stub)
- time.sleep(1)
- new_memo(stub)
- time.sleep(1)
- set_text(stub, 'hello')
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
+++ /dev/null
-from __future__ import print_function
-import aurum_pb2
-import aurum_pb2_grpc
-import logging
-import grpc
-import time
-
-def sendKey(stub, key):
- rsp_key = stub.sendKey(aurum_pb2.ReqKey(
- type=key,
- actionType='STROKE',
- )
- )
- time.sleep(1.5)
-
-def launchApp(stub, pkgname):
- rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
- packageName=pkgname
- ))
-
-def closeApp(stub, pkgname):
- rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
- packageName=pkgname
- ))
-
-def getAppInfo(stub, pkgname):
- rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
- print(rsp_info)
-
-def touchdown(stub, xx, yy):
- rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchmove(stub, xx, yy):
- rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchup(stub, xx, yy):
- rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def new_memo(stub):
- touchdown(stub, 630,1140)
- time.sleep(0.1)
- touchup(stub, 630,1140)
- time.sleep(0.3)
-
-def findElementByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField=text
- )
- )
- for item in rsp_find.elements:
- return item.elementId
- return None
-
-def findElementsByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField=text
- )
- )
- els = []
- for el in rsp_find.elements:
- els.append(el.elementId)
- return els
-
-def clickById(stub, id):
- stub.click(aurum_pb2.ReqClick(
- type='ELEMENTID',
- elementId=id
- )
- )
-
-def run_memo(stub):
- foundId = findElementByText(stub, 'All apps')
- time.sleep(1.5)
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(1.5)
-
- foundId = findElementByText(stub, 'Memo')
- time.sleep(1.5)
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(2.5)
-
-def set_text(stub, text):
- foundIds = findElementsByText(stub, "Memo")
- foundIds += (findElementsByText(stub, "Title"))
- print(foundIds)
- for el in foundIds:
- print(el)
- stub.setValue(aurum_pb2.ReqSetValue(
- elementId=el,
- stringValue=text))
-
- #foundId = findElementByText(stub, 'DONE')
- #if foundId != None:
- # clickById(stub, foundId)
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = aurum_pb2_grpc.BootstrapStub(channel)
- set_text(stub, 'hello')
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
+++ /dev/null
-from __future__ import print_function
-import aurum_pb2
-import aurum_pb2_grpc
-import logging
-import grpc
-import time
-
-def sendKey(stub, key):
- rsp_key = stub.sendKey(aurum_pb2.ReqKey(
- type=key,
- actionType='STROKE',
- )
- )
- time.sleep(1)
-
-def launchApp(stub, pkgname):
- rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
- packageName=pkgname
- ))
-
-def closeApp(stub, pkgname):
- rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
- packageName=pkgname
- ))
-
-def getAppInfo(stub, pkgname):
- rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
- print(rsp_info)
-
-def touchdown(stub, xx, yy):
- rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchmove(stub, xx, yy):
- rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchup(stub, xx, yy):
- rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def new_memo(stub):
- touchdown(stub, 630,1140)
- time.sleep(0.1)
- touchup(stub, 630,1140)
- time.sleep(0.5)
-
-def findElementByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField=text
- )
- )
- for item in rsp_find.elements:
- return item.elementId
- return None
-
-def findElementsByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- strategy='TEXT',
- textField=text
- )
- )
- return rsp_find.elements
-
-def clickById(stub, id):
- stub.click(aurum_pb2.ReqClick(
- type='ELEMENTID',
- elementId=id
- )
- )
-
-def run_memo(stub):
- foundId = findElementByText(stub, 'All apps')
- time.sleep(1)
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(1)
-
- foundId = findElementByText(stub, 'Memo')
- time.sleep(1)
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(2)
-
-def set_text(stub, text):
- foundId = findElementByText(stub, 'Title')
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(1.2)
- stub.setValue(aurum_pb2.ReqSetValue(
- elementId=foundId,
- stringValue=text))
- foundIds = findElementsByText(stub, "Memo")
- if len(foundIds) >= 2:
- stub.setValue(aurum_pb2.ReqSetValue(
- elementId=foundIds[1].elementId,
- stringValue=text))
- time.sleep(0.2)
- foundId = findElementByText(stub, 'DONE')
- if foundId != None:
- clickById(stub, foundId)
-
-def clear_text(stub, el):
- print(stub.clear(aurum_pb2.ReqClear(elementId=el)))
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = aurum_pb2_grpc.BootstrapStub(channel)
-
- foundId = findElementByText(stub, 'Title')
- print(foundId)
- clear_text(stub, foundId)
-
-# foundId = findElementByText(stub, 'Photos')
-# print(foundId)
-# foundId = findElementByText(stub, 'Resume')
-# print(foundId)
-# if foundId != None:
-# clickById(stub, foundId)
-
-# time.sleep(1.35)
-
-# foundId = findElementByText(stub, 'STOP')
-# print(foundId)
-# if foundId != None:
-# clickById(stub, foundId)
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
+++ /dev/null
-from __future__ import print_function
-import aurum_pb2
-import aurum_pb2_grpc
-import logging
-import grpc
-import time
-
-def sendKey(stub, key):
- rsp_key = stub.sendKey(aurum_pb2.ReqKey(
- type=key,
- actionType='STROKE',
- )
- )
- time.sleep(1)
-
-def launchApp(stub, pkgname):
- rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
- packageName=pkgname
- ))
-
-def closeApp(stub, pkgname):
- rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
- packageName=pkgname
- ))
-
-def getAppInfo(stub, pkgname):
- rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
- print(rsp_info)
-
-def touchdown(stub, xx, yy):
- rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchmove(stub, xx, yy):
- rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def touchup(stub, xx, yy):
- rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
- print(rsp)
-
-def sync(stub):
- rsp = stub.sync(aurum_pb2.ReqEmpty())
- print(rsp)
-
-
-def new_memo(stub):
- touchdown(stub, 630,1140)
- time.sleep(0.1)
- touchup(stub, 630,1140)
- time.sleep(0.5)
-
-def findElementByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- textField=text, isEnabled=False
- )
- )
- for item in rsp_find.elements:
- return item.elementId
- return None
-
-def findElementsByText(stub, text):
- rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
- textField=text
- )
- )
- return rsp_find.elements
-
-def clickById(stub, id):
- stub.click(aurum_pb2.ReqClick(
- type='ELEMENTID',
- elementId=id
- )
- )
-
-def getAttrById(stub, id, attr):
- rsp = stub.getAttribute(aurum_pb2.ReqGetAttribute(attribute=attr, elementId=id))
- print(rsp)
-
-def run_memo(stub):
- foundId = findElementByText(stub, 'All apps')
- time.sleep(1)
- if foundId != None:
- getAttrById(stub, foundId, 'VISIBLE')
- getAttrById(stub, foundId, 'CLICKABLE')
- getAttrById(stub, foundId, 'FOCUSED')
- getAttrById(stub, foundId, 'ENABLED')
- getAttrById(stub, foundId, 'CHECKED')
- clickById(stub, foundId)
- time.sleep(1)
-
- foundId = findElementByText(stub, 'Memo')
- time.sleep(1)
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(2)
-
-def set_text(stub, text):
- foundId = findElementByText(stub, 'Title')
- if foundId != None:
- clickById(stub, foundId)
- time.sleep(1.2)
- stub.setValue(aurum_pb2.ReqSetValue(
- elementId=foundId,
- stringValue=text))
- foundIds = findElementsByText(stub, "Memo")
- if len(foundIds) >= 2:
- stub.setValue(aurum_pb2.ReqSetValue(
- elementId=foundIds[1].elementId,
- stringValue=text))
- time.sleep(0.2)
- foundId = findElementByText(stub, 'DONE')
- if foundId != None:
- clickById(stub, foundId)
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = aurum_pb2_grpc.BootstrapStub(channel)
-
- appid='org.tizen.elm-demo-tizen-mobile'
- getAppInfo(stub, appid)
- sendKey(stub, 'HOME')
- closeApp(stub, appid)
- getAppInfo(stub, appid)
- launchApp(stub, appid)
- foundId = findElementByText(stub, "Radio")
- print('--------' + foundId)
- getAttrById(stub, foundId, 'VISIBLE')
- getAttrById(stub, foundId, 'CLICKABLE')
- getAttrById(stub, foundId, 'FOCUSED')
- getAttrById(stub, foundId, 'ENABLED')
- getAttrById(stub, foundId, 'CHECKED')
- getAttrById(stub, foundId, 'SHOWING')
-
- foundId = findElementByText(stub, "Button")
- print('--------')
- getAttrById(stub, foundId, 'VISIBLE')
- getAttrById(stub, foundId, 'CLICKABLE')
- getAttrById(stub, foundId, 'FOCUSED')
- getAttrById(stub, foundId, 'ENABLED')
- getAttrById(stub, foundId, 'CHECKED')
- getAttrById(stub, foundId, 'SHOWING')
-
- print(foundId)
- clickById(stub, foundId)
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
+++ /dev/null
-from __future__ import print_function
-from aurum_pb2 import *
-from aurum_pb2_grpc import BootstrapStub
-import logging
-import grpc
-import time
-
-def findElementTest(stub):
- response = stub.findElement(ReqFindElement(isClickable=True))
- for el in response.elements:
- return True
- return False
-
-def getValueTest(stub):
- response = stub.findElement(ReqFindElement(textField='Button'))
- print("els", response)
- for el in response.elements:
- response = stub.getValue(ReqGetValue(elementId=el.elementId))
- return response.stringValue == 'Button'
- return False
-
-def setValueClearTest(stub):
- def inScreen(size):
- if size.x < 0: return False
- if size.y < 0: return False
- if size.x >= 720: return False
- if size.y >= 1280: return False
- return True
-
- for tryCnt in range(10):
- stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
- response = stub.findElement(ReqFindElement(textField='Entry'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
- response = stub.getSize(ReqGetSize(elementId=targetObj))
- if inScreen(response.size):
- stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
- break
-
- for tryCnt in range(10):
- stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
- response = stub.findElement(ReqFindElement(textField='Singleline Entry'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
- response = stub.getSize(ReqGetSize(elementId=targetObj))
- isShowing = stub.getAttribute(ReqGetAttribute(elementId=targetObj, attribute='SHOWING')).boolValue
- if inScreen(response.size) or isShowing:
- stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
- break
-
- response = stub.findElement(ReqFindElement(widgetType='Elm_Entry'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
-
- testString = 'set test string by calling SetValue Method'
- stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
- response = stub.getValue(ReqGetValue(elementId=targetObj))
- if response.stringValue != testString:
- return False
-
- stub.clear(ReqClear(elementId=targetObj))
-
- response = stub.getValue(ReqGetValue(elementId=targetObj))
- if response.stringValue != '':
- return False
-
- return True
-
-def getSizeTest(stub):
- response = stub.findElement(ReqFindElement(textField='Button'))
- print("els", response)
- for el in response.elements:
- response = stub.getSize(ReqGetSize(elementId=el.elementId))
- print(response)
- return response.size.width + response.size.height > 0
- return False
-
-def getAttributeTest(stub):
- response = stub.findElement(ReqFindElement(textField='Button'))
- if len(response.elements) <= 0: return False
-
- checkList = [
- ['VISIBLE', True],
- ['FOCUSABLE', True],
- ['FOCUSED', False],
- ['ENABLED', True],
- ['CLICKABLE', True],
- ['SCROLLABLE', False],
- ['CHECKABLE', False],
- ['CHECKED', False],
- ['SELECTED', False],
- ['SELECTABLE',True],
- ['SHOWING', True],
- ]
- isFailed = False
- for el in response.elements:
- for attr in checkList:
- if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
- isFailed = True
-
- if isFailed == True: return False
-
- response = stub.findElement(ReqFindElement(textField='Check'))
- if len(response.elements) <= 0: return False
-
- checkList = [
- ['VISIBLE', True],
- ['FOCUSABLE', True],
- ['FOCUSED', False],
- ['ENABLED', True],
- ['CLICKABLE', True],
- ['SCROLLABLE', False],
- ['CHECKABLE', False],
- ['CHECKED', False],
- ['SELECTED', False],
- ['SELECTABLE', True],
- ['SHOWING', True],
- ]
- isFailed = False
- for el in response.elements:
- for attr in checkList:
- if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
- isFailed = True
-
- return isFailed == False
-
-def clickTest(stub):
- response = stub.findElement(ReqFindElement(textField='Accessibility'))
- if len(response.elements) <= 0: return False
-
- for el in response.elements:
- stub.click(ReqClick(elementId=el.elementId, type='ELEMENTID'))
-
- response = stub.findElement(ReqFindElement(textField='Screen Reader'))
- if len(response.elements) <= 0: return False
-
- for el in response.elements:
- stub.click(ReqClick(coordination=Point(x=320, y=130), type='COORD'))
-
- response = stub.findElement(ReqFindElement(textField='UI Descriptions'))
- if len(response.elements) <= 0: return False
-
- return True
-
-def longClickTest(stub):
- response = stub.sendKey(ReqKey(type='HOME', actionType='STROKE'))
- stub.click(ReqClick(coordination=Point(x=160, y=160), type='COORD'))
- # TODO : find out something changed
- return False
-
-def flickTest(stub):
- response = stub.findElement(ReqFindElement(textField='Bg', isShowing=True))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
-
- for tryCnt in range(10):
- print('Flick to bottom to find "Spinner" item @ tries:', tryCnt)
- stub.flick(ReqFlick(startPoint=Point(x=160, y=359), endPoint=Point(x=160, y=1), durationMs=110))
- response = stub.findElement(ReqFindElement(textField='Spinner'))
- time.sleep(0.01)
- print(response)
- if len(response.elements) > 0:
- for el in response.elements:
- if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute='SHOWING')).boolValue: return True
-
- return False
-
-def touchTest(stub):
- res = stub.touchDown(ReqTouchDown(coordination=Point(x=160,y=640)))
- print(res)
- seq = res.seqId
- if seq < 0: return False
- for yy in range(640, 30, -10):
- stub.touchMove(ReqTouchMove(coordination=Point(x=160,y=yy), seqId=seq))
- stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=seq))
-
- return True
-
-
-def get_file_chunks(filename):
- CHUNK_SIZE = 1024 * 1024
- with open(filename, 'rb') as f:
- while True:
- piece = f.read(CHUNK_SIZE)
- if len(piece) == 0:
- return
- yield ReqInstallApp(package=piece)
-
-
-def installAppTest(stub):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- if (response.isInstalled): return True
-
- tpkFile = './org.tizen.uicomponents.arm.tpk'
- binaryChunk = get_file_chunks(tpkFile)
- response = stub.installApp(binaryChunk)
-
- for waitCnt in range(10):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
- time.sleep(1)
- if response.isInstalled: return True
- return False
-
-def removeAppTest(stub):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- if (response.isInstalled): response = stub.removeApp(ReqRemoveApp(packageName='org.example.uicomponents'))
- for waitCnt in range(10):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
- time.sleep(1)
- if response.isInstalled != True: return True
- return False
-
-def getAppInfoTest(stub):
- return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
-
-def launchAppTest(stub):
- print('launch result', stub.launchApp(ReqLaunchApp(packageName='org.example.uicomponents')))
-
- return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
-
-def closeAppTest(stub):
- print('close result',stub.closeApp(ReqCloseApp(packageName='org.example.uicomponents')))
- return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning != True
-
-def sendKeyTest(stub):
- response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
- time.sleep(0.3)
- response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
- time.sleep(0.3)
- response = stub.sendKey(ReqKey(type='WHEELDOWN', actionType='STROKE'))
- time.sleep(0.3)
- response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
- time.sleep(1)
- response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
- time.sleep(1)
- response = stub.sendKey(ReqKey(type='BACK', actionType='STROKE'))
- time.sleep(1)
- response = stub.sendKey(ReqKey(type='MENU', actionType='STROKE'))
- time.sleep(1)
- return True
-
-def getDeviceTimeTest(stub):
- response1 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
- response2 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
- print(response1, response2)
- return response2.timestampUTC > response1.timestampUTC;
-
-def getLocationTest(stub):
- response = stub.getLocation(ReqGetLocation())
-
- if response.alt < 0: return False
- if response.lat < 0: return False
- return True
-
-def takeScreenshotTest(stub):
- responses = stub.takeScreenshot(ReqTakeScreenshot())
- image = open("screenshot.png", "wb")
- for response in responses:
- image.write(response.image)
- image.close()
- return True;
-
-def defaultSetup(stub):
- if stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.elm-demo-tizen-mobile')).isRunning:
- stub.closeApp(ReqCloseApp(packageName='org.tizen.elm-demo-tizen-mobile'))
-
- stub.launchApp(ReqLaunchApp(packageName='org.tizen.elm-demo-tizen-mobile'))
-
-def defaultTearDown(stub):
- stub.closeApp(ReqCloseApp(packageName='org.tizen.elm-demo-tizen-mobile'))
-
-def runTest(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown, alwaySucceed=False):
- print("Testing started :", testFunc)
-
- setup(stub)
- result = testFunc(stub)
- tearDown(stub)
-
- print("Testing result :", result)
- if alwaySucceed: return True
- assert True == result
-
-def runTestWithoutSetupAndTearDown(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown):
- def Empty(stub):
- pass
-
- runTest(stub, testFunc, Empty, Empty)
-
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = BootstrapStub(channel)
-
- runTest(stub, getDeviceTimeTest)
- runTest(stub, findElementTest)
- runTest(stub, getValueTest)
- runTest(stub, getSizeTest)
- runTest(stub, getAttributeTest)
- runTest(stub, clickTest)
- runTest(stub, flickTest)
- runTest(stub, touchTest)
- runTest(stub, sendKeyTest)
- runTest(stub, setValueClearTest)
- runTest(stub, takeScreenshotTest)
- runTest(stub, longClickTest, alwaySucceed=True)
- runTest(stub, getLocationTest, alwaySucceed=True)
-
- runTestWithoutSetupAndTearDown(stub, installAppTest)
- runTestWithoutSetupAndTearDown(stub, launchAppTest)
- runTestWithoutSetupAndTearDown(stub, getAppInfoTest)
- runTestWithoutSetupAndTearDown(stub, closeAppTest)
- runTestWithoutSetupAndTearDown(stub, removeAppTest)
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
+++ /dev/null
-grpcio==1.23.0
-grpcio-tools==1.23.0
-protobuf==3.9.1
-six==1.12.0
+++ /dev/null
-from __future__ import print_function
-from aurum_pb2 import *
-from aurum_pb2_grpc import BootstrapStub
-import logging
-import grpc
-import time
-
-def findElementTest(stub):
- response = stub.findElement(ReqFindElement(isClickable=True))
- for el in response.elements:
- return True
- return False
-
-def getValueTest(stub):
- response = stub.findElement(ReqFindElement(textField='Widgets'))
- print("els", response)
- for el in response.elements:
- response = stub.getValue(ReqGetValue(elementId=el.elementId))
- return response.stringValue == 'Widgets'
- return False
-
-def setValueClearTest(stub):
- response = stub.findElement(ReqFindElement(textField='Widgets'))
- if len(response.elements) <= 0: return False
- stub.click(ReqClick(type='ELEMENTID', elementId=response.elements[0].elementId))
-
- def inScreen(size):
- if size.x < 0: return False
- if size.y < 0: return False
- if size.x >= 360: return False
- if size.y >= 360: return False
- return True
-
- for tryCnt in range(10):
- stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
- response = stub.findElement(ReqFindElement(textField='Entry/Editfield.*'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
- response = stub.getSize(ReqGetSize(elementId=targetObj))
- if inScreen(response.size):
- stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
- break
-
- for tryCnt in range(10):
- stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
- response = stub.findElement(ReqFindElement(textField='Editable'))
- if len(response.elements) <= 0: continue
- targetObj = response.elements[0].elementId
- response = stub.getSize(ReqGetSize(elementId=targetObj))
- isShowing = stub.getAttribute(ReqGetAttribute(elementId=targetObj, attribute='SHOWING')).boolValue
- if inScreen(response.size) or isShowing:
- stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
- break
-
- response = stub.findElement(ReqFindElement(textField='editable'))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
-
- testString = 'set test string by calling SetValue Method'
- stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
- response = stub.getValue(ReqGetValue(elementId=targetObj))
- if response.stringValue != testString:
- return False
-
- stub.clear(ReqClear(elementId=targetObj))
-
- response = stub.getValue(ReqGetValue(elementId=targetObj))
- if response.stringValue != 'editable':
- return False
-
- return True
-
-def getSizeTest(stub):
- response = stub.findElement(ReqFindElement(textField='Widgets'))
- print("els", response)
- for el in response.elements:
- response = stub.getSize(ReqGetSize(elementId=el.elementId))
- print(response)
- return response.size.width + response.size.height > 0
- return False
-
-def getAttributeTest(stub):
- response = stub.findElement(ReqFindElement(textField='Widgets'))
- if len(response.elements) <= 0: return False
-
- checkList = [
- ['VISIBLE', True],
- ['FOCUSABLE', True],
- ['FOCUSED', False],
- ['ENABLED', True],
- ['CLICKABLE', True],
- ['SCROLLABLE', False],
- ['CHECKABLE', False],
- ['CHECKED', False],
- ['SELECTED', False],
- ['SELECTABLE',True],
- ['SHOWING', True],
- ]
- isFailed = False
- for el in response.elements:
- for attr in checkList:
- if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
- isFailed = True
-
- if isFailed == True: return False
-
- response = stub.findElement(ReqFindElement(textField='Internal Legacy'))
- if len(response.elements) <= 0: return False
-
- checkList = [
- ['VISIBLE', True],
- ['FOCUSABLE', True],
- ['FOCUSED', False],
- ['ENABLED', True],
- ['CLICKABLE', True],
- ['SCROLLABLE', False],
- ['CHECKABLE', False],
- ['CHECKED', False],
- ['SELECTED', False],
- ['SELECTABLE', True],
- ['SHOWING', False],
- ]
- isFailed = False
- for el in response.elements:
- for attr in checkList:
- if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
- isFailed = True
-
- return isFailed == False
-
-def clickTest(stub):
- response = stub.findElement(ReqFindElement(textField='Widgets'))
- if len(response.elements) <= 0: return False
-
- for el in response.elements:
- stub.click(ReqClick(elementId=el.elementId, type='ELEMENTID'))
-
- response = stub.findElement(ReqFindElement(textField='Box'))
- if len(response.elements) <= 0: return False
-
- for el in response.elements:
- stub.click(ReqClick(coordination=Point(x=160, y=160), type='COORD'))
-
- response = stub.findElement(ReqFindElement(textField='Vertical Box'))
- if len(response.elements) <= 0: return False
-
- return True
-
-def longClickTest(stub):
- response = stub.sendKey(ReqKey(type='HOME', actionType='STROKE'))
- stub.click(ReqClick(coordination=Point(x=160, y=160), type='COORD'))
- # TODO : find out something changed
- return False
-
-def flickTest(stub):
- response = stub.findElement(ReqFindElement(textField='Widgets'))
- if len(response.elements) <= 0:
- return False
-
- for el in response.elements:
- print(el)
- stub.click(ReqClick(elementId=el.elementId, type='ELEMENTID'))
- break
-
- response = stub.findElement(ReqFindElement(textField='Box', isShowing=True))
- if len(response.elements) <= 0: return False
- targetObj = response.elements[0].elementId
-
- for tryCnt in range(10):
- print('Flick to bottom to find "Spinner" item @ tries:', tryCnt)
- stub.flick(ReqFlick(startPoint=Point(x=160, y=359), endPoint=Point(x=160, y=1), durationMs=350))
- response = stub.findElement(ReqFindElement(textField='Spinner.*'))
- time.sleep(0.01)
- print(response)
- if len(response.elements) > 0: return True
-
- return False
-
-def touchTest(stub):
- res = stub.touchDown(ReqTouchDown(coordination=Point(x=160,y=330)))
- print(res)
- seq = res.seqId
- if seq < 0: return False
- for yy in range(330, 30, -10):
- stub.touchMove(ReqTouchMove(coordination=Point(x=160,y=yy), seqId=seq))
- stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=seq))
-
- return True
-
-
-def get_file_chunks(filename):
- CHUNK_SIZE = 1024 * 1024
- with open(filename, 'rb') as f:
- while True:
- piece = f.read(CHUNK_SIZE)
- if len(piece) == 0:
- return
- yield ReqInstallApp(package=piece)
-
-
-def installAppTest(stub):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- if (response.isInstalled): return True
-
- tpkFile = './org.tizen.uicomponents.arm.tpk'
- binaryChunk = get_file_chunks(tpkFile)
- response = stub.installApp(binaryChunk)
-
- for waitCnt in range(10):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
- time.sleep(1)
- if response.isInstalled: return True
- return False
-
-def removeAppTest(stub):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- if (response.isInstalled): response = stub.removeApp(ReqRemoveApp(packageName='org.example.uicomponents'))
- for waitCnt in range(10):
- response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
- print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
- time.sleep(1)
- if response.isInstalled != True: return True
- return False
-
-def getAppInfoTest(stub):
- return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
-
-def launchAppTest(stub):
- print('launch result', stub.launchApp(ReqLaunchApp(packageName='org.example.uicomponents')))
-
- return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
-
-def closeAppTest(stub):
- print('close result',stub.closeApp(ReqCloseApp(packageName='org.example.uicomponents')))
- return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning != True
-
-def sendKeyTest(stub):
- response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
- time.sleep(3)
- response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
- time.sleep(3)
- response = stub.sendKey(ReqKey(type='BACK', actionType='STROKE'))
- time.sleep(5)
- response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
- time.sleep(0.3)
- response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
- time.sleep(0.3)
- response = stub.sendKey(ReqKey(type='WHEELDOWN', actionType='STROKE'))
- time.sleep(0.3)
- return True
-
-def scrollToTest(stub):
- print('scrollTo command not implemented')
- return False
-
-def getDeviceTimeTest(stub):
- response1 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
- response2 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
- print(response1, response2)
- return response2.timestampUTC > response1.timestampUTC;
-
-def getLocationTest(stub):
- response = stub.getLocation(ReqGetLocation())
-
- if response.alt < 0: return False
- if response.lat < 0: return False
- return True
-
-def takeScreenshotTest(stub):
- responses = stub.takeScreenshot(ReqTakeScreenshot())
- image = open("screenshot.png", "wb")
- for response in responses:
- image.write(response.image)
- image.close()
- return True;
-
-def defaultSetup(stub):
- if stub.getAppInfo(ReqGetAppInfo(packageName='com.samsung.ui-widget-sample')).isRunning:
- stub.closeApp(ReqCloseApp(packageName='com.samsung.ui-widget-sample'))
-
- stub.launchApp(ReqLaunchApp(packageName='com.samsung.ui-widget-sample'))
-
-def defaultTearDown(stub):
- stub.closeApp(ReqCloseApp(packageName='com.samsung.ui-widget-sample'))
-
-def runTest(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown, alwaySucceed=False):
- print("Testing started :", testFunc)
-
- setup(stub)
- result = testFunc(stub)
- tearDown(stub)
-
- if alwaySucceed: return True
- assert True == result
-
-def runTestWithoutSetupAndTearDown(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown):
- def Empty(stub):
- pass
-
- runTest(stub, testFunc, Empty, Empty)
-
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = BootstrapStub(channel)
-
- runTest(stub, getDeviceTimeTest)
-
- runTest(stub, findElementTest)
- runTest(stub, getValueTest)
- runTest(stub, getSizeTest)
- runTest(stub, getAttributeTest)
- runTest(stub, clickTest)
- runTest(stub, flickTest)
- runTest(stub, touchTest)
- runTest(stub, sendKeyTest)
- runTest(stub, setValueClearTest)
- runTest(stub, takeScreenshotTest)
- runTestWithoutSetupAndTearDown(stub, installAppTest)
- runTestWithoutSetupAndTearDown(stub, launchAppTest)
- runTestWithoutSetupAndTearDown(stub, getAppInfoTest)
- runTestWithoutSetupAndTearDown(stub, closeAppTest)
- runTestWithoutSetupAndTearDown(stub, removeAppTest)
-
- runTest(stub, longClickTest, alwaySucceed=True)
- runTest(stub, getLocationTest, alwaySucceed=True)
-
- runTest(stub, scrollToTest, alwaySucceed=True)
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
+++ /dev/null
-from __future__ import print_function
-from aurum_pb2 import *
-import aurum_pb2_grpc
-import logging
-import grpc
-import time
-from tkinter import *
-from PIL import ImageTk,Image
-
-def touchTest(stub):
- stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=0))
- stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=1))
- stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=2))
-
- res = stub.touchDown(ReqTouchDown(coordination=Point(x=160,y=330)))
- print(res)
- seq = res.seqId
- print(seq)
- for yy in range(330, 30, -10):
- stub.touchMove(ReqTouchMove(coordination=Point(x=160,y=yy), seqId=seq))
- stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=seq))
-
- return True
-
-global img
-
-def traverse(node, canvas, depth):
- print('traverse', depth)
- print('size:',node.geometry, node)
-
- #//canvas.pack()
- rect = canvas.create_rectangle(node.geometry.x, node.geometry.y, node.geometry.x+node.geometry.width, node.geometry.y+node.geometry.height, outline='red')
- for child in node.child:
- traverse(child, canvas, depth+1)
-
-def dumpTest(stub, tkroot):
- response = stub.findElement(ReqFindElement(maxDepth=1, minDepth=1, isShowing=True))
- print(response)
- for i in response.elements:
- response = stub.dumpObjectTree(ReqDumpObjectTree(elementId=i.elementId))
- print(response.roots)
-
- responses = stub.takeScreenshot(ReqTakeScreenshot())
- image = open("screenshot.png", "wb")
- for res in responses:
- image.write(res.image)
- image.close()
-
- canvas = Canvas(tkroot, width=360, height=360)
- canvas.pack()
-
- img = ImageTk.PhotoImage(Image.open("./screenshot.png"))
- print(img)
- canvas.create_image(0, 0, anchor=NW, image=img)
- canvas.img = img
- traverse(response.roots[0], canvas, 0)
-
-def test(arg=None):
- print(test, arg)
-
-def run():
- with grpc.insecure_channel('127.0.0.1:50051') as channel:
- stub = aurum_pb2_grpc.BootstrapStub(channel)
- root = Tk()
- root.geometry('360x360')
-
- dumpTest(stub, root)
-
- root.mainloop()
-
-# touchTest(stub)
-
-# print(stub.getLocation(ReqGetLocation()).status)
-# print(stub.sync(ReqEmpty()))
-# print(stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK')))
-# print(stub.sendKey(ReqKey(type='WHEELUP')))
-# time.sleep(0.1)
-# print(stub.sendKey(ReqKey(type='WHEELDOWN')))
-# time.sleep(0.1)
-# print(stub.sendKey(ReqKey(type='HOME')))
-# print(stub.sendKey(ReqKey(type='POWER')))
-# stub.killServer(aurum_pb2.ReqEmpty())
-
-if __name__ == '__main__':
- logging.basicConfig()
- run()
--- /dev/null
+#!/bin/bash -xe
+
+repo_url=http://download.tizen.org/snapshots/tizen/unified/latest/repos/standard/packages/armv7l/
+repo_dbg_url=http://download.tizen.org/snapshots/tizen/unified/latest/repos/standard/debug/
+
+libgrpc_filter=" -A libgrpc* "
+grpc_filter=" -A grpc-* "
+grpc_dbg_filter=" -A grpc-debug*armv7l* -A libatspi-debug*armv7l&"
+libgrpc_dbg_filter=" -A libgrpc-debug*armv7l* "
+
+test -d rpm && rm -rf rpm
+
+wget -P rpm --recursive -nd -nH -np $repo_url $grpc_filter
+wget -P rpm --recursive -nd -nH -np $repo_url $libgrpc_filter
+
+wget -P rpm --recursive -nd -nH -np $repo_dbg_url $grpc_dbg_filter
+wget -P rpm --recursive -nd -nH -np $repo_dbg_url $libgrpc_dbg_filter
--- /dev/null
+export TIZEN_WAYLAND_SHM_DIR=/run/.efl
+export beam_delta=0.5
+export EVAS_FONT_DPI=72
+export HOSTNAME=
+export LISTEN_PID=774
+export beam=15
+export WAYLAND_DISPLAY=wayland-0
+export ECORE_INPUT_CANCEL=1
+export EINA_LOG_ABORT_LEVEL=0
+export SHELL=/bin/bash
+export left_context=0
+export HISTSIZE=1000
+export fbank_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/fbank.conf
+export ac_weight=0.75
+export ELM_ENGINE=wayland_egl
+export LC_ALL=POSIX
+export lattice_beam=8.0
+export USER=owner
+export GST_DEBUG=2
+export WRT_BLOCK_SINGLE_PROCESS=OFF
+export right_context=3
+export symtab=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/lm/words.txt
+export ECORE_IMF_MODULE=wayland
+export MAIL=/var/spool/mail/owner
+export PATH=/bin:/usr/bin:/sbin:/usr/sbin
+export ECTOR_BACKEND=default
+export LISTEN_FDNAMES=launchpad-process-pool.socket
+export max_active=7000
+export EINA_LOG_DLOG_ENABLE=1
+export ELM_ATSPI_MODE=1
+export online=true
+export PWD=/opt/usr/home/owner
+export result=/usr/apps/org.tizen.stt-engine-embedded/shared/res/result.txt
+export lattice_out=lat.kor
+export nnet_in=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/am/converted_2_Eigen_Mat.nnet
+export prior=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/am/label.counts
+export LANG=en_US.UTF-8
+export PYTHONSTARTUP=/etc/pythonstart
+export global_cmvn=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/am/global_cmvn0412.ark
+export EVAS_SHM_FLUSH=1
+export fst_in=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/lm/TLG.fst
+export HISTCONTROL=ignoredups
+export hyp_filtering_cmd=cat
+export EINA_LOG_LEVEL=2
+export SHLVL=1
+export HOME=/opt/usr/home/owner
+export use_gpu=no
+export ECORE_ANIMATOR_SKIP=1
+export big_lm=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/lm/Mix_Bixby_VD_64k.1e8.arpa.carpa
+export ECORE_IMF_INPUT_PANEL_ENABLED=1
+export LOGNAME=owner
+export splice_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/splice.conf
+export cmvn_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/online_cmvn.conf
+export EVAS_GL_NO_BLACKLIST=1
+export DBUS_SESSION_BUS_ADDRESS="kernel:path=/sys/fs/kdbus/5001-user/bus;unix:path=/run/user/5001/bus"
+export res_dir=/usr/apps/org.tizen.stt-engine-embedded/shared/res
+export word_ins_penalty=1.0
+export delta_conf=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model/conf/delta.conf
+export MANAGERPID=610
+export JOURNAL_STREAM=7:22973
+export EINA_LOG_ABORT=1
+export XDG_RUNTIME_DIR=/run/user/5001
+export ELM_DISPLAY=wl
+export GTK_IM_MODULE=scim
+export LISTEN_FDS=1
+export G_BROKEN_FILENAMES=1
+export ELM_PROFILE=mobile
+export work_dir=/usr/apps/org.tizen.stt-engine-embedded/shared/res/model
+export _=/usr/bin/launchpad-process-pool
--- /dev/null
+#!/bin/bash
+sdb forward --remove-all
+sdb forward tcp:50051 tcp:50051
+sdb shell app_launcher -t org.tizen.aurum-bootstrap
+sdb shell app_launcher -s org.tizen.aurum-bootstrap
--- /dev/null
+```sh
+npm install
+npm install -g grpc-tools
+
+grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./ --grpc_out=./ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` ../../aurum.proto
+
+grpc_tools_node_protoc --js_out=import_style=commonjs,binary:../node/static_codegen/route_guide/ --grpc_out=../node/static_codegen/route_guide/ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin` aurum.proto
+```
--- /dev/null
+
+var messages = require('./aurum_pb');
+var services = require('./aurum_grpc_pb');
+
+var grpc = require('grpc');
+
+function main() {
+ var client = new services.BootstrapClient('localhost:50051',
+ grpc.credentials.createInsecure());
+
+ var request = new messages.ReqFindElement();
+
+ request.setStrategy(proto.aurum.ReqFindElement.RequestType.TEXT);
+ request.setTextfield("DONE");
+
+ client.findElement(request, function(err, response) {
+ if (err) {
+ console.log(err);
+ return;
+ }
+ var returnList = response.getElementsList();
+ console.log(returnList);
+ if (returnList.length > 0)
+ {
+ var request2 = new messages.ReqClick();
+ request2.setType(proto.aurum.ReqClick.RequestType.ELEMENTID)
+ request2.setElementid(returnList[0].getElementid());
+ client.click(request2, function(err, response2) {
+ if (err) {
+ console.log(err);
+ return;
+ }
+ console.log(response2);
+ });
+ }
+ });
+}
+
+main();
--- /dev/null
+#!/bin/bash
+
+grpc_tools_node_protoc --js_out=import_style=commonjs,binary:./ \
+ --grpc_out=./ --plugin=protoc-gen-grpc=`which grpc_tools_node_protoc_plugin`\
+ -I ./../../ ../../aurum.proto
+
--- /dev/null
+{
+ "name": "ua-node-example",
+ "version": "0.1.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@grpc/proto-loader": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.1.0.tgz",
+ "integrity": "sha512-GHoZBR5N+65AWazsCiJDxeMSbUpp2qNYbjeD3mP27L2PT25+GvIupIIJiCgULH87NAiAd9SmWMRBVz+uSiHpgA==",
+ "requires": {
+ "@types/lodash": "^4.14.104",
+ "@types/node": "^9.4.6",
+ "lodash": "^4.17.5",
+ "protobufjs": "^6.8.6"
+ }
+ },
+ "@protobufjs/aspromise": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz",
+ "integrity": "sha1-m4sMxmPWaafY9vXQiToU00jzD78="
+ },
+ "@protobufjs/base64": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz",
+ "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg=="
+ },
+ "@protobufjs/codegen": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz",
+ "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg=="
+ },
+ "@protobufjs/eventemitter": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz",
+ "integrity": "sha1-NVy8mLr61ZePntCV85diHx0Ga3A="
+ },
+ "@protobufjs/fetch": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz",
+ "integrity": "sha1-upn7WYYUr2VwDBYZ/wbUVLDYTEU=",
+ "requires": {
+ "@protobufjs/aspromise": "^1.1.1",
+ "@protobufjs/inquire": "^1.1.0"
+ }
+ },
+ "@protobufjs/float": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz",
+ "integrity": "sha1-Xp4avctz/Ap8uLKR33jIy9l7h9E="
+ },
+ "@protobufjs/inquire": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz",
+ "integrity": "sha1-/yAOPnzyQp4tyvwRQIKOjMY48Ik="
+ },
+ "@protobufjs/path": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz",
+ "integrity": "sha1-bMKyDFya1q0NzP0hynZz2Nf79o0="
+ },
+ "@protobufjs/pool": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz",
+ "integrity": "sha1-Cf0V8tbTq/qbZbw2ZQbWrXhG/1Q="
+ },
+ "@protobufjs/utf8": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz",
+ "integrity": "sha1-p3c2C1s5oaLlEG+OhY8v0tBgxXA="
+ },
+ "@types/bytebuffer": {
+ "version": "5.0.40",
+ "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.40.tgz",
+ "integrity": "sha512-h48dyzZrPMz25K6Q4+NCwWaxwXany2FhQg/ErOcdZS1ZpsaDnDMZg8JYLMTGz7uvXKrcKGJUZJlZObyfgdaN9g==",
+ "requires": {
+ "@types/long": "*",
+ "@types/node": "*"
+ }
+ },
+ "@types/lodash": {
+ "version": "4.14.138",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.138.tgz",
+ "integrity": "sha512-A4uJgHz4hakwNBdHNPdxOTkYmXNgmUAKLbXZ7PKGslgeV0Mb8P3BlbYfPovExek1qnod4pDfRbxuzcVs3dlFLg=="
+ },
+ "@types/long": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.0.tgz",
+ "integrity": "sha512-1w52Nyx4Gq47uuu0EVcsHBxZFJgurQ+rTKS3qMHxR1GY2T8c2AJYd6vZoZ9q1rupaDjU0yT+Jc2XTyXkjeMA+Q=="
+ },
+ "@types/node": {
+ "version": "9.6.51",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-9.6.51.tgz",
+ "integrity": "sha512-5lhC7QM2J3b/+epdwaNfRuG2peN4c9EX+mkd27+SqLKhJSdswHTZvc4aZLBZChi+Wo32+E1DeMZs0fSpu/uBXQ=="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
+ },
+ "ascli": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/ascli/-/ascli-1.0.1.tgz",
+ "integrity": "sha1-vPpZdKYvGOgcq660lzKrSoj5Brw=",
+ "requires": {
+ "colour": "~0.7.1",
+ "optjs": "~3.2.2"
+ }
+ },
+ "async": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
+ "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo="
+ },
+ "bytebuffer": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz",
+ "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=",
+ "requires": {
+ "long": "~3"
+ },
+ "dependencies": {
+ "long": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz",
+ "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s="
+ }
+ }
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8="
+ },
+ "cliui": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
+ "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wrap-ansi": "^2.0.0"
+ }
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
+ },
+ "colour": {
+ "version": "0.7.1",
+ "resolved": "https://registry.npmjs.org/colour/-/colour-0.7.1.tgz",
+ "integrity": "sha1-nLFpkX7F0SwHNtPoaFdG3xyt93g="
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
+ },
+ "google-protobuf": {
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.9.1.tgz",
+ "integrity": "sha512-tkz7SVwBktFbqFK3teXFUY/VM57+mbUgV9bSD+sZH1ocHJ7uk7BfEWMRdU24dd0ciUDokreA7ghH2fYFIczQdw=="
+ },
+ "grpc": {
+ "version": "1.23.3",
+ "resolved": "https://registry.npmjs.org/grpc/-/grpc-1.23.3.tgz",
+ "integrity": "sha512-7vdzxPw9s5UYch4aUn4hyM5tMaouaxUUkwkgJlwbR4AXMxiYZJOv19N2ps2eKiuUbJovo5fnGF9hg/X91gWYjw==",
+ "requires": {
+ "@types/bytebuffer": "^5.0.40",
+ "lodash.camelcase": "^4.3.0",
+ "lodash.clone": "^4.5.0",
+ "nan": "^2.13.2",
+ "node-pre-gyp": "^0.13.0",
+ "protobufjs": "^5.0.3"
+ },
+ "dependencies": {
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.5",
+ "bundled": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "chownr": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "debug": {
+ "version": "3.2.6",
+ "bundled": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "detect-libc": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "fs-minipass": {
+ "version": "1.2.6",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.4",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ },
+ "minizlib": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.2.1"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "bundled": true
+ },
+ "needle": {
+ "version": "2.4.0",
+ "bundled": true,
+ "requires": {
+ "debug": "^3.2.6",
+ "iconv-lite": "^0.4.4",
+ "sax": "^1.2.4"
+ }
+ },
+ "node-pre-gyp": {
+ "version": "0.13.0",
+ "bundled": true,
+ "requires": {
+ "detect-libc": "^1.0.2",
+ "mkdirp": "^0.5.1",
+ "needle": "^2.2.1",
+ "nopt": "^4.0.1",
+ "npm-packlist": "^1.1.6",
+ "npmlog": "^4.0.2",
+ "rc": "^1.2.7",
+ "rimraf": "^2.6.1",
+ "semver": "^5.3.0",
+ "tar": "^4"
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.6",
+ "bundled": true
+ },
+ "npm-packlist": {
+ "version": "1.4.4",
+ "bundled": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "protobufjs": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-5.0.3.tgz",
+ "integrity": "sha512-55Kcx1MhPZX0zTbVosMQEO5R6/rikNXd9b6RQK4KSPcrSIIwoXTtebIczUrXlwaSrbz4x8XUVThGPob1n8I4QA==",
+ "requires": {
+ "ascli": "~1",
+ "bytebuffer": "~5",
+ "glob": "^7.0.5",
+ "yargs": "^3.10.0"
+ }
+ },
+ "rc": {
+ "version": "1.2.8",
+ "bundled": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "rimraf": {
+ "version": "2.7.1",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ },
+ "sax": {
+ "version": "1.2.4",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "bundled": true
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "tar": {
+ "version": "4.4.10",
+ "bundled": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.3.5",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "bundled": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY="
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.15",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
+ "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
+ },
+ "lodash.camelcase": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz",
+ "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY="
+ },
+ "lodash.clone": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.clone/-/lodash.clone-4.5.0.tgz",
+ "integrity": "sha1-GVhwRQ9aExkkeN9Lw9I9LeoZB7Y="
+ },
+ "long": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz",
+ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA=="
+ },
+ "minimist": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
+ },
+ "nan": {
+ "version": "2.14.0",
+ "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
+ "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg=="
+ },
+ "npm": {
+ "version": "6.13.4",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.13.4.tgz",
+ "integrity": "sha512-vTcUL4SCg3AzwInWTbqg1OIaOXlzKSS8Mb8kc5avwrJpcvevDA5J9BhYSuei+fNs3pwOp4lzA5x2FVDXACvoXA==",
+ "requires": {
+ "JSONStream": "^1.3.5",
+ "abbrev": "~1.1.1",
+ "ansicolors": "~0.3.2",
+ "ansistyles": "~0.1.3",
+ "aproba": "^2.0.0",
+ "archy": "~1.0.0",
+ "bin-links": "^1.1.6",
+ "bluebird": "^3.5.5",
+ "byte-size": "^5.0.1",
+ "cacache": "^12.0.3",
+ "call-limit": "^1.1.1",
+ "chownr": "^1.1.3",
+ "ci-info": "^2.0.0",
+ "cli-columns": "^3.1.2",
+ "cli-table3": "^0.5.1",
+ "cmd-shim": "^3.0.3",
+ "columnify": "~1.5.4",
+ "config-chain": "^1.1.12",
+ "debuglog": "*",
+ "detect-indent": "~5.0.0",
+ "detect-newline": "^2.1.0",
+ "dezalgo": "~1.0.3",
+ "editor": "~1.0.0",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "fs-vacuum": "~1.2.10",
+ "fs-write-stream-atomic": "~1.0.10",
+ "gentle-fs": "^2.3.0",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.2.3",
+ "has-unicode": "~2.0.1",
+ "hosted-git-info": "^2.8.5",
+ "iferr": "^1.0.2",
+ "imurmurhash": "*",
+ "infer-owner": "^1.0.4",
+ "inflight": "~1.0.6",
+ "inherits": "^2.0.4",
+ "ini": "^1.3.5",
+ "init-package-json": "^1.10.3",
+ "is-cidr": "^3.0.0",
+ "json-parse-better-errors": "^1.0.2",
+ "lazy-property": "~1.0.0",
+ "libcipm": "^4.0.7",
+ "libnpm": "^3.0.1",
+ "libnpmaccess": "^3.0.2",
+ "libnpmhook": "^5.0.3",
+ "libnpmorg": "^1.0.1",
+ "libnpmsearch": "^2.0.2",
+ "libnpmteam": "^1.0.2",
+ "libnpx": "^10.2.0",
+ "lock-verify": "^2.1.0",
+ "lockfile": "^1.0.4",
+ "lodash._baseindexof": "*",
+ "lodash._baseuniq": "~4.6.0",
+ "lodash._bindcallback": "*",
+ "lodash._cacheindexof": "*",
+ "lodash._createcache": "*",
+ "lodash._getnative": "*",
+ "lodash.clonedeep": "~4.5.0",
+ "lodash.restparam": "*",
+ "lodash.union": "~4.6.0",
+ "lodash.uniq": "~4.5.0",
+ "lodash.without": "~4.4.0",
+ "lru-cache": "^5.1.1",
+ "meant": "~1.0.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "~0.5.1",
+ "move-concurrently": "^1.0.1",
+ "node-gyp": "^5.0.5",
+ "nopt": "~4.0.1",
+ "normalize-package-data": "^2.5.0",
+ "npm-audit-report": "^1.3.2",
+ "npm-cache-filename": "~1.0.2",
+ "npm-install-checks": "^3.0.2",
+ "npm-lifecycle": "^3.1.4",
+ "npm-package-arg": "^6.1.1",
+ "npm-packlist": "^1.4.7",
+ "npm-pick-manifest": "^3.0.2",
+ "npm-profile": "^4.0.2",
+ "npm-registry-fetch": "^4.0.2",
+ "npm-user-validate": "~1.0.0",
+ "npmlog": "~4.1.2",
+ "once": "~1.4.0",
+ "opener": "^1.5.1",
+ "osenv": "^0.1.5",
+ "pacote": "^9.5.11",
+ "path-is-inside": "~1.0.2",
+ "promise-inflight": "~1.0.1",
+ "qrcode-terminal": "^0.12.0",
+ "query-string": "^6.8.2",
+ "qw": "~1.0.1",
+ "read": "~1.0.7",
+ "read-cmd-shim": "^1.0.5",
+ "read-installed": "~4.0.3",
+ "read-package-json": "^2.1.1",
+ "read-package-tree": "^5.3.1",
+ "readable-stream": "^3.4.0",
+ "readdir-scoped-modules": "^1.1.0",
+ "request": "^2.88.0",
+ "retry": "^0.12.0",
+ "rimraf": "^2.6.3",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.7.1",
+ "sha": "^3.0.0",
+ "slide": "~1.1.6",
+ "sorted-object": "~2.0.1",
+ "sorted-union-stream": "~2.1.3",
+ "ssri": "^6.0.1",
+ "stringify-package": "^1.0.1",
+ "tar": "^4.4.13",
+ "text-table": "~0.2.0",
+ "tiny-relative-date": "^1.3.0",
+ "uid-number": "0.0.6",
+ "umask": "~1.1.0",
+ "unique-filename": "^1.1.1",
+ "unpipe": "~1.0.0",
+ "update-notifier": "^2.5.0",
+ "uuid": "^3.3.3",
+ "validate-npm-package-license": "^3.0.4",
+ "validate-npm-package-name": "~3.0.0",
+ "which": "^1.3.1",
+ "worker-farm": "^1.7.0",
+ "write-file-atomic": "^2.4.3"
+ },
+ "dependencies": {
+ "JSONStream": {
+ "version": "1.3.5",
+ "bundled": true,
+ "requires": {
+ "jsonparse": "^1.2.0",
+ "through": ">=2.2.7 <3"
+ }
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "agent-base": {
+ "version": "4.3.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ },
+ "agentkeepalive": {
+ "version": "3.5.2",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "^1.2.1"
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "bundled": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "^2.0.0"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "bundled": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "bundled": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "requires": {
+ "delegates": "^1.0.0",
+ "readable-stream": "^2.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "bundled": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "~2.1.0"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "bundled": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "bundled": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bin-links": {
+ "version": "1.1.6",
+ "bundled": true,
+ "requires": {
+ "bluebird": "^3.5.3",
+ "cmd-shim": "^3.0.0",
+ "gentle-fs": "^2.3.0",
+ "graceful-fs": "^4.1.15",
+ "npm-normalize-package-bin": "^1.0.0",
+ "write-file-atomic": "^2.3.0"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.5",
+ "bundled": true
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "^1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "builtins": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "byline": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "byte-size": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "cacache": {
+ "version": "12.0.3",
+ "bundled": true,
+ "requires": {
+ "bluebird": "^3.5.5",
+ "chownr": "^1.1.1",
+ "figgy-pudding": "^3.5.1",
+ "glob": "^7.1.4",
+ "graceful-fs": "^4.1.15",
+ "infer-owner": "^1.0.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "move-concurrently": "^1.0.1",
+ "promise-inflight": "^1.0.1",
+ "rimraf": "^2.6.3",
+ "ssri": "^6.0.1",
+ "unique-filename": "^1.1.1",
+ "y18n": "^4.0.0"
+ }
+ },
+ "call-limit": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chownr": {
+ "version": "1.1.3",
+ "bundled": true
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "cidr-regex": {
+ "version": "2.0.10",
+ "bundled": true,
+ "requires": {
+ "ip-regex": "^2.1.0"
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "cli-columns": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "^2.0.0",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "cli-table3": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "colors": "^1.1.2",
+ "object-assign": "^4.1.0",
+ "string-width": "^2.1.1"
+ }
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "cmd-shim": {
+ "version": "3.0.3",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "~0.5.0"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "bundled": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "bundled": true,
+ "requires": {
+ "color-name": "^1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "bundled": true
+ },
+ "colors": {
+ "version": "1.3.3",
+ "bundled": true,
+ "optional": true
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "bundled": true,
+ "requires": {
+ "strip-ansi": "^3.0.0",
+ "wcwidth": "^1.0.0"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "bundled": true,
+ "requires": {
+ "ini": "^1.3.4",
+ "proto-list": "~1.2.1"
+ }
+ },
+ "configstore": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "fs-write-stream-atomic": "^1.0.8",
+ "iferr": "^0.1.5",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "4.1.5",
+ "bundled": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true
+ }
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "clone": "^1.0.2"
+ }
+ },
+ "define-properties": {
+ "version": "1.1.3",
+ "bundled": true,
+ "requires": {
+ "object-keys": "^1.0.12"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "asap": "^2.0.0",
+ "wrappy": "1"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "duplexify": {
+ "version": "3.6.0",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.0.0",
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.1.0"
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "~0.4.13"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "env-paths": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "errno": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "prr": "~1.0.1"
+ }
+ },
+ "es-abstract": {
+ "version": "1.12.0",
+ "bundled": true,
+ "requires": {
+ "es-to-primitive": "^1.1.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.1",
+ "is-callable": "^1.1.3",
+ "is-regex": "^1.0.4"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.8",
+ "bundled": true
+ },
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "^4.0.3"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "bundled": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "bundled": true
+ },
+ "find-npm-prefix": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.4"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "bundled": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.1",
+ "readable-stream": "^2.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "fs-minipass": {
+ "version": "1.2.7",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.6.0"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ }
+ }
+ },
+ "fs-vacuum": {
+ "version": "1.2.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "path-is-inside": "^1.0.1",
+ "rimraf": "^2.5.2"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.0.3",
+ "console-control-strings": "^1.0.0",
+ "has-unicode": "^2.0.0",
+ "object-assign": "^4.1.0",
+ "signal-exit": "^3.0.0",
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1",
+ "wide-align": "^1.1.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "genfun": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "gentle-fs": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.2",
+ "chownr": "^1.1.2",
+ "cmd-shim": "^3.0.3",
+ "fs-vacuum": "^1.2.10",
+ "graceful-fs": "^4.1.11",
+ "iferr": "^0.1.5",
+ "infer-owner": "^1.0.4",
+ "mkdirp": "^0.5.1",
+ "path-is-inside": "^1.0.2",
+ "read-cmd-shim": "^1.0.1",
+ "slide": "^1.1.6"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "bundled": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.4",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "^1.0.0",
+ "inflight": "^1.0.4",
+ "inherits": "2",
+ "minimatch": "^3.0.4",
+ "once": "^1.3.0",
+ "path-is-absolute": "^1.0.0"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "bundled": true,
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "bundled": true,
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.2.3",
+ "bundled": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "ajv": "^5.3.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "function-bind": "^1.1.1"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "has-symbols": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "hosted-git-info": {
+ "version": "2.8.5",
+ "bundled": true
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4",
+ "debug": "3.1.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.4",
+ "bundled": true,
+ "requires": {
+ "agent-base": "^4.3.0",
+ "debug": "^3.1.0"
+ }
+ },
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "^2.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "iferr": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "ignore-walk": {
+ "version": "3.0.3",
+ "bundled": true,
+ "requires": {
+ "minimatch": "^3.0.4"
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "infer-owner": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "^1.3.0",
+ "wrappy": "1"
+ }
+ },
+ "inherits": {
+ "version": "2.0.4",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true
+ },
+ "init-package-json": {
+ "version": "1.10.3",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.1",
+ "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0",
+ "promzard": "^0.3.0",
+ "read": "~1.0.1",
+ "read-package-json": "1 || 2",
+ "semver": "2.x || 3.x || 4 || 5",
+ "validate-npm-package-license": "^3.0.1",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "is-callable": {
+ "version": "1.1.4",
+ "bundled": true
+ },
+ "is-ci": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "ci-info": "^1.0.0"
+ },
+ "dependencies": {
+ "ci-info": {
+ "version": "1.6.0",
+ "bundled": true
+ }
+ }
+ },
+ "is-cidr": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "cidr-regex": "^2.0.10"
+ }
+ },
+ "is-date-object": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "bundled": true,
+ "requires": {
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "is-regex": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "has": "^1.0.1"
+ }
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-symbol": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "has-symbols": "^1.0.0"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "bundled": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "bundled": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "package-json": "^4.0.0"
+ }
+ },
+ "lazy-property": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "libcipm": {
+ "version": "4.0.7",
+ "bundled": true,
+ "requires": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.5.1",
+ "find-npm-prefix": "^1.0.2",
+ "graceful-fs": "^4.1.11",
+ "ini": "^1.3.5",
+ "lock-verify": "^2.0.2",
+ "mkdirp": "^0.5.1",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "pacote": "^9.1.0",
+ "read-package-json": "^2.0.13",
+ "rimraf": "^2.6.2",
+ "worker-farm": "^1.6.0"
+ }
+ },
+ "libnpm": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "bin-links": "^1.1.2",
+ "bluebird": "^3.5.3",
+ "find-npm-prefix": "^1.0.2",
+ "libnpmaccess": "^3.0.2",
+ "libnpmconfig": "^1.2.1",
+ "libnpmhook": "^5.0.3",
+ "libnpmorg": "^1.0.1",
+ "libnpmpublish": "^1.1.2",
+ "libnpmsearch": "^2.0.2",
+ "libnpmteam": "^1.0.2",
+ "lock-verify": "^2.0.2",
+ "npm-lifecycle": "^3.0.0",
+ "npm-logical-tree": "^1.2.1",
+ "npm-package-arg": "^6.1.0",
+ "npm-profile": "^4.0.2",
+ "npm-registry-fetch": "^4.0.0",
+ "npmlog": "^4.1.2",
+ "pacote": "^9.5.3",
+ "read-package-json": "^2.0.13",
+ "stringify-package": "^1.0.0"
+ }
+ },
+ "libnpmaccess": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "get-stream": "^4.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmconfig": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "find-up": "^3.0.0",
+ "ini": "^1.3.5"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.2.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "libnpmhook": {
+ "version": "5.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmorg": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmpublish": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "lodash.clonedeep": "^4.5.0",
+ "normalize-package-data": "^2.4.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-registry-fetch": "^4.0.0",
+ "semver": "^5.5.1",
+ "ssri": "^6.0.1"
+ }
+ },
+ "libnpmsearch": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpmteam": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "^2.0.0",
+ "figgy-pudding": "^3.4.1",
+ "get-stream": "^4.0.0",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "libnpx": {
+ "version": "10.2.0",
+ "bundled": true,
+ "requires": {
+ "dotenv": "^5.0.1",
+ "npm-package-arg": "^6.0.0",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.0",
+ "update-notifier": "^2.3.0",
+ "which": "^1.3.0",
+ "y18n": "^4.0.0",
+ "yargs": "^11.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "^2.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "lock-verify": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "npm-package-arg": "^6.1.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "lockfile": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "lodash._baseindexof": {
+ "version": "3.1.0",
+ "bundled": true
+ },
+ "lodash._baseuniq": {
+ "version": "4.6.0",
+ "bundled": true,
+ "requires": {
+ "lodash._createset": "~4.0.0",
+ "lodash._root": "~3.0.0"
+ }
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "lodash._cacheindexof": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "lodash._createcache": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "lodash._getnative": "^3.0.0"
+ }
+ },
+ "lodash._createset": {
+ "version": "4.0.3",
+ "bundled": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "bundled": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "bundled": true
+ },
+ "lodash.union": {
+ "version": "4.6.0",
+ "bundled": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.without": {
+ "version": "4.4.0",
+ "bundled": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "bundled": true,
+ "requires": {
+ "yallist": "^3.0.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "pify": "^3.0.0"
+ }
+ },
+ "make-fetch-happen": {
+ "version": "5.0.2",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "^3.4.1",
+ "cacache": "^12.0.0",
+ "http-cache-semantics": "^3.8.1",
+ "http-proxy-agent": "^2.1.0",
+ "https-proxy-agent": "^2.2.3",
+ "lru-cache": "^5.1.1",
+ "mississippi": "^3.0.0",
+ "node-fetch-npm": "^2.0.2",
+ "promise-retry": "^1.1.1",
+ "socks-proxy-agent": "^4.0.0",
+ "ssri": "^6.0.0"
+ }
+ },
+ "meant": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "mem": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.35.0",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.19",
+ "bundled": true,
+ "requires": {
+ "mime-db": "~1.35.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "^1.1.7"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "minizlib": {
+ "version": "1.3.3",
+ "bundled": true,
+ "requires": {
+ "minipass": "^2.9.0"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ }
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "^1.5.0",
+ "duplexify": "^3.4.2",
+ "end-of-stream": "^1.1.0",
+ "flush-write-stream": "^1.0.0",
+ "from2": "^2.1.0",
+ "parallel-transform": "^1.1.0",
+ "pump": "^3.0.0",
+ "pumpify": "^1.3.3",
+ "stream-each": "^1.1.0",
+ "through2": "^2.0.0"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.1",
+ "copy-concurrently": "^1.0.0",
+ "fs-write-stream-atomic": "^1.0.8",
+ "mkdirp": "^0.5.1",
+ "rimraf": "^2.5.4",
+ "run-queue": "^1.0.3"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "bundled": true
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "^0.1.11",
+ "json-parse-better-errors": "^1.0.0",
+ "safe-buffer": "^5.1.1"
+ }
+ },
+ "node-gyp": {
+ "version": "5.0.5",
+ "bundled": true,
+ "requires": {
+ "env-paths": "^1.0.0",
+ "glob": "^7.0.3",
+ "graceful-fs": "^4.1.2",
+ "mkdirp": "^0.5.0",
+ "nopt": "2 || 3",
+ "npmlog": "0 || 1 || 2 || 3 || 4",
+ "request": "^2.87.0",
+ "rimraf": "2",
+ "semver": "~5.3.0",
+ "tar": "^4.4.12",
+ "which": "1"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "3.0.6",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true
+ }
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1",
+ "osenv": "^0.1.4"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ },
+ "dependencies": {
+ "resolve": {
+ "version": "1.10.0",
+ "bundled": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ }
+ }
+ },
+ "npm-audit-report": {
+ "version": "1.3.2",
+ "bundled": true,
+ "requires": {
+ "cli-table3": "^0.5.0",
+ "console-control-strings": "^1.1.0"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "npm-normalize-package-bin": "^1.0.1"
+ }
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "npm-install-checks": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "semver": "^2.3.0 || 3.x || 4 || 5"
+ }
+ },
+ "npm-lifecycle": {
+ "version": "3.1.4",
+ "bundled": true,
+ "requires": {
+ "byline": "^5.0.0",
+ "graceful-fs": "^4.1.15",
+ "node-gyp": "^5.0.2",
+ "resolve-from": "^4.0.0",
+ "slide": "^1.1.6",
+ "uid-number": "0.0.6",
+ "umask": "^1.1.0",
+ "which": "^1.3.1"
+ }
+ },
+ "npm-logical-tree": {
+ "version": "1.2.1",
+ "bundled": true
+ },
+ "npm-normalize-package-bin": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "npm-package-arg": {
+ "version": "6.1.1",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "^2.7.1",
+ "osenv": "^0.1.5",
+ "semver": "^5.6.0",
+ "validate-npm-package-name": "^3.0.0"
+ }
+ },
+ "npm-packlist": {
+ "version": "1.4.7",
+ "bundled": true,
+ "requires": {
+ "ignore-walk": "^3.0.1",
+ "npm-bundled": "^1.0.1"
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1",
+ "npm-package-arg": "^6.0.0",
+ "semver": "^5.4.1"
+ }
+ },
+ "npm-profile": {
+ "version": "4.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.2 || 2",
+ "figgy-pudding": "^3.4.1",
+ "npm-registry-fetch": "^4.0.0"
+ }
+ },
+ "npm-registry-fetch": {
+ "version": "4.0.2",
+ "bundled": true,
+ "requires": {
+ "JSONStream": "^1.3.4",
+ "bluebird": "^3.5.1",
+ "figgy-pudding": "^3.4.1",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "npm-package-arg": "^6.1.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "safe-buffer": {
+ "version": "5.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npm-user-validate": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "are-we-there-yet": "~1.1.2",
+ "console-control-strings": "~1.1.0",
+ "gauge": "~2.7.3",
+ "set-blocking": "~2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "bundled": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "bundled": true
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "es-abstract": "^1.5.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "opener": {
+ "version": "1.5.1",
+ "bundled": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "requires": {
+ "os-homedir": "^1.0.0",
+ "os-tmpdir": "^1.0.0"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "p-limit": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "^1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "^1.1.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ }
+ },
+ "pacote": {
+ "version": "9.5.11",
+ "bundled": true,
+ "requires": {
+ "bluebird": "^3.5.3",
+ "cacache": "^12.0.2",
+ "chownr": "^1.1.2",
+ "figgy-pudding": "^3.5.1",
+ "get-stream": "^4.1.0",
+ "glob": "^7.1.3",
+ "infer-owner": "^1.0.4",
+ "lru-cache": "^5.1.1",
+ "make-fetch-happen": "^5.0.0",
+ "minimatch": "^3.0.4",
+ "minipass": "^2.3.5",
+ "mississippi": "^3.0.0",
+ "mkdirp": "^0.5.1",
+ "normalize-package-data": "^2.4.0",
+ "npm-normalize-package-bin": "^1.0.0",
+ "npm-package-arg": "^6.1.0",
+ "npm-packlist": "^1.1.12",
+ "npm-pick-manifest": "^3.0.0",
+ "npm-registry-fetch": "^4.0.0",
+ "osenv": "^0.1.5",
+ "promise-inflight": "^1.0.1",
+ "promise-retry": "^1.1.1",
+ "protoduck": "^5.0.1",
+ "rimraf": "^2.6.2",
+ "safe-buffer": "^5.1.2",
+ "semver": "^5.6.0",
+ "ssri": "^6.0.1",
+ "tar": "^4.4.10",
+ "unique-filename": "^1.1.1",
+ "which": "^1.3.1"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ }
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "~0.2.2",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.1.5"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "bundled": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "^1.0.0",
+ "retry": "^0.10.0"
+ },
+ "dependencies": {
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "promzard": {
+ "version": "0.3.0",
+ "bundled": true,
+ "requires": {
+ "read": "1"
+ }
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "bundled": true
+ },
+ "protoduck": {
+ "version": "5.0.1",
+ "bundled": true,
+ "requires": {
+ "genfun": "^5.0.0"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "bundled": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "bundled": true,
+ "requires": {
+ "duplexify": "^3.6.0",
+ "inherits": "^2.0.3",
+ "pump": "^2.0.0"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "qrcode-terminal": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "bundled": true
+ },
+ "query-string": {
+ "version": "6.8.2",
+ "bundled": true,
+ "requires": {
+ "decode-uri-component": "^0.2.0",
+ "split-on-first": "^1.0.0",
+ "strict-uri-encode": "^2.0.0"
+ }
+ },
+ "qw": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "requires": {
+ "deep-extend": "^0.5.1",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "read": {
+ "version": "1.0.7",
+ "bundled": true,
+ "requires": {
+ "mute-stream": "~0.0.4"
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "graceful-fs": "^4.1.2",
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "slide": "~1.1.3",
+ "util-extend": "^1.0.1"
+ }
+ },
+ "read-package-json": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.1",
+ "graceful-fs": "^4.1.2",
+ "json-parse-better-errors": "^1.0.1",
+ "normalize-package-data": "^2.0.0",
+ "npm-normalize-package-bin": "^1.0.0"
+ }
+ },
+ "read-package-tree": {
+ "version": "5.3.1",
+ "bundled": true,
+ "requires": {
+ "read-package-json": "^2.0.0",
+ "readdir-scoped-modules": "^1.0.0",
+ "util-promisify": "^2.1.0"
+ }
+ },
+ "readable-stream": {
+ "version": "3.4.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "^2.0.3",
+ "string_decoder": "^1.1.1",
+ "util-deprecate": "^1.0.1"
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "debuglog": "^1.0.1",
+ "dezalgo": "^1.0.0",
+ "graceful-fs": "^4.1.2",
+ "once": "^1.3.0"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "bundled": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "bundled": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.8.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.6",
+ "extend": "~3.0.2",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.2",
+ "har-validator": "~5.1.0",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.19",
+ "oauth-sign": "~0.9.0",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.2",
+ "safe-buffer": "^5.1.2",
+ "tough-cookie": "~2.4.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "^1.1.1"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.7.1",
+ "bundled": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "semver": "^5.0.3"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "sha": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.2"
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "socks": {
+ "version": "2.3.3",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "^4.1.0"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "4.0.2",
+ "bundled": true,
+ "requires": {
+ "agent-base": "~4.2.1",
+ "socks": "~2.3.2"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.1",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "^5.0.0"
+ }
+ }
+ }
+ },
+ "sorted-object": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "sorted-union-stream": {
+ "version": "2.1.3",
+ "bundled": true,
+ "requires": {
+ "from2": "^1.3.0",
+ "stream-iterate": "^1.1.0"
+ },
+ "dependencies": {
+ "from2": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "~2.0.1",
+ "readable-stream": "~1.1.10"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "bundled": true
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.3",
+ "bundled": true
+ },
+ "split-on-first": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "bundled": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "^3.5.1"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "stream-shift": "^1.0.0"
+ }
+ },
+ "stream-iterate": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "stream-shift": "^1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "strict-uri-encode": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ },
+ "stringify-package": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "bundled": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "tar": {
+ "version": "4.4.13",
+ "bundled": true,
+ "requires": {
+ "chownr": "^1.1.1",
+ "fs-minipass": "^1.2.5",
+ "minipass": "^2.8.6",
+ "minizlib": "^1.2.1",
+ "mkdirp": "^0.5.0",
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.3"
+ },
+ "dependencies": {
+ "minipass": {
+ "version": "2.9.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.1.2",
+ "yallist": "^3.0.0"
+ }
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "execa": "^0.7.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "bundled": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "^2.1.5",
+ "xtend": "~4.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.3",
+ "isarray": "~1.0.0",
+ "process-nextick-args": "~2.0.0",
+ "safe-buffer": "~5.1.1",
+ "string_decoder": "~1.1.1",
+ "util-deprecate": "~1.0.1"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "tiny-relative-date": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "bundled": true,
+ "requires": {
+ "psl": "^1.1.24",
+ "punycode": "^1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "optional": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "unique-slug": "^2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "imurmurhash": "^0.1.4"
+ }
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "update-notifier": {
+ "version": "2.5.0",
+ "bundled": true,
+ "requires": {
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ }
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "util-extend": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "util-promisify": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "object.getownpropertydescriptors": "^2.0.3"
+ }
+ },
+ "uuid": {
+ "version": "3.3.3",
+ "bundled": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "builtins": "^1.0.3"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "defaults": "^1.0.3"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "bundled": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "^1.0.2"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "^2.1.1"
+ }
+ },
+ "worker-farm": {
+ "version": "1.7.0",
+ "bundled": true,
+ "requires": {
+ "errno": "~0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "write-file-atomic": {
+ "version": "2.4.3",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true
+ },
+ "yargs": {
+ "version": "11.0.0",
+ "bundled": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^9.0.2"
+ },
+ "dependencies": {
+ "y18n": {
+ "version": "3.2.1",
+ "bundled": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "bundled": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ }
+ }
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "optjs": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/optjs/-/optjs-3.2.2.tgz",
+ "integrity": "sha1-aabOicRCpEQDFBrS+bNwvVu29O4="
+ },
+ "os-locale": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
+ "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
+ "requires": {
+ "lcid": "^1.0.0"
+ }
+ },
+ "protobufjs": {
+ "version": "6.8.8",
+ "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.8.8.tgz",
+ "integrity": "sha512-AAmHtD5pXgZfi7GMpllpO3q1Xw1OYldr+dMUlAnffGTAhqkg72WdmSY71uKBF/JuyiKs8psYbtKrhi0ASCD8qw==",
+ "requires": {
+ "@protobufjs/aspromise": "^1.1.2",
+ "@protobufjs/base64": "^1.1.2",
+ "@protobufjs/codegen": "^2.0.4",
+ "@protobufjs/eventemitter": "^1.1.0",
+ "@protobufjs/fetch": "^1.1.0",
+ "@protobufjs/float": "^1.0.2",
+ "@protobufjs/inquire": "^1.1.0",
+ "@protobufjs/path": "^1.1.2",
+ "@protobufjs/pool": "^1.1.0",
+ "@protobufjs/utf8": "^1.1.0",
+ "@types/long": "^4.0.0",
+ "@types/node": "^10.1.0",
+ "long": "^4.0.0"
+ },
+ "dependencies": {
+ "@types/node": {
+ "version": "10.14.16",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.16.tgz",
+ "integrity": "sha512-/opXIbfn0P+VLt+N8DE4l8Mn8rbhiJgabU96ZJ0p9mxOkIks5gh6RUnpHak7Yh0SFkyjO/ODbxsQQPV2bpMmyA=="
+ }
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "window-size": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.4.tgz",
+ "integrity": "sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY="
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE="
+ },
+ "yargs": {
+ "version": "3.32.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
+ "integrity": "sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU=",
+ "requires": {
+ "camelcase": "^2.0.1",
+ "cliui": "^3.0.3",
+ "decamelize": "^1.1.1",
+ "os-locale": "^1.4.0",
+ "string-width": "^1.0.1",
+ "window-size": "^0.1.4",
+ "y18n": "^3.2.0"
+ }
+ }
+ }
+}
--- /dev/null
+{
+ "name": "ua-node-example",
+ "version": "0.1.0",
+ "dependencies": {
+ "@grpc/proto-loader": "^0.1.0",
+ "async": "^1.5.2",
+ "google-protobuf": "^3.0.0",
+ "grpc": "^1.11.0",
+ "lodash": "^4.6.1",
+ "minimist": "^1.2.0",
+ "npm": "^6.13.4"
+ }
+}
--- /dev/null
+* test python script must be in same location as aurum_pb2.py
+
+```sh
+
+python3 -m venv v
+
+source v/bin/activate
+
+pip3 install -r requirements.txt
+
+./gen.sh
+
+python3 sample01.py
+
+./deactivate
+
+```
--- /dev/null
+#!/bin/bash
+
+python3 -m grpc_tools.protoc --python_out=./ --grpc_python_out=./ -I ./../../ ../../aurum.proto
+
--- /dev/null
+from __future__ import print_function
+import aurum_pb2
+import aurum_pb2_grpc
+import logging
+import grpc
+import time
+
+def back(stub):
+ rsp_key = stub.sendKey(aurum_pb2.ReqKey(
+ type='BACK',
+ actionType='STROKE',
+ )
+ )
+
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField='TestMemo'
+ )
+ )
+
+ for item in rsp_find.elements:
+ print(item)
+ stub.click(aurum_pb2.ReqClick(
+ type='ELEMENTID',
+ elementId=item.elementId
+ )
+ )
+
+def findNclick(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField=text
+ )
+ )
+
+ for item in rsp_find.elements:
+ print(item)
+ stub.click(aurum_pb2.ReqClick(
+ type='ELEMENTID',
+ elementId=item.elementId
+ )
+ )
+
+def flick(stub):
+ rsp_flick = stub.flick(aurum_pb2.ReqFlick(
+ startPoint=aurum_pb2.Point(x=100, y=100),
+ endPoint=aurum_pb2.Point(x=400, y=400),
+ durationMs=1
+ ))
+
+def launchApp(stub):
+ rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
+ packageName='org.example.uicomponents'
+ ))
+
+def closeApp(stub):
+ rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
+ packageName='org.example.uicomponents'
+ ))
+
+CHUNK_SIZE = 1024 * 1024
+def get_file_chunks(filename):
+ with open(filename, 'rb') as f:
+ while True:
+ piece = f.read(CHUNK_SIZE)
+ if len(piece) == 0:
+ return
+ yield aurum_pb2.ReqInstallApp(package=piece)
+
+def installApp(stub):
+ in_file_name = './org.tizen.uicomponents.arm.tpk'
+ chunks_generator = get_file_chunks(in_file_name)
+ rsp_install = stub.installApp(chunks_generator)
+
+def removeApp(stub):
+ rsp_install = stub.removeApp(aurum_pb2.ReqRemoveApp(
+ packageName='org.example.uicomponents'
+ )
+ )
+
+def getAppInfo(stub):
+ rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName='org.example.uicomponents'))
+ print(rsp_info)
+
+def touchdown(stub, xx, yy):
+ rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchmove(stub, xx, yy):
+ rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchup(stub, xx, yy):
+ rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = aurum_pb2_grpc.BootstrapStub(channel)
+
+ findNclick(stub, 'Testmemo')
+ back(stub)
+ flick(stub)
+ installApp(stub)
+ time.sleep(1)
+ launchApp(stub)
+ time.sleep(1)
+ getAppInfo(stub)
+ time.sleep(1)
+ closeApp(stub)
+ time.sleep(1)
+# removeApp(stub)
+ flick(stub)
+ touchdown(stub, 300, 300)
+ touchmove(stub, 250, 250)
+ touchmove(stub, 200, 200)
+ touchmove(stub, 110, 110)
+ touchup(stub, 100, 100)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import aurum_pb2
+import aurum_pb2_grpc
+import logging
+import grpc
+import time
+
+def sendKey(stub, key):
+ rsp_key = stub.sendKey(aurum_pb2.ReqKey(
+ type=key,
+ actionType='STROKE',
+ )
+ )
+ time.sleep(1)
+
+def launchApp(stub, pkgname):
+ rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
+ packageName=pkgname
+ ))
+
+def closeApp(stub, pkgname):
+ rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
+ packageName=pkgname
+ ))
+
+def getAppInfo(stub, pkgname):
+ rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
+ print(rsp_info)
+
+def touchdown(stub, xx, yy):
+ rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchmove(stub, xx, yy):
+ rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchup(stub, xx, yy):
+ rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def new_memo(stub):
+ touchdown(stub, 630,1140)
+ time.sleep(0.1)
+ touchup(stub, 630,1140)
+ time.sleep(0.5)
+
+def findElementByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField=text
+ )
+ )
+ for item in rsp_find.elements:
+ return item.elementId
+ return None
+
+def findElementsByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField=text
+ )
+ )
+ return rsp_find.elements
+
+def clickById(stub, id):
+ stub.click(aurum_pb2.ReqClick(
+ type='ELEMENTID',
+ elementId=id
+ )
+ )
+
+def getAttrById(stub, id, attr):
+ rsp = stub.getAttribute(aurum_pb2.ReqGetAttribute(attribute=attr, elementId=id))
+ print(rsp)
+
+def run_memo(stub):
+ foundId = findElementByText(stub, 'All apps')
+ time.sleep(1)
+ if foundId != None:
+ getAttrById(stub, foundId, 'VISIBLE')
+ getAttrById(stub, foundId, 'CLICKABLE')
+ getAttrById(stub, foundId, 'FOCUSED')
+ getAttrById(stub, foundId, 'ENABLED')
+ getAttrById(stub, foundId, 'CHECKED')
+ clickById(stub, foundId)
+ time.sleep(1)
+
+ foundId = findElementByText(stub, 'Memo')
+ time.sleep(1)
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(2)
+
+def set_text(stub, text):
+ foundId = findElementByText(stub, 'Title')
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(1.2)
+ stub.setValue(aurum_pb2.ReqSetValue(
+ elementId=foundId,
+ stringValue=text))
+ foundIds = findElementsByText(stub, "Memo")
+ if len(foundIds) >= 2:
+ stub.setValue(aurum_pb2.ReqSetValue(
+ elementId=foundIds[1].elementId,
+ stringValue=text))
+ time.sleep(0.2)
+ foundId = findElementByText(stub, 'DONE')
+ if foundId != None:
+ clickById(stub, foundId)
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = aurum_pb2_grpc.BootstrapStub(channel)
+
+ getAppInfo(stub, 'org.tizen.memo')
+ time.sleep(1)
+ sendKey(stub, 'HOME')
+ time.sleep(1)
+ closeApp(stub, 'org.tizen.memo')
+ time.sleep(1)
+ getAppInfo(stub, 'org.tizen.memo')
+ time.sleep(1)
+ run_memo(stub)
+ time.sleep(1)
+ new_memo(stub)
+ time.sleep(1)
+ set_text(stub, 'hello')
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import aurum_pb2
+import aurum_pb2_grpc
+import logging
+import grpc
+import time
+
+def sendKey(stub, key):
+ rsp_key = stub.sendKey(aurum_pb2.ReqKey(
+ type=key,
+ actionType='STROKE',
+ )
+ )
+ time.sleep(1.5)
+
+def launchApp(stub, pkgname):
+ rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
+ packageName=pkgname
+ ))
+
+def closeApp(stub, pkgname):
+ rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
+ packageName=pkgname
+ ))
+
+def getAppInfo(stub, pkgname):
+ rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
+ print(rsp_info)
+
+def touchdown(stub, xx, yy):
+ rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchmove(stub, xx, yy):
+ rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchup(stub, xx, yy):
+ rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def new_memo(stub):
+ touchdown(stub, 630,1140)
+ time.sleep(0.1)
+ touchup(stub, 630,1140)
+ time.sleep(0.3)
+
+def findElementByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField=text
+ )
+ )
+ for item in rsp_find.elements:
+ return item.elementId
+ return None
+
+def findElementsByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField=text
+ )
+ )
+ els = []
+ for el in rsp_find.elements:
+ els.append(el.elementId)
+ return els
+
+def clickById(stub, id):
+ stub.click(aurum_pb2.ReqClick(
+ type='ELEMENTID',
+ elementId=id
+ )
+ )
+
+def run_memo(stub):
+ foundId = findElementByText(stub, 'All apps')
+ time.sleep(1.5)
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(1.5)
+
+ foundId = findElementByText(stub, 'Memo')
+ time.sleep(1.5)
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(2.5)
+
+def set_text(stub, text):
+ foundIds = findElementsByText(stub, "Memo")
+ foundIds += (findElementsByText(stub, "Title"))
+ print(foundIds)
+ for el in foundIds:
+ print(el)
+ stub.setValue(aurum_pb2.ReqSetValue(
+ elementId=el,
+ stringValue=text))
+
+ #foundId = findElementByText(stub, 'DONE')
+ #if foundId != None:
+ # clickById(stub, foundId)
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = aurum_pb2_grpc.BootstrapStub(channel)
+ set_text(stub, 'hello')
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import aurum_pb2
+import aurum_pb2_grpc
+import logging
+import grpc
+import time
+
+def sendKey(stub, key):
+ rsp_key = stub.sendKey(aurum_pb2.ReqKey(
+ type=key,
+ actionType='STROKE',
+ )
+ )
+ time.sleep(1)
+
+def launchApp(stub, pkgname):
+ rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
+ packageName=pkgname
+ ))
+
+def closeApp(stub, pkgname):
+ rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
+ packageName=pkgname
+ ))
+
+def getAppInfo(stub, pkgname):
+ rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
+ print(rsp_info)
+
+def touchdown(stub, xx, yy):
+ rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchmove(stub, xx, yy):
+ rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchup(stub, xx, yy):
+ rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def new_memo(stub):
+ touchdown(stub, 630,1140)
+ time.sleep(0.1)
+ touchup(stub, 630,1140)
+ time.sleep(0.5)
+
+def findElementByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField=text
+ )
+ )
+ for item in rsp_find.elements:
+ return item.elementId
+ return None
+
+def findElementsByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ strategy='TEXT',
+ textField=text
+ )
+ )
+ return rsp_find.elements
+
+def clickById(stub, id):
+ stub.click(aurum_pb2.ReqClick(
+ type='ELEMENTID',
+ elementId=id
+ )
+ )
+
+def run_memo(stub):
+ foundId = findElementByText(stub, 'All apps')
+ time.sleep(1)
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(1)
+
+ foundId = findElementByText(stub, 'Memo')
+ time.sleep(1)
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(2)
+
+def set_text(stub, text):
+ foundId = findElementByText(stub, 'Title')
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(1.2)
+ stub.setValue(aurum_pb2.ReqSetValue(
+ elementId=foundId,
+ stringValue=text))
+ foundIds = findElementsByText(stub, "Memo")
+ if len(foundIds) >= 2:
+ stub.setValue(aurum_pb2.ReqSetValue(
+ elementId=foundIds[1].elementId,
+ stringValue=text))
+ time.sleep(0.2)
+ foundId = findElementByText(stub, 'DONE')
+ if foundId != None:
+ clickById(stub, foundId)
+
+def clear_text(stub, el):
+ print(stub.clear(aurum_pb2.ReqClear(elementId=el)))
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = aurum_pb2_grpc.BootstrapStub(channel)
+
+ foundId = findElementByText(stub, 'Title')
+ print(foundId)
+ clear_text(stub, foundId)
+
+# foundId = findElementByText(stub, 'Photos')
+# print(foundId)
+# foundId = findElementByText(stub, 'Resume')
+# print(foundId)
+# if foundId != None:
+# clickById(stub, foundId)
+
+# time.sleep(1.35)
+
+# foundId = findElementByText(stub, 'STOP')
+# print(foundId)
+# if foundId != None:
+# clickById(stub, foundId)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import aurum_pb2
+import aurum_pb2_grpc
+import logging
+import grpc
+import time
+
+def sendKey(stub, key):
+ rsp_key = stub.sendKey(aurum_pb2.ReqKey(
+ type=key,
+ actionType='STROKE',
+ )
+ )
+ time.sleep(1)
+
+def launchApp(stub, pkgname):
+ rsp_launch = stub.launchApp(aurum_pb2.ReqLaunchApp(
+ packageName=pkgname
+ ))
+
+def closeApp(stub, pkgname):
+ rsp_launch = stub.closeApp(aurum_pb2.ReqCloseApp(
+ packageName=pkgname
+ ))
+
+def getAppInfo(stub, pkgname):
+ rsp_info = stub.getAppInfo(aurum_pb2.ReqGetAppInfo(packageName=pkgname))
+ print(rsp_info)
+
+def touchdown(stub, xx, yy):
+ rsp = stub.touchDown(aurum_pb2.ReqTouchDown(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchmove(stub, xx, yy):
+ rsp = stub.touchMove(aurum_pb2.ReqTouchMove(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def touchup(stub, xx, yy):
+ rsp = stub.touchUp(aurum_pb2.ReqTouchUp(coordination=aurum_pb2.Point(x=xx,y=yy)))
+ print(rsp)
+
+def sync(stub):
+ rsp = stub.sync(aurum_pb2.ReqEmpty())
+ print(rsp)
+
+
+def new_memo(stub):
+ touchdown(stub, 630,1140)
+ time.sleep(0.1)
+ touchup(stub, 630,1140)
+ time.sleep(0.5)
+
+def findElementByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ textField=text, isEnabled=False
+ )
+ )
+ for item in rsp_find.elements:
+ return item.elementId
+ return None
+
+def findElementsByText(stub, text):
+ rsp_find = stub.findElement(aurum_pb2.ReqFindElement(
+ textField=text
+ )
+ )
+ return rsp_find.elements
+
+def clickById(stub, id):
+ stub.click(aurum_pb2.ReqClick(
+ type='ELEMENTID',
+ elementId=id
+ )
+ )
+
+def getAttrById(stub, id, attr):
+ rsp = stub.getAttribute(aurum_pb2.ReqGetAttribute(attribute=attr, elementId=id))
+ print(rsp)
+
+def run_memo(stub):
+ foundId = findElementByText(stub, 'All apps')
+ time.sleep(1)
+ if foundId != None:
+ getAttrById(stub, foundId, 'VISIBLE')
+ getAttrById(stub, foundId, 'CLICKABLE')
+ getAttrById(stub, foundId, 'FOCUSED')
+ getAttrById(stub, foundId, 'ENABLED')
+ getAttrById(stub, foundId, 'CHECKED')
+ clickById(stub, foundId)
+ time.sleep(1)
+
+ foundId = findElementByText(stub, 'Memo')
+ time.sleep(1)
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(2)
+
+def set_text(stub, text):
+ foundId = findElementByText(stub, 'Title')
+ if foundId != None:
+ clickById(stub, foundId)
+ time.sleep(1.2)
+ stub.setValue(aurum_pb2.ReqSetValue(
+ elementId=foundId,
+ stringValue=text))
+ foundIds = findElementsByText(stub, "Memo")
+ if len(foundIds) >= 2:
+ stub.setValue(aurum_pb2.ReqSetValue(
+ elementId=foundIds[1].elementId,
+ stringValue=text))
+ time.sleep(0.2)
+ foundId = findElementByText(stub, 'DONE')
+ if foundId != None:
+ clickById(stub, foundId)
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = aurum_pb2_grpc.BootstrapStub(channel)
+
+ appid='org.tizen.elm-demo-tizen-mobile'
+ getAppInfo(stub, appid)
+ sendKey(stub, 'HOME')
+ closeApp(stub, appid)
+ getAppInfo(stub, appid)
+ launchApp(stub, appid)
+ foundId = findElementByText(stub, "Radio")
+ print('--------' + foundId)
+ getAttrById(stub, foundId, 'VISIBLE')
+ getAttrById(stub, foundId, 'CLICKABLE')
+ getAttrById(stub, foundId, 'FOCUSED')
+ getAttrById(stub, foundId, 'ENABLED')
+ getAttrById(stub, foundId, 'CHECKED')
+ getAttrById(stub, foundId, 'SHOWING')
+
+ foundId = findElementByText(stub, "Button")
+ print('--------')
+ getAttrById(stub, foundId, 'VISIBLE')
+ getAttrById(stub, foundId, 'CLICKABLE')
+ getAttrById(stub, foundId, 'FOCUSED')
+ getAttrById(stub, foundId, 'ENABLED')
+ getAttrById(stub, foundId, 'CHECKED')
+ getAttrById(stub, foundId, 'SHOWING')
+
+ print(foundId)
+ clickById(stub, foundId)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+from aurum_pb2 import *
+from aurum_pb2_grpc import BootstrapStub
+import logging
+import grpc
+import time
+
+def findElementTest(stub):
+ response = stub.findElement(ReqFindElement(isClickable=True))
+ for el in response.elements:
+ return True
+ return False
+
+def getValueTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Widgets'))
+ print("els", response)
+ for el in response.elements:
+ response = stub.getValue(ReqGetValue(elementId=el.elementId))
+ return response.stringValue == 'Widgets'
+ return False
+
+def setValueClearTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Widgets'))
+ if len(response.elements) <= 0: return False
+ stub.click(ReqClick(type='ELEMENTID', elementId=response.elements[0].elementId))
+
+ def inScreen(size):
+ if size.x < 0: return False
+ if size.y < 0: return False
+ if size.x >= 360: return False
+ if size.y >= 360: return False
+ return True
+
+ for tryCnt in range(10):
+ stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
+ response = stub.findElement(ReqFindElement(textField='Entry/Editfield.*'))
+ if len(response.elements) <= 0: continue
+ targetObj = response.elements[0].elementId
+ response = stub.getSize(ReqGetSize(elementId=targetObj))
+ if inScreen(response.size):
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ break
+
+ for tryCnt in range(10):
+ stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
+ response = stub.findElement(ReqFindElement(textField='Editable'))
+ if len(response.elements) <= 0: continue
+ targetObj = response.elements[0].elementId
+ response = stub.getSize(ReqGetSize(elementId=targetObj))
+ isShowing = stub.getAttribute(ReqGetAttribute(elementId=targetObj, attribute='SHOWING')).boolValue
+ if inScreen(response.size) or isShowing:
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ break
+
+ response = stub.findElement(ReqFindElement(textField='editable'))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+
+ testString = 'set test string by calling SetValue Method'
+ stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
+ response = stub.getValue(ReqGetValue(elementId=targetObj))
+ if response.stringValue != testString:
+ return False
+
+ stub.clear(ReqClear(elementId=targetObj))
+
+ response = stub.getValue(ReqGetValue(elementId=targetObj))
+ if response.stringValue != 'editable':
+ return False
+
+ return True
+
+def getSizeTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Widgets'))
+ print("els", response)
+ for el in response.elements:
+ response = stub.getSize(ReqGetSize(elementId=el.elementId))
+ print(response)
+ return response.size.width + response.size.height > 0
+ return False
+
+def getAttributeTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Widgets'))
+ if len(response.elements) <= 0: return False
+
+ checkList = [
+ ['VISIBLE', True],
+ ['FOCUSABLE', True],
+ ['FOCUSED', False],
+ ['ENABLED', True],
+ ['CLICKABLE', True],
+ ['SCROLLABLE', False],
+ ['CHECKABLE', False],
+ ['CHECKED', False],
+ ['SELECTED', False],
+ ['SELECTABLE',True],
+ ['SHOWING', True],
+ ]
+ isFailed = False
+ for el in response.elements:
+ for attr in checkList:
+ if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
+ isFailed = True
+
+ if isFailed == True: return False
+
+ response = stub.findElement(ReqFindElement(textField='Internal Legacy'))
+ if len(response.elements) <= 0: return False
+
+ checkList = [
+ ['VISIBLE', True],
+ ['FOCUSABLE', True],
+ ['FOCUSED', False],
+ ['ENABLED', True],
+ ['CLICKABLE', True],
+ ['SCROLLABLE', False],
+ ['CHECKABLE', False],
+ ['CHECKED', False],
+ ['SELECTED', False],
+ ['SELECTABLE', True],
+ ['SHOWING', False],
+ ]
+ isFailed = False
+ for el in response.elements:
+ for attr in checkList:
+ if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
+ isFailed = True
+
+ return isFailed == False
+
+def clickTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Widgets'))
+ if len(response.elements) <= 0: return False
+
+ for el in response.elements:
+ stub.click(ReqClick(elementId=el.elementId, type='ELEMENTID'))
+
+ response = stub.findElement(ReqFindElement(textField='Box'))
+ if len(response.elements) <= 0: return False
+
+ for el in response.elements:
+ stub.click(ReqClick(coordination=Point(x=160, y=160), type='COORD'))
+
+ response = stub.findElement(ReqFindElement(textField='Vertical Box'))
+ if len(response.elements) <= 0: return False
+
+ return True
+
+def longClickTest(stub):
+ response = stub.sendKey(ReqKey(type='HOME', actionType='STROKE'))
+ stub.click(ReqClick(coordination=Point(x=160, y=160), type='COORD'))
+ # TODO : find out something changed
+ return False
+
+def flickTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Widgets'))
+ if len(response.elements) <= 0:
+ return False
+
+ for el in response.elements:
+ print(el)
+ stub.click(ReqClick(elementId=el.elementId, type='ELEMENTID'))
+ break
+
+ response = stub.findElement(ReqFindElement(textField='Box', isShowing=True))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+
+ for tryCnt in range(10):
+ print('Flick to bottom to find "Spinner" item @ tries:', tryCnt)
+ stub.flick(ReqFlick(startPoint=Point(x=160, y=359), endPoint=Point(x=160, y=1), durationMs=350))
+ response = stub.findElement(ReqFindElement(textField='Spinner.*'))
+ time.sleep(0.01)
+ print(response)
+ if len(response.elements) > 0: return True
+
+ return False
+
+def touchTest(stub):
+ res = stub.touchDown(ReqTouchDown(coordination=Point(x=160,y=330)))
+ print(res)
+ seq = res.seqId
+ if seq < 0: return False
+ for yy in range(330, 30, -10):
+ stub.touchMove(ReqTouchMove(coordination=Point(x=160,y=yy), seqId=seq))
+ stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=seq))
+
+ return True
+
+
+def get_file_chunks(filename):
+ CHUNK_SIZE = 1024 * 1024
+ with open(filename, 'rb') as f:
+ while True:
+ piece = f.read(CHUNK_SIZE)
+ if len(piece) == 0:
+ return
+ yield ReqInstallApp(package=piece)
+
+
+def installAppTest(stub):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ if (response.isInstalled): return True
+
+ tpkFile = './org.tizen.uicomponents.arm.tpk'
+ binaryChunk = get_file_chunks(tpkFile)
+ response = stub.installApp(binaryChunk)
+
+ for waitCnt in range(10):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
+ time.sleep(1)
+ if response.isInstalled: return True
+ return False
+
+def removeAppTest(stub):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ if (response.isInstalled): response = stub.removeApp(ReqRemoveApp(packageName='org.example.uicomponents'))
+ for waitCnt in range(10):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
+ time.sleep(1)
+ if response.isInstalled != True: return True
+ return False
+
+def getAppInfoTest(stub):
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
+
+def launchAppTest(stub):
+ print('launch result', stub.launchApp(ReqLaunchApp(packageName='org.example.uicomponents')))
+
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
+
+def closeAppTest(stub):
+ print('close result',stub.closeApp(ReqCloseApp(packageName='org.example.uicomponents')))
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning != True
+
+def sendKeyTest(stub):
+ response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
+ time.sleep(3)
+ response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
+ time.sleep(3)
+ response = stub.sendKey(ReqKey(type='BACK', actionType='STROKE'))
+ time.sleep(5)
+ response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
+ time.sleep(0.3)
+ response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
+ time.sleep(0.3)
+ response = stub.sendKey(ReqKey(type='WHEELDOWN', actionType='STROKE'))
+ time.sleep(0.3)
+ return True
+
+def scrollToTest(stub):
+ print('scrollTo command not implemented')
+ return False
+
+def getDeviceTimeTest(stub):
+ response1 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
+ response2 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
+ print(response1, response2)
+ return response2.timestampUTC > response1.timestampUTC;
+
+def getLocationTest(stub):
+ response = stub.getLocation(ReqGetLocation())
+
+ if response.alt < 0: return False
+ if response.lat < 0: return False
+ return True
+
+def takeScreenshotTest(stub):
+ responses = stub.takeScreenshot(ReqTakeScreenshot())
+ image = open("screenshot.png", "wb")
+ for response in responses:
+ image.write(response.image)
+ image.close()
+ return True;
+
+def defaultSetup(stub):
+ if stub.getAppInfo(ReqGetAppInfo(packageName='com.samsung.ui-widget-sample')).isRunning:
+ stub.closeApp(ReqCloseApp(packageName='com.samsung.ui-widget-sample'))
+
+ stub.launchApp(ReqLaunchApp(packageName='com.samsung.ui-widget-sample'))
+
+def defaultTearDown(stub):
+ stub.closeApp(ReqCloseApp(packageName='com.samsung.ui-widget-sample'))
+
+def runTest(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown, alwaySucceed=False):
+ print("Testing started :", testFunc)
+
+ setup(stub)
+ result = testFunc(stub)
+ tearDown(stub)
+
+ if alwaySucceed: return True
+ assert True == result
+
+def runTestWithoutSetupAndTearDown(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown):
+ def Empty(stub):
+ pass
+
+ runTest(stub, testFunc, Empty, Empty)
+
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = BootstrapStub(channel)
+
+ runTest(stub, getDeviceTimeTest)
+
+ runTest(stub, findElementTest)
+ runTest(stub, getValueTest)
+ runTest(stub, getSizeTest)
+ runTest(stub, getAttributeTest)
+ runTest(stub, clickTest)
+ runTest(stub, flickTest)
+ runTest(stub, touchTest)
+ runTest(stub, sendKeyTest)
+ runTest(stub, setValueClearTest)
+ runTest(stub, takeScreenshotTest)
+ runTestWithoutSetupAndTearDown(stub, installAppTest)
+ runTestWithoutSetupAndTearDown(stub, launchAppTest)
+ runTestWithoutSetupAndTearDown(stub, getAppInfoTest)
+ runTestWithoutSetupAndTearDown(stub, closeAppTest)
+ runTestWithoutSetupAndTearDown(stub, removeAppTest)
+
+ runTest(stub, longClickTest, alwaySucceed=True)
+ runTest(stub, getLocationTest, alwaySucceed=True)
+
+ runTest(stub, scrollToTest, alwaySucceed=True)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+from aurum_pb2 import *
+import aurum_pb2_grpc
+import logging
+import grpc
+import time
+from tkinter import *
+from PIL import ImageTk,Image
+
+def touchTest(stub):
+ stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=0))
+ stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=1))
+ stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=2))
+
+ res = stub.touchDown(ReqTouchDown(coordination=Point(x=160,y=330)))
+ print(res)
+ seq = res.seqId
+ print(seq)
+ for yy in range(330, 30, -10):
+ stub.touchMove(ReqTouchMove(coordination=Point(x=160,y=yy), seqId=seq))
+ stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=seq))
+
+ return True
+
+global img
+
+def traverse(node, canvas, depth):
+ print('traverse', depth)
+ print('size:',node.geometry, node)
+
+ #//canvas.pack()
+ rect = canvas.create_rectangle(node.geometry.x, node.geometry.y, node.geometry.x+node.geometry.width, node.geometry.y+node.geometry.height, outline='red')
+ for child in node.child:
+ traverse(child, canvas, depth+1)
+
+def dumpTest(stub, tkroot):
+ response = stub.findElement(ReqFindElement(maxDepth=1, minDepth=1, isShowing=True))
+ print(response)
+ for i in response.elements:
+ response = stub.dumpObjectTree(ReqDumpObjectTree(elementId=i.elementId))
+ print(response.roots)
+
+ responses = stub.takeScreenshot(ReqTakeScreenshot())
+ image = open("screenshot.png", "wb")
+ for res in responses:
+ image.write(res.image)
+ image.close()
+
+ canvas = Canvas(tkroot, width=360, height=360)
+ canvas.pack()
+
+ img = ImageTk.PhotoImage(Image.open("./screenshot.png"))
+ print(img)
+ canvas.create_image(0, 0, anchor=NW, image=img)
+ canvas.img = img
+ traverse(response.roots[0], canvas, 0)
+
+def test(arg=None):
+ print(test, arg)
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = aurum_pb2_grpc.BootstrapStub(channel)
+ root = Tk()
+ root.geometry('360x360')
+
+ dumpTest(stub, root)
+
+ root.mainloop()
+
+# touchTest(stub)
+
+# print(stub.getLocation(ReqGetLocation()).status)
+# print(stub.sync(ReqEmpty()))
+# print(stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK')))
+# print(stub.sendKey(ReqKey(type='WHEELUP')))
+# time.sleep(0.1)
+# print(stub.sendKey(ReqKey(type='WHEELDOWN')))
+# time.sleep(0.1)
+# print(stub.sendKey(ReqKey(type='HOME')))
+# print(stub.sendKey(ReqKey(type='POWER')))
+# stub.killServer(aurum_pb2.ReqEmpty())
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import os
+import sys
+sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(os.path.dirname(__file__)))))
+from aurum_pb2 import *
+from aurum_pb2_grpc import BootstrapStub
+import logging
+import grpc
+import time
+
+# Check the object in the screen(TM1) or not
+def inScreen(size):
+ if size.x < 0: return False
+ if size.y < 0: return False
+ if size.x >= 720: return False
+ if size.y >= 1280: return False
+ return True
+
+# 1. Find TextField(entry)
+# 2. Set Text as Picker
+# 3. Click Run button
+# 4. Find PickerTest1 item on the result list
+# 5. Find 'Black' textlabel on the layout
+def PickerExecuteTestWithText(stub):
+ # 1
+ response = stub.findElement(ReqFindElement(widgetType='TextField'))
+ if len(response.elements) <= 0: return False
+ # 2
+ targetObj = response.elements[0].elementId
+ testString = 'Picker'
+ stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
+ # 3
+ response = stub.findElement(ReqFindElement(textField='Run'))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ # 4
+ response = stub.findElement(ReqFindElement(textField='PickerTest1'))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ # 5
+ response = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) <= 0: return False
+
+ return True
+
+# 1. Find PickerTest1 item on the list
+# 2. Click PickerTest1 item
+# 3. Find 'Black' textlabel on the layout
+def PickerExecuteTest(stub):
+ for tryCnt in range(10):
+ # 1
+ stub.flick(ReqFlick(startPoint=Point(x=300, y=750), endPoint=Point(x=300, y=200), durationMs=150))
+ response = stub.findElement(ReqFindElement(textField='PickerTest1'))
+ if len(response.elements) <= 0: continue
+ targetObj = response.elements[0].elementId
+ response = stub.getSize(ReqGetSize(elementId=targetObj))
+ if inScreen(response.size):
+ # 2
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ break
+
+ # 3
+ response = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) <= 0: return False
+ return True
+
+# 1. Find PickerScroller(Picker's internal scroller)
+# 2. Find 'Black' textlabel on the layout
+# 3. Get PickerScroller geometry value for flick event
+# 4. Check the loop works well while changing the picker item by flick event
+def PickerScrollTest(stub):
+ # 1
+ response = stub.findElement(ReqFindElement(widgetType='PickerScroller'))
+ if len(response.elements) <= 0: return False
+ # 2
+ responseText = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) <= 0: return False
+ # 3
+ pickerCenterX = response.elements[0].geometry.x + (response.elements[0].geometry.width / 2)
+ pickerCenterY = response.elements[0].geometry.y + (response.elements[0].geometry.height / 2)
+
+ for tryCnt in range(30):
+ # 4
+ stub.flick(ReqFlick(startPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY)), endPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY-70)), durationMs=100))
+ response = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) > 0:
+ if response.elements[0].elementId == responseText.elements[0].elementId:
+ return True
+
+ return False
+
+# Launch application. it returns application running state
+def launchAppTest(stub):
+ stub.launchApp(ReqLaunchApp(packageName='org.tizen.example.NUITizenGallery'))
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning
+
+# Close application. it returns application running state
+def closeAppTest(stub):
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning != True
+
+def defaultSetup(stub):
+ if stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning:
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
+
+ stub.launchApp(ReqLaunchApp(packageName='org.tizen.example.NUITizenGallery'))
+
+def defaultTearDown(stub):
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
+
+def runTest(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown, alwaySucceed=False):
+ print("Testing started :", testFunc)
+
+ setup(stub)
+ result = testFunc(stub)
+ tearDown(stub)
+
+ print("Testing result :", result)
+ if alwaySucceed: return True
+
+def runTestWithoutSetupAndTearDown(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown):
+ def Empty(stub):
+ pass
+
+ runTest(stub, testFunc, Empty, Empty)
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = BootstrapStub(channel)
+ # Picker Test
+ runTestWithoutSetupAndTearDown(stub, launchAppTest)
+ runTestWithoutSetupAndTearDown(stub, PickerExecuteTestWithText)
+ runTestWithoutSetupAndTearDown(stub, PickerScrollTest)
+ runTestWithoutSetupAndTearDown(stub, closeAppTest)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import os
+import sys
+sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(os.path.dirname(__file__)))))
+from __future__ import print_function
+from aurum_pb2 import *
+from aurum_pb2_grpc import BootstrapStub
+import logging
+import grpc
+import time
+
+def findElementTest(stub):
+ response = stub.findElement(ReqFindElement(isClickable=True))
+ for el in response.elements:
+ return True
+ return False
+
+def getValueTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Button'))
+ print("els", response)
+ for el in response.elements:
+ response = stub.getValue(ReqGetValue(elementId=el.elementId))
+ return response.stringValue == 'Button'
+ return False
+
+def setValueClearTest(stub):
+ def inScreen(size):
+ if size.x < 0: return False
+ if size.y < 0: return False
+ if size.x >= 720: return False
+ if size.y >= 1280: return False
+ return True
+
+ for tryCnt in range(10):
+ stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
+ response = stub.findElement(ReqFindElement(textField='Entry'))
+ if len(response.elements) <= 0: continue
+ targetObj = response.elements[0].elementId
+ response = stub.getSize(ReqGetSize(elementId=targetObj))
+ if inScreen(response.size):
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ break
+
+ for tryCnt in range(10):
+ stub.flick(ReqFlick(startPoint=Point(x=160, y=350), endPoint=Point(x=160, y=10), durationMs=500))
+ response = stub.findElement(ReqFindElement(textField='Singleline Entry'))
+ if len(response.elements) <= 0: continue
+ targetObj = response.elements[0].elementId
+ response = stub.getSize(ReqGetSize(elementId=targetObj))
+ isShowing = stub.getAttribute(ReqGetAttribute(elementId=targetObj, attribute='SHOWING')).boolValue
+ if inScreen(response.size) or isShowing:
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ break
+
+ response = stub.findElement(ReqFindElement(widgetType='Elm_Entry'))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+
+ testString = 'set test string by calling SetValue Method'
+ stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
+ response = stub.getValue(ReqGetValue(elementId=targetObj))
+ if response.stringValue != testString:
+ return False
+
+ stub.clear(ReqClear(elementId=targetObj))
+
+ response = stub.getValue(ReqGetValue(elementId=targetObj))
+ if response.stringValue != '':
+ return False
+
+ return True
+
+def getSizeTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Button'))
+ print("els", response)
+ for el in response.elements:
+ response = stub.getSize(ReqGetSize(elementId=el.elementId))
+ print(response)
+ return response.size.width + response.size.height > 0
+ return False
+
+def getAttributeTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Button'))
+ if len(response.elements) <= 0: return False
+
+ checkList = [
+ ['VISIBLE', True],
+ ['FOCUSABLE', True],
+ ['FOCUSED', False],
+ ['ENABLED', True],
+ ['CLICKABLE', True],
+ ['SCROLLABLE', False],
+ ['CHECKABLE', False],
+ ['CHECKED', False],
+ ['SELECTED', False],
+ ['SELECTABLE',True],
+ ['SHOWING', True],
+ ]
+ isFailed = False
+ for el in response.elements:
+ for attr in checkList:
+ if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
+ isFailed = True
+
+ if isFailed == True: return False
+
+ response = stub.findElement(ReqFindElement(textField='Check'))
+ if len(response.elements) <= 0: return False
+
+ checkList = [
+ ['VISIBLE', True],
+ ['FOCUSABLE', True],
+ ['FOCUSED', False],
+ ['ENABLED', True],
+ ['CLICKABLE', True],
+ ['SCROLLABLE', False],
+ ['CHECKABLE', False],
+ ['CHECKED', False],
+ ['SELECTED', False],
+ ['SELECTABLE', True],
+ ['SHOWING', True],
+ ]
+ isFailed = False
+ for el in response.elements:
+ for attr in checkList:
+ if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute=attr[0])).boolValue != attr[1]:
+ isFailed = True
+
+ return isFailed == False
+
+def clickTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Accessibility'))
+ if len(response.elements) <= 0: return False
+
+ for el in response.elements:
+ stub.click(ReqClick(elementId=el.elementId, type='ELEMENTID'))
+
+ response = stub.findElement(ReqFindElement(textField='Screen Reader'))
+ if len(response.elements) <= 0: return False
+
+ for el in response.elements:
+ stub.click(ReqClick(coordination=Point(x=320, y=130), type='COORD'))
+
+ response = stub.findElement(ReqFindElement(textField='UI Descriptions'))
+ if len(response.elements) <= 0: return False
+
+ return True
+
+def longClickTest(stub):
+ response = stub.sendKey(ReqKey(type='HOME', actionType='STROKE'))
+ stub.click(ReqClick(coordination=Point(x=160, y=160), type='COORD'))
+ # TODO : find out something changed
+ return False
+
+def flickTest(stub):
+ response = stub.findElement(ReqFindElement(textField='Bg', isShowing=True))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+
+ for tryCnt in range(10):
+ print('Flick to bottom to find "Spinner" item @ tries:', tryCnt)
+ stub.flick(ReqFlick(startPoint=Point(x=160, y=359), endPoint=Point(x=160, y=1), durationMs=110))
+ response = stub.findElement(ReqFindElement(textField='Spinner'))
+ time.sleep(0.01)
+ print(response)
+ if len(response.elements) > 0:
+ for el in response.elements:
+ if stub.getAttribute(ReqGetAttribute(elementId=el.elementId, attribute='SHOWING')).boolValue: return True
+
+ return False
+
+def touchTest(stub):
+ res = stub.touchDown(ReqTouchDown(coordination=Point(x=160,y=640)))
+ print(res)
+ seq = res.seqId
+ if seq < 0: return False
+ for yy in range(640, 30, -10):
+ stub.touchMove(ReqTouchMove(coordination=Point(x=160,y=yy), seqId=seq))
+ stub.touchUp(ReqTouchUp(coordination=Point(x=160,y=30), seqId=seq))
+
+ return True
+
+
+def get_file_chunks(filename):
+ CHUNK_SIZE = 1024 * 1024
+ with open(filename, 'rb') as f:
+ while True:
+ piece = f.read(CHUNK_SIZE)
+ if len(piece) == 0:
+ return
+ yield ReqInstallApp(package=piece)
+
+
+def installAppTest(stub):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ if (response.isInstalled): return True
+
+ tpkFile = './org.tizen.uicomponents.arm.tpk'
+ binaryChunk = get_file_chunks(tpkFile)
+ response = stub.installApp(binaryChunk)
+
+ for waitCnt in range(10):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
+ time.sleep(1)
+ if response.isInstalled: return True
+ return False
+
+def removeAppTest(stub):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ if (response.isInstalled): response = stub.removeApp(ReqRemoveApp(packageName='org.example.uicomponents'))
+ for waitCnt in range(10):
+ response = stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents'))
+ print('tries:', waitCnt, 'isInstalled:', response.isInstalled)
+ time.sleep(1)
+ if response.isInstalled != True: return True
+ return False
+
+def getAppInfoTest(stub):
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
+
+def launchAppTest(stub):
+ print('launch result', stub.launchApp(ReqLaunchApp(packageName='org.example.uicomponents')))
+
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning
+
+def closeAppTest(stub):
+ print('close result',stub.closeApp(ReqCloseApp(packageName='org.example.uicomponents')))
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.example.uicomponents')).isRunning != True
+
+def sendKeyTest(stub):
+ response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
+ time.sleep(0.3)
+ response = stub.sendKey(ReqKey(type='WHEELUP', actionType='STROKE'))
+ time.sleep(0.3)
+ response = stub.sendKey(ReqKey(type='WHEELDOWN', actionType='STROKE'))
+ time.sleep(0.3)
+ response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
+ time.sleep(1)
+ response = stub.sendKey(ReqKey(type='POWER', actionType='STROKE'))
+ time.sleep(1)
+ response = stub.sendKey(ReqKey(type='BACK', actionType='STROKE'))
+ time.sleep(1)
+ response = stub.sendKey(ReqKey(type='MENU', actionType='STROKE'))
+ time.sleep(1)
+ return True
+
+def getDeviceTimeTest(stub):
+ response1 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
+ response2 = stub.getDeviceTime(ReqGetDeviceTime(type='WALLCLOCK'))
+ print(response1, response2)
+ return response2.timestampUTC > response1.timestampUTC;
+
+def getLocationTest(stub):
+ response = stub.getLocation(ReqGetLocation())
+
+ if response.alt < 0: return False
+ if response.lat < 0: return False
+ return True
+
+def takeScreenshotTest(stub):
+ responses = stub.takeScreenshot(ReqTakeScreenshot())
+ image = open("screenshot.png", "wb")
+ for response in responses:
+ image.write(response.image)
+ image.close()
+ return True;
+
+def defaultSetup(stub):
+ if stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.elm-demo-tizen-mobile')).isRunning:
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.elm-demo-tizen-mobile'))
+
+ stub.launchApp(ReqLaunchApp(packageName='org.tizen.elm-demo-tizen-mobile'))
+
+def defaultTearDown(stub):
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.elm-demo-tizen-mobile'))
+
+def runTest(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown, alwaySucceed=False):
+ print("Testing started :", testFunc)
+
+ setup(stub)
+ result = testFunc(stub)
+ tearDown(stub)
+
+ print("Testing result :", result)
+ if alwaySucceed: return True
+ assert True == result
+
+def runTestWithoutSetupAndTearDown(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown):
+ def Empty(stub):
+ pass
+
+ runTest(stub, testFunc, Empty, Empty)
+
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = BootstrapStub(channel)
+
+ runTest(stub, getDeviceTimeTest)
+ runTest(stub, findElementTest)
+ runTest(stub, getValueTest)
+ runTest(stub, getSizeTest)
+ runTest(stub, getAttributeTest)
+ runTest(stub, clickTest)
+ runTest(stub, flickTest)
+ runTest(stub, touchTest)
+ runTest(stub, sendKeyTest)
+ runTest(stub, setValueClearTest)
+ runTest(stub, takeScreenshotTest)
+ runTest(stub, longClickTest, alwaySucceed=True)
+ runTest(stub, getLocationTest, alwaySucceed=True)
+
+ runTestWithoutSetupAndTearDown(stub, installAppTest)
+ runTestWithoutSetupAndTearDown(stub, launchAppTest)
+ runTestWithoutSetupAndTearDown(stub, getAppInfoTest)
+ runTestWithoutSetupAndTearDown(stub, closeAppTest)
+ runTestWithoutSetupAndTearDown(stub, removeAppTest)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+import os
+import subprocess
+import re
+import sys
+import time
+
+def run_command(command):
+ stream = os.popen(command)
+ output = stream.read()
+
+# Start scrip here
+run_command("sdb root on")
+run_command("sdb forward tcp:50051 tcp:50051")
+run_command("sdb shell app_launcher -s org.tizen.aurum-bootstrap")
+# Wait 1 sec till bootstrap launched
+time.sleep(1)
--- /dev/null
+grpcio==1.23.0
+grpcio-tools==1.23.0
+protobuf==3.9.1
+six==1.12.0
--- /dev/null
+from __future__ import print_function
+import os
+import sys
+sys.path.append(os.path.dirname(os.path.abspath(os.path.dirname(os.path.dirname(__file__)))))
+from aurum_pb2 import *
+from aurum_pb2_grpc import BootstrapStub
+import logging
+import grpc
+import time
+
+# Check the object in the screen(TV) or not
+def inScreen(size):
+ if size.x < 0: return False
+ if size.y < 0: return False
+ if size.x >= 1920: return False
+ if size.y >= 1080: return False
+ return True
+
+# 1. Find TextField(entry)
+# 2. Set Text as Picker
+# 3. Click Run button
+# 4. Find PickerTest1 item on the result list
+# 5. Find 'Black' textlabel on the layout
+def PickerExecuteTestWithText(stub):
+ # 1
+ response = stub.findElement(ReqFindElement(widgetType='TextField'))
+ if len(response.elements) <= 0: return False
+ # 2
+ targetObj = response.elements[0].elementId
+ testString = 'Picker'
+ stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
+ # 3
+ response = stub.findElement(ReqFindElement(textField='Run'))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ # 4
+ response = stub.findElement(ReqFindElement(textField='PickerTest1'))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ # 5
+ response = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) <= 0: return False
+
+ return True
+
+# 1. Find PickerTest1 item on the list
+# 2. Click PickerTest1 item
+# 3. Find 'Black' textlabel on the layout
+def PickerExecuteTest(stub):
+ for tryCnt in range(10):
+ # 1
+ stub.flick(ReqFlick(startPoint=Point(x=300, y=750), endPoint=Point(x=300, y=200), durationMs=150))
+ response = stub.findElement(ReqFindElement(textField='PickerTest1'))
+ if len(response.elements) <= 0: continue
+ targetObj = response.elements[0].elementId
+ response = stub.getSize(ReqGetSize(elementId=targetObj))
+ if inScreen(response.size):
+ # 2
+ stub.click(ReqClick(type='ELEMENTID', elementId=targetObj))
+ break
+
+ # 3
+ response = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) <= 0: return False
+ return True
+
+# 1. Find PickerScroller(Picker's internal scroller)
+# 2. Find 'Black' textlabel on the layout
+# 3. Get PickerScroller geometry value for flick event
+# 4. Check the loop works well while changing the picker item by flick event
+def PickerScrollTest(stub):
+ # 1
+ response = stub.findElement(ReqFindElement(widgetType='PickerScroller'))
+ if len(response.elements) <= 0: return False
+ # 2
+ responseText = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) <= 0: return False
+ # 3
+ pickerCenterX = response.elements[0].geometry.x + (response.elements[0].geometry.width / 2)
+ pickerCenterY = response.elements[0].geometry.y + (response.elements[0].geometry.height / 2)
+
+ for tryCnt in range(30):
+ # 4
+ stub.flick(ReqFlick(startPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY)), endPoint=Point(x=int(pickerCenterX), y=int(pickerCenterY-70)), durationMs=100))
+ # Wait until view update
+ time.sleep(0.3)
+ response = stub.findElement(ReqFindElement(textField='Black'))
+ if len(response.elements) > 0:
+ if response.elements[0].elementId == responseText.elements[0].elementId:
+ return True
+
+ return False
+
+# Launch application. it returns application running state
+def launchAppTest(stub):
+ stub.launchApp(ReqLaunchApp(packageName='org.tizen.example.NUITizenGallery'))
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning
+
+# Close application. it returns application running state
+def closeAppTest(stub):
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
+ return stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning != True
+
+def defaultSetup(stub):
+ if stub.getAppInfo(ReqGetAppInfo(packageName='org.tizen.example.NUITizenGallery')).isRunning:
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
+
+ stub.launchApp(ReqLaunchApp(packageName='org.tizen.example.NUITizenGallery'))
+
+def defaultTearDown(stub):
+ stub.closeApp(ReqCloseApp(packageName='org.tizen.example.NUITizenGallery'))
+
+def runTest(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown, alwaySucceed=False):
+ print("Testing started :", testFunc)
+
+ setup(stub)
+ result = testFunc(stub)
+ tearDown(stub)
+
+ print("Testing result :", result)
+ if alwaySucceed: return True
+
+def runTestWithoutSetupAndTearDown(stub, testFunc, setup=defaultSetup, tearDown=defaultTearDown):
+ def Empty(stub):
+ pass
+
+ runTest(stub, testFunc, Empty, Empty)
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = BootstrapStub(channel)
+ # Picker Test
+ runTestWithoutSetupAndTearDown(stub, launchAppTest)
+ runTestWithoutSetupAndTearDown(stub, PickerExecuteTestWithText)
+ runTestWithoutSetupAndTearDown(stub, PickerScrollTest)
+ runTestWithoutSetupAndTearDown(stub, closeAppTest)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import os
+import sys
+sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
+from aurum_pb2 import *
+from aurum_pb2_grpc import BootstrapStub
+import logging
+import grpc
+import time
+
+# Second view size change and check
+# Please refer key codes below page
+# https://code.sec.samsung.net/confluence/display/GFX/VD+Key+Code+Table
+def MultiViewSizeTest(stub):
+ response = stub.findElement(ReqFindElement(textField='VSComponent2'))
+ if len(response.elements) <= 0: return False
+
+ responseGuide = stub.findElement(ReqFindElement(textField='Guide TextBox'))
+ if len(response.elements) <= 0:
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Return'))
+
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Right'))
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Up'))
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Return'))
+ # Wait until render finished
+ time.sleep(1)
+
+ responseAfter = stub.findElement(ReqFindElement(textField='VSComponent2'))
+ if len(responseAfter.elements) <= 0: return False
+
+ if response.elements[0].geometry.width < responseAfter.elements[0].geometry.width:
+ return True
+
+ return False
+
+# Launch 3rd-party app and long press back key test
+def MultiViewContentsTest(stub):
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Return'))
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Left'))
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Up'))
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='Return'))
+ # Wait until render finished
+ time.sleep(10)
+
+ # It fails if there is a View
+ response= stub.findElement(ReqFindElement(textField='VSComponent2'))
+ if len(response.elements) > 0: return False
+
+ stub.sendKey(ReqKey(type='XF86', actionType='LONG_STROKE', XF86keyCode='XF86Back'))
+
+ return True
+
+# Launch application. it returns application running state
+def launchAppTest(stub):
+ stub.launchApp(ReqLaunchApp(packageName='com.samsung.tv.multiscreen'))
+ time.sleep(5)
+ return stub.getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.multiscreen')).isRunning
+
+# Close application. it returns application running state
+def closeAppTest(stub):
+ stub.closeApp(ReqCloseApp(packageName='com.samsung.tv.multiscreen'))
+ return stub.getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.multiscreen')).isRunning != True
+
+def runTest(stub, testFunc):
+ print("Testing started :", testFunc)
+
+ result = testFunc(stub)
+
+ print("Testing result :", result)
+ return True
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = BootstrapStub(channel)
+ runTest(stub, launchAppTest)
+ runTest(stub, MultiViewSizeTest)
+ runTest(stub, MultiViewContentsTest)
+ runTest(stub, closeAppTest)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+from __future__ import print_function
+import os
+import sys
+sys.path.append(os.path.abspath(os.path.dirname(os.path.dirname(__file__))))
+from aurum_pb2 import *
+from aurum_pb2_grpc import BootstrapStub
+import logging
+import grpc
+import time
+
+# Find TextField and input "Movie" text
+def SearchTestWithText(stub):
+ response = stub.findElement(ReqFindElement(widgetType='TextField'))
+ if len(response.elements) <= 0: return False
+ targetObj = response.elements[0].elementId
+ testString = 'Movie'
+ stub.setValue(ReqSetValue(elementId=targetObj, stringValue=testString))
+
+ # Wait until result upload
+ time.sleep(2)
+
+ return True
+
+# Find Foused item and move focus to right then compare focused item with previous one
+def SearchFocusedObject(stub):
+ response = stub.findElement(ReqFindElement(isFocused=True))
+ if len(response.elements) <= 0: return False
+
+ prevObj = response.elements[0].elementId
+ stub.sendKey(ReqKey(type='XF86', actionType='LONG_STROKE', XF86keyCode='Right'))
+ time.sleep(1)
+
+ response = stub.findElement(ReqFindElement(isFocused=True))
+ if len(response.elements) <= 0: return False
+
+ if prevObj != response.elements[0].elementId:
+ return True
+
+ return False
+
+
+# Launch application. it returns application running state
+def launchAppTest(stub):
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='XF86Search'))
+ # Wait until app launch
+ time.sleep(5)
+ return stub.getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.searchall')).isRunning
+
+# Close application. it returns application running state
+def closeAppTest(stub):
+ stub.sendKey(ReqKey(type='XF86', actionType='STROKE', XF86keyCode='XF86Exit'))
+ time.sleep(2)
+ return stub.getAppInfo(ReqGetAppInfo(packageName='com.samsung.tv.searchall')).isRunning != True
+
+def runTest(stub, testFunc):
+ print("Testing started :", testFunc)
+
+ result = testFunc(stub)
+
+ print("Testing result :", result)
+ return True
+
+def run():
+ with grpc.insecure_channel('127.0.0.1:50051') as channel:
+ stub = BootstrapStub(channel)
+ runTest(stub, launchAppTest)
+ runTest(stub, SearchTestWithText)
+ runTest(stub, SearchFocusedObject)
+ runTest(stub, closeAppTest)
+
+if __name__ == '__main__':
+ logging.basicConfig()
+ run()
--- /dev/null
+import os
+import subprocess
+import re
+import sys
+import time
+
+def run_command(command):
+ stream = os.popen(command)
+ output = stream.read()
+
+# Start scrip here
+run_command("sdb root on")
+# To run bootstrap as command
+run_command("sdb shell tpk-backend -y org.tizen.aurum-bootstrap --preload")
+# TV need to enable touch
+run_command("sdb shell vconftool set -f -t bool memory/window_system/input/force_enable_touch 1")
+# Dut to input generator issue, temporarily do below command
+run_command("sdb shell winfo -init_device --type=touch")
+run_command("sdb forward tcp:50051 tcp:50051")
+run_command("sdb shell app_launcher -s org.tizen.aurum-bootstrap")
+# Wait 1 sec till bootstrap launched
+time.sleep(1)
--- /dev/null
+python3 -m venv v
+
+source v/bin/activate
+
+pip3 install -r ../../../protocol/resources/python/requirements.txt
+
+python3 -m grpc_tools.protoc --python_out=./ --grpc_python_out=./ -I ./../../../protocol/ ../../../protocol/aurum.proto
+
+python3 ../../../protocol/resources/python/mobile/mobileSetup.py
--- /dev/null
+python3 -m venv v
+
+source v/bin/activate
+
+pip3 install -r ../../../protocol/resources/python/requirements.txt
+
+python3 -m grpc_tools.protoc --python_out=./ --grpc_python_out=./ -I ./../../../protocol/ ../../../protocol/aurum.proto
+
+python3 ../../../protocol/resources/python/tv/tvSetup.py