├── bin └── index.js ├── rooms.json ├── src ├── const.js ├── utils.js ├── meta.js ├── view.js └── index.js ├── README.md ├── package.json ├── LICENSE ├── .gitignore └── pnpm-lock.yaml /bin/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require("../src/index"); 3 | -------------------------------------------------------------------------------- /rooms.json: -------------------------------------------------------------------------------- 1 | { 2 | "default": ["催学社main", "催学社 origin", "催学社a"], 3 | "main": ["催学社main"] 4 | } 5 | -------------------------------------------------------------------------------- /src/const.js: -------------------------------------------------------------------------------- 1 | const Actions = { 2 | openWeChat: "openWeChat", 3 | findInWeChat: "findInWeChat", 4 | }; 5 | 6 | module.exports = { 7 | Actions, 8 | }; 9 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | function delay(time) { 2 | return new Promise((resolve, reject) => { 3 | setTimeout(() => { 4 | resolve(); 5 | }, time); 6 | }); 7 | } 8 | 9 | 10 | module.exports = { 11 | delay 12 | } -------------------------------------------------------------------------------- /src/meta.js: -------------------------------------------------------------------------------- 1 | const { Actions } = require("./const"); 2 | 3 | const meta = { 4 | // 打开微信的快捷键 (需要修改成你自己的) 5 | // alt + i 6 | [Actions.openWeChat]: { 7 | key: "i", 8 | modified: "alt", 9 | }, 10 | // 微信中搜索的快捷键 (需要修改成你自己的) 11 | // command + f 12 | [Actions.findInWeChat]: { 13 | key: "f", 14 | modified: "command", 15 | }, 16 | }; 17 | 18 | module.exports = { 19 | meta, 20 | }; 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # autoWechatMass 2 | 3 | 使用 robotjs 实现的微信群发功能 4 | 5 | ## 使用 6 | 7 | 1. 打开 src/meta.json 配置打开 wechat 的快捷键 & 在 weChat 中搜索的快捷键 8 | 2. 在 rooms.json 里面配置要发的群名称 9 | - 允许配置多个 group 10 | - 当执行脚本的时候可以选择发送的 group 11 | 3. 执行 `pnpm run dev` 12 | - 或者安装到全局,在当前项目路径下执行 `npm link` 13 | - 之后只需要执行 `awm` 即可 14 | 15 | ## 目前存在的问题 16 | 17 | 1. 如果通过 command+f 搜出来的结果是不正确的话 ,那么就会出现误操作的问题 18 | - 我们默认会取第一个搜索出来的结果 19 | - 坐等一个 pr:vx 如何精确的搜索群名 20 | 2. 执行此脚本的时候,不可以有其他的操作的 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "awm", 3 | "version": "1.0.0", 4 | "description": "使用 robotjs 实现的微信群发功能", 5 | "main": "./bin/index.js", 6 | "bin": "./bin/index.js", 7 | "scripts": { 8 | "test": "echo \"Error: no test specified\" && exit 1", 9 | "dev": "node ./bin/index.js" 10 | }, 11 | "engines": { 12 | "node": ">16.0.0" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/cuixiaorui/autoWechatMass.git" 17 | }, 18 | "keywords": [], 19 | "author": "", 20 | "license": "ISC", 21 | "bugs": { 22 | "url": "https://github.com/cuixiaorui/autoWechatMass/issues" 23 | }, 24 | "homepage": "https://github.com/cuixiaorui/autoWechatMass#readme", 25 | "dependencies": { 26 | "inquirer": "^8.2.0", 27 | "robotjs": "^0.6.0" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/view.js: -------------------------------------------------------------------------------- 1 | const inquirer = require("inquirer"); 2 | const rooms = require("../rooms.json"); 3 | 4 | module.exports = function view() { 5 | return new Promise((resolve, reject) => { 6 | inquirer 7 | .prompt([ 8 | { 9 | name: "groupName", 10 | message: "请输入要群发的组名(默认发送 default 群组)", 11 | type: "list", 12 | choices: getChoices(), 13 | default: "default", 14 | }, 15 | { 16 | name: "sendData", 17 | type: "editor", 18 | message: "请输入你要发送的内容", 19 | validate(message) { 20 | return message.trim().length > 0; 21 | }, 22 | }, 23 | ]) 24 | .then((answers) => { 25 | resolve(answers); 26 | }); 27 | }); 28 | }; 29 | 30 | function getChoices() { 31 | const choices = []; 32 | 33 | for (const key in rooms) { 34 | choices.push(key); 35 | } 36 | 37 | return choices; 38 | } 39 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 阿崔cxr 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const roomsJson = require("../rooms.json"); 2 | const robot = require("robotjs"); 3 | const { meta } = require("./meta"); 4 | const { delay } = require("./utils"); 5 | const view = require("./view"); 6 | const { Actions } = require("./const"); 7 | 8 | function keyTapByAction(action) { 9 | const { key, modified } = meta[action]; 10 | robot.keyTap(key, modified); 11 | } 12 | 13 | (async () => { 14 | const { groupName, sendData } = await view(); 15 | 16 | keyTapByAction(Actions.openWeChat); 17 | 18 | const rooms = roomsJson[groupName]; 19 | for (const roomName of rooms) { 20 | console.log(roomName); 21 | await main(roomName); 22 | } 23 | 24 | async function main(roomName) { 25 | await delay(1000); 26 | keyTapByAction(Actions.findInWeChat); 27 | 28 | await delay(1000); 29 | robot.keyTap("enter"); 30 | 31 | await delay(1000); 32 | robot.typeString(roomName); 33 | 34 | // 现在进入群了 35 | await delay(2000); 36 | robot.keyTap("enter"); 37 | 38 | // 输入文字 39 | await delay(1000); 40 | robot.typeString(sendData); 41 | 42 | // 发送消息 43 | await delay(1000); 44 | robot.keyTap("enter"); 45 | } 46 | })(); 47 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | rooms.json 2 | # Logs 3 | logs 4 | *.log 5 | npm-debug.log* 6 | yarn-debug.log* 7 | yarn-error.log* 8 | lerna-debug.log* 9 | 10 | # Diagnostic reports (https://nodejs.org/api/report.html) 11 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 12 | 13 | # Runtime data 14 | pids 15 | *.pid 16 | *.seed 17 | *.pid.lock 18 | 19 | # Directory for instrumented libs generated by jscoverage/JSCover 20 | lib-cov 21 | 22 | # Coverage directory used by tools like istanbul 23 | coverage 24 | *.lcov 25 | 26 | # nyc test coverage 27 | .nyc_output 28 | 29 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 30 | .grunt 31 | 32 | # Bower dependency directory (https://bower.io/) 33 | bower_components 34 | 35 | # node-waf configuration 36 | .lock-wscript 37 | 38 | # Compiled binary addons (https://nodejs.org/api/addons.html) 39 | build/Release 40 | 41 | # Dependency directories 42 | node_modules/ 43 | jspm_packages/ 44 | 45 | # TypeScript v1 declaration files 46 | typings/ 47 | 48 | # TypeScript cache 49 | *.tsbuildinfo 50 | 51 | # Optional npm cache directory 52 | .npm 53 | 54 | # Optional eslint cache 55 | .eslintcache 56 | 57 | # Microbundle cache 58 | .rpt2_cache/ 59 | .rts2_cache_cjs/ 60 | .rts2_cache_es/ 61 | .rts2_cache_umd/ 62 | 63 | # Optional REPL history 64 | .node_repl_history 65 | 66 | # Output of 'npm pack' 67 | *.tgz 68 | 69 | # Yarn Integrity file 70 | .yarn-integrity 71 | 72 | # dotenv environment variables file 73 | .env 74 | .env.test 75 | 76 | # parcel-bundler cache (https://parceljs.org/) 77 | .cache 78 | 79 | # Next.js build output 80 | .next 81 | 82 | # Nuxt.js build / generate output 83 | .nuxt 84 | dist 85 | 86 | # Gatsby files 87 | .cache/ 88 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 89 | # https://nextjs.org/blog/next-9-1#public-directory-support 90 | # public 91 | 92 | # vuepress build output 93 | .vuepress/dist 94 | 95 | # Serverless directories 96 | .serverless/ 97 | 98 | # FuseBox cache 99 | .fusebox/ 100 | 101 | # DynamoDB Local files 102 | .dynamodb/ 103 | 104 | # TernJS port file 105 | .tern-port 106 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.3 2 | 3 | specifiers: 4 | inquirer: ^8.2.0 5 | robotjs: ^0.6.0 6 | 7 | dependencies: 8 | inquirer: 8.2.0 9 | robotjs: 0.6.0 10 | 11 | packages: 12 | 13 | /ansi-escapes/4.3.2: 14 | resolution: {integrity: sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=, tarball: ansi-escapes/download/ansi-escapes-4.3.2.tgz} 15 | engines: {node: '>=8'} 16 | dependencies: 17 | type-fest: 0.21.3 18 | dev: false 19 | 20 | /ansi-regex/2.1.1: 21 | resolution: {integrity: sha1-w7M6te42DYbg5ijwRorn7yfWVN8=, tarball: ansi-regex/download/ansi-regex-2.1.1.tgz} 22 | engines: {node: '>=0.10.0'} 23 | dev: false 24 | 25 | /ansi-regex/5.0.1: 26 | resolution: {integrity: sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=, tarball: ansi-regex/download/ansi-regex-5.0.1.tgz} 27 | engines: {node: '>=8'} 28 | dev: false 29 | 30 | /ansi-styles/4.3.0: 31 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, tarball: ansi-styles/download/ansi-styles-4.3.0.tgz} 32 | engines: {node: '>=8'} 33 | dependencies: 34 | color-convert: 2.0.1 35 | dev: false 36 | 37 | /aproba/1.2.0: 38 | resolution: {integrity: sha1-aALmJk79GMeQobDVF/DyYnvyyUo=, tarball: aproba/download/aproba-1.2.0.tgz} 39 | dev: false 40 | 41 | /are-we-there-yet/1.1.7: 42 | resolution: {integrity: sha1-sVR0qTKtq0/4pQ2a36fk6SbyEUY=, tarball: are-we-there-yet/download/are-we-there-yet-1.1.7.tgz} 43 | dependencies: 44 | delegates: 1.0.0 45 | readable-stream: 2.3.7 46 | dev: false 47 | 48 | /base64-js/1.5.1: 49 | resolution: {integrity: sha1-GxtEAWClv3rUC2UPCVljSBkDkwo=, tarball: base64-js/download/base64-js-1.5.1.tgz} 50 | dev: false 51 | 52 | /bl/4.1.0: 53 | resolution: {integrity: sha1-RRU1JkGCvsL7vIOmKrmM8R2fezo=, tarball: bl/download/bl-4.1.0.tgz} 54 | dependencies: 55 | buffer: 5.7.1 56 | inherits: 2.0.4 57 | readable-stream: 3.6.0 58 | dev: false 59 | 60 | /buffer/5.7.1: 61 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==, tarball: buffer/download/buffer-5.7.1.tgz} 62 | dependencies: 63 | base64-js: 1.5.1 64 | ieee754: 1.2.1 65 | dev: false 66 | 67 | /chalk/4.1.2: 68 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, tarball: chalk/download/chalk-4.1.2.tgz} 69 | engines: {node: '>=10'} 70 | dependencies: 71 | ansi-styles: 4.3.0 72 | supports-color: 7.2.0 73 | dev: false 74 | 75 | /chardet/0.7.0: 76 | resolution: {integrity: sha1-kAlISfCTfy7twkJdDSip5fDLrZ4=, tarball: chardet/download/chardet-0.7.0.tgz} 77 | dev: false 78 | 79 | /chownr/1.1.4: 80 | resolution: {integrity: sha1-b8nXtC0ypYNZYzdmbn0ICE2izGs=, tarball: chownr/download/chownr-1.1.4.tgz} 81 | dev: false 82 | 83 | /cli-cursor/3.1.0: 84 | resolution: {integrity: sha1-JkMFp65JDR0Dvwybp8kl0XU68wc=, tarball: cli-cursor/download/cli-cursor-3.1.0.tgz} 85 | engines: {node: '>=8'} 86 | dependencies: 87 | restore-cursor: 3.1.0 88 | dev: false 89 | 90 | /cli-spinners/2.6.1: 91 | resolution: {integrity: sha1-rclU6+KBw3pjGb+kAebdJIj/tw0=, tarball: cli-spinners/download/cli-spinners-2.6.1.tgz} 92 | engines: {node: '>=6'} 93 | dev: false 94 | 95 | /cli-width/3.0.0: 96 | resolution: {integrity: sha1-ovSEN6LKqaIkNueUvwceyeYc7fY=, tarball: cli-width/download/cli-width-3.0.0.tgz} 97 | engines: {node: '>= 10'} 98 | dev: false 99 | 100 | /clone/1.0.4: 101 | resolution: {integrity: sha1-2jCcwmPfFZlMaIypAheco8fNfH4=, tarball: clone/download/clone-1.0.4.tgz} 102 | engines: {node: '>=0.8'} 103 | dev: false 104 | 105 | /code-point-at/1.1.0: 106 | resolution: {integrity: sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=, tarball: code-point-at/download/code-point-at-1.1.0.tgz} 107 | engines: {node: '>=0.10.0'} 108 | dev: false 109 | 110 | /color-convert/2.0.1: 111 | resolution: {integrity: sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=, tarball: color-convert/download/color-convert-2.0.1.tgz} 112 | engines: {node: '>=7.0.0'} 113 | dependencies: 114 | color-name: 1.1.4 115 | dev: false 116 | 117 | /color-name/1.1.4: 118 | resolution: {integrity: sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=, tarball: color-name/download/color-name-1.1.4.tgz} 119 | dev: false 120 | 121 | /console-control-strings/1.1.0: 122 | resolution: {integrity: sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=, tarball: console-control-strings/download/console-control-strings-1.1.0.tgz} 123 | dev: false 124 | 125 | /core-util-is/1.0.3: 126 | resolution: {integrity: sha1-pgQtNjTCsn6TKPg3uWX6yDgI24U=, tarball: core-util-is/download/core-util-is-1.0.3.tgz} 127 | dev: false 128 | 129 | /decompress-response/4.2.1: 130 | resolution: {integrity: sha1-QUAjzHowLaJc4uyC0NUjjMr9iYY=, tarball: decompress-response/download/decompress-response-4.2.1.tgz} 131 | engines: {node: '>=8'} 132 | dependencies: 133 | mimic-response: 2.1.0 134 | dev: false 135 | 136 | /deep-extend/0.6.0: 137 | resolution: {integrity: sha1-xPp8lUBKF6nD6Mp+FTcxK3NjMKw=, tarball: deep-extend/download/deep-extend-0.6.0.tgz} 138 | engines: {node: '>=4.0.0'} 139 | dev: false 140 | 141 | /defaults/1.0.3: 142 | resolution: {integrity: sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=, tarball: defaults/download/defaults-1.0.3.tgz} 143 | dependencies: 144 | clone: 1.0.4 145 | dev: false 146 | 147 | /delegates/1.0.0: 148 | resolution: {integrity: sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=, tarball: delegates/download/delegates-1.0.0.tgz} 149 | dev: false 150 | 151 | /detect-libc/1.0.3: 152 | resolution: {integrity: sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=, tarball: detect-libc/download/detect-libc-1.0.3.tgz} 153 | engines: {node: '>=0.10'} 154 | hasBin: true 155 | dev: false 156 | 157 | /emoji-regex/8.0.0: 158 | resolution: {integrity: sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=, tarball: emoji-regex/download/emoji-regex-8.0.0.tgz} 159 | dev: false 160 | 161 | /end-of-stream/1.4.4: 162 | resolution: {integrity: sha1-WuZKX0UFe682JuwU2gyl5LJDHrA=, tarball: end-of-stream/download/end-of-stream-1.4.4.tgz} 163 | dependencies: 164 | once: 1.4.0 165 | dev: false 166 | 167 | /escape-string-regexp/1.0.5: 168 | resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=, tarball: escape-string-regexp/download/escape-string-regexp-1.0.5.tgz} 169 | engines: {node: '>=0.8.0'} 170 | dev: false 171 | 172 | /expand-template/2.0.3: 173 | resolution: {integrity: sha1-bhSz/O4POmNA7LV9LokYaSBSpHw=, tarball: expand-template/download/expand-template-2.0.3.tgz} 174 | engines: {node: '>=6'} 175 | dev: false 176 | 177 | /external-editor/3.1.0: 178 | resolution: {integrity: sha1-ywP3QL764D6k0oPK7SdBqD8zVJU=, tarball: external-editor/download/external-editor-3.1.0.tgz} 179 | engines: {node: '>=4'} 180 | dependencies: 181 | chardet: 0.7.0 182 | iconv-lite: 0.4.24 183 | tmp: 0.0.33 184 | dev: false 185 | 186 | /figures/3.2.0: 187 | resolution: {integrity: sha1-YlwYvSk8YE3EqN2y/r8MiDQXRq8=, tarball: figures/download/figures-3.2.0.tgz} 188 | engines: {node: '>=8'} 189 | dependencies: 190 | escape-string-regexp: 1.0.5 191 | dev: false 192 | 193 | /fs-constants/1.0.0: 194 | resolution: {integrity: sha1-a+Dem+mYzhavivwkSXue6bfM2a0=, tarball: fs-constants/download/fs-constants-1.0.0.tgz} 195 | dev: false 196 | 197 | /gauge/2.7.4: 198 | resolution: {integrity: sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=, tarball: gauge/download/gauge-2.7.4.tgz} 199 | dependencies: 200 | aproba: 1.2.0 201 | console-control-strings: 1.1.0 202 | has-unicode: 2.0.1 203 | object-assign: 4.1.1 204 | signal-exit: 3.0.6 205 | string-width: 1.0.2 206 | strip-ansi: 3.0.1 207 | wide-align: 1.1.5 208 | dev: false 209 | 210 | /github-from-package/0.0.0: 211 | resolution: {integrity: sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=, tarball: github-from-package/download/github-from-package-0.0.0.tgz} 212 | dev: false 213 | 214 | /has-flag/4.0.0: 215 | resolution: {integrity: sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=, tarball: has-flag/download/has-flag-4.0.0.tgz} 216 | engines: {node: '>=8'} 217 | dev: false 218 | 219 | /has-unicode/2.0.1: 220 | resolution: {integrity: sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=, tarball: has-unicode/download/has-unicode-2.0.1.tgz} 221 | dev: false 222 | 223 | /iconv-lite/0.4.24: 224 | resolution: {integrity: sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=, tarball: iconv-lite/download/iconv-lite-0.4.24.tgz} 225 | engines: {node: '>=0.10.0'} 226 | dependencies: 227 | safer-buffer: 2.1.2 228 | dev: false 229 | 230 | /ieee754/1.2.1: 231 | resolution: {integrity: sha1-jrehCmP/8l0VpXsAFYbRd9Gw01I=, tarball: ieee754/download/ieee754-1.2.1.tgz} 232 | dev: false 233 | 234 | /inherits/2.0.4: 235 | resolution: {integrity: sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=, tarball: inherits/download/inherits-2.0.4.tgz} 236 | dev: false 237 | 238 | /ini/1.3.8: 239 | resolution: {integrity: sha1-op2kJbSIBvNHZ6Tvzjlyaa8oQyw=, tarball: ini/download/ini-1.3.8.tgz} 240 | dev: false 241 | 242 | /inquirer/8.2.0: 243 | resolution: {integrity: sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==, tarball: inquirer/download/inquirer-8.2.0.tgz} 244 | engines: {node: '>=8.0.0'} 245 | dependencies: 246 | ansi-escapes: 4.3.2 247 | chalk: 4.1.2 248 | cli-cursor: 3.1.0 249 | cli-width: 3.0.0 250 | external-editor: 3.1.0 251 | figures: 3.2.0 252 | lodash: 4.17.21 253 | mute-stream: 0.0.8 254 | ora: 5.4.1 255 | run-async: 2.4.1 256 | rxjs: 7.5.2 257 | string-width: 4.2.3 258 | strip-ansi: 6.0.1 259 | through: 2.3.8 260 | dev: false 261 | 262 | /is-fullwidth-code-point/1.0.0: 263 | resolution: {integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs=, tarball: is-fullwidth-code-point/download/is-fullwidth-code-point-1.0.0.tgz} 264 | engines: {node: '>=0.10.0'} 265 | dependencies: 266 | number-is-nan: 1.0.1 267 | dev: false 268 | 269 | /is-fullwidth-code-point/3.0.0: 270 | resolution: {integrity: sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=, tarball: is-fullwidth-code-point/download/is-fullwidth-code-point-3.0.0.tgz} 271 | engines: {node: '>=8'} 272 | dev: false 273 | 274 | /is-interactive/1.0.0: 275 | resolution: {integrity: sha1-zqbmrlyHCnsKAAQHC3tYfgJSkS4=, tarball: is-interactive/download/is-interactive-1.0.0.tgz} 276 | engines: {node: '>=8'} 277 | dev: false 278 | 279 | /is-unicode-supported/0.1.0: 280 | resolution: {integrity: sha1-PybHaoCVk7Ur+i7LVxDtJ3m1Iqc=, tarball: is-unicode-supported/download/is-unicode-supported-0.1.0.tgz} 281 | engines: {node: '>=10'} 282 | dev: false 283 | 284 | /isarray/1.0.0: 285 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==, tarball: isarray/download/isarray-1.0.0.tgz} 286 | dev: false 287 | 288 | /lodash/4.17.21: 289 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, tarball: lodash/download/lodash-4.17.21.tgz} 290 | dev: false 291 | 292 | /log-symbols/4.1.0: 293 | resolution: {integrity: sha1-P727lbRoOsn8eFER55LlWNSr1QM=, tarball: log-symbols/download/log-symbols-4.1.0.tgz} 294 | engines: {node: '>=10'} 295 | dependencies: 296 | chalk: 4.1.2 297 | is-unicode-supported: 0.1.0 298 | dev: false 299 | 300 | /mimic-fn/2.1.0: 301 | resolution: {integrity: sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=, tarball: mimic-fn/download/mimic-fn-2.1.0.tgz} 302 | engines: {node: '>=6'} 303 | dev: false 304 | 305 | /mimic-response/2.1.0: 306 | resolution: {integrity: sha1-0Tdj019hPQnsN+uzC6wEacDuj0M=, tarball: mimic-response/download/mimic-response-2.1.0.tgz} 307 | engines: {node: '>=8'} 308 | dev: false 309 | 310 | /minimist/1.2.5: 311 | resolution: {integrity: sha1-Z9ZgFLZqaoqqDAg8X9WN9OTpdgI=, tarball: minimist/download/minimist-1.2.5.tgz} 312 | dev: false 313 | 314 | /mkdirp-classic/0.5.3: 315 | resolution: {integrity: sha1-+hDJEVzG2IZb4iG6R+6b7XhgERM=, tarball: mkdirp-classic/download/mkdirp-classic-0.5.3.tgz} 316 | dev: false 317 | 318 | /mute-stream/0.0.8: 319 | resolution: {integrity: sha1-FjDEKyJR/4HiooPelqVJfqkuXg0=, tarball: mute-stream/download/mute-stream-0.0.8.tgz} 320 | dev: false 321 | 322 | /nan/2.15.0: 323 | resolution: {integrity: sha1-PzSkc/8Y4VwbVia2KQO1rW5mX+4=, tarball: nan/download/nan-2.15.0.tgz} 324 | dev: false 325 | 326 | /napi-build-utils/1.0.2: 327 | resolution: {integrity: sha1-sf3cCyxG44Cgt6dvmE3UfEGhOAY=, tarball: napi-build-utils/download/napi-build-utils-1.0.2.tgz} 328 | dev: false 329 | 330 | /node-abi/2.30.1: 331 | resolution: {integrity: sha1-xDfUsf4OKFqvKQ1FtF1Nev7axM8=, tarball: node-abi/download/node-abi-2.30.1.tgz} 332 | dependencies: 333 | semver: 5.7.1 334 | dev: false 335 | 336 | /noop-logger/0.1.1: 337 | resolution: {integrity: sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=, tarball: noop-logger/download/noop-logger-0.1.1.tgz} 338 | dev: false 339 | 340 | /npmlog/4.1.2: 341 | resolution: {integrity: sha1-CKfyqL9zRgR3mp76StXMcXq7lUs=, tarball: npmlog/download/npmlog-4.1.2.tgz} 342 | dependencies: 343 | are-we-there-yet: 1.1.7 344 | console-control-strings: 1.1.0 345 | gauge: 2.7.4 346 | set-blocking: 2.0.0 347 | dev: false 348 | 349 | /number-is-nan/1.0.1: 350 | resolution: {integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=, tarball: number-is-nan/download/number-is-nan-1.0.1.tgz} 351 | engines: {node: '>=0.10.0'} 352 | dev: false 353 | 354 | /object-assign/4.1.1: 355 | resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=, tarball: object-assign/download/object-assign-4.1.1.tgz} 356 | engines: {node: '>=0.10.0'} 357 | dev: false 358 | 359 | /once/1.4.0: 360 | resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=, tarball: once/download/once-1.4.0.tgz} 361 | dependencies: 362 | wrappy: 1.0.2 363 | dev: false 364 | 365 | /onetime/5.1.2: 366 | resolution: {integrity: sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=, tarball: onetime/download/onetime-5.1.2.tgz} 367 | engines: {node: '>=6'} 368 | dependencies: 369 | mimic-fn: 2.1.0 370 | dev: false 371 | 372 | /ora/5.4.1: 373 | resolution: {integrity: sha1-GyZ4Qmr0rEpQkAjl5KyemVnbnhg=, tarball: ora/download/ora-5.4.1.tgz} 374 | engines: {node: '>=10'} 375 | dependencies: 376 | bl: 4.1.0 377 | chalk: 4.1.2 378 | cli-cursor: 3.1.0 379 | cli-spinners: 2.6.1 380 | is-interactive: 1.0.0 381 | is-unicode-supported: 0.1.0 382 | log-symbols: 4.1.0 383 | strip-ansi: 6.0.1 384 | wcwidth: 1.0.1 385 | dev: false 386 | 387 | /os-tmpdir/1.0.2: 388 | resolution: {integrity: sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=, tarball: os-tmpdir/download/os-tmpdir-1.0.2.tgz} 389 | engines: {node: '>=0.10.0'} 390 | dev: false 391 | 392 | /prebuild-install/5.3.6: 393 | resolution: {integrity: sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==, tarball: prebuild-install/download/prebuild-install-5.3.6.tgz} 394 | engines: {node: '>=6'} 395 | hasBin: true 396 | dependencies: 397 | detect-libc: 1.0.3 398 | expand-template: 2.0.3 399 | github-from-package: 0.0.0 400 | minimist: 1.2.5 401 | mkdirp-classic: 0.5.3 402 | napi-build-utils: 1.0.2 403 | node-abi: 2.30.1 404 | noop-logger: 0.1.1 405 | npmlog: 4.1.2 406 | pump: 3.0.0 407 | rc: 1.2.8 408 | simple-get: 3.1.0 409 | tar-fs: 2.1.1 410 | tunnel-agent: 0.6.0 411 | which-pm-runs: 1.0.0 412 | dev: false 413 | 414 | /process-nextick-args/2.0.1: 415 | resolution: {integrity: sha1-eCDZsWEgzFXKmud5JoCufbptf+I=, tarball: process-nextick-args/download/process-nextick-args-2.0.1.tgz} 416 | dev: false 417 | 418 | /pump/3.0.0: 419 | resolution: {integrity: sha1-tKIRaBW94vTh6mAjVOjHVWUQemQ=, tarball: pump/download/pump-3.0.0.tgz} 420 | dependencies: 421 | end-of-stream: 1.4.4 422 | once: 1.4.0 423 | dev: false 424 | 425 | /rc/1.2.8: 426 | resolution: {integrity: sha1-zZJL9SAKB1uDwYjNa54hG3/A0+0=, tarball: rc/download/rc-1.2.8.tgz} 427 | hasBin: true 428 | dependencies: 429 | deep-extend: 0.6.0 430 | ini: 1.3.8 431 | minimist: 1.2.5 432 | strip-json-comments: 2.0.1 433 | dev: false 434 | 435 | /readable-stream/2.3.7: 436 | resolution: {integrity: sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=, tarball: readable-stream/download/readable-stream-2.3.7.tgz} 437 | dependencies: 438 | core-util-is: 1.0.3 439 | inherits: 2.0.4 440 | isarray: 1.0.0 441 | process-nextick-args: 2.0.1 442 | safe-buffer: 5.1.2 443 | string_decoder: 1.1.1 444 | util-deprecate: 1.0.2 445 | dev: false 446 | 447 | /readable-stream/3.6.0: 448 | resolution: {integrity: sha1-M3u9o63AcGvT4CRCaihtS0sskZg=, tarball: readable-stream/download/readable-stream-3.6.0.tgz} 449 | engines: {node: '>= 6'} 450 | dependencies: 451 | inherits: 2.0.4 452 | string_decoder: 1.3.0 453 | util-deprecate: 1.0.2 454 | dev: false 455 | 456 | /restore-cursor/3.1.0: 457 | resolution: {integrity: sha1-OfZ8VLOnpYzqUjbZXPADQjljH34=, tarball: restore-cursor/download/restore-cursor-3.1.0.tgz} 458 | engines: {node: '>=8'} 459 | dependencies: 460 | onetime: 5.1.2 461 | signal-exit: 3.0.6 462 | dev: false 463 | 464 | /robotjs/0.6.0: 465 | resolution: {integrity: sha1-jR9jIh9bGNxJbHdo91JhBDiR9ko=, tarball: robotjs/download/robotjs-0.6.0.tgz} 466 | requiresBuild: true 467 | dependencies: 468 | nan: 2.15.0 469 | node-abi: 2.30.1 470 | prebuild-install: 5.3.6 471 | dev: false 472 | 473 | /run-async/2.4.1: 474 | resolution: {integrity: sha1-hEDsz5nqPnC9QJ1JqriOEMGJpFU=, tarball: run-async/download/run-async-2.4.1.tgz} 475 | engines: {node: '>=0.12.0'} 476 | dev: false 477 | 478 | /rxjs/7.5.2: 479 | resolution: {integrity: sha512-PwDt186XaL3QN5qXj/H9DGyHhP3/RYYgZZwqBv9Tv8rsAaiwFH1IsJJlcgD37J7UW5a6O67qX0KWKS3/pu0m4w==, tarball: rxjs/download/rxjs-7.5.2.tgz} 480 | dependencies: 481 | tslib: 2.3.1 482 | dev: false 483 | 484 | /safe-buffer/5.1.2: 485 | resolution: {integrity: sha1-mR7GnSluAxN0fVm9/St0XDX4go0=, tarball: safe-buffer/download/safe-buffer-5.1.2.tgz} 486 | dev: false 487 | 488 | /safe-buffer/5.2.1: 489 | resolution: {integrity: sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=, tarball: safe-buffer/download/safe-buffer-5.2.1.tgz} 490 | dev: false 491 | 492 | /safer-buffer/2.1.2: 493 | resolution: {integrity: sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=, tarball: safer-buffer/download/safer-buffer-2.1.2.tgz} 494 | dev: false 495 | 496 | /semver/5.7.1: 497 | resolution: {integrity: sha1-qVT5Ma66UI0we78Gnv8MAclhFvc=, tarball: semver/download/semver-5.7.1.tgz?cache=0&sync_timestamp=1634019726791&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fsemver%2Fdownload%2Fsemver-5.7.1.tgz} 498 | hasBin: true 499 | dev: false 500 | 501 | /set-blocking/2.0.0: 502 | resolution: {integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc=, tarball: set-blocking/download/set-blocking-2.0.0.tgz} 503 | dev: false 504 | 505 | /signal-exit/3.0.6: 506 | resolution: {integrity: sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==, tarball: signal-exit/download/signal-exit-3.0.6.tgz} 507 | dev: false 508 | 509 | /simple-concat/1.0.1: 510 | resolution: {integrity: sha1-9Gl2CCujXCJj8cirXt/ibEHJVS8=, tarball: simple-concat/download/simple-concat-1.0.1.tgz} 511 | dev: false 512 | 513 | /simple-get/3.1.0: 514 | resolution: {integrity: sha1-tFvgYkNeUNFZVAtXYgLO7EC5xrM=, tarball: simple-get/download/simple-get-3.1.0.tgz} 515 | dependencies: 516 | decompress-response: 4.2.1 517 | once: 1.4.0 518 | simple-concat: 1.0.1 519 | dev: false 520 | 521 | /string-width/1.0.2: 522 | resolution: {integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=, tarball: string-width/download/string-width-1.0.2.tgz} 523 | engines: {node: '>=0.10.0'} 524 | dependencies: 525 | code-point-at: 1.1.0 526 | is-fullwidth-code-point: 1.0.0 527 | strip-ansi: 3.0.1 528 | dev: false 529 | 530 | /string-width/4.2.3: 531 | resolution: {integrity: sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=, tarball: string-width/download/string-width-4.2.3.tgz} 532 | engines: {node: '>=8'} 533 | dependencies: 534 | emoji-regex: 8.0.0 535 | is-fullwidth-code-point: 3.0.0 536 | strip-ansi: 6.0.1 537 | dev: false 538 | 539 | /string_decoder/1.1.1: 540 | resolution: {integrity: sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=, tarball: string_decoder/download/string_decoder-1.1.1.tgz} 541 | dependencies: 542 | safe-buffer: 5.1.2 543 | dev: false 544 | 545 | /string_decoder/1.3.0: 546 | resolution: {integrity: sha1-QvEUWUpGzxqOMLCoT1bHjD7awh4=, tarball: string_decoder/download/string_decoder-1.3.0.tgz} 547 | dependencies: 548 | safe-buffer: 5.2.1 549 | dev: false 550 | 551 | /strip-ansi/3.0.1: 552 | resolution: {integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=, tarball: strip-ansi/download/strip-ansi-3.0.1.tgz} 553 | engines: {node: '>=0.10.0'} 554 | dependencies: 555 | ansi-regex: 2.1.1 556 | dev: false 557 | 558 | /strip-ansi/6.0.1: 559 | resolution: {integrity: sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=, tarball: strip-ansi/download/strip-ansi-6.0.1.tgz} 560 | engines: {node: '>=8'} 561 | dependencies: 562 | ansi-regex: 5.0.1 563 | dev: false 564 | 565 | /strip-json-comments/2.0.1: 566 | resolution: {integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo=, tarball: strip-json-comments/download/strip-json-comments-2.0.1.tgz} 567 | engines: {node: '>=0.10.0'} 568 | dev: false 569 | 570 | /supports-color/7.2.0: 571 | resolution: {integrity: sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=, tarball: supports-color/download/supports-color-7.2.0.tgz} 572 | engines: {node: '>=8'} 573 | dependencies: 574 | has-flag: 4.0.0 575 | dev: false 576 | 577 | /tar-fs/2.1.1: 578 | resolution: {integrity: sha1-SJoVq4Xx8L76uzcLfeT561y+h4Q=, tarball: tar-fs/download/tar-fs-2.1.1.tgz} 579 | dependencies: 580 | chownr: 1.1.4 581 | mkdirp-classic: 0.5.3 582 | pump: 3.0.0 583 | tar-stream: 2.2.0 584 | dev: false 585 | 586 | /tar-stream/2.2.0: 587 | resolution: {integrity: sha1-rK2EwoQTawYNw/qmRHSqmuvXcoc=, tarball: tar-stream/download/tar-stream-2.2.0.tgz?cache=0&sync_timestamp=1634048734166&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Ftar-stream%2Fdownload%2Ftar-stream-2.2.0.tgz} 588 | engines: {node: '>=6'} 589 | dependencies: 590 | bl: 4.1.0 591 | end-of-stream: 1.4.4 592 | fs-constants: 1.0.0 593 | inherits: 2.0.4 594 | readable-stream: 3.6.0 595 | dev: false 596 | 597 | /through/2.3.8: 598 | resolution: {integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=, tarball: through/download/through-2.3.8.tgz} 599 | dev: false 600 | 601 | /tmp/0.0.33: 602 | resolution: {integrity: sha1-bTQzWIl2jSGyvNoKonfO07G/rfk=, tarball: tmp/download/tmp-0.0.33.tgz} 603 | engines: {node: '>=0.6.0'} 604 | dependencies: 605 | os-tmpdir: 1.0.2 606 | dev: false 607 | 608 | /tslib/2.3.1: 609 | resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==, tarball: tslib/download/tslib-2.3.1.tgz} 610 | dev: false 611 | 612 | /tunnel-agent/0.6.0: 613 | resolution: {integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=, tarball: tunnel-agent/download/tunnel-agent-0.6.0.tgz} 614 | dependencies: 615 | safe-buffer: 5.2.1 616 | dev: false 617 | 618 | /type-fest/0.21.3: 619 | resolution: {integrity: sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=, tarball: type-fest/download/type-fest-0.21.3.tgz} 620 | engines: {node: '>=10'} 621 | dev: false 622 | 623 | /util-deprecate/1.0.2: 624 | resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=, tarball: util-deprecate/download/util-deprecate-1.0.2.tgz} 625 | dev: false 626 | 627 | /wcwidth/1.0.1: 628 | resolution: {integrity: sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=, tarball: wcwidth/download/wcwidth-1.0.1.tgz} 629 | dependencies: 630 | defaults: 1.0.3 631 | dev: false 632 | 633 | /which-pm-runs/1.0.0: 634 | resolution: {integrity: sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=, tarball: which-pm-runs/download/which-pm-runs-1.0.0.tgz} 635 | dev: false 636 | 637 | /wide-align/1.1.5: 638 | resolution: {integrity: sha1-3x1MIGhUNp7PPJpImPGyP72dFdM=, tarball: wide-align/download/wide-align-1.1.5.tgz} 639 | dependencies: 640 | string-width: 1.0.2 641 | dev: false 642 | 643 | /wrappy/1.0.2: 644 | resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=, tarball: wrappy/download/wrappy-1.0.2.tgz} 645 | dev: false 646 | --------------------------------------------------------------------------------