├── .gitignore ├── lolomo.Dockerfile ├── main.Dockerfile ├── package-lock.json ├── package.json ├── proto └── lolomo.proto ├── ratings.Dockerfile ├── src ├── consts.ts ├── lolomo │ ├── helpers.ts │ ├── index.ts │ ├── lolomo.ts │ └── proto.ts ├── main │ └── index.ts ├── proto │ └── lolomo.ts ├── ratings │ └── index.ts ├── types.ts └── utils.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | dist 3 | build 4 | node_modules 5 | target 6 | 7 | -------------------------------------------------------------------------------- /lolomo.Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePrimeagen/json-vs-proto/7fe583f5088bed5c53e3a0a38a12672ba8367416/lolomo.Dockerfile -------------------------------------------------------------------------------- /main.Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:19 2 | WORKDIR /app 3 | COPY package.json /app/package.json 4 | RUN npm install 5 | COPY src /app/src 6 | RUN npm build 7 | EXPOSE 8080 8 | ARG RATINGS_SERVICE_URL 9 | ARG LOLOMO_SERVICE_URL 10 | CMD [ "node", "server.js" ] 11 | 12 | 13 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "json-proto", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "json-proto", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "google-protobuf": "^3.21.2", 13 | "npm-run-all": "^4.1.5", 14 | "ts-proto": "^1.146.0" 15 | }, 16 | "devDependencies": { 17 | "protoc-gen-js": "^3.21.2", 18 | "ts-node": "^10.9.1", 19 | "typescript": "^5.0.4" 20 | } 21 | }, 22 | "node_modules/@cspotcode/source-map-support": { 23 | "version": "0.8.1", 24 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 25 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 26 | "dev": true, 27 | "dependencies": { 28 | "@jridgewell/trace-mapping": "0.3.9" 29 | }, 30 | "engines": { 31 | "node": ">=12" 32 | } 33 | }, 34 | "node_modules/@jridgewell/resolve-uri": { 35 | "version": "3.1.1", 36 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 37 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 38 | "dev": true, 39 | "engines": { 40 | "node": ">=6.0.0" 41 | } 42 | }, 43 | "node_modules/@jridgewell/sourcemap-codec": { 44 | "version": "1.4.15", 45 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 46 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 47 | "dev": true 48 | }, 49 | "node_modules/@jridgewell/trace-mapping": { 50 | "version": "0.3.9", 51 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 52 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 53 | "dev": true, 54 | "dependencies": { 55 | "@jridgewell/resolve-uri": "^3.0.3", 56 | "@jridgewell/sourcemap-codec": "^1.4.10" 57 | } 58 | }, 59 | "node_modules/@protobufjs/aspromise": { 60 | "version": "1.1.2", 61 | "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", 62 | "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" 63 | }, 64 | "node_modules/@protobufjs/base64": { 65 | "version": "1.1.2", 66 | "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", 67 | "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" 68 | }, 69 | "node_modules/@protobufjs/codegen": { 70 | "version": "2.0.4", 71 | "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", 72 | "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" 73 | }, 74 | "node_modules/@protobufjs/eventemitter": { 75 | "version": "1.1.0", 76 | "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", 77 | "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" 78 | }, 79 | "node_modules/@protobufjs/fetch": { 80 | "version": "1.1.0", 81 | "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", 82 | "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", 83 | "dependencies": { 84 | "@protobufjs/aspromise": "^1.1.1", 85 | "@protobufjs/inquire": "^1.1.0" 86 | } 87 | }, 88 | "node_modules/@protobufjs/float": { 89 | "version": "1.0.2", 90 | "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", 91 | "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" 92 | }, 93 | "node_modules/@protobufjs/inquire": { 94 | "version": "1.1.0", 95 | "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", 96 | "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" 97 | }, 98 | "node_modules/@protobufjs/path": { 99 | "version": "1.1.2", 100 | "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", 101 | "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" 102 | }, 103 | "node_modules/@protobufjs/pool": { 104 | "version": "1.1.0", 105 | "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", 106 | "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" 107 | }, 108 | "node_modules/@protobufjs/utf8": { 109 | "version": "1.1.0", 110 | "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", 111 | "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" 112 | }, 113 | "node_modules/@sindresorhus/is": { 114 | "version": "0.7.0", 115 | "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", 116 | "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==", 117 | "dev": true, 118 | "engines": { 119 | "node": ">=4" 120 | } 121 | }, 122 | "node_modules/@tsconfig/node10": { 123 | "version": "1.0.9", 124 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 125 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", 126 | "dev": true 127 | }, 128 | "node_modules/@tsconfig/node12": { 129 | "version": "1.0.11", 130 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 131 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", 132 | "dev": true 133 | }, 134 | "node_modules/@tsconfig/node14": { 135 | "version": "1.0.3", 136 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 137 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", 138 | "dev": true 139 | }, 140 | "node_modules/@tsconfig/node16": { 141 | "version": "1.0.3", 142 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", 143 | "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", 144 | "dev": true 145 | }, 146 | "node_modules/@types/long": { 147 | "version": "4.0.2", 148 | "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", 149 | "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" 150 | }, 151 | "node_modules/@types/node": { 152 | "version": "18.15.12", 153 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.12.tgz", 154 | "integrity": "sha512-Wha1UwsB3CYdqUm2PPzh/1gujGCNtWVUYF0mB00fJFoR4gTyWTDPjSm+zBF787Ahw8vSGgBja90MkgFwvB86Dg==" 155 | }, 156 | "node_modules/@types/object-hash": { 157 | "version": "1.3.4", 158 | "resolved": "https://registry.npmjs.org/@types/object-hash/-/object-hash-1.3.4.tgz", 159 | "integrity": "sha512-xFdpkAkikBgqBdG9vIlsqffDV8GpvnPEzs0IUtr1v3BEB97ijsFQ4RXVbUZwjFThhB4MDSTUfvmxUD5PGx0wXA==" 160 | }, 161 | "node_modules/acorn": { 162 | "version": "8.8.2", 163 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", 164 | "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", 165 | "dev": true, 166 | "bin": { 167 | "acorn": "bin/acorn" 168 | }, 169 | "engines": { 170 | "node": ">=0.4.0" 171 | } 172 | }, 173 | "node_modules/acorn-walk": { 174 | "version": "8.2.0", 175 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", 176 | "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", 177 | "dev": true, 178 | "engines": { 179 | "node": ">=0.4.0" 180 | } 181 | }, 182 | "node_modules/adm-zip": { 183 | "version": "0.5.10", 184 | "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.5.10.tgz", 185 | "integrity": "sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==", 186 | "dev": true, 187 | "engines": { 188 | "node": ">=6.0" 189 | } 190 | }, 191 | "node_modules/ansi-styles": { 192 | "version": "3.2.1", 193 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 194 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 195 | "dependencies": { 196 | "color-convert": "^1.9.0" 197 | }, 198 | "engines": { 199 | "node": ">=4" 200 | } 201 | }, 202 | "node_modules/archive-type": { 203 | "version": "4.0.0", 204 | "resolved": "https://registry.npmjs.org/archive-type/-/archive-type-4.0.0.tgz", 205 | "integrity": "sha512-zV4Ky0v1F8dBrdYElwTvQhweQ0P7Kwc1aluqJsYtOBP01jXcWCyW2IEfI1YiqsG+Iy7ZR+o5LF1N+PGECBxHWA==", 206 | "dev": true, 207 | "dependencies": { 208 | "file-type": "^4.2.0" 209 | }, 210 | "engines": { 211 | "node": ">=4" 212 | } 213 | }, 214 | "node_modules/archive-type/node_modules/file-type": { 215 | "version": "4.4.0", 216 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", 217 | "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", 218 | "dev": true, 219 | "engines": { 220 | "node": ">=4" 221 | } 222 | }, 223 | "node_modules/arg": { 224 | "version": "4.1.3", 225 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 226 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", 227 | "dev": true 228 | }, 229 | "node_modules/array-buffer-byte-length": { 230 | "version": "1.0.0", 231 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", 232 | "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", 233 | "dependencies": { 234 | "call-bind": "^1.0.2", 235 | "is-array-buffer": "^3.0.1" 236 | }, 237 | "funding": { 238 | "url": "https://github.com/sponsors/ljharb" 239 | } 240 | }, 241 | "node_modules/available-typed-arrays": { 242 | "version": "1.0.5", 243 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 244 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 245 | "engines": { 246 | "node": ">= 0.4" 247 | }, 248 | "funding": { 249 | "url": "https://github.com/sponsors/ljharb" 250 | } 251 | }, 252 | "node_modules/balanced-match": { 253 | "version": "1.0.2", 254 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 255 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 256 | }, 257 | "node_modules/base64-js": { 258 | "version": "1.5.1", 259 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 260 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 261 | "dev": true, 262 | "funding": [ 263 | { 264 | "type": "github", 265 | "url": "https://github.com/sponsors/feross" 266 | }, 267 | { 268 | "type": "patreon", 269 | "url": "https://www.patreon.com/feross" 270 | }, 271 | { 272 | "type": "consulting", 273 | "url": "https://feross.org/support" 274 | } 275 | ] 276 | }, 277 | "node_modules/bl": { 278 | "version": "1.2.3", 279 | "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", 280 | "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", 281 | "dev": true, 282 | "dependencies": { 283 | "readable-stream": "^2.3.5", 284 | "safe-buffer": "^5.1.1" 285 | } 286 | }, 287 | "node_modules/brace-expansion": { 288 | "version": "1.1.11", 289 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 290 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 291 | "dependencies": { 292 | "balanced-match": "^1.0.0", 293 | "concat-map": "0.0.1" 294 | } 295 | }, 296 | "node_modules/buffer": { 297 | "version": "5.7.1", 298 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 299 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 300 | "dev": true, 301 | "funding": [ 302 | { 303 | "type": "github", 304 | "url": "https://github.com/sponsors/feross" 305 | }, 306 | { 307 | "type": "patreon", 308 | "url": "https://www.patreon.com/feross" 309 | }, 310 | { 311 | "type": "consulting", 312 | "url": "https://feross.org/support" 313 | } 314 | ], 315 | "dependencies": { 316 | "base64-js": "^1.3.1", 317 | "ieee754": "^1.1.13" 318 | } 319 | }, 320 | "node_modules/buffer-alloc": { 321 | "version": "1.2.0", 322 | "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", 323 | "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", 324 | "dev": true, 325 | "dependencies": { 326 | "buffer-alloc-unsafe": "^1.1.0", 327 | "buffer-fill": "^1.0.0" 328 | } 329 | }, 330 | "node_modules/buffer-alloc-unsafe": { 331 | "version": "1.1.0", 332 | "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", 333 | "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", 334 | "dev": true 335 | }, 336 | "node_modules/buffer-crc32": { 337 | "version": "0.2.13", 338 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 339 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 340 | "dev": true, 341 | "engines": { 342 | "node": "*" 343 | } 344 | }, 345 | "node_modules/buffer-fill": { 346 | "version": "1.0.0", 347 | "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", 348 | "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", 349 | "dev": true 350 | }, 351 | "node_modules/cacheable-request": { 352 | "version": "2.1.4", 353 | "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", 354 | "integrity": "sha512-vag0O2LKZ/najSoUwDbVlnlCFvhBE/7mGTY2B5FgCBDcRD+oVV1HYTOwM6JZfMg/hIcM6IwnTZ1uQQL5/X3xIQ==", 355 | "dev": true, 356 | "dependencies": { 357 | "clone-response": "1.0.2", 358 | "get-stream": "3.0.0", 359 | "http-cache-semantics": "3.8.1", 360 | "keyv": "3.0.0", 361 | "lowercase-keys": "1.0.0", 362 | "normalize-url": "2.0.1", 363 | "responselike": "1.0.2" 364 | } 365 | }, 366 | "node_modules/cacheable-request/node_modules/get-stream": { 367 | "version": "3.0.0", 368 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 369 | "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", 370 | "dev": true, 371 | "engines": { 372 | "node": ">=4" 373 | } 374 | }, 375 | "node_modules/cacheable-request/node_modules/lowercase-keys": { 376 | "version": "1.0.0", 377 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", 378 | "integrity": "sha512-RPlX0+PHuvxVDZ7xX+EBVAp4RsVxP/TdDSN2mJYdiq1Lc4Hz7EUSjUI7RZrKKlmrIzVhf6Jo2stj7++gVarS0A==", 379 | "dev": true, 380 | "engines": { 381 | "node": ">=0.10.0" 382 | } 383 | }, 384 | "node_modules/call-bind": { 385 | "version": "1.0.2", 386 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", 387 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", 388 | "dependencies": { 389 | "function-bind": "^1.1.1", 390 | "get-intrinsic": "^1.0.2" 391 | }, 392 | "funding": { 393 | "url": "https://github.com/sponsors/ljharb" 394 | } 395 | }, 396 | "node_modules/case-anything": { 397 | "version": "2.1.10", 398 | "resolved": "https://registry.npmjs.org/case-anything/-/case-anything-2.1.10.tgz", 399 | "integrity": "sha512-JczJwVrCP0jPKh05McyVsuOg6AYosrB9XWZKbQzXeDAm2ClE/PJE/BcrrQrVyGYH7Jg8V/LDupmyL4kFlVsVFQ==", 400 | "engines": { 401 | "node": ">=12.13" 402 | }, 403 | "funding": { 404 | "url": "https://github.com/sponsors/mesqueeb" 405 | } 406 | }, 407 | "node_modules/chalk": { 408 | "version": "2.4.2", 409 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 410 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 411 | "dependencies": { 412 | "ansi-styles": "^3.2.1", 413 | "escape-string-regexp": "^1.0.5", 414 | "supports-color": "^5.3.0" 415 | }, 416 | "engines": { 417 | "node": ">=4" 418 | } 419 | }, 420 | "node_modules/clone-response": { 421 | "version": "1.0.2", 422 | "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", 423 | "integrity": "sha512-yjLXh88P599UOyPTFX0POsd7WxnbsVsGohcwzHOLspIhhpalPw1BcqED8NblyZLKcGrL8dTgMlcaZxV2jAD41Q==", 424 | "dev": true, 425 | "dependencies": { 426 | "mimic-response": "^1.0.0" 427 | } 428 | }, 429 | "node_modules/color-convert": { 430 | "version": "1.9.3", 431 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 432 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 433 | "dependencies": { 434 | "color-name": "1.1.3" 435 | } 436 | }, 437 | "node_modules/color-name": { 438 | "version": "1.1.3", 439 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 440 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 441 | }, 442 | "node_modules/commander": { 443 | "version": "2.20.3", 444 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 445 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 446 | "dev": true 447 | }, 448 | "node_modules/concat-map": { 449 | "version": "0.0.1", 450 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 451 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 452 | }, 453 | "node_modules/content-disposition": { 454 | "version": "0.5.4", 455 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 456 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 457 | "dev": true, 458 | "dependencies": { 459 | "safe-buffer": "5.2.1" 460 | }, 461 | "engines": { 462 | "node": ">= 0.6" 463 | } 464 | }, 465 | "node_modules/core-util-is": { 466 | "version": "1.0.3", 467 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 468 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 469 | "dev": true 470 | }, 471 | "node_modules/create-require": { 472 | "version": "1.1.1", 473 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 474 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", 475 | "dev": true 476 | }, 477 | "node_modules/cross-spawn": { 478 | "version": "6.0.5", 479 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", 480 | "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", 481 | "dependencies": { 482 | "nice-try": "^1.0.4", 483 | "path-key": "^2.0.1", 484 | "semver": "^5.5.0", 485 | "shebang-command": "^1.2.0", 486 | "which": "^1.2.9" 487 | }, 488 | "engines": { 489 | "node": ">=4.8" 490 | } 491 | }, 492 | "node_modules/dataloader": { 493 | "version": "1.4.0", 494 | "resolved": "https://registry.npmjs.org/dataloader/-/dataloader-1.4.0.tgz", 495 | "integrity": "sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==" 496 | }, 497 | "node_modules/decode-uri-component": { 498 | "version": "0.2.2", 499 | "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", 500 | "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", 501 | "dev": true, 502 | "engines": { 503 | "node": ">=0.10" 504 | } 505 | }, 506 | "node_modules/decompress": { 507 | "version": "4.2.1", 508 | "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", 509 | "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", 510 | "dev": true, 511 | "dependencies": { 512 | "decompress-tar": "^4.0.0", 513 | "decompress-tarbz2": "^4.0.0", 514 | "decompress-targz": "^4.0.0", 515 | "decompress-unzip": "^4.0.1", 516 | "graceful-fs": "^4.1.10", 517 | "make-dir": "^1.0.0", 518 | "pify": "^2.3.0", 519 | "strip-dirs": "^2.0.0" 520 | }, 521 | "engines": { 522 | "node": ">=4" 523 | } 524 | }, 525 | "node_modules/decompress-response": { 526 | "version": "3.3.0", 527 | "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", 528 | "integrity": "sha512-BzRPQuY1ip+qDonAOz42gRm/pg9F768C+npV/4JOsxRC2sq+Rlk+Q4ZCAsOhnIaMrgarILY+RMUIvMmmX1qAEA==", 529 | "dev": true, 530 | "dependencies": { 531 | "mimic-response": "^1.0.0" 532 | }, 533 | "engines": { 534 | "node": ">=4" 535 | } 536 | }, 537 | "node_modules/decompress-tar": { 538 | "version": "4.1.1", 539 | "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", 540 | "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", 541 | "dev": true, 542 | "dependencies": { 543 | "file-type": "^5.2.0", 544 | "is-stream": "^1.1.0", 545 | "tar-stream": "^1.5.2" 546 | }, 547 | "engines": { 548 | "node": ">=4" 549 | } 550 | }, 551 | "node_modules/decompress-tar/node_modules/file-type": { 552 | "version": "5.2.0", 553 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", 554 | "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", 555 | "dev": true, 556 | "engines": { 557 | "node": ">=4" 558 | } 559 | }, 560 | "node_modules/decompress-tarbz2": { 561 | "version": "4.1.1", 562 | "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", 563 | "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", 564 | "dev": true, 565 | "dependencies": { 566 | "decompress-tar": "^4.1.0", 567 | "file-type": "^6.1.0", 568 | "is-stream": "^1.1.0", 569 | "seek-bzip": "^1.0.5", 570 | "unbzip2-stream": "^1.0.9" 571 | }, 572 | "engines": { 573 | "node": ">=4" 574 | } 575 | }, 576 | "node_modules/decompress-tarbz2/node_modules/file-type": { 577 | "version": "6.2.0", 578 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", 579 | "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", 580 | "dev": true, 581 | "engines": { 582 | "node": ">=4" 583 | } 584 | }, 585 | "node_modules/decompress-targz": { 586 | "version": "4.1.1", 587 | "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", 588 | "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", 589 | "dev": true, 590 | "dependencies": { 591 | "decompress-tar": "^4.1.1", 592 | "file-type": "^5.2.0", 593 | "is-stream": "^1.1.0" 594 | }, 595 | "engines": { 596 | "node": ">=4" 597 | } 598 | }, 599 | "node_modules/decompress-targz/node_modules/file-type": { 600 | "version": "5.2.0", 601 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", 602 | "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", 603 | "dev": true, 604 | "engines": { 605 | "node": ">=4" 606 | } 607 | }, 608 | "node_modules/decompress-unzip": { 609 | "version": "4.0.1", 610 | "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", 611 | "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", 612 | "dev": true, 613 | "dependencies": { 614 | "file-type": "^3.8.0", 615 | "get-stream": "^2.2.0", 616 | "pify": "^2.3.0", 617 | "yauzl": "^2.4.2" 618 | }, 619 | "engines": { 620 | "node": ">=4" 621 | } 622 | }, 623 | "node_modules/decompress-unzip/node_modules/file-type": { 624 | "version": "3.9.0", 625 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", 626 | "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", 627 | "dev": true, 628 | "engines": { 629 | "node": ">=0.10.0" 630 | } 631 | }, 632 | "node_modules/decompress-unzip/node_modules/get-stream": { 633 | "version": "2.3.1", 634 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", 635 | "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", 636 | "dev": true, 637 | "dependencies": { 638 | "object-assign": "^4.0.1", 639 | "pinkie-promise": "^2.0.0" 640 | }, 641 | "engines": { 642 | "node": ">=0.10.0" 643 | } 644 | }, 645 | "node_modules/decompress-unzip/node_modules/pify": { 646 | "version": "2.3.0", 647 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 648 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 649 | "dev": true, 650 | "engines": { 651 | "node": ">=0.10.0" 652 | } 653 | }, 654 | "node_modules/decompress/node_modules/make-dir": { 655 | "version": "1.3.0", 656 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", 657 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", 658 | "dev": true, 659 | "dependencies": { 660 | "pify": "^3.0.0" 661 | }, 662 | "engines": { 663 | "node": ">=4" 664 | } 665 | }, 666 | "node_modules/decompress/node_modules/make-dir/node_modules/pify": { 667 | "version": "3.0.0", 668 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 669 | "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", 670 | "dev": true, 671 | "engines": { 672 | "node": ">=4" 673 | } 674 | }, 675 | "node_modules/decompress/node_modules/pify": { 676 | "version": "2.3.0", 677 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 678 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 679 | "dev": true, 680 | "engines": { 681 | "node": ">=0.10.0" 682 | } 683 | }, 684 | "node_modules/define-properties": { 685 | "version": "1.2.0", 686 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", 687 | "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", 688 | "dependencies": { 689 | "has-property-descriptors": "^1.0.0", 690 | "object-keys": "^1.1.1" 691 | }, 692 | "engines": { 693 | "node": ">= 0.4" 694 | }, 695 | "funding": { 696 | "url": "https://github.com/sponsors/ljharb" 697 | } 698 | }, 699 | "node_modules/detect-libc": { 700 | "version": "1.0.3", 701 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 702 | "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", 703 | "bin": { 704 | "detect-libc": "bin/detect-libc.js" 705 | }, 706 | "engines": { 707 | "node": ">=0.10" 708 | } 709 | }, 710 | "node_modules/diff": { 711 | "version": "4.0.2", 712 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 713 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 714 | "dev": true, 715 | "engines": { 716 | "node": ">=0.3.1" 717 | } 718 | }, 719 | "node_modules/download": { 720 | "version": "8.0.0", 721 | "resolved": "https://registry.npmjs.org/download/-/download-8.0.0.tgz", 722 | "integrity": "sha512-ASRY5QhDk7FK+XrQtQyvhpDKanLluEEQtWl/J7Lxuf/b+i8RYh997QeXvL85xitrmRKVlx9c7eTrcRdq2GS4eA==", 723 | "dev": true, 724 | "dependencies": { 725 | "archive-type": "^4.0.0", 726 | "content-disposition": "^0.5.2", 727 | "decompress": "^4.2.1", 728 | "ext-name": "^5.0.0", 729 | "file-type": "^11.1.0", 730 | "filenamify": "^3.0.0", 731 | "get-stream": "^4.1.0", 732 | "got": "^8.3.1", 733 | "make-dir": "^2.1.0", 734 | "p-event": "^2.1.0", 735 | "pify": "^4.0.1" 736 | }, 737 | "engines": { 738 | "node": ">=10" 739 | } 740 | }, 741 | "node_modules/dprint-node": { 742 | "version": "1.0.7", 743 | "resolved": "https://registry.npmjs.org/dprint-node/-/dprint-node-1.0.7.tgz", 744 | "integrity": "sha512-NTZOW9A7ipb0n7z7nC3wftvsbceircwVHSgzobJsEQa+7RnOMbhrfX5IflA6CtC4GA63DSAiHYXa4JKEy9F7cA==", 745 | "dependencies": { 746 | "detect-libc": "^1.0.3" 747 | } 748 | }, 749 | "node_modules/duplexer3": { 750 | "version": "0.1.5", 751 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.5.tgz", 752 | "integrity": "sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA==", 753 | "dev": true 754 | }, 755 | "node_modules/end-of-stream": { 756 | "version": "1.4.4", 757 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", 758 | "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", 759 | "dev": true, 760 | "dependencies": { 761 | "once": "^1.4.0" 762 | } 763 | }, 764 | "node_modules/error-ex": { 765 | "version": "1.3.2", 766 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", 767 | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", 768 | "dependencies": { 769 | "is-arrayish": "^0.2.1" 770 | } 771 | }, 772 | "node_modules/es-abstract": { 773 | "version": "1.21.2", 774 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", 775 | "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", 776 | "dependencies": { 777 | "array-buffer-byte-length": "^1.0.0", 778 | "available-typed-arrays": "^1.0.5", 779 | "call-bind": "^1.0.2", 780 | "es-set-tostringtag": "^2.0.1", 781 | "es-to-primitive": "^1.2.1", 782 | "function.prototype.name": "^1.1.5", 783 | "get-intrinsic": "^1.2.0", 784 | "get-symbol-description": "^1.0.0", 785 | "globalthis": "^1.0.3", 786 | "gopd": "^1.0.1", 787 | "has": "^1.0.3", 788 | "has-property-descriptors": "^1.0.0", 789 | "has-proto": "^1.0.1", 790 | "has-symbols": "^1.0.3", 791 | "internal-slot": "^1.0.5", 792 | "is-array-buffer": "^3.0.2", 793 | "is-callable": "^1.2.7", 794 | "is-negative-zero": "^2.0.2", 795 | "is-regex": "^1.1.4", 796 | "is-shared-array-buffer": "^1.0.2", 797 | "is-string": "^1.0.7", 798 | "is-typed-array": "^1.1.10", 799 | "is-weakref": "^1.0.2", 800 | "object-inspect": "^1.12.3", 801 | "object-keys": "^1.1.1", 802 | "object.assign": "^4.1.4", 803 | "regexp.prototype.flags": "^1.4.3", 804 | "safe-regex-test": "^1.0.0", 805 | "string.prototype.trim": "^1.2.7", 806 | "string.prototype.trimend": "^1.0.6", 807 | "string.prototype.trimstart": "^1.0.6", 808 | "typed-array-length": "^1.0.4", 809 | "unbox-primitive": "^1.0.2", 810 | "which-typed-array": "^1.1.9" 811 | }, 812 | "engines": { 813 | "node": ">= 0.4" 814 | }, 815 | "funding": { 816 | "url": "https://github.com/sponsors/ljharb" 817 | } 818 | }, 819 | "node_modules/es-set-tostringtag": { 820 | "version": "2.0.1", 821 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", 822 | "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", 823 | "dependencies": { 824 | "get-intrinsic": "^1.1.3", 825 | "has": "^1.0.3", 826 | "has-tostringtag": "^1.0.0" 827 | }, 828 | "engines": { 829 | "node": ">= 0.4" 830 | } 831 | }, 832 | "node_modules/es-to-primitive": { 833 | "version": "1.2.1", 834 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 835 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 836 | "dependencies": { 837 | "is-callable": "^1.1.4", 838 | "is-date-object": "^1.0.1", 839 | "is-symbol": "^1.0.2" 840 | }, 841 | "engines": { 842 | "node": ">= 0.4" 843 | }, 844 | "funding": { 845 | "url": "https://github.com/sponsors/ljharb" 846 | } 847 | }, 848 | "node_modules/escape-string-regexp": { 849 | "version": "1.0.5", 850 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 851 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 852 | "engines": { 853 | "node": ">=0.8.0" 854 | } 855 | }, 856 | "node_modules/ext-list": { 857 | "version": "2.2.2", 858 | "resolved": "https://registry.npmjs.org/ext-list/-/ext-list-2.2.2.tgz", 859 | "integrity": "sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA==", 860 | "dev": true, 861 | "dependencies": { 862 | "mime-db": "^1.28.0" 863 | }, 864 | "engines": { 865 | "node": ">=0.10.0" 866 | } 867 | }, 868 | "node_modules/ext-name": { 869 | "version": "5.0.0", 870 | "resolved": "https://registry.npmjs.org/ext-name/-/ext-name-5.0.0.tgz", 871 | "integrity": "sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ==", 872 | "dev": true, 873 | "dependencies": { 874 | "ext-list": "^2.0.0", 875 | "sort-keys-length": "^1.0.0" 876 | }, 877 | "engines": { 878 | "node": ">=4" 879 | } 880 | }, 881 | "node_modules/fd-slicer": { 882 | "version": "1.1.0", 883 | "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", 884 | "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", 885 | "dev": true, 886 | "dependencies": { 887 | "pend": "~1.2.0" 888 | } 889 | }, 890 | "node_modules/file-type": { 891 | "version": "11.1.0", 892 | "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", 893 | "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", 894 | "dev": true, 895 | "engines": { 896 | "node": ">=6" 897 | } 898 | }, 899 | "node_modules/filename-reserved-regex": { 900 | "version": "2.0.0", 901 | "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", 902 | "integrity": "sha512-lc1bnsSr4L4Bdif8Xb/qrtokGbq5zlsms/CYH8PP+WtCkGNF65DPiQY8vG3SakEdRn8Dlnm+gW/qWKKjS5sZzQ==", 903 | "dev": true, 904 | "engines": { 905 | "node": ">=4" 906 | } 907 | }, 908 | "node_modules/filenamify": { 909 | "version": "3.0.0", 910 | "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-3.0.0.tgz", 911 | "integrity": "sha512-5EFZ//MsvJgXjBAFJ+Bh2YaCTRF/VP1YOmGrgt+KJ4SFRLjI87EIdwLLuT6wQX0I4F9W41xutobzczjsOKlI/g==", 912 | "dev": true, 913 | "dependencies": { 914 | "filename-reserved-regex": "^2.0.0", 915 | "strip-outer": "^1.0.0", 916 | "trim-repeated": "^1.0.0" 917 | }, 918 | "engines": { 919 | "node": ">=6" 920 | } 921 | }, 922 | "node_modules/for-each": { 923 | "version": "0.3.3", 924 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 925 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 926 | "dependencies": { 927 | "is-callable": "^1.1.3" 928 | } 929 | }, 930 | "node_modules/from2": { 931 | "version": "2.3.0", 932 | "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", 933 | "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", 934 | "dev": true, 935 | "dependencies": { 936 | "inherits": "^2.0.1", 937 | "readable-stream": "^2.0.0" 938 | } 939 | }, 940 | "node_modules/fs-constants": { 941 | "version": "1.0.0", 942 | "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", 943 | "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", 944 | "dev": true 945 | }, 946 | "node_modules/function-bind": { 947 | "version": "1.1.1", 948 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 949 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 950 | }, 951 | "node_modules/function.prototype.name": { 952 | "version": "1.1.5", 953 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", 954 | "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", 955 | "dependencies": { 956 | "call-bind": "^1.0.2", 957 | "define-properties": "^1.1.3", 958 | "es-abstract": "^1.19.0", 959 | "functions-have-names": "^1.2.2" 960 | }, 961 | "engines": { 962 | "node": ">= 0.4" 963 | }, 964 | "funding": { 965 | "url": "https://github.com/sponsors/ljharb" 966 | } 967 | }, 968 | "node_modules/functions-have-names": { 969 | "version": "1.2.3", 970 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 971 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 972 | "funding": { 973 | "url": "https://github.com/sponsors/ljharb" 974 | } 975 | }, 976 | "node_modules/get-intrinsic": { 977 | "version": "1.2.0", 978 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", 979 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", 980 | "dependencies": { 981 | "function-bind": "^1.1.1", 982 | "has": "^1.0.3", 983 | "has-symbols": "^1.0.3" 984 | }, 985 | "funding": { 986 | "url": "https://github.com/sponsors/ljharb" 987 | } 988 | }, 989 | "node_modules/get-stream": { 990 | "version": "4.1.0", 991 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", 992 | "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", 993 | "dev": true, 994 | "dependencies": { 995 | "pump": "^3.0.0" 996 | }, 997 | "engines": { 998 | "node": ">=6" 999 | } 1000 | }, 1001 | "node_modules/get-symbol-description": { 1002 | "version": "1.0.0", 1003 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 1004 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 1005 | "dependencies": { 1006 | "call-bind": "^1.0.2", 1007 | "get-intrinsic": "^1.1.1" 1008 | }, 1009 | "engines": { 1010 | "node": ">= 0.4" 1011 | }, 1012 | "funding": { 1013 | "url": "https://github.com/sponsors/ljharb" 1014 | } 1015 | }, 1016 | "node_modules/globalthis": { 1017 | "version": "1.0.3", 1018 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 1019 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 1020 | "dependencies": { 1021 | "define-properties": "^1.1.3" 1022 | }, 1023 | "engines": { 1024 | "node": ">= 0.4" 1025 | }, 1026 | "funding": { 1027 | "url": "https://github.com/sponsors/ljharb" 1028 | } 1029 | }, 1030 | "node_modules/google-protobuf": { 1031 | "version": "3.21.2", 1032 | "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.21.2.tgz", 1033 | "integrity": "sha512-3MSOYFO5U9mPGikIYCzK0SaThypfGgS6bHqrUGXG3DPHCrb+txNqeEcns1W0lkGfk0rCyNXm7xB9rMxnCiZOoA==" 1034 | }, 1035 | "node_modules/gopd": { 1036 | "version": "1.0.1", 1037 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1038 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1039 | "dependencies": { 1040 | "get-intrinsic": "^1.1.3" 1041 | }, 1042 | "funding": { 1043 | "url": "https://github.com/sponsors/ljharb" 1044 | } 1045 | }, 1046 | "node_modules/got": { 1047 | "version": "8.3.2", 1048 | "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", 1049 | "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", 1050 | "dev": true, 1051 | "dependencies": { 1052 | "@sindresorhus/is": "^0.7.0", 1053 | "cacheable-request": "^2.1.1", 1054 | "decompress-response": "^3.3.0", 1055 | "duplexer3": "^0.1.4", 1056 | "get-stream": "^3.0.0", 1057 | "into-stream": "^3.1.0", 1058 | "is-retry-allowed": "^1.1.0", 1059 | "isurl": "^1.0.0-alpha5", 1060 | "lowercase-keys": "^1.0.0", 1061 | "mimic-response": "^1.0.0", 1062 | "p-cancelable": "^0.4.0", 1063 | "p-timeout": "^2.0.1", 1064 | "pify": "^3.0.0", 1065 | "safe-buffer": "^5.1.1", 1066 | "timed-out": "^4.0.1", 1067 | "url-parse-lax": "^3.0.0", 1068 | "url-to-options": "^1.0.1" 1069 | }, 1070 | "engines": { 1071 | "node": ">=4" 1072 | } 1073 | }, 1074 | "node_modules/got/node_modules/get-stream": { 1075 | "version": "3.0.0", 1076 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1077 | "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", 1078 | "dev": true, 1079 | "engines": { 1080 | "node": ">=4" 1081 | } 1082 | }, 1083 | "node_modules/got/node_modules/pify": { 1084 | "version": "3.0.0", 1085 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1086 | "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", 1087 | "dev": true, 1088 | "engines": { 1089 | "node": ">=4" 1090 | } 1091 | }, 1092 | "node_modules/graceful-fs": { 1093 | "version": "4.2.11", 1094 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", 1095 | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" 1096 | }, 1097 | "node_modules/has": { 1098 | "version": "1.0.3", 1099 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1100 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1101 | "dependencies": { 1102 | "function-bind": "^1.1.1" 1103 | }, 1104 | "engines": { 1105 | "node": ">= 0.4.0" 1106 | } 1107 | }, 1108 | "node_modules/has-bigints": { 1109 | "version": "1.0.2", 1110 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 1111 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 1112 | "funding": { 1113 | "url": "https://github.com/sponsors/ljharb" 1114 | } 1115 | }, 1116 | "node_modules/has-flag": { 1117 | "version": "3.0.0", 1118 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1119 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1120 | "engines": { 1121 | "node": ">=4" 1122 | } 1123 | }, 1124 | "node_modules/has-property-descriptors": { 1125 | "version": "1.0.0", 1126 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", 1127 | "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", 1128 | "dependencies": { 1129 | "get-intrinsic": "^1.1.1" 1130 | }, 1131 | "funding": { 1132 | "url": "https://github.com/sponsors/ljharb" 1133 | } 1134 | }, 1135 | "node_modules/has-proto": { 1136 | "version": "1.0.1", 1137 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 1138 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 1139 | "engines": { 1140 | "node": ">= 0.4" 1141 | }, 1142 | "funding": { 1143 | "url": "https://github.com/sponsors/ljharb" 1144 | } 1145 | }, 1146 | "node_modules/has-symbol-support-x": { 1147 | "version": "1.4.2", 1148 | "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", 1149 | "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==", 1150 | "dev": true, 1151 | "engines": { 1152 | "node": "*" 1153 | } 1154 | }, 1155 | "node_modules/has-symbols": { 1156 | "version": "1.0.3", 1157 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1158 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1159 | "engines": { 1160 | "node": ">= 0.4" 1161 | }, 1162 | "funding": { 1163 | "url": "https://github.com/sponsors/ljharb" 1164 | } 1165 | }, 1166 | "node_modules/has-to-string-tag-x": { 1167 | "version": "1.4.1", 1168 | "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", 1169 | "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", 1170 | "dev": true, 1171 | "dependencies": { 1172 | "has-symbol-support-x": "^1.4.1" 1173 | }, 1174 | "engines": { 1175 | "node": "*" 1176 | } 1177 | }, 1178 | "node_modules/has-tostringtag": { 1179 | "version": "1.0.0", 1180 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 1181 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 1182 | "dependencies": { 1183 | "has-symbols": "^1.0.2" 1184 | }, 1185 | "engines": { 1186 | "node": ">= 0.4" 1187 | }, 1188 | "funding": { 1189 | "url": "https://github.com/sponsors/ljharb" 1190 | } 1191 | }, 1192 | "node_modules/hosted-git-info": { 1193 | "version": "2.8.9", 1194 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", 1195 | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" 1196 | }, 1197 | "node_modules/http-cache-semantics": { 1198 | "version": "3.8.1", 1199 | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", 1200 | "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", 1201 | "dev": true 1202 | }, 1203 | "node_modules/ieee754": { 1204 | "version": "1.2.1", 1205 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 1206 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", 1207 | "dev": true, 1208 | "funding": [ 1209 | { 1210 | "type": "github", 1211 | "url": "https://github.com/sponsors/feross" 1212 | }, 1213 | { 1214 | "type": "patreon", 1215 | "url": "https://www.patreon.com/feross" 1216 | }, 1217 | { 1218 | "type": "consulting", 1219 | "url": "https://feross.org/support" 1220 | } 1221 | ] 1222 | }, 1223 | "node_modules/inherits": { 1224 | "version": "2.0.4", 1225 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1226 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1227 | "dev": true 1228 | }, 1229 | "node_modules/internal-slot": { 1230 | "version": "1.0.5", 1231 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz", 1232 | "integrity": "sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==", 1233 | "dependencies": { 1234 | "get-intrinsic": "^1.2.0", 1235 | "has": "^1.0.3", 1236 | "side-channel": "^1.0.4" 1237 | }, 1238 | "engines": { 1239 | "node": ">= 0.4" 1240 | } 1241 | }, 1242 | "node_modules/into-stream": { 1243 | "version": "3.1.0", 1244 | "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", 1245 | "integrity": "sha512-TcdjPibTksa1NQximqep2r17ISRiNE9fwlfbg3F8ANdvP5/yrFTew86VcO//jk4QTaMlbjypPBq76HN2zaKfZQ==", 1246 | "dev": true, 1247 | "dependencies": { 1248 | "from2": "^2.1.1", 1249 | "p-is-promise": "^1.1.0" 1250 | }, 1251 | "engines": { 1252 | "node": ">=4" 1253 | } 1254 | }, 1255 | "node_modules/is-array-buffer": { 1256 | "version": "3.0.2", 1257 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", 1258 | "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", 1259 | "dependencies": { 1260 | "call-bind": "^1.0.2", 1261 | "get-intrinsic": "^1.2.0", 1262 | "is-typed-array": "^1.1.10" 1263 | }, 1264 | "funding": { 1265 | "url": "https://github.com/sponsors/ljharb" 1266 | } 1267 | }, 1268 | "node_modules/is-arrayish": { 1269 | "version": "0.2.1", 1270 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 1271 | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" 1272 | }, 1273 | "node_modules/is-bigint": { 1274 | "version": "1.0.4", 1275 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 1276 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 1277 | "dependencies": { 1278 | "has-bigints": "^1.0.1" 1279 | }, 1280 | "funding": { 1281 | "url": "https://github.com/sponsors/ljharb" 1282 | } 1283 | }, 1284 | "node_modules/is-boolean-object": { 1285 | "version": "1.1.2", 1286 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 1287 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 1288 | "dependencies": { 1289 | "call-bind": "^1.0.2", 1290 | "has-tostringtag": "^1.0.0" 1291 | }, 1292 | "engines": { 1293 | "node": ">= 0.4" 1294 | }, 1295 | "funding": { 1296 | "url": "https://github.com/sponsors/ljharb" 1297 | } 1298 | }, 1299 | "node_modules/is-callable": { 1300 | "version": "1.2.7", 1301 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 1302 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 1303 | "engines": { 1304 | "node": ">= 0.4" 1305 | }, 1306 | "funding": { 1307 | "url": "https://github.com/sponsors/ljharb" 1308 | } 1309 | }, 1310 | "node_modules/is-core-module": { 1311 | "version": "2.12.0", 1312 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", 1313 | "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", 1314 | "dependencies": { 1315 | "has": "^1.0.3" 1316 | }, 1317 | "funding": { 1318 | "url": "https://github.com/sponsors/ljharb" 1319 | } 1320 | }, 1321 | "node_modules/is-date-object": { 1322 | "version": "1.0.5", 1323 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 1324 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 1325 | "dependencies": { 1326 | "has-tostringtag": "^1.0.0" 1327 | }, 1328 | "engines": { 1329 | "node": ">= 0.4" 1330 | }, 1331 | "funding": { 1332 | "url": "https://github.com/sponsors/ljharb" 1333 | } 1334 | }, 1335 | "node_modules/is-natural-number": { 1336 | "version": "4.0.1", 1337 | "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", 1338 | "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", 1339 | "dev": true 1340 | }, 1341 | "node_modules/is-negative-zero": { 1342 | "version": "2.0.2", 1343 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 1344 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 1345 | "engines": { 1346 | "node": ">= 0.4" 1347 | }, 1348 | "funding": { 1349 | "url": "https://github.com/sponsors/ljharb" 1350 | } 1351 | }, 1352 | "node_modules/is-number-object": { 1353 | "version": "1.0.7", 1354 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 1355 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 1356 | "dependencies": { 1357 | "has-tostringtag": "^1.0.0" 1358 | }, 1359 | "engines": { 1360 | "node": ">= 0.4" 1361 | }, 1362 | "funding": { 1363 | "url": "https://github.com/sponsors/ljharb" 1364 | } 1365 | }, 1366 | "node_modules/is-object": { 1367 | "version": "1.0.2", 1368 | "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.2.tgz", 1369 | "integrity": "sha512-2rRIahhZr2UWb45fIOuvZGpFtz0TyOZLf32KxBbSoUCeZR495zCKlWUKKUByk3geS2eAs7ZAABt0Y/Rx0GiQGA==", 1370 | "dev": true, 1371 | "funding": { 1372 | "url": "https://github.com/sponsors/ljharb" 1373 | } 1374 | }, 1375 | "node_modules/is-plain-obj": { 1376 | "version": "1.1.0", 1377 | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", 1378 | "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", 1379 | "dev": true, 1380 | "engines": { 1381 | "node": ">=0.10.0" 1382 | } 1383 | }, 1384 | "node_modules/is-regex": { 1385 | "version": "1.1.4", 1386 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 1387 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 1388 | "dependencies": { 1389 | "call-bind": "^1.0.2", 1390 | "has-tostringtag": "^1.0.0" 1391 | }, 1392 | "engines": { 1393 | "node": ">= 0.4" 1394 | }, 1395 | "funding": { 1396 | "url": "https://github.com/sponsors/ljharb" 1397 | } 1398 | }, 1399 | "node_modules/is-retry-allowed": { 1400 | "version": "1.2.0", 1401 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", 1402 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==", 1403 | "dev": true, 1404 | "engines": { 1405 | "node": ">=0.10.0" 1406 | } 1407 | }, 1408 | "node_modules/is-shared-array-buffer": { 1409 | "version": "1.0.2", 1410 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 1411 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 1412 | "dependencies": { 1413 | "call-bind": "^1.0.2" 1414 | }, 1415 | "funding": { 1416 | "url": "https://github.com/sponsors/ljharb" 1417 | } 1418 | }, 1419 | "node_modules/is-stream": { 1420 | "version": "1.1.0", 1421 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1422 | "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", 1423 | "dev": true, 1424 | "engines": { 1425 | "node": ">=0.10.0" 1426 | } 1427 | }, 1428 | "node_modules/is-string": { 1429 | "version": "1.0.7", 1430 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 1431 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 1432 | "dependencies": { 1433 | "has-tostringtag": "^1.0.0" 1434 | }, 1435 | "engines": { 1436 | "node": ">= 0.4" 1437 | }, 1438 | "funding": { 1439 | "url": "https://github.com/sponsors/ljharb" 1440 | } 1441 | }, 1442 | "node_modules/is-symbol": { 1443 | "version": "1.0.4", 1444 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 1445 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 1446 | "dependencies": { 1447 | "has-symbols": "^1.0.2" 1448 | }, 1449 | "engines": { 1450 | "node": ">= 0.4" 1451 | }, 1452 | "funding": { 1453 | "url": "https://github.com/sponsors/ljharb" 1454 | } 1455 | }, 1456 | "node_modules/is-typed-array": { 1457 | "version": "1.1.10", 1458 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", 1459 | "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", 1460 | "dependencies": { 1461 | "available-typed-arrays": "^1.0.5", 1462 | "call-bind": "^1.0.2", 1463 | "for-each": "^0.3.3", 1464 | "gopd": "^1.0.1", 1465 | "has-tostringtag": "^1.0.0" 1466 | }, 1467 | "engines": { 1468 | "node": ">= 0.4" 1469 | }, 1470 | "funding": { 1471 | "url": "https://github.com/sponsors/ljharb" 1472 | } 1473 | }, 1474 | "node_modules/is-weakref": { 1475 | "version": "1.0.2", 1476 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 1477 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 1478 | "dependencies": { 1479 | "call-bind": "^1.0.2" 1480 | }, 1481 | "funding": { 1482 | "url": "https://github.com/sponsors/ljharb" 1483 | } 1484 | }, 1485 | "node_modules/isarray": { 1486 | "version": "1.0.0", 1487 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1488 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", 1489 | "dev": true 1490 | }, 1491 | "node_modules/isexe": { 1492 | "version": "2.0.0", 1493 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1494 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 1495 | }, 1496 | "node_modules/isurl": { 1497 | "version": "1.0.0", 1498 | "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", 1499 | "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", 1500 | "dev": true, 1501 | "dependencies": { 1502 | "has-to-string-tag-x": "^1.2.0", 1503 | "is-object": "^1.0.1" 1504 | }, 1505 | "engines": { 1506 | "node": ">= 4" 1507 | } 1508 | }, 1509 | "node_modules/json-buffer": { 1510 | "version": "3.0.0", 1511 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", 1512 | "integrity": "sha512-CuUqjv0FUZIdXkHPI8MezCnFCdaTAacej1TZYulLoAg1h/PhwkdXFN4V/gzY4g+fMBCOV2xF+rp7t2XD2ns/NQ==", 1513 | "dev": true 1514 | }, 1515 | "node_modules/json-parse-better-errors": { 1516 | "version": "1.0.2", 1517 | "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", 1518 | "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" 1519 | }, 1520 | "node_modules/keyv": { 1521 | "version": "3.0.0", 1522 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", 1523 | "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", 1524 | "dev": true, 1525 | "dependencies": { 1526 | "json-buffer": "3.0.0" 1527 | } 1528 | }, 1529 | "node_modules/load-json-file": { 1530 | "version": "4.0.0", 1531 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", 1532 | "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", 1533 | "dependencies": { 1534 | "graceful-fs": "^4.1.2", 1535 | "parse-json": "^4.0.0", 1536 | "pify": "^3.0.0", 1537 | "strip-bom": "^3.0.0" 1538 | }, 1539 | "engines": { 1540 | "node": ">=4" 1541 | } 1542 | }, 1543 | "node_modules/load-json-file/node_modules/pify": { 1544 | "version": "3.0.0", 1545 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1546 | "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", 1547 | "engines": { 1548 | "node": ">=4" 1549 | } 1550 | }, 1551 | "node_modules/long": { 1552 | "version": "4.0.0", 1553 | "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", 1554 | "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" 1555 | }, 1556 | "node_modules/lowercase-keys": { 1557 | "version": "1.0.1", 1558 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", 1559 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", 1560 | "dev": true, 1561 | "engines": { 1562 | "node": ">=0.10.0" 1563 | } 1564 | }, 1565 | "node_modules/make-dir": { 1566 | "version": "2.1.0", 1567 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", 1568 | "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", 1569 | "dev": true, 1570 | "dependencies": { 1571 | "pify": "^4.0.1", 1572 | "semver": "^5.6.0" 1573 | }, 1574 | "engines": { 1575 | "node": ">=6" 1576 | } 1577 | }, 1578 | "node_modules/make-error": { 1579 | "version": "1.3.6", 1580 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1581 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", 1582 | "dev": true 1583 | }, 1584 | "node_modules/memorystream": { 1585 | "version": "0.3.1", 1586 | "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", 1587 | "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", 1588 | "engines": { 1589 | "node": ">= 0.10.0" 1590 | } 1591 | }, 1592 | "node_modules/mime-db": { 1593 | "version": "1.52.0", 1594 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1595 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1596 | "dev": true, 1597 | "engines": { 1598 | "node": ">= 0.6" 1599 | } 1600 | }, 1601 | "node_modules/mimic-response": { 1602 | "version": "1.0.1", 1603 | "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", 1604 | "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", 1605 | "dev": true, 1606 | "engines": { 1607 | "node": ">=4" 1608 | } 1609 | }, 1610 | "node_modules/minimatch": { 1611 | "version": "3.1.2", 1612 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1613 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1614 | "dependencies": { 1615 | "brace-expansion": "^1.1.7" 1616 | }, 1617 | "engines": { 1618 | "node": "*" 1619 | } 1620 | }, 1621 | "node_modules/nice-try": { 1622 | "version": "1.0.5", 1623 | "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", 1624 | "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" 1625 | }, 1626 | "node_modules/normalize-package-data": { 1627 | "version": "2.5.0", 1628 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", 1629 | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", 1630 | "dependencies": { 1631 | "hosted-git-info": "^2.1.4", 1632 | "resolve": "^1.10.0", 1633 | "semver": "2 || 3 || 4 || 5", 1634 | "validate-npm-package-license": "^3.0.1" 1635 | } 1636 | }, 1637 | "node_modules/normalize-url": { 1638 | "version": "2.0.1", 1639 | "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", 1640 | "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", 1641 | "dev": true, 1642 | "dependencies": { 1643 | "prepend-http": "^2.0.0", 1644 | "query-string": "^5.0.1", 1645 | "sort-keys": "^2.0.0" 1646 | }, 1647 | "engines": { 1648 | "node": ">=4" 1649 | } 1650 | }, 1651 | "node_modules/npm-run-all": { 1652 | "version": "4.1.5", 1653 | "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", 1654 | "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", 1655 | "dependencies": { 1656 | "ansi-styles": "^3.2.1", 1657 | "chalk": "^2.4.1", 1658 | "cross-spawn": "^6.0.5", 1659 | "memorystream": "^0.3.1", 1660 | "minimatch": "^3.0.4", 1661 | "pidtree": "^0.3.0", 1662 | "read-pkg": "^3.0.0", 1663 | "shell-quote": "^1.6.1", 1664 | "string.prototype.padend": "^3.0.0" 1665 | }, 1666 | "bin": { 1667 | "npm-run-all": "bin/npm-run-all/index.js", 1668 | "run-p": "bin/run-p/index.js", 1669 | "run-s": "bin/run-s/index.js" 1670 | }, 1671 | "engines": { 1672 | "node": ">= 4" 1673 | } 1674 | }, 1675 | "node_modules/object-assign": { 1676 | "version": "4.1.1", 1677 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1678 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1679 | "dev": true, 1680 | "engines": { 1681 | "node": ">=0.10.0" 1682 | } 1683 | }, 1684 | "node_modules/object-hash": { 1685 | "version": "1.3.1", 1686 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz", 1687 | "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", 1688 | "engines": { 1689 | "node": ">= 0.10.0" 1690 | } 1691 | }, 1692 | "node_modules/object-inspect": { 1693 | "version": "1.12.3", 1694 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", 1695 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", 1696 | "funding": { 1697 | "url": "https://github.com/sponsors/ljharb" 1698 | } 1699 | }, 1700 | "node_modules/object-keys": { 1701 | "version": "1.1.1", 1702 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 1703 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 1704 | "engines": { 1705 | "node": ">= 0.4" 1706 | } 1707 | }, 1708 | "node_modules/object.assign": { 1709 | "version": "4.1.4", 1710 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", 1711 | "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", 1712 | "dependencies": { 1713 | "call-bind": "^1.0.2", 1714 | "define-properties": "^1.1.4", 1715 | "has-symbols": "^1.0.3", 1716 | "object-keys": "^1.1.1" 1717 | }, 1718 | "engines": { 1719 | "node": ">= 0.4" 1720 | }, 1721 | "funding": { 1722 | "url": "https://github.com/sponsors/ljharb" 1723 | } 1724 | }, 1725 | "node_modules/once": { 1726 | "version": "1.4.0", 1727 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1728 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1729 | "dev": true, 1730 | "dependencies": { 1731 | "wrappy": "1" 1732 | } 1733 | }, 1734 | "node_modules/p-cancelable": { 1735 | "version": "0.4.1", 1736 | "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", 1737 | "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==", 1738 | "dev": true, 1739 | "engines": { 1740 | "node": ">=4" 1741 | } 1742 | }, 1743 | "node_modules/p-event": { 1744 | "version": "2.3.1", 1745 | "resolved": "https://registry.npmjs.org/p-event/-/p-event-2.3.1.tgz", 1746 | "integrity": "sha512-NQCqOFhbpVTMX4qMe8PF8lbGtzZ+LCiN7pcNrb/413Na7+TRoe1xkKUzuWa/YEJdGQ0FvKtj35EEbDoVPO2kbA==", 1747 | "dev": true, 1748 | "dependencies": { 1749 | "p-timeout": "^2.0.1" 1750 | }, 1751 | "engines": { 1752 | "node": ">=6" 1753 | } 1754 | }, 1755 | "node_modules/p-finally": { 1756 | "version": "1.0.0", 1757 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1758 | "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", 1759 | "dev": true, 1760 | "engines": { 1761 | "node": ">=4" 1762 | } 1763 | }, 1764 | "node_modules/p-is-promise": { 1765 | "version": "1.1.0", 1766 | "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", 1767 | "integrity": "sha512-zL7VE4JVS2IFSkR2GQKDSPEVxkoH43/p7oEnwpdCndKYJO0HVeRB7fA8TJwuLOTBREtK0ea8eHaxdwcpob5dmg==", 1768 | "dev": true, 1769 | "engines": { 1770 | "node": ">=4" 1771 | } 1772 | }, 1773 | "node_modules/p-timeout": { 1774 | "version": "2.0.1", 1775 | "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", 1776 | "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", 1777 | "dev": true, 1778 | "dependencies": { 1779 | "p-finally": "^1.0.0" 1780 | }, 1781 | "engines": { 1782 | "node": ">=4" 1783 | } 1784 | }, 1785 | "node_modules/parse-json": { 1786 | "version": "4.0.0", 1787 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", 1788 | "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", 1789 | "dependencies": { 1790 | "error-ex": "^1.3.1", 1791 | "json-parse-better-errors": "^1.0.1" 1792 | }, 1793 | "engines": { 1794 | "node": ">=4" 1795 | } 1796 | }, 1797 | "node_modules/path-key": { 1798 | "version": "2.0.1", 1799 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1800 | "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", 1801 | "engines": { 1802 | "node": ">=4" 1803 | } 1804 | }, 1805 | "node_modules/path-parse": { 1806 | "version": "1.0.7", 1807 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1808 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" 1809 | }, 1810 | "node_modules/path-type": { 1811 | "version": "3.0.0", 1812 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", 1813 | "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", 1814 | "dependencies": { 1815 | "pify": "^3.0.0" 1816 | }, 1817 | "engines": { 1818 | "node": ">=4" 1819 | } 1820 | }, 1821 | "node_modules/path-type/node_modules/pify": { 1822 | "version": "3.0.0", 1823 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", 1824 | "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", 1825 | "engines": { 1826 | "node": ">=4" 1827 | } 1828 | }, 1829 | "node_modules/pend": { 1830 | "version": "1.2.0", 1831 | "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", 1832 | "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", 1833 | "dev": true 1834 | }, 1835 | "node_modules/pidtree": { 1836 | "version": "0.3.1", 1837 | "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", 1838 | "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", 1839 | "bin": { 1840 | "pidtree": "bin/pidtree.js" 1841 | }, 1842 | "engines": { 1843 | "node": ">=0.10" 1844 | } 1845 | }, 1846 | "node_modules/pify": { 1847 | "version": "4.0.1", 1848 | "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", 1849 | "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", 1850 | "dev": true, 1851 | "engines": { 1852 | "node": ">=6" 1853 | } 1854 | }, 1855 | "node_modules/pinkie": { 1856 | "version": "2.0.4", 1857 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1858 | "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", 1859 | "dev": true, 1860 | "engines": { 1861 | "node": ">=0.10.0" 1862 | } 1863 | }, 1864 | "node_modules/pinkie-promise": { 1865 | "version": "2.0.1", 1866 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1867 | "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", 1868 | "dev": true, 1869 | "dependencies": { 1870 | "pinkie": "^2.0.0" 1871 | }, 1872 | "engines": { 1873 | "node": ">=0.10.0" 1874 | } 1875 | }, 1876 | "node_modules/prepend-http": { 1877 | "version": "2.0.0", 1878 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", 1879 | "integrity": "sha512-ravE6m9Atw9Z/jjttRUZ+clIXogdghyZAuWJ3qEzjT+jI/dL1ifAqhZeC5VHzQp1MSt1+jxKkFNemj/iO7tVUA==", 1880 | "dev": true, 1881 | "engines": { 1882 | "node": ">=4" 1883 | } 1884 | }, 1885 | "node_modules/process-nextick-args": { 1886 | "version": "2.0.1", 1887 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1888 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", 1889 | "dev": true 1890 | }, 1891 | "node_modules/protobufjs": { 1892 | "version": "6.11.3", 1893 | "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", 1894 | "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", 1895 | "hasInstallScript": true, 1896 | "dependencies": { 1897 | "@protobufjs/aspromise": "^1.1.2", 1898 | "@protobufjs/base64": "^1.1.2", 1899 | "@protobufjs/codegen": "^2.0.4", 1900 | "@protobufjs/eventemitter": "^1.1.0", 1901 | "@protobufjs/fetch": "^1.1.0", 1902 | "@protobufjs/float": "^1.0.2", 1903 | "@protobufjs/inquire": "^1.1.0", 1904 | "@protobufjs/path": "^1.1.2", 1905 | "@protobufjs/pool": "^1.1.0", 1906 | "@protobufjs/utf8": "^1.1.0", 1907 | "@types/long": "^4.0.1", 1908 | "@types/node": ">=13.7.0", 1909 | "long": "^4.0.0" 1910 | }, 1911 | "bin": { 1912 | "pbjs": "bin/pbjs", 1913 | "pbts": "bin/pbts" 1914 | } 1915 | }, 1916 | "node_modules/protoc-gen-js": { 1917 | "version": "3.21.2", 1918 | "resolved": "https://registry.npmjs.org/protoc-gen-js/-/protoc-gen-js-3.21.2.tgz", 1919 | "integrity": "sha512-nSpiXulygg0vUv05uFeATuZSbgMQMeoef0BhB5266Y6HmsqVtIrbSkK/Z2Yk0KLE+BirRNjsTKDUJxg3OPO9pQ==", 1920 | "dev": true, 1921 | "hasInstallScript": true, 1922 | "dependencies": { 1923 | "adm-zip": "^0.5.10", 1924 | "download": "^8.0.0" 1925 | }, 1926 | "bin": { 1927 | "protoc-gen-js": "cli.js" 1928 | } 1929 | }, 1930 | "node_modules/pump": { 1931 | "version": "3.0.0", 1932 | "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", 1933 | "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", 1934 | "dev": true, 1935 | "dependencies": { 1936 | "end-of-stream": "^1.1.0", 1937 | "once": "^1.3.1" 1938 | } 1939 | }, 1940 | "node_modules/query-string": { 1941 | "version": "5.1.1", 1942 | "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", 1943 | "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", 1944 | "dev": true, 1945 | "dependencies": { 1946 | "decode-uri-component": "^0.2.0", 1947 | "object-assign": "^4.1.0", 1948 | "strict-uri-encode": "^1.0.0" 1949 | }, 1950 | "engines": { 1951 | "node": ">=0.10.0" 1952 | } 1953 | }, 1954 | "node_modules/read-pkg": { 1955 | "version": "3.0.0", 1956 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", 1957 | "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", 1958 | "dependencies": { 1959 | "load-json-file": "^4.0.0", 1960 | "normalize-package-data": "^2.3.2", 1961 | "path-type": "^3.0.0" 1962 | }, 1963 | "engines": { 1964 | "node": ">=4" 1965 | } 1966 | }, 1967 | "node_modules/readable-stream": { 1968 | "version": "2.3.8", 1969 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", 1970 | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", 1971 | "dev": true, 1972 | "dependencies": { 1973 | "core-util-is": "~1.0.0", 1974 | "inherits": "~2.0.3", 1975 | "isarray": "~1.0.0", 1976 | "process-nextick-args": "~2.0.0", 1977 | "safe-buffer": "~5.1.1", 1978 | "string_decoder": "~1.1.1", 1979 | "util-deprecate": "~1.0.1" 1980 | } 1981 | }, 1982 | "node_modules/readable-stream/node_modules/safe-buffer": { 1983 | "version": "5.1.2", 1984 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1985 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 1986 | "dev": true 1987 | }, 1988 | "node_modules/regexp.prototype.flags": { 1989 | "version": "1.5.0", 1990 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz", 1991 | "integrity": "sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==", 1992 | "dependencies": { 1993 | "call-bind": "^1.0.2", 1994 | "define-properties": "^1.2.0", 1995 | "functions-have-names": "^1.2.3" 1996 | }, 1997 | "engines": { 1998 | "node": ">= 0.4" 1999 | }, 2000 | "funding": { 2001 | "url": "https://github.com/sponsors/ljharb" 2002 | } 2003 | }, 2004 | "node_modules/resolve": { 2005 | "version": "1.22.2", 2006 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", 2007 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", 2008 | "dependencies": { 2009 | "is-core-module": "^2.11.0", 2010 | "path-parse": "^1.0.7", 2011 | "supports-preserve-symlinks-flag": "^1.0.0" 2012 | }, 2013 | "bin": { 2014 | "resolve": "bin/resolve" 2015 | }, 2016 | "funding": { 2017 | "url": "https://github.com/sponsors/ljharb" 2018 | } 2019 | }, 2020 | "node_modules/responselike": { 2021 | "version": "1.0.2", 2022 | "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", 2023 | "integrity": "sha512-/Fpe5guzJk1gPqdJLJR5u7eG/gNY4nImjbRDaVWVMRhne55TCmj2i9Q+54PBRfatRC8v/rIiv9BN0pMd9OV5EQ==", 2024 | "dev": true, 2025 | "dependencies": { 2026 | "lowercase-keys": "^1.0.0" 2027 | } 2028 | }, 2029 | "node_modules/safe-buffer": { 2030 | "version": "5.2.1", 2031 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2032 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2033 | "dev": true, 2034 | "funding": [ 2035 | { 2036 | "type": "github", 2037 | "url": "https://github.com/sponsors/feross" 2038 | }, 2039 | { 2040 | "type": "patreon", 2041 | "url": "https://www.patreon.com/feross" 2042 | }, 2043 | { 2044 | "type": "consulting", 2045 | "url": "https://feross.org/support" 2046 | } 2047 | ] 2048 | }, 2049 | "node_modules/safe-regex-test": { 2050 | "version": "1.0.0", 2051 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", 2052 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", 2053 | "dependencies": { 2054 | "call-bind": "^1.0.2", 2055 | "get-intrinsic": "^1.1.3", 2056 | "is-regex": "^1.1.4" 2057 | }, 2058 | "funding": { 2059 | "url": "https://github.com/sponsors/ljharb" 2060 | } 2061 | }, 2062 | "node_modules/seek-bzip": { 2063 | "version": "1.0.6", 2064 | "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", 2065 | "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", 2066 | "dev": true, 2067 | "dependencies": { 2068 | "commander": "^2.8.1" 2069 | }, 2070 | "bin": { 2071 | "seek-bunzip": "bin/seek-bunzip", 2072 | "seek-table": "bin/seek-bzip-table" 2073 | } 2074 | }, 2075 | "node_modules/semver": { 2076 | "version": "5.7.1", 2077 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 2078 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 2079 | "bin": { 2080 | "semver": "bin/semver" 2081 | } 2082 | }, 2083 | "node_modules/shebang-command": { 2084 | "version": "1.2.0", 2085 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 2086 | "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", 2087 | "dependencies": { 2088 | "shebang-regex": "^1.0.0" 2089 | }, 2090 | "engines": { 2091 | "node": ">=0.10.0" 2092 | } 2093 | }, 2094 | "node_modules/shebang-regex": { 2095 | "version": "1.0.0", 2096 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 2097 | "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", 2098 | "engines": { 2099 | "node": ">=0.10.0" 2100 | } 2101 | }, 2102 | "node_modules/shell-quote": { 2103 | "version": "1.8.1", 2104 | "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", 2105 | "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", 2106 | "funding": { 2107 | "url": "https://github.com/sponsors/ljharb" 2108 | } 2109 | }, 2110 | "node_modules/side-channel": { 2111 | "version": "1.0.4", 2112 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 2113 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 2114 | "dependencies": { 2115 | "call-bind": "^1.0.0", 2116 | "get-intrinsic": "^1.0.2", 2117 | "object-inspect": "^1.9.0" 2118 | }, 2119 | "funding": { 2120 | "url": "https://github.com/sponsors/ljharb" 2121 | } 2122 | }, 2123 | "node_modules/sort-keys": { 2124 | "version": "2.0.0", 2125 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", 2126 | "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", 2127 | "dev": true, 2128 | "dependencies": { 2129 | "is-plain-obj": "^1.0.0" 2130 | }, 2131 | "engines": { 2132 | "node": ">=4" 2133 | } 2134 | }, 2135 | "node_modules/sort-keys-length": { 2136 | "version": "1.0.1", 2137 | "resolved": "https://registry.npmjs.org/sort-keys-length/-/sort-keys-length-1.0.1.tgz", 2138 | "integrity": "sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw==", 2139 | "dev": true, 2140 | "dependencies": { 2141 | "sort-keys": "^1.0.0" 2142 | }, 2143 | "engines": { 2144 | "node": ">=0.10.0" 2145 | } 2146 | }, 2147 | "node_modules/sort-keys-length/node_modules/sort-keys": { 2148 | "version": "1.1.2", 2149 | "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", 2150 | "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", 2151 | "dev": true, 2152 | "dependencies": { 2153 | "is-plain-obj": "^1.0.0" 2154 | }, 2155 | "engines": { 2156 | "node": ">=0.10.0" 2157 | } 2158 | }, 2159 | "node_modules/spdx-correct": { 2160 | "version": "3.2.0", 2161 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", 2162 | "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", 2163 | "dependencies": { 2164 | "spdx-expression-parse": "^3.0.0", 2165 | "spdx-license-ids": "^3.0.0" 2166 | } 2167 | }, 2168 | "node_modules/spdx-exceptions": { 2169 | "version": "2.3.0", 2170 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", 2171 | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" 2172 | }, 2173 | "node_modules/spdx-expression-parse": { 2174 | "version": "3.0.1", 2175 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", 2176 | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", 2177 | "dependencies": { 2178 | "spdx-exceptions": "^2.1.0", 2179 | "spdx-license-ids": "^3.0.0" 2180 | } 2181 | }, 2182 | "node_modules/spdx-license-ids": { 2183 | "version": "3.0.13", 2184 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", 2185 | "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" 2186 | }, 2187 | "node_modules/strict-uri-encode": { 2188 | "version": "1.1.0", 2189 | "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", 2190 | "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", 2191 | "dev": true, 2192 | "engines": { 2193 | "node": ">=0.10.0" 2194 | } 2195 | }, 2196 | "node_modules/string_decoder": { 2197 | "version": "1.1.1", 2198 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 2199 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 2200 | "dev": true, 2201 | "dependencies": { 2202 | "safe-buffer": "~5.1.0" 2203 | } 2204 | }, 2205 | "node_modules/string_decoder/node_modules/safe-buffer": { 2206 | "version": "5.1.2", 2207 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2208 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", 2209 | "dev": true 2210 | }, 2211 | "node_modules/string.prototype.padend": { 2212 | "version": "3.1.4", 2213 | "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.4.tgz", 2214 | "integrity": "sha512-67otBXoksdjsnXXRUq+KMVTdlVRZ2af422Y0aTyTjVaoQkGr3mxl2Bc5emi7dOQ3OGVVQQskmLEWwFXwommpNw==", 2215 | "dependencies": { 2216 | "call-bind": "^1.0.2", 2217 | "define-properties": "^1.1.4", 2218 | "es-abstract": "^1.20.4" 2219 | }, 2220 | "engines": { 2221 | "node": ">= 0.4" 2222 | }, 2223 | "funding": { 2224 | "url": "https://github.com/sponsors/ljharb" 2225 | } 2226 | }, 2227 | "node_modules/string.prototype.trim": { 2228 | "version": "1.2.7", 2229 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz", 2230 | "integrity": "sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==", 2231 | "dependencies": { 2232 | "call-bind": "^1.0.2", 2233 | "define-properties": "^1.1.4", 2234 | "es-abstract": "^1.20.4" 2235 | }, 2236 | "engines": { 2237 | "node": ">= 0.4" 2238 | }, 2239 | "funding": { 2240 | "url": "https://github.com/sponsors/ljharb" 2241 | } 2242 | }, 2243 | "node_modules/string.prototype.trimend": { 2244 | "version": "1.0.6", 2245 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", 2246 | "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", 2247 | "dependencies": { 2248 | "call-bind": "^1.0.2", 2249 | "define-properties": "^1.1.4", 2250 | "es-abstract": "^1.20.4" 2251 | }, 2252 | "funding": { 2253 | "url": "https://github.com/sponsors/ljharb" 2254 | } 2255 | }, 2256 | "node_modules/string.prototype.trimstart": { 2257 | "version": "1.0.6", 2258 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", 2259 | "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", 2260 | "dependencies": { 2261 | "call-bind": "^1.0.2", 2262 | "define-properties": "^1.1.4", 2263 | "es-abstract": "^1.20.4" 2264 | }, 2265 | "funding": { 2266 | "url": "https://github.com/sponsors/ljharb" 2267 | } 2268 | }, 2269 | "node_modules/strip-bom": { 2270 | "version": "3.0.0", 2271 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2272 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 2273 | "engines": { 2274 | "node": ">=4" 2275 | } 2276 | }, 2277 | "node_modules/strip-dirs": { 2278 | "version": "2.1.0", 2279 | "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", 2280 | "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", 2281 | "dev": true, 2282 | "dependencies": { 2283 | "is-natural-number": "^4.0.1" 2284 | } 2285 | }, 2286 | "node_modules/strip-outer": { 2287 | "version": "1.0.1", 2288 | "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz", 2289 | "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", 2290 | "dev": true, 2291 | "dependencies": { 2292 | "escape-string-regexp": "^1.0.2" 2293 | }, 2294 | "engines": { 2295 | "node": ">=0.10.0" 2296 | } 2297 | }, 2298 | "node_modules/supports-color": { 2299 | "version": "5.5.0", 2300 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2301 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2302 | "dependencies": { 2303 | "has-flag": "^3.0.0" 2304 | }, 2305 | "engines": { 2306 | "node": ">=4" 2307 | } 2308 | }, 2309 | "node_modules/supports-preserve-symlinks-flag": { 2310 | "version": "1.0.0", 2311 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2312 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2313 | "engines": { 2314 | "node": ">= 0.4" 2315 | }, 2316 | "funding": { 2317 | "url": "https://github.com/sponsors/ljharb" 2318 | } 2319 | }, 2320 | "node_modules/tar-stream": { 2321 | "version": "1.6.2", 2322 | "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", 2323 | "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", 2324 | "dev": true, 2325 | "dependencies": { 2326 | "bl": "^1.0.0", 2327 | "buffer-alloc": "^1.2.0", 2328 | "end-of-stream": "^1.0.0", 2329 | "fs-constants": "^1.0.0", 2330 | "readable-stream": "^2.3.0", 2331 | "to-buffer": "^1.1.1", 2332 | "xtend": "^4.0.0" 2333 | }, 2334 | "engines": { 2335 | "node": ">= 0.8.0" 2336 | } 2337 | }, 2338 | "node_modules/through": { 2339 | "version": "2.3.8", 2340 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2341 | "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", 2342 | "dev": true 2343 | }, 2344 | "node_modules/timed-out": { 2345 | "version": "4.0.1", 2346 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 2347 | "integrity": "sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA==", 2348 | "dev": true, 2349 | "engines": { 2350 | "node": ">=0.10.0" 2351 | } 2352 | }, 2353 | "node_modules/to-buffer": { 2354 | "version": "1.1.1", 2355 | "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", 2356 | "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", 2357 | "dev": true 2358 | }, 2359 | "node_modules/trim-repeated": { 2360 | "version": "1.0.0", 2361 | "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz", 2362 | "integrity": "sha512-pkonvlKk8/ZuR0D5tLW8ljt5I8kmxp2XKymhepUeOdCEfKpZaktSArkLHZt76OB1ZvO9bssUsDty4SWhLvZpLg==", 2363 | "dev": true, 2364 | "dependencies": { 2365 | "escape-string-regexp": "^1.0.2" 2366 | }, 2367 | "engines": { 2368 | "node": ">=0.10.0" 2369 | } 2370 | }, 2371 | "node_modules/ts-node": { 2372 | "version": "10.9.1", 2373 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", 2374 | "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", 2375 | "dev": true, 2376 | "dependencies": { 2377 | "@cspotcode/source-map-support": "^0.8.0", 2378 | "@tsconfig/node10": "^1.0.7", 2379 | "@tsconfig/node12": "^1.0.7", 2380 | "@tsconfig/node14": "^1.0.0", 2381 | "@tsconfig/node16": "^1.0.2", 2382 | "acorn": "^8.4.1", 2383 | "acorn-walk": "^8.1.1", 2384 | "arg": "^4.1.0", 2385 | "create-require": "^1.1.0", 2386 | "diff": "^4.0.1", 2387 | "make-error": "^1.1.1", 2388 | "v8-compile-cache-lib": "^3.0.1", 2389 | "yn": "3.1.1" 2390 | }, 2391 | "bin": { 2392 | "ts-node": "dist/bin.js", 2393 | "ts-node-cwd": "dist/bin-cwd.js", 2394 | "ts-node-esm": "dist/bin-esm.js", 2395 | "ts-node-script": "dist/bin-script.js", 2396 | "ts-node-transpile-only": "dist/bin-transpile.js", 2397 | "ts-script": "dist/bin-script-deprecated.js" 2398 | }, 2399 | "peerDependencies": { 2400 | "@swc/core": ">=1.2.50", 2401 | "@swc/wasm": ">=1.2.50", 2402 | "@types/node": "*", 2403 | "typescript": ">=2.7" 2404 | }, 2405 | "peerDependenciesMeta": { 2406 | "@swc/core": { 2407 | "optional": true 2408 | }, 2409 | "@swc/wasm": { 2410 | "optional": true 2411 | } 2412 | } 2413 | }, 2414 | "node_modules/ts-poet": { 2415 | "version": "6.4.1", 2416 | "resolved": "https://registry.npmjs.org/ts-poet/-/ts-poet-6.4.1.tgz", 2417 | "integrity": "sha512-AjZEs4h2w4sDfwpHMxQKHrTlNh2wRbM5NRXmLz0RiH+yPGtSQFbe9hBpNocU8vqVNgfh0BIOiXR80xDz3kKxUQ==", 2418 | "dependencies": { 2419 | "dprint-node": "^1.0.7" 2420 | } 2421 | }, 2422 | "node_modules/ts-proto": { 2423 | "version": "1.146.0", 2424 | "resolved": "https://registry.npmjs.org/ts-proto/-/ts-proto-1.146.0.tgz", 2425 | "integrity": "sha512-OyBZRjmqqw+aatLEUbRooWO6VKTtOLJQyaQFMciigEZPNgTsWtApqHpQDtqDMQFWEXhIARqEV+B7ZJx8cljhZA==", 2426 | "dependencies": { 2427 | "@types/object-hash": "^1.3.0", 2428 | "case-anything": "^2.1.10", 2429 | "dataloader": "^1.4.0", 2430 | "object-hash": "^1.3.1", 2431 | "protobufjs": "^6.11.3", 2432 | "ts-poet": "^6.4.1", 2433 | "ts-proto-descriptors": "1.8.0" 2434 | }, 2435 | "bin": { 2436 | "protoc-gen-ts_proto": "protoc-gen-ts_proto" 2437 | } 2438 | }, 2439 | "node_modules/ts-proto-descriptors": { 2440 | "version": "1.8.0", 2441 | "resolved": "https://registry.npmjs.org/ts-proto-descriptors/-/ts-proto-descriptors-1.8.0.tgz", 2442 | "integrity": "sha512-iV20plcI8+GRkeZIAygxOOH0p2xpOsKfw9kI1W20NCwawi1/4bG/YRd9rQY9XSJP+lD9j7XbSy3tFFuikfsljw==", 2443 | "dependencies": { 2444 | "long": "^4.0.0", 2445 | "protobufjs": "^6.8.8" 2446 | } 2447 | }, 2448 | "node_modules/typed-array-length": { 2449 | "version": "1.0.4", 2450 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", 2451 | "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", 2452 | "dependencies": { 2453 | "call-bind": "^1.0.2", 2454 | "for-each": "^0.3.3", 2455 | "is-typed-array": "^1.1.9" 2456 | }, 2457 | "funding": { 2458 | "url": "https://github.com/sponsors/ljharb" 2459 | } 2460 | }, 2461 | "node_modules/typescript": { 2462 | "version": "5.0.4", 2463 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", 2464 | "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", 2465 | "dev": true, 2466 | "bin": { 2467 | "tsc": "bin/tsc", 2468 | "tsserver": "bin/tsserver" 2469 | }, 2470 | "engines": { 2471 | "node": ">=12.20" 2472 | } 2473 | }, 2474 | "node_modules/unbox-primitive": { 2475 | "version": "1.0.2", 2476 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 2477 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 2478 | "dependencies": { 2479 | "call-bind": "^1.0.2", 2480 | "has-bigints": "^1.0.2", 2481 | "has-symbols": "^1.0.3", 2482 | "which-boxed-primitive": "^1.0.2" 2483 | }, 2484 | "funding": { 2485 | "url": "https://github.com/sponsors/ljharb" 2486 | } 2487 | }, 2488 | "node_modules/unbzip2-stream": { 2489 | "version": "1.4.3", 2490 | "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", 2491 | "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", 2492 | "dev": true, 2493 | "dependencies": { 2494 | "buffer": "^5.2.1", 2495 | "through": "^2.3.8" 2496 | } 2497 | }, 2498 | "node_modules/url-parse-lax": { 2499 | "version": "3.0.0", 2500 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", 2501 | "integrity": "sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==", 2502 | "dev": true, 2503 | "dependencies": { 2504 | "prepend-http": "^2.0.0" 2505 | }, 2506 | "engines": { 2507 | "node": ">=4" 2508 | } 2509 | }, 2510 | "node_modules/url-to-options": { 2511 | "version": "1.0.1", 2512 | "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", 2513 | "integrity": "sha512-0kQLIzG4fdk/G5NONku64rSH/x32NOA39LVQqlK8Le6lvTF6GGRJpqaQFGgU+CLwySIqBSMdwYM0sYcW9f6P4A==", 2514 | "dev": true, 2515 | "engines": { 2516 | "node": ">= 4" 2517 | } 2518 | }, 2519 | "node_modules/util-deprecate": { 2520 | "version": "1.0.2", 2521 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2522 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 2523 | "dev": true 2524 | }, 2525 | "node_modules/v8-compile-cache-lib": { 2526 | "version": "3.0.1", 2527 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 2528 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", 2529 | "dev": true 2530 | }, 2531 | "node_modules/validate-npm-package-license": { 2532 | "version": "3.0.4", 2533 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", 2534 | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", 2535 | "dependencies": { 2536 | "spdx-correct": "^3.0.0", 2537 | "spdx-expression-parse": "^3.0.0" 2538 | } 2539 | }, 2540 | "node_modules/which": { 2541 | "version": "1.3.1", 2542 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", 2543 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", 2544 | "dependencies": { 2545 | "isexe": "^2.0.0" 2546 | }, 2547 | "bin": { 2548 | "which": "bin/which" 2549 | } 2550 | }, 2551 | "node_modules/which-boxed-primitive": { 2552 | "version": "1.0.2", 2553 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 2554 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 2555 | "dependencies": { 2556 | "is-bigint": "^1.0.1", 2557 | "is-boolean-object": "^1.1.0", 2558 | "is-number-object": "^1.0.4", 2559 | "is-string": "^1.0.5", 2560 | "is-symbol": "^1.0.3" 2561 | }, 2562 | "funding": { 2563 | "url": "https://github.com/sponsors/ljharb" 2564 | } 2565 | }, 2566 | "node_modules/which-typed-array": { 2567 | "version": "1.1.9", 2568 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", 2569 | "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", 2570 | "dependencies": { 2571 | "available-typed-arrays": "^1.0.5", 2572 | "call-bind": "^1.0.2", 2573 | "for-each": "^0.3.3", 2574 | "gopd": "^1.0.1", 2575 | "has-tostringtag": "^1.0.0", 2576 | "is-typed-array": "^1.1.10" 2577 | }, 2578 | "engines": { 2579 | "node": ">= 0.4" 2580 | }, 2581 | "funding": { 2582 | "url": "https://github.com/sponsors/ljharb" 2583 | } 2584 | }, 2585 | "node_modules/wrappy": { 2586 | "version": "1.0.2", 2587 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2588 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2589 | "dev": true 2590 | }, 2591 | "node_modules/xtend": { 2592 | "version": "4.0.2", 2593 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2594 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 2595 | "dev": true, 2596 | "engines": { 2597 | "node": ">=0.4" 2598 | } 2599 | }, 2600 | "node_modules/yauzl": { 2601 | "version": "2.10.0", 2602 | "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", 2603 | "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", 2604 | "dev": true, 2605 | "dependencies": { 2606 | "buffer-crc32": "~0.2.3", 2607 | "fd-slicer": "~1.1.0" 2608 | } 2609 | }, 2610 | "node_modules/yn": { 2611 | "version": "3.1.1", 2612 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2613 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2614 | "dev": true, 2615 | "engines": { 2616 | "node": ">=6" 2617 | } 2618 | } 2619 | } 2620 | } 2621 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "json-proto", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "clean": "rm -rf dist build && mkdir -p build/gen && rm -rf src/proto && mkdir -p src/proto", 8 | "protoc": "protoc --plugin=./node_modules/.bin/protoc-gen-ts_proto --ts_proto_out=. ./proto/lolomo.proto", 9 | "ready-proto": "mv build/gen/* src/proto/ && rm -rf build", 10 | "tsc": "tsc", 11 | "build": "run-s clean protoc tsc ready-proto" 12 | }, 13 | "keywords": [], 14 | "author": "", 15 | "license": "ISC", 16 | "devDependencies": { 17 | "protoc-gen-js": "^3.21.2", 18 | "ts-node": "^10.9.1", 19 | "typescript": "^5.0.4" 20 | }, 21 | "dependencies": { 22 | "google-protobuf": "^3.21.2", 23 | "npm-run-all": "^4.1.5", 24 | "ts-proto": "^1.146.0" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /proto/lolomo.proto: -------------------------------------------------------------------------------- 1 | 2 | //export type Lolomo = { 3 | // lists: List[] 4 | // id: string, 5 | //} 6 | // 7 | //export type List = { 8 | // videos: Video[], 9 | // id: string, 10 | //} 11 | // 12 | //export type Video = { 13 | // id: number, 14 | // title: string, 15 | // description: string, 16 | // duration: number, 17 | // boxArt: string, 18 | // rating: number, 19 | //} 20 | // take these typescript types and translate them to protobufs 21 | 22 | syntax = "proto3"; 23 | 24 | package lolomo; 25 | 26 | message Lolomo { 27 | repeated List lists = 1; 28 | string id = 2; 29 | } 30 | 31 | message List { 32 | repeated Video videos = 1; 33 | string id = 2; 34 | } 35 | 36 | message Video { 37 | int32 id = 1; 38 | string title = 2; 39 | string description = 3; 40 | int64 duration = 4; 41 | string boxArt = 5; 42 | int32 rating = 6; 43 | } 44 | 45 | 46 | -------------------------------------------------------------------------------- /ratings.Dockerfile: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ThePrimeagen/json-vs-proto/7fe583f5088bed5c53e3a0a38a12672ba8367416/ratings.Dockerfile -------------------------------------------------------------------------------- /src/consts.ts: -------------------------------------------------------------------------------- 1 | 2 | export const MAX_VIDEO_LENGTH = +(process.env.MAX_VIDEO_LENGTH || "") || 1000; 3 | 4 | -------------------------------------------------------------------------------- /src/lolomo/helpers.ts: -------------------------------------------------------------------------------- 1 | import { MAX_VIDEO_LENGTH } from "../consts"; 2 | import { Video } from "../types"; 3 | import { rando } from "../utils"; 4 | const descriptions: string[] = [ 5 | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Enim nec dui nunc mattis enim. Ullamcorper velit sed ullamcorper morbi. Ultricies integer quis auctor elit. At urna condimentum mattis pellentesque id nibh tortor id. Mauris rhoncus aenean vel elit. Rhoncus urna neque viverra justo. Ornare suspendisse sed nisi lacus sed viverra tellus in hac. Erat pellentesque adipiscing commodo elit at. Condimentum id venenatis a condimentum vitae. Donec pretium vulputate sapien nec sagittis aliquam malesuada bibendum arcu.", 6 | "Amet luctus venenatis lectus magna fringilla urna porttitor rhoncus. Auctor eu augue ut lectus arcu bibendum at varius. Urna porttitor rhoncus dolor purus non enim. Mauris nunc congue nisi vitae suscipit tellus mauris a diam. Curabitur gravida arcu ac tortor dignissim convallis aenean. Nullam vehicula ipsum a arcu cursus vitae. Massa tincidunt nunc pulvinar sapien. Egestas egestas fringilla phasellus faucibus scelerisque eleifend donec pretium. Malesuada bibendum arcu vitae elementum curabitur vitae. Sed risus ultricies tristique nulla aliquet. In fermentum posuere urna nec tincidunt praesent semper. Elementum nisi quis eleifend quam adipiscing vitae proin sagittis nisl. Mattis ullamcorper velit sed ullamcorper morbi. Leo urna molestie at elementum eu facilisis sed. Urna id volutpat lacus laoreet non curabitur. Porttitor lacus luctus accumsan tortor posuere ac ut. Vitae semper quis lectus nulla at. At lectus urna duis convallis convallis tellus.", 7 | "A erat nam at lectus urna duis. Eget gravida cum sociis natoque penatibus. Fusce ut placerat orci nulla pellentesque dignissim. Vel eros donec ac odio tempor orci. Elit eget gravida cum sociis. Molestie ac feugiat sed lectus vestibulum. Ultricies lacus sed turpis tincidunt id. Arcu bibendum at varius vel pharetra vel. Proin sagittis nisl rhoncus mattis rhoncus urna neque viverra. Rhoncus mattis rhoncus urna neque. Enim praesent elementum facilisis leo. Quisque non tellus orci ac auctor augue mauris. Vitae et leo duis ut diam quam nulla porttitor massa.", 8 | "Diam ut venenatis tellus in metus vulputate. Vulputate dignissim suspendisse in est ante. Sit amet purus gravida quis blandit. Fermentum et sollicitudin ac orci phasellus egestas tellus. In ante metus dictum at tempor commodo ullamcorper a. Sollicitudin ac orci phasellus egestas tellus rutrum tellus. Mauris sit amet massa vitae tortor. Potenti nullam ac tortor vitae purus faucibus ornare suspendisse sed. Netus et malesuada fames ac turpis egestas. Ultrices vitae auctor eu augue ut. Feugiat in ante metus dictum. Egestas pretium aenean pharetra magna ac placerat vestibulum lectus. Urna porttitor rhoncus dolor purus non enim. Orci dapibus ultrices in iaculis nunc sed. Eleifend donec pretium vulputate sapien nec sagittis aliquam malesuada bibendum. Pretium vulputate sapien nec sagittis aliquam malesuada. Et tortor at risus viverra adipiscing at in tellus integer. Vehicula ipsum a arcu cursus vitae. Posuere urna nec tincidunt praesent. Cras semper auctor neque vitae tempus quam pellentesque nec nam.", 9 | "Consectetur adipiscing elit duis tristique. Orci dapibus ultrices in iaculis. Nullam vehicula ipsum a arcu cursus vitae congue mauris. Netus et malesuada fames ac turpis egestas integer eget aliquet. Quam nulla porttitor massa id neque aliquam. Pulvinar neque laoreet suspendisse interdum consectetur libero id faucibus nisl. Lacus viverra vitae congue eu consequat ac felis donec. In arcu cursus euismod quis viverra nibh cras. Accumsan lacus vel facilisis volutpat est. Egestas sed sed risus pretium quam vulputate dignissim suspendisse in. Metus aliquam eleifend mi in nulla posuere sollicitudin.", 10 | ]; 11 | 12 | const titles: string[] = [ 13 | "ThePrimeagen", 14 | "TrashDev", 15 | "Teej_dv", 16 | "WarrenBuffering", 17 | "Theo", 18 | "BashBunni", 19 | "RoxCar76", 20 | "FlipEdits", 21 | ]; 22 | 23 | const boxArts: string[] = [ 24 | "https://i.ytimg.com/vi/5qap5aO4i9A/maxresdefault.jpg", 25 | "https://pbs.twimg.com/profile_images/1605762947686375425/lsoGWWty_400x400.jpg", 26 | "https://pbs.twimg.com/profile_images/1598959528518643713/aWdwBYxv_400x400.jpg", 27 | "https://pbs.twimg.com/profile_images/1628555572088913923/m370a_-w_400x400.jpg", 28 | "https://pbs.twimg.com/profile_images/1641553030335315968/v9hikrL3_400x400.jpg", 29 | "https://pbs.twimg.com/profile_images/1631383564792238080/_i8ZwdU5_400x400.jpg", 30 | "https://pbs.twimg.com/profile_images/1613151603564986368/dZoNeRKn_400x400.jpg", 31 | "https://pbs.twimg.com/profile_images/1602885850550792192/gg-a_Mun_400x400.jpg", 32 | "https://pbs.twimg.com/profile_images/1614986714795180033/yOQly3os_400x400.jpg", 33 | ]; 34 | 35 | const HOUR = 60 * 60 * 1000; 36 | 37 | export const videos: Video[] = new Array(MAX_VIDEO_LENGTH).fill(0).map((_, i) => { 38 | return { 39 | id: i, 40 | title: titles[rando(titles.length)], 41 | description: descriptions[rando(descriptions.length)], 42 | boxArt: boxArts[rando(boxArts.length)], 43 | duration: HOUR + rando(0.5 * HOUR) + rando(0.5 * HOUR) + rando(0.5 * HOUR), 44 | }; 45 | }); 46 | -------------------------------------------------------------------------------- /src/lolomo/index.ts: -------------------------------------------------------------------------------- 1 | import http from "http"; 2 | import { createLolomo } from "./lolomo"; 3 | 4 | const port = +(process.env.PORT || 42069); 5 | 6 | http.createServer(async (_, res) => { 7 | res.writeHead(200, { "Content-Type": "text/plain" }); 8 | res.end(JSON.stringify(createLolomo())); 9 | }).listen(port); 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/lolomo/lolomo.ts: -------------------------------------------------------------------------------- 1 | import { Lolomo } from "../types"; 2 | import { rando, randomString } from "../utils"; 3 | import { videos } from "./helpers"; 4 | 5 | export function createLolomo(): Lolomo { 6 | return { 7 | id: randomString(16), 8 | lists: new Array(10).fill(0).map(() => { 9 | return { 10 | id: randomString(16), 11 | videos: new Array(10).fill(0).map(() => { 12 | return videos[rando(videos.length)]; 13 | }) 14 | }; 15 | }), 16 | }; 17 | } 18 | 19 | -------------------------------------------------------------------------------- /src/lolomo/proto.ts: -------------------------------------------------------------------------------- 1 | const protoDefs = require("../proto/lolomo_pb"); 2 | 3 | const Lolomo = protoDefs.lolomo.Lolomo; 4 | 5 | -------------------------------------------------------------------------------- /src/main/index.ts: -------------------------------------------------------------------------------- 1 | import http from "http"; 2 | import { Lolomo, LolomoExt } from "../types"; 3 | 4 | const port = +(process.env.PORT || 42069); 5 | const lolomoServiceUrl = process.env.LOLOMO_SERVICE_URL || "http://lolomo-service.theprimeagen.tv:42069"; 6 | const ratingsServiceUrl = process.env.RATINGS_SERVICE_URL || "http://ratings-service.theprimeagen.tv:42069"; 7 | 8 | function pluckAllIds(lolomo: Lolomo): number[][] { 9 | const out: number[][] = []; 10 | 11 | for (const list of lolomo.lists) { 12 | const row: number[] = []; 13 | for (const video of list.videos) { 14 | row.push(video.id); 15 | } 16 | out.push(row); 17 | } 18 | 19 | return out; 20 | } 21 | 22 | http.createServer(async (req, res) => { 23 | res.writeHead(200, { "Content-Type": "text/plain" }); 24 | 25 | // contact the lolomo service. 26 | const lolomo = (await (await fetch(lolomoServiceUrl)).json()) as LolomoExt; 27 | 28 | // get the ratings 29 | const ids = pluckAllIds(lolomo); 30 | const ratings = (await (await fetch(ratingsServiceUrl, { 31 | method: "POST", 32 | body: JSON.stringify(ids), 33 | })).json()) as number[][]; 34 | 35 | for (let i = 0; i < ratings.length; ++i) { 36 | const row = ratings[i]; 37 | for (let j = 0; j < row.length; j++) { 38 | lolomo.lists[i].videos[j].rating = row[i]; 39 | } 40 | } 41 | 42 | res.end(JSON.stringify(lolomo)); 43 | }).listen(port); 44 | 45 | 46 | -------------------------------------------------------------------------------- /src/proto/lolomo.ts: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | import * as Long from "long"; 3 | import * as _m0 from "protobufjs/minimal"; 4 | 5 | export const protobufPackage = "lolomo"; 6 | 7 | export interface Lolomo { 8 | lists: List[]; 9 | id: string; 10 | } 11 | 12 | export interface List { 13 | videos: Video[]; 14 | id: string; 15 | } 16 | 17 | export interface Video { 18 | id: number; 19 | title: string; 20 | description: string; 21 | duration: number; 22 | boxArt: string; 23 | rating: number; 24 | } 25 | 26 | function createBaseLolomo(): Lolomo { 27 | return { lists: [], id: "" }; 28 | } 29 | 30 | export const Lolomo = { 31 | encode(message: Lolomo, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { 32 | for (const v of message.lists) { 33 | List.encode(v!, writer.uint32(10).fork()).ldelim(); 34 | } 35 | if (message.id !== "") { 36 | writer.uint32(18).string(message.id); 37 | } 38 | return writer; 39 | }, 40 | 41 | decode(input: _m0.Reader | Uint8Array, length?: number): Lolomo { 42 | const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); 43 | let end = length === undefined ? reader.len : reader.pos + length; 44 | const message = createBaseLolomo(); 45 | while (reader.pos < end) { 46 | const tag = reader.uint32(); 47 | switch (tag >>> 3) { 48 | case 1: 49 | if (tag != 10) { 50 | break; 51 | } 52 | 53 | message.lists.push(List.decode(reader, reader.uint32())); 54 | continue; 55 | case 2: 56 | if (tag != 18) { 57 | break; 58 | } 59 | 60 | message.id = reader.string(); 61 | continue; 62 | } 63 | if ((tag & 7) == 4 || tag == 0) { 64 | break; 65 | } 66 | reader.skipType(tag & 7); 67 | } 68 | return message; 69 | }, 70 | 71 | fromJSON(object: any): Lolomo { 72 | return { 73 | lists: Array.isArray(object?.lists) ? object.lists.map((e: any) => List.fromJSON(e)) : [], 74 | id: isSet(object.id) ? String(object.id) : "", 75 | }; 76 | }, 77 | 78 | toJSON(message: Lolomo): unknown { 79 | const obj: any = {}; 80 | if (message.lists) { 81 | obj.lists = message.lists.map((e) => e ? List.toJSON(e) : undefined); 82 | } else { 83 | obj.lists = []; 84 | } 85 | message.id !== undefined && (obj.id = message.id); 86 | return obj; 87 | }, 88 | 89 | create, I>>(base?: I): Lolomo { 90 | return Lolomo.fromPartial(base ?? {}); 91 | }, 92 | 93 | fromPartial, I>>(object: I): Lolomo { 94 | const message = createBaseLolomo(); 95 | message.lists = object.lists?.map((e) => List.fromPartial(e)) || []; 96 | message.id = object.id ?? ""; 97 | return message; 98 | }, 99 | }; 100 | 101 | function createBaseList(): List { 102 | return { videos: [], id: "" }; 103 | } 104 | 105 | export const List = { 106 | encode(message: List, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { 107 | for (const v of message.videos) { 108 | Video.encode(v!, writer.uint32(10).fork()).ldelim(); 109 | } 110 | if (message.id !== "") { 111 | writer.uint32(18).string(message.id); 112 | } 113 | return writer; 114 | }, 115 | 116 | decode(input: _m0.Reader | Uint8Array, length?: number): List { 117 | const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); 118 | let end = length === undefined ? reader.len : reader.pos + length; 119 | const message = createBaseList(); 120 | while (reader.pos < end) { 121 | const tag = reader.uint32(); 122 | switch (tag >>> 3) { 123 | case 1: 124 | if (tag != 10) { 125 | break; 126 | } 127 | 128 | message.videos.push(Video.decode(reader, reader.uint32())); 129 | continue; 130 | case 2: 131 | if (tag != 18) { 132 | break; 133 | } 134 | 135 | message.id = reader.string(); 136 | continue; 137 | } 138 | if ((tag & 7) == 4 || tag == 0) { 139 | break; 140 | } 141 | reader.skipType(tag & 7); 142 | } 143 | return message; 144 | }, 145 | 146 | fromJSON(object: any): List { 147 | return { 148 | videos: Array.isArray(object?.videos) ? object.videos.map((e: any) => Video.fromJSON(e)) : [], 149 | id: isSet(object.id) ? String(object.id) : "", 150 | }; 151 | }, 152 | 153 | toJSON(message: List): unknown { 154 | const obj: any = {}; 155 | if (message.videos) { 156 | obj.videos = message.videos.map((e) => e ? Video.toJSON(e) : undefined); 157 | } else { 158 | obj.videos = []; 159 | } 160 | message.id !== undefined && (obj.id = message.id); 161 | return obj; 162 | }, 163 | 164 | create, I>>(base?: I): List { 165 | return List.fromPartial(base ?? {}); 166 | }, 167 | 168 | fromPartial, I>>(object: I): List { 169 | const message = createBaseList(); 170 | message.videos = object.videos?.map((e) => Video.fromPartial(e)) || []; 171 | message.id = object.id ?? ""; 172 | return message; 173 | }, 174 | }; 175 | 176 | function createBaseVideo(): Video { 177 | return { id: 0, title: "", description: "", duration: 0, boxArt: "", rating: 0 }; 178 | } 179 | 180 | export const Video = { 181 | encode(message: Video, writer: _m0.Writer = _m0.Writer.create()): _m0.Writer { 182 | if (message.id !== 0) { 183 | writer.uint32(8).int32(message.id); 184 | } 185 | if (message.title !== "") { 186 | writer.uint32(18).string(message.title); 187 | } 188 | if (message.description !== "") { 189 | writer.uint32(26).string(message.description); 190 | } 191 | if (message.duration !== 0) { 192 | writer.uint32(32).int64(message.duration); 193 | } 194 | if (message.boxArt !== "") { 195 | writer.uint32(42).string(message.boxArt); 196 | } 197 | if (message.rating !== 0) { 198 | writer.uint32(48).int32(message.rating); 199 | } 200 | return writer; 201 | }, 202 | 203 | decode(input: _m0.Reader | Uint8Array, length?: number): Video { 204 | const reader = input instanceof _m0.Reader ? input : _m0.Reader.create(input); 205 | let end = length === undefined ? reader.len : reader.pos + length; 206 | const message = createBaseVideo(); 207 | while (reader.pos < end) { 208 | const tag = reader.uint32(); 209 | switch (tag >>> 3) { 210 | case 1: 211 | if (tag != 8) { 212 | break; 213 | } 214 | 215 | message.id = reader.int32(); 216 | continue; 217 | case 2: 218 | if (tag != 18) { 219 | break; 220 | } 221 | 222 | message.title = reader.string(); 223 | continue; 224 | case 3: 225 | if (tag != 26) { 226 | break; 227 | } 228 | 229 | message.description = reader.string(); 230 | continue; 231 | case 4: 232 | if (tag != 32) { 233 | break; 234 | } 235 | 236 | message.duration = longToNumber(reader.int64() as Long); 237 | continue; 238 | case 5: 239 | if (tag != 42) { 240 | break; 241 | } 242 | 243 | message.boxArt = reader.string(); 244 | continue; 245 | case 6: 246 | if (tag != 48) { 247 | break; 248 | } 249 | 250 | message.rating = reader.int32(); 251 | continue; 252 | } 253 | if ((tag & 7) == 4 || tag == 0) { 254 | break; 255 | } 256 | reader.skipType(tag & 7); 257 | } 258 | return message; 259 | }, 260 | 261 | fromJSON(object: any): Video { 262 | return { 263 | id: isSet(object.id) ? Number(object.id) : 0, 264 | title: isSet(object.title) ? String(object.title) : "", 265 | description: isSet(object.description) ? String(object.description) : "", 266 | duration: isSet(object.duration) ? Number(object.duration) : 0, 267 | boxArt: isSet(object.boxArt) ? String(object.boxArt) : "", 268 | rating: isSet(object.rating) ? Number(object.rating) : 0, 269 | }; 270 | }, 271 | 272 | toJSON(message: Video): unknown { 273 | const obj: any = {}; 274 | message.id !== undefined && (obj.id = Math.round(message.id)); 275 | message.title !== undefined && (obj.title = message.title); 276 | message.description !== undefined && (obj.description = message.description); 277 | message.duration !== undefined && (obj.duration = Math.round(message.duration)); 278 | message.boxArt !== undefined && (obj.boxArt = message.boxArt); 279 | message.rating !== undefined && (obj.rating = Math.round(message.rating)); 280 | return obj; 281 | }, 282 | 283 | create, I>>(base?: I): Video { 284 | return Video.fromPartial(base ?? {}); 285 | }, 286 | 287 | fromPartial, I>>(object: I): Video { 288 | const message = createBaseVideo(); 289 | message.id = object.id ?? 0; 290 | message.title = object.title ?? ""; 291 | message.description = object.description ?? ""; 292 | message.duration = object.duration ?? 0; 293 | message.boxArt = object.boxArt ?? ""; 294 | message.rating = object.rating ?? 0; 295 | return message; 296 | }, 297 | }; 298 | 299 | declare var self: any | undefined; 300 | declare var window: any | undefined; 301 | declare var global: any | undefined; 302 | var tsProtoGlobalThis: any = (() => { 303 | if (typeof globalThis !== "undefined") { 304 | return globalThis; 305 | } 306 | if (typeof self !== "undefined") { 307 | return self; 308 | } 309 | if (typeof window !== "undefined") { 310 | return window; 311 | } 312 | if (typeof global !== "undefined") { 313 | return global; 314 | } 315 | throw "Unable to locate global object"; 316 | })(); 317 | 318 | type Builtin = Date | Function | Uint8Array | string | number | boolean | undefined; 319 | 320 | export type DeepPartial = T extends Builtin ? T 321 | : T extends Array ? Array> : T extends ReadonlyArray ? ReadonlyArray> 322 | : T extends {} ? { [K in keyof T]?: DeepPartial } 323 | : Partial; 324 | 325 | type KeysOfUnion = T extends T ? keyof T : never; 326 | export type Exact = P extends Builtin ? P 327 | : P & { [K in keyof P]: Exact } & { [K in Exclude>]: never }; 328 | 329 | function longToNumber(long: Long): number { 330 | if (long.gt(Number.MAX_SAFE_INTEGER)) { 331 | throw new tsProtoGlobalThis.Error("Value is larger than Number.MAX_SAFE_INTEGER"); 332 | } 333 | return long.toNumber(); 334 | } 335 | 336 | // If you get a compile-error about 'Constructor and ... have no overlap', 337 | // add '--ts_proto_opt=esModuleInterop=true' as a flag when calling 'protoc'. 338 | if (_m0.util.Long !== Long) { 339 | _m0.util.Long = Long as any; 340 | _m0.configure(); 341 | } 342 | 343 | function isSet(value: any): boolean { 344 | return value !== null && value !== undefined; 345 | } 346 | -------------------------------------------------------------------------------- /src/ratings/index.ts: -------------------------------------------------------------------------------- 1 | import http from "http"; 2 | import { MAX_VIDEO_LENGTH } from "../consts"; 3 | import { clamp } from "../utils"; 4 | const port = +(process.env.PORT || 42069); 5 | 6 | const ratings = new Array(MAX_VIDEO_LENGTH).fill(0).map(() => clamp(1, 5)); 7 | 8 | function readData(req: http.IncomingMessage): Promise { 9 | return new Promise(resolve => { 10 | let data = ""; 11 | req.on("data", chunk => { 12 | data += chunk; 13 | }); 14 | req.on("end", () => { 15 | resolve(data) 16 | }); 17 | }); 18 | } 19 | 20 | http.createServer(async (req, res) => { 21 | res.writeHead(200, { "Content-Type": "text/plain" }); 22 | 23 | const data = await readData(req); 24 | try { 25 | const ids = JSON.parse(data) as number[][]; 26 | res.end(JSON.stringify(ids.map(row => row.map(id => ratings[id])))); 27 | return; 28 | } catch (e) { 29 | // this should never happen? 30 | console.log(e); 31 | } 32 | 33 | res.end(JSON.stringify([])); 34 | }).listen(port); 35 | 36 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | 2 | export type Lolomo = { 3 | lists: List[] 4 | id: string, 5 | } 6 | 7 | export type List = { 8 | videos: Video[], 9 | id: string, 10 | } 11 | 12 | export type Video = { 13 | id: number, 14 | title: string, 15 | description: string, 16 | duration: number, 17 | boxArt: string, 18 | } 19 | 20 | export type VideoExt = Video & { 21 | rating: number, 22 | } 23 | 24 | export type LolomoExt = Lolomo & { 25 | lists: ListExt[] 26 | } 27 | 28 | export type ListExt = List & { 29 | videos: VideoExt[], 30 | } 31 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | 2 | export function wait(ms: number): Promise { 3 | return new Promise(res => setTimeout(res, ms)); 4 | } 5 | 6 | function mulberry32(a: number) { 7 | return function () { 8 | let t = (a += 0x6d2b79f5); 9 | t = Math.imul(t ^ (t >>> 15), t | 1); 10 | t ^= t + Math.imul(t ^ (t >>> 7), t | 61); 11 | return ((t ^ (t >>> 14)) >>> 0) / 4294967296; 12 | }; 13 | } 14 | 15 | const random = mulberry32(0xbabecafe); 16 | 17 | export function randomString(length: number): string { 18 | const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; 19 | let out = ""; 20 | for (let i = 0; i < length; ++i) { 21 | out += chars[rando(chars.length)]; 22 | } 23 | return out; 24 | } 25 | 26 | export function rando(max: number): number { 27 | return Math.floor(random() * max); 28 | } 29 | 30 | export function clamp(min: number, max: number): number { 31 | return Math.floor(random() * (max - min + 1)) + min; 32 | } 33 | -------------------------------------------------------------------------------- /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": "commonjs", /* 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": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 32 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 33 | // "typeRoots": [], /* Specify multiple folders that act like `./node_modules/@types`. */ 34 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 35 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 36 | // "resolveJsonModule": true, /* Enable importing .json files */ 37 | // "noResolve": true, /* Disallow `import`s, `require`s or ``s from expanding the number of files TypeScript should add to a project. */ 38 | 39 | /* JavaScript Support */ 40 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the `checkJS` option to get errors from these files. */ 41 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 42 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from `node_modules`. Only applicable with `allowJs`. */ 43 | 44 | /* Emit */ 45 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 46 | "declarationMap": true, /* Create sourcemaps for d.ts files. */ 47 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 48 | "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 49 | // "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. */ 50 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 51 | // "removeComments": true, /* Disable emitting comments. */ 52 | // "noEmit": true, /* Disable emitting files from a compilation. */ 53 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 54 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types */ 55 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 56 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 57 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 58 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 59 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 60 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 61 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 62 | // "stripInternal": true, /* Disable emitting declarations that have `@internal` in their JSDoc comments. */ 63 | // "noEmitHelpers": true, /* Disable generating custom helper functions like `__extends` in compiled output. */ 64 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 65 | // "preserveConstEnums": true, /* Disable erasing `const enum` declarations in generated code. */ 66 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 67 | 68 | /* Interop Constraints */ 69 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 70 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 71 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables `allowSyntheticDefaultImports` for type compatibility. */ 72 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 73 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 74 | 75 | /* Type Checking */ 76 | "strict": true, /* Enable all strict type-checking options. */ 77 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ 78 | // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ 79 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 80 | // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ 81 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 82 | // "noImplicitThis": true, /* Enable error reporting when `this` is given the type `any`. */ 83 | // "useUnknownInCatchVariables": true, /* Type catch clause variables as 'unknown' instead of 'any'. */ 84 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 85 | // "noUnusedLocals": true, /* Enable error reporting when a local variables aren't read. */ 86 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read */ 87 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 88 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 89 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 90 | // "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */ 91 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 92 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type */ 93 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 94 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 95 | 96 | /* Completeness */ 97 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 98 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 99 | } 100 | } 101 | --------------------------------------------------------------------------------