├── .github ├── dependabot.yml ├── mergify.yml └── workflows │ └── release.yml ├── .gitignore ├── .vscode ├── launch.json └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── images ├── nginx.png └── usage.gif ├── language-configuration.json ├── package-lock.json ├── package.json ├── src └── extension.ts └── tsconfig.json /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: daily 7 | time: "04:00" 8 | open-pull-requests-limit: 10 9 | ignore: 10 | - dependency-name: "@types/node" 11 | versions: 12 | - 14.14.22 13 | - 14.14.24 14 | - 14.14.25 15 | - 14.14.26 16 | - 14.14.28 17 | - 14.14.30 18 | - 14.14.32 19 | - 14.14.33 20 | - 14.14.34 21 | - 14.14.37 22 | - dependency-name: vsce 23 | versions: 24 | - 1.84.0 25 | - 1.85.1 26 | - 1.86.0 27 | - dependency-name: typescript 28 | versions: 29 | - 4.1.3 30 | - 4.1.4 31 | -------------------------------------------------------------------------------- /.github/mergify.yml: -------------------------------------------------------------------------------- 1 | pull_request_rules: 2 | - name: dependabot 3 | conditions: 4 | - and: 5 | - -draft 6 | - base=master 7 | - -closed 8 | - -conflict 9 | - label=dependencies 10 | - author=dependabot[bot] 11 | actions: 12 | merge: 13 | method: merge 14 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | on: 3 | push: 4 | tags: 5 | - 'v*.*.*' 6 | 7 | env: 8 | NODE_VERSION: '10.x' # set this to the node version to use 9 | 10 | jobs: 11 | build-and-deploy: 12 | name: Build and Deploy 13 | runs-on: ubuntu-latest 14 | steps: 15 | - uses: actions/checkout@v2 16 | - name: Use Node.js ${{ env.NODE_VERSION }} 17 | uses: actions/setup-node@v1 18 | with: 19 | node-version: ${{ env.NODE_VERSION }} 20 | - name: npm install, build, and test 21 | run: | 22 | # Build and test the project, then 23 | # deploy to Azure Web App. 24 | npm install 25 | npx vsce package 26 | npx vsce publish -p "${{ secrets.VSCE_PUBLISHER_TOKEN }}" 27 | - name: GH Release 28 | uses: softprops/action-gh-release@v0.1.5 29 | env: 30 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 31 | with: 32 | files: | 33 | *.vsix 34 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | { 3 | "version": "0.1.0", 4 | "configurations": [ 5 | { 6 | "name": "Launch Extension", 7 | "type": "extensionHost", 8 | "request": "launch", 9 | "runtimeExecutable": "${execPath}", 10 | "args": ["--extensionDevelopmentPath=${workspaceRoot}" ], 11 | "stopOnEntry": false, 12 | "sourceMaps": true, 13 | "outDir": "${workspaceRoot}/out/src", 14 | "preLaunchTask": "npm" 15 | }, 16 | { 17 | "name": "Launch Tests", 18 | "type": "extensionHost", 19 | "request": "launch", 20 | "runtimeExecutable": "${execPath}", 21 | "args": ["--extensionDevelopmentPath=${workspaceRoot}", "--extensionTestsPath=${workspaceRoot}/out/test" ], 22 | "stopOnEntry": false, 23 | "sourceMaps": true, 24 | "outDir": "${workspaceRoot}/out/test", 25 | "preLaunchTask": "npm" 26 | } 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // Available variables which can be used inside of strings. 2 | // ${workspaceRoot}: the root folder of the team 3 | // ${file}: the current opened file 4 | // ${fileBasename}: the current opened file's basename 5 | // ${fileDirname}: the current opened file's dirname 6 | // ${fileExtname}: the current opened file's extension 7 | // ${cwd}: the current working directory of the spawned process 8 | 9 | // A task runner that calls a custom npm script that compiles the extension. 10 | { 11 | "version": "0.1.0", 12 | 13 | // we want to run npm 14 | "command": "npm", 15 | 16 | // the command is a shell script 17 | "isShellCommand": true, 18 | 19 | // show the output window only if unrecognized errors occur. 20 | "showOutput": "silent", 21 | 22 | // we run the custom script "compile" as defined in package.json 23 | "args": ["run", "compile", "--loglevel", "silent"], 24 | 25 | // The tsc compiler is started in watching mode 26 | "isWatching": true, 27 | 28 | // use the standard tsc in watch mode problem matcher to find compile problems in the output. 29 | "problemMatcher": "$tsc-watch" 30 | } -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | typings/** 3 | out/test/** 4 | test/** 5 | src/** 6 | **/*.map 7 | .gitignore 8 | tsconfig.json 9 | vsc-extension-quickstart.md 10 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Version 0.0.4 2 | Fixed Bug: 3 | - last release did not contain an executable 4 | 5 | # Version 0.0.3 6 | Fixed Bug: 7 | - deletes variables from config file 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Simon Schneider 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 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Nginx Formatter 2 | 3 | Simply formats your NGINX Configurations 4 | 5 | ## Usage 6 | 1. Open a Document 7 | 2. Make sure the File Association is set to NGINX 8 | 3. Press Strg + Alt + F or select 'Format Document' from the command selection 9 | 4. Your NGINX Configuration should be formatted properly 10 | 11 | ![Usage Gif](/images/usage.gif) 12 | 13 | ## Used Libaries 14 | - https://github.com/vasilevich/nginxbeautifier 15 | -------------------------------------------------------------------------------- /images/nginx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raynigon/vscode-nginx-formatter/d68ee659dfbaf81934f096ae10aa1efe377417e7/images/nginx.png -------------------------------------------------------------------------------- /images/usage.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/raynigon/vscode-nginx-formatter/d68ee659dfbaf81934f096ae10aa1efe377417e7/images/usage.gif -------------------------------------------------------------------------------- /language-configuration.json: -------------------------------------------------------------------------------- 1 | { 2 | "comments": { 3 | "lineComment": "#", 4 | }, 5 | "brackets": [ 6 | ["{", "}"], 7 | ["[", "]"], 8 | ["(", ")"] 9 | ], 10 | "autoClosingPairs": [ 11 | ["{", "}"], 12 | ["[", "]"], 13 | ["(", ")"], 14 | ["\"", "\""], 15 | ["'", "'"] 16 | ], 17 | "surroundingPairs": [ 18 | ["{", "}"], 19 | ["[", "]"], 20 | ["(", ")"], 21 | ["\"", "\""], 22 | ["'", "'"] 23 | ] 24 | } -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nginx-formatter", 3 | "version": "0.0.13", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@tootallnate/once": { 8 | "version": "1.1.2", 9 | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", 10 | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", 11 | "dev": true 12 | }, 13 | "@types/node": { 14 | "version": "17.0.23", 15 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.23.tgz", 16 | "integrity": "sha512-UxDxWn7dl97rKVeVS61vErvw086aCYhDLyvRQZ5Rk65rZKepaFdm53GeqXaKBuOhED4e9uWq34IC3TdSdJJ2Gw==", 17 | "dev": true 18 | }, 19 | "agent-base": { 20 | "version": "6.0.1", 21 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.1.tgz", 22 | "integrity": "sha512-01q25QQDwLSsyfhrKbn8yuur+JNw0H+0Y4JiGIKd3z9aYk/w/2kxD/Upc+t2ZBBSUNff50VjPsSW2YxM8QYKVg==", 23 | "dev": true, 24 | "requires": { 25 | "debug": "4" 26 | } 27 | }, 28 | "ansi-regex": { 29 | "version": "2.1.1", 30 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 31 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 32 | "dev": true 33 | }, 34 | "ansi-styles": { 35 | "version": "3.2.1", 36 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 37 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 38 | "dev": true, 39 | "requires": { 40 | "color-convert": "^1.9.0" 41 | } 42 | }, 43 | "aproba": { 44 | "version": "1.2.0", 45 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", 46 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", 47 | "dev": true 48 | }, 49 | "are-we-there-yet": { 50 | "version": "1.1.7", 51 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", 52 | "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", 53 | "dev": true, 54 | "requires": { 55 | "delegates": "^1.0.0", 56 | "readable-stream": "^2.0.6" 57 | } 58 | }, 59 | "argparse": { 60 | "version": "2.0.1", 61 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 62 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 63 | "dev": true 64 | }, 65 | "azure-devops-node-api": { 66 | "version": "11.1.1", 67 | "resolved": "https://registry.npmjs.org/azure-devops-node-api/-/azure-devops-node-api-11.1.1.tgz", 68 | "integrity": "sha512-XDG91XzLZ15reP12s3jFkKS8oiagSICjnLwxEYieme4+4h3ZveFOFRA4iYIG40RyHXsiI0mefFYYMFIJbMpWcg==", 69 | "dev": true, 70 | "requires": { 71 | "tunnel": "0.0.6", 72 | "typed-rest-client": "^1.8.4" 73 | } 74 | }, 75 | "balanced-match": { 76 | "version": "1.0.0", 77 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 78 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 79 | "dev": true 80 | }, 81 | "base64-js": { 82 | "version": "1.5.1", 83 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 84 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 85 | "dev": true 86 | }, 87 | "bl": { 88 | "version": "4.1.0", 89 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", 90 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", 91 | "dev": true, 92 | "requires": { 93 | "buffer": "^5.5.0", 94 | "inherits": "^2.0.4", 95 | "readable-stream": "^3.4.0" 96 | }, 97 | "dependencies": { 98 | "readable-stream": { 99 | "version": "3.6.0", 100 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 101 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 102 | "dev": true, 103 | "requires": { 104 | "inherits": "^2.0.3", 105 | "string_decoder": "^1.1.1", 106 | "util-deprecate": "^1.0.1" 107 | } 108 | } 109 | } 110 | }, 111 | "boolbase": { 112 | "version": "1.0.0", 113 | "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", 114 | "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", 115 | "dev": true 116 | }, 117 | "brace-expansion": { 118 | "version": "1.1.11", 119 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 120 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 121 | "dev": true, 122 | "requires": { 123 | "balanced-match": "^1.0.0", 124 | "concat-map": "0.0.1" 125 | } 126 | }, 127 | "browser-stdout": { 128 | "version": "1.3.1", 129 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", 130 | "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", 131 | "dev": true 132 | }, 133 | "buffer": { 134 | "version": "5.7.1", 135 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 136 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 137 | "dev": true, 138 | "requires": { 139 | "base64-js": "^1.3.1", 140 | "ieee754": "^1.1.13" 141 | } 142 | }, 143 | "buffer-crc32": { 144 | "version": "0.2.13", 145 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 146 | "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", 147 | "dev": true 148 | }, 149 | "buffer-from": { 150 | "version": "1.1.1", 151 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 152 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 153 | "dev": true 154 | }, 155 | "call-bind": { 156 | "version": "1.0.2", 157 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 158 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 159 | "dev": true, 160 | "requires": { 161 | "function-bind": "^1.1.1", 162 | "get-intrinsic": "^1.0.2" 163 | } 164 | }, 165 | "chalk": { 166 | "version": "2.4.2", 167 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 168 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 169 | "dev": true, 170 | "requires": { 171 | "ansi-styles": "^3.2.1", 172 | "escape-string-regexp": "^1.0.5", 173 | "supports-color": "^5.3.0" 174 | } 175 | }, 176 | "cheerio": { 177 | "version": "1.0.0-rc.10", 178 | "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", 179 | "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", 180 | "dev": true, 181 | "requires": { 182 | "cheerio-select": "^1.5.0", 183 | "dom-serializer": "^1.3.2", 184 | "domhandler": "^4.2.0", 185 | "htmlparser2": "^6.1.0", 186 | "parse5": "^6.0.1", 187 | "parse5-htmlparser2-tree-adapter": "^6.0.1", 188 | "tslib": "^2.2.0" 189 | } 190 | }, 191 | "cheerio-select": { 192 | "version": "1.5.0", 193 | "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", 194 | "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", 195 | "dev": true, 196 | "requires": { 197 | "css-select": "^4.1.3", 198 | "css-what": "^5.0.1", 199 | "domelementtype": "^2.2.0", 200 | "domhandler": "^4.2.0", 201 | "domutils": "^2.7.0" 202 | } 203 | }, 204 | "chownr": { 205 | "version": "1.1.4", 206 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", 207 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", 208 | "dev": true 209 | }, 210 | "code-point-at": { 211 | "version": "1.1.0", 212 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 213 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 214 | "dev": true 215 | }, 216 | "color-convert": { 217 | "version": "1.9.3", 218 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 219 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 220 | "dev": true, 221 | "requires": { 222 | "color-name": "1.1.3" 223 | } 224 | }, 225 | "color-name": { 226 | "version": "1.1.3", 227 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 228 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 229 | "dev": true 230 | }, 231 | "commander": { 232 | "version": "2.15.1", 233 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 234 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", 235 | "dev": true 236 | }, 237 | "concat-map": { 238 | "version": "0.0.1", 239 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 240 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 241 | "dev": true 242 | }, 243 | "console-control-strings": { 244 | "version": "1.1.0", 245 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 246 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", 247 | "dev": true 248 | }, 249 | "core-util-is": { 250 | "version": "1.0.3", 251 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 252 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 253 | "dev": true 254 | }, 255 | "css-select": { 256 | "version": "4.2.1", 257 | "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.2.1.tgz", 258 | "integrity": "sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==", 259 | "dev": true, 260 | "requires": { 261 | "boolbase": "^1.0.0", 262 | "css-what": "^5.1.0", 263 | "domhandler": "^4.3.0", 264 | "domutils": "^2.8.0", 265 | "nth-check": "^2.0.1" 266 | } 267 | }, 268 | "css-what": { 269 | "version": "5.1.0", 270 | "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.1.0.tgz", 271 | "integrity": "sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==", 272 | "dev": true 273 | }, 274 | "debug": { 275 | "version": "4.1.1", 276 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", 277 | "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", 278 | "dev": true, 279 | "requires": { 280 | "ms": "^2.1.1" 281 | } 282 | }, 283 | "decompress-response": { 284 | "version": "6.0.0", 285 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", 286 | "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", 287 | "dev": true, 288 | "requires": { 289 | "mimic-response": "^3.1.0" 290 | } 291 | }, 292 | "deep-extend": { 293 | "version": "0.6.0", 294 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 295 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 296 | "dev": true 297 | }, 298 | "delegates": { 299 | "version": "1.0.0", 300 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 301 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", 302 | "dev": true 303 | }, 304 | "detect-libc": { 305 | "version": "2.0.1", 306 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", 307 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", 308 | "dev": true 309 | }, 310 | "diff": { 311 | "version": "3.5.0", 312 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", 313 | "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", 314 | "dev": true 315 | }, 316 | "dom-serializer": { 317 | "version": "1.3.2", 318 | "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", 319 | "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", 320 | "dev": true, 321 | "requires": { 322 | "domelementtype": "^2.0.1", 323 | "domhandler": "^4.2.0", 324 | "entities": "^2.0.0" 325 | } 326 | }, 327 | "domelementtype": { 328 | "version": "2.2.0", 329 | "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", 330 | "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", 331 | "dev": true 332 | }, 333 | "domhandler": { 334 | "version": "4.3.0", 335 | "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.0.tgz", 336 | "integrity": "sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==", 337 | "dev": true, 338 | "requires": { 339 | "domelementtype": "^2.2.0" 340 | } 341 | }, 342 | "domutils": { 343 | "version": "2.8.0", 344 | "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", 345 | "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", 346 | "dev": true, 347 | "requires": { 348 | "dom-serializer": "^1.0.1", 349 | "domelementtype": "^2.2.0", 350 | "domhandler": "^4.2.0" 351 | } 352 | }, 353 | "end-of-stream": { 354 | "version": "1.4.4", 355 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 356 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 357 | "dev": true, 358 | "requires": { 359 | "once": "^1.4.0" 360 | } 361 | }, 362 | "entities": { 363 | "version": "2.2.0", 364 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", 365 | "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", 366 | "dev": true 367 | }, 368 | "es6-promise": { 369 | "version": "4.2.8", 370 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 371 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", 372 | "dev": true 373 | }, 374 | "es6-promisify": { 375 | "version": "5.0.0", 376 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 377 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 378 | "dev": true, 379 | "requires": { 380 | "es6-promise": "^4.0.3" 381 | } 382 | }, 383 | "escape-string-regexp": { 384 | "version": "1.0.5", 385 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 386 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 387 | "dev": true 388 | }, 389 | "expand-template": { 390 | "version": "2.0.3", 391 | "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", 392 | "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", 393 | "dev": true 394 | }, 395 | "fd-slicer": { 396 | "version": "1.1.0", 397 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 398 | "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", 399 | "dev": true, 400 | "requires": { 401 | "pend": "~1.2.0" 402 | } 403 | }, 404 | "fs-constants": { 405 | "version": "1.0.0", 406 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 407 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 408 | "dev": true 409 | }, 410 | "fs.realpath": { 411 | "version": "1.0.0", 412 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 413 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 414 | "dev": true 415 | }, 416 | "function-bind": { 417 | "version": "1.1.1", 418 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 419 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 420 | "dev": true 421 | }, 422 | "gauge": { 423 | "version": "2.7.4", 424 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", 425 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", 426 | "dev": true, 427 | "requires": { 428 | "aproba": "^1.0.3", 429 | "console-control-strings": "^1.0.0", 430 | "has-unicode": "^2.0.0", 431 | "object-assign": "^4.1.0", 432 | "signal-exit": "^3.0.0", 433 | "string-width": "^1.0.1", 434 | "strip-ansi": "^3.0.1", 435 | "wide-align": "^1.1.0" 436 | } 437 | }, 438 | "get-intrinsic": { 439 | "version": "1.1.1", 440 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", 441 | "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", 442 | "dev": true, 443 | "requires": { 444 | "function-bind": "^1.1.1", 445 | "has": "^1.0.3", 446 | "has-symbols": "^1.0.1" 447 | } 448 | }, 449 | "github-from-package": { 450 | "version": "0.0.0", 451 | "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", 452 | "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", 453 | "dev": true 454 | }, 455 | "glob": { 456 | "version": "7.1.6", 457 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 458 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 459 | "dev": true, 460 | "requires": { 461 | "fs.realpath": "^1.0.0", 462 | "inflight": "^1.0.4", 463 | "inherits": "2", 464 | "minimatch": "^3.0.4", 465 | "once": "^1.3.0", 466 | "path-is-absolute": "^1.0.0" 467 | } 468 | }, 469 | "growl": { 470 | "version": "1.10.5", 471 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz", 472 | "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==", 473 | "dev": true 474 | }, 475 | "has": { 476 | "version": "1.0.3", 477 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 478 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 479 | "dev": true, 480 | "requires": { 481 | "function-bind": "^1.1.1" 482 | } 483 | }, 484 | "has-flag": { 485 | "version": "3.0.0", 486 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 487 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 488 | "dev": true 489 | }, 490 | "has-symbols": { 491 | "version": "1.0.3", 492 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 493 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 494 | "dev": true 495 | }, 496 | "has-unicode": { 497 | "version": "2.0.1", 498 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 499 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", 500 | "dev": true 501 | }, 502 | "he": { 503 | "version": "1.1.1", 504 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 505 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 506 | "dev": true 507 | }, 508 | "hosted-git-info": { 509 | "version": "4.1.0", 510 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", 511 | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", 512 | "dev": true, 513 | "requires": { 514 | "lru-cache": "^6.0.0" 515 | } 516 | }, 517 | "htmlparser2": { 518 | "version": "6.1.0", 519 | "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", 520 | "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", 521 | "dev": true, 522 | "requires": { 523 | "domelementtype": "^2.0.1", 524 | "domhandler": "^4.0.0", 525 | "domutils": "^2.5.2", 526 | "entities": "^2.0.0" 527 | } 528 | }, 529 | "http-proxy-agent": { 530 | "version": "4.0.1", 531 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", 532 | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", 533 | "dev": true, 534 | "requires": { 535 | "@tootallnate/once": "1", 536 | "agent-base": "6", 537 | "debug": "4" 538 | } 539 | }, 540 | "https-proxy-agent": { 541 | "version": "5.0.0", 542 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 543 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 544 | "dev": true, 545 | "requires": { 546 | "agent-base": "6", 547 | "debug": "4" 548 | } 549 | }, 550 | "ieee754": { 551 | "version": "1.2.1", 552 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 553 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 554 | "dev": true 555 | }, 556 | "inflight": { 557 | "version": "1.0.6", 558 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 559 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 560 | "dev": true, 561 | "requires": { 562 | "once": "^1.3.0", 563 | "wrappy": "1" 564 | } 565 | }, 566 | "inherits": { 567 | "version": "2.0.4", 568 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 569 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 570 | "dev": true 571 | }, 572 | "ini": { 573 | "version": "1.3.8", 574 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 575 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 576 | "dev": true 577 | }, 578 | "is-fullwidth-code-point": { 579 | "version": "1.0.0", 580 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 581 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 582 | "dev": true, 583 | "requires": { 584 | "number-is-nan": "^1.0.0" 585 | } 586 | }, 587 | "isarray": { 588 | "version": "1.0.0", 589 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 590 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 591 | "dev": true 592 | }, 593 | "keytar": { 594 | "version": "7.9.0", 595 | "resolved": "https://registry.npmjs.org/keytar/-/keytar-7.9.0.tgz", 596 | "integrity": "sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==", 597 | "dev": true, 598 | "requires": { 599 | "node-addon-api": "^4.3.0", 600 | "prebuild-install": "^7.0.1" 601 | } 602 | }, 603 | "leven": { 604 | "version": "3.1.0", 605 | "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", 606 | "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", 607 | "dev": true 608 | }, 609 | "linkify-it": { 610 | "version": "3.0.3", 611 | "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", 612 | "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", 613 | "dev": true, 614 | "requires": { 615 | "uc.micro": "^1.0.1" 616 | } 617 | }, 618 | "lru-cache": { 619 | "version": "6.0.0", 620 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 621 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 622 | "dev": true, 623 | "requires": { 624 | "yallist": "^4.0.0" 625 | } 626 | }, 627 | "markdown-it": { 628 | "version": "12.3.2", 629 | "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", 630 | "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", 631 | "dev": true, 632 | "requires": { 633 | "argparse": "^2.0.1", 634 | "entities": "~2.1.0", 635 | "linkify-it": "^3.0.1", 636 | "mdurl": "^1.0.1", 637 | "uc.micro": "^1.0.5" 638 | }, 639 | "dependencies": { 640 | "entities": { 641 | "version": "2.1.0", 642 | "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", 643 | "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", 644 | "dev": true 645 | } 646 | } 647 | }, 648 | "mdurl": { 649 | "version": "1.0.1", 650 | "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", 651 | "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", 652 | "dev": true 653 | }, 654 | "mime": { 655 | "version": "1.6.0", 656 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 657 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 658 | "dev": true 659 | }, 660 | "mimic-response": { 661 | "version": "3.1.0", 662 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", 663 | "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", 664 | "dev": true 665 | }, 666 | "minimatch": { 667 | "version": "3.0.4", 668 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 669 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 670 | "dev": true, 671 | "requires": { 672 | "brace-expansion": "^1.1.7" 673 | } 674 | }, 675 | "minimist": { 676 | "version": "0.0.8", 677 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 678 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 679 | "dev": true 680 | }, 681 | "mkdirp": { 682 | "version": "0.5.1", 683 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 684 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 685 | "dev": true, 686 | "requires": { 687 | "minimist": "0.0.8" 688 | } 689 | }, 690 | "mkdirp-classic": { 691 | "version": "0.5.3", 692 | "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", 693 | "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", 694 | "dev": true 695 | }, 696 | "mocha": { 697 | "version": "5.2.0", 698 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.2.0.tgz", 699 | "integrity": "sha512-2IUgKDhc3J7Uug+FxMXuqIyYzH7gJjXECKe/w43IGgQHTSj3InJi+yAA7T24L9bQMRKiUEHxEX37G5JpVUGLcQ==", 700 | "dev": true, 701 | "requires": { 702 | "browser-stdout": "1.3.1", 703 | "commander": "2.15.1", 704 | "debug": "3.1.0", 705 | "diff": "3.5.0", 706 | "escape-string-regexp": "1.0.5", 707 | "glob": "7.1.2", 708 | "growl": "1.10.5", 709 | "he": "1.1.1", 710 | "minimatch": "3.0.4", 711 | "mkdirp": "0.5.1", 712 | "supports-color": "5.4.0" 713 | }, 714 | "dependencies": { 715 | "debug": { 716 | "version": "3.1.0", 717 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 718 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 719 | "dev": true, 720 | "requires": { 721 | "ms": "2.0.0" 722 | } 723 | }, 724 | "glob": { 725 | "version": "7.1.2", 726 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", 727 | "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", 728 | "dev": true, 729 | "requires": { 730 | "fs.realpath": "^1.0.0", 731 | "inflight": "^1.0.4", 732 | "inherits": "2", 733 | "minimatch": "^3.0.4", 734 | "once": "^1.3.0", 735 | "path-is-absolute": "^1.0.0" 736 | } 737 | }, 738 | "ms": { 739 | "version": "2.0.0", 740 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 741 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 742 | "dev": true 743 | } 744 | } 745 | }, 746 | "ms": { 747 | "version": "2.1.2", 748 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 749 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 750 | "dev": true 751 | }, 752 | "mute-stream": { 753 | "version": "0.0.8", 754 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", 755 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", 756 | "dev": true 757 | }, 758 | "napi-build-utils": { 759 | "version": "1.0.2", 760 | "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", 761 | "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", 762 | "dev": true 763 | }, 764 | "nginxbeautifier": { 765 | "version": "1.0.19", 766 | "resolved": "https://registry.npmjs.org/nginxbeautifier/-/nginxbeautifier-1.0.19.tgz", 767 | "integrity": "sha512-Gmx8qZbJtemVvHOQEQMu2GrNLwODzs//lWe3h6kFDJpCviObjj3+A4bb21wEhtIrIH4/ZWUCqpkfemEBIMlSvQ==" 768 | }, 769 | "node-abi": { 770 | "version": "3.8.0", 771 | "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.8.0.tgz", 772 | "integrity": "sha512-tzua9qWWi7iW4I42vUPKM+SfaF0vQSLAm4yO5J83mSwB7GeoWrDKC/K+8YCnYNwqP5duwazbw2X9l4m8SC2cUw==", 773 | "dev": true, 774 | "requires": { 775 | "semver": "^7.3.5" 776 | }, 777 | "dependencies": { 778 | "semver": { 779 | "version": "7.3.5", 780 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 781 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 782 | "dev": true, 783 | "requires": { 784 | "lru-cache": "^6.0.0" 785 | } 786 | } 787 | } 788 | }, 789 | "node-addon-api": { 790 | "version": "4.3.0", 791 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", 792 | "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==", 793 | "dev": true 794 | }, 795 | "npmlog": { 796 | "version": "4.1.2", 797 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", 798 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", 799 | "dev": true, 800 | "requires": { 801 | "are-we-there-yet": "~1.1.2", 802 | "console-control-strings": "~1.1.0", 803 | "gauge": "~2.7.3", 804 | "set-blocking": "~2.0.0" 805 | } 806 | }, 807 | "nth-check": { 808 | "version": "2.0.1", 809 | "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", 810 | "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", 811 | "dev": true, 812 | "requires": { 813 | "boolbase": "^1.0.0" 814 | } 815 | }, 816 | "number-is-nan": { 817 | "version": "1.0.1", 818 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 819 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 820 | "dev": true 821 | }, 822 | "object-assign": { 823 | "version": "4.1.1", 824 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 825 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 826 | "dev": true 827 | }, 828 | "object-inspect": { 829 | "version": "1.12.0", 830 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", 831 | "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", 832 | "dev": true 833 | }, 834 | "once": { 835 | "version": "1.4.0", 836 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 837 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 838 | "dev": true, 839 | "requires": { 840 | "wrappy": "1" 841 | } 842 | }, 843 | "parse-semver": { 844 | "version": "1.1.1", 845 | "resolved": "https://registry.npmjs.org/parse-semver/-/parse-semver-1.1.1.tgz", 846 | "integrity": "sha1-mkr9bfBj3Egm+T+6SpnPIj9mbLg=", 847 | "dev": true, 848 | "requires": { 849 | "semver": "^5.1.0" 850 | } 851 | }, 852 | "parse5": { 853 | "version": "6.0.1", 854 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", 855 | "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", 856 | "dev": true 857 | }, 858 | "parse5-htmlparser2-tree-adapter": { 859 | "version": "6.0.1", 860 | "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", 861 | "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", 862 | "dev": true, 863 | "requires": { 864 | "parse5": "^6.0.1" 865 | } 866 | }, 867 | "path-is-absolute": { 868 | "version": "1.0.1", 869 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 870 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 871 | "dev": true 872 | }, 873 | "pend": { 874 | "version": "1.2.0", 875 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 876 | "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", 877 | "dev": true 878 | }, 879 | "prebuild-install": { 880 | "version": "7.0.1", 881 | "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.0.1.tgz", 882 | "integrity": "sha512-QBSab31WqkyxpnMWQxubYAHR5S9B2+r81ucocew34Fkl98FhvKIF50jIJnNOBmAZfyNV7vE5T6gd3hTVWgY6tg==", 883 | "dev": true, 884 | "requires": { 885 | "detect-libc": "^2.0.0", 886 | "expand-template": "^2.0.3", 887 | "github-from-package": "0.0.0", 888 | "minimist": "^1.2.3", 889 | "mkdirp-classic": "^0.5.3", 890 | "napi-build-utils": "^1.0.1", 891 | "node-abi": "^3.3.0", 892 | "npmlog": "^4.0.1", 893 | "pump": "^3.0.0", 894 | "rc": "^1.2.7", 895 | "simple-get": "^4.0.0", 896 | "tar-fs": "^2.0.0", 897 | "tunnel-agent": "^0.6.0" 898 | }, 899 | "dependencies": { 900 | "minimist": { 901 | "version": "1.2.5", 902 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 903 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 904 | "dev": true 905 | } 906 | } 907 | }, 908 | "process-nextick-args": { 909 | "version": "2.0.1", 910 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 911 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 912 | "dev": true 913 | }, 914 | "pump": { 915 | "version": "3.0.0", 916 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 917 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 918 | "dev": true, 919 | "requires": { 920 | "end-of-stream": "^1.1.0", 921 | "once": "^1.3.1" 922 | } 923 | }, 924 | "qs": { 925 | "version": "6.10.3", 926 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", 927 | "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", 928 | "dev": true, 929 | "requires": { 930 | "side-channel": "^1.0.4" 931 | } 932 | }, 933 | "rc": { 934 | "version": "1.2.8", 935 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 936 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 937 | "dev": true, 938 | "requires": { 939 | "deep-extend": "^0.6.0", 940 | "ini": "~1.3.0", 941 | "minimist": "^1.2.0", 942 | "strip-json-comments": "~2.0.1" 943 | }, 944 | "dependencies": { 945 | "minimist": { 946 | "version": "1.2.5", 947 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", 948 | "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", 949 | "dev": true 950 | } 951 | } 952 | }, 953 | "read": { 954 | "version": "1.0.7", 955 | "resolved": "https://registry.npmjs.org/read/-/read-1.0.7.tgz", 956 | "integrity": "sha1-s9oZvQUkMal2cdRKQmNK33ELQMQ=", 957 | "dev": true, 958 | "requires": { 959 | "mute-stream": "~0.0.4" 960 | } 961 | }, 962 | "readable-stream": { 963 | "version": "2.3.7", 964 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 965 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 966 | "dev": true, 967 | "requires": { 968 | "core-util-is": "~1.0.0", 969 | "inherits": "~2.0.3", 970 | "isarray": "~1.0.0", 971 | "process-nextick-args": "~2.0.0", 972 | "safe-buffer": "~5.1.1", 973 | "string_decoder": "~1.1.1", 974 | "util-deprecate": "~1.0.1" 975 | } 976 | }, 977 | "rimraf": { 978 | "version": "3.0.2", 979 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 980 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 981 | "dev": true, 982 | "requires": { 983 | "glob": "^7.1.3" 984 | } 985 | }, 986 | "safe-buffer": { 987 | "version": "5.1.2", 988 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 989 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 990 | "dev": true 991 | }, 992 | "sax": { 993 | "version": "1.2.4", 994 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", 995 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", 996 | "dev": true 997 | }, 998 | "semver": { 999 | "version": "5.7.1", 1000 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 1001 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 1002 | "dev": true 1003 | }, 1004 | "set-blocking": { 1005 | "version": "2.0.0", 1006 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1007 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", 1008 | "dev": true 1009 | }, 1010 | "side-channel": { 1011 | "version": "1.0.4", 1012 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 1013 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 1014 | "dev": true, 1015 | "requires": { 1016 | "call-bind": "^1.0.0", 1017 | "get-intrinsic": "^1.0.2", 1018 | "object-inspect": "^1.9.0" 1019 | } 1020 | }, 1021 | "signal-exit": { 1022 | "version": "3.0.7", 1023 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1024 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 1025 | "dev": true 1026 | }, 1027 | "simple-concat": { 1028 | "version": "1.0.1", 1029 | "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", 1030 | "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", 1031 | "dev": true 1032 | }, 1033 | "simple-get": { 1034 | "version": "4.0.1", 1035 | "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", 1036 | "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", 1037 | "dev": true, 1038 | "requires": { 1039 | "decompress-response": "^6.0.0", 1040 | "once": "^1.3.1", 1041 | "simple-concat": "^1.0.0" 1042 | } 1043 | }, 1044 | "source-map": { 1045 | "version": "0.6.1", 1046 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1047 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1048 | "dev": true 1049 | }, 1050 | "source-map-support": { 1051 | "version": "0.5.19", 1052 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1053 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1054 | "dev": true, 1055 | "requires": { 1056 | "buffer-from": "^1.0.0", 1057 | "source-map": "^0.6.0" 1058 | } 1059 | }, 1060 | "string-width": { 1061 | "version": "1.0.2", 1062 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1063 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1064 | "dev": true, 1065 | "requires": { 1066 | "code-point-at": "^1.0.0", 1067 | "is-fullwidth-code-point": "^1.0.0", 1068 | "strip-ansi": "^3.0.0" 1069 | } 1070 | }, 1071 | "string_decoder": { 1072 | "version": "1.1.1", 1073 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1074 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1075 | "dev": true, 1076 | "requires": { 1077 | "safe-buffer": "~5.1.0" 1078 | } 1079 | }, 1080 | "strip-ansi": { 1081 | "version": "3.0.1", 1082 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1083 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1084 | "dev": true, 1085 | "requires": { 1086 | "ansi-regex": "^2.0.0" 1087 | } 1088 | }, 1089 | "strip-json-comments": { 1090 | "version": "2.0.1", 1091 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1092 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1093 | "dev": true 1094 | }, 1095 | "supports-color": { 1096 | "version": "5.4.0", 1097 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", 1098 | "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", 1099 | "dev": true, 1100 | "requires": { 1101 | "has-flag": "^3.0.0" 1102 | } 1103 | }, 1104 | "tar-fs": { 1105 | "version": "2.1.1", 1106 | "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", 1107 | "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", 1108 | "dev": true, 1109 | "requires": { 1110 | "chownr": "^1.1.1", 1111 | "mkdirp-classic": "^0.5.2", 1112 | "pump": "^3.0.0", 1113 | "tar-stream": "^2.1.4" 1114 | } 1115 | }, 1116 | "tar-stream": { 1117 | "version": "2.2.0", 1118 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", 1119 | "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", 1120 | "dev": true, 1121 | "requires": { 1122 | "bl": "^4.0.3", 1123 | "end-of-stream": "^1.4.1", 1124 | "fs-constants": "^1.0.0", 1125 | "inherits": "^2.0.3", 1126 | "readable-stream": "^3.1.1" 1127 | }, 1128 | "dependencies": { 1129 | "readable-stream": { 1130 | "version": "3.6.0", 1131 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 1132 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 1133 | "dev": true, 1134 | "requires": { 1135 | "inherits": "^2.0.3", 1136 | "string_decoder": "^1.1.1", 1137 | "util-deprecate": "^1.0.1" 1138 | } 1139 | } 1140 | } 1141 | }, 1142 | "tmp": { 1143 | "version": "0.2.1", 1144 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", 1145 | "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", 1146 | "dev": true, 1147 | "requires": { 1148 | "rimraf": "^3.0.0" 1149 | } 1150 | }, 1151 | "tslib": { 1152 | "version": "2.3.1", 1153 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", 1154 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==", 1155 | "dev": true 1156 | }, 1157 | "tunnel": { 1158 | "version": "0.0.6", 1159 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1160 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 1161 | "dev": true 1162 | }, 1163 | "tunnel-agent": { 1164 | "version": "0.6.0", 1165 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1166 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", 1167 | "dev": true, 1168 | "requires": { 1169 | "safe-buffer": "^5.0.1" 1170 | } 1171 | }, 1172 | "typed-rest-client": { 1173 | "version": "1.8.6", 1174 | "resolved": "https://registry.npmjs.org/typed-rest-client/-/typed-rest-client-1.8.6.tgz", 1175 | "integrity": "sha512-xcQpTEAJw2DP7GqVNECh4dD+riS+C1qndXLfBCJ3xk0kqprtGN491P5KlmrDbKdtuW8NEcP/5ChxiJI3S9WYTA==", 1176 | "dev": true, 1177 | "requires": { 1178 | "qs": "^6.9.1", 1179 | "tunnel": "0.0.6", 1180 | "underscore": "^1.12.1" 1181 | } 1182 | }, 1183 | "typescript": { 1184 | "version": "4.6.3", 1185 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", 1186 | "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", 1187 | "dev": true 1188 | }, 1189 | "uc.micro": { 1190 | "version": "1.0.6", 1191 | "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", 1192 | "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", 1193 | "dev": true 1194 | }, 1195 | "underscore": { 1196 | "version": "1.13.2", 1197 | "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.2.tgz", 1198 | "integrity": "sha512-ekY1NhRzq0B08g4bGuX4wd2jZx5GnKz6mKSqFL4nqBlfyMGiG10gDFhDTMEfYmDL6Jy0FUIZp7wiRB+0BP7J2g==", 1199 | "dev": true 1200 | }, 1201 | "url-join": { 1202 | "version": "4.0.1", 1203 | "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", 1204 | "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", 1205 | "dev": true 1206 | }, 1207 | "util-deprecate": { 1208 | "version": "1.0.2", 1209 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1210 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1211 | "dev": true 1212 | }, 1213 | "vsce": { 1214 | "version": "2.7.0", 1215 | "resolved": "https://registry.npmjs.org/vsce/-/vsce-2.7.0.tgz", 1216 | "integrity": "sha512-CKU34wrQlbKDeJCRBkd1a8iwF9EvNxcYMg9hAUH6AxFGR6Wo2IKWwt3cJIcusHxx6XdjDHWlfAS/fJN30uvVnA==", 1217 | "dev": true, 1218 | "requires": { 1219 | "azure-devops-node-api": "^11.0.1", 1220 | "chalk": "^2.4.2", 1221 | "cheerio": "^1.0.0-rc.9", 1222 | "commander": "^6.1.0", 1223 | "glob": "^7.0.6", 1224 | "hosted-git-info": "^4.0.2", 1225 | "keytar": "^7.7.0", 1226 | "leven": "^3.1.0", 1227 | "markdown-it": "^12.3.2", 1228 | "mime": "^1.3.4", 1229 | "minimatch": "^3.0.3", 1230 | "parse-semver": "^1.1.1", 1231 | "read": "^1.0.7", 1232 | "semver": "^5.1.0", 1233 | "tmp": "^0.2.1", 1234 | "typed-rest-client": "^1.8.4", 1235 | "url-join": "^4.0.1", 1236 | "xml2js": "^0.4.23", 1237 | "yauzl": "^2.3.1", 1238 | "yazl": "^2.2.2" 1239 | }, 1240 | "dependencies": { 1241 | "commander": { 1242 | "version": "6.2.1", 1243 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz", 1244 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==", 1245 | "dev": true 1246 | } 1247 | } 1248 | }, 1249 | "vscode": { 1250 | "version": "1.1.37", 1251 | "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.37.tgz", 1252 | "integrity": "sha512-vJNj6IlN7IJPdMavlQa1KoFB3Ihn06q1AiN3ZFI/HfzPNzbKZWPPuiU+XkpNOfGU5k15m4r80nxNPlM7wcc0wg==", 1253 | "dev": true, 1254 | "requires": { 1255 | "glob": "^7.1.2", 1256 | "http-proxy-agent": "^4.0.1", 1257 | "https-proxy-agent": "^5.0.0", 1258 | "mocha": "^5.2.0", 1259 | "semver": "^5.4.1", 1260 | "source-map-support": "^0.5.0", 1261 | "vscode-test": "^0.4.1" 1262 | } 1263 | }, 1264 | "vscode-test": { 1265 | "version": "0.4.3", 1266 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-0.4.3.tgz", 1267 | "integrity": "sha512-EkMGqBSefZH2MgW65nY05rdRSko15uvzq4VAPM5jVmwYuFQKE7eikKXNJDRxL+OITXHB6pI+a3XqqD32Y3KC5w==", 1268 | "dev": true, 1269 | "requires": { 1270 | "http-proxy-agent": "^2.1.0", 1271 | "https-proxy-agent": "^2.2.1" 1272 | }, 1273 | "dependencies": { 1274 | "agent-base": { 1275 | "version": "4.3.0", 1276 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 1277 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 1278 | "dev": true, 1279 | "requires": { 1280 | "es6-promisify": "^5.0.0" 1281 | } 1282 | }, 1283 | "debug": { 1284 | "version": "3.1.0", 1285 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 1286 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 1287 | "dev": true, 1288 | "requires": { 1289 | "ms": "2.0.0" 1290 | } 1291 | }, 1292 | "http-proxy-agent": { 1293 | "version": "2.1.0", 1294 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", 1295 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", 1296 | "dev": true, 1297 | "requires": { 1298 | "agent-base": "4", 1299 | "debug": "3.1.0" 1300 | } 1301 | }, 1302 | "https-proxy-agent": { 1303 | "version": "2.2.4", 1304 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", 1305 | "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", 1306 | "dev": true, 1307 | "requires": { 1308 | "agent-base": "^4.3.0", 1309 | "debug": "^3.1.0" 1310 | } 1311 | }, 1312 | "ms": { 1313 | "version": "2.0.0", 1314 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1315 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 1316 | "dev": true 1317 | } 1318 | } 1319 | }, 1320 | "wide-align": { 1321 | "version": "1.1.5", 1322 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 1323 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 1324 | "dev": true, 1325 | "requires": { 1326 | "string-width": "^1.0.2 || 2 || 3 || 4" 1327 | } 1328 | }, 1329 | "wrappy": { 1330 | "version": "1.0.2", 1331 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1332 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1333 | "dev": true 1334 | }, 1335 | "xml2js": { 1336 | "version": "0.4.23", 1337 | "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", 1338 | "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", 1339 | "dev": true, 1340 | "requires": { 1341 | "sax": ">=0.6.0", 1342 | "xmlbuilder": "~11.0.0" 1343 | } 1344 | }, 1345 | "xmlbuilder": { 1346 | "version": "11.0.1", 1347 | "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", 1348 | "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", 1349 | "dev": true 1350 | }, 1351 | "yallist": { 1352 | "version": "4.0.0", 1353 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1354 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 1355 | "dev": true 1356 | }, 1357 | "yauzl": { 1358 | "version": "2.10.0", 1359 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 1360 | "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", 1361 | "dev": true, 1362 | "requires": { 1363 | "buffer-crc32": "~0.2.3", 1364 | "fd-slicer": "~1.1.0" 1365 | } 1366 | }, 1367 | "yazl": { 1368 | "version": "2.5.1", 1369 | "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", 1370 | "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", 1371 | "dev": true, 1372 | "requires": { 1373 | "buffer-crc32": "~0.2.3" 1374 | } 1375 | } 1376 | } 1377 | } 1378 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nginx-formatter", 3 | "displayName": "nginx-formatter", 4 | "description": "Formats Nginx Configuration", 5 | "version": "0.0.13", 6 | "publisher": "raynigon", 7 | "license": "SEE LICENSE IN LICENSE.md", 8 | "icon": "images/nginx.png", 9 | "galleryBanner": { 10 | "color": "#1289B9", 11 | "theme": "dark" 12 | }, 13 | "keywords": [ 14 | "nginx", 15 | "format", 16 | "formatter", 17 | "configuration" 18 | ], 19 | "engines": { 20 | "vscode": "^1.6.0" 21 | }, 22 | "categories": [ 23 | "Formatters" 24 | ], 25 | "activationEvents": [ 26 | "onLanguage:NGINX", 27 | "onLanguage:NGINX Conf", 28 | "onLanguage:nginx" 29 | ], 30 | "repository": { 31 | "type": "git", 32 | "url": "https://github.com/raynigon/vscode-nginx-formatter" 33 | }, 34 | "main": "./out/src/extension", 35 | "contributes": { 36 | "languages": [ 37 | { 38 | "id": "nginx", 39 | "aliases": [ 40 | "NGINX Conf", 41 | "NGINX", 42 | "nginx" 43 | ], 44 | "extensions": [ 45 | "nginx.conf", 46 | ".conf", 47 | ".nginx" 48 | ], 49 | "configuration": "./language-configuration.json" 50 | } 51 | ], 52 | "commands": [] 53 | }, 54 | "extensionDependencies": [ 55 | "ahmadalli.vscode-nginx-conf" 56 | ], 57 | "scripts": { 58 | "vscode:prepublish": "npm run compile", 59 | "compile": "tsc -p ./", 60 | "lint": "tslint -p ./", 61 | "watch": "tsc -watch -p ./", 62 | "postinstall": "node ./node_modules/vscode/bin/install && tsc", 63 | "package": "vsce package", 64 | "publish": "vsce publish" 65 | }, 66 | "dependencies": { 67 | "nginxbeautifier": "1.0.19" 68 | }, 69 | "devDependencies": { 70 | "@types/node": "17.0.23", 71 | "typescript": "4.6.3", 72 | "vsce": "^2.7.0", 73 | "vscode": "1.1.37" 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | 3 | import * as vscode from "vscode"; 4 | import * as nginxbeautifier from "nginxbeautifier"; 5 | import { FormattingOptions } from "vscode"; 6 | 7 | function formatText(text: string) { 8 | let lines = nginxbeautifier.clean_lines(text); 9 | lines = nginxbeautifier.join_opening_bracket(lines); 10 | lines = nginxbeautifier.perform_indentation(lines); 11 | // Disable perform_alignment due to Bug in Library 12 | // lines = nginxbeautifier.perform_alignment(lines); 13 | return lines.join("\n"); 14 | } 15 | 16 | function replaceTextInDocument(newText: string, document: vscode.TextDocument) { 17 | const firstLine = document.lineAt(0); 18 | const lastLine = document.lineAt(document.lineCount - 1); 19 | const range = new vscode.Range( 20 | 0, 21 | firstLine.range.start.character, 22 | document.lineCount - 1, 23 | lastLine.range.end.character 24 | ); 25 | return vscode.TextEdit.replace(range, newText); 26 | } 27 | 28 | export function activate(context: vscode.ExtensionContext) { 29 | // 👍 formatter implemented using API 30 | vscode.languages.registerDocumentFormattingEditProvider("nginx", { 31 | async provideDocumentFormattingEdits( 32 | document: vscode.TextDocument, 33 | options: FormattingOptions 34 | ): Promise { 35 | nginxbeautifier.modifyOptions({ 36 | INDENTATION: options.insertSpaces ? " ".repeat(options.tabSize) : "\t" 37 | }); 38 | const text = formatText(document.getText()); 39 | return [replaceTextInDocument(text, document)]; 40 | } 41 | }); 42 | } 43 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es5", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "." 11 | }, 12 | "exclude": [ 13 | "node_modules", 14 | ".vscode-test" 15 | ] 16 | } 17 | --------------------------------------------------------------------------------