From: Woochanlee Date: Wed, 25 Aug 2021 11:46:48 +0000 (+0900) Subject: aurum: re-arrange files and add guide & scripts for TV X-Git-Tag: submit/tizen/20210831.022718^0 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=65a0e9a9b88f3525a774c2a1a50ee9137f1a0501;p=platform%2Fcore%2Fuifw%2Faurum.git aurum: re-arrange files and add guide & scripts for TV Change-Id: Ibdc2684cfcc984fabf7f02a80143abb2cf2b3c88 --- diff --git a/README.md b/README.md new file mode 100644 index 0000000..24895ec --- /dev/null +++ b/README.md @@ -0,0 +1,52 @@ +# 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) + diff --git a/misc/down_grpc.sh b/misc/down_grpc.sh deleted file mode 100755 index 96dc0dc..0000000 --- a/misc/down_grpc.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/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 diff --git a/misc/env.sh b/misc/env.sh deleted file mode 100644 index c2c77e2..0000000 --- a/misc/env.sh +++ /dev/null @@ -1,69 +0,0 @@ -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 diff --git a/misc/setup_device.sh b/misc/setup_device.sh deleted file mode 100755 index fea30b2..0000000 --- a/misc/setup_device.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/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 diff --git a/protocol/examples/node/README b/protocol/examples/node/README deleted file mode 100644 index 529ca8c..0000000 --- a/protocol/examples/node/README +++ /dev/null @@ -1,8 +0,0 @@ -```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 -``` diff --git a/protocol/examples/node/client.js b/protocol/examples/node/client.js deleted file mode 100644 index 64f1007..0000000 --- a/protocol/examples/node/client.js +++ /dev/null @@ -1,39 +0,0 @@ - -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(); diff --git a/protocol/examples/node/gen.sh b/protocol/examples/node/gen.sh deleted file mode 100755 index 207f23c..0000000 --- a/protocol/examples/node/gen.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/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 - diff --git a/protocol/examples/node/package-lock.json b/protocol/examples/node/package-lock.json deleted file mode 100644 index 781df1c..0000000 --- a/protocol/examples/node/package-lock.json +++ /dev/null @@ -1,3803 +0,0 @@ -{ - "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" - } - } - } -} diff --git a/protocol/examples/node/package.json b/protocol/examples/node/package.json deleted file mode 100644 index 46396fa..0000000 --- a/protocol/examples/node/package.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "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" - } -} diff --git a/protocol/examples/python/README b/protocol/examples/python/README deleted file mode 100644 index 5761fd1..0000000 --- a/protocol/examples/python/README +++ /dev/null @@ -1,15 +0,0 @@ -```sh - -python3 -m venv v - -source v/bin/activate - -pip3 install -r requirements.txt - -./gen.sh - -python3 sample01.py - -./deactivate - -``` diff --git a/protocol/examples/python/gen.sh b/protocol/examples/python/gen.sh deleted file mode 100755 index 6fbe764..0000000 --- a/protocol/examples/python/gen.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -python3 -m grpc_tools.protoc --python_out=./ --grpc_python_out=./ -I ./../../ ../../aurum.proto - diff --git a/protocol/examples/python/legacySamples/sample01.py b/protocol/examples/python/legacySamples/sample01.py deleted file mode 100644 index 28eddc4..0000000 --- a/protocol/examples/python/legacySamples/sample01.py +++ /dev/null @@ -1,122 +0,0 @@ -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() diff --git a/protocol/examples/python/legacySamples/sample02.py b/protocol/examples/python/legacySamples/sample02.py deleted file mode 100644 index 92d1d1e..0000000 --- a/protocol/examples/python/legacySamples/sample02.py +++ /dev/null @@ -1,133 +0,0 @@ -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() diff --git a/protocol/examples/python/legacySamples/sample03.py b/protocol/examples/python/legacySamples/sample03.py deleted file mode 100644 index 711874b..0000000 --- a/protocol/examples/python/legacySamples/sample03.py +++ /dev/null @@ -1,110 +0,0 @@ -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() diff --git a/protocol/examples/python/legacySamples/sample04.py b/protocol/examples/python/legacySamples/sample04.py deleted file mode 100644 index 09fc14e..0000000 --- a/protocol/examples/python/legacySamples/sample04.py +++ /dev/null @@ -1,131 +0,0 @@ -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() diff --git a/protocol/examples/python/legacySamples/sample05.py b/protocol/examples/python/legacySamples/sample05.py deleted file mode 100644 index 19e4b1b..0000000 --- a/protocol/examples/python/legacySamples/sample05.py +++ /dev/null @@ -1,149 +0,0 @@ -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() diff --git a/protocol/examples/python/mobileDemoTestTM1/mobileDemoTest.py b/protocol/examples/python/mobileDemoTestTM1/mobileDemoTest.py deleted file mode 100644 index 622aed7..0000000 --- a/protocol/examples/python/mobileDemoTestTM1/mobileDemoTest.py +++ /dev/null @@ -1,318 +0,0 @@ -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() diff --git a/protocol/examples/python/mobileDemoTestTM1/org.tizen.elm-demo-tizen-mobile-0.2-1.armv7l.rpm b/protocol/examples/python/mobileDemoTestTM1/org.tizen.elm-demo-tizen-mobile-0.2-1.armv7l.rpm deleted file mode 100644 index ab036c1..0000000 Binary files a/protocol/examples/python/mobileDemoTestTM1/org.tizen.elm-demo-tizen-mobile-0.2-1.armv7l.rpm and /dev/null differ diff --git a/protocol/examples/python/org.tizen.uicomponents.arm.tpk b/protocol/examples/python/org.tizen.uicomponents.arm.tpk deleted file mode 100644 index e6a8b01..0000000 Binary files a/protocol/examples/python/org.tizen.uicomponents.arm.tpk and /dev/null differ diff --git a/protocol/examples/python/requirements.txt b/protocol/examples/python/requirements.txt deleted file mode 100644 index 3a80b3b..0000000 --- a/protocol/examples/python/requirements.txt +++ /dev/null @@ -1,4 +0,0 @@ -grpcio==1.23.0 -grpcio-tools==1.23.0 -protobuf==3.9.1 -six==1.12.0 diff --git a/protocol/examples/python/testFeatures.py b/protocol/examples/python/testFeatures.py deleted file mode 100644 index b68b08a..0000000 --- a/protocol/examples/python/testFeatures.py +++ /dev/null @@ -1,333 +0,0 @@ -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() diff --git a/protocol/examples/python/testInternal.py b/protocol/examples/python/testInternal.py deleted file mode 100644 index 4d5548e..0000000 --- a/protocol/examples/python/testInternal.py +++ /dev/null @@ -1,86 +0,0 @@ -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() diff --git a/protocol/misc/down_grpc.sh b/protocol/misc/down_grpc.sh new file mode 100755 index 0000000..96dc0dc --- /dev/null +++ b/protocol/misc/down_grpc.sh @@ -0,0 +1,17 @@ +#!/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 diff --git a/protocol/misc/env.sh b/protocol/misc/env.sh new file mode 100644 index 0000000..c2c77e2 --- /dev/null +++ b/protocol/misc/env.sh @@ -0,0 +1,69 @@ +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 diff --git a/protocol/misc/setup_device.sh b/protocol/misc/setup_device.sh new file mode 100755 index 0000000..fea30b2 --- /dev/null +++ b/protocol/misc/setup_device.sh @@ -0,0 +1,5 @@ +#!/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 diff --git a/protocol/resources/node/README b/protocol/resources/node/README new file mode 100644 index 0000000..529ca8c --- /dev/null +++ b/protocol/resources/node/README @@ -0,0 +1,8 @@ +```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 +``` diff --git a/protocol/resources/node/client.js b/protocol/resources/node/client.js new file mode 100644 index 0000000..64f1007 --- /dev/null +++ b/protocol/resources/node/client.js @@ -0,0 +1,39 @@ + +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(); diff --git a/protocol/resources/node/gen.sh b/protocol/resources/node/gen.sh new file mode 100755 index 0000000..207f23c --- /dev/null +++ b/protocol/resources/node/gen.sh @@ -0,0 +1,6 @@ +#!/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 + diff --git a/protocol/resources/node/package-lock.json b/protocol/resources/node/package-lock.json new file mode 100644 index 0000000..781df1c --- /dev/null +++ b/protocol/resources/node/package-lock.json @@ -0,0 +1,3803 @@ +{ + "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" + } + } + } +} diff --git a/protocol/resources/node/package.json b/protocol/resources/node/package.json new file mode 100644 index 0000000..46396fa --- /dev/null +++ b/protocol/resources/node/package.json @@ -0,0 +1,13 @@ +{ + "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" + } +} diff --git a/protocol/resources/python/README b/protocol/resources/python/README new file mode 100644 index 0000000..3721f1d --- /dev/null +++ b/protocol/resources/python/README @@ -0,0 +1,17 @@ +* 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 + +``` diff --git a/protocol/resources/python/gen.sh b/protocol/resources/python/gen.sh new file mode 100755 index 0000000..6fbe764 --- /dev/null +++ b/protocol/resources/python/gen.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +python3 -m grpc_tools.protoc --python_out=./ --grpc_python_out=./ -I ./../../ ../../aurum.proto + diff --git a/protocol/resources/python/legacySamples/org.tizen.uicomponents.arm.tpk b/protocol/resources/python/legacySamples/org.tizen.uicomponents.arm.tpk new file mode 100644 index 0000000..e6a8b01 Binary files /dev/null and b/protocol/resources/python/legacySamples/org.tizen.uicomponents.arm.tpk differ diff --git a/protocol/resources/python/legacySamples/sample01.py b/protocol/resources/python/legacySamples/sample01.py new file mode 100644 index 0000000..28eddc4 --- /dev/null +++ b/protocol/resources/python/legacySamples/sample01.py @@ -0,0 +1,122 @@ +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() diff --git a/protocol/resources/python/legacySamples/sample02.py b/protocol/resources/python/legacySamples/sample02.py new file mode 100644 index 0000000..92d1d1e --- /dev/null +++ b/protocol/resources/python/legacySamples/sample02.py @@ -0,0 +1,133 @@ +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() diff --git a/protocol/resources/python/legacySamples/sample03.py b/protocol/resources/python/legacySamples/sample03.py new file mode 100644 index 0000000..711874b --- /dev/null +++ b/protocol/resources/python/legacySamples/sample03.py @@ -0,0 +1,110 @@ +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() diff --git a/protocol/resources/python/legacySamples/sample04.py b/protocol/resources/python/legacySamples/sample04.py new file mode 100644 index 0000000..09fc14e --- /dev/null +++ b/protocol/resources/python/legacySamples/sample04.py @@ -0,0 +1,131 @@ +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() diff --git a/protocol/resources/python/legacySamples/sample05.py b/protocol/resources/python/legacySamples/sample05.py new file mode 100644 index 0000000..19e4b1b --- /dev/null +++ b/protocol/resources/python/legacySamples/sample05.py @@ -0,0 +1,149 @@ +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() diff --git a/protocol/resources/python/legacySamples/testFeatures.py b/protocol/resources/python/legacySamples/testFeatures.py new file mode 100644 index 0000000..b68b08a --- /dev/null +++ b/protocol/resources/python/legacySamples/testFeatures.py @@ -0,0 +1,333 @@ +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() diff --git a/protocol/resources/python/legacySamples/testInternal.py b/protocol/resources/python/legacySamples/testInternal.py new file mode 100644 index 0000000..4d5548e --- /dev/null +++ b/protocol/resources/python/legacySamples/testInternal.py @@ -0,0 +1,86 @@ +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() diff --git a/protocol/resources/python/mobile/NUITizenGallery/NUITizenGallery.py b/protocol/resources/python/mobile/NUITizenGallery/NUITizenGallery.py new file mode 100644 index 0000000..3db24ab --- /dev/null +++ b/protocol/resources/python/mobile/NUITizenGallery/NUITizenGallery.py @@ -0,0 +1,140 @@ +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() diff --git a/protocol/resources/python/mobile/NUITizenGallery/org.tizen.example.NUITizenGallery-1.0.0.tpk b/protocol/resources/python/mobile/NUITizenGallery/org.tizen.example.NUITizenGallery-1.0.0.tpk new file mode 100644 index 0000000..d530fbd Binary files /dev/null and b/protocol/resources/python/mobile/NUITizenGallery/org.tizen.example.NUITizenGallery-1.0.0.tpk differ diff --git a/protocol/resources/python/mobile/mobileDemoTest/mobileDemoTest.py b/protocol/resources/python/mobile/mobileDemoTest/mobileDemoTest.py new file mode 100644 index 0000000..e7369a7 --- /dev/null +++ b/protocol/resources/python/mobile/mobileDemoTest/mobileDemoTest.py @@ -0,0 +1,322 @@ +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() diff --git a/protocol/resources/python/mobile/mobileDemoTest/org.tizen.elm-demo-tizen-mobile-0.2-1.armv7l.rpm b/protocol/resources/python/mobile/mobileDemoTest/org.tizen.elm-demo-tizen-mobile-0.2-1.armv7l.rpm new file mode 100644 index 0000000..ab036c1 Binary files /dev/null and b/protocol/resources/python/mobile/mobileDemoTest/org.tizen.elm-demo-tizen-mobile-0.2-1.armv7l.rpm differ diff --git a/protocol/resources/python/mobile/mobileSetup.py b/protocol/resources/python/mobile/mobileSetup.py new file mode 100644 index 0000000..ca22373 --- /dev/null +++ b/protocol/resources/python/mobile/mobileSetup.py @@ -0,0 +1,16 @@ +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) diff --git a/protocol/resources/python/requirements.txt b/protocol/resources/python/requirements.txt new file mode 100644 index 0000000..3a80b3b --- /dev/null +++ b/protocol/resources/python/requirements.txt @@ -0,0 +1,4 @@ +grpcio==1.23.0 +grpcio-tools==1.23.0 +protobuf==3.9.1 +six==1.12.0 diff --git a/protocol/resources/python/tv/NUITizenGalleryTV/NUITizenGalleryTV.py b/protocol/resources/python/tv/NUITizenGalleryTV/NUITizenGalleryTV.py new file mode 100644 index 0000000..304ffa8 --- /dev/null +++ b/protocol/resources/python/tv/NUITizenGalleryTV/NUITizenGalleryTV.py @@ -0,0 +1,142 @@ +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() diff --git a/protocol/resources/python/tv/NUITizenGalleryTV/org.tizen.example.NUITizenGallery-1.0.0.tpk b/protocol/resources/python/tv/NUITizenGalleryTV/org.tizen.example.NUITizenGallery-1.0.0.tpk new file mode 100644 index 0000000..d530fbd Binary files /dev/null and b/protocol/resources/python/tv/NUITizenGalleryTV/org.tizen.example.NUITizenGallery-1.0.0.tpk differ diff --git a/protocol/resources/python/tv/multiView.py b/protocol/resources/python/tv/multiView.py new file mode 100644 index 0000000..a6f2a9a --- /dev/null +++ b/protocol/resources/python/tv/multiView.py @@ -0,0 +1,82 @@ +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() diff --git a/protocol/resources/python/tv/searchAll.py b/protocol/resources/python/tv/searchAll.py new file mode 100644 index 0000000..4b9ccc3 --- /dev/null +++ b/protocol/resources/python/tv/searchAll.py @@ -0,0 +1,73 @@ +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() diff --git a/protocol/resources/python/tv/tvSetup.py b/protocol/resources/python/tv/tvSetup.py new file mode 100644 index 0000000..a888f48 --- /dev/null +++ b/protocol/resources/python/tv/tvSetup.py @@ -0,0 +1,22 @@ +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) diff --git a/ui_automation/python/mobile/README b/ui_automation/python/mobile/README new file mode 100644 index 0000000..cb5146a --- /dev/null +++ b/ui_automation/python/mobile/README @@ -0,0 +1,9 @@ +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 diff --git a/ui_automation/python/tv/README b/ui_automation/python/tv/README new file mode 100644 index 0000000..0048014 --- /dev/null +++ b/ui_automation/python/tv/README @@ -0,0 +1,9 @@ +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