├── .editorconfig ├── .eslintrc.json ├── .gitignore ├── LICENSE.txt ├── README.md ├── bin └── opener-bin.js ├── lib └── opener.js ├── package-lock.json └── package.json /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | end_of_line = lf 5 | insert_final_newline = true 6 | trim_trailing_whitespace = true 7 | charset = utf-8 8 | indent_style = space 9 | indent_size = 4 10 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "env": { 4 | "node": true, 5 | "es6": false 6 | }, 7 | "parserOptions": { 8 | "ecmaVersion": 5 9 | }, 10 | "rules": { 11 | // Possible errors 12 | "for-direction": "error", 13 | "getter-return": "error", 14 | "no-await-in-loop": "error", 15 | "no-compare-neg-zero": "error", 16 | "no-cond-assign": ["error", "except-parens"], 17 | "no-console": "error", 18 | "no-constant-condition": ["error", { "checkLoops": false }], 19 | "no-control-regex": "off", 20 | "no-debugger": "error", 21 | "no-dupe-args": "error", 22 | "no-dupe-keys": "error", 23 | "no-duplicate-case": "error", 24 | "no-empty": "error", 25 | "no-empty-character-class": "error", 26 | "no-ex-assign": "error", 27 | "no-extra-boolean-cast": "error", 28 | "no-extra-parens": ["error", "all", { "conditionalAssign": false, "nestedBinaryExpressions": false, "returnAssign": false }], 29 | "no-extra-semi": "error", 30 | "no-func-assign": "error", 31 | "no-inner-declarations": "off", 32 | "no-invalid-regexp": "error", 33 | "no-irregular-whitespace": "error", 34 | "no-obj-calls": "error", 35 | "no-prototype-builtins": "error", 36 | "no-regex-spaces": "error", 37 | "no-sparse-arrays": "error", 38 | "no-template-curly-in-string": "error", 39 | "no-unexpected-multiline": "error", 40 | "no-unreachable": "error", 41 | "no-unsafe-finally": "off", 42 | "no-unsafe-negation": "error", 43 | "use-isnan": "error", 44 | "valid-jsdoc": "off", 45 | "valid-typeof": "error", 46 | 47 | // Best practices 48 | "accessor-pairs": "error", 49 | "array-callback-return": "error", 50 | "block-scoped-var": "off", 51 | "class-methods-use-this": "off", 52 | "complexity": "off", 53 | "consistent-return": "error", 54 | "curly": ["error", "all"], 55 | "default-case": "off", 56 | "dot-location": ["error", "property"], 57 | "dot-notation": "error", 58 | "eqeqeq": "error", 59 | "guard-for-in": "off", 60 | "no-alert": "error", 61 | "no-caller": "error", 62 | "no-case-declarations": "error", 63 | "no-div-regex": "off", 64 | "no-else-return": "error", 65 | "no-empty-function": "off", 66 | "no-empty-pattern": "error", 67 | "no-eq-null": "error", 68 | "no-eval": "error", 69 | "no-extend-native": "error", 70 | "no-extra-bind": "error", 71 | "no-extra-label": "error", 72 | "no-fallthrough": "error", 73 | "no-floating-decimal": "error", 74 | "no-global-assign": "error", 75 | "no-implicit-coercion": "error", 76 | "no-implicit-globals": "error", 77 | "no-implied-eval": "off", 78 | "no-invalid-this": "off", // meh 79 | "no-iterator": "error", 80 | "no-labels": ["error", { "allowLoop": true }], 81 | "no-lone-blocks": "error", 82 | "no-loop-func": "off", 83 | "no-magic-numbers": "off", 84 | "no-multi-spaces": "error", 85 | "no-multi-str": "error", 86 | "no-new": "error", 87 | "no-new-func": "error", 88 | "no-new-wrappers": "error", 89 | "no-octal": "error", 90 | "no-octal-escape": "error", 91 | "no-param-reassign": "off", 92 | "no-process-env": "error", 93 | "no-proto": "error", 94 | "no-redeclare": "error", 95 | "no-restricted-properties": "off", 96 | "no-return-assign": ["error", "except-parens"], 97 | "no-return-await": "error", 98 | "no-script-url": "off", 99 | "no-self-assign": "error", 100 | "no-self-compare": "error", 101 | "no-sequences": "error", 102 | "no-throw-literal": "error", 103 | "no-unmodified-loop-condition": "error", 104 | "no-unused-expressions": "error", 105 | "no-unused-labels": "error", 106 | "no-useless-call": "error", 107 | "no-useless-concat": "error", 108 | "no-useless-escape": "error", 109 | "no-useless-return": "error", 110 | "no-void": "error", 111 | "no-warning-comments": "off", 112 | "no-with": "error", 113 | "prefer-promise-reject-errors": "error", 114 | "radix": ["error", "as-needed"], 115 | "require-await": "error", 116 | "vars-on-top": "off", 117 | "wrap-iife": ["error", "outside"], 118 | "yoda": ["error", "never"], 119 | 120 | // Strict Mode 121 | "strict": ["error", "global"], 122 | 123 | // Variables 124 | "init-declarations": "off", 125 | "no-catch-shadow": "error", 126 | "no-delete-var": "error", 127 | "no-label-var": "error", 128 | "no-restricted-globals": "off", 129 | "no-shadow": "error", 130 | "no-shadow-restricted-names": "error", 131 | "no-undef": "error", 132 | "no-undef-init": "error", 133 | "no-undefined": "off", 134 | "no-unused-vars": "error", 135 | "no-use-before-define": ["error", "nofunc"], 136 | 137 | // Node.js and CommonJS 138 | "callback-return": "off", 139 | "global-require": "error", 140 | "handle-callback-err": "error", 141 | "no-buffer-constructor": "error", 142 | "no-mixed-requires": ["error", true], 143 | "no-new-require": "error", 144 | "no-path-concat": "error", 145 | "no-process-exit": "error", 146 | "no-restricted-modules": "off", 147 | "no-sync": "off", 148 | 149 | // Stylistic Issues 150 | "array-bracket-newline": ["error", { "multiline": true }], 151 | "array-bracket-spacing": ["error", "never"], 152 | "array-element-newline": ["off"], 153 | "block-spacing": ["error", "always"], 154 | "brace-style": ["error", "1tbs", { "allowSingleLine": false }], 155 | "camelcase": ["error", { "properties": "always" }], 156 | "capitalized-comments": "off", 157 | "comma-dangle": ["error", "never"], 158 | "comma-spacing": ["error", { "before": false, "after": true }], 159 | "comma-style": ["error", "last"], 160 | "computed-property-spacing": ["error", "never"], 161 | "consistent-this": "off", 162 | "eol-last": "error", 163 | "func-call-spacing": ["error", "never"], 164 | "func-name-matching": ["error"], 165 | "func-names": "off", 166 | "func-style": ["error", "declaration"], 167 | "function-paren-newline": ["error", "multiline"], 168 | "id-blacklist": "off", 169 | "id-length": "off", 170 | "id-match": "off", 171 | "indent": ["error", 4, { "SwitchCase": 1, "CallExpression": {"arguments": "first"}, "FunctionExpression": {"parameters": "first"}, "ignoredNodes": ["ConditionalExpression"] }], 172 | "jsx-quotes": "off", 173 | "key-spacing": ["error", { "beforeColon": false, "afterColon": true, "mode": "strict" }], 174 | "keyword-spacing": ["error", { "before": true, "after": true }], 175 | "line-comment-position": "off", 176 | "linebreak-style": ["error", "unix"], 177 | "lines-around-comment": "off", 178 | "max-depth": "off", 179 | "max-len": ["error", 120, { "ignoreUrls": true }], 180 | "max-lines": "off", 181 | "max-nested-callbacks": "off", 182 | "max-params": "off", 183 | "max-statements": "off", 184 | "max-statements-per-line": ["error", { "max": 1 }], 185 | "multiline-ternary": ["error", "always-multiline"], 186 | "new-cap": ["error", { "capIsNewExceptions": ["ByteString", "USVString", "DOMString"] }], 187 | "new-parens": "error", 188 | "newline-per-chained-call": "off", 189 | "no-array-constructor": "error", 190 | "no-bitwise": "off", 191 | "no-continue": "off", 192 | "no-inline-comments": "off", 193 | "no-lonely-if": "error", 194 | "no-mixed-operators": [ 195 | "error", 196 | { 197 | "groups": [ 198 | ["&", "|", "^", "~", "<<", ">>", ">>>"], 199 | ["==", "!=", "===", "!==", ">", ">=", "<", "<="], 200 | ["&&", "||"], 201 | ["in", "instanceof"] 202 | ] 203 | } 204 | ], 205 | "no-mixed-spaces-and-tabs": "error", 206 | "no-multi-assign": "off", 207 | "no-multiple-empty-lines": "error", 208 | "no-negated-condition": "off", 209 | "no-nested-ternary": "error", 210 | "no-new-object": "error", 211 | "no-plusplus": "off", 212 | "no-restricted-syntax": "off", 213 | "no-tabs": "error", 214 | "no-ternary": "off", 215 | "no-trailing-spaces": "error", 216 | "no-underscore-dangle": "off", 217 | "no-unneeded-ternary": "error", 218 | "no-whitespace-before-property": "error", 219 | "nonblock-statement-body-position": "error", 220 | "object-curly-newline": ["error", { "consistent": true }], 221 | "object-curly-spacing": ["error", "always"], 222 | "object-property-newline": "off", 223 | "one-var": ["error", "never"], 224 | "one-var-declaration-per-line": ["error", "initializations"], 225 | "operator-assignment": ["error", "always"], 226 | "operator-linebreak": ["error", "after"], 227 | "padded-blocks": ["error", "never"], 228 | "padding-line-between-statements": "off", 229 | "quote-props": ["error", "as-needed"], 230 | "quotes": ["error", "double", { "avoidEscape": true, "allowTemplateLiterals": true }], 231 | "require-jsdoc": "off", 232 | "semi": ["error", "always"], 233 | "semi-spacing": "error", 234 | "semi-style": "error", 235 | "sort-keys": "off", 236 | "sort-vars": "off", 237 | "space-before-blocks": ["error", "always"], 238 | "space-before-function-paren": ["error", { "anonymous": "always", "named": "never" }], 239 | "space-in-parens": ["error", "never"], 240 | "space-infix-ops": "error", 241 | "space-unary-ops": ["error", { "words": true, "nonwords": false }], 242 | "spaced-comment": ["error", "always", { "markers": ["///"] }], 243 | "switch-colon-spacing": "error", 244 | "template-tag-spacing": "error", 245 | "unicode-bom": "error", 246 | "wrap-regex": "off" 247 | } 248 | } 249 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /npm-debug.log 3 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Dual licensed under WTFPL and MIT: 2 | 3 | --- 4 | 5 | Copyright © 2012–2020 Domenic Denicola 6 | 7 | This work is free. You can redistribute it and/or modify it under the 8 | terms of the Do What The Fuck You Want To Public License, Version 2, 9 | as published by Sam Hocevar. See below for more details. 10 | 11 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 12 | Version 2, December 2004 13 | 14 | Copyright (C) 2004 Sam Hocevar 15 | 16 | Everyone is permitted to copy and distribute verbatim or modified 17 | copies of this license document, and changing it is allowed as long 18 | as the name is changed. 19 | 20 | DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE 21 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 22 | 23 | 0. You just DO WHAT THE FUCK YOU WANT TO. 24 | 25 | --- 26 | 27 | The MIT License (MIT) 28 | 29 | Copyright © 2012–2020 Domenic Denicola 30 | 31 | Permission is hereby granted, free of charge, to any person obtaining a copy 32 | of this software and associated documentation files (the "Software"), to deal 33 | in the Software without restriction, including without limitation the rights 34 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 35 | copies of the Software, and to permit persons to whom the Software is 36 | furnished to do so, subject to the following conditions: 37 | 38 | The above copyright notice and this permission notice shall be included in all 39 | copies or substantial portions of the Software. 40 | 41 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 42 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 43 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 44 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 45 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 46 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 47 | SOFTWARE. 48 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # It Opens Stuff 2 | 3 | That is, in your desktop environment. This will make *actual windows pop up*, with stuff in them: 4 | 5 | ```bash 6 | npm install opener -g 7 | 8 | opener http://google.com 9 | opener ./my-file.txt 10 | opener firefox 11 | opener npm run lint 12 | ``` 13 | 14 | Also if you want to use it programmatically you can do that too: 15 | 16 | ```js 17 | var opener = require("opener"); 18 | 19 | opener("http://google.com"); 20 | opener("./my-file.txt"); 21 | opener("firefox"); 22 | opener("npm run lint"); 23 | ``` 24 | 25 | Plus, it returns the child process created, so you can do things like let your script exit while the window stays open: 26 | 27 | ```js 28 | var editor = opener("documentation.odt"); 29 | editor.unref(); 30 | // These other unrefs may be necessary if your OS's opener process 31 | // exits before the process it started is complete. 32 | editor.stdin.unref(); 33 | editor.stdout.unref(); 34 | editor.stderr.unref(); 35 | ``` 36 | 37 | ## Use It for Good 38 | 39 | Like opening the user's browser with a test harness in your package's test script: 40 | 41 | ```json 42 | { 43 | "scripts": { 44 | "test": "opener ./test/runner.html" 45 | }, 46 | "devDependencies": { 47 | "opener": "*" 48 | } 49 | } 50 | ``` 51 | 52 | ## Why 53 | 54 | Because Windows has `start`, Macs have `open`, and *nix has `xdg-open`. At least [according to some person on StackOverflow](http://stackoverflow.com/q/1480971/3191). And I like things that work on all three. Like Node.js. And Opener. 55 | -------------------------------------------------------------------------------- /bin/opener-bin.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | 4 | var opener = require(".."); 5 | 6 | opener(process.argv.slice(2), function (error) { 7 | if (error) { 8 | throw error; 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /lib/opener.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var childProcess = require("child_process"); 3 | var os = require("os"); 4 | 5 | module.exports = function opener(args, options, callback) { 6 | var platform = process.platform; 7 | 8 | // Attempt to detect Windows Subystem for Linux (WSL). WSL itself as Linux (which works in most cases), but in 9 | // this specific case we need to treat it as actually being Windows. The "Windows-way" of opening things through 10 | // cmd.exe works just fine here, whereas using xdg-open does not, since there is no X Windows in WSL. 11 | if (platform === "linux" && os.release().indexOf("Microsoft") !== -1) { 12 | platform = "win32"; 13 | } 14 | 15 | // http://stackoverflow.com/q/1480971/3191, but see below for Windows. 16 | var command; 17 | switch (platform) { 18 | case "win32": { 19 | command = "cmd.exe"; 20 | break; 21 | } 22 | case "darwin": { 23 | command = "open"; 24 | break; 25 | } 26 | default: { 27 | command = "xdg-open"; 28 | break; 29 | } 30 | } 31 | 32 | if (typeof args === "string") { 33 | args = [args]; 34 | } 35 | 36 | if (typeof options === "function") { 37 | callback = options; 38 | options = {}; 39 | } 40 | 41 | if (options && typeof options === "object" && options.command) { 42 | if (platform === "win32") { 43 | // *always* use cmd on windows 44 | args = [options.command].concat(args); 45 | } else { 46 | command = options.command; 47 | } 48 | } 49 | 50 | if (platform === "win32") { 51 | // On Windows, we really want to use the "start" command. But, the rules regarding arguments with spaces, and 52 | // escaping them with quotes, can get really arcane. So the easiest way to deal with this is to pass off the 53 | // responsibility to "cmd /c", which has that logic built in. 54 | // 55 | // Furthermore, if "cmd /c" double-quoted the first parameter, then "start" will interpret it as a window title, 56 | // so we need to add a dummy empty-string window title: http://stackoverflow.com/a/154090/3191 57 | // 58 | // Additionally, on Windows ampersand and caret need to be escaped when passed to "start" 59 | args = args.map(function (value) { 60 | return value.replace(/[&^]/g, "^$&"); 61 | }); 62 | args = ["/c", "start", "\"\""].concat(args); 63 | } 64 | 65 | return childProcess.execFile(command, args, options, callback); 66 | }; 67 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "opener", 3 | "version": "1.5.2", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.4", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 10 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.10.4", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 19 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.10.4", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 25 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.10.4", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | }, 32 | "dependencies": { 33 | "chalk": { 34 | "version": "2.4.2", 35 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 36 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 37 | "dev": true, 38 | "requires": { 39 | "ansi-styles": "^3.2.1", 40 | "escape-string-regexp": "^1.0.5", 41 | "supports-color": "^5.3.0" 42 | } 43 | } 44 | } 45 | }, 46 | "@types/color-name": { 47 | "version": "1.1.1", 48 | "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", 49 | "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==", 50 | "dev": true 51 | }, 52 | "acorn": { 53 | "version": "7.4.0", 54 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.0.tgz", 55 | "integrity": "sha512-+G7P8jJmCHr+S+cLfQxygbWhXy+8YTVGzAkpEbcLo2mLoL7tij/VG41QSHACSf5QgYRhMZYHuNc6drJaO0Da+w==", 56 | "dev": true 57 | }, 58 | "acorn-jsx": { 59 | "version": "5.2.0", 60 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.2.0.tgz", 61 | "integrity": "sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ==", 62 | "dev": true 63 | }, 64 | "ajv": { 65 | "version": "6.12.4", 66 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.4.tgz", 67 | "integrity": "sha512-eienB2c9qVQs2KWexhkrdMLVDoIQCz5KSeLxwg9Lzk4DOfBtIK9PQwwufcsn1jjGuf9WZmqPMbGxOzfcuphJCQ==", 68 | "dev": true, 69 | "requires": { 70 | "fast-deep-equal": "^3.1.1", 71 | "fast-json-stable-stringify": "^2.0.0", 72 | "json-schema-traverse": "^0.4.1", 73 | "uri-js": "^4.2.2" 74 | } 75 | }, 76 | "ansi-colors": { 77 | "version": "4.1.1", 78 | "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", 79 | "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", 80 | "dev": true 81 | }, 82 | "ansi-regex": { 83 | "version": "5.0.0", 84 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", 85 | "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", 86 | "dev": true 87 | }, 88 | "ansi-styles": { 89 | "version": "3.2.1", 90 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 91 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 92 | "dev": true, 93 | "requires": { 94 | "color-convert": "^1.9.0" 95 | } 96 | }, 97 | "argparse": { 98 | "version": "1.0.10", 99 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 100 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 101 | "dev": true, 102 | "requires": { 103 | "sprintf-js": "~1.0.2" 104 | } 105 | }, 106 | "astral-regex": { 107 | "version": "1.0.0", 108 | "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", 109 | "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", 110 | "dev": true 111 | }, 112 | "balanced-match": { 113 | "version": "1.0.0", 114 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 115 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 116 | "dev": true 117 | }, 118 | "brace-expansion": { 119 | "version": "1.1.11", 120 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 121 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 122 | "dev": true, 123 | "requires": { 124 | "balanced-match": "^1.0.0", 125 | "concat-map": "0.0.1" 126 | } 127 | }, 128 | "callsites": { 129 | "version": "3.1.0", 130 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 131 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 132 | "dev": true 133 | }, 134 | "chalk": { 135 | "version": "4.1.0", 136 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 137 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 138 | "dev": true, 139 | "requires": { 140 | "ansi-styles": "^4.1.0", 141 | "supports-color": "^7.1.0" 142 | }, 143 | "dependencies": { 144 | "ansi-styles": { 145 | "version": "4.2.1", 146 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", 147 | "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", 148 | "dev": true, 149 | "requires": { 150 | "@types/color-name": "^1.1.1", 151 | "color-convert": "^2.0.1" 152 | } 153 | }, 154 | "color-convert": { 155 | "version": "2.0.1", 156 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 157 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 158 | "dev": true, 159 | "requires": { 160 | "color-name": "~1.1.4" 161 | } 162 | }, 163 | "color-name": { 164 | "version": "1.1.4", 165 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 166 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 167 | "dev": true 168 | }, 169 | "has-flag": { 170 | "version": "4.0.0", 171 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 172 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 173 | "dev": true 174 | }, 175 | "supports-color": { 176 | "version": "7.2.0", 177 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 178 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 179 | "dev": true, 180 | "requires": { 181 | "has-flag": "^4.0.0" 182 | } 183 | } 184 | } 185 | }, 186 | "color-convert": { 187 | "version": "1.9.3", 188 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 189 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 190 | "dev": true, 191 | "requires": { 192 | "color-name": "1.1.3" 193 | } 194 | }, 195 | "color-name": { 196 | "version": "1.1.3", 197 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 198 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 199 | "dev": true 200 | }, 201 | "concat-map": { 202 | "version": "0.0.1", 203 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 204 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 205 | "dev": true 206 | }, 207 | "cross-spawn": { 208 | "version": "7.0.3", 209 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 210 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 211 | "dev": true, 212 | "requires": { 213 | "path-key": "^3.1.0", 214 | "shebang-command": "^2.0.0", 215 | "which": "^2.0.1" 216 | } 217 | }, 218 | "debug": { 219 | "version": "4.1.1", 220 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 221 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 222 | "dev": true, 223 | "requires": { 224 | "ms": "^2.1.1" 225 | } 226 | }, 227 | "deep-is": { 228 | "version": "0.1.3", 229 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", 230 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", 231 | "dev": true 232 | }, 233 | "doctrine": { 234 | "version": "3.0.0", 235 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 236 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 237 | "dev": true, 238 | "requires": { 239 | "esutils": "^2.0.2" 240 | } 241 | }, 242 | "emoji-regex": { 243 | "version": "7.0.3", 244 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", 245 | "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", 246 | "dev": true 247 | }, 248 | "enquirer": { 249 | "version": "2.3.6", 250 | "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", 251 | "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", 252 | "dev": true, 253 | "requires": { 254 | "ansi-colors": "^4.1.1" 255 | } 256 | }, 257 | "escape-string-regexp": { 258 | "version": "1.0.5", 259 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 260 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 261 | "dev": true 262 | }, 263 | "eslint": { 264 | "version": "7.7.0", 265 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.7.0.tgz", 266 | "integrity": "sha512-1KUxLzos0ZVsyL81PnRN335nDtQ8/vZUD6uMtWbF+5zDtjKcsklIi78XoE0MVL93QvWTu+E5y44VyyCsOMBrIg==", 267 | "dev": true, 268 | "requires": { 269 | "@babel/code-frame": "^7.0.0", 270 | "ajv": "^6.10.0", 271 | "chalk": "^4.0.0", 272 | "cross-spawn": "^7.0.2", 273 | "debug": "^4.0.1", 274 | "doctrine": "^3.0.0", 275 | "enquirer": "^2.3.5", 276 | "eslint-scope": "^5.1.0", 277 | "eslint-utils": "^2.1.0", 278 | "eslint-visitor-keys": "^1.3.0", 279 | "espree": "^7.2.0", 280 | "esquery": "^1.2.0", 281 | "esutils": "^2.0.2", 282 | "file-entry-cache": "^5.0.1", 283 | "functional-red-black-tree": "^1.0.1", 284 | "glob-parent": "^5.0.0", 285 | "globals": "^12.1.0", 286 | "ignore": "^4.0.6", 287 | "import-fresh": "^3.0.0", 288 | "imurmurhash": "^0.1.4", 289 | "is-glob": "^4.0.0", 290 | "js-yaml": "^3.13.1", 291 | "json-stable-stringify-without-jsonify": "^1.0.1", 292 | "levn": "^0.4.1", 293 | "lodash": "^4.17.19", 294 | "minimatch": "^3.0.4", 295 | "natural-compare": "^1.4.0", 296 | "optionator": "^0.9.1", 297 | "progress": "^2.0.0", 298 | "regexpp": "^3.1.0", 299 | "semver": "^7.2.1", 300 | "strip-ansi": "^6.0.0", 301 | "strip-json-comments": "^3.1.0", 302 | "table": "^5.2.3", 303 | "text-table": "^0.2.0", 304 | "v8-compile-cache": "^2.0.3" 305 | } 306 | }, 307 | "eslint-scope": { 308 | "version": "5.1.0", 309 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.0.tgz", 310 | "integrity": "sha512-iiGRvtxWqgtx5m8EyQUJihBloE4EnYeGE/bz1wSPwJE6tZuJUtHlhqDM4Xj2ukE8Dyy1+HCZ4hE0fzIVMzb58w==", 311 | "dev": true, 312 | "requires": { 313 | "esrecurse": "^4.1.0", 314 | "estraverse": "^4.1.1" 315 | } 316 | }, 317 | "eslint-utils": { 318 | "version": "2.1.0", 319 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 320 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 321 | "dev": true, 322 | "requires": { 323 | "eslint-visitor-keys": "^1.1.0" 324 | } 325 | }, 326 | "eslint-visitor-keys": { 327 | "version": "1.3.0", 328 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 329 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 330 | "dev": true 331 | }, 332 | "espree": { 333 | "version": "7.3.0", 334 | "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.0.tgz", 335 | "integrity": "sha512-dksIWsvKCixn1yrEXO8UosNSxaDoSYpq9reEjZSbHLpT5hpaCAKTLBwq0RHtLrIr+c0ByiYzWT8KTMRzoRCNlw==", 336 | "dev": true, 337 | "requires": { 338 | "acorn": "^7.4.0", 339 | "acorn-jsx": "^5.2.0", 340 | "eslint-visitor-keys": "^1.3.0" 341 | } 342 | }, 343 | "esprima": { 344 | "version": "4.0.1", 345 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 346 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 347 | "dev": true 348 | }, 349 | "esquery": { 350 | "version": "1.3.1", 351 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.3.1.tgz", 352 | "integrity": "sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ==", 353 | "dev": true, 354 | "requires": { 355 | "estraverse": "^5.1.0" 356 | }, 357 | "dependencies": { 358 | "estraverse": { 359 | "version": "5.2.0", 360 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", 361 | "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", 362 | "dev": true 363 | } 364 | } 365 | }, 366 | "esrecurse": { 367 | "version": "4.2.1", 368 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", 369 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", 370 | "dev": true, 371 | "requires": { 372 | "estraverse": "^4.1.0" 373 | } 374 | }, 375 | "estraverse": { 376 | "version": "4.3.0", 377 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", 378 | "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", 379 | "dev": true 380 | }, 381 | "esutils": { 382 | "version": "2.0.3", 383 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 384 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 385 | "dev": true 386 | }, 387 | "fast-deep-equal": { 388 | "version": "3.1.3", 389 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 390 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 391 | "dev": true 392 | }, 393 | "fast-json-stable-stringify": { 394 | "version": "2.1.0", 395 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 396 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 397 | "dev": true 398 | }, 399 | "fast-levenshtein": { 400 | "version": "2.0.6", 401 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 402 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", 403 | "dev": true 404 | }, 405 | "file-entry-cache": { 406 | "version": "5.0.1", 407 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", 408 | "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", 409 | "dev": true, 410 | "requires": { 411 | "flat-cache": "^2.0.1" 412 | } 413 | }, 414 | "flat-cache": { 415 | "version": "2.0.1", 416 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", 417 | "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", 418 | "dev": true, 419 | "requires": { 420 | "flatted": "^2.0.0", 421 | "rimraf": "2.6.3", 422 | "write": "1.0.3" 423 | } 424 | }, 425 | "flatted": { 426 | "version": "2.0.2", 427 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", 428 | "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", 429 | "dev": true 430 | }, 431 | "fs.realpath": { 432 | "version": "1.0.0", 433 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 434 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 435 | "dev": true 436 | }, 437 | "functional-red-black-tree": { 438 | "version": "1.0.1", 439 | "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", 440 | "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", 441 | "dev": true 442 | }, 443 | "glob": { 444 | "version": "7.1.6", 445 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 446 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 447 | "dev": true, 448 | "requires": { 449 | "fs.realpath": "^1.0.0", 450 | "inflight": "^1.0.4", 451 | "inherits": "2", 452 | "minimatch": "^3.0.4", 453 | "once": "^1.3.0", 454 | "path-is-absolute": "^1.0.0" 455 | } 456 | }, 457 | "glob-parent": { 458 | "version": "5.1.1", 459 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 460 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 461 | "dev": true, 462 | "requires": { 463 | "is-glob": "^4.0.1" 464 | } 465 | }, 466 | "globals": { 467 | "version": "12.4.0", 468 | "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", 469 | "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", 470 | "dev": true, 471 | "requires": { 472 | "type-fest": "^0.8.1" 473 | } 474 | }, 475 | "has-flag": { 476 | "version": "3.0.0", 477 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 478 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 479 | "dev": true 480 | }, 481 | "ignore": { 482 | "version": "4.0.6", 483 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", 484 | "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", 485 | "dev": true 486 | }, 487 | "import-fresh": { 488 | "version": "3.2.1", 489 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", 490 | "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", 491 | "dev": true, 492 | "requires": { 493 | "parent-module": "^1.0.0", 494 | "resolve-from": "^4.0.0" 495 | } 496 | }, 497 | "imurmurhash": { 498 | "version": "0.1.4", 499 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 500 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 501 | "dev": true 502 | }, 503 | "inflight": { 504 | "version": "1.0.6", 505 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 506 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 507 | "dev": true, 508 | "requires": { 509 | "once": "^1.3.0", 510 | "wrappy": "1" 511 | } 512 | }, 513 | "inherits": { 514 | "version": "2.0.4", 515 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 516 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 517 | "dev": true 518 | }, 519 | "is-extglob": { 520 | "version": "2.1.1", 521 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 522 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 523 | "dev": true 524 | }, 525 | "is-fullwidth-code-point": { 526 | "version": "2.0.0", 527 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 528 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 529 | "dev": true 530 | }, 531 | "is-glob": { 532 | "version": "4.0.1", 533 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 534 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 535 | "dev": true, 536 | "requires": { 537 | "is-extglob": "^2.1.1" 538 | } 539 | }, 540 | "isexe": { 541 | "version": "2.0.0", 542 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 543 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 544 | "dev": true 545 | }, 546 | "js-tokens": { 547 | "version": "4.0.0", 548 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 549 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 550 | "dev": true 551 | }, 552 | "js-yaml": { 553 | "version": "3.14.0", 554 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 555 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 556 | "dev": true, 557 | "requires": { 558 | "argparse": "^1.0.7", 559 | "esprima": "^4.0.0" 560 | } 561 | }, 562 | "json-schema-traverse": { 563 | "version": "0.4.1", 564 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 565 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 566 | "dev": true 567 | }, 568 | "json-stable-stringify-without-jsonify": { 569 | "version": "1.0.1", 570 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 571 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 572 | "dev": true 573 | }, 574 | "levn": { 575 | "version": "0.4.1", 576 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 577 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 578 | "dev": true, 579 | "requires": { 580 | "prelude-ls": "^1.2.1", 581 | "type-check": "~0.4.0" 582 | } 583 | }, 584 | "lodash": { 585 | "version": "4.17.20", 586 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", 587 | "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", 588 | "dev": true 589 | }, 590 | "minimatch": { 591 | "version": "3.0.4", 592 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 593 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 594 | "dev": true, 595 | "requires": { 596 | "brace-expansion": "^1.1.7" 597 | } 598 | }, 599 | "minimist": { 600 | "version": "1.2.5", 601 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 602 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 603 | "dev": true 604 | }, 605 | "mkdirp": { 606 | "version": "0.5.5", 607 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 608 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 609 | "dev": true, 610 | "requires": { 611 | "minimist": "^1.2.5" 612 | } 613 | }, 614 | "ms": { 615 | "version": "2.1.2", 616 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 617 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 618 | "dev": true 619 | }, 620 | "natural-compare": { 621 | "version": "1.4.0", 622 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 623 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 624 | "dev": true 625 | }, 626 | "once": { 627 | "version": "1.4.0", 628 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 629 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 630 | "dev": true, 631 | "requires": { 632 | "wrappy": "1" 633 | } 634 | }, 635 | "optionator": { 636 | "version": "0.9.1", 637 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", 638 | "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", 639 | "dev": true, 640 | "requires": { 641 | "deep-is": "^0.1.3", 642 | "fast-levenshtein": "^2.0.6", 643 | "levn": "^0.4.1", 644 | "prelude-ls": "^1.2.1", 645 | "type-check": "^0.4.0", 646 | "word-wrap": "^1.2.3" 647 | } 648 | }, 649 | "parent-module": { 650 | "version": "1.0.1", 651 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 652 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 653 | "dev": true, 654 | "requires": { 655 | "callsites": "^3.0.0" 656 | } 657 | }, 658 | "path-is-absolute": { 659 | "version": "1.0.1", 660 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 661 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 662 | "dev": true 663 | }, 664 | "path-key": { 665 | "version": "3.1.1", 666 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 667 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 668 | "dev": true 669 | }, 670 | "prelude-ls": { 671 | "version": "1.2.1", 672 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 673 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 674 | "dev": true 675 | }, 676 | "progress": { 677 | "version": "2.0.3", 678 | "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", 679 | "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", 680 | "dev": true 681 | }, 682 | "punycode": { 683 | "version": "2.1.1", 684 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 685 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 686 | "dev": true 687 | }, 688 | "regexpp": { 689 | "version": "3.1.0", 690 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", 691 | "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", 692 | "dev": true 693 | }, 694 | "resolve-from": { 695 | "version": "4.0.0", 696 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 697 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 698 | "dev": true 699 | }, 700 | "rimraf": { 701 | "version": "2.6.3", 702 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", 703 | "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", 704 | "dev": true, 705 | "requires": { 706 | "glob": "^7.1.3" 707 | } 708 | }, 709 | "semver": { 710 | "version": "7.3.2", 711 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.2.tgz", 712 | "integrity": "sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ==", 713 | "dev": true 714 | }, 715 | "shebang-command": { 716 | "version": "2.0.0", 717 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 718 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 719 | "dev": true, 720 | "requires": { 721 | "shebang-regex": "^3.0.0" 722 | } 723 | }, 724 | "shebang-regex": { 725 | "version": "3.0.0", 726 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 727 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 728 | "dev": true 729 | }, 730 | "slice-ansi": { 731 | "version": "2.1.0", 732 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", 733 | "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", 734 | "dev": true, 735 | "requires": { 736 | "ansi-styles": "^3.2.0", 737 | "astral-regex": "^1.0.0", 738 | "is-fullwidth-code-point": "^2.0.0" 739 | } 740 | }, 741 | "sprintf-js": { 742 | "version": "1.0.3", 743 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 744 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 745 | "dev": true 746 | }, 747 | "string-width": { 748 | "version": "3.1.0", 749 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", 750 | "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", 751 | "dev": true, 752 | "requires": { 753 | "emoji-regex": "^7.0.1", 754 | "is-fullwidth-code-point": "^2.0.0", 755 | "strip-ansi": "^5.1.0" 756 | }, 757 | "dependencies": { 758 | "ansi-regex": { 759 | "version": "4.1.0", 760 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", 761 | "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", 762 | "dev": true 763 | }, 764 | "strip-ansi": { 765 | "version": "5.2.0", 766 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", 767 | "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", 768 | "dev": true, 769 | "requires": { 770 | "ansi-regex": "^4.1.0" 771 | } 772 | } 773 | } 774 | }, 775 | "strip-ansi": { 776 | "version": "6.0.0", 777 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", 778 | "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", 779 | "dev": true, 780 | "requires": { 781 | "ansi-regex": "^5.0.0" 782 | } 783 | }, 784 | "strip-json-comments": { 785 | "version": "3.1.1", 786 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 787 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 788 | "dev": true 789 | }, 790 | "supports-color": { 791 | "version": "5.5.0", 792 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 793 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 794 | "dev": true, 795 | "requires": { 796 | "has-flag": "^3.0.0" 797 | } 798 | }, 799 | "table": { 800 | "version": "5.4.6", 801 | "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", 802 | "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", 803 | "dev": true, 804 | "requires": { 805 | "ajv": "^6.10.2", 806 | "lodash": "^4.17.14", 807 | "slice-ansi": "^2.1.0", 808 | "string-width": "^3.0.0" 809 | } 810 | }, 811 | "text-table": { 812 | "version": "0.2.0", 813 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 814 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 815 | "dev": true 816 | }, 817 | "type-check": { 818 | "version": "0.4.0", 819 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 820 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 821 | "dev": true, 822 | "requires": { 823 | "prelude-ls": "^1.2.1" 824 | } 825 | }, 826 | "type-fest": { 827 | "version": "0.8.1", 828 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", 829 | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", 830 | "dev": true 831 | }, 832 | "uri-js": { 833 | "version": "4.2.2", 834 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", 835 | "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", 836 | "dev": true, 837 | "requires": { 838 | "punycode": "^2.1.0" 839 | } 840 | }, 841 | "v8-compile-cache": { 842 | "version": "2.1.1", 843 | "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz", 844 | "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==", 845 | "dev": true 846 | }, 847 | "which": { 848 | "version": "2.0.2", 849 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 850 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 851 | "dev": true, 852 | "requires": { 853 | "isexe": "^2.0.0" 854 | } 855 | }, 856 | "word-wrap": { 857 | "version": "1.2.3", 858 | "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", 859 | "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", 860 | "dev": true 861 | }, 862 | "wrappy": { 863 | "version": "1.0.2", 864 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 865 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 866 | "dev": true 867 | }, 868 | "write": { 869 | "version": "1.0.3", 870 | "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", 871 | "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", 872 | "dev": true, 873 | "requires": { 874 | "mkdirp": "^0.5.1" 875 | } 876 | } 877 | } 878 | } 879 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "opener", 3 | "description": "Opens stuff, like webpages and files and executables, cross-platform", 4 | "version": "1.5.2", 5 | "author": "Domenic Denicola (https://domenic.me/)", 6 | "license": "(WTFPL OR MIT)", 7 | "repository": "domenic/opener", 8 | "main": "lib/opener.js", 9 | "bin": "bin/opener-bin.js", 10 | "files": [ 11 | "lib/", 12 | "bin/" 13 | ], 14 | "scripts": { 15 | "lint": "eslint ." 16 | }, 17 | "devDependencies": { 18 | "eslint": "^7.7.0" 19 | } 20 | } 21 | --------------------------------------------------------------------------------