├── .gitignore ├── LICENSE ├── README.md ├── example └── test.html ├── package-lock.json ├── package.json ├── rollup.config.js ├── scripts ├── build.js └── dev.js ├── src ├── figToJSON.ts ├── index.ts └── lib │ └── kiwi │ ├── bb.ts │ ├── binary.ts │ ├── index.ts │ ├── js.ts │ ├── schema.ts │ └── utils.ts ├── tsconfig.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | lerna-debug.log* 8 | 9 | # Diagnostic reports (https://nodejs.org/api/report.html) 10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 11 | 12 | # Runtime data 13 | pids 14 | *.pid 15 | *.seed 16 | *.pid.lock 17 | 18 | # Directory for instrumented libs generated by jscoverage/JSCover 19 | lib-cov 20 | 21 | # Coverage directory used by tools like istanbul 22 | coverage 23 | *.lcov 24 | 25 | # nyc test coverage 26 | .nyc_output 27 | 28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 29 | .grunt 30 | 31 | # Bower dependency directory (https://bower.io/) 32 | bower_components 33 | 34 | # node-waf configuration 35 | .lock-wscript 36 | 37 | # Compiled binary addons (https://nodejs.org/api/addons.html) 38 | build/Release 39 | 40 | # Dependency directories 41 | node_modules/ 42 | jspm_packages/ 43 | 44 | # TypeScript v1 declaration files 45 | typings/ 46 | 47 | # TypeScript cache 48 | *.tsbuildinfo 49 | 50 | # Optional npm cache directory 51 | .npm 52 | 53 | # Optional eslint cache 54 | .eslintcache 55 | 56 | # Microbundle cache 57 | .rpt2_cache/ 58 | .rts2_cache_cjs/ 59 | .rts2_cache_es/ 60 | .rts2_cache_umd/ 61 | 62 | # Optional REPL history 63 | .node_repl_history 64 | 65 | # Output of 'npm pack' 66 | *.tgz 67 | 68 | # Yarn Integrity file 69 | .yarn-integrity 70 | 71 | # dotenv environment variables file 72 | .env 73 | .env.test 74 | 75 | # parcel-bundler cache (https://parceljs.org/) 76 | .cache 77 | 78 | # Next.js build output 79 | .next 80 | 81 | # Nuxt.js build / generate output 82 | .nuxt 83 | dist 84 | 85 | # Gatsby files 86 | .cache/ 87 | # Comment in the public line in if your project uses Gatsby and *not* Next.js 88 | # https://nextjs.org/blog/next-9-1#public-directory-support 89 | # public 90 | 91 | # vuepress build output 92 | .vuepress/dist 93 | 94 | # Serverless directories 95 | .serverless/ 96 | 97 | # FuseBox cache 98 | .fusebox/ 99 | 100 | # DynamoDB Local files 101 | .dynamodb/ 102 | 103 | # TernJS port file 104 | .tern-port 105 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Boiao Ch 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Convert Figma .fig file to json data 2 | 3 | ..... 4 | -------------------------------------------------------------------------------- /example/test.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Untitled 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 32 | 56 | 57 | 58 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fig-to-json", 3 | "version": "1.0.4", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.16.7", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz", 10 | "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.16.7" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.19.1", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 19 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.18.6", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 25 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.18.6", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | } 32 | }, 33 | "@rollup/plugin-json": { 34 | "version": "4.1.0", 35 | "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", 36 | "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", 37 | "dev": true, 38 | "requires": { 39 | "@rollup/pluginutils": "^3.0.8" 40 | } 41 | }, 42 | "@rollup/plugin-node-resolve": { 43 | "version": "13.3.0", 44 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz", 45 | "integrity": "sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==", 46 | "dev": true, 47 | "requires": { 48 | "@rollup/pluginutils": "^3.1.0", 49 | "@types/resolve": "1.17.1", 50 | "deepmerge": "^4.2.2", 51 | "is-builtin-module": "^3.1.0", 52 | "is-module": "^1.0.0", 53 | "resolve": "^1.19.0" 54 | } 55 | }, 56 | "@rollup/pluginutils": { 57 | "version": "3.1.0", 58 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 59 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 60 | "dev": true, 61 | "requires": { 62 | "@types/estree": "0.0.39", 63 | "estree-walker": "^1.0.1", 64 | "picomatch": "^2.2.2" 65 | } 66 | }, 67 | "@types/estree": { 68 | "version": "0.0.39", 69 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 70 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 71 | "dev": true 72 | }, 73 | "@types/node": { 74 | "version": "17.0.31", 75 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.31.tgz", 76 | "integrity": "sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==", 77 | "dev": true 78 | }, 79 | "@types/resolve": { 80 | "version": "1.17.1", 81 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 82 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 83 | "dev": true, 84 | "requires": { 85 | "@types/node": "*" 86 | } 87 | }, 88 | "@types/uzip": { 89 | "version": "0.20201231.0", 90 | "resolved": "https://registry.npmjs.org/@types/uzip/-/uzip-0.20201231.0.tgz", 91 | "integrity": "sha512-h5QS4GArSRa0VqWC30rQ8q/WjDwmTrFFMOulFQUAEjhL9zUApefLnpF2Y7ZRNrfMqCjKnWGxs2AtYrN6/t699w==" 92 | }, 93 | "@yarn-tool/resolve-package": { 94 | "version": "1.0.46", 95 | "resolved": "https://registry.npmjs.org/@yarn-tool/resolve-package/-/resolve-package-1.0.46.tgz", 96 | "integrity": "sha512-RJcBGTVywUqYGRtGkPSgJC/ozf0wK/xjUy66tXkbpL35U0o1oef4S0v23euxA/CiukqBWr2fRGtGY6FidESdTg==", 97 | "dev": true, 98 | "requires": { 99 | "pkg-dir": "< 6 >= 5", 100 | "tslib": "^2.3.1", 101 | "upath2": "^3.1.12" 102 | } 103 | }, 104 | "acorn": { 105 | "version": "8.8.0", 106 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.0.tgz", 107 | "integrity": "sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==", 108 | "dev": true 109 | }, 110 | "ansi-styles": { 111 | "version": "3.2.1", 112 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 113 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 114 | "dev": true, 115 | "requires": { 116 | "color-convert": "^1.9.0" 117 | } 118 | }, 119 | "buffer-from": { 120 | "version": "1.1.2", 121 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 122 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 123 | "dev": true 124 | }, 125 | "builtin-modules": { 126 | "version": "3.3.0", 127 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 128 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 129 | "dev": true 130 | }, 131 | "chalk": { 132 | "version": "2.4.2", 133 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 134 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 135 | "dev": true, 136 | "requires": { 137 | "ansi-styles": "^3.2.1", 138 | "escape-string-regexp": "^1.0.5", 139 | "supports-color": "^5.3.0" 140 | } 141 | }, 142 | "color-convert": { 143 | "version": "1.9.3", 144 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 145 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 146 | "dev": true, 147 | "requires": { 148 | "color-name": "1.1.3" 149 | } 150 | }, 151 | "color-name": { 152 | "version": "1.1.3", 153 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 154 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 155 | "dev": true 156 | }, 157 | "commander": { 158 | "version": "2.20.3", 159 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 160 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 161 | "dev": true 162 | }, 163 | "commondir": { 164 | "version": "1.0.1", 165 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 166 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 167 | "dev": true 168 | }, 169 | "cross-spawn": { 170 | "version": "7.0.3", 171 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 172 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 173 | "dev": true, 174 | "requires": { 175 | "path-key": "^3.1.0", 176 | "shebang-command": "^2.0.0", 177 | "which": "^2.0.1" 178 | } 179 | }, 180 | "deepmerge": { 181 | "version": "4.2.2", 182 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 183 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 184 | "dev": true 185 | }, 186 | "escape-string-regexp": { 187 | "version": "1.0.5", 188 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 189 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 190 | "dev": true 191 | }, 192 | "estree-walker": { 193 | "version": "1.0.1", 194 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 195 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 196 | "dev": true 197 | }, 198 | "execa": { 199 | "version": "5.1.1", 200 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 201 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 202 | "dev": true, 203 | "requires": { 204 | "cross-spawn": "^7.0.3", 205 | "get-stream": "^6.0.0", 206 | "human-signals": "^2.1.0", 207 | "is-stream": "^2.0.0", 208 | "merge-stream": "^2.0.0", 209 | "npm-run-path": "^4.0.1", 210 | "onetime": "^5.1.2", 211 | "signal-exit": "^3.0.3", 212 | "strip-final-newline": "^2.0.0" 213 | } 214 | }, 215 | "find-cache-dir": { 216 | "version": "3.3.2", 217 | "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", 218 | "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", 219 | "dev": true, 220 | "requires": { 221 | "commondir": "^1.0.1", 222 | "make-dir": "^3.0.2", 223 | "pkg-dir": "^4.1.0" 224 | }, 225 | "dependencies": { 226 | "find-up": { 227 | "version": "4.1.0", 228 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", 229 | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", 230 | "dev": true, 231 | "requires": { 232 | "locate-path": "^5.0.0", 233 | "path-exists": "^4.0.0" 234 | } 235 | }, 236 | "locate-path": { 237 | "version": "5.0.0", 238 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", 239 | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", 240 | "dev": true, 241 | "requires": { 242 | "p-locate": "^4.1.0" 243 | } 244 | }, 245 | "p-limit": { 246 | "version": "2.3.0", 247 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", 248 | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", 249 | "dev": true, 250 | "requires": { 251 | "p-try": "^2.0.0" 252 | } 253 | }, 254 | "p-locate": { 255 | "version": "4.1.0", 256 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", 257 | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", 258 | "dev": true, 259 | "requires": { 260 | "p-limit": "^2.2.0" 261 | } 262 | }, 263 | "pkg-dir": { 264 | "version": "4.2.0", 265 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", 266 | "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", 267 | "dev": true, 268 | "requires": { 269 | "find-up": "^4.0.0" 270 | } 271 | } 272 | } 273 | }, 274 | "find-up": { 275 | "version": "5.0.0", 276 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 277 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 278 | "dev": true, 279 | "requires": { 280 | "locate-path": "^6.0.0", 281 | "path-exists": "^4.0.0" 282 | } 283 | }, 284 | "fs-extra": { 285 | "version": "10.1.0", 286 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", 287 | "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", 288 | "dev": true, 289 | "requires": { 290 | "graceful-fs": "^4.2.0", 291 | "jsonfile": "^6.0.1", 292 | "universalify": "^2.0.0" 293 | } 294 | }, 295 | "fsevents": { 296 | "version": "2.3.2", 297 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 298 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 299 | "dev": true, 300 | "optional": true 301 | }, 302 | "function-bind": { 303 | "version": "1.1.1", 304 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 305 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 306 | "dev": true 307 | }, 308 | "get-stream": { 309 | "version": "6.0.1", 310 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 311 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 312 | "dev": true 313 | }, 314 | "graceful-fs": { 315 | "version": "4.2.10", 316 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 317 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 318 | "dev": true 319 | }, 320 | "has": { 321 | "version": "1.0.3", 322 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 323 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 324 | "dev": true, 325 | "requires": { 326 | "function-bind": "^1.1.1" 327 | } 328 | }, 329 | "has-flag": { 330 | "version": "3.0.0", 331 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 332 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 333 | "dev": true 334 | }, 335 | "human-signals": { 336 | "version": "2.1.0", 337 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 338 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 339 | "dev": true 340 | }, 341 | "is-builtin-module": { 342 | "version": "3.1.0", 343 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", 344 | "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", 345 | "dev": true, 346 | "requires": { 347 | "builtin-modules": "^3.0.0" 348 | } 349 | }, 350 | "is-core-module": { 351 | "version": "2.10.0", 352 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", 353 | "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", 354 | "dev": true, 355 | "requires": { 356 | "has": "^1.0.3" 357 | } 358 | }, 359 | "is-module": { 360 | "version": "1.0.0", 361 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 362 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 363 | "dev": true 364 | }, 365 | "is-stream": { 366 | "version": "2.0.1", 367 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 368 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 369 | "dev": true 370 | }, 371 | "isexe": { 372 | "version": "2.0.0", 373 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 374 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 375 | "dev": true 376 | }, 377 | "jest-worker": { 378 | "version": "26.6.2", 379 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 380 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 381 | "dev": true, 382 | "requires": { 383 | "@types/node": "*", 384 | "merge-stream": "^2.0.0", 385 | "supports-color": "^7.0.0" 386 | }, 387 | "dependencies": { 388 | "has-flag": { 389 | "version": "4.0.0", 390 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 391 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 392 | "dev": true 393 | }, 394 | "supports-color": { 395 | "version": "7.2.0", 396 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 397 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 398 | "dev": true, 399 | "requires": { 400 | "has-flag": "^4.0.0" 401 | } 402 | } 403 | } 404 | }, 405 | "js-cleanup": { 406 | "version": "1.2.0", 407 | "resolved": "https://registry.npmjs.org/js-cleanup/-/js-cleanup-1.2.0.tgz", 408 | "integrity": "sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ==", 409 | "dev": true, 410 | "requires": { 411 | "magic-string": "^0.25.7", 412 | "perf-regexes": "^1.0.1", 413 | "skip-regex": "^1.0.2" 414 | } 415 | }, 416 | "js-tokens": { 417 | "version": "4.0.0", 418 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 419 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 420 | "dev": true 421 | }, 422 | "jsonfile": { 423 | "version": "6.1.0", 424 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", 425 | "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", 426 | "dev": true, 427 | "requires": { 428 | "graceful-fs": "^4.1.6", 429 | "universalify": "^2.0.0" 430 | } 431 | }, 432 | "locate-path": { 433 | "version": "6.0.0", 434 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 435 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 436 | "dev": true, 437 | "requires": { 438 | "p-locate": "^5.0.0" 439 | } 440 | }, 441 | "lodash.sortby": { 442 | "version": "4.7.0", 443 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 444 | "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", 445 | "dev": true 446 | }, 447 | "magic-string": { 448 | "version": "0.25.9", 449 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 450 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 451 | "dev": true, 452 | "requires": { 453 | "sourcemap-codec": "^1.4.8" 454 | } 455 | }, 456 | "make-dir": { 457 | "version": "3.1.0", 458 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 459 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 460 | "dev": true, 461 | "requires": { 462 | "semver": "^6.0.0" 463 | } 464 | }, 465 | "merge-stream": { 466 | "version": "2.0.0", 467 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 468 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 469 | "dev": true 470 | }, 471 | "mimic-fn": { 472 | "version": "2.1.0", 473 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 474 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 475 | "dev": true 476 | }, 477 | "npm-run-path": { 478 | "version": "4.0.1", 479 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 480 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 481 | "dev": true, 482 | "requires": { 483 | "path-key": "^3.0.0" 484 | } 485 | }, 486 | "onetime": { 487 | "version": "5.1.2", 488 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 489 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 490 | "dev": true, 491 | "requires": { 492 | "mimic-fn": "^2.1.0" 493 | } 494 | }, 495 | "p-limit": { 496 | "version": "3.1.0", 497 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 498 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 499 | "dev": true, 500 | "requires": { 501 | "yocto-queue": "^0.1.0" 502 | } 503 | }, 504 | "p-locate": { 505 | "version": "5.0.0", 506 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 507 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 508 | "dev": true, 509 | "requires": { 510 | "p-limit": "^3.0.2" 511 | } 512 | }, 513 | "p-try": { 514 | "version": "2.2.0", 515 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", 516 | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", 517 | "dev": true 518 | }, 519 | "path-exists": { 520 | "version": "4.0.0", 521 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 522 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 523 | "dev": true 524 | }, 525 | "path-is-network-drive": { 526 | "version": "1.0.19", 527 | "resolved": "https://registry.npmjs.org/path-is-network-drive/-/path-is-network-drive-1.0.19.tgz", 528 | "integrity": "sha512-M2sQesVy/gbJJvQ8lI/YYWURRngnMl4lA/XqBoCIUava31qK3AxNEe0EXtUQ2zGjJB4Y+I5zAlFvI1dHv5RXvQ==", 529 | "dev": true, 530 | "requires": { 531 | "tslib": "^2" 532 | } 533 | }, 534 | "path-key": { 535 | "version": "3.1.1", 536 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 537 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 538 | "dev": true 539 | }, 540 | "path-parse": { 541 | "version": "1.0.7", 542 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 543 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 544 | "dev": true 545 | }, 546 | "path-strip-sep": { 547 | "version": "1.0.16", 548 | "resolved": "https://registry.npmjs.org/path-strip-sep/-/path-strip-sep-1.0.16.tgz", 549 | "integrity": "sha512-yfCFy88SSLx6sOLxh5bXhDyq54/0k1/pa+VYKolpkQOYzkJ+ngT+opxlNYQOpemBWrC6hFSWGpxo7a94Azd7Pg==", 550 | "dev": true, 551 | "requires": { 552 | "tslib": "^2" 553 | } 554 | }, 555 | "perf-regexes": { 556 | "version": "1.0.1", 557 | "resolved": "https://registry.npmjs.org/perf-regexes/-/perf-regexes-1.0.1.tgz", 558 | "integrity": "sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng==", 559 | "dev": true 560 | }, 561 | "picomatch": { 562 | "version": "2.3.1", 563 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 564 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 565 | "dev": true 566 | }, 567 | "pkg-dir": { 568 | "version": "5.0.0", 569 | "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-5.0.0.tgz", 570 | "integrity": "sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==", 571 | "dev": true, 572 | "requires": { 573 | "find-up": "^5.0.0" 574 | } 575 | }, 576 | "punycode": { 577 | "version": "2.1.1", 578 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 579 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", 580 | "dev": true 581 | }, 582 | "randombytes": { 583 | "version": "2.1.0", 584 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 585 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 586 | "dev": true, 587 | "requires": { 588 | "safe-buffer": "^5.1.0" 589 | } 590 | }, 591 | "resolve": { 592 | "version": "1.22.0", 593 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", 594 | "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", 595 | "dev": true, 596 | "requires": { 597 | "is-core-module": "^2.8.1", 598 | "path-parse": "^1.0.7", 599 | "supports-preserve-symlinks-flag": "^1.0.0" 600 | } 601 | }, 602 | "rollup": { 603 | "version": "2.72.1", 604 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.72.1.tgz", 605 | "integrity": "sha512-NTc5UGy/NWFGpSqF1lFY8z9Adri6uhyMLI6LvPAXdBKoPRFhIIiBUpt+Qg2awixqO3xvzSijjhnb4+QEZwJmxA==", 606 | "dev": true, 607 | "requires": { 608 | "fsevents": "~2.3.2" 609 | } 610 | }, 611 | "rollup-plugin-cleanup": { 612 | "version": "3.2.1", 613 | "resolved": "https://registry.npmjs.org/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz", 614 | "integrity": "sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ==", 615 | "dev": true, 616 | "requires": { 617 | "js-cleanup": "^1.2.0", 618 | "rollup-pluginutils": "^2.8.2" 619 | } 620 | }, 621 | "rollup-plugin-terser": { 622 | "version": "7.0.2", 623 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 624 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 625 | "dev": true, 626 | "requires": { 627 | "@babel/code-frame": "^7.10.4", 628 | "jest-worker": "^26.2.1", 629 | "serialize-javascript": "^4.0.0", 630 | "terser": "^5.0.0" 631 | } 632 | }, 633 | "rollup-plugin-typescript2": { 634 | "version": "0.31.2", 635 | "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz", 636 | "integrity": "sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q==", 637 | "dev": true, 638 | "requires": { 639 | "@rollup/pluginutils": "^4.1.2", 640 | "@yarn-tool/resolve-package": "^1.0.40", 641 | "find-cache-dir": "^3.3.2", 642 | "fs-extra": "^10.0.0", 643 | "resolve": "^1.20.0", 644 | "tslib": "^2.3.1" 645 | }, 646 | "dependencies": { 647 | "@rollup/pluginutils": { 648 | "version": "4.2.1", 649 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.2.1.tgz", 650 | "integrity": "sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==", 651 | "dev": true, 652 | "requires": { 653 | "estree-walker": "^2.0.1", 654 | "picomatch": "^2.2.2" 655 | } 656 | }, 657 | "estree-walker": { 658 | "version": "2.0.2", 659 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 660 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 661 | "dev": true 662 | } 663 | } 664 | }, 665 | "rollup-pluginutils": { 666 | "version": "2.8.2", 667 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 668 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 669 | "dev": true, 670 | "requires": { 671 | "estree-walker": "^0.6.1" 672 | }, 673 | "dependencies": { 674 | "estree-walker": { 675 | "version": "0.6.1", 676 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 677 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 678 | "dev": true 679 | } 680 | } 681 | }, 682 | "safe-buffer": { 683 | "version": "5.2.1", 684 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 685 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 686 | "dev": true 687 | }, 688 | "semver": { 689 | "version": "6.3.0", 690 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 691 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 692 | "dev": true 693 | }, 694 | "serialize-javascript": { 695 | "version": "4.0.0", 696 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 697 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 698 | "dev": true, 699 | "requires": { 700 | "randombytes": "^2.1.0" 701 | } 702 | }, 703 | "shebang-command": { 704 | "version": "2.0.0", 705 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 706 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 707 | "dev": true, 708 | "requires": { 709 | "shebang-regex": "^3.0.0" 710 | } 711 | }, 712 | "shebang-regex": { 713 | "version": "3.0.0", 714 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 715 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 716 | "dev": true 717 | }, 718 | "signal-exit": { 719 | "version": "3.0.7", 720 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 721 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 722 | "dev": true 723 | }, 724 | "skip-regex": { 725 | "version": "1.0.2", 726 | "resolved": "https://registry.npmjs.org/skip-regex/-/skip-regex-1.0.2.tgz", 727 | "integrity": "sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA==", 728 | "dev": true 729 | }, 730 | "source-map": { 731 | "version": "0.8.0-beta.0", 732 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", 733 | "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", 734 | "dev": true, 735 | "requires": { 736 | "whatwg-url": "^7.0.0" 737 | } 738 | }, 739 | "source-map-support": { 740 | "version": "0.5.21", 741 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 742 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 743 | "dev": true, 744 | "requires": { 745 | "buffer-from": "^1.0.0", 746 | "source-map": "^0.6.0" 747 | }, 748 | "dependencies": { 749 | "source-map": { 750 | "version": "0.6.1", 751 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 752 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 753 | "dev": true 754 | } 755 | } 756 | }, 757 | "sourcemap-codec": { 758 | "version": "1.4.8", 759 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 760 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 761 | "dev": true 762 | }, 763 | "strip-final-newline": { 764 | "version": "2.0.0", 765 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 766 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 767 | "dev": true 768 | }, 769 | "supports-color": { 770 | "version": "5.5.0", 771 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 772 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 773 | "dev": true, 774 | "requires": { 775 | "has-flag": "^3.0.0" 776 | } 777 | }, 778 | "supports-preserve-symlinks-flag": { 779 | "version": "1.0.0", 780 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 781 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 782 | "dev": true 783 | }, 784 | "terser": { 785 | "version": "5.13.1", 786 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.13.1.tgz", 787 | "integrity": "sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA==", 788 | "dev": true, 789 | "requires": { 790 | "acorn": "^8.5.0", 791 | "commander": "^2.20.0", 792 | "source-map": "~0.8.0-beta.0", 793 | "source-map-support": "~0.5.20" 794 | } 795 | }, 796 | "tr46": { 797 | "version": "1.0.1", 798 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", 799 | "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", 800 | "dev": true, 801 | "requires": { 802 | "punycode": "^2.1.0" 803 | } 804 | }, 805 | "tslib": { 806 | "version": "2.4.0", 807 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", 808 | "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", 809 | "dev": true 810 | }, 811 | "typescript": { 812 | "version": "4.6.4", 813 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", 814 | "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", 815 | "dev": true 816 | }, 817 | "universalify": { 818 | "version": "2.0.0", 819 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", 820 | "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", 821 | "dev": true 822 | }, 823 | "upath2": { 824 | "version": "3.1.18", 825 | "resolved": "https://registry.npmjs.org/upath2/-/upath2-3.1.18.tgz", 826 | "integrity": "sha512-JGfwzvuMtkbI0kkt+TXM/Ig3WZ3rTuwC61dNdNn8TpaBGBDB7cnONpb++5v7j2DslXfNydNimoxibZAEhri3ZA==", 827 | "dev": true, 828 | "requires": { 829 | "@types/node": "*", 830 | "path-is-network-drive": "^1.0.19", 831 | "path-strip-sep": "^1.0.16", 832 | "tslib": "^2" 833 | } 834 | }, 835 | "uzip": { 836 | "version": "0.20201231.0", 837 | "resolved": "https://registry.npmjs.org/uzip/-/uzip-0.20201231.0.tgz", 838 | "integrity": "sha512-OZeJfZP+R0z9D6TmBgLq2LHzSSptGMGDGigGiEe0pr8UBe/7fdflgHlHBNDASTXB5jnFuxHpNaJywSg8YFeGng==" 839 | }, 840 | "webidl-conversions": { 841 | "version": "4.0.2", 842 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 843 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 844 | "dev": true 845 | }, 846 | "whatwg-url": { 847 | "version": "7.1.0", 848 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", 849 | "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", 850 | "dev": true, 851 | "requires": { 852 | "lodash.sortby": "^4.7.0", 853 | "tr46": "^1.0.1", 854 | "webidl-conversions": "^4.0.2" 855 | } 856 | }, 857 | "which": { 858 | "version": "2.0.2", 859 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 860 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 861 | "dev": true, 862 | "requires": { 863 | "isexe": "^2.0.0" 864 | } 865 | }, 866 | "yocto-queue": { 867 | "version": "0.1.0", 868 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 869 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 870 | "dev": true 871 | } 872 | } 873 | } 874 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fig-to-json", 3 | "version": "1.0.4", 4 | "description": "convert fig file to JSON format data", 5 | "main": "dist/FigToJSON.cjs.js", 6 | "module": "dist/FigtoJSON.esm-bundler.js", 7 | "browser": "dist/FigtoJSON.global.js", 8 | "scripts": { 9 | "build": "rm -rf dist && node scripts/build.js", 10 | "dev": "node scripts/dev.js" 11 | }, 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/liaobinbin/fig-to-json.git" 15 | }, 16 | "keywords": [ 17 | "fig", 18 | "json", 19 | "file" 20 | ], 21 | "author": "Boiao Ch ", 22 | "license": "MIT", 23 | "dependencies": { 24 | "@types/uzip": "^0.20201231.0", 25 | "uzip": "^0.20201231.0" 26 | }, 27 | "devDependencies": { 28 | "@rollup/plugin-json": "^4.1.0", 29 | "@rollup/plugin-node-resolve": "^13.3.0", 30 | "execa": "5.1.1", 31 | "rollup": "^2.72.1", 32 | "rollup-plugin-cleanup": "^3.2.1", 33 | "rollup-plugin-terser": "^7.0.2", 34 | "rollup-plugin-typescript2": "^0.31.2", 35 | "typescript": "^4.6.4" 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /rollup.config.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const json = require("@rollup/plugin-json"); 3 | const resolvePlugin = require("@rollup/plugin-node-resolve"); 4 | const ts = require("rollup-plugin-typescript2"); 5 | const cleanup = require("rollup-plugin-cleanup"); 6 | const terser = require("rollup-plugin-terser"); 7 | const resolve = path.resolve; 8 | 9 | const name = "FigToJSON"; 10 | 11 | const outputConfig = { 12 | "esm-bundler": { 13 | file: resolve(`dist/${name}.esm-bundler.js`), 14 | format: "es", 15 | }, 16 | cjs: { 17 | file: resolve(`dist/${name}.cjs.js`), 18 | format: "cjs", 19 | }, 20 | global: { 21 | file: resolve(`dist/${name}.global.js`), 22 | format: "iife", 23 | }, 24 | }; 25 | 26 | const createConfig = (format, output) => { 27 | output.name = name; 28 | output.sourcemap = true; 29 | 30 | return { 31 | input: resolve(`src/index.ts`), 32 | output, 33 | plugins: [ 34 | json(), 35 | ts({ 36 | tsconfig: resolve(__dirname, "tsconfig.json"), 37 | }), 38 | resolvePlugin, 39 | cleanup(), 40 | terser.terser(), 41 | ], 42 | }; 43 | }; 44 | 45 | const formats = Object.keys(outputConfig); 46 | 47 | export default formats.map((format) => { 48 | return createConfig(format, outputConfig[format]); 49 | }); 50 | -------------------------------------------------------------------------------- /scripts/build.js: -------------------------------------------------------------------------------- 1 | const execa = require("execa"); 2 | 3 | execa("rollup", ["-c"], { 4 | stdio: "inherit", 5 | }); 6 | -------------------------------------------------------------------------------- /scripts/dev.js: -------------------------------------------------------------------------------- 1 | const execa = require("execa"); 2 | 3 | execa("rollup", ["-cw"], { 4 | stdio: "inherit", 5 | }); 6 | -------------------------------------------------------------------------------- /src/figToJSON.ts: -------------------------------------------------------------------------------- 1 | import { ByteBuffer, decodeBinarySchema, compileSchema } from "./lib/kiwi"; 2 | import { inflateRaw } from "uzip"; 3 | 4 | const transfer8to32 = function ( 5 | fileByte: Uint8Array, 6 | start: number, 7 | cache: Uint8Array 8 | ) { 9 | cache[0] = fileByte[start + 0]; 10 | cache[1] = fileByte[start + 1]; 11 | cache[2] = fileByte[start + 2]; 12 | cache[3] = fileByte[start + 3]; 13 | }; 14 | 15 | const int32 = new Int32Array(1); 16 | const uint8 = new Uint8Array(int32.buffer); 17 | const uint32 = new Uint32Array(int32.buffer); 18 | 19 | const calcEnd = function (fileByte: Uint8Array, start: number) { 20 | transfer8to32(fileByte, start, uint8); 21 | return uint32[0]; 22 | }; 23 | 24 | export const getFigJsonData = (fileBuffer: Buffer) => { 25 | const fileByte: Uint8Array = new Uint8Array(fileBuffer); 26 | 27 | // 8 bits for figma comment; 28 | let start = 8; 29 | 30 | calcEnd(fileByte, start); 31 | 32 | start += 4; 33 | const result = []; 34 | while (start < fileByte.length) { 35 | var end = calcEnd(fileByte, start); 36 | start += 4; 37 | 38 | let byteTemp = fileByte.slice(start, start + end); 39 | 40 | if (!(fileByte[start] == 137 && fileByte[start + 1] == 80)) { 41 | byteTemp = inflateRaw(byteTemp); 42 | } 43 | 44 | result.push(byteTemp); 45 | start += end; 46 | } 47 | 48 | const [schemaByte, dataByte] = result; 49 | 50 | const schemaBB = new ByteBuffer(schemaByte); 51 | 52 | const schema = decodeBinarySchema(schemaBB); 53 | 54 | const dataBB = new ByteBuffer(dataByte); 55 | 56 | const schemaHelper = compileSchema(schema); 57 | 58 | return schemaHelper[`decodeMessage`](dataBB); 59 | }; 60 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | // import { decodeFigma } from "./decodeFig"; 2 | import { getFigJsonData } from "./figToJSON"; 3 | 4 | export { getFigJsonData }; 5 | -------------------------------------------------------------------------------- /src/lib/kiwi/bb.ts: -------------------------------------------------------------------------------- 1 | let int32 = new Int32Array(1); 2 | let float32 = new Float32Array(int32.buffer); 3 | 4 | export class ByteBuffer { 5 | private _data: Uint8Array; 6 | private _index: number; 7 | length: number; 8 | 9 | constructor(data?: Uint8Array) { 10 | if (data && !(data instanceof Uint8Array)) { 11 | throw new Error("Must initialize a ByteBuffer with a Uint8Array"); 12 | } 13 | this._data = data || new Uint8Array(256); 14 | this._index = 0; 15 | this.length = data ? data.length : 0; 16 | } 17 | 18 | toUint8Array(): Uint8Array { 19 | return this._data.subarray(0, this.length); 20 | } 21 | 22 | readByte(): number { 23 | if (this._index + 1 > this._data.length) { 24 | throw new Error("Index out of bounds"); 25 | } 26 | return this._data[this._index++]; 27 | } 28 | 29 | readByteArray(): Uint8Array { 30 | let length = this.readVarUint(); 31 | let start = this._index; 32 | let end = start + length; 33 | if (end > this._data.length) { 34 | throw new Error("Read array out of bounds"); 35 | } 36 | this._index = end; 37 | // Copy into a new array instead of just creating another view. 38 | let result = new Uint8Array(length); 39 | result.set(this._data.subarray(start, end)); 40 | return result; 41 | } 42 | 43 | readVarFloat(): number { 44 | let index = this._index; 45 | let data = this._data; 46 | let length = data.length; 47 | 48 | // Optimization: use a single byte to store zero 49 | if (index + 1 > length) { 50 | throw new Error("Index out of bounds"); 51 | } 52 | let first = data[index]; 53 | if (first === 0) { 54 | this._index = index + 1; 55 | return 0; 56 | } 57 | 58 | // Endian-independent 32-bit read 59 | if (index + 4 > length) { 60 | throw new Error("Index out of bounds"); 61 | } 62 | let bits = 63 | first | 64 | (data[index + 1] << 8) | 65 | (data[index + 2] << 16) | 66 | (data[index + 3] << 24); 67 | this._index = index + 4; 68 | 69 | // Move the exponent back into place 70 | bits = (bits << 23) | (bits >>> 9); 71 | 72 | // Reinterpret as a floating-point number 73 | int32[0] = bits; 74 | return float32[0]; 75 | } 76 | 77 | readVarUint(): number { 78 | let value = 0; 79 | let shift = 0; 80 | do { 81 | var byte = this.readByte(); 82 | value |= (byte & 127) << shift; 83 | shift += 7; 84 | } while (byte & 128 && shift < 35); 85 | return value >>> 0; 86 | } 87 | 88 | readVarInt(): number { 89 | let value = this.readVarUint() | 0; 90 | return value & 1 ? ~(value >>> 1) : value >>> 1; 91 | } 92 | 93 | readString(): string { 94 | let result = ""; 95 | 96 | while (true) { 97 | let codePoint; 98 | 99 | // Decode UTF-8 100 | let a = this.readByte(); 101 | if (a < 0xc0) { 102 | codePoint = a; 103 | } else { 104 | let b = this.readByte(); 105 | if (a < 0xe0) { 106 | codePoint = ((a & 0x1f) << 6) | (b & 0x3f); 107 | } else { 108 | let c = this.readByte(); 109 | if (a < 0xf0) { 110 | codePoint = ((a & 0x0f) << 12) | ((b & 0x3f) << 6) | (c & 0x3f); 111 | } else { 112 | let d = this.readByte(); 113 | codePoint = 114 | ((a & 0x07) << 18) | 115 | ((b & 0x3f) << 12) | 116 | ((c & 0x3f) << 6) | 117 | (d & 0x3f); 118 | } 119 | } 120 | } 121 | 122 | // Strings are null-terminated 123 | if (codePoint === 0) { 124 | break; 125 | } 126 | 127 | // Encode UTF-16 128 | if (codePoint < 0x10000) { 129 | result += String.fromCharCode(codePoint); 130 | } else { 131 | codePoint -= 0x10000; 132 | result += String.fromCharCode( 133 | (codePoint >> 10) + 0xd800, 134 | (codePoint & ((1 << 10) - 1)) + 0xdc00 135 | ); 136 | } 137 | } 138 | 139 | return result; 140 | } 141 | 142 | private _growBy(amount: number): void { 143 | if (this.length + amount > this._data.length) { 144 | let data = new Uint8Array((this.length + amount) << 1); 145 | data.set(this._data); 146 | this._data = data; 147 | } 148 | this.length += amount; 149 | } 150 | 151 | writeByte(value: number): void { 152 | let index = this.length; 153 | this._growBy(1); 154 | this._data[index] = value; 155 | } 156 | 157 | writeByteArray(value: Uint8Array): void { 158 | this.writeVarUint(value.length); 159 | let index = this.length; 160 | this._growBy(value.length); 161 | this._data.set(value, index); 162 | } 163 | 164 | writeVarFloat(value: number): void { 165 | let index = this.length; 166 | 167 | // Reinterpret as an integer 168 | float32[0] = value; 169 | let bits = int32[0]; 170 | 171 | // Move the exponent to the first 8 bits 172 | bits = (bits >>> 23) | (bits << 9); 173 | 174 | // Optimization: use a single byte to store zero and denormals (check for an exponent of 0) 175 | if ((bits & 255) === 0) { 176 | this.writeByte(0); 177 | return; 178 | } 179 | 180 | // Endian-independent 32-bit write 181 | this._growBy(4); 182 | let data = this._data; 183 | data[index] = bits; 184 | data[index + 1] = bits >> 8; 185 | data[index + 2] = bits >> 16; 186 | data[index + 3] = bits >> 24; 187 | } 188 | 189 | writeVarUint(value: number): void { 190 | do { 191 | let byte = value & 127; 192 | value >>>= 7; 193 | this.writeByte(value ? byte | 128 : byte); 194 | } while (value); 195 | } 196 | 197 | writeVarInt(value: number): void { 198 | this.writeVarUint((value << 1) ^ (value >> 31)); 199 | } 200 | 201 | writeString(value: string): void { 202 | let codePoint; 203 | 204 | for (let i = 0; i < value.length; i++) { 205 | // Decode UTF-16 206 | let a = value.charCodeAt(i); 207 | if (i + 1 === value.length || a < 0xd800 || a >= 0xdc00) { 208 | codePoint = a; 209 | } else { 210 | let b = value.charCodeAt(++i); 211 | codePoint = (a << 10) + b + (0x10000 - (0xd800 << 10) - 0xdc00); 212 | } 213 | 214 | // Strings are null-terminated 215 | if (codePoint === 0) { 216 | throw new Error("Cannot encode a string containing the null character"); 217 | } 218 | 219 | // Encode UTF-8 220 | if (codePoint < 0x80) { 221 | this.writeByte(codePoint); 222 | } else { 223 | if (codePoint < 0x800) { 224 | this.writeByte(((codePoint >> 6) & 0x1f) | 0xc0); 225 | } else { 226 | if (codePoint < 0x10000) { 227 | this.writeByte(((codePoint >> 12) & 0x0f) | 0xe0); 228 | } else { 229 | this.writeByte(((codePoint >> 18) & 0x07) | 0xf0); 230 | this.writeByte(((codePoint >> 12) & 0x3f) | 0x80); 231 | } 232 | this.writeByte(((codePoint >> 6) & 0x3f) | 0x80); 233 | } 234 | this.writeByte((codePoint & 0x3f) | 0x80); 235 | } 236 | } 237 | 238 | // Strings are null-terminated 239 | this.writeByte(0); 240 | } 241 | } 242 | -------------------------------------------------------------------------------- /src/lib/kiwi/binary.ts: -------------------------------------------------------------------------------- 1 | import { ByteBuffer } from "./bb"; 2 | import { Schema, Field, Definition, DefinitionKind } from "./schema"; 3 | 4 | let types: (string | null)[] = [ 5 | "bool", 6 | "byte", 7 | "int", 8 | "uint", 9 | "float", 10 | "string", 11 | ]; 12 | let kinds: DefinitionKind[] = ["ENUM", "STRUCT", "MESSAGE"]; 13 | 14 | export function decodeBinarySchema(buffer: Uint8Array | ByteBuffer): Schema { 15 | let bb = buffer instanceof ByteBuffer ? buffer : new ByteBuffer(buffer); 16 | let definitionCount = bb.readVarUint(); 17 | let definitions: Definition[] = []; 18 | 19 | // Read in the schema 20 | for (let i = 0; i < definitionCount; i++) { 21 | let definitionName = bb.readString(); 22 | let kind = bb.readByte(); 23 | let fieldCount = bb.readVarUint(); 24 | let fields: Field[] = []; 25 | 26 | for (let j = 0; j < fieldCount; j++) { 27 | let fieldName = bb.readString(); 28 | let type = bb.readVarInt(); 29 | let isArray = !!(bb.readByte() & 1); 30 | let value = bb.readVarUint(); 31 | 32 | fields.push({ 33 | name: fieldName, 34 | line: 0, 35 | column: 0, 36 | type: kinds[kind] === "ENUM" ? null : (type as any), 37 | isArray: isArray, 38 | isDeprecated: false, 39 | value: value, 40 | }); 41 | } 42 | 43 | definitions.push({ 44 | name: definitionName, 45 | line: 0, 46 | column: 0, 47 | kind: kinds[kind], 48 | fields: fields, 49 | }); 50 | } 51 | 52 | // Bind type names afterwards 53 | for (let i = 0; i < definitionCount; i++) { 54 | let fields = definitions[i].fields; 55 | for (let j = 0; j < fields.length; j++) { 56 | let field = fields[j]; 57 | let type = field.type as any as number | null; 58 | 59 | if (type !== null && type < 0) { 60 | if (~type >= types.length) { 61 | throw new Error("Invalid type " + type); 62 | } 63 | field.type = types[~type]; 64 | } else { 65 | if (type !== null && type >= definitions.length) { 66 | throw new Error("Invalid type " + type); 67 | } 68 | field.type = type === null ? null : definitions[type].name; 69 | } 70 | } 71 | } 72 | 73 | return { 74 | package: null, 75 | definitions: definitions, 76 | }; 77 | } 78 | 79 | export function encodeBinarySchema(schema: Schema): Uint8Array { 80 | let bb = new ByteBuffer(); 81 | let definitions = schema.definitions; 82 | let definitionIndex: { [name: string]: number } = {}; 83 | 84 | bb.writeVarUint(definitions.length); 85 | 86 | for (let i = 0; i < definitions.length; i++) { 87 | definitionIndex[definitions[i].name] = i; 88 | } 89 | 90 | for (let i = 0; i < definitions.length; i++) { 91 | let definition = definitions[i]; 92 | 93 | bb.writeString(definition.name); 94 | bb.writeByte(kinds.indexOf(definition.kind)); 95 | bb.writeVarUint(definition.fields.length); 96 | 97 | for (let j = 0; j < definition.fields.length; j++) { 98 | let field = definition.fields[j]; 99 | let type = types.indexOf(field.type); 100 | 101 | bb.writeString(field.name); 102 | bb.writeVarInt(type === -1 ? definitionIndex[field.type!] : ~type); 103 | bb.writeByte(field.isArray ? 1 : 0); 104 | bb.writeVarUint(field.value); 105 | } 106 | } 107 | 108 | return bb.toUint8Array(); 109 | } 110 | -------------------------------------------------------------------------------- /src/lib/kiwi/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./bb"; 2 | export * from "./binary"; 3 | export * from "./js"; 4 | export * from "./schema"; 5 | -------------------------------------------------------------------------------- /src/lib/kiwi/js.ts: -------------------------------------------------------------------------------- 1 | import { Schema, Definition } from "./schema"; 2 | import { ByteBuffer } from "./bb"; 3 | import { error, quote } from "./utils"; 4 | 5 | function compileDecode( 6 | definition: Definition, 7 | definitions: { [name: string]: Definition } 8 | ): string { 9 | let lines: string[] = []; 10 | let indent = " "; 11 | 12 | lines.push("function(bb) {"); 13 | lines.push(" var result = {};"); 14 | lines.push(" if (!(bb instanceof this.ByteBuffer)) {"); 15 | lines.push(" bb = new this.ByteBuffer(bb);"); 16 | lines.push(" }"); 17 | lines.push(""); 18 | 19 | if (definition.kind === "MESSAGE") { 20 | lines.push(" while (true) {"); 21 | lines.push(" switch (bb.readVarUint()) {"); 22 | lines.push(" case 0:"); 23 | lines.push(" return result;"); 24 | lines.push(""); 25 | indent = " "; 26 | } 27 | 28 | for (let i = 0; i < definition.fields.length; i++) { 29 | let field = definition.fields[i]; 30 | let code: string; 31 | 32 | switch (field.type) { 33 | case "bool": { 34 | code = "!!bb.readByte()"; 35 | break; 36 | } 37 | 38 | case "byte": { 39 | code = "bb.readByte()"; // only used if not array 40 | break; 41 | } 42 | 43 | case "int": { 44 | code = "bb.readVarInt()"; 45 | break; 46 | } 47 | 48 | case "uint": { 49 | code = "bb.readVarUint()"; 50 | break; 51 | } 52 | 53 | case "float": { 54 | code = "bb.readVarFloat()"; 55 | break; 56 | } 57 | 58 | case "string": { 59 | code = "bb.readString()"; 60 | break; 61 | } 62 | 63 | default: { 64 | let type = definitions[field.type!]; 65 | if (!type) { 66 | error( 67 | "Invalid type " + 68 | quote(field.type!) + 69 | " for field " + 70 | quote(field.name), 71 | field.line, 72 | field.column 73 | ); 74 | } else if (type.kind === "ENUM") { 75 | code = "this[" + quote(type.name) + "][bb.readVarUint()]"; 76 | } else { 77 | code = "this[" + quote("decode" + type.name) + "](bb)"; 78 | } 79 | } 80 | } 81 | 82 | if (definition.kind === "MESSAGE") { 83 | lines.push(" case " + field.value + ":"); 84 | } 85 | 86 | if (field.isArray) { 87 | if (field.isDeprecated) { 88 | if (field.type === "byte") { 89 | lines.push(indent + "bb.readByteArray();"); 90 | } else { 91 | lines.push(indent + "var length = bb.readVarUint();"); 92 | lines.push(indent + "while (length-- > 0) " + code + ";"); 93 | } 94 | } else { 95 | if (field.type === "byte") { 96 | lines.push( 97 | indent + "result[" + quote(field.name) + "] = bb.readByteArray();" 98 | ); 99 | } else { 100 | lines.push(indent + "var length = bb.readVarUint();"); 101 | lines.push( 102 | indent + 103 | "var values = result[" + 104 | quote(field.name) + 105 | "] = Array(length);" 106 | ); 107 | lines.push( 108 | indent + 109 | "for (var i = 0; i < length; i++) values[i] = " + 110 | code + 111 | ";" 112 | ); 113 | } 114 | } 115 | } else { 116 | if (field.isDeprecated) { 117 | lines.push(indent + code + ";"); 118 | } else { 119 | lines.push( 120 | indent + "result[" + quote(field.name) + "] = " + code + ";" 121 | ); 122 | } 123 | } 124 | 125 | if (definition.kind === "MESSAGE") { 126 | lines.push(" break;"); 127 | lines.push(""); 128 | } 129 | } 130 | 131 | if (definition.kind === "MESSAGE") { 132 | lines.push(" default:"); 133 | lines.push(' throw new Error("Attempted to parse invalid message");'); 134 | lines.push(" }"); 135 | lines.push(" }"); 136 | } else { 137 | lines.push(" return result;"); 138 | } 139 | 140 | lines.push("}"); 141 | 142 | return lines.join("\n"); 143 | } 144 | 145 | function compileEncode( 146 | definition: Definition, 147 | definitions: { [name: string]: Definition } 148 | ): string { 149 | let lines: string[] = []; 150 | 151 | lines.push("function(message, bb) {"); 152 | lines.push(" var isTopLevel = !bb;"); 153 | lines.push(" if (isTopLevel) bb = new this.ByteBuffer();"); 154 | 155 | for (let j = 0; j < definition.fields.length; j++) { 156 | let field = definition.fields[j]; 157 | let code: string; 158 | 159 | if (field.isDeprecated) { 160 | continue; 161 | } 162 | 163 | switch (field.type) { 164 | case "bool": { 165 | code = "bb.writeByte(value);"; 166 | break; 167 | } 168 | 169 | case "byte": { 170 | code = "bb.writeByte(value);"; // only used if not array 171 | break; 172 | } 173 | 174 | case "int": { 175 | code = "bb.writeVarInt(value);"; 176 | break; 177 | } 178 | 179 | case "uint": { 180 | code = "bb.writeVarUint(value);"; 181 | break; 182 | } 183 | 184 | case "float": { 185 | code = "bb.writeVarFloat(value);"; 186 | break; 187 | } 188 | 189 | case "string": { 190 | code = "bb.writeString(value);"; 191 | break; 192 | } 193 | 194 | default: { 195 | let type = definitions[field.type!]; 196 | if (!type) { 197 | throw new Error( 198 | "Invalid type " + 199 | quote(field.type!) + 200 | " for field " + 201 | quote(field.name) 202 | ); 203 | } else if (type.kind === "ENUM") { 204 | code = 205 | "var encoded = this[" + 206 | quote(type.name) + 207 | "][value]; " + 208 | 'if (encoded === void 0) throw new Error("Invalid value " + JSON.stringify(value) + ' + 209 | quote(" for enum " + quote(type.name)) + 210 | "); " + 211 | "bb.writeVarUint(encoded);"; 212 | } else { 213 | code = "this[" + quote("encode" + type.name) + "](value, bb);"; 214 | } 215 | } 216 | } 217 | 218 | lines.push(""); 219 | lines.push(" var value = message[" + quote(field.name) + "];"); 220 | lines.push(" if (value != null) {"); // Comparing with null using "!=" also checks for undefined 221 | 222 | if (definition.kind === "MESSAGE") { 223 | lines.push(" bb.writeVarUint(" + field.value + ");"); 224 | } 225 | 226 | if (field.isArray) { 227 | if (field.type === "byte") { 228 | lines.push(" bb.writeByteArray(value);"); 229 | } else { 230 | lines.push(" var values = value, n = values.length;"); 231 | lines.push(" bb.writeVarUint(n);"); 232 | lines.push(" for (var i = 0; i < n; i++) {"); 233 | lines.push(" value = values[i];"); 234 | lines.push(" " + code); 235 | lines.push(" }"); 236 | } 237 | } else { 238 | lines.push(" " + code); 239 | } 240 | 241 | if (definition.kind === "STRUCT") { 242 | lines.push(" } else {"); 243 | lines.push( 244 | " throw new Error(" + 245 | quote("Missing required field " + quote(field.name)) + 246 | ");" 247 | ); 248 | } 249 | 250 | lines.push(" }"); 251 | } 252 | 253 | // A field id of zero is reserved to indicate the end of the message 254 | if (definition.kind === "MESSAGE") { 255 | lines.push(" bb.writeVarUint(0);"); 256 | } 257 | 258 | lines.push(""); 259 | lines.push(" if (isTopLevel) return bb.toUint8Array();"); 260 | lines.push("}"); 261 | 262 | return lines.join("\n"); 263 | } 264 | 265 | export function compileSchemaJS(schema: Schema): string { 266 | let definitions: { [name: string]: Definition } = {}; 267 | let name = schema.package; 268 | let js: string[] = []; 269 | 270 | if (name !== null) { 271 | js.push("var " + name + " = exports || " + name + " || {}, exports;"); 272 | } else { 273 | js.push("var exports = exports || {};"); 274 | name = "exports"; 275 | } 276 | 277 | js.push( 278 | name + 279 | ".ByteBuffer = " + 280 | name + 281 | '.ByteBuffer || require("kiwi-schema").ByteBuffer;' 282 | ); 283 | 284 | for (let i = 0; i < schema.definitions.length; i++) { 285 | let definition = schema.definitions[i]; 286 | definitions[definition.name] = definition; 287 | } 288 | 289 | for (let i = 0; i < schema.definitions.length; i++) { 290 | let definition = schema.definitions[i]; 291 | 292 | switch (definition.kind) { 293 | case "ENUM": { 294 | let value: any = {}; 295 | for (let j = 0; j < definition.fields.length; j++) { 296 | let field = definition.fields[j]; 297 | value[field.name] = field.value; 298 | value[field.value] = field.name; 299 | } 300 | js.push( 301 | name + 302 | "[" + 303 | quote(definition.name) + 304 | "] = " + 305 | JSON.stringify(value, null, 2) + 306 | ";" 307 | ); 308 | break; 309 | } 310 | 311 | case "STRUCT": 312 | case "MESSAGE": { 313 | js.push(""); 314 | js.push( 315 | name + 316 | "[" + 317 | quote("decode" + definition.name) + 318 | "] = " + 319 | compileDecode(definition, definitions) + 320 | ";" 321 | ); 322 | js.push(""); 323 | js.push( 324 | name + 325 | "[" + 326 | quote("encode" + definition.name) + 327 | "] = " + 328 | compileEncode(definition, definitions) + 329 | ";" 330 | ); 331 | break; 332 | } 333 | 334 | default: { 335 | error( 336 | "Invalid definition kind " + quote(definition.kind), 337 | definition.line, 338 | definition.column 339 | ); 340 | break; 341 | } 342 | } 343 | } 344 | 345 | js.push(""); 346 | return js.join("\n"); 347 | } 348 | 349 | export function compileSchema(schema: Schema): any { 350 | let result = { 351 | ByteBuffer: ByteBuffer, 352 | }; 353 | new Function("exports", compileSchemaJS(schema))(result); 354 | return result; 355 | } 356 | -------------------------------------------------------------------------------- /src/lib/kiwi/schema.ts: -------------------------------------------------------------------------------- 1 | export interface Schema { 2 | package: string | null; 3 | definitions: Definition[]; 4 | } 5 | 6 | export type DefinitionKind = "ENUM" | "STRUCT" | "MESSAGE"; 7 | 8 | export interface Definition { 9 | name: string; 10 | line: number; 11 | column: number; 12 | kind: DefinitionKind; 13 | fields: Field[]; 14 | } 15 | 16 | export interface Field { 17 | name: string; 18 | line: number; 19 | column: number; 20 | type: string | null; 21 | isArray: boolean; 22 | isDeprecated: boolean; 23 | value: number; 24 | } 25 | -------------------------------------------------------------------------------- /src/lib/kiwi/utils.ts: -------------------------------------------------------------------------------- 1 | export const getWordFromByteRange = function ( 2 | byte: Uint8Array, 3 | start: number, 4 | end: number 5 | ) { 6 | let text = ""; 7 | while (start < end) { 8 | start++; 9 | text += String.fromCharCode(byte[start]); 10 | } 11 | return text; 12 | }; 13 | 14 | export const getOneWordFromByte = function (byte: Uint8Array, start: number) { 15 | let end = start; 16 | // if the letter equal space, that word end; 17 | while (byte[end] != 0) end++; 18 | 19 | for (var i = start; i < end; i++) { 20 | const char = byte[i]; 21 | if (char > 127) throw "e"; 22 | } 23 | 24 | return getWordFromByteRange(byte, start, end); 25 | }; 26 | 27 | export function quote(text: string): string { 28 | return JSON.stringify(text); 29 | } 30 | 31 | export function error(text: string, line: number, column: number): never { 32 | var error = new Error(text); 33 | (error as any).line = line; 34 | (error as any).column = column; 35 | throw error; 36 | } 37 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig.json to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Enable incremental compilation */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./", /* Specify the folder for .tsbuildinfo incremental compilation files. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ESNEXT" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for TC39 stage 2 draft decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h' */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using `jsx: react-jsx*`.` */ 22 | // "reactNamespace": "", /* Specify the object invoked for `createElement`. This only applies when targeting `react` JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | 26 | /* Modules */ 27 | "module": "ESNEXT" /* Specify what module code is generated. */, 28 | // "rootDir": "./", /* Specify the root folder within your source files. */ 29 | "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */, 30 | "baseUrl": "./" /* Specify the base directory to resolve non-relative module names. */, 31 | "paths": { 32 | "@vue/*": ["packages/*/src"] 33 | } /* Specify a set of entries that re-map imports to additional lookup locations. */, 34 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 35 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 36 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 37 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 38 | // "resolveJsonModule": true, /* Enable importing .json files */ 39 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 40 | 41 | /* JavaScript Support */ 42 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 43 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 44 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 45 | 46 | /* Emit */ 47 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 48 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 49 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 50 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 51 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If `declaration` is true, also designates a file that bundles all .d.ts output. */ 52 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 53 | // "removeComments": true, /* Disable emitting comments. */ 54 | // "noEmit": true, /* Disable emitting files from a compilation. */ 55 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 56 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 57 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 58 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 59 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 60 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 61 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 62 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 63 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 64 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 65 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 66 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 67 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 68 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 69 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 70 | 71 | /* Interop Constraints */ 72 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 73 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 74 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */, 75 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 76 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 77 | 78 | /* Type Checking */ 79 | "strict": false /* Enable all strict type-checking options. */, 80 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 81 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 82 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 83 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 84 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 85 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 86 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 87 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 88 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 89 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 90 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 91 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 92 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 93 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 94 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 95 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 96 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 97 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 98 | 99 | /* Completeness */ 100 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 101 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@babel/code-frame@^7.10.4": 6 | version "7.16.7" 7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.7.tgz#44416b6bd7624b998f5b1af5d470856c40138789" 8 | integrity sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg== 9 | dependencies: 10 | "@babel/highlight" "^7.16.7" 11 | 12 | "@babel/helper-validator-identifier@^7.16.7": 13 | version "7.16.7" 14 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz#e8c602438c4a8195751243da9031d1607d247cad" 15 | integrity sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw== 16 | 17 | "@babel/highlight@^7.16.7": 18 | version "7.17.9" 19 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.17.9.tgz#61b2ee7f32ea0454612def4fccdae0de232b73e3" 20 | integrity sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg== 21 | dependencies: 22 | "@babel/helper-validator-identifier" "^7.16.7" 23 | chalk "^2.0.0" 24 | js-tokens "^4.0.0" 25 | 26 | "@rollup/plugin-json@^4.1.0": 27 | version "4.1.0" 28 | resolved "https://registry.yarnpkg.com/@rollup/plugin-json/-/plugin-json-4.1.0.tgz#54e09867ae6963c593844d8bd7a9c718294496f3" 29 | integrity sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw== 30 | dependencies: 31 | "@rollup/pluginutils" "^3.0.8" 32 | 33 | "@rollup/plugin-node-resolve@^13.3.0": 34 | version "13.3.0" 35 | resolved "https://registry.yarnpkg.com/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.3.0.tgz#da1c5c5ce8316cef96a2f823d111c1e4e498801c" 36 | integrity sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw== 37 | dependencies: 38 | "@rollup/pluginutils" "^3.1.0" 39 | "@types/resolve" "1.17.1" 40 | deepmerge "^4.2.2" 41 | is-builtin-module "^3.1.0" 42 | is-module "^1.0.0" 43 | resolve "^1.19.0" 44 | 45 | "@rollup/pluginutils@^3.0.8", "@rollup/pluginutils@^3.1.0": 46 | version "3.1.0" 47 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.1.0.tgz#706b4524ee6dc8b103b3c995533e5ad680c02b9b" 48 | integrity sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg== 49 | dependencies: 50 | "@types/estree" "0.0.39" 51 | estree-walker "^1.0.1" 52 | picomatch "^2.2.2" 53 | 54 | "@rollup/pluginutils@^4.1.2": 55 | version "4.2.1" 56 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-4.2.1.tgz#e6c6c3aba0744edce3fb2074922d3776c0af2a6d" 57 | integrity sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ== 58 | dependencies: 59 | estree-walker "^2.0.1" 60 | picomatch "^2.2.2" 61 | 62 | "@types/estree@0.0.39": 63 | version "0.0.39" 64 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" 65 | integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== 66 | 67 | "@types/node@*": 68 | version "17.0.31" 69 | resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.31.tgz#a5bb84ecfa27eec5e1c802c6bbf8139bdb163a5d" 70 | integrity sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q== 71 | 72 | "@types/resolve@1.17.1": 73 | version "1.17.1" 74 | resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-1.17.1.tgz#3afd6ad8967c77e4376c598a82ddd58f46ec45d6" 75 | integrity sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw== 76 | dependencies: 77 | "@types/node" "*" 78 | 79 | "@yarn-tool/resolve-package@^1.0.40": 80 | version "1.0.46" 81 | resolved "https://registry.yarnpkg.com/@yarn-tool/resolve-package/-/resolve-package-1.0.46.tgz#db7354380e5ca7682294af59e5ab0f7fce640ac1" 82 | integrity sha512-RJcBGTVywUqYGRtGkPSgJC/ozf0wK/xjUy66tXkbpL35U0o1oef4S0v23euxA/CiukqBWr2fRGtGY6FidESdTg== 83 | dependencies: 84 | pkg-dir "< 6 >= 5" 85 | tslib "^2.3.1" 86 | upath2 "^3.1.12" 87 | 88 | acorn@^8.5.0: 89 | version "8.7.1" 90 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" 91 | integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== 92 | 93 | ansi-styles@^3.2.1: 94 | version "3.2.1" 95 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" 96 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== 97 | dependencies: 98 | color-convert "^1.9.0" 99 | 100 | buffer-from@^1.0.0: 101 | version "1.1.2" 102 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 103 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 104 | 105 | builtin-modules@^3.0.0: 106 | version "3.2.0" 107 | resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.2.0.tgz#45d5db99e7ee5e6bc4f362e008bf917ab5049887" 108 | integrity sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA== 109 | 110 | chalk@^2.0.0: 111 | version "2.4.2" 112 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" 113 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== 114 | dependencies: 115 | ansi-styles "^3.2.1" 116 | escape-string-regexp "^1.0.5" 117 | supports-color "^5.3.0" 118 | 119 | color-convert@^1.9.0: 120 | version "1.9.3" 121 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" 122 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== 123 | dependencies: 124 | color-name "1.1.3" 125 | 126 | color-name@1.1.3: 127 | version "1.1.3" 128 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 129 | integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= 130 | 131 | commander@^2.20.0: 132 | version "2.20.3" 133 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" 134 | integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== 135 | 136 | commondir@^1.0.1: 137 | version "1.0.1" 138 | resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" 139 | integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= 140 | 141 | cross-spawn@^7.0.3: 142 | version "7.0.3" 143 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" 144 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== 145 | dependencies: 146 | path-key "^3.1.0" 147 | shebang-command "^2.0.0" 148 | which "^2.0.1" 149 | 150 | deepmerge@^4.2.2: 151 | version "4.2.2" 152 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.2.2.tgz#44d2ea3679b8f4d4ffba33f03d865fc1e7bf4955" 153 | integrity sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg== 154 | 155 | escape-string-regexp@^1.0.5: 156 | version "1.0.5" 157 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 158 | integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= 159 | 160 | estree-walker@^0.6.1: 161 | version "0.6.1" 162 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" 163 | integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== 164 | 165 | estree-walker@^1.0.1: 166 | version "1.0.1" 167 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" 168 | integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== 169 | 170 | estree-walker@^2.0.1: 171 | version "2.0.2" 172 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" 173 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w== 174 | 175 | execa@5.1.1: 176 | version "5.1.1" 177 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 178 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 179 | dependencies: 180 | cross-spawn "^7.0.3" 181 | get-stream "^6.0.0" 182 | human-signals "^2.1.0" 183 | is-stream "^2.0.0" 184 | merge-stream "^2.0.0" 185 | npm-run-path "^4.0.1" 186 | onetime "^5.1.2" 187 | signal-exit "^3.0.3" 188 | strip-final-newline "^2.0.0" 189 | 190 | find-cache-dir@^3.3.2: 191 | version "3.3.2" 192 | resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" 193 | integrity sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig== 194 | dependencies: 195 | commondir "^1.0.1" 196 | make-dir "^3.0.2" 197 | pkg-dir "^4.1.0" 198 | 199 | find-up@^4.0.0: 200 | version "4.1.0" 201 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 202 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 203 | dependencies: 204 | locate-path "^5.0.0" 205 | path-exists "^4.0.0" 206 | 207 | find-up@^5.0.0: 208 | version "5.0.0" 209 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" 210 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== 211 | dependencies: 212 | locate-path "^6.0.0" 213 | path-exists "^4.0.0" 214 | 215 | fs-extra@^10.0.0: 216 | version "10.1.0" 217 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" 218 | integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== 219 | dependencies: 220 | graceful-fs "^4.2.0" 221 | jsonfile "^6.0.1" 222 | universalify "^2.0.0" 223 | 224 | fsevents@~2.3.2: 225 | version "2.3.2" 226 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 227 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 228 | 229 | function-bind@^1.1.1: 230 | version "1.1.1" 231 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 232 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 233 | 234 | get-stream@^6.0.0: 235 | version "6.0.1" 236 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 237 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 238 | 239 | graceful-fs@^4.1.6, graceful-fs@^4.2.0: 240 | version "4.2.10" 241 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 242 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 243 | 244 | has-flag@^3.0.0: 245 | version "3.0.0" 246 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 247 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 248 | 249 | has-flag@^4.0.0: 250 | version "4.0.0" 251 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 252 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 253 | 254 | has@^1.0.3: 255 | version "1.0.3" 256 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 257 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 258 | dependencies: 259 | function-bind "^1.1.1" 260 | 261 | human-signals@^2.1.0: 262 | version "2.1.0" 263 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 264 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 265 | 266 | is-builtin-module@^3.1.0: 267 | version "3.1.0" 268 | resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.1.0.tgz#6fdb24313b1c03b75f8b9711c0feb8c30b903b00" 269 | integrity sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg== 270 | dependencies: 271 | builtin-modules "^3.0.0" 272 | 273 | is-core-module@^2.8.1: 274 | version "2.9.0" 275 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" 276 | integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== 277 | dependencies: 278 | has "^1.0.3" 279 | 280 | is-module@^1.0.0: 281 | version "1.0.0" 282 | resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" 283 | integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= 284 | 285 | is-stream@^2.0.0: 286 | version "2.0.1" 287 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 288 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 289 | 290 | isexe@^2.0.0: 291 | version "2.0.0" 292 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 293 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= 294 | 295 | jest-worker@^26.2.1: 296 | version "26.6.2" 297 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.6.2.tgz#7f72cbc4d643c365e27b9fd775f9d0eaa9c7a8ed" 298 | integrity sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ== 299 | dependencies: 300 | "@types/node" "*" 301 | merge-stream "^2.0.0" 302 | supports-color "^7.0.0" 303 | 304 | js-cleanup@^1.2.0: 305 | version "1.2.0" 306 | resolved "https://registry.yarnpkg.com/js-cleanup/-/js-cleanup-1.2.0.tgz#8dbc65954b1d38b255f1e8cf02cd17b3f7a053f9" 307 | integrity sha512-JeDD0yiiSt80fXzAVa/crrS0JDPQljyBG/RpOtaSbyDq03VHa9szJWMaWOYU/bcTn412uMN2MxApXq8v79cUiQ== 308 | dependencies: 309 | magic-string "^0.25.7" 310 | perf-regexes "^1.0.1" 311 | skip-regex "^1.0.2" 312 | 313 | js-tokens@^4.0.0: 314 | version "4.0.0" 315 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 316 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 317 | 318 | jsonfile@^6.0.1: 319 | version "6.1.0" 320 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" 321 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== 322 | dependencies: 323 | universalify "^2.0.0" 324 | optionalDependencies: 325 | graceful-fs "^4.1.6" 326 | 327 | locate-path@^5.0.0: 328 | version "5.0.0" 329 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 330 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 331 | dependencies: 332 | p-locate "^4.1.0" 333 | 334 | locate-path@^6.0.0: 335 | version "6.0.0" 336 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" 337 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== 338 | dependencies: 339 | p-locate "^5.0.0" 340 | 341 | lodash.sortby@^4.7.0: 342 | version "4.7.0" 343 | resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" 344 | integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= 345 | 346 | magic-string@^0.25.7: 347 | version "0.25.9" 348 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.9.tgz#de7f9faf91ef8a1c91d02c2e5314c8277dbcdd1c" 349 | integrity sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ== 350 | dependencies: 351 | sourcemap-codec "^1.4.8" 352 | 353 | make-dir@^3.0.2: 354 | version "3.1.0" 355 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 356 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 357 | dependencies: 358 | semver "^6.0.0" 359 | 360 | merge-stream@^2.0.0: 361 | version "2.0.0" 362 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 363 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 364 | 365 | mimic-fn@^2.1.0: 366 | version "2.1.0" 367 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 368 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 369 | 370 | npm-run-path@^4.0.1: 371 | version "4.0.1" 372 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 373 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 374 | dependencies: 375 | path-key "^3.0.0" 376 | 377 | onetime@^5.1.2: 378 | version "5.1.2" 379 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 380 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 381 | dependencies: 382 | mimic-fn "^2.1.0" 383 | 384 | p-limit@^2.2.0: 385 | version "2.3.0" 386 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 387 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 388 | dependencies: 389 | p-try "^2.0.0" 390 | 391 | p-limit@^3.0.2: 392 | version "3.1.0" 393 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 394 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 395 | dependencies: 396 | yocto-queue "^0.1.0" 397 | 398 | p-locate@^4.1.0: 399 | version "4.1.0" 400 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 401 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 402 | dependencies: 403 | p-limit "^2.2.0" 404 | 405 | p-locate@^5.0.0: 406 | version "5.0.0" 407 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" 408 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== 409 | dependencies: 410 | p-limit "^3.0.2" 411 | 412 | p-try@^2.0.0: 413 | version "2.2.0" 414 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 415 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 416 | 417 | path-exists@^4.0.0: 418 | version "4.0.0" 419 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 420 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 421 | 422 | path-is-network-drive@^1.0.13: 423 | version "1.0.13" 424 | resolved "https://registry.yarnpkg.com/path-is-network-drive/-/path-is-network-drive-1.0.13.tgz#c9aa0183eb72c328aa83f43def93ddcb9d7ec4d4" 425 | integrity sha512-Hg74mRN6mmXV+gTm3INjFK40ncAmC/Lo4qoQaSZ+GT3hZzlKdWQSqAjqyPeW0SvObP2W073WyYEBWY9d3wOm3A== 426 | dependencies: 427 | tslib "^2.3.1" 428 | 429 | path-key@^3.0.0, path-key@^3.1.0: 430 | version "3.1.1" 431 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 432 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 433 | 434 | path-parse@^1.0.7: 435 | version "1.0.7" 436 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 437 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 438 | 439 | path-strip-sep@^1.0.10: 440 | version "1.0.10" 441 | resolved "https://registry.yarnpkg.com/path-strip-sep/-/path-strip-sep-1.0.10.tgz#2be4e789406b298af8709ff79af716134b733b98" 442 | integrity sha512-JpCy+8LAJQQTO1bQsb/84s1g+/Stm3h39aOpPRBQ/paMUGVPPZChLTOTKHoaCkc/6sKuF7yVsnq5Pe1S6xQGcA== 443 | dependencies: 444 | tslib "^2.3.1" 445 | 446 | perf-regexes@^1.0.1: 447 | version "1.0.1" 448 | resolved "https://registry.yarnpkg.com/perf-regexes/-/perf-regexes-1.0.1.tgz#6da1d62f5a94bf9353a0451bccacf69068b75d0b" 449 | integrity sha512-L7MXxUDtqr4PUaLFCDCXBfGV/6KLIuSEccizDI7JxT+c9x1G1v04BQ4+4oag84SHaCdrBgQAIs/Cqn+flwFPng== 450 | 451 | picomatch@^2.2.2: 452 | version "2.3.1" 453 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 454 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 455 | 456 | "pkg-dir@< 6 >= 5": 457 | version "5.0.0" 458 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" 459 | integrity sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA== 460 | dependencies: 461 | find-up "^5.0.0" 462 | 463 | pkg-dir@^4.1.0: 464 | version "4.2.0" 465 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 466 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 467 | dependencies: 468 | find-up "^4.0.0" 469 | 470 | punycode@^2.1.0: 471 | version "2.1.1" 472 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" 473 | integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== 474 | 475 | randombytes@^2.1.0: 476 | version "2.1.0" 477 | resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" 478 | integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== 479 | dependencies: 480 | safe-buffer "^5.1.0" 481 | 482 | resolve@^1.19.0, resolve@^1.20.0: 483 | version "1.22.0" 484 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.0.tgz#5e0b8c67c15df57a89bdbabe603a002f21731198" 485 | integrity sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw== 486 | dependencies: 487 | is-core-module "^2.8.1" 488 | path-parse "^1.0.7" 489 | supports-preserve-symlinks-flag "^1.0.0" 490 | 491 | rollup-plugin-cleanup@^3.2.1: 492 | version "3.2.1" 493 | resolved "https://registry.yarnpkg.com/rollup-plugin-cleanup/-/rollup-plugin-cleanup-3.2.1.tgz#8cbc92ecf58babd7c210051929797f137bbf777c" 494 | integrity sha512-zuv8EhoO3TpnrU8MX8W7YxSbO4gmOR0ny06Lm3nkFfq0IVKdBUtHwhVzY1OAJyNCIAdLiyPnOrU0KnO0Fri1GQ== 495 | dependencies: 496 | js-cleanup "^1.2.0" 497 | rollup-pluginutils "^2.8.2" 498 | 499 | rollup-plugin-terser@^7.0.2: 500 | version "7.0.2" 501 | resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz#e8fbba4869981b2dc35ae7e8a502d5c6c04d324d" 502 | integrity sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ== 503 | dependencies: 504 | "@babel/code-frame" "^7.10.4" 505 | jest-worker "^26.2.1" 506 | serialize-javascript "^4.0.0" 507 | terser "^5.0.0" 508 | 509 | rollup-plugin-typescript2@^0.31.2: 510 | version "0.31.2" 511 | resolved "https://registry.yarnpkg.com/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.31.2.tgz#463aa713a7e2bf85b92860094b9f7fb274c5a4d8" 512 | integrity sha512-hRwEYR1C8xDGVVMFJQdEVnNAeWRvpaY97g5mp3IeLnzhNXzSVq78Ye/BJ9PAaUfN4DXa/uDnqerifMOaMFY54Q== 513 | dependencies: 514 | "@rollup/pluginutils" "^4.1.2" 515 | "@yarn-tool/resolve-package" "^1.0.40" 516 | find-cache-dir "^3.3.2" 517 | fs-extra "^10.0.0" 518 | resolve "^1.20.0" 519 | tslib "^2.3.1" 520 | 521 | rollup-pluginutils@^2.8.2: 522 | version "2.8.2" 523 | resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" 524 | integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== 525 | dependencies: 526 | estree-walker "^0.6.1" 527 | 528 | rollup@^2.72.1: 529 | version "2.72.1" 530 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-2.72.1.tgz#861c94790537b10008f0ca0fbc60e631aabdd045" 531 | integrity sha512-NTc5UGy/NWFGpSqF1lFY8z9Adri6uhyMLI6LvPAXdBKoPRFhIIiBUpt+Qg2awixqO3xvzSijjhnb4+QEZwJmxA== 532 | optionalDependencies: 533 | fsevents "~2.3.2" 534 | 535 | safe-buffer@^5.1.0: 536 | version "5.2.1" 537 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 538 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 539 | 540 | semver@^6.0.0: 541 | version "6.3.0" 542 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 543 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 544 | 545 | serialize-javascript@^4.0.0: 546 | version "4.0.0" 547 | resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz#b525e1238489a5ecfc42afacc3fe99e666f4b1aa" 548 | integrity sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw== 549 | dependencies: 550 | randombytes "^2.1.0" 551 | 552 | shebang-command@^2.0.0: 553 | version "2.0.0" 554 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 555 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 556 | dependencies: 557 | shebang-regex "^3.0.0" 558 | 559 | shebang-regex@^3.0.0: 560 | version "3.0.0" 561 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 562 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 563 | 564 | signal-exit@^3.0.3: 565 | version "3.0.7" 566 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 567 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 568 | 569 | skip-regex@^1.0.2: 570 | version "1.0.2" 571 | resolved "https://registry.yarnpkg.com/skip-regex/-/skip-regex-1.0.2.tgz#ac655d77e7c771ac2b9f37585fea37bff56ad65b" 572 | integrity sha512-pEjMUbwJ5Pl/6Vn6FsamXHXItJXSRftcibixDmNCWbWhic0hzHrwkMZo0IZ7fMRH9KxcWDFSkzhccB4285PutA== 573 | 574 | source-map-support@~0.5.20: 575 | version "0.5.21" 576 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" 577 | integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== 578 | dependencies: 579 | buffer-from "^1.0.0" 580 | source-map "^0.6.0" 581 | 582 | source-map@^0.6.0: 583 | version "0.6.1" 584 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 585 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 586 | 587 | source-map@~0.8.0-beta.0: 588 | version "0.8.0-beta.0" 589 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.8.0-beta.0.tgz#d4c1bb42c3f7ee925f005927ba10709e0d1d1f11" 590 | integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== 591 | dependencies: 592 | whatwg-url "^7.0.0" 593 | 594 | sourcemap-codec@^1.4.8: 595 | version "1.4.8" 596 | resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" 597 | integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== 598 | 599 | strip-final-newline@^2.0.0: 600 | version "2.0.0" 601 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 602 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 603 | 604 | supports-color@^5.3.0: 605 | version "5.5.0" 606 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 607 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 608 | dependencies: 609 | has-flag "^3.0.0" 610 | 611 | supports-color@^7.0.0: 612 | version "7.2.0" 613 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 614 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 615 | dependencies: 616 | has-flag "^4.0.0" 617 | 618 | supports-preserve-symlinks-flag@^1.0.0: 619 | version "1.0.0" 620 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 621 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 622 | 623 | terser@^5.0.0: 624 | version "5.13.1" 625 | resolved "https://registry.yarnpkg.com/terser/-/terser-5.13.1.tgz#66332cdc5a01b04a224c9fad449fc1a18eaa1799" 626 | integrity sha512-hn4WKOfwnwbYfe48NgrQjqNOH9jzLqRcIfbYytOXCOv46LBfWr9bDS17MQqOi+BWGD0sJK3Sj5NC/gJjiojaoA== 627 | dependencies: 628 | acorn "^8.5.0" 629 | commander "^2.20.0" 630 | source-map "~0.8.0-beta.0" 631 | source-map-support "~0.5.20" 632 | 633 | tr46@^1.0.1: 634 | version "1.0.1" 635 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" 636 | integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= 637 | dependencies: 638 | punycode "^2.1.0" 639 | 640 | tslib@^2.3.1: 641 | version "2.4.0" 642 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 643 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 644 | 645 | typescript@^4.6.4: 646 | version "4.6.4" 647 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.6.4.tgz#caa78bbc3a59e6a5c510d35703f6a09877ce45e9" 648 | integrity sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg== 649 | 650 | universalify@^2.0.0: 651 | version "2.0.0" 652 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" 653 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== 654 | 655 | upath2@^3.1.12: 656 | version "3.1.12" 657 | resolved "https://registry.yarnpkg.com/upath2/-/upath2-3.1.12.tgz#441b3dfbadde21731017bd1b7beb169498efd0a9" 658 | integrity sha512-yC3eZeCyCXFWjy7Nu4pgjLhXNYjuzuUmJiRgSSw6TJp8Emc+E4951HGPJf+bldFC5SL7oBLeNbtm1fGzXn2gxw== 659 | dependencies: 660 | path-is-network-drive "^1.0.13" 661 | path-strip-sep "^1.0.10" 662 | tslib "^2.3.1" 663 | 664 | webidl-conversions@^4.0.2: 665 | version "4.0.2" 666 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" 667 | integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== 668 | 669 | whatwg-url@^7.0.0: 670 | version "7.1.0" 671 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" 672 | integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== 673 | dependencies: 674 | lodash.sortby "^4.7.0" 675 | tr46 "^1.0.1" 676 | webidl-conversions "^4.0.2" 677 | 678 | which@^2.0.1: 679 | version "2.0.2" 680 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 681 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 682 | dependencies: 683 | isexe "^2.0.0" 684 | 685 | yocto-queue@^0.1.0: 686 | version "0.1.0" 687 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 688 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 689 | --------------------------------------------------------------------------------