├── .codeclimate.yml ├── .eslintrc.js ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md └── workflows │ └── ci.yaml ├── .gitignore ├── .mailmap ├── .npmignore ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .syncpackrc.js ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DEPENDENCIES.md ├── LICENSE ├── README.md ├── osascript ├── is-installed.applescript ├── quit-app.applescript ├── run-jpegmini.applescript └── supports-assistive-devices.applescript ├── package.json ├── src ├── applescript.ts ├── constants.ts ├── exec.ts ├── filesize.ts ├── fs.ts ├── get-stats.ts ├── imageoptim.ts ├── index.ts ├── is-supported.ts ├── log.ts ├── osascript.ts ├── pngquant.ts ├── run-imagealpha.ts ├── run-imageoptim.ts ├── run-jpegmini.ts ├── tmpdir.ts ├── types │ └── pretty-bytes.d.ts ├── uuid.ts └── write-report.ts ├── tsconfig.json └── yarn.lock /.codeclimate.yml: -------------------------------------------------------------------------------- 1 | languages: 2 | TypeScript: true 3 | exclude_paths: 4 | - 'dist/*' 5 | plugins: 6 | tslint: 7 | enabled: true 8 | config: tslint.json 9 | -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | plugins: ['@typescript-eslint'], 4 | extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], 5 | parserOptions: { 6 | ecmaVersion: 6, 7 | sourceType: 'module', 8 | }, 9 | env: { 10 | es6: true, 11 | node: true, 12 | }, 13 | overrides: [ 14 | { 15 | files: ['*.ts'], 16 | rules: { 17 | '@typescript-eslint/no-var-requires': 0 18 | }, 19 | }, 20 | { 21 | files: ['*.spec.ts'], 22 | env: { 23 | jest: true, 24 | }, 25 | }, 26 | ], 27 | }; 28 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: JamieMason 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Report a bug 4 | --- 5 | 6 | 9 | 10 | ## Steps To Reproduce The Error 11 | 12 | ## Expected Behaviour 13 | 14 | ## Actual Behaviour 15 | 16 | ## Version Numbers or N/A 17 | 18 | - macOS: 19 | - /Applications/ImageOptim.app: 20 | - /Applications/ImageAlpha.app: 21 | - /Applications/JPEGmini.app: 22 | 23 | ## Help Needed 24 | 25 | 29 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | --- 5 | 6 | 9 | 10 | ## Description 11 | 12 | 18 | 19 | ## Suggested Solution 20 | 21 | 25 | 26 | ## Help Needed 27 | 28 | 32 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | ## Description (What) 6 | 7 | 13 | 14 | ## Justification (Why) 15 | 16 | 22 | 23 | ## How Can This Be Tested? 24 | 25 | 28 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: verify 2 | 3 | on: 4 | pull_request: 5 | push: 6 | 7 | jobs: 8 | all: 9 | runs-on: ubuntu-latest 10 | 11 | steps: 12 | - uses: actions/checkout@v3 13 | 14 | - uses: actions/setup-node@v3 15 | with: 16 | cache: yarn 17 | node-version: 20.x 18 | 19 | - name: Install 20 | run: yarn install --frozen-lockfile 21 | 22 | - name: Build 23 | run: yarn build 24 | env: 25 | FORCE_COLOR: 3 26 | TERM: xterm-256color 27 | 28 | - name: Lint 29 | run: yarn lint 30 | env: 31 | FORCE_COLOR: 3 32 | TERM: xterm-256color 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.log 2 | *.log.* 3 | coverage 4 | dist 5 | node_modules 6 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Azusa Tomita (@azusa-tomita) 2 | David Newton (@nwtn) 3 | Fernando Barros (@fbbarros) 4 | James Stout (@jamesstout) 5 | Jamie Mason (@JamieMason) 6 | Jamie Mason (@JamieMason) 7 | Jamie Mason (@JamieMason) 8 | Jamie Mason (@JamieMason) 9 | Jason Grant (@oo12) 10 | Martin Schürrer (@MSch) 11 | Niklas Vosskötter (@neikei) 12 | Patrick Eriksson (@paleite) 13 | Peter van Westen (@regularlabs) 14 | Ramiro Araujo (@ramiroaraujo) 15 | Simen Brekken (@sbrekken) 16 | Stefan Crain (@stefancrain) 17 | The Gitter Badger (@gitter-badger) 18 | Tom Chen (@tomchentw) 19 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | .git* 3 | environment/ 4 | Gruntfile.js 5 | src/ 6 | test/ 7 | tasks/ 8 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 18 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | **/*.md 2 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "printWidth": 100, 4 | "proseWrap": "always", 5 | "singleQuote": true, 6 | "trailingComma": "all" 7 | } 8 | -------------------------------------------------------------------------------- /.syncpackrc.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | /** @type {import("syncpack").RcFile} */ 4 | const config = { 5 | versionGroups: [ 6 | { 7 | dependencies: ['@types/node'], 8 | packages: ['**'], 9 | pinVersion: '18.16.19', 10 | }, 11 | { 12 | dependencies: ['chalk'], 13 | packages: ['**'], 14 | pinVersion: '4.1.2', 15 | }, 16 | { 17 | dependencies: ['globby'], 18 | packages: ['**'], 19 | pinVersion: '11.1.0', 20 | }, 21 | { 22 | dependencies: ['pretty-bytes'], 23 | packages: ['**'], 24 | pinVersion: '5.6.0', 25 | }, 26 | ], 27 | }; 28 | 29 | module.exports = config; 30 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [3.1.9](https://github.com/JamieMason/ImageOptim-CLI/compare/3.1.7...3.1.9) (2023-11-06) 2 | 3 | 4 | ### Bug Fixes 5 | 6 | * **engines:** support node >= 18 ([5c18d6c](https://github.com/JamieMason/ImageOptim-CLI/commit/5c18d6cab4a0dbcd2d0ecc26e1a5df114710af13)) 7 | * **npm:** update dependencies ([201e63f](https://github.com/JamieMason/ImageOptim-CLI/commit/201e63f8d06281bd3499283f3b74f20ac5d9dfa9)) 8 | 9 | 10 | 11 | ## [3.1.7](https://github.com/JamieMason/ImageOptim-CLI/compare/3.0.7...3.1.7) (2023-07-02) 12 | 13 | 14 | ### Features 15 | 16 | * **node:** upgrade to node v18 ([40dfb41](https://github.com/JamieMason/ImageOptim-CLI/commit/40dfb41c533626bbc32c5baec3f492679bc1013d)) 17 | 18 | 19 | 20 | ## [3.0.7](https://github.com/JamieMason/ImageOptim-CLI/compare/3.0.2...3.0.7) (2021-11-13) 21 | 22 | 23 | ### Bug Fixes 24 | 25 | * **cli:** use unique temp dir per invocation ([5fac801](https://github.com/JamieMason/ImageOptim-CLI/commit/5fac801a817cee90c51adb1dbde1753b4909a9af)), closes [#183](https://github.com/JamieMason/ImageOptim-CLI/issues/183) 26 | * **jpegmini:** add com.beamr.jpegminipro.app ([d865434](https://github.com/JamieMason/ImageOptim-CLI/commit/d865434095a630d5a831ce4c70092c767cf8eb29)), closes [#187](https://github.com/JamieMason/ImageOptim-CLI/issues/187) 27 | * **jpegmini:** add support for macOS Monterey ([7060d05](https://github.com/JamieMason/ImageOptim-CLI/commit/7060d05ee5d8d0cdcaf31f11c10582ac2308d515)) 28 | * **nexe:** fix __dirname issues in v3.3.7 ([aac53ac](https://github.com/JamieMason/ImageOptim-CLI/commit/aac53acd6edb5e568a7798518558b5476b82caf5)) 29 | * **npm:** update dependencies ([59cdebc](https://github.com/JamieMason/ImageOptim-CLI/commit/59cdebce5ba4f1627b8d9b4dee4973377202ae26)), closes [#191](https://github.com/JamieMason/ImageOptim-CLI/issues/191) 30 | 31 | 32 | 33 | ## [3.0.2](https://github.com/JamieMason/ImageOptim-CLI/compare/3.0.0...3.0.2) (2019-11-04) 34 | 35 | 36 | ### Bug Fixes 37 | 38 | * **cli:** ensure temp files are always removed ([7413b22](https://github.com/JamieMason/ImageOptim-CLI/commit/7413b227d681b851018ab479ecfbc195d3f76da6)) 39 | * **pngquant:** handle upstream errors ([9557b8f](https://github.com/JamieMason/ImageOptim-CLI/commit/9557b8fce4b8c0a5368ddab9092790988cf4aba6)), closes [#182](https://github.com/JamieMason/ImageOptim-CLI/issues/182) 40 | 41 | 42 | 43 | # [3.0.0](https://github.com/JamieMason/ImageOptim-CLI/compare/2.3.9...3.0.0) (2019-09-15) 44 | 45 | 46 | ### Bug Fixes 47 | 48 | * **cli:** exit with error status if an app is not installed ([6c3d799](https://github.com/JamieMason/ImageOptim-CLI/commit/6c3d799c7e94037522d6f19d0e6ef3f0ca08c833)), closes [#180](https://github.com/JamieMason/ImageOptim-CLI/issues/180) 49 | * **cli:** handle upper case file extensions ([e7c84ac](https://github.com/JamieMason/ImageOptim-CLI/commit/e7c84ac0eb0f34cf34f3a69ea8771257f9e51f37)), closes [#181](https://github.com/JamieMason/ImageOptim-CLI/issues/181) 50 | * **npm:** update npm dependencies ([b492ad2](https://github.com/JamieMason/ImageOptim-CLI/commit/b492ad2ad29a16ed46cc0559a6b3f66a34dda5f0)) 51 | 52 | 53 | ### Performance Improvements 54 | 55 | * **cli:** reduce memory consumption ([3166245](https://github.com/JamieMason/ImageOptim-CLI/commit/316624513ddf18ce7948cc58eb0f4d768affeca3)), closes [#173](https://github.com/JamieMason/ImageOptim-CLI/issues/173) 56 | 57 | 58 | ### BREAKING CHANGES 59 | 60 | * **cli:** The following scenarios will display an error and exit with a status 61 | code of 1, where previously they would display a warning: 62 | 63 | + Not using `--no-imageoptim` when ImageOptim.app is not installed. 64 | + Using `--imagealpha` when ImageAlpha.app is not installed. 65 | + Using `--jpegmini` when JPEGmini.app is not installed. 66 | 67 | 68 | 69 | ## [2.3.9](https://github.com/JamieMason/ImageOptim-CLI/compare/2.3.8...2.3.9) (2019-07-16) 70 | 71 | 72 | ### Bug Fixes 73 | 74 | * **npm:** potential security vulnerability ([cd48880](https://github.com/JamieMason/ImageOptim-CLI/commit/cd4888044f012d363ebbeb52bfe6ff1861bcf36f)) 75 | 76 | 77 | 78 | ## [2.3.8](https://github.com/JamieMason/ImageOptim-CLI/compare/2.3.7...2.3.8) (2019-07-16) 79 | 80 | 81 | ### Bug Fixes 82 | 83 | * **npm:** potential security vulnerability ([1560041](https://github.com/JamieMason/ImageOptim-CLI/commit/1560041c5344c3eb17254220654c1d0e2db38597)), closes [#178](https://github.com/JamieMason/ImageOptim-CLI/issues/178) 84 | 85 | 86 | 87 | ## [2.3.7](https://github.com/JamieMason/ImageOptim-CLI/compare/2.3.6...2.3.7) (2019-07-01) 88 | 89 | 90 | ### Bug Fixes 91 | 92 | * **npm:** revert nexe update ([c3aa684](https://github.com/JamieMason/ImageOptim-CLI/commit/c3aa68425366d672852af495e6e650aa6c7f8934)), closes [#176](https://github.com/JamieMason/ImageOptim-CLI/issues/176) [#163](https://github.com/JamieMason/ImageOptim-CLI/issues/163) 93 | 94 | 95 | 96 | ## [2.3.6](https://github.com/JamieMason/ImageOptim-CLI/compare/2.3.5...2.3.6) (2019-06-17) 97 | 98 | 99 | ### Bug Fixes 100 | 101 | * **npm:** update dependencies ([a154af0](https://github.com/JamieMason/ImageOptim-CLI/commit/a154af09214d97d03a7b1d657cf7ff98230b709e)) 102 | 103 | 104 | 105 | ## [2.3.5](https://github.com/JamieMason/ImageOptim-CLI/compare/2.3.4...2.3.5) (2019-02-02) 106 | 107 | 108 | ### Bug Fixes 109 | 110 | * **npm:** update npm dependencies ([16897a0](https://github.com/JamieMason/ImageOptim-CLI/commit/16897a09755cc9a94b88d82f2cf46521f5f62dc9)), closes [#172](https://github.com/JamieMason/ImageOptim-CLI/issues/172) 111 | 112 | 113 | 114 | ## [2.3.4](https://github.com/JamieMason/ImageOptim-CLI/compare/2.0.4...2.3.4) (2018-12-23) 115 | 116 | 117 | ### Features 118 | 119 | * **cli:** only output summary when savings are made ([b44c078](https://github.com/JamieMason/ImageOptim-CLI/commit/b44c07862d8b4267c5f2ef5ed896b707b70c2f4d)) 120 | * **cli:** show warning when ImageOptim.app is not installed ([44f3055](https://github.com/JamieMason/ImageOptim-CLI/commit/44f30551dfb5fc886614eca0ea85e665c87eb7f6)) 121 | * **nexe:** upgrade to node.js 10.13.0 and es2017 ([dddd9ff](https://github.com/JamieMason/ImageOptim-CLI/commit/dddd9ffecc791b654add496f4d402b0df4c01be0)) 122 | 123 | 124 | 125 | ## [2.0.4](https://github.com/JamieMason/ImageOptim-CLI/compare/2.0.3...2.0.4) (2018-11-07) 126 | 127 | 128 | ### Bug Fixes 129 | 130 | * **npm:** update dependencies ([a5b3ec8](https://github.com/JamieMason/ImageOptim-CLI/commit/a5b3ec820b2b6dff4ba20f3823b98ddee1ed6b5b)) 131 | 132 | 133 | 134 | ## [2.0.3](https://github.com/JamieMason/ImageOptim-CLI/compare/2.0.2...2.0.3) (2018-06-13) 135 | 136 | 137 | ### Bug Fixes 138 | 139 | * **npm:** update dependencies ([3e1259f](https://github.com/JamieMason/ImageOptim-CLI/commit/3e1259ff0bfe192739468cc92b0e321377f1e78f)), closes [#166](https://github.com/JamieMason/ImageOptim-CLI/issues/166) 140 | 141 | 142 | 143 | ## [2.0.2](https://github.com/JamieMason/ImageOptim-CLI/compare/2.0.0...2.0.2) (2018-05-14) 144 | 145 | 146 | ### Bug Fixes 147 | 148 | * **cli:** rename bin to imageoptim in help output ([534c87f](https://github.com/JamieMason/ImageOptim-CLI/commit/534c87f66c71cc2173d3456e4e9a017a0bde1954)) 149 | * **nexe:** fix __dirname not behaving as expected ([05b9ca3](https://github.com/JamieMason/ImageOptim-CLI/commit/05b9ca39b17cf96016aecce4c0068463923f7b38)), closes [#163](https://github.com/JamieMason/ImageOptim-CLI/issues/163) 150 | 151 | 152 | 153 | # [2.0.0](https://github.com/JamieMason/ImageOptim-CLI/compare/1.15.4...2.0.0) (2018-05-13) 154 | 155 | 156 | ### Features 157 | 158 | * **core:** rewrite imageoptim-cli in node.js ([3faa790](https://github.com/JamieMason/ImageOptim-CLI/commit/3faa790f9088e5988eccb897a67111dd54d4f57d)), closes [#137](https://github.com/JamieMason/ImageOptim-CLI/issues/137) [#140](https://github.com/JamieMason/ImageOptim-CLI/issues/140) [#141](https://github.com/JamieMason/ImageOptim-CLI/issues/141) [#148](https://github.com/JamieMason/ImageOptim-CLI/issues/148) [#159](https://github.com/JamieMason/ImageOptim-CLI/issues/159) 159 | 160 | 161 | 162 | ## [1.15.4](https://github.com/JamieMason/ImageOptim-CLI/compare/1.15.3...1.15.4) (2017-11-22) 163 | 164 | 165 | ### Bug Fixes 166 | 167 | * **osx:** add support for high sierra ([e25bfce](https://github.com/JamieMason/ImageOptim-CLI/commit/e25bfcefe3d4ae6bd8b3a823f6583228691362f0)) 168 | 169 | 170 | 171 | ## [1.15.3](https://github.com/JamieMason/ImageOptim-CLI/compare/1.15.1...1.15.3) (2017-11-14) 172 | 173 | 174 | ### Bug Fixes 175 | 176 | * **duplicates:** support multibyte characters ([43d6ce7](https://github.com/JamieMason/ImageOptim-CLI/commit/43d6ce71dfae591fafdf2ace825aad9eedbfa862)) 177 | * **osx:** add support for high sierra ([6208dc4](https://github.com/JamieMason/ImageOptim-CLI/commit/6208dc44721cd82c71f3e16e9795b3ca503c481e)), closes [#152](https://github.com/JamieMason/ImageOptim-CLI/issues/152) 178 | 179 | 180 | 181 | ## [1.15.1](https://github.com/JamieMason/ImageOptim-CLI/compare/1.14.9...1.15.1) (2017-06-29) 182 | 183 | 184 | ### Bug Fixes 185 | 186 | * **file index:** handle cases where no files are found or passed in ([b9b4f7a](https://github.com/JamieMason/ImageOptim-CLI/commit/b9b4f7ae3c3c6960e87fdf62d18e388c3f5bd255)) 187 | 188 | 189 | ### Features 190 | 191 | * **pngquant:** binary update to 2.9.1 ([8182b51](https://github.com/JamieMason/ImageOptim-CLI/commit/8182b5103cae1d0fa7eb81d35a610d0302328be6)) 192 | 193 | 194 | 195 | ## [1.14.9](https://github.com/JamieMason/ImageOptim-CLI/compare/1.14.8...1.14.9) (2017-02-05) 196 | 197 | 198 | ### Bug Fixes 199 | 200 | * **jpegmini:** the text field in sierra has changed to a combo box ([2f711bb](https://github.com/JamieMason/ImageOptim-CLI/commit/2f711bbd5dcd9eae69368cdf161f656e1eb85c4a)), closes [#129](https://github.com/JamieMason/ImageOptim-CLI/issues/129) 201 | 202 | 203 | 204 | ## [1.14.8](https://github.com/JamieMason/ImageOptim-CLI/compare/1.11.4...1.14.8) (2016-02-09) 205 | 206 | 207 | ### Bug Fixes 208 | 209 | * **examples:** remove shell syntax highlighting ([0344ae7](https://github.com/JamieMason/ImageOptim-CLI/commit/0344ae77be322d6c59a137d306db084f45af0e18)) 210 | * **filesystem:** remove additional trailing slash after $TMPDIR ([6b60e32](https://github.com/JamieMason/ImageOptim-CLI/commit/6b60e32f6bec1f0a20d6347652eee4c446a4f08c)), closes [#87](https://github.com/JamieMason/ImageOptim-CLI/issues/87) 211 | 212 | 213 | ### Features 214 | 215 | * **logging:** per-file reporting is now opt-in via a --verbose flag ([4c9a489](https://github.com/JamieMason/ImageOptim-CLI/commit/4c9a489dd351dc8065ce118e04b930dedd4ceefe)) 216 | * **pngquant:** add --skip-if-larger option ([9904253](https://github.com/JamieMason/ImageOptim-CLI/commit/9904253f7e16a5ebc70f6dcc3a4798183630d316)) 217 | * **pngquant:** replace hard-coded value with -m/--min-quality param ([699d8c8](https://github.com/JamieMason/ImageOptim-CLI/commit/699d8c80ea6d767b275806c20bf7a7c27c6f5de4)) 218 | 219 | 220 | 221 | ## [1.11.4](https://github.com/JamieMason/ImageOptim-CLI/compare/1.11.3...1.11.4) (2014-11-04) 222 | 223 | 224 | 225 | ## [1.11.3](https://github.com/JamieMason/ImageOptim-CLI/compare/1.11.2...1.11.3) (2014-10-31) 226 | 227 | 228 | 229 | ## [1.11.2](https://github.com/JamieMason/ImageOptim-CLI/compare/1.7.11...1.11.2) (2014-10-31) 230 | 231 | 232 | 233 | ## [1.7.11](https://github.com/JamieMason/ImageOptim-CLI/compare/1.7.10...1.7.11) (2014-01-23) 234 | 235 | 236 | 237 | ## [1.7.10](https://github.com/JamieMason/ImageOptim-CLI/compare/1.7.9...1.7.10) (2013-12-11) 238 | 239 | 240 | 241 | ## [1.7.9](https://github.com/JamieMason/ImageOptim-CLI/compare/1.7.3...1.7.9) (2013-12-10) 242 | 243 | 244 | 245 | ## [1.7.3](https://github.com/JamieMason/ImageOptim-CLI/compare/1.7.2...1.7.3) (2013-11-17) 246 | 247 | 248 | 249 | ## [1.7.2](https://github.com/JamieMason/ImageOptim-CLI/compare/1.7.1...1.7.2) (2013-11-12) 250 | 251 | 252 | 253 | ## [1.7.1](https://github.com/JamieMason/ImageOptim-CLI/compare/1.7.0...1.7.1) (2013-11-10) 254 | 255 | 256 | 257 | # [1.7.0](https://github.com/JamieMason/ImageOptim-CLI/compare/1.6.19...1.7.0) (2013-11-10) 258 | 259 | 260 | 261 | ## [1.6.19](https://github.com/JamieMason/ImageOptim-CLI/compare/1.6.18...1.6.19) (2013-08-10) 262 | 263 | 264 | 265 | ## [1.6.18](https://github.com/JamieMason/ImageOptim-CLI/compare/1.6.15...1.6.18) (2013-07-31) 266 | 267 | 268 | 269 | ## [1.6.15](https://github.com/JamieMason/ImageOptim-CLI/compare/1.6.14...1.6.15) (2013-07-30) 270 | 271 | 272 | 273 | ## [1.6.14](https://github.com/JamieMason/ImageOptim-CLI/compare/1.6.13...1.6.14) (2013-07-16) 274 | 275 | 276 | 277 | ## [1.6.13](https://github.com/JamieMason/ImageOptim-CLI/compare/1.6.12...1.6.13) (2013-07-14) 278 | 279 | 280 | 281 | ## [1.6.12](https://github.com/JamieMason/ImageOptim-CLI/compare/1.6.11...1.6.12) (2013-07-01) 282 | 283 | 284 | 285 | ## [1.6.11](https://github.com/JamieMason/ImageOptim-CLI/compare/1.4.5...1.6.11) (2013-06-30) 286 | 287 | 288 | 289 | ## [1.4.5](https://github.com/JamieMason/ImageOptim-CLI/compare/1.4.4...1.4.5) (2013-06-19) 290 | 291 | 292 | 293 | ## [1.4.4](https://github.com/JamieMason/ImageOptim-CLI/compare/1.4.3...1.4.4) (2013-06-13) 294 | 295 | 296 | 297 | ## [1.4.3](https://github.com/JamieMason/ImageOptim-CLI/compare/1.4.2...1.4.3) (2013-06-13) 298 | 299 | 300 | 301 | ## [1.4.2](https://github.com/JamieMason/ImageOptim-CLI/compare/1.4.1...1.4.2) (2013-06-10) 302 | 303 | 304 | 305 | ## [1.4.1](https://github.com/JamieMason/ImageOptim-CLI/compare/1.3.2...1.4.1) (2013-06-10) 306 | 307 | 308 | 309 | ## [1.3.2](https://github.com/JamieMason/ImageOptim-CLI/compare/1.3.1...1.3.2) (2013-06-08) 310 | 311 | 312 | 313 | ## [1.3.1](https://github.com/JamieMason/ImageOptim-CLI/compare/1.1.5...1.3.1) (2013-05-26) 314 | 315 | 316 | 317 | ## [1.1.5](https://github.com/JamieMason/ImageOptim-CLI/compare/1.1.4...1.1.5) (2013-05-24) 318 | 319 | 320 | 321 | ## [1.1.4](https://github.com/JamieMason/ImageOptim-CLI/compare/1.1.3...1.1.4) (2013-05-22) 322 | 323 | 324 | 325 | ## [1.1.3](https://github.com/JamieMason/ImageOptim-CLI/compare/1.1.2...1.1.3) (2013-05-20) 326 | 327 | 328 | 329 | ## [1.1.2](https://github.com/JamieMason/ImageOptim-CLI/compare/1.1.1...1.1.2) (2013-05-19) 330 | 331 | 332 | 333 | ## [1.1.1](https://github.com/JamieMason/ImageOptim-CLI/compare/1.0.4...1.1.1) (2013-05-19) 334 | 335 | 336 | 337 | ## [1.0.4](https://github.com/JamieMason/ImageOptim-CLI/compare/1.0.0...1.0.4) (2013-05-18) 338 | 339 | 340 | 341 | # [1.0.0](https://github.com/JamieMason/ImageOptim-CLI/compare/0.0.6...1.0.0) (2013-05-17) 342 | 343 | 344 | 345 | ## 0.0.6 (2013-03-03) 346 | 347 | 348 | 349 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, religion, or sexual identity 10 | and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | * Demonstrating empathy and kindness toward other people 21 | * Being respectful of differing opinions, viewpoints, and experiences 22 | * Giving and gracefully accepting constructive feedback 23 | * Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | * Focusing on what is best not just for us as individuals, but for the 26 | overall community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | * The use of sexualized language or imagery, and sexual attention or 31 | advances of any kind 32 | * Trolling, insulting or derogatory comments, and personal or political attacks 33 | * Public or private harassment 34 | * Publishing others' private information, such as a physical or email 35 | address, without their explicit permission 36 | * Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | jamie@foldleft.io. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series 86 | of actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or 93 | permanent ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within 113 | the community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.0, available at 119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. 120 | 121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct 122 | enforcement ladder](https://github.com/mozilla/diversity). 123 | 124 | [homepage]: https://www.contributor-covenant.org 125 | 126 | For answers to common questions about this code of conduct, see the FAQ at 127 | https://www.contributor-covenant.org/faq. Translations are available at 128 | https://www.contributor-covenant.org/translations. 129 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | ## :cloud: Getting Started 4 | 5 | 1. Ensure NodeJS version `8.11.1` is installed. 6 | 1. `git clone https://github.com/JamieMason/ImageOptim-CLI.git`. 7 | 1. `npm install`. 8 | 1. `npm run lint`. 9 | 1. `npm run build`. 10 | 11 | ## :wrench: Technologies 12 | 13 | OSX is automated using the [AppleScript][applescript] files in 14 | [./osascript/\*.applescript][osascript] and those scripts are called from NodeJS by 15 | [./src/applescript.ts][applescript.ts]. 16 | 17 | ImageOptim-CLI is written in [TypeScript][typescript] and converted into a standalone executable 18 | using [nexe] so that NodeJS is not needed by its users. This is all handled by the `npm run build` 19 | command. 20 | 21 | ## :construction: Developing Locally 22 | 23 | Each time you make a change to the TypeScript or AppleScript, run `npm run build` to update the 24 | executable at **./dist/imageoptim**. You can run your local executable from there: 25 | 26 | ``` 27 | ./dist/imageoptim --help 28 | ``` 29 | 30 | ## :microscope: Testing Before Release 31 | 32 | 1. Run `npm pack` to create a tarball at **./imageoptim-cli-2.0.0.tgz**, where `2.0.0` is whatever 33 | the current `version` is defined as in **./package.json**. 34 | 1. Run `npm install -g ./imageoptim-cli-2.0.0.tgz` to globally install the release candidate. 35 | 1. `npm ls -g --depth 0` will list your release candidate alongside your other global npm 36 | dependencies. 37 | 1. `imageoptim --help` can be run as normal, the same way it will once published finally. 38 | 1. Remember to run `npm uninstall -g ./imageoptim-cli-2.0.0.tgz` to remove your local release 39 | candidate afterwards. 40 | 41 | 42 | 43 | [applescript.ts]: https://github.com/JamieMason/ImageOptim-CLI/tree/master/src/applescript.ts 44 | [applescript]: 45 | https://developer.apple.com/library/content/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html 46 | [nexe]: https://github.com/nexe/nexe 47 | [osascript]: https://github.com/JamieMason/ImageOptim-CLI/tree/master/osascript 48 | [typescript]: https://www.typescriptlang.org/ 49 | -------------------------------------------------------------------------------- /DEPENDENCIES.md: -------------------------------------------------------------------------------- 1 | # imageoptim-cli 2 | 3 | Automates ImageOptim, ImageAlpha, and JPEGmini for Mac to make batch optimisation of images part of your automated build process. 4 | 5 | ## Installation 6 | 7 | This is a [Node.js](https://nodejs.org/) module available through the 8 | [npm registry](https://www.npmjs.com/). It can be installed using the 9 | [`npm`](https://docs.npmjs.com/getting-started/installing-npm-packages-locally) 10 | or 11 | [`yarn`](https://yarnpkg.com/en/) 12 | command line tools. 13 | 14 | ```sh 15 | npm install imageoptim-cli --save 16 | ``` 17 | 18 | ## Dependencies 19 | 20 | - [chalk](https://ghub.io/chalk): Terminal string styling done right 21 | - [commander](https://ghub.io/commander): the complete solution for node.js command-line programs 22 | - [expect-more](https://ghub.io/expect-more): Curried JavaScript Type Testing Library with Zero Dependencies 23 | - [globby](https://ghub.io/globby): User-friendly glob matching 24 | - [pretty-bytes](https://ghub.io/pretty-bytes): Convert bytes to a human readable string: 1337 → 1.34 kB 25 | 26 | ## Dev Dependencies 27 | 28 | - [@types/node](https://ghub.io/@types/node): TypeScript definitions for Node.js 29 | - [@typescript-eslint/eslint-plugin](https://ghub.io/@typescript-eslint/eslint-plugin): TypeScript plugin for ESLint 30 | - [@typescript-eslint/parser](https://ghub.io/@typescript-eslint/parser): An ESLint custom parser which leverages TypeScript ESTree 31 | - [eslint](https://ghub.io/eslint): An AST-based pattern checker for JavaScript. 32 | - [organize-imports-cli](https://ghub.io/organize-imports-cli): VS Code's 'Organize imports' executable from command line 33 | - [pkg](https://ghub.io/pkg): Package your Node.js project into an executable 34 | - [prettier](https://ghub.io/prettier): Prettier is an opinionated code formatter 35 | - [syncpack](https://ghub.io/syncpack): Consistent dependency versions in large JavaScript Monorepos 36 | - [typescript](https://ghub.io/typescript): TypeScript is a language for application scale JavaScript development 37 | 38 | ## License 39 | 40 | MIT -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2015-2023 Jamie Mason 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 6 | associated documentation files (the "Software"), to deal in the Software without restriction, 7 | including without limitation the rights to use, copy, modify, merge, publish, distribute, 8 | sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is 9 | furnished to do so, subject to the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be included in all copies or substantial 12 | portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT 15 | NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 16 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES 17 | OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 18 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ImageOptim-CLI 2 | 3 | > Automates [ImageOptim](http://imageoptim.com), [ImageAlpha](http://pngmini.com), and [JPEGmini for Mac](http://jpegmini.com/mac) to make batch optimisation of images part of your automated build process. 4 | 5 | [![NPM version](http://img.shields.io/npm/v/imageoptim-cli.svg?style=flat-square)](https://www.npmjs.com/package/imageoptim-cli) 6 | [![NPM downloads](http://img.shields.io/npm/dm/imageoptim-cli.svg?style=flat-square)](https://www.npmjs.com/package/imageoptim-cli) 7 | [![Build Status](https://github.com/JamieMason/ImageOptim-CLI/actions/workflows/ci.yaml/badge.svg)](https://github.com/JamieMason/ImageOptim-CLI/actions/workflows/ci.yaml) 8 | [![Maintainability](https://api.codeclimate.com/v1/badges/c7f41a90fa2c975cfd03/maintainability)](https://codeclimate.com/github/JamieMason/ImageOptim-CLI/maintainability) 9 | 10 | ## Table of Contents 11 | 12 | - [📣 Summary](#-summary) 13 | - [🌩 Installation](#-installation) 14 | - [🕹 Usage](#-usage) 15 | - [⚠️ JPEGmini and support for assistive devices](#️-jpegmini-and-support-for-assistive-devices) 16 | - [💡 Related Projects](#-related-projects) 17 | - [❓ FAQs](#-faqs) 18 | - [⚙️ Contributing](#️-contributing) 19 | - [🙋🏿‍♀️ Getting Help](#♀️-getting-help) 20 | - [👀 Other Projects](#-other-projects) 21 | - [🤓 Author](#-author) 22 | 23 | ## 📣 Summary 24 | 25 | While other image optimization tools are available from the command line, ImageOptim-CLI exists because the [current benchmarks](http://jamiemason.github.io/ImageOptim-CLI/) suggest that ImageOptim, ImageAlpha and JPEGmini currently outperform those alternatives over lossless and lossy optimizations. 26 | 27 | ImageOptim-CLI is written in TypeScript and AppleScript but is distributed as a self-contained executable binary, you don't need Node.js installed to use ImageOptim-CLI. 28 | 29 | Check out this short [video demo of ImageOptim-CLI](https://www.youtube.com/watch?v=HGBounRIzSs) to see how it works. 30 | 31 | ## 🌩 Installation 32 | 33 | ### [npm](https://npmjs.org/) 34 | 35 | npm install -g imageoptim-cli 36 | 37 | ### [homebrew](https://brew.sh/) 38 | 39 | brew update 40 | brew install imageoptim-cli 41 | 42 | ### Manual 43 | 44 | Otherwise, you can install manually by downloading the latest release then adding ImageOptim-CLI to your [\\\\$PATH](https://en.wikipedia.org/wiki/PATH_(variable)). 45 | 46 | # go to home directory 47 | cd ~ 48 | # download the tarball (change 3.0.7 to latest version if available) 49 | curl --output imageoptim-cli.tgz https://registry.npmjs.org/imageoptim-cli/-/imageoptim-cli-3.0.7.tgz 50 | # extract the tarball 51 | tar -xvzf ./imageoptim-cli.tgz 52 | # delete the tarball 53 | rm imageoptim-cli.tgz 54 | # rename the directory extracted from the tarball 55 | mv ./package ./imageoptim-cli 56 | # make imageoptim command available in your terminal 57 | export PATH=$PATH:imageoptim-cli/dist 58 | 59 | > Saving somewhere in your home directory such as `~/imageoptim-cli` is recommended, but not essential. Saving to `/Applications` is **not** recommended, do not do this. 60 | 61 | ## 🕹 Usage 62 | 63 | $ imageoptim --help 64 | 65 | Usage: imageoptim [options] [patterns...] 66 | 67 | Options: 68 | 69 | -V, --version output the version number 70 | -a, --imagealpha enable ImageAlpha 71 | -j, --jpegmini enable JPEGmini 72 | -C, --no-color output to the terminal without colors 73 | -I, --no-imageoptim disable ImageOptim 74 | -Q, --no-quit do not quit apps once finished 75 | -S, --no-stats do not display file size savings and quality loss information 76 | --number-of-colors ImageAlpha palette size, defaults to 256 77 | --quality - ImageAlpha quality range from 0-100, defaults to 65-80 78 | --speed ImageAlpha speed from 1 (brute-force) to 10 (fastest), defaults to 1 79 | -h, --help output usage information 80 | 81 | Supported Apps: 82 | 83 | ImageAlpha: https://pngmini.com 84 | ImageOptim: https://imageoptim.com 85 | JPEGmini Lite: https://itunes.apple.com/us/app/jpegmini-lite/id525742250 86 | JPEGmini Pro: https://itunes.apple.com/us/app/jpegmini-pro/id887163276 87 | JPEGmini: https://itunes.apple.com/us/app/jpegmini/id498944723 88 | 89 | Examples: 90 | 91 | Run ImageOptim.app over every image in current directory 92 | imageoptim 93 | 94 | Run ImageAlpha.app and ImageOptim.app over every PNG in current directory 95 | imageoptim --imagealpha '**/*.png' 96 | 97 | Run JPEGmini.app and ImageOptim.app over every JPG in current directory 98 | imageoptim --jpegmini '**/*.jpg' '**/*.jpeg' 99 | 100 | Run ImageOptim.app over every image in a specific directory 101 | imageoptim '~/Desktop' 102 | 103 | ## ⚠️ JPEGmini and support for assistive devices 104 | 105 | You may be presented with the following message the first time you run ImageOptim-CLI with the `--jpegmini` flag. 106 | 107 | > To automate JPEGmini we need to add Terminal.app (or iTerm.app etc) to the 'support for assistive devices' whitelist. 108 | 109 | The JPEGmini OS X Apps don't include a command line API, so a real user is simulated by entering synthetic clicks and keyboard commands instead. This requires your permission and is easily set up in System Preferences as shown by these guides. 110 | 111 | - [Enable access for assistive devices in OS X](http://mizage.com/help/accessibility.html) 112 | - [OS X Mavericks: Enable access for assistive devices and applications](http://support.apple.com/en-us/HT6026) 113 | 114 | ## 💡 Related Projects 115 | 116 | ### Grunt Plugin 117 | 118 | The ImageOptim-CLI [Grunt](http://gruntjs.com) plugin is [grunt-imageoptim](https://github.com/JamieMason/grunt-imageoptim). 119 | 120 | ### Comparison of image optimization tools 121 | 122 | ImageOptim-CLI features in this comparison of the [performance of image optimisation tools](http://jamiemason.github.io/ImageOptim-CLI/) alongside Kraken.io, CodeKit, grunt-contrib-imagemin, Smush.it, and TinyPNG. 123 | 124 | ### Article for Smashing Magazine 125 | 126 | [How Optimized Are Your Images? Meet ImageOptim-CLI, a Batch Compression Tool](http://www.smashingmagazine.com/2013/12/17/imageoptim-cli-batch-compression-tool/) 127 | 128 | ### Alfred Workflow 129 | 130 | The ImageOptim-CLI Workflow for Alfred app is [alfred-image-optim-workflow](https://github.com/ramiroaraujo/alfred-image-optim-workflow) 131 | 132 | ## ❓ FAQs 133 | 134 | ### General 135 | 136 | #### Do ImageOptim, ImageAlpha, or JPEGmini come bundled with the ImageOptim-CLI installation? 137 | 138 | You will need to install these applications separately. 139 | 140 | #### Do I have to pay to use ImageOptim-CLI? 141 | 142 | The CLI, ImageOptim and ImageAlpha are all free. JPEGmini is a paid-for product but you can use ImageOptim-CLI and choose not to run JPEGmini. 143 | 144 | #### The WebP image format looks promising, can you get ImageOptim-CLI to convert images to it? 145 | 146 | WebP looks great and may well overtake the formats handled by ImageOptim-CLI, but converting images to WebP is outside ImageOptim-CLI's chosen remit. 147 | 148 | #### Can you get ImageOptim-CLI to skip images it has already processed, if they haven't changed? 149 | 150 | JPEGmini does this today, but for ImageOptim and ImageAlpha I feel a feature like this belongs in those applications rather than this automator. 151 | 152 | ### ImageOptim 153 | 154 | #### ImageOptim makes the fans on my Mac run at full power. 155 | 156 | Optimising images is a pretty intensive process, so instead of optimising one image at a time (which would take forever) — ImageOptim optimises many images at the same time until all of them are done. 157 | 158 | A side effect of this is that the fans come on at full power to keep your machine cool while it's maxed out. 159 | 160 | ### ImageAlpha 161 | 162 | #### I don't think ImageAlpha is running, I can't see anything. 163 | 164 | ImageOptim-CLI uses ImageAlpha's internal installation of [pngquant](http://pngquant.org) so it's normal that nothing is shown on screen. 165 | 166 | It's also possible that if you look in the [Activity Monitor](http://support.apple.com/kb/HT5890) you will not see `pngquant` displayed but it _is_ being run. In my experience it's only when you run ImageOptim-CLI on a very large number of PNGs that you have enough time to spot it. ensure that Activity Monitor's **Update Frequency** is set to **Very Often (1 sec)**. 167 | 168 | ### JPEGmini 169 | 170 | #### Can I use ImageOptim-CLI with JPEGmini Lite, the free version of JPEGmini? 171 | 172 | Yes. 173 | 174 | #### I upgraded from JPEGmini Lite to JPEGmini but ImageOptim-CLI still says JPEGmini is not installed. 175 | 176 | Performing the in-app upgrade leaves the app named as jpegmini-lite, so ImageOptim-CLI can't determine whether it's the free or full version. It is better to instead buy [the full version of JPEGmini](https://itunes.apple.com/us/app/jpegmini/id498944723) separately. 177 | 178 | #### ImageOptim-CLI says “To automate JPEGmini we need to enable GUI Scripting”, how do I do that? 179 | 180 | See this tutorial on [how to manage Accessibility preferences and GUI Scripting](http://www.macosautomation.com/mavericks/guiscripting/index.html). In the case of OS X Mavericks, you will want to add the Applications JPEGmini and Terminal (or equivalent such as iTerm). 181 | 182 | ### Windows and Linux 183 | 184 | #### Can I use ImageOptim-CLI on Windows or Linux? 185 | 186 | ImageOptim-CLI is responsible for automating 3 OS X applications so is inherently bound to OS X for that reason. 187 | 188 | #### Are there any plans for ImageOptim-CLI to support Windows or Linux? 189 | 190 | It would first require ImageOptim, ImageAlpha, and JPEGmini to be available for those platforms. 191 | 192 | #### I don't have OS X, can you recommend an alternative to ImageOptim-CLI? 193 | 194 | [@addyosmani](https://github.com/addyosmani) wrote a really thorough article on [tools for image optimization](http://addyosmani.com/blog/image-optimization-tools/) which discusses a wide range of options in great detail. 195 | 196 | ## ⚙️ Contributing 197 | 198 | Have an idea? Found a bug? Please see the [Contributing Guide](/CONTRIBUTING.md) for information on how to install the project and start writing code. 199 | 200 | ## 🙋🏿‍♀️ Getting Help 201 | 202 | Get help with issues by creating a [Bug Report] or discuss ideas by opening a [Feature Request]. 203 | 204 | [bug report]: https://github.com/JamieMason/ImageOptim-CLI/issues/new?template=bug_report.md 205 | 206 | [feature request]: https://github.com/JamieMason/ImageOptim-CLI/issues/new?template=feature_request.md 207 | 208 | ## 👀 Other Projects 209 | 210 | If you find my Open Source projects useful, please share them ❤️ 211 | 212 | - [**eslint-formatter-git-log**](https://github.com/JamieMason/eslint-formatter-git-log)
ESLint Formatter featuring Git Author, Date, and Hash 213 | - [**eslint-plugin-move-files**](https://github.com/JamieMason/eslint-plugin-move-files)
Move and rename files while keeping imports up to date 214 | - [**eslint-plugin-prefer-arrow-functions**](https://github.com/JamieMason/eslint-plugin-prefer-arrow-functions)
Convert functions to arrow functions 215 | - [**Jasmine-Matchers**](https://github.com/JamieMason/Jasmine-Matchers)
Write Beautiful Specs with Custom Matchers 216 | - [**karma-benchmark**](https://github.com/JamieMason/karma-benchmark)
Run Benchmark.js over multiple Browsers, with CI compatible output 217 | - [**self-help**](https://github.com/JamieMason/self-help#readme)
Interactive Q&A Guides for Web and the Command Line 218 | - [**syncpack**](https://github.com/JamieMason/syncpack#readme)
Manage multiple package.json files, such as in Lerna Monorepos and Yarn Workspaces 219 | 220 | ## 🤓 Author 221 | 222 | 223 | 224 | I'm [Jamie Mason] from [Leeds] in England, I began Web Design and Development in 1999 and have been Contracting and offering Consultancy as Fold Left Ltd since 2012. Who I've worked with includes [Sky Sports], [Sky Bet], [Sky Poker], The [Premier League], [William Hill], [Shell], [Betfair], and Football Clubs including [Leeds United], [Spurs], [West Ham], [Arsenal], and more. 225 | 226 |
227 | 228 | [![Follow JamieMason on GitHub][github badge]][github]      [![Follow fold_left on Twitter][twitter badge]][twitter] 229 | 230 |
231 | 232 | 233 | 234 | [github badge]: https://img.shields.io/github/followers/JamieMason.svg?style=social&label=Follow 235 | 236 | [twitter badge]: https://img.shields.io/twitter/follow/fold_left.svg?style=social&label=Follow 237 | 238 | 239 | 240 | [arsenal]: https://www.arsenal.com 241 | 242 | [betfair]: https://www.betfair.com 243 | 244 | [github]: https://github.com/JamieMason 245 | 246 | [jamie mason]: https://www.linkedin.com/in/jamiemasonleeds 247 | 248 | [leeds united]: https://www.leedsunited.com/ 249 | 250 | [leeds]: https://www.instagram.com/visitleeds 251 | 252 | [premier league]: https://www.premierleague.com 253 | 254 | [shell]: https://www.shell.com 255 | 256 | [sky bet]: https://www.skybet.com 257 | 258 | [sky poker]: https://www.skypoker.com 259 | 260 | [sky sports]: https://www.skysports.com 261 | 262 | [spurs]: https://www.tottenhamhotspur.com 263 | 264 | [twitter]: https://twitter.com/fold_left 265 | 266 | [west ham]: https://www.whufc.com 267 | 268 | [william hill]: https://www.williamhill.com 269 | -------------------------------------------------------------------------------- /osascript/is-installed.applescript: -------------------------------------------------------------------------------- 1 | #!/bin/osascript 2 | 3 | on isInstalled(bundleId) 4 | try 5 | tell application "Finder" to get application file id bundleId 6 | return true 7 | on error 8 | return false 9 | end try 10 | end isInstalled 11 | 12 | on run argv 13 | set bundleId to item 1 of argv 14 | return isInstalled(bundleId) 15 | end run 16 | -------------------------------------------------------------------------------- /osascript/quit-app.applescript: -------------------------------------------------------------------------------- 1 | #!/bin/osascript 2 | 3 | on quitApp(appName) 4 | tell application appName to quit 5 | end quitApp 6 | 7 | on run argv 8 | set appName to item 1 of argv 9 | return quitApp(appName) 10 | end run 11 | -------------------------------------------------------------------------------- /osascript/run-jpegmini.applescript: -------------------------------------------------------------------------------- 1 | #!/bin/osascript 2 | 3 | on runJPEGmini(jpegDirectory, jpegMiniAppName) 4 | (* OPEN AND FOCUS JPEGMINI *) 5 | tell application jpegMiniAppName 6 | activate 7 | delay 3 8 | activate 9 | end tell 10 | (* SPAWN THE FILE > OPEN MENU *) 11 | tell application "System Events" 12 | keystroke "o" using {command down} 13 | delay 3 14 | keystroke "g" using {command down, shift down} 15 | delay 2 16 | end tell 17 | (* NAVIGATE TO OUR FOLDER OF IMAGES *) 18 | tell application "System Events" 19 | tell process jpegMiniAppName 20 | (* < SIERRA, FILE PATH SELECTOR IS TEXT INPUT *) 21 | if text field 1 of sheet 1 of sheet 1 of window 1 exists then 22 | set value of text field 1 of sheet 1 of sheet 1 of window 1 to jpegDirectory 23 | repeat 24 | if (value of text field 1 of sheet 1 of sheet 1 of window 1) is not equal to jpegDirectory then 25 | delay 1 26 | else 27 | exit repeat 28 | end if 29 | end repeat 30 | end if 31 | (* = SIERRA, FILE PATH SELECTOR IS COMBO BOX *) 32 | if combo box 1 of sheet 1 of sheet 1 of window 1 exists then 33 | set value of combo box 1 of sheet 1 of sheet 1 of window 1 to jpegDirectory 34 | repeat 35 | if (value of combo box 1 of sheet 1 of sheet 1 of window 1) is not equal to jpegDirectory then 36 | delay 1 37 | else 38 | exit repeat 39 | end if 40 | end repeat 41 | end if 42 | (* HIGH SIERRA *) 43 | if combo box 1 of sheet 1 of window 1 exists then 44 | set value of combo box 1 of sheet 1 of window 1 to jpegDirectory 45 | repeat 46 | if (value of combo box 1 of sheet 1 of window 1) is not equal to jpegDirectory then 47 | delay 1 48 | else 49 | exit repeat 50 | end if 51 | end repeat 52 | end if 53 | (* >= MONTEREY *) 54 | if text field 1 of sheet 1 of window 1 exists then 55 | set value of text field 1 of sheet 1 of window 1 to jpegDirectory 56 | repeat 57 | if (value of text field 1 of sheet 1 of window 1) is not equal to jpegDirectory then 58 | delay 1 59 | else 60 | exit repeat 61 | end if 62 | end repeat 63 | end if 64 | -- give Finder time to resolve the path 65 | delay 2 66 | keystroke return 67 | delay 2 68 | keystroke return 69 | -- start optimising (>= Yosemite) 70 | -- click button "Go" of sheet 1 of window 1 71 | -- start optimising (<= Mavericks) 72 | -- click button "Open" of sheet 1 of window 1 73 | end tell 74 | end tell 75 | (* WAIT FOR JPEGMINI TO FINISH RUNNING *) 76 | tell application "System Events" 77 | set timesIdle to 0 78 | repeat 79 | -- get all process information | filtered to JPEGmini 80 | set getRawProcess to "ps aux | grep '/Applications/" & jpegMiniAppName & "'" 81 | -- filter out JPEGmini grep | get column 3 of output (% CPU) 82 | set filterRawProcess to "grep -v grep | awk '{print $3}'" 83 | -- store above pipe chain in a variable 84 | set getRawCpu to "RAWCPU=$(" & getRawProcess & " | " & filterRawProcess & ")" 85 | -- round that variable to a whole number 86 | set outputRoundedCpu to "$(printf \"%.0f\" $(echo \"scale=2;$RAWCPU\" | bc))" 87 | -- join the two commands and echo it out to applescript 88 | set getCpuPercent to getRawCpu & " && echo " & outputRoundedCpu 89 | -- get raw terminal string output 90 | set cpuPercent to (do shell script getCpuPercent) as number 91 | -- give the app a little time to work 92 | delay 0.5 93 | -- if the app is idle 94 | if (cpuPercent) < 1 then 95 | -- increment number of times we've found the app consecutively idle 96 | set timesIdle to timesIdle + 1 97 | -- if it's been idle for long enough we can exit 98 | if (timesIdle) > 5 then 99 | exit repeat 100 | end if 101 | end if 102 | -- (implied else: by not exiting we repeat again) 103 | end repeat 104 | delay 0.5 105 | end tell 106 | end runJPEGmini 107 | 108 | on run argv 109 | set jpegDirectory to item 1 of argv 110 | set jpegMiniAppName to item 2 of argv 111 | return runJPEGmini(jpegDirectory, jpegMiniAppName) 112 | end run 113 | -------------------------------------------------------------------------------- /osascript/supports-assistive-devices.applescript: -------------------------------------------------------------------------------- 1 | #!/bin/osascript 2 | 3 | on supportsAssistiveDevices() 4 | try 5 | tell application "System Events" to get UI elements enabled 6 | on error 7 | return "ERROR_GUISCRIPT_UNREADABLE" 8 | end try 9 | end supportsAssistiveDevices 10 | 11 | on run argv 12 | return supportsAssistiveDevices() 13 | end run 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "imageoptim-cli", 3 | "description": "Automates ImageOptim, ImageAlpha, and JPEGmini for Mac to make batch optimisation of images part of your automated build process.", 4 | "version": "3.1.9", 5 | "author": "Jamie Mason (https://github.com/JamieMason)", 6 | "bin": { 7 | "imageoptim": "dist/imageoptim" 8 | }, 9 | "bugs": "https://github.com/JamieMason/ImageOptim-CLI/issues", 10 | "contributors": [ 11 | "Azusa Tomita (@azusa-tomita)", 12 | "David Newton (@nwtn)", 13 | "Elaine Osbourn (@kittysquee)", 14 | "Fernando Barros (@fbbarros)", 15 | "James Stout (@jamesstout)", 16 | "Jamie Mason (@JamieMason)", 17 | "Jason Grant (@oo12)", 18 | "Martin Schürrer (@MSch)", 19 | "Niklas Vosskötter (@neikei)", 20 | "Patrick Eriksson (@paleite)", 21 | "Peter van Westen (@regularlabs)", 22 | "Ramiro Araujo (@ramiroaraujo)", 23 | "Simen Brekken (@sbrekken)", 24 | "Stefan Crain (@stefancrain)", 25 | "The Gitter Badger (@gitter-badger)", 26 | "Tom Chen (@tomchentw)" 27 | ], 28 | "dependencies": { 29 | "chalk": "4.1.2", 30 | "commander": "11.0.0", 31 | "expect-more": "1.3.0", 32 | "globby": "11.1.0", 33 | "pretty-bytes": "5.6.0" 34 | }, 35 | "devDependencies": { 36 | "@types/node": "18.16.19", 37 | "@typescript-eslint/eslint-plugin": "5.60.1", 38 | "@typescript-eslint/parser": "5.60.1", 39 | "eslint": "8.44.0", 40 | "organize-imports-cli": "0.10.0", 41 | "pkg": "5.8.1", 42 | "prettier": "2.8.8", 43 | "syncpack": "10.6.1", 44 | "typescript": "5.1.6" 45 | }, 46 | "engines": { 47 | "node": ">=18" 48 | }, 49 | "files": [ 50 | "dist", 51 | "osascript" 52 | ], 53 | "homepage": "https://github.com/JamieMason/ImageOptim-CLI", 54 | "keywords": [ 55 | "advpng", 56 | "compress", 57 | "compress images", 58 | "gifsicle", 59 | "image compression", 60 | "image optimisation", 61 | "imagealpha", 62 | "imagemin", 63 | "imageoptim", 64 | "images", 65 | "jpegmini", 66 | "jpegoptim", 67 | "jpegtran", 68 | "optimise images", 69 | "optipng", 70 | "pngcrush", 71 | "pngout", 72 | "pngquant", 73 | "smushit", 74 | "tinypng" 75 | ], 76 | "license": "MIT", 77 | "repository": "JamieMason/ImageOptim-CLI", 78 | "scripts": { 79 | "build": "npm run build:ts && npm run build:bin", 80 | "build:bin": "(cd dist && pkg --targets 'node18-macos-x64' --output ./imageoptim ./imageoptim.js)", 81 | "build:ts": "tsc --project .", 82 | "format": "npm run format:imports && npm run format:prettier && npm run format:eslint", 83 | "format:eslint": "npm run lint -- --fix", 84 | "format:imports": "organize-imports-cli ./src/**/*.ts", 85 | "format:prettier": "prettier --write './src/**/*.ts'", 86 | "lint": "eslint --ext .ts .", 87 | "postbuild": "rm -rf dist/*.js", 88 | "prebuild": "rm -rf dist", 89 | "prepack": "npm run build" 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/applescript.ts: -------------------------------------------------------------------------------- 1 | import { dirname, resolve } from 'path'; 2 | import { 3 | App, 4 | JPEGMINI, 5 | JPEGMINI_LITE, 6 | JPEGMINI_LITE_RETAIL, 7 | JPEGMINI_PRO, 8 | JPEGMINI_PRO_BEAMR, 9 | JPEGMINI_PRO_RETAIL, 10 | JPEGMINI_RETAIL, 11 | TMPDIR, 12 | } from './constants'; 13 | import { osascript } from './osascript'; 14 | 15 | const getDirname = () => dirname(module.filename || process.execPath); 16 | const getScriptPath = (name: string) => resolve(getDirname(), `../osascript/${name}.applescript`); 17 | const toBoolean = (value: string) => value === 'true'; 18 | 19 | export const isInstalled = (app: App): Promise => 20 | osascript(getScriptPath('is-installed'), app.bundleId).then(toBoolean); 21 | 22 | export const quitApp = (app: App): Promise => 23 | osascript(getScriptPath('quit-app'), app.name).then(() => undefined); 24 | 25 | export const runJpegMini = (app: App): Promise => 26 | osascript(getScriptPath('run-jpegmini'), TMPDIR, app.name).then(() => undefined); 27 | 28 | export const supportsAssistiveDevices = (): Promise => 29 | osascript(getScriptPath('supports-assistive-devices')).then(toBoolean); 30 | 31 | export const getJpegMini = async (): Promise => 32 | (await isInstalled(JPEGMINI_PRO)) 33 | ? JPEGMINI_PRO 34 | : (await isInstalled(JPEGMINI_PRO_RETAIL)) 35 | ? JPEGMINI_PRO_RETAIL 36 | : (await isInstalled(JPEGMINI)) 37 | ? JPEGMINI 38 | : (await isInstalled(JPEGMINI_RETAIL)) 39 | ? JPEGMINI_RETAIL 40 | : (await isInstalled(JPEGMINI_LITE)) 41 | ? JPEGMINI_LITE 42 | : (await isInstalled(JPEGMINI_LITE_RETAIL)) 43 | ? JPEGMINI_LITE_RETAIL 44 | : (await isInstalled(JPEGMINI_PRO_BEAMR)) 45 | ? JPEGMINI_PRO_BEAMR 46 | : null; 47 | -------------------------------------------------------------------------------- /src/constants.ts: -------------------------------------------------------------------------------- 1 | import { tmpdir } from 'os'; 2 | import { join } from 'path'; 3 | import { uuid } from './uuid'; 4 | 5 | export interface App { 6 | readonly bundleId: string; 7 | readonly name: string; 8 | readonly supports: string[]; 9 | } 10 | 11 | const manifest = require('../package.json'); 12 | const supports = { 13 | imageAlpha: ['.PNG', '.png'], 14 | imageOptim: [ 15 | '.BMP', 16 | '.bmp', 17 | '.GIF', 18 | '.gif', 19 | '.JPEG', 20 | '.jpeg', 21 | '.JPG', 22 | '.jpg', 23 | '.PCX', 24 | '.pcx', 25 | '.PNG', 26 | '.png', 27 | '.PNM', 28 | '.pnm', 29 | '.TGA', 30 | '.tga', 31 | '.TIFF', 32 | '.tiff', 33 | ], 34 | jpegmini: ['.JPEG', '.jpeg', '.JPG', '.jpg'], 35 | }; 36 | 37 | export const SUPPORTED_FILE_TYPES = [ 38 | ...supports.imageAlpha, 39 | ...supports.imageOptim, 40 | ...supports.jpegmini, 41 | ].filter((value, i, list) => list.indexOf(value) === i); 42 | 43 | export const TMPDIR = join(tmpdir(), 'imageoptim-cli', uuid()); 44 | export const VERSION = manifest.version; 45 | export const PNGQUANT_NUMBER_OF_COLORS = '256'; 46 | export const PNGQUANT_QUALITY = '65-80'; 47 | export const PNGQUANT_SPEED = '1'; 48 | export const PNGQUANT_BIN_PATH = '/Applications/ImageAlpha.app/Contents/MacOS/pngquant'; 49 | export const IMAGEOPTIM_BIN_PATH = '/Applications/ImageOptim.app/Contents/MacOS/ImageOptim'; 50 | 51 | export const HOMEPAGE_URL = 'https://github.com/JamieMason/ImageOptim-CLI'; 52 | export const ASSISTIVE_DEVICES_URL = `${HOMEPAGE_URL}/#%EF%B8%8F-jpegmini-and-support-for-assistive-devices`; 53 | export const IMAGEALPHA_URL = 'https://pngmini.com/'; 54 | export const IMAGEOPTIM_URL = 'https://imageoptim.com/mac'; 55 | export const JPEG_MINI_URL = 'https://itunes.apple.com/us/app/jpegmini/id498944723'; 56 | 57 | export const IMAGEALPHA: App = { 58 | bundleId: 'net.pornel.ImageAlpha', 59 | name: 'ImageAlpha', 60 | supports: supports.imageAlpha, 61 | }; 62 | 63 | export const IMAGEOPTIM: App = { 64 | bundleId: 'net.pornel.ImageOptim', 65 | name: 'ImageOptim', 66 | supports: supports.imageOptim, 67 | }; 68 | 69 | export const JPEGMINI: App = { 70 | bundleId: 'com.icvt.JPEGmini', 71 | name: 'JPEGmini', 72 | supports: supports.jpegmini, 73 | }; 74 | 75 | export const JPEGMINI_RETAIL: App = { 76 | bundleId: 'com.icvt.JPEGmini-retail', 77 | name: 'JPEGmini', 78 | supports: supports.jpegmini, 79 | }; 80 | 81 | export const JPEGMINI_LITE: App = { 82 | bundleId: 'com.icvt.JPEGminiLite', 83 | name: 'JPEGmini Lite', 84 | supports: supports.jpegmini, 85 | }; 86 | 87 | export const JPEGMINI_LITE_RETAIL: App = { 88 | bundleId: 'com.icvt.JPEGminiLite-retail', 89 | name: 'JPEGmini Lite', 90 | supports: supports.jpegmini, 91 | }; 92 | 93 | export const JPEGMINI_PRO: App = { 94 | bundleId: 'com.icvt.JPEGmini-Pro', 95 | name: 'JPEGmini Pro', 96 | supports: supports.jpegmini, 97 | }; 98 | 99 | export const JPEGMINI_PRO_BEAMR: App = { 100 | bundleId: 'com.beamr.jpegminipro.app', 101 | name: 'JPEGmini Pro', 102 | supports: supports.jpegmini, 103 | }; 104 | 105 | export const JPEGMINI_PRO_RETAIL: App = { 106 | bundleId: 'com.icvt.JPEGmini-Pro-retail', 107 | name: 'JPEGmini Pro', 108 | supports: supports.jpegmini, 109 | }; 110 | 111 | export const ERROR_JPEGMINI_NOT_INSTALLED = 'ERROR_JPEGMINI_NOT_INSTALLED'; 112 | export const ERROR_CANNOT_AUTOMATE_OSX = 'ERROR_CANNOT_AUTOMATE_OSX'; 113 | -------------------------------------------------------------------------------- /src/exec.ts: -------------------------------------------------------------------------------- 1 | import { exec as execProcess } from 'child_process'; 2 | import { promisify } from 'util'; 3 | 4 | const execProm = promisify(execProcess); 5 | 6 | export const exec = (program: string, args: string[]) => execProm(`${program} ${args.join(' ')}`); 7 | -------------------------------------------------------------------------------- /src/filesize.ts: -------------------------------------------------------------------------------- 1 | import prettyBytes from 'pretty-bytes'; 2 | 3 | export const formatFilesize = (value: number) => prettyBytes(value).replace(' ', ''); 4 | -------------------------------------------------------------------------------- /src/fs.ts: -------------------------------------------------------------------------------- 1 | import { access, constants, copyFile, stat as fsStat, Stats } from 'fs'; 2 | import { dirname } from 'path'; 3 | import { exec } from './exec'; 4 | import { verbose } from './log'; 5 | 6 | async function mkdirP(src: string): Promise { 7 | verbose(`mkdir -p ${src}`); 8 | await exec('mkdir', ['-p', src]); 9 | } 10 | 11 | export function copy(src: string, target: string): Promise { 12 | return mkdirP(dirname(target)).then(() => { 13 | return new Promise((resolve, reject) => { 14 | verbose(`fs.copyFile(${src}, ${target})`); 15 | copyFile(src, target, (err) => (err ? reject(err) : resolve())); 16 | }); 17 | }); 18 | } 19 | 20 | export function pathExists(src: string): Promise { 21 | return new Promise((resolve) => { 22 | verbose(`fs.access(${src}, ${constants.F_OK})`); 23 | access(src, constants.F_OK, (err) => (err ? resolve(false) : resolve(true))); 24 | }); 25 | } 26 | 27 | export async function remove(src: string): Promise { 28 | verbose(`rm -rf ${src}`); 29 | await exec('rm', ['-rf', src]); 30 | } 31 | 32 | export function stat(src: string): Promise { 33 | return new Promise((resolve, reject) => { 34 | verbose(`fs.stat(${src})`); 35 | fsStat(src, (err, stats) => (err ? reject(err) : resolve(stats))); 36 | }); 37 | } 38 | -------------------------------------------------------------------------------- /src/get-stats.ts: -------------------------------------------------------------------------------- 1 | import { stat } from './fs'; 2 | import { Options } from '.'; 3 | import { formatFilesize } from './filesize'; 4 | 5 | export interface FileStats { 6 | path: string; 7 | pretty: { 8 | after: string; 9 | before: string; 10 | saving: string; 11 | }; 12 | raw: { 13 | after: number; 14 | before: number; 15 | percentSaving: number; 16 | saving: number; 17 | }; 18 | } 19 | 20 | export interface Stats { 21 | files: FileStats[]; 22 | total: FileStats; 23 | } 24 | 25 | const getFileSize = async (filePath: string) => { 26 | const { size } = await stat(filePath); 27 | return size; 28 | }; 29 | 30 | const getPercentOf = (whole: number, part: number) => (part ? (part / whole) * 100 : 0); 31 | 32 | const createStat = (label: string, sizeAfter: number, sizeBefore: number) => { 33 | const sizeSaving = sizeBefore - sizeAfter; 34 | return { 35 | path: label, 36 | pretty: { 37 | after: formatFilesize(sizeAfter), 38 | before: formatFilesize(sizeBefore), 39 | saving: formatFilesize(sizeSaving), 40 | }, 41 | raw: { 42 | after: sizeAfter, 43 | before: sizeBefore, 44 | percentSaving: getPercentOf(sizeBefore, sizeSaving), 45 | saving: sizeSaving, 46 | }, 47 | }; 48 | }; 49 | 50 | export const getStats = async (options: Options): Promise => { 51 | const fileStats: FileStats[] = await Promise.all( 52 | options.filePaths.map(async ({ source, tmp }) => { 53 | const sizeBefore = await getFileSize(source); 54 | const sizeAfter = await getFileSize(tmp); 55 | return createStat(source, sizeAfter, sizeBefore); 56 | }), 57 | ); 58 | 59 | const totalStats = fileStats.reduce((total, file) => { 60 | const sizeAfter = total.raw.after + file.raw.after; 61 | const sizeBefore = total.raw.before + file.raw.before; 62 | return createStat('TOTAL', sizeAfter, sizeBefore); 63 | }, createStat('TOTAL', 0, 0)); 64 | 65 | return { 66 | files: fileStats, 67 | total: totalStats, 68 | }; 69 | }; 70 | -------------------------------------------------------------------------------- /src/imageoptim.ts: -------------------------------------------------------------------------------- 1 | import chalk from 'chalk'; 2 | import { program } from 'commander'; 3 | import { sync } from 'globby'; 4 | import { homedir } from 'os'; 5 | import { cli } from './'; 6 | import { 7 | PNGQUANT_NUMBER_OF_COLORS, 8 | PNGQUANT_QUALITY, 9 | PNGQUANT_SPEED, 10 | SUPPORTED_FILE_TYPES, 11 | TMPDIR, 12 | VERSION, 13 | } from './constants'; 14 | 15 | const patterns: string[] = []; 16 | 17 | program 18 | .version(VERSION) 19 | .arguments('[patterns...]') 20 | .action((args: string[]) => { 21 | patterns.push(...args.filter((arg) => arg && typeof arg === 'string')); 22 | }) 23 | .option('-a, --imagealpha', 'enable ImageAlpha') 24 | .option('-j, --jpegmini', 'enable JPEGmini') 25 | .option('-C, --no-color', 'output to the terminal without colors') 26 | .option('-I, --no-imageoptim', 'disable ImageOptim') 27 | .option('-Q, --no-quit', 'do not quit apps once finished') 28 | .option('-S, --no-stats', 'do not display file size savings and quality loss information') 29 | .option( 30 | '--number-of-colors ', 31 | `ImageAlpha palette size, defaults to ${PNGQUANT_NUMBER_OF_COLORS}`, 32 | ) 33 | .option( 34 | '--quality -', 35 | `ImageAlpha quality range from 0-100, defaults to ${PNGQUANT_QUALITY}`, 36 | ) 37 | .option( 38 | '--speed ', 39 | `ImageAlpha speed from 1 (brute-force) to 10 (fastest), defaults to ${PNGQUANT_SPEED}`, 40 | ); 41 | 42 | program.on('--help', () => { 43 | console.log( 44 | ` 45 | Supported Apps: 46 | 47 | ImageAlpha: ${chalk.blue.underline('https://pngmini.com')} 48 | ImageOptim: ${chalk.blue.underline('https://imageoptim.com')} 49 | JPEGmini Lite: ${chalk.blue.underline( 50 | 'https://itunes.apple.com/us/app/jpegmini-lite/id525742250', 51 | )} 52 | JPEGmini Pro: ${chalk.blue.underline( 53 | 'https://itunes.apple.com/us/app/jpegmini-pro/id887163276', 54 | )} 55 | JPEGmini: ${chalk.blue.underline('https://itunes.apple.com/us/app/jpegmini/id498944723')} 56 | 57 | Examples: 58 | 59 | ${chalk.dim('Run ImageOptim.app over every image in current directory')} 60 | imageoptim 61 | 62 | ${chalk.dim('Run ImageAlpha.app and ImageOptim.app over every PNG in current directory')} 63 | imageoptim --imagealpha '**/*.png' 64 | 65 | ${chalk.dim('Run JPEGmini.app and ImageOptim.app over every JPG in current directory')} 66 | imageoptim --jpegmini '**/*.jpg' '**/*.jpeg' 67 | 68 | ${chalk.dim('Run JPEGmini.app over every JPG in current directory')} 69 | imageoptim --jpegmini --no-imageoptim '**/*.jpg' '**/*.jpeg' 70 | 71 | ${chalk.dim('Run ImageOptim.app over every image in a specific directory')} 72 | imageoptim '~/Desktop' 73 | `.trimRight(), 74 | ); 75 | }); 76 | 77 | program.parse(process.argv); 78 | 79 | if (process.platform !== 'darwin') { 80 | console.log('imageoptim-cli is macOS only'); 81 | } 82 | 83 | const supportedTypesPattern = SUPPORTED_FILE_TYPES.map((fileType) => `*${fileType}`).join('|'); 84 | 85 | patterns.push(`!**/!(${supportedTypesPattern})`); 86 | 87 | const filePaths = sync(patterns.map((pattern) => pattern.replace('~', homedir()))); 88 | const options = program.opts(); 89 | 90 | cli({ 91 | batchSize: 300, 92 | enabled: { 93 | color: options.color === true, 94 | imageAlpha: options.imagealpha === true, 95 | imageOptim: options.imageoptim === true, 96 | jpegMini: options.jpegmini === true, 97 | quit: options.quit === true, 98 | stats: options.stats === true, 99 | }, 100 | filePaths, 101 | numberOfColors: options.numberOfColors || PNGQUANT_NUMBER_OF_COLORS, 102 | quality: options.quality || PNGQUANT_QUALITY, 103 | speed: options.speed || PNGQUANT_SPEED, 104 | tmpDir: TMPDIR, 105 | }); 106 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { join } from 'path'; 2 | import { getStats } from './get-stats'; 3 | import { bug, complete, enableColor, warning } from './log'; 4 | import { runImageAlpha } from './run-imagealpha'; 5 | import { runImageOptim } from './run-imageoptim'; 6 | import { runJpegMini } from './run-jpegmini'; 7 | import { clean, setup, tearDown } from './tmpdir'; 8 | import { writeReport } from './write-report'; 9 | 10 | export type AppRunner = (options: Options) => Promise; 11 | 12 | export interface File { 13 | source: string; 14 | tmp: string; 15 | } 16 | 17 | export interface CliOptions { 18 | batchSize: number; 19 | enabled: { 20 | color: boolean; 21 | imageAlpha: boolean; 22 | imageOptim: boolean; 23 | jpegMini: boolean; 24 | quit: boolean; 25 | stats: boolean; 26 | }; 27 | filePaths: string[]; 28 | numberOfColors: string; 29 | quality: string; 30 | speed: string; 31 | tmpDir: string; 32 | } 33 | 34 | export interface Options { 35 | batchSize: number; 36 | enabled: { 37 | color: boolean; 38 | imageAlpha: boolean; 39 | imageOptim: boolean; 40 | jpegMini: boolean; 41 | quit: boolean; 42 | stats: boolean; 43 | }; 44 | filePaths: File[]; 45 | numberOfColors: string; 46 | quality: string; 47 | speed: string; 48 | tmpDir: string; 49 | } 50 | 51 | const runnersByName = { 52 | imageAlpha: runImageAlpha, 53 | imageOptim: runImageOptim, 54 | jpegMini: runJpegMini, 55 | stats: getStats, 56 | }; 57 | 58 | const cloneArray = (array: string[]) => [...array]; 59 | 60 | const runIfEnabled = (key: keyof typeof runnersByName, options: Options) => 61 | options.enabled[key] ? runnersByName[key](options) : Promise.resolve(); 62 | 63 | const processBatch = async (options: Options) => { 64 | await setup(options); 65 | await Promise.all([runIfEnabled('imageAlpha', options), runIfEnabled('jpegMini', options)]); 66 | await runIfEnabled('imageOptim', options); 67 | const stats = await runIfEnabled('stats', options); 68 | await tearDown(options); 69 | if (stats) { 70 | await writeReport(stats); 71 | } 72 | }; 73 | 74 | export const cli = async (options: CliOptions) => { 75 | try { 76 | const filesMutable = cloneArray(options.filePaths); 77 | enableColor(options.enabled.color); 78 | if (filesMutable.length === 0) { 79 | return warning('No images matched the patterns provided'); 80 | } 81 | while (filesMutable.length > 0) { 82 | const filePaths = filesMutable.splice(0, options.batchSize); 83 | await processBatch({ 84 | batchSize: options.batchSize, 85 | enabled: options.enabled, 86 | filePaths: filePaths.map((filePath) => ({ 87 | source: filePath, 88 | tmp: join(options.tmpDir, filePath), 89 | })), 90 | numberOfColors: options.numberOfColors, 91 | quality: options.quality, 92 | speed: options.speed, 93 | tmpDir: options.tmpDir, 94 | }); 95 | } 96 | complete('Finished'); 97 | } catch (err) { 98 | bug(err); 99 | await clean(options); 100 | } 101 | }; 102 | -------------------------------------------------------------------------------- /src/is-supported.ts: -------------------------------------------------------------------------------- 1 | import { extname } from 'path'; 2 | 3 | export const isSupported = (supportedFileTypes: string[]) => (filePath: string) => 4 | supportedFileTypes.indexOf(extname(filePath)) !== -1; 5 | -------------------------------------------------------------------------------- /src/log.ts: -------------------------------------------------------------------------------- 1 | import chalk from 'chalk'; 2 | import { types } from 'util'; 3 | import { Options } from '.'; 4 | import { clean } from './tmpdir'; 5 | 6 | let color = new chalk.Instance({ level: 3 }); 7 | 8 | export const complete = (value: string): void => console.log(color.green('✓ %s'), value); 9 | export const info = (value: string): void => console.log(color.blue('i %s'), value); 10 | export const warning = (value: string): void => console.log(color.yellow('! %s'), value); 11 | 12 | export const bug = (err: Error | unknown): void => { 13 | if (types.isNativeError(err)) { 14 | console.log( 15 | color.red('! %s\n\n! Please raise an issue at %s\n\n%s'), 16 | err.message, 17 | color.underline('https://github.com/JamieMason/ImageOptim-CLI/issues'), 18 | String(err.stack).replace(/^/gm, ' '), 19 | ); 20 | } else { 21 | console.log( 22 | color.red('! %s\n\n! Please raise an issue at %s'), 23 | err, 24 | color.underline('https://github.com/JamieMason/ImageOptim-CLI/issues'), 25 | ); 26 | } 27 | process.exit(1); 28 | }; 29 | 30 | export const panic = async (value: string, options: Options): Promise => { 31 | console.log(color.red('! %s'), value); 32 | await clean(options); 33 | process.exit(1); 34 | }; 35 | 36 | export const result = ( 37 | label = 'TOTAL', 38 | prettySizeBefore: string, 39 | prettySizeAfter: string, 40 | prettySizeSaving: string, 41 | sizeSavingPercent: number, 42 | ) => { 43 | console.log( 44 | '%s %s was: %s now: %s saving: %s (%s)', 45 | color.green('✓'), 46 | chalk.underline(label), 47 | color.red(prettySizeBefore), 48 | color.green(prettySizeAfter), 49 | color.green(prettySizeSaving), 50 | color.green(`${sizeSavingPercent.toFixed(2)}%`), 51 | ); 52 | }; 53 | 54 | export const verbose = 55 | process.env.NODE_ENV === 'development' 56 | ? (value: string): void => console.info(color.grey('? %s'), value) 57 | : (): void => undefined; 58 | 59 | export const enableColor = (enabled: boolean) => { 60 | color = new chalk.Instance({ level: enabled ? 3 : 0 }); 61 | }; 62 | -------------------------------------------------------------------------------- /src/osascript.ts: -------------------------------------------------------------------------------- 1 | import { exec } from './exec'; 2 | 3 | export const osascript = (filePath: string, ...args: string[]): Promise => 4 | exec('osascript', [filePath, ...args]).then(({ stdout }) => stdout); 5 | -------------------------------------------------------------------------------- /src/pngquant.ts: -------------------------------------------------------------------------------- 1 | import { isWalkable } from 'expect-more'; 2 | import { Options } from '.'; 3 | import { PNGQUANT_BIN_PATH } from './constants'; 4 | import { exec } from './exec'; 5 | 6 | export const pngquant = async (pngFilePaths: string[], options: Options): Promise => { 7 | try { 8 | await exec(PNGQUANT_BIN_PATH, [ 9 | '--ext=.png', 10 | '--force', 11 | '--skip-if-larger', 12 | `--speed=${options.speed}`, 13 | `--quality=${options.quality}`, 14 | options.numberOfColors, 15 | '--', 16 | ...pngFilePaths, 17 | ]); 18 | } catch (err) { 19 | if (isWalkable(err) && err.exitCode !== 99 && err.exitCode !== 98) { 20 | throw err; 21 | } 22 | } 23 | }; 24 | -------------------------------------------------------------------------------- /src/run-imagealpha.ts: -------------------------------------------------------------------------------- 1 | import { pathExists } from './fs'; 2 | import { AppRunner, Options } from '.'; 3 | import { IMAGEALPHA, IMAGEALPHA_URL, PNGQUANT_BIN_PATH } from './constants'; 4 | import { isSupported } from './is-supported'; 5 | import { info, panic, verbose } from './log'; 6 | import { pngquant } from './pngquant'; 7 | 8 | export const runImageAlpha: AppRunner = async (options: Options) => { 9 | info(`Running ${IMAGEALPHA.name}...`); 10 | const pngFilePaths = options.filePaths 11 | .map((file) => file.tmp) 12 | .filter(isSupported(IMAGEALPHA.supports)); 13 | if (!(await pathExists(PNGQUANT_BIN_PATH))) { 14 | return panic(`ImageAlpha.app is not installed (${IMAGEALPHA_URL})`, options); 15 | } 16 | await pngquant(pngFilePaths, options); 17 | verbose(`${IMAGEALPHA.name} has finished`); 18 | }; 19 | -------------------------------------------------------------------------------- /src/run-imageoptim.ts: -------------------------------------------------------------------------------- 1 | import { pathExists } from './fs'; 2 | import { AppRunner } from '.'; 3 | import { IMAGEOPTIM, IMAGEOPTIM_BIN_PATH, IMAGEOPTIM_URL } from './constants'; 4 | import { info, panic, verbose } from './log'; 5 | import { exec } from './exec'; 6 | 7 | export const runImageOptim: AppRunner = async (options) => { 8 | info(`Running ${IMAGEOPTIM.name}...`); 9 | if (!(await pathExists(IMAGEOPTIM_BIN_PATH))) { 10 | return panic(`ImageOptim.app is not installed (${IMAGEOPTIM_URL})`, options); 11 | } 12 | await exec(`${IMAGEOPTIM_BIN_PATH}`, [options.tmpDir]); 13 | verbose(`${IMAGEOPTIM.name} has finished`); 14 | }; 15 | -------------------------------------------------------------------------------- /src/run-jpegmini.ts: -------------------------------------------------------------------------------- 1 | import { AppRunner } from '.'; 2 | import { 3 | getJpegMini, 4 | quitApp, 5 | runJpegMini as startJpegMini, 6 | supportsAssistiveDevices, 7 | } from './applescript'; 8 | import { ASSISTIVE_DEVICES_URL, JPEG_MINI_URL } from './constants'; 9 | import { info, panic, verbose } from './log'; 10 | 11 | export const runJpegMini: AppRunner = async (options) => { 12 | verbose('Locating JPEGmini installation'); 13 | const jpegMini = getJpegMini(); 14 | 15 | verbose('Checking support for assistive devices'); 16 | const assistiveDeviceSupport = supportsAssistiveDevices(); 17 | 18 | const [app, canAutomate] = await Promise.all([jpegMini, assistiveDeviceSupport]); 19 | 20 | if (!app) { 21 | return panic(`JPEGmini is not installed (${JPEG_MINI_URL})`, options); 22 | } 23 | 24 | if (!canAutomate) { 25 | return panic(`Support for assistive devices needed, see ${ASSISTIVE_DEVICES_URL}`, options); 26 | } 27 | 28 | info(`Running ${app.name}...`); 29 | await startJpegMini(app); 30 | 31 | if (options.enabled.quit) { 32 | verbose(`Quitting ${app.name}`); 33 | await quitApp(app); 34 | } 35 | 36 | verbose(`${app.name} has finished`); 37 | }; 38 | -------------------------------------------------------------------------------- /src/tmpdir.ts: -------------------------------------------------------------------------------- 1 | import { File, Options } from '.'; 2 | import { copy, remove } from './fs'; 3 | import { verbose } from './log'; 4 | 5 | function sourceToTmp({ source, tmp }: File): Promise { 6 | return copy(source, tmp); 7 | } 8 | 9 | function tmpToSource({ source, tmp }: File): Promise { 10 | return copy(tmp, source); 11 | } 12 | 13 | export const clean = (options: { tmpDir: string }) => { 14 | return remove(options.tmpDir); 15 | }; 16 | 17 | export const setup = async (options: Options) => { 18 | await clean(options); 19 | verbose(`Copying ${options.filePaths.length} files to temp directory`); 20 | await Promise.all(options.filePaths.map(sourceToTmp)); 21 | }; 22 | 23 | export const tearDown = async (options: Options) => { 24 | verbose(`Copying ${options.filePaths.length} files back to original location`); 25 | await Promise.all(options.filePaths.map(tmpToSource)); 26 | await clean(options); 27 | }; 28 | -------------------------------------------------------------------------------- /src/types/pretty-bytes.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'pretty-bytes' { 2 | export = prettyBytes; 3 | function prettyBytes(size: number): string; 4 | } 5 | -------------------------------------------------------------------------------- /src/uuid.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * Cheaply generate a UUID with a low chance of collisions 3 | * https://stackoverflow.com/a/8809472/745158 4 | */ 5 | export function uuid(): string { 6 | let epoch: number = new Date().getTime(); 7 | let sessionLength: number = Date.now() * 1000 || 0; 8 | return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (character) => { 9 | let randomNumber: number = Math.random() * 16; 10 | if (epoch > 0) { 11 | randomNumber = (epoch + randomNumber) % 16 | 0; 12 | epoch = Math.floor(epoch / 16); 13 | } else { 14 | randomNumber = (sessionLength + randomNumber) % 16 | 0; 15 | sessionLength = Math.floor(sessionLength / 16); 16 | } 17 | return (character == 'x' ? randomNumber : (randomNumber & 0x7) | 0x8).toString(16); 18 | }); 19 | } 20 | -------------------------------------------------------------------------------- /src/write-report.ts: -------------------------------------------------------------------------------- 1 | import { Stats } from './get-stats'; 2 | import { result, warning } from './log'; 3 | 4 | export const writeReport = async (stats: Stats) => { 5 | const { total } = stats; 6 | const results = stats.files.concat(total); 7 | if (total.pretty.saving === '0B') { 8 | warning('No size savings'); 9 | } else { 10 | results.forEach(({ path, pretty, raw }) => { 11 | result(path, pretty.before, pretty.after, pretty.saving, raw.percentSaving); 12 | }); 13 | } 14 | }; 15 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "include": ["./package.json", "./src/**/*.ts"], 3 | "compilerOptions": { 4 | "declaration": false, 5 | "esModuleInterop": true, 6 | "forceConsistentCasingInFileNames": true, 7 | "lib": ["es2023"], 8 | "module": "Node16", 9 | "moduleResolution": "node16", 10 | "outDir": "./dist", 11 | "skipLibCheck": true, 12 | "strict": true, 13 | "target": "es2022" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@aashutoshrathi/word-wrap@^1.2.3": 6 | version "1.2.6" 7 | resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" 8 | integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== 9 | 10 | "@babel/code-frame@^7.0.0": 11 | version "7.22.5" 12 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.5.tgz#234d98e1551960604f1246e6475891a570ad5658" 13 | integrity sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ== 14 | dependencies: 15 | "@babel/highlight" "^7.22.5" 16 | 17 | "@babel/generator@7.18.2": 18 | version "7.18.2" 19 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.18.2.tgz#33873d6f89b21efe2da63fe554460f3df1c5880d" 20 | integrity sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw== 21 | dependencies: 22 | "@babel/types" "^7.18.2" 23 | "@jridgewell/gen-mapping" "^0.3.0" 24 | jsesc "^2.5.1" 25 | 26 | "@babel/helper-string-parser@^7.18.10", "@babel/helper-string-parser@^7.22.5": 27 | version "7.22.5" 28 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" 29 | integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== 30 | 31 | "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.22.5": 32 | version "7.22.5" 33 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193" 34 | integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ== 35 | 36 | "@babel/highlight@^7.22.5": 37 | version "7.22.5" 38 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.5.tgz#aa6c05c5407a67ebce408162b7ede789b4d22031" 39 | integrity sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw== 40 | dependencies: 41 | "@babel/helper-validator-identifier" "^7.22.5" 42 | chalk "^2.0.0" 43 | js-tokens "^4.0.0" 44 | 45 | "@babel/parser@7.18.4": 46 | version "7.18.4" 47 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.18.4.tgz#6774231779dd700e0af29f6ad8d479582d7ce5ef" 48 | integrity sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow== 49 | 50 | "@babel/types@7.19.0": 51 | version "7.19.0" 52 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.19.0.tgz#75f21d73d73dc0351f3368d28db73465f4814600" 53 | integrity sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA== 54 | dependencies: 55 | "@babel/helper-string-parser" "^7.18.10" 56 | "@babel/helper-validator-identifier" "^7.18.6" 57 | to-fast-properties "^2.0.0" 58 | 59 | "@babel/types@^7.18.2": 60 | version "7.22.5" 61 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.5.tgz#cd93eeaab025880a3a47ec881f4b096a5b786fbe" 62 | integrity sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA== 63 | dependencies: 64 | "@babel/helper-string-parser" "^7.22.5" 65 | "@babel/helper-validator-identifier" "^7.22.5" 66 | to-fast-properties "^2.0.0" 67 | 68 | "@effect/data@0.12.5": 69 | version "0.12.5" 70 | resolved "https://registry.yarnpkg.com/@effect/data/-/data-0.12.5.tgz#8e524e90c4fd48749433f7e0dc083a42b5364bd6" 71 | integrity sha512-gmHSsG4earpIWufwCNT1R1pZ5BIe7z0bMmexnAFOT9csc8bwTSzk1e5QAd/65/vyczf/cMMrXgjpasdxlJ5POA== 72 | 73 | "@effect/data@^0.12.6", "@effect/data@^0.12.7", "@effect/data@~0.12.2", "@effect/data@~0.12.6": 74 | version "0.12.10" 75 | resolved "https://registry.yarnpkg.com/@effect/data/-/data-0.12.10.tgz#6eb788d3a860db42f138561160189196380372db" 76 | integrity sha512-zIz/DgumH2LgGdr1Wc9ChET5JSG0k/G5kDc8rn4a6yIJ0v2d5rfnbRWIJO2fWmdFvc+128JyaBvYguIyz9JaAQ== 77 | 78 | "@effect/io@0.26.0": 79 | version "0.26.0" 80 | resolved "https://registry.yarnpkg.com/@effect/io/-/io-0.26.0.tgz#c09e7f4618cac47f1cc471bcda491ee8dad18cb6" 81 | integrity sha512-umwZ/sRoV7zb/8WwoiK7xWoypqvY6C1EXWEGORpViAFUTx3/bXc9i7JtdttTWVokXb3qogrxGX2SHopB20I4vQ== 82 | dependencies: 83 | "@effect/data" "~0.12.2" 84 | 85 | "@effect/io@^0.26.0": 86 | version "0.26.2" 87 | resolved "https://registry.yarnpkg.com/@effect/io/-/io-0.26.2.tgz#948aa442b748fa3ca02d5d1c932e7bb45e67ba82" 88 | integrity sha512-PdqtgmfEw88kX1UKZZvK42dpMZPSCPmdWAAzN17yCzfEsA3HoPjjxo9jLyzfjtUcU+tWO0tF/GY7pcDVLcJZAg== 89 | dependencies: 90 | "@effect/data" "~0.12.6" 91 | 92 | "@effect/match@0.24.4": 93 | version "0.24.4" 94 | resolved "https://registry.yarnpkg.com/@effect/match/-/match-0.24.4.tgz#1942b17ed4db58d4fe425ebee82593b9f1a1ae1b" 95 | integrity sha512-oo0uzazHhlDm4shxiMQep5osHsEZmBX6uhB9GM2RXseDahwsKrOp5Q3cMr/J4ZfhruH/0/o7GEhLLHxpwhEtuA== 96 | dependencies: 97 | "@effect/data" "^0.12.6" 98 | "@effect/schema" "^0.20.1" 99 | 100 | "@effect/schema@^0.20.1": 101 | version "0.20.3" 102 | resolved "https://registry.yarnpkg.com/@effect/schema/-/schema-0.20.3.tgz#55aee99526af93a16c447ab368079bead96aeb1a" 103 | integrity sha512-pjJW9QkHZd2/fq7Bhd6pAOidMJ0OUODOeUlesPDK0jpo62AaU9g+IGXt3v5NU8rXSX77igZgfK08XhmofwHn0A== 104 | dependencies: 105 | "@effect/data" "^0.12.7" 106 | "@effect/io" "^0.26.0" 107 | fast-check "^3.10.0" 108 | 109 | "@eslint-community/eslint-utils@^4.2.0": 110 | version "4.4.0" 111 | resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" 112 | integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== 113 | dependencies: 114 | eslint-visitor-keys "^3.3.0" 115 | 116 | "@eslint-community/regexpp@^4.4.0": 117 | version "4.5.1" 118 | resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.5.1.tgz#cdd35dce4fa1a89a4fd42b1599eb35b3af408884" 119 | integrity sha512-Z5ba73P98O1KUYCCJTUeVpja9RcGoMdncZ6T49FCUl2lN38JtCJ+3WgIDBv0AuY4WChU5PmtJmOCTlN6FZTFKQ== 120 | 121 | "@eslint/eslintrc@^2.1.0": 122 | version "2.1.0" 123 | resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.0.tgz#82256f164cc9e0b59669efc19d57f8092706841d" 124 | integrity sha512-Lj7DECXqIVCqnqjjHMPna4vn6GJcMgul/wuS0je9OZ9gsL0zzDpKPVtcG1HaDVc+9y+qgXneTeUMbCqXJNpH1A== 125 | dependencies: 126 | ajv "^6.12.4" 127 | debug "^4.3.2" 128 | espree "^9.6.0" 129 | globals "^13.19.0" 130 | ignore "^5.2.0" 131 | import-fresh "^3.2.1" 132 | js-yaml "^4.1.0" 133 | minimatch "^3.1.2" 134 | strip-json-comments "^3.1.1" 135 | 136 | "@eslint/js@8.44.0": 137 | version "8.44.0" 138 | resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.44.0.tgz#961a5903c74139390478bdc808bcde3fc45ab7af" 139 | integrity sha512-Ag+9YM4ocKQx9AarydN0KY2j0ErMHNIocPDrVo8zAE44xLTjEtz81OdR68/cydGtk6m6jDb5Za3r2useMzYmSw== 140 | 141 | "@humanwhocodes/config-array@^0.11.10": 142 | version "0.11.10" 143 | resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.10.tgz#5a3ffe32cc9306365fb3fd572596cd602d5e12d2" 144 | integrity sha512-KVVjQmNUepDVGXNuoRRdmmEjruj0KfiGSbS8LVc12LMsWDQzRXJ0qdhN8L8uUigKpfEHRhlaQFY0ib1tnUbNeQ== 145 | dependencies: 146 | "@humanwhocodes/object-schema" "^1.2.1" 147 | debug "^4.1.1" 148 | minimatch "^3.0.5" 149 | 150 | "@humanwhocodes/module-importer@^1.0.1": 151 | version "1.0.1" 152 | resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" 153 | integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== 154 | 155 | "@humanwhocodes/object-schema@^1.2.1": 156 | version "1.2.1" 157 | resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" 158 | integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== 159 | 160 | "@jridgewell/gen-mapping@^0.3.0": 161 | version "0.3.3" 162 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098" 163 | integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== 164 | dependencies: 165 | "@jridgewell/set-array" "^1.0.1" 166 | "@jridgewell/sourcemap-codec" "^1.4.10" 167 | "@jridgewell/trace-mapping" "^0.3.9" 168 | 169 | "@jridgewell/resolve-uri@3.1.0": 170 | version "3.1.0" 171 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz#2203b118c157721addfe69d47b70465463066d78" 172 | integrity sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w== 173 | 174 | "@jridgewell/set-array@^1.0.1": 175 | version "1.1.2" 176 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72" 177 | integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== 178 | 179 | "@jridgewell/sourcemap-codec@1.4.14": 180 | version "1.4.14" 181 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" 182 | integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== 183 | 184 | "@jridgewell/sourcemap-codec@^1.4.10": 185 | version "1.4.15" 186 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" 187 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== 188 | 189 | "@jridgewell/trace-mapping@^0.3.9": 190 | version "0.3.18" 191 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz#25783b2086daf6ff1dcb53c9249ae480e4dd4cd6" 192 | integrity sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA== 193 | dependencies: 194 | "@jridgewell/resolve-uri" "3.1.0" 195 | "@jridgewell/sourcemap-codec" "1.4.14" 196 | 197 | "@nodelib/fs.scandir@2.1.5": 198 | version "2.1.5" 199 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" 200 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== 201 | dependencies: 202 | "@nodelib/fs.stat" "2.0.5" 203 | run-parallel "^1.1.9" 204 | 205 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": 206 | version "2.0.5" 207 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" 208 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== 209 | 210 | "@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": 211 | version "1.2.8" 212 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" 213 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== 214 | dependencies: 215 | "@nodelib/fs.scandir" "2.1.5" 216 | fastq "^1.6.0" 217 | 218 | "@ts-morph/common@~0.16.0": 219 | version "0.16.0" 220 | resolved "https://registry.yarnpkg.com/@ts-morph/common/-/common-0.16.0.tgz#57e27d4b3fd65a4cd72cb36679ed08acb40fa3ba" 221 | integrity sha512-SgJpzkTgZKLKqQniCjLaE3c2L2sdL7UShvmTmPBejAKd2OKV/yfMpQ2IWpAuA+VY5wy7PkSUaEObIqEK6afFuw== 222 | dependencies: 223 | fast-glob "^3.2.11" 224 | minimatch "^5.1.0" 225 | mkdirp "^1.0.4" 226 | path-browserify "^1.0.1" 227 | 228 | "@types/json-schema@^7.0.9": 229 | version "7.0.9" 230 | resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d" 231 | integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ== 232 | 233 | "@types/node@18.16.19": 234 | version "18.16.19" 235 | resolved "https://registry.yarnpkg.com/@types/node/-/node-18.16.19.tgz#cb03fca8910fdeb7595b755126a8a78144714eea" 236 | integrity sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA== 237 | 238 | "@types/semver@^7.3.12": 239 | version "7.5.0" 240 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a" 241 | integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw== 242 | 243 | "@types/strip-bom@^3.0.0": 244 | version "3.0.0" 245 | resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" 246 | integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I= 247 | 248 | "@types/strip-json-comments@0.0.30": 249 | version "0.0.30" 250 | resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" 251 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== 252 | 253 | "@typescript-eslint/eslint-plugin@5.60.1": 254 | version "5.60.1" 255 | resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.60.1.tgz#81382d6ecb92b8dda70e91f9035611cb2fecd1c3" 256 | integrity sha512-KSWsVvsJsLJv3c4e73y/Bzt7OpqMCADUO846bHcuWYSYM19bldbAeDv7dYyV0jwkbMfJ2XdlzwjhXtuD7OY6bw== 257 | dependencies: 258 | "@eslint-community/regexpp" "^4.4.0" 259 | "@typescript-eslint/scope-manager" "5.60.1" 260 | "@typescript-eslint/type-utils" "5.60.1" 261 | "@typescript-eslint/utils" "5.60.1" 262 | debug "^4.3.4" 263 | grapheme-splitter "^1.0.4" 264 | ignore "^5.2.0" 265 | natural-compare-lite "^1.4.0" 266 | semver "^7.3.7" 267 | tsutils "^3.21.0" 268 | 269 | "@typescript-eslint/parser@5.60.1": 270 | version "5.60.1" 271 | resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.60.1.tgz#0f2f58209c0862a73e3d5a56099abfdfa21d0fd3" 272 | integrity sha512-pHWlc3alg2oSMGwsU/Is8hbm3XFbcrb6P5wIxcQW9NsYBfnrubl/GhVVD/Jm/t8HXhA2WncoIRfBtnCgRGV96Q== 273 | dependencies: 274 | "@typescript-eslint/scope-manager" "5.60.1" 275 | "@typescript-eslint/types" "5.60.1" 276 | "@typescript-eslint/typescript-estree" "5.60.1" 277 | debug "^4.3.4" 278 | 279 | "@typescript-eslint/scope-manager@5.60.1": 280 | version "5.60.1" 281 | resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.60.1.tgz#35abdb47f500c68c08f2f2b4f22c7c79472854bb" 282 | integrity sha512-Dn/LnN7fEoRD+KspEOV0xDMynEmR3iSHdgNsarlXNLGGtcUok8L4N71dxUgt3YvlO8si7E+BJ5Fe3wb5yUw7DQ== 283 | dependencies: 284 | "@typescript-eslint/types" "5.60.1" 285 | "@typescript-eslint/visitor-keys" "5.60.1" 286 | 287 | "@typescript-eslint/type-utils@5.60.1": 288 | version "5.60.1" 289 | resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.60.1.tgz#17770540e98d65ab4730c7aac618003f702893f4" 290 | integrity sha512-vN6UztYqIu05nu7JqwQGzQKUJctzs3/Hg7E2Yx8rz9J+4LgtIDFWjjl1gm3pycH0P3mHAcEUBd23LVgfrsTR8A== 291 | dependencies: 292 | "@typescript-eslint/typescript-estree" "5.60.1" 293 | "@typescript-eslint/utils" "5.60.1" 294 | debug "^4.3.4" 295 | tsutils "^3.21.0" 296 | 297 | "@typescript-eslint/types@5.60.1": 298 | version "5.60.1" 299 | resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.60.1.tgz#a17473910f6b8d388ea83c9d7051af89c4eb7561" 300 | integrity sha512-zDcDx5fccU8BA0IDZc71bAtYIcG9PowaOwaD8rjYbqwK7dpe/UMQl3inJ4UtUK42nOCT41jTSCwg76E62JpMcg== 301 | 302 | "@typescript-eslint/typescript-estree@5.60.1": 303 | version "5.60.1" 304 | resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.60.1.tgz#8c71824b7165b64d5ebd7aa42968899525959834" 305 | integrity sha512-hkX70J9+2M2ZT6fhti5Q2FoU9zb+GeZK2SLP1WZlvUDqdMbEKhexZODD1WodNRyO8eS+4nScvT0dts8IdaBzfw== 306 | dependencies: 307 | "@typescript-eslint/types" "5.60.1" 308 | "@typescript-eslint/visitor-keys" "5.60.1" 309 | debug "^4.3.4" 310 | globby "^11.1.0" 311 | is-glob "^4.0.3" 312 | semver "^7.3.7" 313 | tsutils "^3.21.0" 314 | 315 | "@typescript-eslint/utils@5.60.1": 316 | version "5.60.1" 317 | resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.60.1.tgz#6861ebedbefba1ac85482d2bdef6f2ff1eb65b80" 318 | integrity sha512-tiJ7FFdFQOWssFa3gqb94Ilexyw0JVxj6vBzaSpfN/8IhoKkDuSAenUKvsSHw2A/TMpJb26izIszTXaqygkvpQ== 319 | dependencies: 320 | "@eslint-community/eslint-utils" "^4.2.0" 321 | "@types/json-schema" "^7.0.9" 322 | "@types/semver" "^7.3.12" 323 | "@typescript-eslint/scope-manager" "5.60.1" 324 | "@typescript-eslint/types" "5.60.1" 325 | "@typescript-eslint/typescript-estree" "5.60.1" 326 | eslint-scope "^5.1.1" 327 | semver "^7.3.7" 328 | 329 | "@typescript-eslint/visitor-keys@5.60.1": 330 | version "5.60.1" 331 | resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.60.1.tgz#19a877358bf96318ec35d90bfe6bd1445cce9434" 332 | integrity sha512-xEYIxKcultP6E/RMKqube11pGjXH1DCo60mQoWhVYyKfLkwbIVVjYxmOenNMxILx0TjCujPTjjnTIVzm09TXIw== 333 | dependencies: 334 | "@typescript-eslint/types" "5.60.1" 335 | eslint-visitor-keys "^3.3.0" 336 | 337 | acorn-jsx@^5.3.2: 338 | version "5.3.2" 339 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" 340 | integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== 341 | 342 | acorn@^8.9.0: 343 | version "8.9.0" 344 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.9.0.tgz#78a16e3b2bcc198c10822786fa6679e245db5b59" 345 | integrity sha512-jaVNAFBHNLXspO543WnNNPZFRtavh3skAkITqD0/2aeMkKZTN+254PyhwxFYrk3vQ1xfY+2wbesJMs/JC8/PwQ== 346 | 347 | agent-base@6: 348 | version "6.0.2" 349 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" 350 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== 351 | dependencies: 352 | debug "4" 353 | 354 | ajv@^6.10.0, ajv@^6.12.4: 355 | version "6.12.6" 356 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" 357 | integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== 358 | dependencies: 359 | fast-deep-equal "^3.1.1" 360 | fast-json-stable-stringify "^2.0.0" 361 | json-schema-traverse "^0.4.1" 362 | uri-js "^4.2.2" 363 | 364 | ansi-colors@^4.1.1: 365 | version "4.1.3" 366 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" 367 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== 368 | 369 | ansi-regex@^5.0.1: 370 | version "5.0.1" 371 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 372 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 373 | 374 | ansi-styles@^3.2.1: 375 | version "3.2.1" 376 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 377 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 378 | dependencies: 379 | color-convert "^1.9.0" 380 | 381 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 382 | version "4.3.0" 383 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 384 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 385 | dependencies: 386 | color-convert "^2.0.1" 387 | 388 | argparse@^2.0.1: 389 | version "2.0.1" 390 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 391 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 392 | 393 | array-union@^2.1.0: 394 | version "2.1.0" 395 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" 396 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== 397 | 398 | at-least-node@^1.0.0: 399 | version "1.0.0" 400 | resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" 401 | integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== 402 | 403 | balanced-match@^1.0.0: 404 | version "1.0.0" 405 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 406 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 407 | 408 | base64-js@^1.3.1: 409 | version "1.5.1" 410 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" 411 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== 412 | 413 | bl@^4.0.3: 414 | version "4.1.0" 415 | resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" 416 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== 417 | dependencies: 418 | buffer "^5.5.0" 419 | inherits "^2.0.4" 420 | readable-stream "^3.4.0" 421 | 422 | brace-expansion@^1.1.7: 423 | version "1.1.11" 424 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 425 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 426 | dependencies: 427 | balanced-match "^1.0.0" 428 | concat-map "0.0.1" 429 | 430 | brace-expansion@^2.0.1: 431 | version "2.0.1" 432 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 433 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 434 | dependencies: 435 | balanced-match "^1.0.0" 436 | 437 | braces@^3.0.1: 438 | version "3.0.2" 439 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 440 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 441 | dependencies: 442 | fill-range "^7.0.1" 443 | 444 | buffer@^5.5.0: 445 | version "5.7.1" 446 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" 447 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== 448 | dependencies: 449 | base64-js "^1.3.1" 450 | ieee754 "^1.1.13" 451 | 452 | callsites@^3.0.0: 453 | version "3.1.0" 454 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 455 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 456 | 457 | chalk@4.1.2, chalk@^4.0.0, chalk@^4.1.2: 458 | version "4.1.2" 459 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 460 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 461 | dependencies: 462 | ansi-styles "^4.1.0" 463 | supports-color "^7.1.0" 464 | 465 | chalk@^2.0.0: 466 | version "2.4.2" 467 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 468 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 469 | dependencies: 470 | ansi-styles "^3.2.1" 471 | escape-string-regexp "^1.0.5" 472 | supports-color "^5.3.0" 473 | 474 | chownr@^1.1.1: 475 | version "1.1.4" 476 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" 477 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== 478 | 479 | cliui@^7.0.2: 480 | version "7.0.4" 481 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" 482 | integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== 483 | dependencies: 484 | string-width "^4.2.0" 485 | strip-ansi "^6.0.0" 486 | wrap-ansi "^7.0.0" 487 | 488 | code-block-writer@^11.0.0: 489 | version "11.0.3" 490 | resolved "https://registry.yarnpkg.com/code-block-writer/-/code-block-writer-11.0.3.tgz#9eec2993edfb79bfae845fbc093758c0a0b73b76" 491 | integrity sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw== 492 | 493 | color-convert@^1.9.0: 494 | version "1.9.3" 495 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 496 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 497 | dependencies: 498 | color-name "1.1.3" 499 | 500 | color-convert@^2.0.1: 501 | version "2.0.1" 502 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 503 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 504 | dependencies: 505 | color-name "~1.1.4" 506 | 507 | color-name@1.1.3: 508 | version "1.1.3" 509 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 510 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== 511 | 512 | color-name@~1.1.4: 513 | version "1.1.4" 514 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 515 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 516 | 517 | commander@11.0.0: 518 | version "11.0.0" 519 | resolved "https://registry.yarnpkg.com/commander/-/commander-11.0.0.tgz#43e19c25dbedc8256203538e8d7e9346877a6f67" 520 | integrity sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ== 521 | 522 | commander@^2.19.0: 523 | version "2.20.3" 524 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 525 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 526 | 527 | concat-map@0.0.1: 528 | version "0.0.1" 529 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 530 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 531 | 532 | core-util-is@~1.0.0: 533 | version "1.0.2" 534 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 535 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 536 | 537 | cosmiconfig@8.2.0: 538 | version "8.2.0" 539 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd" 540 | integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ== 541 | dependencies: 542 | import-fresh "^3.2.1" 543 | js-yaml "^4.1.0" 544 | parse-json "^5.0.0" 545 | path-type "^4.0.0" 546 | 547 | cross-spawn@^7.0.2: 548 | version "7.0.3" 549 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 550 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 551 | dependencies: 552 | path-key "^3.1.0" 553 | shebang-command "^2.0.0" 554 | which "^2.0.1" 555 | 556 | debug@4, debug@^4.3.4: 557 | version "4.3.4" 558 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 559 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 560 | dependencies: 561 | ms "2.1.2" 562 | 563 | debug@^4.1.1, debug@^4.3.2: 564 | version "4.3.2" 565 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" 566 | integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== 567 | dependencies: 568 | ms "2.1.2" 569 | 570 | decompress-response@^6.0.0: 571 | version "6.0.0" 572 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" 573 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== 574 | dependencies: 575 | mimic-response "^3.1.0" 576 | 577 | deep-extend@^0.6.0: 578 | version "0.6.0" 579 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 580 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 581 | 582 | deep-is@^0.1.3: 583 | version "0.1.4" 584 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" 585 | integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== 586 | 587 | detect-libc@^2.0.0: 588 | version "2.0.1" 589 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.1.tgz#e1897aa88fa6ad197862937fbc0441ef352ee0cd" 590 | integrity sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w== 591 | 592 | dir-glob@^3.0.1: 593 | version "3.0.1" 594 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" 595 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== 596 | dependencies: 597 | path-type "^4.0.0" 598 | 599 | doctrine@^3.0.0: 600 | version "3.0.0" 601 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" 602 | integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== 603 | dependencies: 604 | esutils "^2.0.2" 605 | 606 | editorconfig@^0.15.3: 607 | version "0.15.3" 608 | resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5" 609 | integrity sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g== 610 | dependencies: 611 | commander "^2.19.0" 612 | lru-cache "^4.1.5" 613 | semver "^5.6.0" 614 | sigmund "^1.0.1" 615 | 616 | emoji-regex@^8.0.0: 617 | version "8.0.0" 618 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 619 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 620 | 621 | end-of-stream@^1.1.0: 622 | version "1.4.1" 623 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" 624 | integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== 625 | dependencies: 626 | once "^1.4.0" 627 | 628 | end-of-stream@^1.4.1: 629 | version "1.4.4" 630 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 631 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 632 | dependencies: 633 | once "^1.4.0" 634 | 635 | enquirer@2.3.6: 636 | version "2.3.6" 637 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" 638 | integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== 639 | dependencies: 640 | ansi-colors "^4.1.1" 641 | 642 | error-ex@^1.3.1: 643 | version "1.3.2" 644 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 645 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 646 | dependencies: 647 | is-arrayish "^0.2.1" 648 | 649 | escalade@^3.1.1: 650 | version "3.1.1" 651 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" 652 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== 653 | 654 | escape-string-regexp@^1.0.5: 655 | version "1.0.5" 656 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 657 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== 658 | 659 | escape-string-regexp@^4.0.0: 660 | version "4.0.0" 661 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" 662 | integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== 663 | 664 | eslint-scope@^5.1.1: 665 | version "5.1.1" 666 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" 667 | integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== 668 | dependencies: 669 | esrecurse "^4.3.0" 670 | estraverse "^4.1.1" 671 | 672 | eslint-scope@^7.2.0: 673 | version "7.2.0" 674 | resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.0.tgz#f21ebdafda02352f103634b96dd47d9f81ca117b" 675 | integrity sha512-DYj5deGlHBfMt15J7rdtyKNq/Nqlv5KfU4iodrQ019XESsRnwXH9KAE0y3cwtUHDo2ob7CypAnCqefh6vioWRw== 676 | dependencies: 677 | esrecurse "^4.3.0" 678 | estraverse "^5.2.0" 679 | 680 | eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1: 681 | version "3.4.1" 682 | resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.1.tgz#c22c48f48942d08ca824cc526211ae400478a994" 683 | integrity sha512-pZnmmLwYzf+kWaM/Qgrvpen51upAktaaiI01nsJD/Yr3lMOdNtq0cxkrrg16w64VtisN6okbs7Q8AfGqj4c9fA== 684 | 685 | eslint@8.44.0: 686 | version "8.44.0" 687 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.44.0.tgz#51246e3889b259bbcd1d7d736a0c10add4f0e500" 688 | integrity sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A== 689 | dependencies: 690 | "@eslint-community/eslint-utils" "^4.2.0" 691 | "@eslint-community/regexpp" "^4.4.0" 692 | "@eslint/eslintrc" "^2.1.0" 693 | "@eslint/js" "8.44.0" 694 | "@humanwhocodes/config-array" "^0.11.10" 695 | "@humanwhocodes/module-importer" "^1.0.1" 696 | "@nodelib/fs.walk" "^1.2.8" 697 | ajv "^6.10.0" 698 | chalk "^4.0.0" 699 | cross-spawn "^7.0.2" 700 | debug "^4.3.2" 701 | doctrine "^3.0.0" 702 | escape-string-regexp "^4.0.0" 703 | eslint-scope "^7.2.0" 704 | eslint-visitor-keys "^3.4.1" 705 | espree "^9.6.0" 706 | esquery "^1.4.2" 707 | esutils "^2.0.2" 708 | fast-deep-equal "^3.1.3" 709 | file-entry-cache "^6.0.1" 710 | find-up "^5.0.0" 711 | glob-parent "^6.0.2" 712 | globals "^13.19.0" 713 | graphemer "^1.4.0" 714 | ignore "^5.2.0" 715 | import-fresh "^3.0.0" 716 | imurmurhash "^0.1.4" 717 | is-glob "^4.0.0" 718 | is-path-inside "^3.0.3" 719 | js-yaml "^4.1.0" 720 | json-stable-stringify-without-jsonify "^1.0.1" 721 | levn "^0.4.1" 722 | lodash.merge "^4.6.2" 723 | minimatch "^3.1.2" 724 | natural-compare "^1.4.0" 725 | optionator "^0.9.3" 726 | strip-ansi "^6.0.1" 727 | strip-json-comments "^3.1.0" 728 | text-table "^0.2.0" 729 | 730 | espree@^9.6.0: 731 | version "9.6.0" 732 | resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.0.tgz#80869754b1c6560f32e3b6929194a3fe07c5b82f" 733 | integrity sha512-1FH/IiruXZ84tpUlm0aCUEwMl2Ho5ilqVh0VvQXw+byAz/4SAciyHLlfmL5WYqsvD38oymdUwBss0LtK8m4s/A== 734 | dependencies: 735 | acorn "^8.9.0" 736 | acorn-jsx "^5.3.2" 737 | eslint-visitor-keys "^3.4.1" 738 | 739 | esquery@^1.4.2: 740 | version "1.5.0" 741 | resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" 742 | integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== 743 | dependencies: 744 | estraverse "^5.1.0" 745 | 746 | esrecurse@^4.3.0: 747 | version "4.3.0" 748 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" 749 | integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== 750 | dependencies: 751 | estraverse "^5.2.0" 752 | 753 | estraverse@^4.1.1: 754 | version "4.3.0" 755 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" 756 | integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== 757 | 758 | estraverse@^5.1.0, estraverse@^5.2.0: 759 | version "5.3.0" 760 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" 761 | integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== 762 | 763 | esutils@^2.0.2: 764 | version "2.0.3" 765 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" 766 | integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== 767 | 768 | expand-template@^2.0.3: 769 | version "2.0.3" 770 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" 771 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== 772 | 773 | expect-more@1.3.0: 774 | version "1.3.0" 775 | resolved "https://registry.yarnpkg.com/expect-more/-/expect-more-1.3.0.tgz#fcc6e7477e36d91194d550684bf733a88228aaff" 776 | integrity sha512-HnXT5nJb9V3DMnr5RgA1TiKbu5kRaJ0GD1JkuhZvnr1Qe3HJq+ESnrcl/jmVUZ8Ycnl3Sp0OTYUhmO36d2+zow== 777 | 778 | fast-check@^3.10.0: 779 | version "3.10.0" 780 | resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-3.10.0.tgz#dccdf925c123f65910754454118ff3d6461b1733" 781 | integrity sha512-I2FldZwnCbcY6iL+H0rp9m4D+O3PotuFu9FasWjMCzUedYHMP89/37JbSt6/n7Yq/IZmJDW0B2h30sPYdzrfzw== 782 | dependencies: 783 | pure-rand "^6.0.0" 784 | 785 | fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 786 | version "3.1.3" 787 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" 788 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== 789 | 790 | fast-glob@^3.2.11, fast-glob@^3.2.9: 791 | version "3.3.0" 792 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.0.tgz#7c40cb491e1e2ed5664749e87bfb516dbe8727c0" 793 | integrity sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA== 794 | dependencies: 795 | "@nodelib/fs.stat" "^2.0.2" 796 | "@nodelib/fs.walk" "^1.2.3" 797 | glob-parent "^5.1.2" 798 | merge2 "^1.3.0" 799 | micromatch "^4.0.4" 800 | 801 | fast-json-stable-stringify@^2.0.0: 802 | version "2.1.0" 803 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 804 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 805 | 806 | fast-levenshtein@^2.0.6: 807 | version "2.0.6" 808 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 809 | integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= 810 | 811 | fastq@^1.6.0: 812 | version "1.6.0" 813 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.6.0.tgz#4ec8a38f4ac25f21492673adb7eae9cfef47d1c2" 814 | integrity sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA== 815 | dependencies: 816 | reusify "^1.0.0" 817 | 818 | file-entry-cache@^6.0.1: 819 | version "6.0.1" 820 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" 821 | integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== 822 | dependencies: 823 | flat-cache "^3.0.4" 824 | 825 | fill-range@^7.0.1: 826 | version "7.0.1" 827 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 828 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 829 | dependencies: 830 | to-regex-range "^5.0.1" 831 | 832 | find-up@^5.0.0: 833 | version "5.0.0" 834 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 835 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 836 | dependencies: 837 | locate-path "^6.0.0" 838 | path-exists "^4.0.0" 839 | 840 | flat-cache@^3.0.4: 841 | version "3.0.4" 842 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.0.4.tgz#61b0338302b2fe9f957dcc32fc2a87f1c3048b11" 843 | integrity sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg== 844 | dependencies: 845 | flatted "^3.1.0" 846 | rimraf "^3.0.2" 847 | 848 | flatted@^3.1.0: 849 | version "3.2.4" 850 | resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" 851 | integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== 852 | 853 | from2@^2.3.0: 854 | version "2.3.0" 855 | resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" 856 | integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= 857 | dependencies: 858 | inherits "^2.0.1" 859 | readable-stream "^2.0.0" 860 | 861 | fs-constants@^1.0.0: 862 | version "1.0.0" 863 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" 864 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== 865 | 866 | fs-extra@11.1.1: 867 | version "11.1.1" 868 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d" 869 | integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ== 870 | dependencies: 871 | graceful-fs "^4.2.0" 872 | jsonfile "^6.0.1" 873 | universalify "^2.0.0" 874 | 875 | fs-extra@^9.1.0: 876 | version "9.1.0" 877 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" 878 | integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== 879 | dependencies: 880 | at-least-node "^1.0.0" 881 | graceful-fs "^4.2.0" 882 | jsonfile "^6.0.1" 883 | universalify "^2.0.0" 884 | 885 | fs.realpath@^1.0.0: 886 | version "1.0.0" 887 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 888 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= 889 | 890 | function-bind@^1.1.1: 891 | version "1.1.1" 892 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 893 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 894 | 895 | get-caller-file@^2.0.5: 896 | version "2.0.5" 897 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 898 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 899 | 900 | github-from-package@0.0.0: 901 | version "0.0.0" 902 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" 903 | integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw== 904 | 905 | glob-parent@^5.1.2: 906 | version "5.1.2" 907 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 908 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 909 | dependencies: 910 | is-glob "^4.0.1" 911 | 912 | glob-parent@^6.0.2: 913 | version "6.0.2" 914 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" 915 | integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== 916 | dependencies: 917 | is-glob "^4.0.3" 918 | 919 | glob@^7.1.3: 920 | version "7.1.4" 921 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" 922 | integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== 923 | dependencies: 924 | fs.realpath "^1.0.0" 925 | inflight "^1.0.4" 926 | inherits "2" 927 | minimatch "^3.0.4" 928 | once "^1.3.0" 929 | path-is-absolute "^1.0.0" 930 | 931 | globals@^13.19.0: 932 | version "13.20.0" 933 | resolved "https://registry.yarnpkg.com/globals/-/globals-13.20.0.tgz#ea276a1e508ffd4f1612888f9d1bad1e2717bf82" 934 | integrity sha512-Qg5QtVkCy/kv3FUSlu4ukeZDVf9ee0iXLAUYX13gbR17bnejFTzr4iS9bY7kwCf1NztRNm1t91fjOiyx4CSwPQ== 935 | dependencies: 936 | type-fest "^0.20.2" 937 | 938 | globby@11.1.0, globby@^11.1.0: 939 | version "11.1.0" 940 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" 941 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== 942 | dependencies: 943 | array-union "^2.1.0" 944 | dir-glob "^3.0.1" 945 | fast-glob "^3.2.9" 946 | ignore "^5.2.0" 947 | merge2 "^1.4.1" 948 | slash "^3.0.0" 949 | 950 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 951 | version "4.2.2" 952 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" 953 | integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== 954 | 955 | grapheme-splitter@^1.0.4: 956 | version "1.0.4" 957 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" 958 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== 959 | 960 | graphemer@^1.4.0: 961 | version "1.4.0" 962 | resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" 963 | integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== 964 | 965 | has-flag@^3.0.0: 966 | version "3.0.0" 967 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 968 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== 969 | 970 | has-flag@^4.0.0: 971 | version "4.0.0" 972 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 973 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 974 | 975 | has@^1.0.3: 976 | version "1.0.3" 977 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 978 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 979 | dependencies: 980 | function-bind "^1.1.1" 981 | 982 | https-proxy-agent@^5.0.0: 983 | version "5.0.1" 984 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" 985 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== 986 | dependencies: 987 | agent-base "6" 988 | debug "4" 989 | 990 | ieee754@^1.1.13: 991 | version "1.2.1" 992 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" 993 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== 994 | 995 | ignore@^5.2.0: 996 | version "5.2.4" 997 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" 998 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== 999 | 1000 | import-fresh@^3.0.0, import-fresh@^3.2.1: 1001 | version "3.3.0" 1002 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" 1003 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== 1004 | dependencies: 1005 | parent-module "^1.0.0" 1006 | resolve-from "^4.0.0" 1007 | 1008 | imurmurhash@^0.1.4: 1009 | version "0.1.4" 1010 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1011 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 1012 | 1013 | inflight@^1.0.4: 1014 | version "1.0.6" 1015 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1016 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= 1017 | dependencies: 1018 | once "^1.3.0" 1019 | wrappy "1" 1020 | 1021 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: 1022 | version "2.0.4" 1023 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1024 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1025 | 1026 | ini@~1.3.0: 1027 | version "1.3.8" 1028 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 1029 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 1030 | 1031 | into-stream@^6.0.0: 1032 | version "6.0.0" 1033 | resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-6.0.0.tgz#4bfc1244c0128224e18b8870e85b2de8e66c6702" 1034 | integrity sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA== 1035 | dependencies: 1036 | from2 "^2.3.0" 1037 | p-is-promise "^3.0.0" 1038 | 1039 | is-arrayish@^0.2.1: 1040 | version "0.2.1" 1041 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1042 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1043 | 1044 | is-core-module@2.9.0: 1045 | version "2.9.0" 1046 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" 1047 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== 1048 | dependencies: 1049 | has "^1.0.3" 1050 | 1051 | is-core-module@^2.11.0: 1052 | version "2.12.1" 1053 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.12.1.tgz#0c0b6885b6f80011c71541ce15c8d66cf5a4f9fd" 1054 | integrity sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg== 1055 | dependencies: 1056 | has "^1.0.3" 1057 | 1058 | is-extglob@^2.1.1: 1059 | version "2.1.1" 1060 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 1061 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 1062 | 1063 | is-fullwidth-code-point@^3.0.0: 1064 | version "3.0.0" 1065 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1066 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1067 | 1068 | is-glob@^4.0.0, is-glob@^4.0.3: 1069 | version "4.0.3" 1070 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 1071 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 1072 | dependencies: 1073 | is-extglob "^2.1.1" 1074 | 1075 | is-glob@^4.0.1: 1076 | version "4.0.1" 1077 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 1078 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 1079 | dependencies: 1080 | is-extglob "^2.1.1" 1081 | 1082 | is-number@^7.0.0: 1083 | version "7.0.0" 1084 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1085 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1086 | 1087 | is-path-inside@^3.0.3: 1088 | version "3.0.3" 1089 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" 1090 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== 1091 | 1092 | isarray@~1.0.0: 1093 | version "1.0.0" 1094 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1095 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 1096 | 1097 | isexe@^2.0.0: 1098 | version "2.0.0" 1099 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1100 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 1101 | 1102 | js-tokens@^4.0.0: 1103 | version "4.0.0" 1104 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1105 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 1106 | 1107 | js-yaml@^4.0.0, js-yaml@^4.1.0: 1108 | version "4.1.0" 1109 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 1110 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 1111 | dependencies: 1112 | argparse "^2.0.1" 1113 | 1114 | jsesc@^2.5.1: 1115 | version "2.5.2" 1116 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" 1117 | integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== 1118 | 1119 | json-parse-even-better-errors@^2.3.0: 1120 | version "2.3.1" 1121 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 1122 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 1123 | 1124 | json-schema-traverse@^0.4.1: 1125 | version "0.4.1" 1126 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" 1127 | integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== 1128 | 1129 | json-stable-stringify-without-jsonify@^1.0.1: 1130 | version "1.0.1" 1131 | resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" 1132 | integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= 1133 | 1134 | jsonfile@^6.0.1: 1135 | version "6.1.0" 1136 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 1137 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 1138 | dependencies: 1139 | universalify "^2.0.0" 1140 | optionalDependencies: 1141 | graceful-fs "^4.1.6" 1142 | 1143 | levn@^0.4.1: 1144 | version "0.4.1" 1145 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" 1146 | integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== 1147 | dependencies: 1148 | prelude-ls "^1.2.1" 1149 | type-check "~0.4.0" 1150 | 1151 | lines-and-columns@^1.1.6: 1152 | version "1.2.4" 1153 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 1154 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 1155 | 1156 | locate-path@^6.0.0: 1157 | version "6.0.0" 1158 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 1159 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 1160 | dependencies: 1161 | p-locate "^5.0.0" 1162 | 1163 | lodash.merge@^4.6.2: 1164 | version "4.6.2" 1165 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" 1166 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== 1167 | 1168 | lru-cache@^4.1.5: 1169 | version "4.1.5" 1170 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" 1171 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== 1172 | dependencies: 1173 | pseudomap "^1.0.2" 1174 | yallist "^2.1.2" 1175 | 1176 | lru-cache@^6.0.0: 1177 | version "6.0.0" 1178 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 1179 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 1180 | dependencies: 1181 | yallist "^4.0.0" 1182 | 1183 | merge2@^1.3.0, merge2@^1.4.1: 1184 | version "1.4.1" 1185 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" 1186 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== 1187 | 1188 | micromatch@^4.0.4: 1189 | version "4.0.4" 1190 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" 1191 | integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== 1192 | dependencies: 1193 | braces "^3.0.1" 1194 | picomatch "^2.2.3" 1195 | 1196 | mimic-response@^3.1.0: 1197 | version "3.1.0" 1198 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" 1199 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== 1200 | 1201 | minimatch@9.0.1: 1202 | version "9.0.1" 1203 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.1.tgz#8a555f541cf976c622daf078bb28f29fb927c253" 1204 | integrity sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w== 1205 | dependencies: 1206 | brace-expansion "^2.0.1" 1207 | 1208 | minimatch@^3.0.4: 1209 | version "3.0.4" 1210 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1211 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 1212 | dependencies: 1213 | brace-expansion "^1.1.7" 1214 | 1215 | minimatch@^3.0.5, minimatch@^3.1.2: 1216 | version "3.1.2" 1217 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 1218 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 1219 | dependencies: 1220 | brace-expansion "^1.1.7" 1221 | 1222 | minimatch@^5.1.0: 1223 | version "5.1.6" 1224 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" 1225 | integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== 1226 | dependencies: 1227 | brace-expansion "^2.0.1" 1228 | 1229 | minimist@^1.2.0: 1230 | version "1.2.0" 1231 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1232 | integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= 1233 | 1234 | minimist@^1.2.3, minimist@^1.2.6: 1235 | version "1.2.8" 1236 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" 1237 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== 1238 | 1239 | mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: 1240 | version "0.5.3" 1241 | resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113" 1242 | integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== 1243 | 1244 | mkdirp@^1.0.4: 1245 | version "1.0.4" 1246 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" 1247 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== 1248 | 1249 | ms@2.1.2: 1250 | version "2.1.2" 1251 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 1252 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 1253 | 1254 | multistream@^4.1.0: 1255 | version "4.1.0" 1256 | resolved "https://registry.yarnpkg.com/multistream/-/multistream-4.1.0.tgz#7bf00dfd119556fbc153cff3de4c6d477909f5a8" 1257 | integrity sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw== 1258 | dependencies: 1259 | once "^1.4.0" 1260 | readable-stream "^3.6.0" 1261 | 1262 | napi-build-utils@^1.0.1: 1263 | version "1.0.2" 1264 | resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" 1265 | integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== 1266 | 1267 | natural-compare-lite@^1.4.0: 1268 | version "1.4.0" 1269 | resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" 1270 | integrity sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g== 1271 | 1272 | natural-compare@^1.4.0: 1273 | version "1.4.0" 1274 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 1275 | integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= 1276 | 1277 | node-abi@^3.3.0: 1278 | version "3.45.0" 1279 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.45.0.tgz#f568f163a3bfca5aacfce1fbeee1fa2cc98441f5" 1280 | integrity sha512-iwXuFrMAcFVi/ZoZiqq8BzAdsLw9kxDfTC0HMyjXfSL/6CSDAGD5UmR7azrAgWV1zKYq7dUUMj4owusBWKLsiQ== 1281 | dependencies: 1282 | semver "^7.3.5" 1283 | 1284 | node-fetch@^2.6.6: 1285 | version "2.6.12" 1286 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba" 1287 | integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g== 1288 | dependencies: 1289 | whatwg-url "^5.0.0" 1290 | 1291 | once@^1.3.0, once@^1.3.1, once@^1.4.0: 1292 | version "1.4.0" 1293 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1294 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 1295 | dependencies: 1296 | wrappy "1" 1297 | 1298 | optionator@^0.9.3: 1299 | version "0.9.3" 1300 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.3.tgz#007397d44ed1872fdc6ed31360190f81814e2c64" 1301 | integrity sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg== 1302 | dependencies: 1303 | "@aashutoshrathi/word-wrap" "^1.2.3" 1304 | deep-is "^0.1.3" 1305 | fast-levenshtein "^2.0.6" 1306 | levn "^0.4.1" 1307 | prelude-ls "^1.2.1" 1308 | type-check "^0.4.0" 1309 | 1310 | organize-imports-cli@0.10.0: 1311 | version "0.10.0" 1312 | resolved "https://registry.yarnpkg.com/organize-imports-cli/-/organize-imports-cli-0.10.0.tgz#15ec6216b5dcfac75603808288583cce654b4b1d" 1313 | integrity sha512-cVyNEeiDxX/zA6gdK1QS2rr3TK1VymIkT0LagnAk4f6eE0IC0bo3BeUkMzm3q3GnCJzYC+6lfuMpBE0Cequ7Vg== 1314 | dependencies: 1315 | chalk "^4.0.0" 1316 | editorconfig "^0.15.3" 1317 | ts-morph "^15.0.0" 1318 | tsconfig "^7.0.0" 1319 | 1320 | p-is-promise@^3.0.0: 1321 | version "3.0.0" 1322 | resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-3.0.0.tgz#58e78c7dfe2e163cf2a04ff869e7c1dba64a5971" 1323 | integrity sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ== 1324 | 1325 | p-limit@^3.0.2: 1326 | version "3.1.0" 1327 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 1328 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 1329 | dependencies: 1330 | yocto-queue "^0.1.0" 1331 | 1332 | p-locate@^5.0.0: 1333 | version "5.0.0" 1334 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 1335 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 1336 | dependencies: 1337 | p-limit "^3.0.2" 1338 | 1339 | parent-module@^1.0.0: 1340 | version "1.0.1" 1341 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" 1342 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== 1343 | dependencies: 1344 | callsites "^3.0.0" 1345 | 1346 | parse-json@^5.0.0: 1347 | version "5.2.0" 1348 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 1349 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 1350 | dependencies: 1351 | "@babel/code-frame" "^7.0.0" 1352 | error-ex "^1.3.1" 1353 | json-parse-even-better-errors "^2.3.0" 1354 | lines-and-columns "^1.1.6" 1355 | 1356 | path-browserify@^1.0.1: 1357 | version "1.0.1" 1358 | resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-1.0.1.tgz#d98454a9c3753d5790860f16f68867b9e46be1fd" 1359 | integrity sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g== 1360 | 1361 | path-exists@^4.0.0: 1362 | version "4.0.0" 1363 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 1364 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 1365 | 1366 | path-is-absolute@^1.0.0: 1367 | version "1.0.1" 1368 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1369 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= 1370 | 1371 | path-key@^3.1.0: 1372 | version "3.1.1" 1373 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 1374 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 1375 | 1376 | path-parse@^1.0.7: 1377 | version "1.0.7" 1378 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 1379 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 1380 | 1381 | path-type@^4.0.0: 1382 | version "4.0.0" 1383 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" 1384 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== 1385 | 1386 | picomatch@^2.2.3: 1387 | version "2.3.0" 1388 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" 1389 | integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== 1390 | 1391 | pkg-fetch@3.4.2: 1392 | version "3.4.2" 1393 | resolved "https://registry.yarnpkg.com/pkg-fetch/-/pkg-fetch-3.4.2.tgz#6f68ebc54842b73f8c0808959a9df3739dcb28b7" 1394 | integrity sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA== 1395 | dependencies: 1396 | chalk "^4.1.2" 1397 | fs-extra "^9.1.0" 1398 | https-proxy-agent "^5.0.0" 1399 | node-fetch "^2.6.6" 1400 | progress "^2.0.3" 1401 | semver "^7.3.5" 1402 | tar-fs "^2.1.1" 1403 | yargs "^16.2.0" 1404 | 1405 | pkg@5.8.1: 1406 | version "5.8.1" 1407 | resolved "https://registry.yarnpkg.com/pkg/-/pkg-5.8.1.tgz#862020f3c0575638ef7d1146f951a54d65ddc984" 1408 | integrity sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA== 1409 | dependencies: 1410 | "@babel/generator" "7.18.2" 1411 | "@babel/parser" "7.18.4" 1412 | "@babel/types" "7.19.0" 1413 | chalk "^4.1.2" 1414 | fs-extra "^9.1.0" 1415 | globby "^11.1.0" 1416 | into-stream "^6.0.0" 1417 | is-core-module "2.9.0" 1418 | minimist "^1.2.6" 1419 | multistream "^4.1.0" 1420 | pkg-fetch "3.4.2" 1421 | prebuild-install "7.1.1" 1422 | resolve "^1.22.0" 1423 | stream-meter "^1.0.4" 1424 | 1425 | prebuild-install@7.1.1: 1426 | version "7.1.1" 1427 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.1.tgz#de97d5b34a70a0c81334fd24641f2a1702352e45" 1428 | integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== 1429 | dependencies: 1430 | detect-libc "^2.0.0" 1431 | expand-template "^2.0.3" 1432 | github-from-package "0.0.0" 1433 | minimist "^1.2.3" 1434 | mkdirp-classic "^0.5.3" 1435 | napi-build-utils "^1.0.1" 1436 | node-abi "^3.3.0" 1437 | pump "^3.0.0" 1438 | rc "^1.2.7" 1439 | simple-get "^4.0.0" 1440 | tar-fs "^2.0.0" 1441 | tunnel-agent "^0.6.0" 1442 | 1443 | prelude-ls@^1.2.1: 1444 | version "1.2.1" 1445 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" 1446 | integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== 1447 | 1448 | prettier@2.8.8: 1449 | version "2.8.8" 1450 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" 1451 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== 1452 | 1453 | pretty-bytes@5.6.0: 1454 | version "5.6.0" 1455 | resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" 1456 | integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== 1457 | 1458 | process-nextick-args@~2.0.0: 1459 | version "2.0.1" 1460 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 1461 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 1462 | 1463 | progress@^2.0.3: 1464 | version "2.0.3" 1465 | resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" 1466 | integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== 1467 | 1468 | pseudomap@^1.0.2: 1469 | version "1.0.2" 1470 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1471 | integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= 1472 | 1473 | pump@^3.0.0: 1474 | version "3.0.0" 1475 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 1476 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 1477 | dependencies: 1478 | end-of-stream "^1.1.0" 1479 | once "^1.3.1" 1480 | 1481 | punycode@^2.1.0: 1482 | version "2.1.1" 1483 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 1484 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 1485 | 1486 | pure-rand@^6.0.0: 1487 | version "6.0.2" 1488 | resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.0.2.tgz#a9c2ddcae9b68d736a8163036f088a2781c8b306" 1489 | integrity sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ== 1490 | 1491 | rc@^1.2.7: 1492 | version "1.2.8" 1493 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1494 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1495 | dependencies: 1496 | deep-extend "^0.6.0" 1497 | ini "~1.3.0" 1498 | minimist "^1.2.0" 1499 | strip-json-comments "~2.0.1" 1500 | 1501 | read-yaml-file@2.1.0: 1502 | version "2.1.0" 1503 | resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-2.1.0.tgz#c5866712db9ef5343b4d02c2413bada53c41c4a9" 1504 | integrity sha512-UkRNRIwnhG+y7hpqnycCL/xbTk7+ia9VuVTC0S+zVbwd65DI9eUpRMfsWIGrCWxTU/mi+JW8cHQCrv+zfCbEPQ== 1505 | dependencies: 1506 | js-yaml "^4.0.0" 1507 | strip-bom "^4.0.0" 1508 | 1509 | readable-stream@^2.0.0: 1510 | version "2.3.6" 1511 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1512 | integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== 1513 | dependencies: 1514 | core-util-is "~1.0.0" 1515 | inherits "~2.0.3" 1516 | isarray "~1.0.0" 1517 | process-nextick-args "~2.0.0" 1518 | safe-buffer "~5.1.1" 1519 | string_decoder "~1.1.1" 1520 | util-deprecate "~1.0.1" 1521 | 1522 | readable-stream@^2.1.4: 1523 | version "2.3.8" 1524 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" 1525 | integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== 1526 | dependencies: 1527 | core-util-is "~1.0.0" 1528 | inherits "~2.0.3" 1529 | isarray "~1.0.0" 1530 | process-nextick-args "~2.0.0" 1531 | safe-buffer "~5.1.1" 1532 | string_decoder "~1.1.1" 1533 | util-deprecate "~1.0.1" 1534 | 1535 | readable-stream@^3.1.1, readable-stream@^3.4.0, readable-stream@^3.6.0: 1536 | version "3.6.2" 1537 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" 1538 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== 1539 | dependencies: 1540 | inherits "^2.0.3" 1541 | string_decoder "^1.1.1" 1542 | util-deprecate "^1.0.1" 1543 | 1544 | require-directory@^2.1.1: 1545 | version "2.1.1" 1546 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 1547 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 1548 | 1549 | resolve-from@^4.0.0: 1550 | version "4.0.0" 1551 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" 1552 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== 1553 | 1554 | resolve@^1.22.0: 1555 | version "1.22.2" 1556 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.2.tgz#0ed0943d4e301867955766c9f3e1ae6d01c6845f" 1557 | integrity sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g== 1558 | dependencies: 1559 | is-core-module "^2.11.0" 1560 | path-parse "^1.0.7" 1561 | supports-preserve-symlinks-flag "^1.0.0" 1562 | 1563 | reusify@^1.0.0: 1564 | version "1.0.4" 1565 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" 1566 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== 1567 | 1568 | rimraf@^3.0.2: 1569 | version "3.0.2" 1570 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" 1571 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== 1572 | dependencies: 1573 | glob "^7.1.3" 1574 | 1575 | run-parallel@^1.1.9: 1576 | version "1.1.9" 1577 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" 1578 | integrity sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q== 1579 | 1580 | safe-buffer@^5.0.1: 1581 | version "5.2.0" 1582 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" 1583 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== 1584 | 1585 | safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1586 | version "5.1.2" 1587 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1588 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1589 | 1590 | safe-buffer@~5.2.0: 1591 | version "5.2.1" 1592 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1593 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1594 | 1595 | semver@7.5.2: 1596 | version "7.5.2" 1597 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.2.tgz#5b851e66d1be07c1cdaf37dfc856f543325a2beb" 1598 | integrity sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ== 1599 | dependencies: 1600 | lru-cache "^6.0.0" 1601 | 1602 | semver@^5.6.0: 1603 | version "5.7.1" 1604 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1605 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1606 | 1607 | semver@^7.3.5: 1608 | version "7.3.5" 1609 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" 1610 | integrity sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ== 1611 | dependencies: 1612 | lru-cache "^6.0.0" 1613 | 1614 | semver@^7.3.7: 1615 | version "7.5.3" 1616 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.3.tgz#161ce8c2c6b4b3bdca6caadc9fa3317a4c4fe88e" 1617 | integrity sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ== 1618 | dependencies: 1619 | lru-cache "^6.0.0" 1620 | 1621 | shebang-command@^2.0.0: 1622 | version "2.0.0" 1623 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 1624 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 1625 | dependencies: 1626 | shebang-regex "^3.0.0" 1627 | 1628 | shebang-regex@^3.0.0: 1629 | version "3.0.0" 1630 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 1631 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 1632 | 1633 | sigmund@^1.0.1: 1634 | version "1.0.1" 1635 | resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" 1636 | integrity sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA= 1637 | 1638 | simple-concat@^1.0.0: 1639 | version "1.0.1" 1640 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f" 1641 | integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== 1642 | 1643 | simple-get@^4.0.0: 1644 | version "4.0.1" 1645 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543" 1646 | integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== 1647 | dependencies: 1648 | decompress-response "^6.0.0" 1649 | once "^1.3.1" 1650 | simple-concat "^1.0.0" 1651 | 1652 | slash@^3.0.0: 1653 | version "3.0.0" 1654 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 1655 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 1656 | 1657 | stream-meter@^1.0.4: 1658 | version "1.0.4" 1659 | resolved "https://registry.yarnpkg.com/stream-meter/-/stream-meter-1.0.4.tgz#52af95aa5ea760a2491716704dbff90f73afdd1d" 1660 | integrity sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ== 1661 | dependencies: 1662 | readable-stream "^2.1.4" 1663 | 1664 | string-width@^4.1.0, string-width@^4.2.0: 1665 | version "4.2.3" 1666 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 1667 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 1668 | dependencies: 1669 | emoji-regex "^8.0.0" 1670 | is-fullwidth-code-point "^3.0.0" 1671 | strip-ansi "^6.0.1" 1672 | 1673 | string_decoder@^1.1.1: 1674 | version "1.3.0" 1675 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" 1676 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== 1677 | dependencies: 1678 | safe-buffer "~5.2.0" 1679 | 1680 | string_decoder@~1.1.1: 1681 | version "1.1.1" 1682 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1683 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1684 | dependencies: 1685 | safe-buffer "~5.1.0" 1686 | 1687 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 1688 | version "6.0.1" 1689 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 1690 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 1691 | dependencies: 1692 | ansi-regex "^5.0.1" 1693 | 1694 | strip-bom@^3.0.0: 1695 | version "3.0.0" 1696 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" 1697 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= 1698 | 1699 | strip-bom@^4.0.0: 1700 | version "4.0.0" 1701 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 1702 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 1703 | 1704 | strip-json-comments@^2.0.0, strip-json-comments@~2.0.1: 1705 | version "2.0.1" 1706 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1707 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1708 | 1709 | strip-json-comments@^3.1.0, strip-json-comments@^3.1.1: 1710 | version "3.1.1" 1711 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 1712 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 1713 | 1714 | supports-color@^5.3.0: 1715 | version "5.5.0" 1716 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1717 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1718 | dependencies: 1719 | has-flag "^3.0.0" 1720 | 1721 | supports-color@^7.1.0: 1722 | version "7.2.0" 1723 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1724 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1725 | dependencies: 1726 | has-flag "^4.0.0" 1727 | 1728 | supports-preserve-symlinks-flag@^1.0.0: 1729 | version "1.0.0" 1730 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 1731 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 1732 | 1733 | syncpack@10.6.1: 1734 | version "10.6.1" 1735 | resolved "https://registry.yarnpkg.com/syncpack/-/syncpack-10.6.1.tgz#b14ebea8673d736909533b24bf5525d375f4a05d" 1736 | integrity sha512-mnBo6PYffon2TKxzJmOy3V7srv1GRX9wdmi+FHiqkOw0r2mQMgu1nmM/covETqZzB2px//cSaYpcPW+rniT/0Q== 1737 | dependencies: 1738 | "@effect/data" "0.12.5" 1739 | "@effect/io" "0.26.0" 1740 | "@effect/match" "0.24.4" 1741 | chalk "4.1.2" 1742 | commander "11.0.0" 1743 | cosmiconfig "8.2.0" 1744 | enquirer "2.3.6" 1745 | fs-extra "11.1.1" 1746 | globby "11.1.0" 1747 | minimatch "9.0.1" 1748 | read-yaml-file "2.1.0" 1749 | semver "7.5.2" 1750 | tightrope "0.1.0" 1751 | ts-toolbelt "9.6.0" 1752 | 1753 | tar-fs@^2.0.0, tar-fs@^2.1.1: 1754 | version "2.1.1" 1755 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" 1756 | integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== 1757 | dependencies: 1758 | chownr "^1.1.1" 1759 | mkdirp-classic "^0.5.2" 1760 | pump "^3.0.0" 1761 | tar-stream "^2.1.4" 1762 | 1763 | tar-stream@^2.1.4: 1764 | version "2.2.0" 1765 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" 1766 | integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== 1767 | dependencies: 1768 | bl "^4.0.3" 1769 | end-of-stream "^1.4.1" 1770 | fs-constants "^1.0.0" 1771 | inherits "^2.0.3" 1772 | readable-stream "^3.1.1" 1773 | 1774 | text-table@^0.2.0: 1775 | version "0.2.0" 1776 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1777 | integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= 1778 | 1779 | tightrope@0.1.0: 1780 | version "0.1.0" 1781 | resolved "https://registry.yarnpkg.com/tightrope/-/tightrope-0.1.0.tgz#f734fba76bd3472cc88884e4bd4bf109e5f0b051" 1782 | integrity sha512-HHHNYdCAIYwl1jOslQBT455zQpdeSo8/A346xpIb/uuqhSg+tCvYNsP5f11QW+z9VZ3vSX8YIfzTApjjuGH63w== 1783 | 1784 | to-fast-properties@^2.0.0: 1785 | version "2.0.0" 1786 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" 1787 | integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== 1788 | 1789 | to-regex-range@^5.0.1: 1790 | version "5.0.1" 1791 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1792 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1793 | dependencies: 1794 | is-number "^7.0.0" 1795 | 1796 | tr46@~0.0.3: 1797 | version "0.0.3" 1798 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 1799 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 1800 | 1801 | ts-morph@^15.0.0: 1802 | version "15.1.0" 1803 | resolved "https://registry.yarnpkg.com/ts-morph/-/ts-morph-15.1.0.tgz#53deea5296d967ff6eba8f15f99d378aa7074a4e" 1804 | integrity sha512-RBsGE2sDzUXFTnv8Ba22QfeuKbgvAGJFuTN7HfmIRUkgT/NaVLfDM/8OFm2NlFkGlWEXdpW5OaFIp1jvqdDuOg== 1805 | dependencies: 1806 | "@ts-morph/common" "~0.16.0" 1807 | code-block-writer "^11.0.0" 1808 | 1809 | ts-toolbelt@9.6.0: 1810 | version "9.6.0" 1811 | resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" 1812 | integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== 1813 | 1814 | tsconfig@^7.0.0: 1815 | version "7.0.0" 1816 | resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" 1817 | integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== 1818 | dependencies: 1819 | "@types/strip-bom" "^3.0.0" 1820 | "@types/strip-json-comments" "0.0.30" 1821 | strip-bom "^3.0.0" 1822 | strip-json-comments "^2.0.0" 1823 | 1824 | tslib@^1.8.1: 1825 | version "1.10.0" 1826 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" 1827 | integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== 1828 | 1829 | tsutils@^3.21.0: 1830 | version "3.21.0" 1831 | resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" 1832 | integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== 1833 | dependencies: 1834 | tslib "^1.8.1" 1835 | 1836 | tunnel-agent@^0.6.0: 1837 | version "0.6.0" 1838 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 1839 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= 1840 | dependencies: 1841 | safe-buffer "^5.0.1" 1842 | 1843 | type-check@^0.4.0, type-check@~0.4.0: 1844 | version "0.4.0" 1845 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" 1846 | integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== 1847 | dependencies: 1848 | prelude-ls "^1.2.1" 1849 | 1850 | type-fest@^0.20.2: 1851 | version "0.20.2" 1852 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" 1853 | integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== 1854 | 1855 | typescript@5.1.6: 1856 | version "5.1.6" 1857 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274" 1858 | integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA== 1859 | 1860 | universalify@^2.0.0: 1861 | version "2.0.0" 1862 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 1863 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 1864 | 1865 | uri-js@^4.2.2: 1866 | version "4.4.1" 1867 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" 1868 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== 1869 | dependencies: 1870 | punycode "^2.1.0" 1871 | 1872 | util-deprecate@^1.0.1, util-deprecate@~1.0.1: 1873 | version "1.0.2" 1874 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1875 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1876 | 1877 | webidl-conversions@^3.0.0: 1878 | version "3.0.1" 1879 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 1880 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 1881 | 1882 | whatwg-url@^5.0.0: 1883 | version "5.0.0" 1884 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 1885 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 1886 | dependencies: 1887 | tr46 "~0.0.3" 1888 | webidl-conversions "^3.0.0" 1889 | 1890 | which@^2.0.1: 1891 | version "2.0.2" 1892 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 1893 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 1894 | dependencies: 1895 | isexe "^2.0.0" 1896 | 1897 | wrap-ansi@^7.0.0: 1898 | version "7.0.0" 1899 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 1900 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 1901 | dependencies: 1902 | ansi-styles "^4.0.0" 1903 | string-width "^4.1.0" 1904 | strip-ansi "^6.0.0" 1905 | 1906 | wrappy@1: 1907 | version "1.0.2" 1908 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1909 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1910 | 1911 | y18n@^5.0.5: 1912 | version "5.0.8" 1913 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 1914 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 1915 | 1916 | yallist@^2.1.2: 1917 | version "2.1.2" 1918 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 1919 | integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= 1920 | 1921 | yallist@^4.0.0: 1922 | version "4.0.0" 1923 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1924 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1925 | 1926 | yargs-parser@^20.2.2: 1927 | version "20.2.9" 1928 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" 1929 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== 1930 | 1931 | yargs@^16.2.0: 1932 | version "16.2.0" 1933 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" 1934 | integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== 1935 | dependencies: 1936 | cliui "^7.0.2" 1937 | escalade "^3.1.1" 1938 | get-caller-file "^2.0.5" 1939 | require-directory "^2.1.1" 1940 | string-width "^4.2.0" 1941 | y18n "^5.0.5" 1942 | yargs-parser "^20.2.2" 1943 | 1944 | yocto-queue@^0.1.0: 1945 | version "0.1.0" 1946 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 1947 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 1948 | --------------------------------------------------------------------------------