├── .eslintrc.cjs ├── .github └── workflows │ ├── node.js.yml │ └── npm-publish.yml ├── .gitignore ├── .npmignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── bin └── cli.js ├── elm.json ├── package.json ├── pnpm-lock.yaml ├── src ├── DocTest.elm ├── Main.elm ├── bridge.js ├── main.js └── util.js └── test ├── ParamTest.elm ├── ParamTest2.elm ├── RandomTest.elm ├── TestData.elm ├── TestData ├── TestFail.elm └── TestFail2.elm ├── TestView.elm └── run.js /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: ['eslint:recommended', 'prettier'], 4 | settings: {}, 5 | rules: { 6 | 'no-unused-vars': [2, { argsIgnorePattern: '^_' }], 7 | }, 8 | ignorePatterns: ['elm.js'], 9 | parserOptions: { 10 | sourceType: 'module', 11 | ecmaVersion: 2019, 12 | }, 13 | env: { 14 | browser: false, 15 | es2017: true, 16 | node: true, 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /.github/workflows/node.js.yml: -------------------------------------------------------------------------------- 1 | name: Node.js CI 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | build: 11 | runs-on: ubuntu-latest 12 | 13 | strategy: 14 | matrix: 15 | node-version: [14.x, 16.x] 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | - uses: pnpm/action-setup@v2.1.0 20 | with: 21 | version: 7.1.1 22 | - name: Use Node.js ${{ matrix.node-version }} 23 | uses: actions/setup-node@v3 24 | with: 25 | node-version: ${{ matrix.node-version }} 26 | cache: 'pnpm' 27 | - run: pnpm install --frozen-lockfile 28 | - run: pnpm build 29 | - run: pnpm test 30 | -------------------------------------------------------------------------------- /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | name: NPM publish 2 | 3 | on: 4 | release: 5 | types: [created] 6 | 7 | jobs: 8 | publish-npm: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v3 12 | - uses: pnpm/action-setup@v2.1.0 13 | with: 14 | version: 7.1.1 15 | # required to publish to npm 16 | - uses: actions/setup-node@v3 17 | with: 18 | node-version: 16 19 | registry-url: https://registry.npmjs.org/ 20 | - run: pnpm install --frozen-lockfile 21 | - run: pnpm build 22 | - run: pnpm publish 23 | env: 24 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 25 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | elm-stuff/ 3 | .*.vim 4 | .tmp* 5 | distribution 6 | tmp 7 | src/elm.js 8 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | yarn.lock 3 | .vscode/* 4 | test/* 5 | src/*.elm 6 | elm.json 7 | *.tgz 8 | elm-stuff/ 9 | .*.vim 10 | .tmp* 11 | distribution 12 | tmp 13 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # 0.0.1 2 | 3 | - initial working version 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright © 2016-2022 Toshihide Satake 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | 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, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Build Status](https://github.com/tshm/elm-doctest/actions/workflows/node.js.yml/badge.svg)](https://github.com/tshm/elm-doctest/actions/workflows/node.js.yml) 2 | [![npm version](https://badge.fury.io/js/elm-doctest.svg)](https://badge.fury.io/js/elm-doctest) 3 | 4 | # elm-doctest 5 | 6 | [doctest](https://en.wikipedia.org/wiki/Docstring) 7 | runner against Elm-lang source files 8 | 9 | ## installation 10 | 11 | ```shell 12 | npm install elm-doctest 13 | ``` 14 | 15 | It depends on `elm` and assumes that `elm-make` and `elm-repl` are available 16 | either via systemwide installation or npm module installation. 17 | Make sure `elm-make` succeeds with your elm source files. 18 | 19 | ## how does it work? 20 | 21 | It utilizes `elm-repl` for expression evaluation and compare the values 22 | against the expected value. 23 | (It does not comapre stringified values like haskell doctest does via 24 | GHCi outputs.) 25 | 26 | It only evaluates the expressions that follows `-- >>>` 27 | (i.e. Elm comment symbol followed by space and three LT chars 28 | until end of the line) 29 | and the expression on the next line after `-- `. 30 | 31 | For example, if the comment states: 32 | 33 | ```Elm 34 | -- >>> x = 35 | -- >>> 1 + 2 36 | -- 37 | -- >>> x * 2 38 | -- 6 39 | ``` 40 | 41 | Then, elm-doctest asks elm-repl to evaluate the 42 | actual code section in the source file and 43 | effectively following expression: 44 | 45 | ```Elm 46 | ((1 + 2) * 2) == (6) 47 | ``` 48 | 49 | If value reported by `elm-repl` is `True` then test passes, fail otherwise. 50 | 51 | ## usage 52 | 53 | ``` 54 | Usage: elm-doctest [--watch] [--help] [--elm-path PATH] 55 | [--pretest CMD] FILES... 56 | run doctest against given Elm files 57 | 58 | Available options: 59 | -h,--help Show this help text 60 | --pretest CMD Command to run before doc-test 61 | --elm-path PATH Path to elm executable 62 | -w,--watch Watch and run tests when target files get updated 63 | ``` 64 | 65 | ## example 66 | 67 | ModuleTobeTested.elm: 68 | 69 | ```Elm 70 | module ModuleTobeTested exposing(..) 71 | 72 | -- | 73 | -- >>> add 3 5 74 | -- 8 75 | -- 76 | -- >>> removeZeros [0, 1, 2, 3, 0] 77 | -- [1, 2, 3] 78 | -- 79 | -- >>> greetingTo "World" 80 | -- "Konnichiwa World" 81 | -- 82 | add : Int -> Int -> Int 83 | add x y = x + y 84 | 85 | greetingTo : String -> String 86 | greetingTo x = "Hello " ++ x 87 | 88 | removeZeros : List Int -> List Int 89 | removeZeros = List.filter (\x -> x /= 0) 90 | ``` 91 | 92 | evaluation `elm-doctest ModuleTobeTested.elm` outputs 93 | 94 | ``` 95 | Starting elm-doctest ... 96 | 97 | processing: test/TestData/TestFail.elm 98 | ### Failure in test/TestData/TestFail.elm:10: expression 99 | greetingTo "World" 100 | expected: "Konnichiwa World" 101 | but got: "Hello World" 102 | Examples: 3 Failures: 1 103 | ``` 104 | 105 | ## limitation 106 | 107 | As it utilizes `elm-repl`, the script must be runnable 108 | inside `elm-repl`. 109 | For example, code which imports `elm-lang/navigation@1.0.0` 110 | module cannot be tested. 111 | Since the stdout is used to evaluate the test result, 112 | avoid using `Debug.log`. 113 | 114 | Also, make sure elm-make runs without error. 115 | You can auto run elm-make by using `--pretest` command-line 116 | option. 117 | 118 | ## license 119 | 120 | MIT 121 | -------------------------------------------------------------------------------- /bin/cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | require('../src/main.js') 3 | -------------------------------------------------------------------------------- /elm.json: -------------------------------------------------------------------------------- 1 | { 2 | "type": "application", 3 | "source-directories": ["./src", "./test"], 4 | "elm-version": "0.19.1", 5 | "dependencies": { 6 | "direct": { 7 | "elm/core": "1.0.0", 8 | "elm/json": "1.0.0", 9 | "elm/random": "1.0.0", 10 | "elm/regex": "1.0.0" 11 | }, 12 | "indirect": { 13 | "elm/time": "1.0.0" 14 | } 15 | }, 16 | "test-dependencies": { 17 | "direct": {}, 18 | "indirect": {} 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "elm-doctest", 3 | "version": "0.4.2", 4 | "description": "doctest for elm", 5 | "main": "./src/bridge.js", 6 | "bin": { 7 | "elm-doctest": "./bin/cli.js" 8 | }, 9 | "prettier": { 10 | "singleQuote": true, 11 | "semi": false 12 | }, 13 | "devDependencies": { 14 | "elm": "0.19.1-5", 15 | "elm-format": "^0.8.5", 16 | "eslint": "^8.16.0", 17 | "eslint-config-prettier": "^8.5.0", 18 | "npm-check": "^5.9.2", 19 | "prettier": "^2.6.2", 20 | "shelljs": "^0.8.5" 21 | }, 22 | "scripts": { 23 | "dist": "npm run build", 24 | "build": "elm make --optimize src/Main.elm --output ./src/elm.js", 25 | "check": "npm-check -s -p", 26 | "lint": "eslint --fix src/bridge.js src/main.js src/util.js && prettier --write .", 27 | "pretest": "npm run build && npm run check && npm run lint", 28 | "test": "node ./test/run.js" 29 | }, 30 | "repository": { 31 | "type": "git", 32 | "url": "git+https://github.com/tshm/elm-doctest.git" 33 | }, 34 | "author": "Toshihide Satake <2sm@csc.jp>", 35 | "license": "MIT", 36 | "bugs": { 37 | "url": "https://github.com/tshm/elm-doctest/issues" 38 | }, 39 | "homepage": "https://github.com/tshm/elm-doctest#readme", 40 | "keywords": [ 41 | "cli", 42 | "tool", 43 | "elm", 44 | "doctest" 45 | ], 46 | "dependencies": { 47 | "chokidar": "^3.5.3", 48 | "minimist": "^1.2.6" 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | chokidar: ^3.5.3 5 | elm: 0.19.1-5 6 | elm-format: ^0.8.5 7 | eslint: ^8.16.0 8 | eslint-config-prettier: ^8.5.0 9 | minimist: ^1.2.6 10 | npm-check: ^5.9.2 11 | prettier: ^2.6.2 12 | shelljs: ^0.8.5 13 | 14 | dependencies: 15 | chokidar: 3.5.3 16 | minimist: 1.2.6 17 | 18 | devDependencies: 19 | elm: 0.19.1-5 20 | elm-format: 0.8.5 21 | eslint: 8.16.0 22 | eslint-config-prettier: 8.5.0_eslint@8.16.0 23 | npm-check: 5.9.2 24 | prettier: 2.6.2 25 | shelljs: 0.8.5 26 | 27 | packages: 28 | /@babel/code-frame/7.16.7: 29 | resolution: 30 | { 31 | integrity: sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==, 32 | } 33 | engines: { node: '>=6.9.0' } 34 | dependencies: 35 | '@babel/highlight': 7.17.12 36 | dev: true 37 | 38 | /@babel/generator/7.18.2: 39 | resolution: 40 | { 41 | integrity: sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==, 42 | } 43 | engines: { node: '>=6.9.0' } 44 | dependencies: 45 | '@babel/types': 7.18.2 46 | '@jridgewell/gen-mapping': 0.3.1 47 | jsesc: 2.5.2 48 | dev: true 49 | 50 | /@babel/helper-environment-visitor/7.18.2: 51 | resolution: 52 | { 53 | integrity: sha512-14GQKWkX9oJzPiQQ7/J36FTXcD4kSp8egKjO9nINlSKiHITRA9q/R74qu8S9xlc/b/yjsJItQUeeh3xnGN0voQ==, 54 | } 55 | engines: { node: '>=6.9.0' } 56 | dev: true 57 | 58 | /@babel/helper-function-name/7.17.9: 59 | resolution: 60 | { 61 | integrity: sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==, 62 | } 63 | engines: { node: '>=6.9.0' } 64 | dependencies: 65 | '@babel/template': 7.16.7 66 | '@babel/types': 7.18.2 67 | dev: true 68 | 69 | /@babel/helper-hoist-variables/7.16.7: 70 | resolution: 71 | { 72 | integrity: sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==, 73 | } 74 | engines: { node: '>=6.9.0' } 75 | dependencies: 76 | '@babel/types': 7.18.2 77 | dev: true 78 | 79 | /@babel/helper-split-export-declaration/7.16.7: 80 | resolution: 81 | { 82 | integrity: sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==, 83 | } 84 | engines: { node: '>=6.9.0' } 85 | dependencies: 86 | '@babel/types': 7.18.2 87 | dev: true 88 | 89 | /@babel/helper-validator-identifier/7.16.7: 90 | resolution: 91 | { 92 | integrity: sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==, 93 | } 94 | engines: { node: '>=6.9.0' } 95 | dev: true 96 | 97 | /@babel/highlight/7.17.12: 98 | resolution: 99 | { 100 | integrity: sha512-7yykMVF3hfZY2jsHZEEgLc+3x4o1O+fYyULu11GynEUQNwB6lua+IIQn1FiJxNucd5UlyJryrwsOh8PL9Sn8Qg==, 101 | } 102 | engines: { node: '>=6.9.0' } 103 | dependencies: 104 | '@babel/helper-validator-identifier': 7.16.7 105 | chalk: 2.4.2 106 | js-tokens: 4.0.0 107 | dev: true 108 | 109 | /@babel/parser/7.18.3: 110 | resolution: 111 | { 112 | integrity: sha512-rL50YcEuHbbauAFAysNsJA4/f89fGTOBRNs9P81sniKnKAr4xULe5AecolcsKbi88xu0ByWYDj/S1AJ3FSFuSQ==, 113 | } 114 | engines: { node: '>=6.0.0' } 115 | hasBin: true 116 | dependencies: 117 | '@babel/types': 7.18.2 118 | dev: true 119 | 120 | /@babel/template/7.16.7: 121 | resolution: 122 | { 123 | integrity: sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==, 124 | } 125 | engines: { node: '>=6.9.0' } 126 | dependencies: 127 | '@babel/code-frame': 7.16.7 128 | '@babel/parser': 7.18.3 129 | '@babel/types': 7.18.2 130 | dev: true 131 | 132 | /@babel/traverse/7.18.2: 133 | resolution: 134 | { 135 | integrity: sha512-9eNwoeovJ6KH9zcCNnENY7DMFwTU9JdGCFtqNLfUAqtUHRCOsTOqWoffosP8vKmNYeSBUv3yVJXjfd8ucwOjUA==, 136 | } 137 | engines: { node: '>=6.9.0' } 138 | dependencies: 139 | '@babel/code-frame': 7.16.7 140 | '@babel/generator': 7.18.2 141 | '@babel/helper-environment-visitor': 7.18.2 142 | '@babel/helper-function-name': 7.17.9 143 | '@babel/helper-hoist-variables': 7.16.7 144 | '@babel/helper-split-export-declaration': 7.16.7 145 | '@babel/parser': 7.18.3 146 | '@babel/types': 7.18.2 147 | debug: 4.3.4 148 | globals: 11.12.0 149 | transitivePeerDependencies: 150 | - supports-color 151 | dev: true 152 | 153 | /@babel/types/7.18.2: 154 | resolution: 155 | { 156 | integrity: sha512-0On6B8A4/+mFUto5WERt3EEuG1NznDirvwca1O8UwXQHVY8g3R7OzYgxXdOfMwLO08UrpUD/2+3Bclyq+/C94Q==, 157 | } 158 | engines: { node: '>=6.9.0' } 159 | dependencies: 160 | '@babel/helper-validator-identifier': 7.16.7 161 | to-fast-properties: 2.0.0 162 | dev: true 163 | 164 | /@eslint/eslintrc/1.3.0: 165 | resolution: 166 | { 167 | integrity: sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==, 168 | } 169 | engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } 170 | dependencies: 171 | ajv: 6.12.6 172 | debug: 4.3.4 173 | espree: 9.3.2 174 | globals: 13.15.0 175 | ignore: 5.2.0 176 | import-fresh: 3.3.0 177 | js-yaml: 4.1.0 178 | minimatch: 3.1.2 179 | strip-json-comments: 3.1.1 180 | transitivePeerDependencies: 181 | - supports-color 182 | dev: true 183 | 184 | /@humanwhocodes/config-array/0.9.5: 185 | resolution: 186 | { 187 | integrity: sha512-ObyMyWxZiCu/yTisA7uzx81s40xR2fD5Cg/2Kq7G02ajkNubJf6BopgDTmDyc3U7sXpNKM8cYOw7s7Tyr+DnCw==, 188 | } 189 | engines: { node: '>=10.10.0' } 190 | dependencies: 191 | '@humanwhocodes/object-schema': 1.2.1 192 | debug: 4.3.4 193 | minimatch: 3.1.2 194 | transitivePeerDependencies: 195 | - supports-color 196 | dev: true 197 | 198 | /@humanwhocodes/object-schema/1.2.1: 199 | resolution: 200 | { 201 | integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==, 202 | } 203 | dev: true 204 | 205 | /@jridgewell/gen-mapping/0.3.1: 206 | resolution: 207 | { 208 | integrity: sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==, 209 | } 210 | engines: { node: '>=6.0.0' } 211 | dependencies: 212 | '@jridgewell/set-array': 1.1.1 213 | '@jridgewell/sourcemap-codec': 1.4.13 214 | '@jridgewell/trace-mapping': 0.3.13 215 | dev: true 216 | 217 | /@jridgewell/resolve-uri/3.0.7: 218 | resolution: 219 | { 220 | integrity: sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==, 221 | } 222 | engines: { node: '>=6.0.0' } 223 | dev: true 224 | 225 | /@jridgewell/set-array/1.1.1: 226 | resolution: 227 | { 228 | integrity: sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==, 229 | } 230 | engines: { node: '>=6.0.0' } 231 | dev: true 232 | 233 | /@jridgewell/sourcemap-codec/1.4.13: 234 | resolution: 235 | { 236 | integrity: sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==, 237 | } 238 | dev: true 239 | 240 | /@jridgewell/trace-mapping/0.3.13: 241 | resolution: 242 | { 243 | integrity: sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==, 244 | } 245 | dependencies: 246 | '@jridgewell/resolve-uri': 3.0.7 247 | '@jridgewell/sourcemap-codec': 1.4.13 248 | dev: true 249 | 250 | /@types/keyv/3.1.4: 251 | resolution: 252 | { 253 | integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==, 254 | } 255 | dependencies: 256 | '@types/node': 17.0.35 257 | dev: true 258 | 259 | /@types/node/17.0.35: 260 | resolution: 261 | { 262 | integrity: sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==, 263 | } 264 | dev: true 265 | 266 | /@types/responselike/1.0.0: 267 | resolution: 268 | { 269 | integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==, 270 | } 271 | dependencies: 272 | '@types/node': 17.0.35 273 | dev: true 274 | 275 | /acorn-jsx/5.3.2_acorn@8.7.1: 276 | resolution: 277 | { 278 | integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==, 279 | } 280 | peerDependencies: 281 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 282 | dependencies: 283 | acorn: 8.7.1 284 | dev: true 285 | 286 | /acorn/8.7.1: 287 | resolution: 288 | { 289 | integrity: sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==, 290 | } 291 | engines: { node: '>=0.4.0' } 292 | hasBin: true 293 | dev: true 294 | 295 | /ajv/6.12.6: 296 | resolution: 297 | { 298 | integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, 299 | } 300 | dependencies: 301 | fast-deep-equal: 3.1.3 302 | fast-json-stable-stringify: 2.1.0 303 | json-schema-traverse: 0.4.1 304 | uri-js: 4.4.1 305 | dev: true 306 | 307 | /ansi-align/2.0.0: 308 | resolution: 309 | { 310 | integrity: sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA==, 311 | } 312 | dependencies: 313 | string-width: 2.1.1 314 | dev: true 315 | 316 | /ansi-escapes/1.4.0: 317 | resolution: 318 | { 319 | integrity: sha512-wiXutNjDUlNEDWHcYH3jtZUhd3c4/VojassD8zHdHCY13xbZy2XbW+NKQwA0tWGBVzDA9qEzYwfoSsWmviidhw==, 320 | } 321 | engines: { node: '>=0.10.0' } 322 | dev: true 323 | 324 | /ansi-regex/2.1.1: 325 | resolution: 326 | { 327 | integrity: sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==, 328 | } 329 | engines: { node: '>=0.10.0' } 330 | dev: true 331 | 332 | /ansi-regex/3.0.1: 333 | resolution: 334 | { 335 | integrity: sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==, 336 | } 337 | engines: { node: '>=4' } 338 | dev: true 339 | 340 | /ansi-regex/4.1.1: 341 | resolution: 342 | { 343 | integrity: sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==, 344 | } 345 | engines: { node: '>=6' } 346 | dev: true 347 | 348 | /ansi-regex/5.0.1: 349 | resolution: 350 | { 351 | integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, 352 | } 353 | engines: { node: '>=8' } 354 | dev: true 355 | 356 | /ansi-styles/2.2.1: 357 | resolution: 358 | { 359 | integrity: sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==, 360 | } 361 | engines: { node: '>=0.10.0' } 362 | dev: true 363 | 364 | /ansi-styles/3.2.1: 365 | resolution: 366 | { 367 | integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, 368 | } 369 | engines: { node: '>=4' } 370 | dependencies: 371 | color-convert: 1.9.3 372 | dev: true 373 | 374 | /ansi-styles/4.3.0: 375 | resolution: 376 | { 377 | integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, 378 | } 379 | engines: { node: '>=8' } 380 | dependencies: 381 | color-convert: 2.0.1 382 | dev: true 383 | 384 | /anymatch/3.1.2: 385 | resolution: 386 | { 387 | integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==, 388 | } 389 | engines: { node: '>= 8' } 390 | dependencies: 391 | normalize-path: 3.0.0 392 | picomatch: 2.3.1 393 | dev: false 394 | 395 | /argparse/1.0.10: 396 | resolution: 397 | { 398 | integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==, 399 | } 400 | dependencies: 401 | sprintf-js: 1.0.3 402 | dev: true 403 | 404 | /argparse/2.0.1: 405 | resolution: 406 | { 407 | integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==, 408 | } 409 | dev: true 410 | 411 | /array-find-index/1.0.2: 412 | resolution: 413 | { 414 | integrity: sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==, 415 | } 416 | engines: { node: '>=0.10.0' } 417 | dev: true 418 | 419 | /array-union/1.0.2: 420 | resolution: 421 | { 422 | integrity: sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==, 423 | } 424 | engines: { node: '>=0.10.0' } 425 | dependencies: 426 | array-uniq: 1.0.3 427 | dev: true 428 | 429 | /array-uniq/1.0.3: 430 | resolution: 431 | { 432 | integrity: sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==, 433 | } 434 | engines: { node: '>=0.10.0' } 435 | dev: true 436 | 437 | /arrify/1.0.1: 438 | resolution: 439 | { 440 | integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==, 441 | } 442 | engines: { node: '>=0.10.0' } 443 | dev: true 444 | 445 | /asn1/0.2.6: 446 | resolution: 447 | { 448 | integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==, 449 | } 450 | dependencies: 451 | safer-buffer: 2.1.2 452 | dev: true 453 | 454 | /assert-plus/1.0.0: 455 | resolution: 456 | { 457 | integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==, 458 | } 459 | engines: { node: '>=0.8' } 460 | dev: true 461 | 462 | /asynckit/0.4.0: 463 | resolution: 464 | { 465 | integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, 466 | } 467 | dev: true 468 | 469 | /aws-sign2/0.7.0: 470 | resolution: 471 | { 472 | integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==, 473 | } 474 | dev: true 475 | 476 | /aws4/1.11.0: 477 | resolution: 478 | { 479 | integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==, 480 | } 481 | dev: true 482 | 483 | /babel-runtime/6.26.0: 484 | resolution: 485 | { 486 | integrity: sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==, 487 | } 488 | dependencies: 489 | core-js: 2.6.12 490 | regenerator-runtime: 0.11.1 491 | dev: true 492 | 493 | /balanced-match/1.0.2: 494 | resolution: 495 | { 496 | integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, 497 | } 498 | dev: true 499 | 500 | /bcrypt-pbkdf/1.0.2: 501 | resolution: 502 | { 503 | integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==, 504 | } 505 | dependencies: 506 | tweetnacl: 0.14.5 507 | dev: true 508 | 509 | /binary-extensions/2.2.0: 510 | resolution: 511 | { 512 | integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==, 513 | } 514 | engines: { node: '>=8' } 515 | dev: false 516 | 517 | /binary/0.3.0: 518 | resolution: 519 | { 520 | integrity: sha512-D4H1y5KYwpJgK8wk1Cue5LLPgmwHKYSChkbspQg5JtVuR5ulGckxfR62H3AE9UDkdMC8yyXlqYihuz3Aqg2XZg==, 521 | } 522 | dependencies: 523 | buffers: 0.1.1 524 | chainsaw: 0.1.0 525 | dev: true 526 | 527 | /binwrap/0.2.3: 528 | resolution: 529 | { 530 | integrity: sha512-N4Pm7iyDEv0BrAMs+dny8WQa+e0nNTdzn2ODkf/MM6XBtKSCxCSUA1ZOQGoc1n7mUqdgOS5pwjsW91rmXVxy2Q==, 531 | } 532 | hasBin: true 533 | dependencies: 534 | request: 2.88.2 535 | tar: 6.1.11 536 | unzip-stream: 0.3.1 537 | dev: true 538 | 539 | /boxen/1.3.0: 540 | resolution: 541 | { 542 | integrity: sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==, 543 | } 544 | engines: { node: '>=4' } 545 | dependencies: 546 | ansi-align: 2.0.0 547 | camelcase: 4.1.0 548 | chalk: 2.4.2 549 | cli-boxes: 1.0.0 550 | string-width: 2.1.1 551 | term-size: 1.2.0 552 | widest-line: 2.0.1 553 | dev: true 554 | 555 | /brace-expansion/1.1.11: 556 | resolution: 557 | { 558 | integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, 559 | } 560 | dependencies: 561 | balanced-match: 1.0.2 562 | concat-map: 0.0.1 563 | dev: true 564 | 565 | /braces/3.0.2: 566 | resolution: 567 | { 568 | integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, 569 | } 570 | engines: { node: '>=8' } 571 | dependencies: 572 | fill-range: 7.0.1 573 | dev: false 574 | 575 | /buffers/0.1.1: 576 | resolution: 577 | { 578 | integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==, 579 | } 580 | engines: { node: '>=0.2.0' } 581 | dev: true 582 | 583 | /builtin-modules/3.3.0: 584 | resolution: 585 | { 586 | integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==, 587 | } 588 | engines: { node: '>=6' } 589 | dev: true 590 | 591 | /callsite-record/3.2.2: 592 | resolution: 593 | { 594 | integrity: sha512-FHsqEtE4Wn8W1ybLiWk0LD1ON4ZmXiL2698ajF0Ul+CpkACqF2lY2N7/3zkk+4NYILLgK4UEnk1pHCnvVDynuA==, 595 | } 596 | dependencies: 597 | callsite: 1.0.0 598 | chalk: 1.1.3 599 | error-stack-parser: 1.3.6 600 | highlight-es: 1.0.3 601 | lodash: 4.17.21 602 | pinkie-promise: 2.0.1 603 | dev: true 604 | 605 | /callsite/1.0.0: 606 | resolution: 607 | { 608 | integrity: sha512-0vdNRFXn5q+dtOqjfFtmtlI9N2eVZ7LMyEV2iKC5mEEFvSg/69Ml6b/WU2qF8W1nLRa0wiSrDT3Y5jOHZCwKPQ==, 609 | } 610 | dev: true 611 | 612 | /callsites/3.1.0: 613 | resolution: 614 | { 615 | integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==, 616 | } 617 | engines: { node: '>=6' } 618 | dev: true 619 | 620 | /camelcase-keys/2.1.0: 621 | resolution: 622 | { 623 | integrity: sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==, 624 | } 625 | engines: { node: '>=0.10.0' } 626 | dependencies: 627 | camelcase: 2.1.1 628 | map-obj: 1.0.1 629 | dev: true 630 | 631 | /camelcase/2.1.1: 632 | resolution: 633 | { 634 | integrity: sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==, 635 | } 636 | engines: { node: '>=0.10.0' } 637 | dev: true 638 | 639 | /camelcase/4.1.0: 640 | resolution: 641 | { 642 | integrity: sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw==, 643 | } 644 | engines: { node: '>=4' } 645 | dev: true 646 | 647 | /camelcase/5.3.1: 648 | resolution: 649 | { 650 | integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==, 651 | } 652 | engines: { node: '>=6' } 653 | dev: true 654 | 655 | /capture-stack-trace/1.0.1: 656 | resolution: 657 | { 658 | integrity: sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==, 659 | } 660 | engines: { node: '>=0.10.0' } 661 | dev: true 662 | 663 | /caseless/0.12.0: 664 | resolution: 665 | { 666 | integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==, 667 | } 668 | dev: true 669 | 670 | /chainsaw/0.1.0: 671 | resolution: 672 | { 673 | integrity: sha512-75kWfWt6MEKNC8xYXIdRpDehRYY/tNSgwKaJq+dbbDcxORuVrrQ+SEHoWsniVn9XPYfP4gmdWIeDk/4YNp1rNQ==, 674 | } 675 | dependencies: 676 | traverse: 0.3.9 677 | dev: true 678 | 679 | /chalk/1.1.3: 680 | resolution: 681 | { 682 | integrity: sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==, 683 | } 684 | engines: { node: '>=0.10.0' } 685 | dependencies: 686 | ansi-styles: 2.2.1 687 | escape-string-regexp: 1.0.5 688 | has-ansi: 2.0.0 689 | strip-ansi: 3.0.1 690 | supports-color: 2.0.0 691 | dev: true 692 | 693 | /chalk/2.4.2: 694 | resolution: 695 | { 696 | integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, 697 | } 698 | engines: { node: '>=4' } 699 | dependencies: 700 | ansi-styles: 3.2.1 701 | escape-string-regexp: 1.0.5 702 | supports-color: 5.5.0 703 | dev: true 704 | 705 | /chalk/4.1.2: 706 | resolution: 707 | { 708 | integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, 709 | } 710 | engines: { node: '>=10' } 711 | dependencies: 712 | ansi-styles: 4.3.0 713 | supports-color: 7.2.0 714 | dev: true 715 | 716 | /chokidar/3.5.3: 717 | resolution: 718 | { 719 | integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, 720 | } 721 | engines: { node: '>= 8.10.0' } 722 | dependencies: 723 | anymatch: 3.1.2 724 | braces: 3.0.2 725 | glob-parent: 5.1.2 726 | is-binary-path: 2.1.0 727 | is-glob: 4.0.3 728 | normalize-path: 3.0.0 729 | readdirp: 3.6.0 730 | optionalDependencies: 731 | fsevents: 2.3.2 732 | dev: false 733 | 734 | /chownr/2.0.0: 735 | resolution: 736 | { 737 | integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==, 738 | } 739 | engines: { node: '>=10' } 740 | dev: true 741 | 742 | /ci-info/1.6.0: 743 | resolution: 744 | { 745 | integrity: sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==, 746 | } 747 | dev: true 748 | 749 | /cli-boxes/1.0.0: 750 | resolution: 751 | { 752 | integrity: sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg==, 753 | } 754 | engines: { node: '>=0.10.0' } 755 | dev: true 756 | 757 | /cli-cursor/1.0.2: 758 | resolution: 759 | { 760 | integrity: sha512-25tABq090YNKkF6JH7lcwO0zFJTRke4Jcq9iX2nr/Sz0Cjjv4gckmwlW6Ty/aoyFd6z3ysR2hMGC2GFugmBo6A==, 761 | } 762 | engines: { node: '>=0.10.0' } 763 | dependencies: 764 | restore-cursor: 1.0.1 765 | dev: true 766 | 767 | /cli-spinners/0.1.2: 768 | resolution: 769 | { 770 | integrity: sha512-t22oC6e068eEBQ86SO3arUtd1ojcA3/lz3Fp2g/oL/lmDlFz/2yD8JHiebeCGYmoAovYpwKq4T64Uq5j+28Q9w==, 771 | } 772 | engines: { node: '>=0.10.0' } 773 | dev: true 774 | 775 | /cli-width/2.2.1: 776 | resolution: 777 | { 778 | integrity: sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==, 779 | } 780 | dev: true 781 | 782 | /cliui/5.0.0: 783 | resolution: 784 | { 785 | integrity: sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==, 786 | } 787 | dependencies: 788 | string-width: 3.1.0 789 | strip-ansi: 5.2.0 790 | wrap-ansi: 5.1.0 791 | dev: true 792 | 793 | /co/4.6.0: 794 | resolution: 795 | { 796 | integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==, 797 | } 798 | engines: { iojs: '>= 1.0.0', node: '>= 0.12.0' } 799 | dev: true 800 | 801 | /code-point-at/1.1.0: 802 | resolution: 803 | { 804 | integrity: sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==, 805 | } 806 | engines: { node: '>=0.10.0' } 807 | dev: true 808 | 809 | /color-convert/1.9.3: 810 | resolution: 811 | { 812 | integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, 813 | } 814 | dependencies: 815 | color-name: 1.1.3 816 | dev: true 817 | 818 | /color-convert/2.0.1: 819 | resolution: 820 | { 821 | integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, 822 | } 823 | engines: { node: '>=7.0.0' } 824 | dependencies: 825 | color-name: 1.1.4 826 | dev: true 827 | 828 | /color-name/1.1.3: 829 | resolution: { integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= } 830 | dev: true 831 | 832 | /color-name/1.1.4: 833 | resolution: 834 | { 835 | integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, 836 | } 837 | dev: true 838 | 839 | /combined-stream/1.0.8: 840 | resolution: 841 | { 842 | integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, 843 | } 844 | engines: { node: '>= 0.8' } 845 | dependencies: 846 | delayed-stream: 1.0.0 847 | dev: true 848 | 849 | /concat-map/0.0.1: 850 | resolution: { integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= } 851 | dev: true 852 | 853 | /configstore/3.1.5: 854 | resolution: 855 | { 856 | integrity: sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA==, 857 | } 858 | engines: { node: '>=4' } 859 | dependencies: 860 | dot-prop: 4.2.1 861 | graceful-fs: 4.2.10 862 | make-dir: 1.3.0 863 | unique-string: 1.0.0 864 | write-file-atomic: 2.4.3 865 | xdg-basedir: 3.0.0 866 | dev: true 867 | 868 | /core-js/2.6.12: 869 | resolution: 870 | { 871 | integrity: sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==, 872 | } 873 | deprecated: core-js@<3.4 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Please, upgrade your dependencies to the actual version of core-js. 874 | requiresBuild: true 875 | dev: true 876 | 877 | /core-util-is/1.0.2: 878 | resolution: { integrity: sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= } 879 | dev: true 880 | 881 | /create-error-class/3.0.2: 882 | resolution: { integrity: sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= } 883 | engines: { node: '>=0.10.0' } 884 | dependencies: 885 | capture-stack-trace: 1.0.1 886 | dev: true 887 | 888 | /cross-spawn-async/2.2.5: 889 | resolution: { integrity: sha1-hF/wwINKPe2dFg2sptOQkGuyiMw= } 890 | deprecated: cross-spawn no longer requires a build toolchain, use it instead 891 | dependencies: 892 | lru-cache: 4.1.5 893 | which: 1.3.1 894 | dev: true 895 | 896 | /cross-spawn/5.1.0: 897 | resolution: { integrity: sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= } 898 | dependencies: 899 | lru-cache: 4.1.5 900 | shebang-command: 1.2.0 901 | which: 1.3.1 902 | dev: true 903 | 904 | /cross-spawn/7.0.3: 905 | resolution: 906 | { 907 | integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==, 908 | } 909 | engines: { node: '>= 8' } 910 | dependencies: 911 | path-key: 3.1.1 912 | shebang-command: 2.0.0 913 | which: 2.0.2 914 | dev: true 915 | 916 | /crypto-random-string/1.0.0: 917 | resolution: { integrity: sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= } 918 | engines: { node: '>=4' } 919 | dev: true 920 | 921 | /currently-unhandled/0.4.1: 922 | resolution: { integrity: sha1-mI3zP+qxke95mmE2nddsF635V+o= } 923 | engines: { node: '>=0.10.0' } 924 | dependencies: 925 | array-find-index: 1.0.2 926 | dev: true 927 | 928 | /dashdash/1.14.1: 929 | resolution: { integrity: sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= } 930 | engines: { node: '>=0.10' } 931 | dependencies: 932 | assert-plus: 1.0.0 933 | dev: true 934 | 935 | /de-indent/1.0.2: 936 | resolution: { integrity: sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= } 937 | dev: true 938 | 939 | /debug/4.3.4: 940 | resolution: 941 | { 942 | integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, 943 | } 944 | engines: { node: '>=6.0' } 945 | peerDependencies: 946 | supports-color: '*' 947 | peerDependenciesMeta: 948 | supports-color: 949 | optional: true 950 | dependencies: 951 | ms: 2.1.2 952 | dev: true 953 | 954 | /decamelize/1.2.0: 955 | resolution: { integrity: sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= } 956 | engines: { node: '>=0.10.0' } 957 | dev: true 958 | 959 | /deep-extend/0.6.0: 960 | resolution: 961 | { 962 | integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==, 963 | } 964 | engines: { node: '>=4.0.0' } 965 | dev: true 966 | 967 | /deep-is/0.1.4: 968 | resolution: 969 | { 970 | integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, 971 | } 972 | dev: true 973 | 974 | /delayed-stream/1.0.0: 975 | resolution: { integrity: sha1-3zrhmayt+31ECqrgsp4icrJOxhk= } 976 | engines: { node: '>=0.4.0' } 977 | dev: true 978 | 979 | /depcheck/0.8.3: 980 | resolution: 981 | { 982 | integrity: sha512-xcLTnaovCFFTts5Ge7mUUhMGHSu6eRfftvVvOjN7gXO5EFUhJfX6UQa1b08a0SIwKfzG9eKNn5mzZlXp0mZARA==, 983 | } 984 | engines: { node: '>=6' } 985 | hasBin: true 986 | dependencies: 987 | '@babel/parser': 7.18.3 988 | '@babel/traverse': 7.18.2 989 | builtin-modules: 3.3.0 990 | deprecate: 1.1.1 991 | deps-regex: 0.1.4 992 | js-yaml: 3.14.1 993 | lodash: 4.17.21 994 | minimatch: 3.1.2 995 | node-sass-tilde-importer: 1.0.2 996 | please-upgrade-node: 3.2.0 997 | require-package-name: 2.0.1 998 | resolve: 1.22.0 999 | vue-template-compiler: 2.6.14 1000 | walkdir: 0.3.2 1001 | yargs: 13.3.2 1002 | transitivePeerDependencies: 1003 | - supports-color 1004 | dev: true 1005 | 1006 | /deprecate/1.1.1: 1007 | resolution: 1008 | { 1009 | integrity: sha512-ZGDXefq1xknT292LnorMY5s8UVU08/WKdzDZCUT6t9JzsiMSP4uzUhgpqugffNVcT5WC6wMBiSQ+LFjlv3v7iQ==, 1010 | } 1011 | dev: true 1012 | 1013 | /deps-regex/0.1.4: 1014 | resolution: { integrity: sha1-UYZnt2kUYKXn4KNBvnbrfOgJAYQ= } 1015 | dev: true 1016 | 1017 | /doctrine/3.0.0: 1018 | resolution: 1019 | { 1020 | integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==, 1021 | } 1022 | engines: { node: '>=6.0.0' } 1023 | dependencies: 1024 | esutils: 2.0.3 1025 | dev: true 1026 | 1027 | /dot-prop/4.2.1: 1028 | resolution: 1029 | { 1030 | integrity: sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==, 1031 | } 1032 | engines: { node: '>=4' } 1033 | dependencies: 1034 | is-obj: 1.0.1 1035 | dev: true 1036 | 1037 | /duplexer3/0.1.4: 1038 | resolution: { integrity: sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= } 1039 | dev: true 1040 | 1041 | /ecc-jsbn/0.1.2: 1042 | resolution: { integrity: sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= } 1043 | dependencies: 1044 | jsbn: 0.1.1 1045 | safer-buffer: 2.1.2 1046 | dev: true 1047 | 1048 | /elm-format/0.8.5: 1049 | resolution: 1050 | { 1051 | integrity: sha512-/Mjwz5RhJ8cdcMsHT98AEKprSIHyRde+URIPvnHez9WH7Xp+rFCOJx0FNMPIYrbHE9Ei7HDSVwhjDP0i+mlvpQ==, 1052 | } 1053 | hasBin: true 1054 | requiresBuild: true 1055 | dependencies: 1056 | binwrap: 0.2.3 1057 | dev: true 1058 | 1059 | /elm/0.19.1-5: 1060 | resolution: 1061 | { 1062 | integrity: sha512-dyBoPvFiNLvxOStQJdyq28gZEjS/enZXdZ5yyCtNtDEMbFJJVQq4pYNRKvhrKKdlxNot6d96iQe1uczoqO5yvA==, 1063 | } 1064 | engines: { node: '>=7.0.0' } 1065 | hasBin: true 1066 | requiresBuild: true 1067 | dependencies: 1068 | request: 2.88.2 1069 | dev: true 1070 | 1071 | /emoji-regex/7.0.3: 1072 | resolution: 1073 | { 1074 | integrity: sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==, 1075 | } 1076 | dev: true 1077 | 1078 | /error-ex/1.3.2: 1079 | resolution: 1080 | { 1081 | integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==, 1082 | } 1083 | dependencies: 1084 | is-arrayish: 0.2.1 1085 | dev: true 1086 | 1087 | /error-stack-parser/1.3.6: 1088 | resolution: { integrity: sha1-4Oc7k+QXE40c18C3RrGkoUhUwpI= } 1089 | dependencies: 1090 | stackframe: 0.3.1 1091 | dev: true 1092 | 1093 | /escape-string-regexp/1.0.5: 1094 | resolution: { integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= } 1095 | engines: { node: '>=0.8.0' } 1096 | dev: true 1097 | 1098 | /escape-string-regexp/4.0.0: 1099 | resolution: 1100 | { 1101 | integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==, 1102 | } 1103 | engines: { node: '>=10' } 1104 | dev: true 1105 | 1106 | /eslint-config-prettier/8.5.0_eslint@8.16.0: 1107 | resolution: 1108 | { 1109 | integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==, 1110 | } 1111 | hasBin: true 1112 | peerDependencies: 1113 | eslint: '>=7.0.0' 1114 | dependencies: 1115 | eslint: 8.16.0 1116 | dev: true 1117 | 1118 | /eslint-scope/7.1.1: 1119 | resolution: 1120 | { 1121 | integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==, 1122 | } 1123 | engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } 1124 | dependencies: 1125 | esrecurse: 4.3.0 1126 | estraverse: 5.3.0 1127 | dev: true 1128 | 1129 | /eslint-utils/3.0.0_eslint@8.16.0: 1130 | resolution: 1131 | { 1132 | integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==, 1133 | } 1134 | engines: { node: ^10.0.0 || ^12.0.0 || >= 14.0.0 } 1135 | peerDependencies: 1136 | eslint: '>=5' 1137 | dependencies: 1138 | eslint: 8.16.0 1139 | eslint-visitor-keys: 2.1.0 1140 | dev: true 1141 | 1142 | /eslint-visitor-keys/2.1.0: 1143 | resolution: 1144 | { 1145 | integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==, 1146 | } 1147 | engines: { node: '>=10' } 1148 | dev: true 1149 | 1150 | /eslint-visitor-keys/3.3.0: 1151 | resolution: 1152 | { 1153 | integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==, 1154 | } 1155 | engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } 1156 | dev: true 1157 | 1158 | /eslint/8.16.0: 1159 | resolution: 1160 | { 1161 | integrity: sha512-MBndsoXY/PeVTDJeWsYj7kLZ5hQpJOfMYLsF6LicLHQWbRDG19lK5jOix4DPl8yY4SUFcE3txy86OzFLWT+yoA==, 1162 | } 1163 | engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } 1164 | hasBin: true 1165 | dependencies: 1166 | '@eslint/eslintrc': 1.3.0 1167 | '@humanwhocodes/config-array': 0.9.5 1168 | ajv: 6.12.6 1169 | chalk: 4.1.2 1170 | cross-spawn: 7.0.3 1171 | debug: 4.3.4 1172 | doctrine: 3.0.0 1173 | escape-string-regexp: 4.0.0 1174 | eslint-scope: 7.1.1 1175 | eslint-utils: 3.0.0_eslint@8.16.0 1176 | eslint-visitor-keys: 3.3.0 1177 | espree: 9.3.2 1178 | esquery: 1.4.0 1179 | esutils: 2.0.3 1180 | fast-deep-equal: 3.1.3 1181 | file-entry-cache: 6.0.1 1182 | functional-red-black-tree: 1.0.1 1183 | glob-parent: 6.0.2 1184 | globals: 13.15.0 1185 | ignore: 5.2.0 1186 | import-fresh: 3.3.0 1187 | imurmurhash: 0.1.4 1188 | is-glob: 4.0.3 1189 | js-yaml: 4.1.0 1190 | json-stable-stringify-without-jsonify: 1.0.1 1191 | levn: 0.4.1 1192 | lodash.merge: 4.6.2 1193 | minimatch: 3.1.2 1194 | natural-compare: 1.4.0 1195 | optionator: 0.9.1 1196 | regexpp: 3.2.0 1197 | strip-ansi: 6.0.1 1198 | strip-json-comments: 3.1.1 1199 | text-table: 0.2.0 1200 | v8-compile-cache: 2.3.0 1201 | transitivePeerDependencies: 1202 | - supports-color 1203 | dev: true 1204 | 1205 | /espree/9.3.2: 1206 | resolution: 1207 | { 1208 | integrity: sha512-D211tC7ZwouTIuY5x9XnS0E9sWNChB7IYKX/Xp5eQj3nFXhqmiUDB9q27y76oFl8jTg3pXcQx/bpxMfs3CIZbA==, 1209 | } 1210 | engines: { node: ^12.22.0 || ^14.17.0 || >=16.0.0 } 1211 | dependencies: 1212 | acorn: 8.7.1 1213 | acorn-jsx: 5.3.2_acorn@8.7.1 1214 | eslint-visitor-keys: 3.3.0 1215 | dev: true 1216 | 1217 | /esprima/4.0.1: 1218 | resolution: 1219 | { 1220 | integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, 1221 | } 1222 | engines: { node: '>=4' } 1223 | hasBin: true 1224 | dev: true 1225 | 1226 | /esquery/1.4.0: 1227 | resolution: 1228 | { 1229 | integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==, 1230 | } 1231 | engines: { node: '>=0.10' } 1232 | dependencies: 1233 | estraverse: 5.3.0 1234 | dev: true 1235 | 1236 | /esrecurse/4.3.0: 1237 | resolution: 1238 | { 1239 | integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, 1240 | } 1241 | engines: { node: '>=4.0' } 1242 | dependencies: 1243 | estraverse: 5.3.0 1244 | dev: true 1245 | 1246 | /estraverse/5.3.0: 1247 | resolution: 1248 | { 1249 | integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, 1250 | } 1251 | engines: { node: '>=4.0' } 1252 | dev: true 1253 | 1254 | /esutils/2.0.3: 1255 | resolution: 1256 | { 1257 | integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, 1258 | } 1259 | engines: { node: '>=0.10.0' } 1260 | dev: true 1261 | 1262 | /execa/0.2.2: 1263 | resolution: { integrity: sha1-4urUcsLDGq1vc/GslW7vReEjIMs= } 1264 | engines: { node: '>=0.12' } 1265 | dependencies: 1266 | cross-spawn-async: 2.2.5 1267 | npm-run-path: 1.0.0 1268 | object-assign: 4.1.1 1269 | path-key: 1.0.0 1270 | strip-eof: 1.0.0 1271 | dev: true 1272 | 1273 | /execa/0.7.0: 1274 | resolution: { integrity: sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= } 1275 | engines: { node: '>=4' } 1276 | dependencies: 1277 | cross-spawn: 5.1.0 1278 | get-stream: 3.0.0 1279 | is-stream: 1.1.0 1280 | npm-run-path: 2.0.2 1281 | p-finally: 1.0.0 1282 | signal-exit: 3.0.7 1283 | strip-eof: 1.0.0 1284 | dev: true 1285 | 1286 | /exit-hook/1.1.1: 1287 | resolution: { integrity: sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= } 1288 | engines: { node: '>=0.10.0' } 1289 | dev: true 1290 | 1291 | /expand-tilde/2.0.2: 1292 | resolution: { integrity: sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= } 1293 | engines: { node: '>=0.10.0' } 1294 | dependencies: 1295 | homedir-polyfill: 1.0.3 1296 | dev: true 1297 | 1298 | /extend/3.0.2: 1299 | resolution: 1300 | { 1301 | integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==, 1302 | } 1303 | dev: true 1304 | 1305 | /extsprintf/1.3.0: 1306 | resolution: { integrity: sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= } 1307 | engines: { '0': node >=0.6.0 } 1308 | dev: true 1309 | 1310 | /fast-deep-equal/3.1.3: 1311 | resolution: 1312 | { 1313 | integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==, 1314 | } 1315 | dev: true 1316 | 1317 | /fast-json-stable-stringify/2.1.0: 1318 | resolution: 1319 | { 1320 | integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==, 1321 | } 1322 | dev: true 1323 | 1324 | /fast-levenshtein/2.0.6: 1325 | resolution: { integrity: sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= } 1326 | dev: true 1327 | 1328 | /figures/1.7.0: 1329 | resolution: { integrity: sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= } 1330 | engines: { node: '>=0.10.0' } 1331 | dependencies: 1332 | escape-string-regexp: 1.0.5 1333 | object-assign: 4.1.1 1334 | dev: true 1335 | 1336 | /file-entry-cache/6.0.1: 1337 | resolution: 1338 | { 1339 | integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==, 1340 | } 1341 | engines: { node: ^10.12.0 || >=12.0.0 } 1342 | dependencies: 1343 | flat-cache: 3.0.4 1344 | dev: true 1345 | 1346 | /fill-range/7.0.1: 1347 | resolution: 1348 | { 1349 | integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, 1350 | } 1351 | engines: { node: '>=8' } 1352 | dependencies: 1353 | to-regex-range: 5.0.1 1354 | dev: false 1355 | 1356 | /find-parent-dir/0.3.1: 1357 | resolution: 1358 | { 1359 | integrity: sha512-o4UcykWV/XN9wm+jMEtWLPlV8RXCZnMhQI6F6OdHeSez7iiJWePw8ijOlskJZMsaQoGR/b7dH6lO02HhaTN7+A==, 1360 | } 1361 | dev: true 1362 | 1363 | /find-up/1.1.2: 1364 | resolution: { integrity: sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= } 1365 | engines: { node: '>=0.10.0' } 1366 | dependencies: 1367 | path-exists: 2.1.0 1368 | pinkie-promise: 2.0.1 1369 | dev: true 1370 | 1371 | /find-up/3.0.0: 1372 | resolution: 1373 | { 1374 | integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==, 1375 | } 1376 | engines: { node: '>=6' } 1377 | dependencies: 1378 | locate-path: 3.0.0 1379 | dev: true 1380 | 1381 | /flat-cache/3.0.4: 1382 | resolution: 1383 | { 1384 | integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==, 1385 | } 1386 | engines: { node: ^10.12.0 || >=12.0.0 } 1387 | dependencies: 1388 | flatted: 3.2.5 1389 | rimraf: 3.0.2 1390 | dev: true 1391 | 1392 | /flatted/3.2.5: 1393 | resolution: 1394 | { 1395 | integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==, 1396 | } 1397 | dev: true 1398 | 1399 | /forever-agent/0.6.1: 1400 | resolution: { integrity: sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= } 1401 | dev: true 1402 | 1403 | /form-data/2.3.3: 1404 | resolution: 1405 | { 1406 | integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==, 1407 | } 1408 | engines: { node: '>= 0.12' } 1409 | dependencies: 1410 | asynckit: 0.4.0 1411 | combined-stream: 1.0.8 1412 | mime-types: 2.1.35 1413 | dev: true 1414 | 1415 | /fs-minipass/2.1.0: 1416 | resolution: 1417 | { 1418 | integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==, 1419 | } 1420 | engines: { node: '>= 8' } 1421 | dependencies: 1422 | minipass: 3.1.6 1423 | dev: true 1424 | 1425 | /fs.realpath/1.0.0: 1426 | resolution: { integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8= } 1427 | dev: true 1428 | 1429 | /fsevents/2.3.2: 1430 | resolution: 1431 | { 1432 | integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, 1433 | } 1434 | engines: { node: ^8.16.0 || ^10.6.0 || >=11.0.0 } 1435 | os: [darwin] 1436 | requiresBuild: true 1437 | dev: false 1438 | optional: true 1439 | 1440 | /function-bind/1.1.1: 1441 | resolution: 1442 | { 1443 | integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, 1444 | } 1445 | dev: true 1446 | 1447 | /functional-red-black-tree/1.0.1: 1448 | resolution: { integrity: sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= } 1449 | dev: true 1450 | 1451 | /get-caller-file/2.0.5: 1452 | resolution: 1453 | { 1454 | integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==, 1455 | } 1456 | engines: { node: 6.* || 8.* || >= 10.* } 1457 | dev: true 1458 | 1459 | /get-stdin/4.0.1: 1460 | resolution: { integrity: sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= } 1461 | engines: { node: '>=0.10.0' } 1462 | dev: true 1463 | 1464 | /get-stream/3.0.0: 1465 | resolution: { integrity: sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= } 1466 | engines: { node: '>=4' } 1467 | dev: true 1468 | 1469 | /getpass/0.1.7: 1470 | resolution: { integrity: sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= } 1471 | dependencies: 1472 | assert-plus: 1.0.0 1473 | dev: true 1474 | 1475 | /giturl/1.0.1: 1476 | resolution: 1477 | { 1478 | integrity: sha512-wQourBdI13n8tbjcZTDl6k+ZrCRMU6p9vfp9jknZq+zfWc8xXNztpZFM4XkPHVzHcMSUZxEMYYKZjIGkPlei6Q==, 1479 | } 1480 | engines: { node: '>= 0.10.0' } 1481 | dev: true 1482 | 1483 | /glob-parent/5.1.2: 1484 | resolution: 1485 | { 1486 | integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==, 1487 | } 1488 | engines: { node: '>= 6' } 1489 | dependencies: 1490 | is-glob: 4.0.3 1491 | dev: false 1492 | 1493 | /glob-parent/6.0.2: 1494 | resolution: 1495 | { 1496 | integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==, 1497 | } 1498 | engines: { node: '>=10.13.0' } 1499 | dependencies: 1500 | is-glob: 4.0.3 1501 | dev: true 1502 | 1503 | /glob/6.0.4: 1504 | resolution: { integrity: sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI= } 1505 | dependencies: 1506 | inflight: 1.0.6 1507 | inherits: 2.0.4 1508 | minimatch: 3.1.2 1509 | once: 1.4.0 1510 | path-is-absolute: 1.0.1 1511 | dev: true 1512 | 1513 | /glob/7.2.3: 1514 | resolution: 1515 | { 1516 | integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, 1517 | } 1518 | dependencies: 1519 | fs.realpath: 1.0.0 1520 | inflight: 1.0.6 1521 | inherits: 2.0.4 1522 | minimatch: 3.1.2 1523 | once: 1.4.0 1524 | path-is-absolute: 1.0.1 1525 | dev: true 1526 | 1527 | /global-dirs/0.1.1: 1528 | resolution: { integrity: sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= } 1529 | engines: { node: '>=4' } 1530 | dependencies: 1531 | ini: 1.3.8 1532 | dev: true 1533 | 1534 | /global-modules/1.0.0: 1535 | resolution: 1536 | { 1537 | integrity: sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==, 1538 | } 1539 | engines: { node: '>=0.10.0' } 1540 | dependencies: 1541 | global-prefix: 1.0.2 1542 | is-windows: 1.0.2 1543 | resolve-dir: 1.0.1 1544 | dev: true 1545 | 1546 | /global-prefix/1.0.2: 1547 | resolution: { integrity: sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= } 1548 | engines: { node: '>=0.10.0' } 1549 | dependencies: 1550 | expand-tilde: 2.0.2 1551 | homedir-polyfill: 1.0.3 1552 | ini: 1.3.8 1553 | is-windows: 1.0.2 1554 | which: 1.3.1 1555 | dev: true 1556 | 1557 | /globals/11.12.0: 1558 | resolution: 1559 | { 1560 | integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==, 1561 | } 1562 | engines: { node: '>=4' } 1563 | dev: true 1564 | 1565 | /globals/13.15.0: 1566 | resolution: 1567 | { 1568 | integrity: sha512-bpzcOlgDhMG070Av0Vy5Owklpv1I6+j96GhUI7Rh7IzDCKLzboflLrrfqMu8NquDbiR4EOQk7XzJwqVJxicxog==, 1569 | } 1570 | engines: { node: '>=8' } 1571 | dependencies: 1572 | type-fest: 0.20.2 1573 | dev: true 1574 | 1575 | /globby/4.1.0: 1576 | resolution: { integrity: sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg= } 1577 | engines: { node: '>=0.10.0' } 1578 | dependencies: 1579 | array-union: 1.0.2 1580 | arrify: 1.0.1 1581 | glob: 6.0.4 1582 | object-assign: 4.1.1 1583 | pify: 2.3.0 1584 | pinkie-promise: 2.0.1 1585 | dev: true 1586 | 1587 | /got/6.7.1: 1588 | resolution: { integrity: sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= } 1589 | engines: { node: '>=4' } 1590 | dependencies: 1591 | '@types/keyv': 3.1.4 1592 | '@types/responselike': 1.0.0 1593 | create-error-class: 3.0.2 1594 | duplexer3: 0.1.4 1595 | get-stream: 3.0.0 1596 | is-redirect: 1.0.0 1597 | is-retry-allowed: 1.2.0 1598 | is-stream: 1.1.0 1599 | lowercase-keys: 1.0.1 1600 | safe-buffer: 5.2.1 1601 | timed-out: 4.0.1 1602 | unzip-response: 2.0.1 1603 | url-parse-lax: 1.0.0 1604 | dev: true 1605 | 1606 | /graceful-fs/4.2.10: 1607 | resolution: 1608 | { 1609 | integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, 1610 | } 1611 | dev: true 1612 | 1613 | /har-schema/2.0.0: 1614 | resolution: { integrity: sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= } 1615 | engines: { node: '>=4' } 1616 | dev: true 1617 | 1618 | /har-validator/5.1.5: 1619 | resolution: 1620 | { 1621 | integrity: sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==, 1622 | } 1623 | engines: { node: '>=6' } 1624 | deprecated: this library is no longer supported 1625 | dependencies: 1626 | ajv: 6.12.6 1627 | har-schema: 2.0.0 1628 | dev: true 1629 | 1630 | /has-ansi/2.0.0: 1631 | resolution: { integrity: sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= } 1632 | engines: { node: '>=0.10.0' } 1633 | dependencies: 1634 | ansi-regex: 2.1.1 1635 | dev: true 1636 | 1637 | /has-flag/3.0.0: 1638 | resolution: { integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0= } 1639 | engines: { node: '>=4' } 1640 | dev: true 1641 | 1642 | /has-flag/4.0.0: 1643 | resolution: 1644 | { 1645 | integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, 1646 | } 1647 | engines: { node: '>=8' } 1648 | dev: true 1649 | 1650 | /has/1.0.3: 1651 | resolution: 1652 | { 1653 | integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, 1654 | } 1655 | engines: { node: '>= 0.4.0' } 1656 | dependencies: 1657 | function-bind: 1.1.1 1658 | dev: true 1659 | 1660 | /he/1.2.0: 1661 | resolution: 1662 | { 1663 | integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==, 1664 | } 1665 | hasBin: true 1666 | dev: true 1667 | 1668 | /highlight-es/1.0.3: 1669 | resolution: 1670 | { 1671 | integrity: sha512-s/SIX6yp/5S1p8aC/NRDC1fwEb+myGIfp8/TzZz0rtAv8fzsdX7vGl3Q1TrXCsczFq8DI3CBFBCySPClfBSdbg==, 1672 | } 1673 | dependencies: 1674 | chalk: 2.4.2 1675 | is-es2016-keyword: 1.0.0 1676 | js-tokens: 3.0.2 1677 | dev: true 1678 | 1679 | /homedir-polyfill/1.0.3: 1680 | resolution: 1681 | { 1682 | integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==, 1683 | } 1684 | engines: { node: '>=0.10.0' } 1685 | dependencies: 1686 | parse-passwd: 1.0.0 1687 | dev: true 1688 | 1689 | /hosted-git-info/2.8.9: 1690 | resolution: 1691 | { 1692 | integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==, 1693 | } 1694 | dev: true 1695 | 1696 | /http-signature/1.2.0: 1697 | resolution: { integrity: sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= } 1698 | engines: { node: '>=0.8', npm: '>=1.3.7' } 1699 | dependencies: 1700 | assert-plus: 1.0.0 1701 | jsprim: 1.4.2 1702 | sshpk: 1.17.0 1703 | dev: true 1704 | 1705 | /ignore/5.2.0: 1706 | resolution: 1707 | { 1708 | integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==, 1709 | } 1710 | engines: { node: '>= 4' } 1711 | dev: true 1712 | 1713 | /import-fresh/3.3.0: 1714 | resolution: 1715 | { 1716 | integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==, 1717 | } 1718 | engines: { node: '>=6' } 1719 | dependencies: 1720 | parent-module: 1.0.1 1721 | resolve-from: 4.0.0 1722 | dev: true 1723 | 1724 | /import-lazy/2.1.0: 1725 | resolution: { integrity: sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= } 1726 | engines: { node: '>=4' } 1727 | dev: true 1728 | 1729 | /imurmurhash/0.1.4: 1730 | resolution: { integrity: sha1-khi5srkoojixPcT7a21XbyMUU+o= } 1731 | engines: { node: '>=0.8.19' } 1732 | dev: true 1733 | 1734 | /indent-string/2.1.0: 1735 | resolution: { integrity: sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= } 1736 | engines: { node: '>=0.10.0' } 1737 | dependencies: 1738 | repeating: 2.0.1 1739 | dev: true 1740 | 1741 | /inflight/1.0.6: 1742 | resolution: { integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= } 1743 | dependencies: 1744 | once: 1.4.0 1745 | wrappy: 1.0.2 1746 | dev: true 1747 | 1748 | /inherits/2.0.4: 1749 | resolution: 1750 | { 1751 | integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, 1752 | } 1753 | dev: true 1754 | 1755 | /ini/1.3.8: 1756 | resolution: 1757 | { 1758 | integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==, 1759 | } 1760 | dev: true 1761 | 1762 | /inquirer/0.12.0: 1763 | resolution: { integrity: sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34= } 1764 | dependencies: 1765 | ansi-escapes: 1.4.0 1766 | ansi-regex: 2.1.1 1767 | chalk: 1.1.3 1768 | cli-cursor: 1.0.2 1769 | cli-width: 2.2.1 1770 | figures: 1.7.0 1771 | lodash: 4.17.21 1772 | readline2: 1.0.1 1773 | run-async: 0.1.0 1774 | rx-lite: 3.1.2 1775 | string-width: 1.0.2 1776 | strip-ansi: 3.0.1 1777 | through: 2.3.8 1778 | dev: true 1779 | 1780 | /interpret/1.4.0: 1781 | resolution: 1782 | { 1783 | integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, 1784 | } 1785 | engines: { node: '>= 0.10' } 1786 | dev: true 1787 | 1788 | /is-arrayish/0.2.1: 1789 | resolution: { integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= } 1790 | dev: true 1791 | 1792 | /is-binary-path/2.1.0: 1793 | resolution: 1794 | { 1795 | integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==, 1796 | } 1797 | engines: { node: '>=8' } 1798 | dependencies: 1799 | binary-extensions: 2.2.0 1800 | dev: false 1801 | 1802 | /is-ci/1.2.1: 1803 | resolution: 1804 | { 1805 | integrity: sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==, 1806 | } 1807 | hasBin: true 1808 | dependencies: 1809 | ci-info: 1.6.0 1810 | dev: true 1811 | 1812 | /is-core-module/2.9.0: 1813 | resolution: 1814 | { 1815 | integrity: sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==, 1816 | } 1817 | dependencies: 1818 | has: 1.0.3 1819 | dev: true 1820 | 1821 | /is-es2016-keyword/1.0.0: 1822 | resolution: { integrity: sha1-9uVOEQxeT40mXmnS7Q6vjPX0dxg= } 1823 | dev: true 1824 | 1825 | /is-extglob/2.1.1: 1826 | resolution: { integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= } 1827 | engines: { node: '>=0.10.0' } 1828 | 1829 | /is-finite/1.1.0: 1830 | resolution: 1831 | { 1832 | integrity: sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==, 1833 | } 1834 | engines: { node: '>=0.10.0' } 1835 | dev: true 1836 | 1837 | /is-fullwidth-code-point/1.0.0: 1838 | resolution: { integrity: sha1-754xOG8DGn8NZDr4L95QxFfvAMs= } 1839 | engines: { node: '>=0.10.0' } 1840 | dependencies: 1841 | number-is-nan: 1.0.1 1842 | dev: true 1843 | 1844 | /is-fullwidth-code-point/2.0.0: 1845 | resolution: { integrity: sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= } 1846 | engines: { node: '>=4' } 1847 | dev: true 1848 | 1849 | /is-glob/4.0.3: 1850 | resolution: 1851 | { 1852 | integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==, 1853 | } 1854 | engines: { node: '>=0.10.0' } 1855 | dependencies: 1856 | is-extglob: 2.1.1 1857 | 1858 | /is-installed-globally/0.1.0: 1859 | resolution: { integrity: sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= } 1860 | engines: { node: '>=4' } 1861 | dependencies: 1862 | global-dirs: 0.1.1 1863 | is-path-inside: 1.0.1 1864 | dev: true 1865 | 1866 | /is-npm/1.0.0: 1867 | resolution: { integrity: sha1-8vtjpl5JBbQGyGBydloaTceTufQ= } 1868 | engines: { node: '>=0.10.0' } 1869 | dev: true 1870 | 1871 | /is-number/7.0.0: 1872 | resolution: 1873 | { 1874 | integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, 1875 | } 1876 | engines: { node: '>=0.12.0' } 1877 | dev: false 1878 | 1879 | /is-obj/1.0.1: 1880 | resolution: { integrity: sha1-PkcprB9f3gJc19g6iW2rn09n2w8= } 1881 | engines: { node: '>=0.10.0' } 1882 | dev: true 1883 | 1884 | /is-path-inside/1.0.1: 1885 | resolution: { integrity: sha1-jvW33lBDej/cprToZe96pVy0gDY= } 1886 | engines: { node: '>=0.10.0' } 1887 | dependencies: 1888 | path-is-inside: 1.0.2 1889 | dev: true 1890 | 1891 | /is-redirect/1.0.0: 1892 | resolution: { integrity: sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= } 1893 | engines: { node: '>=0.10.0' } 1894 | dev: true 1895 | 1896 | /is-retry-allowed/1.2.0: 1897 | resolution: 1898 | { 1899 | integrity: sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==, 1900 | } 1901 | engines: { node: '>=0.10.0' } 1902 | dev: true 1903 | 1904 | /is-stream/1.1.0: 1905 | resolution: { integrity: sha1-EtSj3U5o4Lec6428hBc66A2RykQ= } 1906 | engines: { node: '>=0.10.0' } 1907 | dev: true 1908 | 1909 | /is-typedarray/1.0.0: 1910 | resolution: { integrity: sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= } 1911 | dev: true 1912 | 1913 | /is-utf8/0.2.1: 1914 | resolution: { integrity: sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= } 1915 | dev: true 1916 | 1917 | /is-windows/1.0.2: 1918 | resolution: 1919 | { 1920 | integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==, 1921 | } 1922 | engines: { node: '>=0.10.0' } 1923 | dev: true 1924 | 1925 | /isexe/2.0.0: 1926 | resolution: { integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= } 1927 | dev: true 1928 | 1929 | /isstream/0.1.2: 1930 | resolution: { integrity: sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= } 1931 | dev: true 1932 | 1933 | /js-tokens/3.0.2: 1934 | resolution: { integrity: sha1-mGbfOVECEw449/mWvOtlRDIJwls= } 1935 | dev: true 1936 | 1937 | /js-tokens/4.0.0: 1938 | resolution: 1939 | { 1940 | integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, 1941 | } 1942 | dev: true 1943 | 1944 | /js-yaml/3.14.1: 1945 | resolution: 1946 | { 1947 | integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==, 1948 | } 1949 | hasBin: true 1950 | dependencies: 1951 | argparse: 1.0.10 1952 | esprima: 4.0.1 1953 | dev: true 1954 | 1955 | /js-yaml/4.1.0: 1956 | resolution: 1957 | { 1958 | integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==, 1959 | } 1960 | hasBin: true 1961 | dependencies: 1962 | argparse: 2.0.1 1963 | dev: true 1964 | 1965 | /jsbn/0.1.1: 1966 | resolution: { integrity: sha1-peZUwuWi3rXyAdls77yoDA7y9RM= } 1967 | dev: true 1968 | 1969 | /jsesc/2.5.2: 1970 | resolution: 1971 | { 1972 | integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==, 1973 | } 1974 | engines: { node: '>=4' } 1975 | hasBin: true 1976 | dev: true 1977 | 1978 | /json-schema-traverse/0.4.1: 1979 | resolution: 1980 | { 1981 | integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, 1982 | } 1983 | dev: true 1984 | 1985 | /json-schema/0.4.0: 1986 | resolution: 1987 | { 1988 | integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==, 1989 | } 1990 | dev: true 1991 | 1992 | /json-stable-stringify-without-jsonify/1.0.1: 1993 | resolution: { integrity: sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= } 1994 | dev: true 1995 | 1996 | /json-stringify-safe/5.0.1: 1997 | resolution: { integrity: sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= } 1998 | dev: true 1999 | 2000 | /jsprim/1.4.2: 2001 | resolution: 2002 | { 2003 | integrity: sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==, 2004 | } 2005 | engines: { node: '>=0.6.0' } 2006 | dependencies: 2007 | assert-plus: 1.0.0 2008 | extsprintf: 1.3.0 2009 | json-schema: 0.4.0 2010 | verror: 1.10.0 2011 | dev: true 2012 | 2013 | /latest-version/3.1.0: 2014 | resolution: { integrity: sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= } 2015 | engines: { node: '>=4' } 2016 | dependencies: 2017 | package-json: 4.0.1 2018 | dev: true 2019 | 2020 | /levn/0.4.1: 2021 | resolution: 2022 | { 2023 | integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==, 2024 | } 2025 | engines: { node: '>= 0.8.0' } 2026 | dependencies: 2027 | prelude-ls: 1.2.1 2028 | type-check: 0.4.0 2029 | dev: true 2030 | 2031 | /load-json-file/1.1.0: 2032 | resolution: { integrity: sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= } 2033 | engines: { node: '>=0.10.0' } 2034 | dependencies: 2035 | graceful-fs: 4.2.10 2036 | parse-json: 2.2.0 2037 | pify: 2.3.0 2038 | pinkie-promise: 2.0.1 2039 | strip-bom: 2.0.0 2040 | dev: true 2041 | 2042 | /load-yaml-file/0.1.1: 2043 | resolution: 2044 | { 2045 | integrity: sha512-G910TofXH7u0NfslAzqv6c9pHpvBzObNOo2hMG0/KUDpdHeFY0wE/fTBMExt0Gb12gg5bXS7Hj6pb0e+xbBXLA==, 2046 | } 2047 | engines: { node: '>=4' } 2048 | dependencies: 2049 | graceful-fs: 4.2.10 2050 | js-yaml: 3.14.1 2051 | pify: 2.3.0 2052 | strip-bom: 3.0.0 2053 | dev: true 2054 | 2055 | /locate-path/3.0.0: 2056 | resolution: 2057 | { 2058 | integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==, 2059 | } 2060 | engines: { node: '>=6' } 2061 | dependencies: 2062 | p-locate: 3.0.0 2063 | path-exists: 3.0.0 2064 | dev: true 2065 | 2066 | /lodash.merge/4.6.2: 2067 | resolution: 2068 | { 2069 | integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==, 2070 | } 2071 | dev: true 2072 | 2073 | /lodash/4.17.21: 2074 | resolution: 2075 | { 2076 | integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, 2077 | } 2078 | dev: true 2079 | 2080 | /loud-rejection/1.6.0: 2081 | resolution: { integrity: sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= } 2082 | engines: { node: '>=0.10.0' } 2083 | dependencies: 2084 | currently-unhandled: 0.4.1 2085 | signal-exit: 3.0.7 2086 | dev: true 2087 | 2088 | /lowercase-keys/1.0.1: 2089 | resolution: 2090 | { 2091 | integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==, 2092 | } 2093 | engines: { node: '>=0.10.0' } 2094 | dev: true 2095 | 2096 | /lru-cache/4.1.5: 2097 | resolution: 2098 | { 2099 | integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==, 2100 | } 2101 | dependencies: 2102 | pseudomap: 1.0.2 2103 | yallist: 2.1.2 2104 | dev: true 2105 | 2106 | /make-dir/1.3.0: 2107 | resolution: 2108 | { 2109 | integrity: sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==, 2110 | } 2111 | engines: { node: '>=4' } 2112 | dependencies: 2113 | pify: 3.0.0 2114 | dev: true 2115 | 2116 | /map-obj/1.0.1: 2117 | resolution: { integrity: sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= } 2118 | engines: { node: '>=0.10.0' } 2119 | dev: true 2120 | 2121 | /meow/3.7.0: 2122 | resolution: { integrity: sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= } 2123 | engines: { node: '>=0.10.0' } 2124 | dependencies: 2125 | camelcase-keys: 2.1.0 2126 | decamelize: 1.2.0 2127 | loud-rejection: 1.6.0 2128 | map-obj: 1.0.1 2129 | minimist: 1.2.6 2130 | normalize-package-data: 2.5.0 2131 | object-assign: 4.1.1 2132 | read-pkg-up: 1.0.1 2133 | redent: 1.0.0 2134 | trim-newlines: 1.0.0 2135 | dev: true 2136 | 2137 | /mime-db/1.52.0: 2138 | resolution: 2139 | { 2140 | integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, 2141 | } 2142 | engines: { node: '>= 0.6' } 2143 | dev: true 2144 | 2145 | /mime-types/2.1.35: 2146 | resolution: 2147 | { 2148 | integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, 2149 | } 2150 | engines: { node: '>= 0.6' } 2151 | dependencies: 2152 | mime-db: 1.52.0 2153 | dev: true 2154 | 2155 | /minimatch/3.1.2: 2156 | resolution: 2157 | { 2158 | integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, 2159 | } 2160 | dependencies: 2161 | brace-expansion: 1.1.11 2162 | dev: true 2163 | 2164 | /minimist/1.2.6: 2165 | resolution: 2166 | { 2167 | integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==, 2168 | } 2169 | 2170 | /minipass/3.1.6: 2171 | resolution: 2172 | { 2173 | integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==, 2174 | } 2175 | engines: { node: '>=8' } 2176 | dependencies: 2177 | yallist: 4.0.0 2178 | dev: true 2179 | 2180 | /minizlib/2.1.2: 2181 | resolution: 2182 | { 2183 | integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==, 2184 | } 2185 | engines: { node: '>= 8' } 2186 | dependencies: 2187 | minipass: 3.1.6 2188 | yallist: 4.0.0 2189 | dev: true 2190 | 2191 | /mkdirp/0.5.6: 2192 | resolution: 2193 | { 2194 | integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==, 2195 | } 2196 | hasBin: true 2197 | dependencies: 2198 | minimist: 1.2.6 2199 | dev: true 2200 | 2201 | /mkdirp/1.0.4: 2202 | resolution: 2203 | { 2204 | integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==, 2205 | } 2206 | engines: { node: '>=10' } 2207 | hasBin: true 2208 | dev: true 2209 | 2210 | /ms/2.1.2: 2211 | resolution: 2212 | { 2213 | integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, 2214 | } 2215 | dev: true 2216 | 2217 | /mute-stream/0.0.5: 2218 | resolution: { integrity: sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA= } 2219 | dev: true 2220 | 2221 | /natural-compare/1.4.0: 2222 | resolution: { integrity: sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= } 2223 | dev: true 2224 | 2225 | /node-emoji/1.11.0: 2226 | resolution: 2227 | { 2228 | integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==, 2229 | } 2230 | dependencies: 2231 | lodash: 4.17.21 2232 | dev: true 2233 | 2234 | /node-sass-tilde-importer/1.0.2: 2235 | resolution: 2236 | { 2237 | integrity: sha512-Swcmr38Y7uB78itQeBm3mThjxBy9/Ah/ykPIaURY/L6Nec9AyRoL/jJ7ECfMR+oZeCTVQNxVMu/aHU+TLRVbdg==, 2238 | } 2239 | dependencies: 2240 | find-parent-dir: 0.3.1 2241 | dev: true 2242 | 2243 | /normalize-package-data/2.5.0: 2244 | resolution: 2245 | { 2246 | integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==, 2247 | } 2248 | dependencies: 2249 | hosted-git-info: 2.8.9 2250 | resolve: 1.22.0 2251 | semver: 5.7.1 2252 | validate-npm-package-license: 3.0.4 2253 | dev: true 2254 | 2255 | /normalize-path/3.0.0: 2256 | resolution: 2257 | { 2258 | integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==, 2259 | } 2260 | engines: { node: '>=0.10.0' } 2261 | dev: false 2262 | 2263 | /npm-check/5.9.2: 2264 | resolution: 2265 | { 2266 | integrity: sha512-YlTZGP1A8+Rad5wldGil9STYxgZpZl18X6GZI03f4Ch6qTI1TLHIYM0ISco19qgg8M3UHfooEqMfYOpOkF3AeA==, 2267 | } 2268 | engines: { node: '>=0.11.0' } 2269 | hasBin: true 2270 | dependencies: 2271 | babel-runtime: 6.26.0 2272 | callsite-record: 3.2.2 2273 | chalk: 1.1.3 2274 | co: 4.6.0 2275 | depcheck: 0.8.3 2276 | execa: 0.2.2 2277 | giturl: 1.0.1 2278 | global-modules: 1.0.0 2279 | globby: 4.1.0 2280 | inquirer: 0.12.0 2281 | is-ci: 1.2.1 2282 | lodash: 4.17.21 2283 | meow: 3.7.0 2284 | minimatch: 3.1.2 2285 | node-emoji: 1.11.0 2286 | ora: 0.2.3 2287 | package-json: 4.0.1 2288 | path-exists: 2.1.0 2289 | pkg-dir: 1.0.0 2290 | preferred-pm: 1.0.1 2291 | semver: 5.7.1 2292 | semver-diff: 2.1.0 2293 | text-table: 0.2.0 2294 | throat: 2.0.2 2295 | update-notifier: 2.5.0 2296 | xtend: 4.0.2 2297 | transitivePeerDependencies: 2298 | - supports-color 2299 | dev: true 2300 | 2301 | /npm-run-path/1.0.0: 2302 | resolution: { integrity: sha1-9cMr9ZX+ga6Sfa7FLoL4sACsPI8= } 2303 | engines: { node: '>=0.10.0' } 2304 | dependencies: 2305 | path-key: 1.0.0 2306 | dev: true 2307 | 2308 | /npm-run-path/2.0.2: 2309 | resolution: { integrity: sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= } 2310 | engines: { node: '>=4' } 2311 | dependencies: 2312 | path-key: 2.0.1 2313 | dev: true 2314 | 2315 | /number-is-nan/1.0.1: 2316 | resolution: { integrity: sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= } 2317 | engines: { node: '>=0.10.0' } 2318 | dev: true 2319 | 2320 | /oauth-sign/0.9.0: 2321 | resolution: 2322 | { 2323 | integrity: sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==, 2324 | } 2325 | dev: true 2326 | 2327 | /object-assign/4.1.1: 2328 | resolution: { integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= } 2329 | engines: { node: '>=0.10.0' } 2330 | dev: true 2331 | 2332 | /once/1.4.0: 2333 | resolution: { integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E= } 2334 | dependencies: 2335 | wrappy: 1.0.2 2336 | dev: true 2337 | 2338 | /onetime/1.1.0: 2339 | resolution: { integrity: sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= } 2340 | engines: { node: '>=0.10.0' } 2341 | dev: true 2342 | 2343 | /optionator/0.9.1: 2344 | resolution: 2345 | { 2346 | integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==, 2347 | } 2348 | engines: { node: '>= 0.8.0' } 2349 | dependencies: 2350 | deep-is: 0.1.4 2351 | fast-levenshtein: 2.0.6 2352 | levn: 0.4.1 2353 | prelude-ls: 1.2.1 2354 | type-check: 0.4.0 2355 | word-wrap: 1.2.3 2356 | dev: true 2357 | 2358 | /ora/0.2.3: 2359 | resolution: { integrity: sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q= } 2360 | engines: { node: '>=0.10.0' } 2361 | dependencies: 2362 | chalk: 1.1.3 2363 | cli-cursor: 1.0.2 2364 | cli-spinners: 0.1.2 2365 | object-assign: 4.1.1 2366 | dev: true 2367 | 2368 | /p-finally/1.0.0: 2369 | resolution: { integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= } 2370 | engines: { node: '>=4' } 2371 | dev: true 2372 | 2373 | /p-limit/2.3.0: 2374 | resolution: 2375 | { 2376 | integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==, 2377 | } 2378 | engines: { node: '>=6' } 2379 | dependencies: 2380 | p-try: 2.2.0 2381 | dev: true 2382 | 2383 | /p-locate/3.0.0: 2384 | resolution: 2385 | { 2386 | integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==, 2387 | } 2388 | engines: { node: '>=6' } 2389 | dependencies: 2390 | p-limit: 2.3.0 2391 | dev: true 2392 | 2393 | /p-try/2.2.0: 2394 | resolution: 2395 | { 2396 | integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==, 2397 | } 2398 | engines: { node: '>=6' } 2399 | dev: true 2400 | 2401 | /package-json/4.0.1: 2402 | resolution: { integrity: sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= } 2403 | engines: { node: '>=4' } 2404 | dependencies: 2405 | got: 6.7.1 2406 | registry-auth-token: 3.4.0 2407 | registry-url: 3.1.0 2408 | semver: 5.7.1 2409 | dev: true 2410 | 2411 | /parent-module/1.0.1: 2412 | resolution: 2413 | { 2414 | integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==, 2415 | } 2416 | engines: { node: '>=6' } 2417 | dependencies: 2418 | callsites: 3.1.0 2419 | dev: true 2420 | 2421 | /parse-json/2.2.0: 2422 | resolution: { integrity: sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= } 2423 | engines: { node: '>=0.10.0' } 2424 | dependencies: 2425 | error-ex: 1.3.2 2426 | dev: true 2427 | 2428 | /parse-passwd/1.0.0: 2429 | resolution: { integrity: sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= } 2430 | engines: { node: '>=0.10.0' } 2431 | dev: true 2432 | 2433 | /path-exists/2.1.0: 2434 | resolution: { integrity: sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= } 2435 | engines: { node: '>=0.10.0' } 2436 | dependencies: 2437 | pinkie-promise: 2.0.1 2438 | dev: true 2439 | 2440 | /path-exists/3.0.0: 2441 | resolution: { integrity: sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= } 2442 | engines: { node: '>=4' } 2443 | dev: true 2444 | 2445 | /path-is-absolute/1.0.1: 2446 | resolution: { integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18= } 2447 | engines: { node: '>=0.10.0' } 2448 | dev: true 2449 | 2450 | /path-is-inside/1.0.2: 2451 | resolution: { integrity: sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= } 2452 | dev: true 2453 | 2454 | /path-key/1.0.0: 2455 | resolution: { integrity: sha1-XVPVeAGWRsDWiADbThRua9wqx68= } 2456 | engines: { node: '>=0.10.0' } 2457 | dev: true 2458 | 2459 | /path-key/2.0.1: 2460 | resolution: { integrity: sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= } 2461 | engines: { node: '>=4' } 2462 | dev: true 2463 | 2464 | /path-key/3.1.1: 2465 | resolution: 2466 | { 2467 | integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==, 2468 | } 2469 | engines: { node: '>=8' } 2470 | dev: true 2471 | 2472 | /path-parse/1.0.7: 2473 | resolution: 2474 | { 2475 | integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, 2476 | } 2477 | dev: true 2478 | 2479 | /path-type/1.1.0: 2480 | resolution: { integrity: sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= } 2481 | engines: { node: '>=0.10.0' } 2482 | dependencies: 2483 | graceful-fs: 4.2.10 2484 | pify: 2.3.0 2485 | pinkie-promise: 2.0.1 2486 | dev: true 2487 | 2488 | /performance-now/2.1.0: 2489 | resolution: { integrity: sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= } 2490 | dev: true 2491 | 2492 | /picomatch/2.3.1: 2493 | resolution: 2494 | { 2495 | integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, 2496 | } 2497 | engines: { node: '>=8.6' } 2498 | dev: false 2499 | 2500 | /pify/2.3.0: 2501 | resolution: { integrity: sha1-7RQaasBDqEnqWISY59yosVMw6Qw= } 2502 | engines: { node: '>=0.10.0' } 2503 | dev: true 2504 | 2505 | /pify/3.0.0: 2506 | resolution: { integrity: sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= } 2507 | engines: { node: '>=4' } 2508 | dev: true 2509 | 2510 | /pinkie-promise/2.0.1: 2511 | resolution: { integrity: sha1-ITXW36ejWMBprJsXh3YogihFD/o= } 2512 | engines: { node: '>=0.10.0' } 2513 | dependencies: 2514 | pinkie: 2.0.4 2515 | dev: true 2516 | 2517 | /pinkie/2.0.4: 2518 | resolution: { integrity: sha1-clVrgM+g1IqXToDnckjoDtT3+HA= } 2519 | engines: { node: '>=0.10.0' } 2520 | dev: true 2521 | 2522 | /pkg-dir/1.0.0: 2523 | resolution: { integrity: sha1-ektQio1bstYp1EcFb/TpyTFM89Q= } 2524 | engines: { node: '>=0.10.0' } 2525 | dependencies: 2526 | find-up: 1.1.2 2527 | dev: true 2528 | 2529 | /please-upgrade-node/3.2.0: 2530 | resolution: 2531 | { 2532 | integrity: sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==, 2533 | } 2534 | dependencies: 2535 | semver-compare: 1.0.0 2536 | dev: true 2537 | 2538 | /preferred-pm/1.0.1: 2539 | resolution: 2540 | { 2541 | integrity: sha512-9Uxgin5Xnsl67DBvlNFsmDIlBuG9/XKK2cVBTj//7/7wW6ZY+IC9/GlLqxyHABpoasAsJ1MARFOdYPxMUtndxA==, 2542 | } 2543 | engines: { node: '>=4' } 2544 | dependencies: 2545 | path-exists: 3.0.0 2546 | which-pm: 1.1.0 2547 | dev: true 2548 | 2549 | /prelude-ls/1.2.1: 2550 | resolution: 2551 | { 2552 | integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==, 2553 | } 2554 | engines: { node: '>= 0.8.0' } 2555 | dev: true 2556 | 2557 | /prepend-http/1.0.4: 2558 | resolution: { integrity: sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= } 2559 | engines: { node: '>=0.10.0' } 2560 | dev: true 2561 | 2562 | /prettier/2.6.2: 2563 | resolution: 2564 | { 2565 | integrity: sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==, 2566 | } 2567 | engines: { node: '>=10.13.0' } 2568 | hasBin: true 2569 | dev: true 2570 | 2571 | /pseudomap/1.0.2: 2572 | resolution: { integrity: sha1-8FKijacOYYkX7wqKw0wa5aaChrM= } 2573 | dev: true 2574 | 2575 | /psl/1.8.0: 2576 | resolution: 2577 | { 2578 | integrity: sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==, 2579 | } 2580 | dev: true 2581 | 2582 | /punycode/2.1.1: 2583 | resolution: 2584 | { 2585 | integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==, 2586 | } 2587 | engines: { node: '>=6' } 2588 | dev: true 2589 | 2590 | /qs/6.5.3: 2591 | resolution: 2592 | { 2593 | integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==, 2594 | } 2595 | engines: { node: '>=0.6' } 2596 | dev: true 2597 | 2598 | /rc/1.2.8: 2599 | resolution: 2600 | { 2601 | integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==, 2602 | } 2603 | hasBin: true 2604 | dependencies: 2605 | deep-extend: 0.6.0 2606 | ini: 1.3.8 2607 | minimist: 1.2.6 2608 | strip-json-comments: 2.0.1 2609 | dev: true 2610 | 2611 | /read-pkg-up/1.0.1: 2612 | resolution: { integrity: sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= } 2613 | engines: { node: '>=0.10.0' } 2614 | dependencies: 2615 | find-up: 1.1.2 2616 | read-pkg: 1.1.0 2617 | dev: true 2618 | 2619 | /read-pkg/1.1.0: 2620 | resolution: { integrity: sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= } 2621 | engines: { node: '>=0.10.0' } 2622 | dependencies: 2623 | load-json-file: 1.1.0 2624 | normalize-package-data: 2.5.0 2625 | path-type: 1.1.0 2626 | dev: true 2627 | 2628 | /readdirp/3.6.0: 2629 | resolution: 2630 | { 2631 | integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==, 2632 | } 2633 | engines: { node: '>=8.10.0' } 2634 | dependencies: 2635 | picomatch: 2.3.1 2636 | dev: false 2637 | 2638 | /readline2/1.0.1: 2639 | resolution: { integrity: sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU= } 2640 | dependencies: 2641 | code-point-at: 1.1.0 2642 | is-fullwidth-code-point: 1.0.0 2643 | mute-stream: 0.0.5 2644 | dev: true 2645 | 2646 | /rechoir/0.6.2: 2647 | resolution: { integrity: sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q= } 2648 | engines: { node: '>= 0.10' } 2649 | dependencies: 2650 | resolve: 1.22.0 2651 | dev: true 2652 | 2653 | /redent/1.0.0: 2654 | resolution: { integrity: sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= } 2655 | engines: { node: '>=0.10.0' } 2656 | dependencies: 2657 | indent-string: 2.1.0 2658 | strip-indent: 1.0.1 2659 | dev: true 2660 | 2661 | /regenerator-runtime/0.11.1: 2662 | resolution: 2663 | { 2664 | integrity: sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==, 2665 | } 2666 | dev: true 2667 | 2668 | /regexpp/3.2.0: 2669 | resolution: 2670 | { 2671 | integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==, 2672 | } 2673 | engines: { node: '>=8' } 2674 | dev: true 2675 | 2676 | /registry-auth-token/3.4.0: 2677 | resolution: 2678 | { 2679 | integrity: sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==, 2680 | } 2681 | dependencies: 2682 | rc: 1.2.8 2683 | safe-buffer: 5.2.1 2684 | dev: true 2685 | 2686 | /registry-url/3.1.0: 2687 | resolution: { integrity: sha1-PU74cPc93h138M+aOBQyRE4XSUI= } 2688 | engines: { node: '>=0.10.0' } 2689 | dependencies: 2690 | rc: 1.2.8 2691 | dev: true 2692 | 2693 | /repeating/2.0.1: 2694 | resolution: { integrity: sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= } 2695 | engines: { node: '>=0.10.0' } 2696 | dependencies: 2697 | is-finite: 1.1.0 2698 | dev: true 2699 | 2700 | /request/2.88.2: 2701 | resolution: 2702 | { 2703 | integrity: sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==, 2704 | } 2705 | engines: { node: '>= 6' } 2706 | deprecated: request has been deprecated, see https://github.com/request/request/issues/3142 2707 | dependencies: 2708 | aws-sign2: 0.7.0 2709 | aws4: 1.11.0 2710 | caseless: 0.12.0 2711 | combined-stream: 1.0.8 2712 | extend: 3.0.2 2713 | forever-agent: 0.6.1 2714 | form-data: 2.3.3 2715 | har-validator: 5.1.5 2716 | http-signature: 1.2.0 2717 | is-typedarray: 1.0.0 2718 | isstream: 0.1.2 2719 | json-stringify-safe: 5.0.1 2720 | mime-types: 2.1.35 2721 | oauth-sign: 0.9.0 2722 | performance-now: 2.1.0 2723 | qs: 6.5.3 2724 | safe-buffer: 5.2.1 2725 | tough-cookie: 2.5.0 2726 | tunnel-agent: 0.6.0 2727 | uuid: 3.4.0 2728 | dev: true 2729 | 2730 | /require-directory/2.1.1: 2731 | resolution: { integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I= } 2732 | engines: { node: '>=0.10.0' } 2733 | dev: true 2734 | 2735 | /require-main-filename/2.0.0: 2736 | resolution: 2737 | { 2738 | integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==, 2739 | } 2740 | dev: true 2741 | 2742 | /require-package-name/2.0.1: 2743 | resolution: { integrity: sha1-wR6XJ2tluOKSP3Xav1+y7ww4Qbk= } 2744 | dev: true 2745 | 2746 | /resolve-dir/1.0.1: 2747 | resolution: { integrity: sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= } 2748 | engines: { node: '>=0.10.0' } 2749 | dependencies: 2750 | expand-tilde: 2.0.2 2751 | global-modules: 1.0.0 2752 | dev: true 2753 | 2754 | /resolve-from/4.0.0: 2755 | resolution: 2756 | { 2757 | integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==, 2758 | } 2759 | engines: { node: '>=4' } 2760 | dev: true 2761 | 2762 | /resolve/1.22.0: 2763 | resolution: 2764 | { 2765 | integrity: sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==, 2766 | } 2767 | hasBin: true 2768 | dependencies: 2769 | is-core-module: 2.9.0 2770 | path-parse: 1.0.7 2771 | supports-preserve-symlinks-flag: 1.0.0 2772 | dev: true 2773 | 2774 | /restore-cursor/1.0.1: 2775 | resolution: { integrity: sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= } 2776 | engines: { node: '>=0.10.0' } 2777 | dependencies: 2778 | exit-hook: 1.1.1 2779 | onetime: 1.1.0 2780 | dev: true 2781 | 2782 | /rimraf/3.0.2: 2783 | resolution: 2784 | { 2785 | integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==, 2786 | } 2787 | hasBin: true 2788 | dependencies: 2789 | glob: 7.2.3 2790 | dev: true 2791 | 2792 | /run-async/0.1.0: 2793 | resolution: { integrity: sha1-yK1KXhEGYeQCp9IbUw4AnyX444k= } 2794 | dependencies: 2795 | once: 1.4.0 2796 | dev: true 2797 | 2798 | /rx-lite/3.1.2: 2799 | resolution: { integrity: sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI= } 2800 | dev: true 2801 | 2802 | /safe-buffer/5.2.1: 2803 | resolution: 2804 | { 2805 | integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==, 2806 | } 2807 | dev: true 2808 | 2809 | /safer-buffer/2.1.2: 2810 | resolution: 2811 | { 2812 | integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, 2813 | } 2814 | dev: true 2815 | 2816 | /semver-compare/1.0.0: 2817 | resolution: { integrity: sha1-De4hahyUGrN+nvsXiPavxf9VN/w= } 2818 | dev: true 2819 | 2820 | /semver-diff/2.1.0: 2821 | resolution: { integrity: sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= } 2822 | engines: { node: '>=0.10.0' } 2823 | dependencies: 2824 | semver: 5.7.1 2825 | dev: true 2826 | 2827 | /semver/5.7.1: 2828 | resolution: 2829 | { 2830 | integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, 2831 | } 2832 | hasBin: true 2833 | dev: true 2834 | 2835 | /set-blocking/2.0.0: 2836 | resolution: { integrity: sha1-BF+XgtARrppoA93TgrJDkrPYkPc= } 2837 | dev: true 2838 | 2839 | /shebang-command/1.2.0: 2840 | resolution: { integrity: sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= } 2841 | engines: { node: '>=0.10.0' } 2842 | dependencies: 2843 | shebang-regex: 1.0.0 2844 | dev: true 2845 | 2846 | /shebang-command/2.0.0: 2847 | resolution: 2848 | { 2849 | integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==, 2850 | } 2851 | engines: { node: '>=8' } 2852 | dependencies: 2853 | shebang-regex: 3.0.0 2854 | dev: true 2855 | 2856 | /shebang-regex/1.0.0: 2857 | resolution: { integrity: sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= } 2858 | engines: { node: '>=0.10.0' } 2859 | dev: true 2860 | 2861 | /shebang-regex/3.0.0: 2862 | resolution: 2863 | { 2864 | integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==, 2865 | } 2866 | engines: { node: '>=8' } 2867 | dev: true 2868 | 2869 | /shelljs/0.8.5: 2870 | resolution: 2871 | { 2872 | integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==, 2873 | } 2874 | engines: { node: '>=4' } 2875 | hasBin: true 2876 | dependencies: 2877 | glob: 7.2.3 2878 | interpret: 1.4.0 2879 | rechoir: 0.6.2 2880 | dev: true 2881 | 2882 | /signal-exit/3.0.7: 2883 | resolution: 2884 | { 2885 | integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==, 2886 | } 2887 | dev: true 2888 | 2889 | /spdx-correct/3.1.1: 2890 | resolution: 2891 | { 2892 | integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==, 2893 | } 2894 | dependencies: 2895 | spdx-expression-parse: 3.0.1 2896 | spdx-license-ids: 3.0.11 2897 | dev: true 2898 | 2899 | /spdx-exceptions/2.3.0: 2900 | resolution: 2901 | { 2902 | integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==, 2903 | } 2904 | dev: true 2905 | 2906 | /spdx-expression-parse/3.0.1: 2907 | resolution: 2908 | { 2909 | integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==, 2910 | } 2911 | dependencies: 2912 | spdx-exceptions: 2.3.0 2913 | spdx-license-ids: 3.0.11 2914 | dev: true 2915 | 2916 | /spdx-license-ids/3.0.11: 2917 | resolution: 2918 | { 2919 | integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==, 2920 | } 2921 | dev: true 2922 | 2923 | /sprintf-js/1.0.3: 2924 | resolution: { integrity: sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= } 2925 | dev: true 2926 | 2927 | /sshpk/1.17.0: 2928 | resolution: 2929 | { 2930 | integrity: sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==, 2931 | } 2932 | engines: { node: '>=0.10.0' } 2933 | hasBin: true 2934 | dependencies: 2935 | asn1: 0.2.6 2936 | assert-plus: 1.0.0 2937 | bcrypt-pbkdf: 1.0.2 2938 | dashdash: 1.14.1 2939 | ecc-jsbn: 0.1.2 2940 | getpass: 0.1.7 2941 | jsbn: 0.1.1 2942 | safer-buffer: 2.1.2 2943 | tweetnacl: 0.14.5 2944 | dev: true 2945 | 2946 | /stackframe/0.3.1: 2947 | resolution: { integrity: sha1-M6qE8Rd6VUjIk1Uzy/6zQgl19aQ= } 2948 | dev: true 2949 | 2950 | /string-width/1.0.2: 2951 | resolution: { integrity: sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= } 2952 | engines: { node: '>=0.10.0' } 2953 | dependencies: 2954 | code-point-at: 1.1.0 2955 | is-fullwidth-code-point: 1.0.0 2956 | strip-ansi: 3.0.1 2957 | dev: true 2958 | 2959 | /string-width/2.1.1: 2960 | resolution: 2961 | { 2962 | integrity: sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==, 2963 | } 2964 | engines: { node: '>=4' } 2965 | dependencies: 2966 | is-fullwidth-code-point: 2.0.0 2967 | strip-ansi: 4.0.0 2968 | dev: true 2969 | 2970 | /string-width/3.1.0: 2971 | resolution: 2972 | { 2973 | integrity: sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==, 2974 | } 2975 | engines: { node: '>=6' } 2976 | dependencies: 2977 | emoji-regex: 7.0.3 2978 | is-fullwidth-code-point: 2.0.0 2979 | strip-ansi: 5.2.0 2980 | dev: true 2981 | 2982 | /strip-ansi/3.0.1: 2983 | resolution: { integrity: sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= } 2984 | engines: { node: '>=0.10.0' } 2985 | dependencies: 2986 | ansi-regex: 2.1.1 2987 | dev: true 2988 | 2989 | /strip-ansi/4.0.0: 2990 | resolution: { integrity: sha1-qEeQIusaw2iocTibY1JixQXuNo8= } 2991 | engines: { node: '>=4' } 2992 | dependencies: 2993 | ansi-regex: 3.0.1 2994 | dev: true 2995 | 2996 | /strip-ansi/5.2.0: 2997 | resolution: 2998 | { 2999 | integrity: sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==, 3000 | } 3001 | engines: { node: '>=6' } 3002 | dependencies: 3003 | ansi-regex: 4.1.1 3004 | dev: true 3005 | 3006 | /strip-ansi/6.0.1: 3007 | resolution: 3008 | { 3009 | integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==, 3010 | } 3011 | engines: { node: '>=8' } 3012 | dependencies: 3013 | ansi-regex: 5.0.1 3014 | dev: true 3015 | 3016 | /strip-bom/2.0.0: 3017 | resolution: { integrity: sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= } 3018 | engines: { node: '>=0.10.0' } 3019 | dependencies: 3020 | is-utf8: 0.2.1 3021 | dev: true 3022 | 3023 | /strip-bom/3.0.0: 3024 | resolution: { integrity: sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= } 3025 | engines: { node: '>=4' } 3026 | dev: true 3027 | 3028 | /strip-eof/1.0.0: 3029 | resolution: { integrity: sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= } 3030 | engines: { node: '>=0.10.0' } 3031 | dev: true 3032 | 3033 | /strip-indent/1.0.1: 3034 | resolution: { integrity: sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= } 3035 | engines: { node: '>=0.10.0' } 3036 | hasBin: true 3037 | dependencies: 3038 | get-stdin: 4.0.1 3039 | dev: true 3040 | 3041 | /strip-json-comments/2.0.1: 3042 | resolution: { integrity: sha1-PFMZQukIwml8DsNEhYwobHygpgo= } 3043 | engines: { node: '>=0.10.0' } 3044 | dev: true 3045 | 3046 | /strip-json-comments/3.1.1: 3047 | resolution: 3048 | { 3049 | integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==, 3050 | } 3051 | engines: { node: '>=8' } 3052 | dev: true 3053 | 3054 | /supports-color/2.0.0: 3055 | resolution: { integrity: sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= } 3056 | engines: { node: '>=0.8.0' } 3057 | dev: true 3058 | 3059 | /supports-color/5.5.0: 3060 | resolution: 3061 | { 3062 | integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, 3063 | } 3064 | engines: { node: '>=4' } 3065 | dependencies: 3066 | has-flag: 3.0.0 3067 | dev: true 3068 | 3069 | /supports-color/7.2.0: 3070 | resolution: 3071 | { 3072 | integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, 3073 | } 3074 | engines: { node: '>=8' } 3075 | dependencies: 3076 | has-flag: 4.0.0 3077 | dev: true 3078 | 3079 | /supports-preserve-symlinks-flag/1.0.0: 3080 | resolution: 3081 | { 3082 | integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, 3083 | } 3084 | engines: { node: '>= 0.4' } 3085 | dev: true 3086 | 3087 | /tar/6.1.11: 3088 | resolution: 3089 | { 3090 | integrity: sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==, 3091 | } 3092 | engines: { node: '>= 10' } 3093 | dependencies: 3094 | chownr: 2.0.0 3095 | fs-minipass: 2.1.0 3096 | minipass: 3.1.6 3097 | minizlib: 2.1.2 3098 | mkdirp: 1.0.4 3099 | yallist: 4.0.0 3100 | dev: true 3101 | 3102 | /term-size/1.2.0: 3103 | resolution: { integrity: sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= } 3104 | engines: { node: '>=4' } 3105 | dependencies: 3106 | execa: 0.7.0 3107 | dev: true 3108 | 3109 | /text-table/0.2.0: 3110 | resolution: { integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= } 3111 | dev: true 3112 | 3113 | /throat/2.0.2: 3114 | resolution: { integrity: sha1-qfzoCLaeEzpjJZB4DzQsMKYkmwI= } 3115 | dev: true 3116 | 3117 | /through/2.3.8: 3118 | resolution: { integrity: sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= } 3119 | dev: true 3120 | 3121 | /timed-out/4.0.1: 3122 | resolution: { integrity: sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= } 3123 | engines: { node: '>=0.10.0' } 3124 | dev: true 3125 | 3126 | /to-fast-properties/2.0.0: 3127 | resolution: { integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= } 3128 | engines: { node: '>=4' } 3129 | dev: true 3130 | 3131 | /to-regex-range/5.0.1: 3132 | resolution: 3133 | { 3134 | integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, 3135 | } 3136 | engines: { node: '>=8.0' } 3137 | dependencies: 3138 | is-number: 7.0.0 3139 | dev: false 3140 | 3141 | /tough-cookie/2.5.0: 3142 | resolution: 3143 | { 3144 | integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==, 3145 | } 3146 | engines: { node: '>=0.8' } 3147 | dependencies: 3148 | psl: 1.8.0 3149 | punycode: 2.1.1 3150 | dev: true 3151 | 3152 | /traverse/0.3.9: 3153 | resolution: { integrity: sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= } 3154 | dev: true 3155 | 3156 | /trim-newlines/1.0.0: 3157 | resolution: { integrity: sha1-WIeWa7WCpFA6QetST301ARgVphM= } 3158 | engines: { node: '>=0.10.0' } 3159 | dev: true 3160 | 3161 | /tunnel-agent/0.6.0: 3162 | resolution: { integrity: sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= } 3163 | dependencies: 3164 | safe-buffer: 5.2.1 3165 | dev: true 3166 | 3167 | /tweetnacl/0.14.5: 3168 | resolution: { integrity: sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= } 3169 | dev: true 3170 | 3171 | /type-check/0.4.0: 3172 | resolution: 3173 | { 3174 | integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==, 3175 | } 3176 | engines: { node: '>= 0.8.0' } 3177 | dependencies: 3178 | prelude-ls: 1.2.1 3179 | dev: true 3180 | 3181 | /type-fest/0.20.2: 3182 | resolution: 3183 | { 3184 | integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, 3185 | } 3186 | engines: { node: '>=10' } 3187 | dev: true 3188 | 3189 | /unique-string/1.0.0: 3190 | resolution: { integrity: sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= } 3191 | engines: { node: '>=4' } 3192 | dependencies: 3193 | crypto-random-string: 1.0.0 3194 | dev: true 3195 | 3196 | /unzip-response/2.0.1: 3197 | resolution: { integrity: sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= } 3198 | engines: { node: '>=4' } 3199 | dev: true 3200 | 3201 | /unzip-stream/0.3.1: 3202 | resolution: 3203 | { 3204 | integrity: sha512-RzaGXLNt+CW+T41h1zl6pGz3EaeVhYlK+rdAap+7DxW5kqsqePO8kRtWPaCiVqdhZc86EctSPVYNix30YOMzmw==, 3205 | } 3206 | dependencies: 3207 | binary: 0.3.0 3208 | mkdirp: 0.5.6 3209 | dev: true 3210 | 3211 | /update-notifier/2.5.0: 3212 | resolution: 3213 | { 3214 | integrity: sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==, 3215 | } 3216 | engines: { node: '>=4' } 3217 | dependencies: 3218 | boxen: 1.3.0 3219 | chalk: 2.4.2 3220 | configstore: 3.1.5 3221 | import-lazy: 2.1.0 3222 | is-ci: 1.2.1 3223 | is-installed-globally: 0.1.0 3224 | is-npm: 1.0.0 3225 | latest-version: 3.1.0 3226 | semver-diff: 2.1.0 3227 | xdg-basedir: 3.0.0 3228 | dev: true 3229 | 3230 | /uri-js/4.4.1: 3231 | resolution: 3232 | { 3233 | integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, 3234 | } 3235 | dependencies: 3236 | punycode: 2.1.1 3237 | dev: true 3238 | 3239 | /url-parse-lax/1.0.0: 3240 | resolution: { integrity: sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= } 3241 | engines: { node: '>=0.10.0' } 3242 | dependencies: 3243 | prepend-http: 1.0.4 3244 | dev: true 3245 | 3246 | /uuid/3.4.0: 3247 | resolution: 3248 | { 3249 | integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==, 3250 | } 3251 | deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. 3252 | hasBin: true 3253 | dev: true 3254 | 3255 | /v8-compile-cache/2.3.0: 3256 | resolution: 3257 | { 3258 | integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==, 3259 | } 3260 | dev: true 3261 | 3262 | /validate-npm-package-license/3.0.4: 3263 | resolution: 3264 | { 3265 | integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==, 3266 | } 3267 | dependencies: 3268 | spdx-correct: 3.1.1 3269 | spdx-expression-parse: 3.0.1 3270 | dev: true 3271 | 3272 | /verror/1.10.0: 3273 | resolution: { integrity: sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= } 3274 | engines: { '0': node >=0.6.0 } 3275 | dependencies: 3276 | assert-plus: 1.0.0 3277 | core-util-is: 1.0.2 3278 | extsprintf: 1.3.0 3279 | dev: true 3280 | 3281 | /vue-template-compiler/2.6.14: 3282 | resolution: 3283 | { 3284 | integrity: sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==, 3285 | } 3286 | dependencies: 3287 | de-indent: 1.0.2 3288 | he: 1.2.0 3289 | dev: true 3290 | 3291 | /walkdir/0.3.2: 3292 | resolution: 3293 | { 3294 | integrity: sha512-0Twghia4Z5wDGDYWURlhZmI47GvERMCsXIu0QZWVVZyW9ZjpbbZvD9Zy9M6cWiQQRRbAcYajIyKNavaZZDt1Uw==, 3295 | } 3296 | engines: { node: '>=6.0.0' } 3297 | dev: true 3298 | 3299 | /which-module/2.0.0: 3300 | resolution: { integrity: sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= } 3301 | dev: true 3302 | 3303 | /which-pm/1.1.0: 3304 | resolution: 3305 | { 3306 | integrity: sha512-7GHHJQpALk7BWMD8I+xSILSbHyngvBlfSXlwGpdRFY2voFwVCx+eJAybXTzTnUYmt7zio6B9SEdI81T0fBjxNA==, 3307 | } 3308 | engines: { node: '>=4' } 3309 | dependencies: 3310 | load-yaml-file: 0.1.1 3311 | path-exists: 3.0.0 3312 | dev: true 3313 | 3314 | /which/1.3.1: 3315 | resolution: 3316 | { 3317 | integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==, 3318 | } 3319 | hasBin: true 3320 | dependencies: 3321 | isexe: 2.0.0 3322 | dev: true 3323 | 3324 | /which/2.0.2: 3325 | resolution: 3326 | { 3327 | integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==, 3328 | } 3329 | engines: { node: '>= 8' } 3330 | hasBin: true 3331 | dependencies: 3332 | isexe: 2.0.0 3333 | dev: true 3334 | 3335 | /widest-line/2.0.1: 3336 | resolution: 3337 | { 3338 | integrity: sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==, 3339 | } 3340 | engines: { node: '>=4' } 3341 | dependencies: 3342 | string-width: 2.1.1 3343 | dev: true 3344 | 3345 | /word-wrap/1.2.3: 3346 | resolution: 3347 | { 3348 | integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, 3349 | } 3350 | engines: { node: '>=0.10.0' } 3351 | dev: true 3352 | 3353 | /wrap-ansi/5.1.0: 3354 | resolution: 3355 | { 3356 | integrity: sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==, 3357 | } 3358 | engines: { node: '>=6' } 3359 | dependencies: 3360 | ansi-styles: 3.2.1 3361 | string-width: 3.1.0 3362 | strip-ansi: 5.2.0 3363 | dev: true 3364 | 3365 | /wrappy/1.0.2: 3366 | resolution: { integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= } 3367 | dev: true 3368 | 3369 | /write-file-atomic/2.4.3: 3370 | resolution: 3371 | { 3372 | integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==, 3373 | } 3374 | dependencies: 3375 | graceful-fs: 4.2.10 3376 | imurmurhash: 0.1.4 3377 | signal-exit: 3.0.7 3378 | dev: true 3379 | 3380 | /xdg-basedir/3.0.0: 3381 | resolution: { integrity: sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= } 3382 | engines: { node: '>=4' } 3383 | dev: true 3384 | 3385 | /xtend/4.0.2: 3386 | resolution: 3387 | { 3388 | integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==, 3389 | } 3390 | engines: { node: '>=0.4' } 3391 | dev: true 3392 | 3393 | /y18n/4.0.3: 3394 | resolution: 3395 | { 3396 | integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==, 3397 | } 3398 | dev: true 3399 | 3400 | /yallist/2.1.2: 3401 | resolution: { integrity: sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= } 3402 | dev: true 3403 | 3404 | /yallist/4.0.0: 3405 | resolution: 3406 | { 3407 | integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==, 3408 | } 3409 | dev: true 3410 | 3411 | /yargs-parser/13.1.2: 3412 | resolution: 3413 | { 3414 | integrity: sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==, 3415 | } 3416 | dependencies: 3417 | camelcase: 5.3.1 3418 | decamelize: 1.2.0 3419 | dev: true 3420 | 3421 | /yargs/13.3.2: 3422 | resolution: 3423 | { 3424 | integrity: sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==, 3425 | } 3426 | dependencies: 3427 | cliui: 5.0.0 3428 | find-up: 3.0.0 3429 | get-caller-file: 2.0.5 3430 | require-directory: 2.1.1 3431 | require-main-filename: 2.0.0 3432 | set-blocking: 2.0.0 3433 | string-width: 3.1.0 3434 | which-module: 2.0.0 3435 | y18n: 4.0.3 3436 | yargs-parser: 13.1.2 3437 | dev: true 3438 | -------------------------------------------------------------------------------- /src/DocTest.elm: -------------------------------------------------------------------------------- 1 | module DocTest exposing (..) 2 | 3 | import Json.Decode exposing (..) 4 | import Regex 5 | import String 6 | 7 | 8 | 9 | -- | model for holding spec info 10 | 11 | 12 | type alias Spec = 13 | { test : String 14 | , expected : String 15 | , line : Int 16 | , output : String 17 | , passed : Bool 18 | } 19 | 20 | 21 | 22 | -- | model for report 23 | 24 | 25 | type alias Report = 26 | { text : String 27 | , failed : Bool 28 | } 29 | 30 | 31 | 32 | -- | model for output 33 | 34 | 35 | type alias Output = 36 | { expression : String 37 | , passed : Bool 38 | } 39 | 40 | 41 | 42 | -- | spec constructor. 43 | -- initially all specs have "False" result. 44 | -- it will be evaluated later in the process. 45 | 46 | 47 | newSpec : String -> String -> Int -> Spec 48 | newSpec test expected line = 49 | Spec test expected line "" False 50 | 51 | 52 | 53 | -- | This will correct specs from given Elm source code 54 | -- TODO: this part of the code is very ineffecient. Has to be fixed. 55 | 56 | 57 | collectSpecs : String -> ( String, List Spec ) 58 | collectSpecs src = 59 | let 60 | blockCommentRegex = 61 | Maybe.withDefault Regex.never <| 62 | Regex.fromString "{-(.|\\n)*?-}" 63 | 64 | evaluationMatcher = 65 | "((--[\\t ]*)>>>.+(\\r\\n?|\\n))+" 66 | 67 | expectedMatcher = 68 | "(\\2(?!>>>).+\\3)*" 69 | 70 | testBlockRegex = 71 | Maybe.withDefault Regex.never <| 72 | Regex.fromString (evaluationMatcher ++ expectedMatcher) 73 | 74 | lineMatcher = 75 | Maybe.withDefault Regex.never <| 76 | Regex.fromString "(?:--)?([\\t ]*>>>)?(.+)" 77 | 78 | replacementStr { test, expected, line } = 79 | if String.isEmpty expected then 80 | String.trimLeft test 81 | 82 | else 83 | String.join "" 84 | [ "expression_" 85 | , String.fromInt line 86 | , " =\n" 87 | , test 88 | , "expected_" 89 | , String.fromInt line 90 | , " = " 91 | , expected 92 | ] 93 | 94 | extractSpecs { match, index } = 95 | let 96 | constructSpec { submatches } spec = 97 | case submatches of 98 | (Just _) :: (Just t) :: _ -> 99 | { spec | test = spec.test ++ t ++ "\n" } 100 | 101 | Nothing :: (Just e) :: _ -> 102 | { spec | expected = spec.expected ++ e ++ "\n" } 103 | 104 | _ -> 105 | spec 106 | in 107 | Regex.find lineMatcher match 108 | |> List.foldl constructSpec (newSpec "" "" (countLines index)) 109 | |> (\spec -> { spec | test = spec.test, expected = spec.expected }) 110 | 111 | countLines index = 112 | String.left index src |> String.lines |> List.length 113 | 114 | modifiedSrc = 115 | Regex.replace blockCommentRegex lineCommentify src 116 | 117 | commentPattern = 118 | Maybe.withDefault Regex.never <| 119 | Regex.fromString "({-|-})" 120 | 121 | lineCommentify { match } = 122 | String.lines match 123 | |> List.map (Regex.replace commentPattern (always "--")) 124 | |> List.map (\line -> "-- " ++ line) 125 | |> String.join "\n" 126 | in 127 | ( Regex.replace testBlockRegex (replacementStr << extractSpecs) modifiedSrc 128 | , Regex.find testBlockRegex modifiedSrc 129 | |> List.map extractSpecs 130 | |> List.filter (\spec -> not <| String.isEmpty spec.expected) 131 | ) 132 | 133 | 134 | evalHeader : String -> String 135 | evalHeader modname = 136 | let 137 | targetImport = 138 | "import " ++ modname ++ " exposing (..)" 139 | 140 | eval = 141 | """ 142 | (\\x -> "[" ++ x ++ "]") <| 143 | String.join "," <| List.map 144 | (\\(o,r) -> 145 | ("{\\"passed\\":" ++ (if r then "true" else "false") 146 | ++ ", \\"output\\":" ++ Debug.toString o ++ "}")) 147 | <| 148 | """ 149 | in 150 | targetImport ++ eval 151 | 152 | 153 | 154 | -- | 155 | -- >>> getModuleName "./src/Test.elm" 156 | -- "DoctestTempModule__src_Test_elm" 157 | -- 158 | -- >>> getModuleName ".\\src\\TestA.elm" 159 | -- "DoctestTempModule__src_TestA_elm" 160 | -- 161 | -- >>> getModuleName "TestB.elm" 162 | -- "DoctestTempModule__TestB_elm" 163 | -- 164 | 165 | 166 | getModuleName : String -> String 167 | getModuleName filename = 168 | filename 169 | |> String.map 170 | (\c -> 171 | if List.member c [ '/', '\\', '.' ] then 172 | ' ' 173 | 174 | else 175 | c 176 | ) 177 | |> String.words 178 | |> String.join "_" 179 | |> String.split ".elm" 180 | |> List.head 181 | |> Maybe.withDefault "" 182 | |> (\s -> "DoctestTempModule__" ++ s) 183 | 184 | 185 | 186 | -- elm-repl requires tailing back slash for handling multi-line statements 187 | 188 | 189 | evaluationScript : String -> List Spec -> ( String, String ) 190 | evaluationScript filename specs = 191 | let 192 | testCaseArray = 193 | " [" 194 | ++ (List.map evalSpec specs |> String.join "\n ,") 195 | ++ "\n ]\n\n" 196 | 197 | evalSpec { test, expected, line } = 198 | let 199 | num = 200 | String.fromInt line 201 | in 202 | String.join "" 203 | [ "( (Debug.toString expression_" 204 | , num 205 | , ")" 206 | , ", (expression_" 207 | , num 208 | , " == " 209 | , "expected_" 210 | , num 211 | , "))" 212 | ] 213 | 214 | header = 215 | evalHeader moduleName 216 | 217 | moduleName = 218 | getModuleName filename 219 | in 220 | ( header ++ (testCaseArray |> String.lines |> String.join "\n") 221 | , moduleName 222 | ) 223 | 224 | 225 | 226 | -- | create temporary module source from original elm source code 227 | 228 | 229 | createTempModule : String -> String -> List Spec -> String 230 | createTempModule modulename src specs = 231 | let 232 | modulePart = 233 | "^(\\w*\\s*)module\\s+([\\.\\w])+" 234 | 235 | exposingPart = 236 | "(\\s+?exposing\\s+\\(([^()]|\\([^()]*\\))+\\))?" 237 | 238 | moduleRe = 239 | Maybe.withDefault Regex.never <| 240 | Regex.fromString (modulePart ++ exposingPart) 241 | 242 | newheader = 243 | "module " ++ modulename ++ " exposing (..)\n" 244 | 245 | isport match = 246 | List.head match.submatches == Just Nothing 247 | 248 | moduledecr match = 249 | case match.submatches of 250 | (Just str) :: _ -> 251 | str ++ newheader 252 | 253 | _ -> 254 | newheader 255 | 256 | replacedSrc = 257 | Regex.replaceAtMost 1 moduleRe moduledecr src 258 | 259 | -- even supports the case where there is no module declaration 260 | in 261 | if replacedSrc == src then 262 | newheader ++ src 263 | 264 | else 265 | replacedSrc 266 | 267 | 268 | 269 | -- | make human readable report 270 | -- >>> createReport "Test.elm" [Spec "3+1" "4" 1 "4" True] 271 | -- Report "Examples: 1 Failures: 0" False 272 | -- 273 | -- >>> createReport "Test.elm" [Spec "3+1" "3" 1 "4" False] 274 | -- Report 275 | -- ( "### Failure in Test.elm:1: expression 3+1\n" 276 | -- ++ "expected: 3\n but got: 4\nExamples: 1 Failures: 1") True 277 | -- 278 | 279 | 280 | createReport : String -> List Spec -> Report 281 | createReport filename specs = 282 | let 283 | failures = 284 | List.filter (not << .passed) specs 285 | 286 | summary = 287 | String.join " " 288 | [ "Examples: " ++ (String.fromInt <| List.length specs) 289 | , "Failures: " ++ (String.fromInt <| List.length failures) 290 | ] 291 | 292 | reports = 293 | failures |> List.map reportFailure 294 | 295 | reportFailure { test, expected, line, passed, output } = 296 | String.join "\n" 297 | [ "### Failure in " 298 | ++ filename 299 | ++ ":" 300 | ++ String.fromInt line 301 | ++ ": expression " 302 | ++ test 303 | , "expected: " ++ String.trim expected 304 | , " but got: " ++ String.trim output 305 | , "" 306 | ] 307 | in 308 | Report (String.join "\n" reports ++ summary) (not <| List.isEmpty failures) 309 | 310 | 311 | 312 | -- | parse the raw json string which dumped by elm-repl 313 | -- 314 | -- >>> parseOutput "[]" 315 | -- [] 316 | -- 317 | -- >>> parseOutput "[{\"passed\":true, \"output\":\"8\"}]" 318 | -- [Output "8" True] 319 | -- 320 | -- >>> parseOutput "[{\"passed\":true, \"output\":\"8\"},{\"passed\":false, \"output\":\"3\"}]" 321 | -- [Output "8" True, Output "3" False] 322 | -- 323 | 324 | 325 | parseOutput : String -> List Output 326 | parseOutput txt = 327 | let 328 | decoder = 329 | Json.Decode.list <| 330 | Json.Decode.map2 Output 331 | (Json.Decode.field "output" string) 332 | (Json.Decode.field "passed" bool) 333 | in 334 | Result.withDefault [] <| decodeString decoder txt 335 | 336 | 337 | 338 | -- | merge outputs into spec list 339 | -- >>> mergeResultIntoSpecs [Spec "1+2" "3" 1 "3" True] [Output "3" True] 340 | -- [Spec "1+2" "3" 1 "3" True] 341 | -- 342 | 343 | 344 | mergeResultIntoSpecs : List Spec -> List Output -> List Spec 345 | mergeResultIntoSpecs specs outputs = 346 | let 347 | merge spec { expression, passed } = 348 | { spec | output = expression, passed = passed } 349 | in 350 | List.map2 merge specs outputs 351 | 352 | 353 | 354 | -- | parse and merge raw output string into spec list 355 | 356 | 357 | mergeRawOutputIntoSpecs : List Spec -> String -> List Spec 358 | mergeRawOutputIntoSpecs specs txt = 359 | mergeResultIntoSpecs specs <| parseOutput txt 360 | 361 | 362 | 363 | -- | create report from raw output 364 | 365 | 366 | createReportFromOutput : String -> List Spec -> String -> Report 367 | createReportFromOutput filename specs output = 368 | let 369 | resultSpecs = 370 | mergeRawOutputIntoSpecs specs output 371 | in 372 | createReport filename resultSpecs 373 | -------------------------------------------------------------------------------- /src/Main.elm: -------------------------------------------------------------------------------- 1 | port module Main exposing (..) 2 | 3 | import DocTest 4 | import String 5 | 6 | 7 | main : Program () Model Msg 8 | main = 9 | Platform.worker 10 | { init = init 11 | , update = update 12 | , subscriptions = subscriptions 13 | } 14 | 15 | 16 | init : () -> ( Model, Cmd Msg ) 17 | init _ = 18 | ( emptyModel, Cmd.none ) 19 | 20 | 21 | type Msg 22 | = AddFileQueue (List String) 23 | | Input SourceCode 24 | | NewResult TestResult 25 | | GoNext Bool 26 | 27 | 28 | update : Msg -> Model -> ( Model, Cmd Msg ) 29 | update msg model = 30 | case msg of 31 | AddFileQueue filenames -> 32 | ( { model | fileQueue = model.fileQueue ++ filenames }, Cmd.none ) 33 | 34 | Input { code, filename } -> 35 | let 36 | ( testcode, specs ) = 37 | DocTest.collectSpecs code 38 | 39 | ( runner, modulename ) = 40 | DocTest.evaluationScript filename specs 41 | 42 | out = 43 | { src = DocTest.createTempModule modulename testcode specs 44 | , runner = runner 45 | , filename = filename 46 | , modulename = modulename 47 | } 48 | in 49 | ( { model | currentSpecs = specs }, evaluate out ) 50 | 51 | NewResult rst -> 52 | let 53 | createReport specs { filename, stdout, failed } = 54 | if failed then 55 | DocTest.Report stdout True 56 | 57 | else if List.isEmpty specs then 58 | DocTest.Report "no test found" False 59 | 60 | else if String.isEmpty stdout then 61 | DocTest.Report "" False 62 | 63 | else 64 | DocTest.createReportFromOutput filename specs stdout 65 | 66 | reportData = 67 | createReport model.currentSpecs rst 68 | 69 | success = 70 | model.success && not reportData.failed 71 | in 72 | ( { model | success = success }, report reportData ) 73 | 74 | GoNext watch -> 75 | case model.fileQueue of 76 | newfile :: rest -> 77 | ( { model | fileQueue = rest }, readfile newfile ) 78 | 79 | [] -> 80 | if watch || model.success then 81 | ( model, Cmd.none ) 82 | 83 | else 84 | ( model, exit () ) 85 | 86 | 87 | 88 | -- output ports 89 | 90 | 91 | port readfile : String -> Cmd msg 92 | 93 | 94 | port evaluate : 95 | { src : String 96 | , runner : String 97 | , filename : String 98 | , modulename : String 99 | } 100 | -> Cmd msg 101 | 102 | 103 | port report : DocTest.Report -> Cmd msg 104 | 105 | 106 | port exit : () -> Cmd msg 107 | 108 | 109 | 110 | -- data models 111 | 112 | 113 | type alias SourceCode = 114 | { code : String, filename : String } 115 | 116 | 117 | type alias TestResult = 118 | { stdout : String, filename : String, failed : Bool } 119 | 120 | 121 | type alias Model = 122 | { currentSpecs : List DocTest.Spec 123 | , fileQueue : List String 124 | , success : Bool 125 | } 126 | 127 | 128 | emptyModel : Model 129 | emptyModel = 130 | { currentSpecs = [] 131 | , fileQueue = [] 132 | , success = True 133 | } 134 | 135 | 136 | 137 | -- subscriptions 138 | 139 | 140 | subscriptions : Model -> Sub Msg 141 | subscriptions _ = 142 | Sub.batch 143 | [ addfiles AddFileQueue 144 | , srccode Input 145 | , result NewResult 146 | , next GoNext 147 | ] 148 | 149 | 150 | 151 | -- input ports 152 | 153 | 154 | port addfiles : (List String -> msg) -> Sub msg 155 | 156 | 157 | port srccode : (SourceCode -> msg) -> Sub msg 158 | 159 | 160 | port result : (TestResult -> msg) -> Sub msg 161 | 162 | 163 | port next : (Bool -> msg) -> Sub msg 164 | -------------------------------------------------------------------------------- /src/bridge.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | const { log, dump, DEBUG, RETVAL } = require('./util') 3 | const path = require('path') 4 | const fs = require('fs') 5 | const { spawnSync } = require('child_process') 6 | 7 | /** 8 | * setup elm runtime 9 | * @param {string} elm 10 | * @param {boolean} watch 11 | */ 12 | function makeElmRuntime(elm, watch) { 13 | /** extract source folder from elm.json */ 14 | const cwd = (() => { 15 | try { 16 | const data = fs.readFileSync('elm.json') 17 | return JSON.parse(data.toString())['source-directories'][0] 18 | } catch (e) { 19 | return './' 20 | } 21 | })() 22 | 23 | /** 24 | * run elm make to make sure test code compiles 25 | * @param {string} elm 26 | * @param {string} testfilename 27 | * @param {string} elmfile 28 | */ 29 | function checkElmMake(elm, testfilename, elmfile) { 30 | dump(`checkElmMake(${elm}, ${testfilename}, ${elmfile}) called`) 31 | const { stdout, status, stderr } = spawnSync( 32 | elm, 33 | ['make', testfilename, '--output=/dev/null'], 34 | { encoding: 'utf8' } 35 | ) 36 | if (status !== 0) { 37 | log(`status: ${status}`) 38 | log(`stdout: ${stdout}`) 39 | if (stderr) log(stderr.replace(testfilename, elmfile)) 40 | log(`elm make failed. aborting`) 41 | return status 42 | } 43 | return status 44 | } 45 | 46 | // load main Elm script 47 | // @ts-ignore 48 | const app = require('./elm').Elm.Main.init() 49 | 50 | /** read elm source file and send it back to runtime 51 | */ 52 | app.ports.readfile.subscribe((elmfile) => { 53 | try { 54 | const elmsrc = fs.readFileSync(elmfile, 'utf8') 55 | log(`\n processing: ${elmfile}`) 56 | app.ports.srccode.send({ code: elmsrc, filename: elmfile }) 57 | } catch (e) { 58 | log(`failed to run tests: ${e}`) 59 | process.exit(RETVAL.EXCEPTION) 60 | } 61 | }) 62 | 63 | /** receive evaluate message from Elm and elm make and evaluate 64 | * test cases, then send it back to Elm. 65 | */ 66 | app.ports.evaluate.subscribe(({ src, runner, filename, modulename }) => { 67 | dump('----------- evaluate called.') 68 | dump([src, runner, filename]) 69 | if (src.length === 0) return 70 | const tempModulePath = path.resolve(cwd, `${modulename}.elm`) 71 | fs.writeFileSync(tempModulePath, src) 72 | try { 73 | if (checkElmMake(elm, tempModulePath, filename) !== 0) { 74 | throw new Error('elm make exited with error') 75 | } 76 | const { stdout, stderr, status } = spawnSync( 77 | elm, 78 | ['repl', '--no-colors'], 79 | { 80 | input: runner, 81 | encoding: 'utf8', 82 | } 83 | ) 84 | if (DEBUG) fs.writeFileSync('runner.elm', runner) 85 | dump(`stdout: ${stdout}`) 86 | if (status !== 0 || stderr) { 87 | if (stderr) log(stderr) 88 | throw new Error(`elm repl failed with some error.`) 89 | } else { 90 | const match = stdout.match(/^> (.+)/gm) 91 | if (!match) throw new Error('elm repl did not produce output') 92 | dump(`match: ${match[0]}`) 93 | const resultStr = match[0].replace(/[^"]*(".+").*/, '$1') 94 | dump(resultStr) 95 | app.ports.result.send({ 96 | stdout: JSON.parse(resultStr), 97 | filename: filename, 98 | failed: false, 99 | }) 100 | } 101 | } catch (e) { 102 | app.ports.result.send({ 103 | stdout: e.message, 104 | filename: filename, 105 | failed: true, 106 | }) 107 | } finally { 108 | if (!DEBUG && fs.existsSync(tempModulePath)) fs.unlinkSync(tempModulePath) 109 | } 110 | }) 111 | 112 | /** Receive report message from Elm and 113 | * display results 114 | */ 115 | app.ports.report.subscribe((report) => { 116 | log(report.text) 117 | app.ports.next.send(watch) 118 | }) 119 | 120 | /** exit the process with failure */ 121 | app.ports.exit.subscribe(() => { 122 | process.exit(RETVAL.FAIL) 123 | }) 124 | 125 | return { 126 | addfiles: function (/** @type {string[]} */ o) { 127 | app.ports.addfiles.send(o) 128 | }, 129 | runnext: function (/** @type {boolean} */ o) { 130 | app.ports.next.send(o) 131 | }, 132 | } 133 | } 134 | 135 | module.exports = { makeElmRuntime } 136 | -------------------------------------------------------------------------------- /src/main.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | const { log, dump, RETVAL } = require('./util') 3 | const { makeElmRuntime } = require('./bridge') 4 | const { spawnSync } = require('child_process') 5 | 6 | /** 7 | * parse commandline options 8 | * @param {string[]} argv 9 | * @returns {{ elmpath: string, fileQueue: string[], pretest: string[], watch: boolean }} 10 | */ 11 | function parseOpt(argv) { 12 | const optSpec = { 13 | boolean: ['help', 'version', 'watch'], 14 | string: ['elm-path', 'pretest'], 15 | alias: { h: 'help', v: 'version', w: 'watch' }, 16 | } 17 | const opts = require('minimist')(argv, optSpec) 18 | dump(opts) 19 | 20 | // show usage/help message 21 | if (opts.version || opts.help || opts._.length === 0) { 22 | ;(function showHelpMessage() { 23 | const version = require('../package.json').version 24 | log(`elm-doctest ${version}`) 25 | log('') 26 | log('Usage: elm-doctest [--help] [--watch] [--elm-path PATH]') 27 | log(' [--pretest CMD] FILES...') 28 | log(' run doctest against given Elm files') 29 | log('') 30 | log('Available options:') 31 | log(' -h,--help\t\t' + 'Show this help text') 32 | log( 33 | ' -w,--watch\t\t' + 'Watch and run tests when target files get updated' 34 | ) 35 | log(' --elm-path PATH\t' + 'Path to elm executable') 36 | log(' --pretest CMD\t\t' + 'command to run before doc-test') 37 | })() 38 | process.exit(RETVAL.SUCCESS) 39 | } 40 | 41 | return { 42 | elmpath: opts['elm-path'] || 'elm', 43 | fileQueue: opts._, 44 | pretest: opts.pretest ? opts.pretest.split(' ') : [], 45 | watch: opts.watch, 46 | } 47 | } 48 | 49 | /** 50 | * run pretest 51 | * @param {string[]} pretest 52 | */ 53 | function runPretest(pretest) { 54 | if (pretest.length === 0) return true 55 | const cmd = pretest[0] 56 | const args = pretest.slice(1) 57 | const { stdout, stderr, status } = spawnSync(cmd, args, { encoding: 'utf8' }) 58 | if (stdout) log(`pretest: ${stdout}`) 59 | if (stderr) log(`pretest err: ${stderr}`) 60 | log(`pretest status: ${status}`) 61 | return status === 0 62 | } 63 | 64 | /** main */ 65 | ;(function main(argv) { 66 | const { elmpath, fileQueue, pretest, watch } = parseOpt(argv) 67 | log('Starting elm-doctest ...') 68 | 69 | if (!runPretest(pretest)) { 70 | log('exiting as preset failed') 71 | process.exit(1) 72 | } 73 | 74 | const { addfiles, runnext } = makeElmRuntime(elmpath, watch) 75 | 76 | // persist/watch files if `--watch` option was given 77 | if (watch) { 78 | const chokidar = require('chokidar') 79 | console.log('start watching...', fileQueue) 80 | 81 | chokidar.watch(fileQueue).on('change', (path, stats) => { 82 | if (stats.size === 0) return 83 | console.log('\nfile has changed...') 84 | if (runPretest(pretest)) { 85 | addfiles([path]) 86 | } 87 | }) 88 | } 89 | 90 | addfiles(fileQueue) 91 | // kick off testing 92 | runnext(watch) 93 | })(require('process').argv.slice(2)) 94 | -------------------------------------------------------------------------------- /src/util.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | /** 3 | * @param {string} o 4 | */ 5 | function log(o) { 6 | console.log(o) 7 | } 8 | 9 | const DEBUG = require('process').env.DEBUG || false 10 | const dump = (() => { 11 | if (DEBUG) { 12 | log('############## debug mode is ON ##############') 13 | return function (o) { 14 | console.warn(o) 15 | } 16 | } else { 17 | return function (_o) {} 18 | } 19 | })() 20 | 21 | const RETVAL = { 22 | SUCCESS: 0, 23 | FAIL: 1, 24 | EXCEPTION: 2, 25 | } 26 | 27 | module.exports = { 28 | log: log, 29 | dump: dump, 30 | DEBUG: DEBUG, 31 | RETVAL: RETVAL, 32 | } 33 | -------------------------------------------------------------------------------- /test/ParamTest.elm: -------------------------------------------------------------------------------- 1 | module ParamTest exposing (Msg(..)) 2 | 3 | 4 | type Msg 5 | = Example 6 | 7 | 8 | 9 | -- | 10 | -- >>> x = 11 | -- >>> 1 + 2 12 | -- 13 | -- >>> x * 2 14 | -- 6 15 | -- 16 | -------------------------------------------------------------------------------- /test/ParamTest2.elm: -------------------------------------------------------------------------------- 1 | module ParamTest exposing 2 | ( A(..) 3 | , Msg(..) 4 | , x 5 | ) 6 | 7 | 8 | type Msg 9 | = Example 10 | 11 | 12 | 13 | -- | 14 | -- >>> 3 + 1 15 | -- 4 16 | -- 17 | 18 | 19 | type A 20 | = X 21 | | Y 22 | | Z 23 | 24 | 25 | x : Int -> Int 26 | x i = 27 | i + 3 28 | -------------------------------------------------------------------------------- /test/RandomTest.elm: -------------------------------------------------------------------------------- 1 | module RandomTest exposing (..) 2 | 3 | -- Read more about this program in the official Elm guide: 4 | -- https://guide.elm-lang.org/architecture/effects/random.html 5 | 6 | import Random 7 | 8 | 9 | 10 | -- | 11 | -- >>> 4 + 5 12 | -- 9 13 | -- 14 | -- MODEL 15 | 16 | 17 | type alias Model = 18 | { dieFace : Int 19 | } 20 | 21 | 22 | init : ( Model, Cmd Msg ) 23 | init = 24 | ( Model 1, Cmd.none ) 25 | 26 | 27 | 28 | -- UPDATE 29 | 30 | 31 | type Msg 32 | = Roll 33 | | NewFace Int 34 | 35 | 36 | update : Msg -> Model -> ( Model, Cmd Msg ) 37 | update msg model = 38 | case msg of 39 | Roll -> 40 | ( model, Random.generate NewFace (Random.int 1 6) ) 41 | 42 | NewFace newFace -> 43 | ( Model newFace, Cmd.none ) 44 | 45 | 46 | 47 | -- SUBSCRIPTIONS 48 | 49 | 50 | subscriptions : Model -> Sub Msg 51 | subscriptions model = 52 | Sub.none 53 | -------------------------------------------------------------------------------- /test/TestData.elm: -------------------------------------------------------------------------------- 1 | module TestData exposing (..) 2 | 3 | import TestData.TestFail as F 4 | 5 | 6 | 7 | -- | 8 | -- >>> F.greetingTo "test" 9 | -- "Hello test" 10 | -- >>> add 3 5 11 | -- 8 12 | -- 13 | -- >>> removeZeros [0, 1, 2, 3, 0] 14 | -- [1, 2, 3] 15 | -- 16 | -- >>> greetingTo "World" 17 | -- "Hello World" 18 | -- 19 | -- >>> let 20 | -- >>> x = 3 21 | -- >>> y = 2 22 | -- >>> in x + y 23 | -- 5 24 | -- 25 | 26 | 27 | add : Int -> Int -> Int 28 | add x y = 29 | x + y 30 | 31 | 32 | greetingTo : String -> String 33 | greetingTo x = 34 | "Hello " ++ x 35 | 36 | 37 | removeZeros : List Int -> List Int 38 | removeZeros = 39 | List.filter (\x -> x /= 0) 40 | -------------------------------------------------------------------------------- /test/TestData/TestFail.elm: -------------------------------------------------------------------------------- 1 | module TestData.TestFail exposing (..) 2 | 3 | -- | 4 | -- >>> add 3 5 5 | -- 8 6 | -- 7 | -- >>> removeZeros [0, 1, 2, 3, 0] 8 | -- [1, 2, 3] 9 | -- 10 | -- >>> greetingTo "World" 11 | -- "Konnichiwa World" 12 | -- 13 | 14 | 15 | add : Int -> Int -> Int 16 | add x y = 17 | x + y 18 | 19 | 20 | greetingTo : String -> String 21 | greetingTo x = 22 | "Hello " ++ x 23 | 24 | 25 | removeZeros : List Int -> List Int 26 | removeZeros = 27 | List.filter (\x -> x /= 0) 28 | -------------------------------------------------------------------------------- /test/TestData/TestFail2.elm: -------------------------------------------------------------------------------- 1 | module TestFail2 exposing (..) 2 | 3 | {--| 4 | 5 | >>> removeZeros [0, 1, 2, 3, 0]a 6 | [1, 2, 3] 7 | 8 | >>> greetingTo "World" 9 | "Hello World" 10 | 11 | >>> let 12 | >>> x = 3 13 | >>> y = 2 14 | >>> in x + y 15 | 5 16 | 17 | --} 18 | 19 | 20 | add : Int -> Int -> Int 21 | add x y = 22 | x + y 23 | 24 | 25 | greetingTo : String -> String 26 | greetingTo x = 27 | "Hello " ++ x 28 | 29 | 30 | removeZeros : List Int -> List Int 31 | removeZeros = 32 | List.filter (\x -> x /= 0) 33 | -------------------------------------------------------------------------------- /test/TestView.elm: -------------------------------------------------------------------------------- 1 | module TestData exposing 2 | ( add 3 | , greetingTo 4 | , removeZeros 5 | ) 6 | 7 | -- | 8 | -- >>> add 3 5 9 | -- 8 10 | -- 11 | -- >>> removeZeros [0, 1, 2, 3, 0] 12 | -- [1, 2, 3] 13 | -- 14 | -- >>> greetingTo "World" 15 | -- "Hello World" 16 | -- 17 | 18 | 19 | add : Int -> Int -> Int 20 | add x y = 21 | x + y 22 | 23 | 24 | greetingTo : String -> String 25 | greetingTo x = 26 | "Hello " ++ x 27 | 28 | 29 | removeZeros : List Int -> List Int 30 | removeZeros = 31 | List.filter (\x -> x /= 0) 32 | -------------------------------------------------------------------------------- /test/run.js: -------------------------------------------------------------------------------- 1 | /* eslint-env node, shelljs */ 2 | require('shelljs/global') 3 | 4 | const doctest = 'node ./bin/cli.js' 5 | 6 | const testfiles = ls(['src/*.elm', 'test/*.elm']).join(' ') 7 | if (exec(`${doctest} -- ${testfiles}`).code !== 0) { 8 | echo('those tests must pass') 9 | exit(1) 10 | } 11 | 12 | if (exec(`${doctest} -- test/TestData/TestFail.elm`).code === 0) { 13 | echo('this doctest must fail') 14 | exit(1) 15 | } 16 | 17 | if (exec(`${doctest} -- test/TestData/TestFail2.elm`).code === 0) { 18 | echo('this doctest must fail') 19 | exit(1) 20 | } 21 | 22 | echo('all tests passed') 23 | --------------------------------------------------------------------------------