├── .circleci └── config.yml ├── .env.example ├── .gitignore ├── .snyk ├── .whitesource ├── README.md ├── app.mjs ├── bin └── printSchema.mjs ├── data ├── client_credentials.js ├── resolvers.mjs └── schema.mjs ├── package.json ├── public ├── index.html └── stylesheets │ └── style.sass ├── renovate.json ├── serverInit.mjs ├── test └── schemaTest.mjs └── yarn.lock /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | jobs: 3 | build: 4 | docker: 5 | - image: circleci/node:17.2.0@sha256:b2330f71df36d859dd822767ed7799bf67ea0a82efa451df6f121f52f7bd337d 6 | steps: 7 | - checkout 8 | - run: 9 | name: install-npm 10 | command: npm install 11 | - save_cache: 12 | key: dependency-cache-{{ checksum "package.json" }} 13 | paths: 14 | - ./node_modules 15 | - run: 16 | name: test 17 | command: npm test 18 | - store_artifacts: 19 | path: test-results.xml 20 | prefix: tests -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # please rename this to .env 2 | # and enter a correct client id and secret, which you can get there. 3 | # 4 | # https://developer.spotify.com/my-applications/#!/applications 5 | # 6 | # no special redirect_url is needed, but you can add 7 | # 8 | # http://localhost:4000/ 9 | # 10 | # 11 | # These valued wont work :-) 12 | CLIENT_ID=12345678901234567890 13 | CLIENT_SECRET=abcdefghijklmnopqrstuvw1234567 14 | 15 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | npm-debug.log* 2 | 3 | # Coverage directory used by tools like istanbul 4 | coverage 5 | 6 | # Dependency directories 7 | node_modules 8 | 9 | # Optional npm cache directory 10 | .npm 11 | 12 | # Optional REPL history 13 | .node_repl_history 14 | 15 | # generated from sass 16 | public/stylesheets/style.css.map 17 | public/stylesheets/style.css -------------------------------------------------------------------------------- /.snyk: -------------------------------------------------------------------------------- 1 | # Snyk (https://snyk.io) policy file, patches or ignores known vulnerabilities. 2 | version: v1.22.1 3 | ignore: {} 4 | # patches apply the minimum changes required to fix a vulnerability 5 | patch: 6 | 'npm:extend:20180424': 7 | - node-sass-middleware > node-sass > request > extend: 8 | patched: '2021-10-06T19:24:56.427Z' 9 | - node-sass-middleware > node-sass > node-gyp > request > extend: 10 | patched: '2021-10-06T19:24:56.427Z' 11 | 'npm:hoek:20180212': 12 | - node-sass-middleware > node-sass > node-gyp > request > hawk > hoek: 13 | patched: '2021-10-06T19:24:56.427Z' 14 | - node-sass-middleware > node-sass > node-gyp > request > hawk > boom > hoek: 15 | patched: '2021-10-06T19:24:56.427Z' 16 | - node-sass-middleware > node-sass > node-gyp > request > hawk > sntp > hoek: 17 | patched: '2021-10-06T19:24:56.427Z' 18 | - node-sass-middleware > node-sass > node-gyp > request > hawk > cryptiles > boom > hoek: 19 | patched: '2021-10-06T19:24:56.427Z' 20 | - node-sass-middleware > node-sass > request > hawk > hoek: 21 | patched: '2021-10-06T19:24:56.427Z' 22 | - node-sass-middleware > node-sass > request > hawk > boom > hoek: 23 | patched: '2021-10-06T19:24:56.427Z' 24 | - node-sass-middleware > node-sass > request > hawk > sntp > hoek: 25 | patched: '2021-10-06T19:24:56.427Z' 26 | - node-sass-middleware > node-sass > request > hawk > cryptiles > boom > hoek: 27 | patched: '2021-10-06T19:24:56.427Z' 28 | 'npm:stringstream:20180511': 29 | - node-sass-middleware > node-sass > request > stringstream: 30 | patched: '2021-10-06T19:24:56.427Z' 31 | - node-sass-middleware > node-sass > node-gyp > request > stringstream: 32 | patched: '2021-10-06T19:24:56.427Z' 33 | 'npm:tunnel-agent:20170305': 34 | - node-sass-middleware > node-sass > request > tunnel-agent: 35 | patched: '2021-10-06T19:24:56.427Z' 36 | -------------------------------------------------------------------------------- /.whitesource: -------------------------------------------------------------------------------- 1 | { 2 | "scanSettings": { 3 | "configMode": "AUTO", 4 | "configExternalURL": "", 5 | "projectToken" : "" 6 | }, 7 | "checkRunSettings": { 8 | "vulnerableCheckRunConclusionLevel": "failure" 9 | }, 10 | "issueSettings": { 11 | "minSeverityLevel": "LOW" 12 | } 13 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # spotify-graphql-server 2 | 3 | This demonstrates how to build a GraphQL server which fetches data from an external API (Spotify), 4 | see [german blog post](https://blog.codecentric.de/2017/09/graphql-mit-spotify-teil-1-server) or 5 | [english blog post](https://blog.codecentric.de/en/2017/01/lets-build-spotify-graphql-server) 6 | 7 | ~Use the [Live Demo] as a playground for graphql queries.~ 8 | 9 | ## Get started 10 | 11 | ### prerequisites 12 | 13 | For running this example locally, you must 14 | [register your own application at spotify](https://developer.spotify.com/documentation/general/guides/authorization/app-settings/). 15 | Then create an [.env](./.env) file with the generated token, based on the example [.env.example](./.env.example) file. 16 | 17 | Have a modern `node.js` version ( >=14 ) installed. 18 | 19 | Run `yarn install`. 20 | 21 | ### run server 22 | 23 | `yarn start` to start the graphql server, then open http://localhost:4000/ 24 | 25 | `yarn watch` to start the graphql server which automatically restarts when any sources were changed (driven by `nodemon`) 26 | 27 | ### run tests 28 | 29 | `yarn test` 30 | 31 | ### print GraphQL schema idl 32 | 33 | `yarn run printSchema` 34 | -------------------------------------------------------------------------------- /app.mjs: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import path from "path"; 3 | import logger from "morgan"; 4 | import cookieParser from "cookie-parser"; 5 | import bodyParser from "body-parser"; 6 | import cors from "cors"; 7 | 8 | import { graphqlHTTP } from "express-graphql"; 9 | 10 | import {schema} from "./data/schema.mjs"; 11 | import { fetchArtistsByName } from "./data/resolvers.mjs"; 12 | 13 | const app = express(); 14 | 15 | app.use(logger('dev')); 16 | app.use(bodyParser.json()); 17 | app.use(bodyParser.urlencoded({ extended: false })); 18 | app.use(cookieParser()); 19 | app.use(express.static(path.join('.', 'public'))); 20 | 21 | const rootValue = { 22 | hi: () => 'Hello world!', 23 | queryArtists: ({ byName }) => fetchArtistsByName(byName) 24 | }; 25 | 26 | // API middleware 27 | 28 | app.use('/graphql', cors(), graphqlHTTP(req => ({ 29 | schema, 30 | graphiql: true, 31 | rootValue, 32 | pretty: process.env.NODE_ENV !== 'production', 33 | }))); 34 | 35 | // catch 404 and forward to error handler 36 | app.use(function(req, res, next) { 37 | const err = new Error('Not Found'); 38 | err.status = 404; 39 | next(err); 40 | }); 41 | 42 | // error handlers 43 | 44 | // development error handler 45 | // will print stacktrace 46 | if (app.get('env') === 'development') { 47 | app.use(function (err, req, res, next) { 48 | console.log(err) 49 | res.status(err.status || 500); 50 | res.send(`Sorry, there was this error: ` + ` 51 |

${err.message}

52 |

${err.status}

53 |
${err.stack}
54 | `); 55 | 56 | }); 57 | } 58 | 59 | // production error handler 60 | // no stack-traces leaked to user 61 | app.use(function (err, req, res, next) { 62 | res.status(err.status || 500); 63 | res.send(`Sorry, there was this error: ` + ` 64 |

${err.message}

65 |

${err.status}

66 |
${err.stack}
67 | `); 68 | }); 69 | 70 | export default app; 71 | -------------------------------------------------------------------------------- /bin/printSchema.mjs: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import { printSchema } from "graphql"; 4 | 5 | import { schema } from "../data/schema.mjs"; 6 | 7 | console.log(printSchema(schema)); 8 | -------------------------------------------------------------------------------- /data/client_credentials.js: -------------------------------------------------------------------------------- 1 | /** 2 | * For more information, read 3 | * https://developer.spotify.com/web-api/authorization-guide/#client_credentials_flow 4 | * 5 | * #authenticate() creates Promise for fetching a new authentication token with a `expire in ... ` information 6 | * which will be stored and used in the `isExpired()` check. 7 | * 8 | * Note: if `authenticate()` was not resolved yet, so there was no expire-information yet, the isExpired() will always 9 | * return `false` 10 | */ 11 | 12 | import fetch from "node-fetch"; 13 | 14 | import { config } from "dotenv"; 15 | 16 | config(); 17 | // load secrets from .env file and store in process.env 18 | 19 | const { 20 | CLIENT_ID = 'invalid', 21 | CLIENT_SECRET = 'invalid' 22 | } = process.env; 23 | 24 | const authorizationHeader = () => 'Basic ' + (new Buffer(CLIENT_ID + ':' + CLIENT_SECRET).toString('base64')); 25 | 26 | const authOptions = { 27 | url: 'https://accounts.spotify.com/api/token', 28 | }; 29 | 30 | // 31 | let expireTime = 0; 32 | 33 | export default { 34 | isExpired: () => { 35 | if(expireTime) { 36 | return Date.now() > expireTime; 37 | } 38 | return false; 39 | }, 40 | authenticate: () => { 41 | const options = { 42 | headers: { 43 | 'Content-Type': 'application/x-www-form-urlencoded', 44 | 'Accept': 'application/json', 45 | 'Authorization': authorizationHeader() 46 | }, 47 | method: 'POST', 48 | body: 'grant_type=client_credentials' 49 | }; 50 | 51 | return fetch(authOptions.url, options) 52 | .then((response) => { 53 | return response.json(); 54 | }) 55 | .then(token => { 56 | const time = Date.now(); 57 | const expires_in = Number.parseInt(token.expires_in, 10); 58 | 59 | expireTime = time + expires_in * 1000; // 60 | 61 | return token; 62 | }); 63 | } 64 | }; 65 | -------------------------------------------------------------------------------- /data/resolvers.mjs: -------------------------------------------------------------------------------- 1 | import fetch from "node-fetch"; 2 | 3 | import client_credentials from "./client_credentials.js"; 4 | 5 | function errorMsg (error) { 6 | if (error) { 7 | const { status = '', message = 'no details' } = error; 8 | return `Error: ${status}: ${message}`; 9 | } 10 | return 'An unknown error!' 11 | } 12 | 13 | function throwExceptionOnError (data) { 14 | if (data.error) { 15 | throw new Error(errorMsg(data.error)); 16 | } 17 | } 18 | 19 | const headers = { 20 | 'Accept': 'application/json', 21 | 'Authorization': '' 22 | }; 23 | let awaitingAuthorization; 24 | 25 | // const spotifyProxy = async () => { 26 | const spotifyProxy = () => { 27 | if (awaitingAuthorization && !client_credentials.isExpired()) { 28 | // use existing promise, if not expired 29 | return awaitingAuthorization; 30 | } 31 | if (!awaitingAuthorization || client_credentials.isExpired()) { 32 | awaitingAuthorization = new Promise((resolve, reject) => { 33 | client_credentials.authenticate() 34 | .then((token) => { 35 | headers.Authorization = 'Bearer ' + token.access_token; 36 | resolve(headers); 37 | }) 38 | .catch((err) => { 39 | reject(err); 40 | }); 41 | }); 42 | } 43 | return awaitingAuthorization; 44 | }; 45 | 46 | const haveHeadersWithAuthToken = async () => { 47 | return await spotifyProxy() 48 | }; 49 | 50 | 51 | export const fetchArtistsByName = async (name) => { 52 | console.log(`debug: query artist ${name} `); 53 | 54 | const response = await fetch(`https://api.spotify.com/v1/search?q=${name}&type=artist`, { 55 | headers: await haveHeadersWithAuthToken() 56 | }); 57 | const data = await response.json(); 58 | throwExceptionOnError(data); 59 | 60 | return (data.artists.items || []) 61 | .map(artistRaw => spotifyJsonToArtist(artistRaw)); 62 | }; 63 | 64 | export const fetchAlbumsOfArtist = async (artistId) => { 65 | console.log(`debug: query albums of artist ${artistId} `); 66 | 67 | const response = await fetch(`https://api.spotify.com/v1/artists/${artistId}/albums`, { 68 | headers: await haveHeadersWithAuthToken() 69 | }); 70 | const data = await response.json(); 71 | throwExceptionOnError(data); 72 | 73 | return (data.items || []) 74 | .map(albumRaw => spotifyJsonToAlbum(albumRaw)); 75 | }; 76 | 77 | const spotifyJsonToArtist = async (raw) => { 78 | return { 79 | // fills with raw data (by ES6 spread operator): 80 | ...raw, 81 | 82 | // This needs extra logic: defaults to an empty string, if there is no image 83 | // else: just takes URL of the first image 84 | image: raw.images[0] ? raw.images[0].url : '', 85 | 86 | // .. needs to fetch the artist's albums: 87 | albums: (args) => { 88 | // this is similar to fetchArtistsByName() 89 | // returns a Promise which gets resolved asynchronously ! 90 | const artistId = raw.id; 91 | const { limit=1 } = args; 92 | return fetchAlbumsOfArtist(artistId, limit); 93 | } 94 | }; 95 | }; 96 | 97 | const spotifyJsonToAlbum = (albumRaw) => { 98 | return { 99 | // fills with raw data (by ES6 spread operator): 100 | ...albumRaw, 101 | 102 | // This needs extra logic: defaults to an empty string, if there is no image 103 | // else: just takes URL of the first image 104 | image: albumRaw.images[0] ? albumRaw.images[0].url : '', 105 | 106 | tracks: [] // TODO implement fetching of tracks of album 107 | }; 108 | }; 109 | -------------------------------------------------------------------------------- /data/schema.mjs: -------------------------------------------------------------------------------- 1 | import { buildSchema } from "graphql"; 2 | 3 | export const schema = buildSchema(` 4 | # The root of all queries: 5 | 6 | type Query { 7 | # Just returns "Hello world!" 8 | hi(message: String = "Hi"): String 9 | queryArtists(byName: String = "Red Hot Chili Peppers"): [Artist] 10 | } 11 | type Artist { 12 | name: String! 13 | id: ID 14 | image: String 15 | albums(limit: Int = 10): [Album] 16 | } 17 | type Album { 18 | name: String 19 | id: ID 20 | image: String 21 | tracks: [Track] 22 | } 23 | type Track { 24 | name: String! 25 | artists: [Artist] 26 | preview_url: String 27 | id: ID 28 | } 29 | `); 30 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "spot-graphql-server", 3 | "version": "0.3.0", 4 | "private": true, 5 | "type": "module", 6 | "engines": { 7 | "yarn": "1", 8 | "npm": "11", 9 | "node": ">=16.x" 10 | }, 11 | "scripts": { 12 | "test": "npm run simpletest", 13 | "build": "sass public/stylesheets/style.sass:public/stylesheets/style.css", 14 | "simpletest": "node ./test/schemaTest.mjs", 15 | "printSchema": "node ./bin/printSchema.mjs", 16 | "watch": "npm run build ; nodemon serverInit.mjs", 17 | "start": "npm run build ; node serverInit.mjs", 18 | "prepare": "yarn run snyk-protect", 19 | "snyk-protect": "snyk-protect" 20 | }, 21 | "dependencies": { 22 | "@graphql-tools/mock": "9.0.23", 23 | "@snyk/protect": "1.1297.1", 24 | "body-parser": "2.2.0", 25 | "cookie-parser": "1.4.7", 26 | "cors": "2.8.5", 27 | "debug": "4.4.1", 28 | "dotenv": "16.5.0", 29 | "express": "5.1.0", 30 | "express-graphql": "0.12.0", 31 | "graphql": "16.11.0", 32 | "morgan": "1.10.0", 33 | "node-fetch": "3.3.2", 34 | "sass": "1.89.0" 35 | }, 36 | "devDependencies": { 37 | "nodemon": "3.1.10" 38 | }, 39 | "snyk": true 40 | } 41 | -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Spotify Graphql Server 5 | 6 | 13 | 14 | 15 |

GraphQL-logoSpotify Graphql Server

16 | 17 |

by @lowsky@mastodontech.de

19 | 20 |

Try these predefined queries in GraphiQL playground:

21 | 22 |

Start a query for
23 | 24 | artists with a name containing Red Hot Chili 25 |
26 | 27 | artists with a name containing Red Hot Chili 28 | and their albums and its tracks. 29 |
30 | 31 | in the GraphiQL playground.

32 | 33 |

Or open an empty GraphiQL playground.

34 | 35 |
36 | Loading Tracks is currently not implemented. Follow issue #3 for updates 37 |
38 | 39 |

Please do not mind, that there is a "natural" limit set by Spotify, so the query results may be "incomplete".

40 | 41 |
42 | 43 | Find (old) details in the English or 44 | German blog post and find the sources on 45 | GitHub 46 | 47 | 48 | -------------------------------------------------------------------------------- /public/stylesheets/style.sass: -------------------------------------------------------------------------------- 1 | body 2 | padding: 2em 1em 3 | margin: 0 auto 4 | max-width: 48em 5 | 6 | color: #555 7 | 8 | font: 14px "Roboto", Helvetica, Arial, sans-serif 9 | -webkit-font-smoothing: antialiased 10 | -moz-osx-font-smoothing: grayscale 11 | 12 | @import 'https://fonts.googleapis.com/css?family=Roboto:300,400,500' 13 | 14 | h1, h2, h3, strong 15 | color: #222 16 | margin-top: 2em 17 | padding-top: 1em 18 | 19 | h3 20 | margin-top: 1em 21 | 22 | a 23 | color: #00B7FF 24 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /serverInit.mjs: -------------------------------------------------------------------------------- 1 | /** 2 | * Module dependencies. 3 | */ 4 | import dotenv from "dotenv/config"; 5 | import debug0 from "debug"; 6 | 7 | const debug = debug0('spot-graphql-server:server'); 8 | 9 | import app from "./app.mjs"; 10 | /** 11 | * Get port from environment and store in Express. 12 | */ 13 | const port = process.env.PORT || '4000'; 14 | app.set('port', port); 15 | 16 | /** 17 | * Listen on provided port, on all network interfaces. 18 | */ 19 | app.on('error', onError); 20 | app.listen(port, () => { 21 | console.log(`listen on http://localhost:${port}`); 22 | }); 23 | 24 | /** 25 | * Event listener for HTTP server "error" event. 26 | */ 27 | 28 | function onError(error) { 29 | if (error.syscall !== 'listen') { 30 | throw error; 31 | } 32 | 33 | // handle specific listen errors with friendly messages 34 | switch (error.code) { 35 | case 'EACCES': 36 | console.error(`Port $port requires elevated privileges`); 37 | process.exit(1); 38 | break; 39 | case 'EADDRINUSE': 40 | console.error(`Port $port is already in use`); 41 | process.exit(1); 42 | break; 43 | default: 44 | throw error; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /test/schemaTest.mjs: -------------------------------------------------------------------------------- 1 | import { mockServer } from "@graphql-tools/mock"; 2 | 3 | import { schema } from "../data/schema.mjs"; 4 | 5 | let cnt = 0; 6 | 7 | const simpleMockServer = mockServer(schema, { 8 | String: () => 'loremipsum ' + (cnt++), 9 | Album: () => { 10 | return { 11 | name: () => {return 'Album#1'} 12 | }; 13 | } 14 | }); 15 | 16 | const result = simpleMockServer.query(`{ 17 | queryArtists(byName:"Marilyn Manson") { 18 | name 19 | albums { 20 | name 21 | tracks { 22 | name 23 | artists { name } 24 | } 25 | } 26 | } 27 | }`); 28 | 29 | result.then(data => { 30 | console.log('data: ', JSON.stringify(data, ' ', 1)); 31 | }).catch(error => { 32 | console.log('error: ', error); 33 | }); 34 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@graphql-tools/merge@^9.0.24": 6 | version "9.0.24" 7 | resolved "https://registry.yarnpkg.com/@graphql-tools/merge/-/merge-9.0.24.tgz#1f366e85588894cb496bd1c332be7665db143df2" 8 | integrity sha512-NzWx/Afl/1qHT3Nm1bghGG2l4jub28AdvtG11PoUlmjcIjnFBJMv4vqL0qnxWe8A82peWo4/TkVdjJRLXwgGEw== 9 | dependencies: 10 | "@graphql-tools/utils" "^10.8.6" 11 | tslib "^2.4.0" 12 | 13 | "@graphql-tools/mock@9.0.23": 14 | version "9.0.23" 15 | resolved "https://registry.yarnpkg.com/@graphql-tools/mock/-/mock-9.0.23.tgz#d03f2c35be87084ed497b74c0eecb8d6cc1e137c" 16 | integrity sha512-l6z5OdMAvMybqG/8aIhSJyhyc4/ryEYWY4CmpkH9KbLFe0tLOMCCbBR0+K/ANMzs2ZdGy/9yknDHGvDH46fwZw== 17 | dependencies: 18 | "@graphql-tools/schema" "^10.0.23" 19 | "@graphql-tools/utils" "^10.8.6" 20 | fast-json-stable-stringify "^2.1.0" 21 | tslib "^2.4.0" 22 | 23 | "@graphql-tools/schema@^10.0.23": 24 | version "10.0.23" 25 | resolved "https://registry.yarnpkg.com/@graphql-tools/schema/-/schema-10.0.23.tgz#d8865e96f37a04ca43303d7024add7edbe0c5ed4" 26 | integrity sha512-aEGVpd1PCuGEwqTXCStpEkmheTHNdMayiIKH1xDWqYp9i8yKv9FRDgkGrY4RD8TNxnf7iII+6KOBGaJ3ygH95A== 27 | dependencies: 28 | "@graphql-tools/merge" "^9.0.24" 29 | "@graphql-tools/utils" "^10.8.6" 30 | tslib "^2.4.0" 31 | 32 | "@graphql-tools/utils@^10.8.6": 33 | version "10.8.6" 34 | resolved "https://registry.yarnpkg.com/@graphql-tools/utils/-/utils-10.8.6.tgz#69ef29e408a27919108b2b2227fe8b465acf9e5c" 35 | integrity sha512-Alc9Vyg0oOsGhRapfL3xvqh1zV8nKoFUdtLhXX7Ki4nClaIJXckrA86j+uxEuG3ic6j4jlM1nvcWXRn/71AVLQ== 36 | dependencies: 37 | "@graphql-typed-document-node/core" "^3.1.1" 38 | "@whatwg-node/promise-helpers" "^1.0.0" 39 | cross-inspect "1.0.1" 40 | dset "^3.1.4" 41 | tslib "^2.4.0" 42 | 43 | "@graphql-typed-document-node/core@^3.1.1": 44 | version "3.1.1" 45 | resolved "https://registry.yarnpkg.com/@graphql-typed-document-node/core/-/core-3.1.1.tgz#076d78ce99822258cf813ecc1e7fa460fa74d052" 46 | integrity sha512-NQ17ii0rK1b34VZonlmT2QMJFI70m0TRwbknO/ihlbatXyaktDhN/98vBiUU6kNBPljqGqyIrl2T4nY2RpFANg== 47 | 48 | "@parcel/watcher-android-arm64@2.5.0": 49 | version "2.5.0" 50 | resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz#e32d3dda6647791ee930556aee206fcd5ea0fb7a" 51 | integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== 52 | 53 | "@parcel/watcher-darwin-arm64@2.5.0": 54 | version "2.5.0" 55 | resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz#0d9e680b7e9ec1c8f54944f1b945aa8755afb12f" 56 | integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== 57 | 58 | "@parcel/watcher-darwin-x64@2.5.0": 59 | version "2.5.0" 60 | resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz#f9f1d5ce9d5878d344f14ef1856b7a830c59d1bb" 61 | integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== 62 | 63 | "@parcel/watcher-freebsd-x64@2.5.0": 64 | version "2.5.0" 65 | resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz#2b77f0c82d19e84ff4c21de6da7f7d096b1a7e82" 66 | integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== 67 | 68 | "@parcel/watcher-linux-arm-glibc@2.5.0": 69 | version "2.5.0" 70 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz#92ed322c56dbafa3d2545dcf2803334aee131e42" 71 | integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== 72 | 73 | "@parcel/watcher-linux-arm-musl@2.5.0": 74 | version "2.5.0" 75 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz#cd48e9bfde0cdbbd2ecd9accfc52967e22f849a4" 76 | integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== 77 | 78 | "@parcel/watcher-linux-arm64-glibc@2.5.0": 79 | version "2.5.0" 80 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz#7b81f6d5a442bb89fbabaf6c13573e94a46feb03" 81 | integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== 82 | 83 | "@parcel/watcher-linux-arm64-musl@2.5.0": 84 | version "2.5.0" 85 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz#dcb8ff01077cdf59a18d9e0a4dff7a0cfe5fd732" 86 | integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== 87 | 88 | "@parcel/watcher-linux-x64-glibc@2.5.0": 89 | version "2.5.0" 90 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz#2e254600fda4e32d83942384d1106e1eed84494d" 91 | integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== 92 | 93 | "@parcel/watcher-linux-x64-musl@2.5.0": 94 | version "2.5.0" 95 | resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz#01fcea60fedbb3225af808d3f0a7b11229792eef" 96 | integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== 97 | 98 | "@parcel/watcher-win32-arm64@2.5.0": 99 | version "2.5.0" 100 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz#87cdb16e0783e770197e52fb1dc027bb0c847154" 101 | integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== 102 | 103 | "@parcel/watcher-win32-ia32@2.5.0": 104 | version "2.5.0" 105 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz#778c39b56da33e045ba21c678c31a9f9d7c6b220" 106 | integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== 107 | 108 | "@parcel/watcher-win32-x64@2.5.0": 109 | version "2.5.0" 110 | resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz#33873876d0bbc588aacce38e90d1d7480ce81cb7" 111 | integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== 112 | 113 | "@parcel/watcher@^2.4.1": 114 | version "2.5.0" 115 | resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.0.tgz#5c88818b12b8de4307a9d3e6dc3e28eba0dfbd10" 116 | integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== 117 | dependencies: 118 | detect-libc "^1.0.3" 119 | is-glob "^4.0.3" 120 | micromatch "^4.0.5" 121 | node-addon-api "^7.0.0" 122 | optionalDependencies: 123 | "@parcel/watcher-android-arm64" "2.5.0" 124 | "@parcel/watcher-darwin-arm64" "2.5.0" 125 | "@parcel/watcher-darwin-x64" "2.5.0" 126 | "@parcel/watcher-freebsd-x64" "2.5.0" 127 | "@parcel/watcher-linux-arm-glibc" "2.5.0" 128 | "@parcel/watcher-linux-arm-musl" "2.5.0" 129 | "@parcel/watcher-linux-arm64-glibc" "2.5.0" 130 | "@parcel/watcher-linux-arm64-musl" "2.5.0" 131 | "@parcel/watcher-linux-x64-glibc" "2.5.0" 132 | "@parcel/watcher-linux-x64-musl" "2.5.0" 133 | "@parcel/watcher-win32-arm64" "2.5.0" 134 | "@parcel/watcher-win32-ia32" "2.5.0" 135 | "@parcel/watcher-win32-x64" "2.5.0" 136 | 137 | "@snyk/protect@1.1297.1": 138 | version "1.1297.1" 139 | resolved "https://registry.yarnpkg.com/@snyk/protect/-/protect-1.1297.1.tgz#c9ebb000a62dac19f816d27774b8f4ce3bc41d70" 140 | integrity sha512-utKBpujqA4GzyzBjeUZETaLtq6LDuzc7WA13V0FcZK4UCli6OltOPRk4J1LG1EgU/XELOW6SKJGAFOBWmZpdvQ== 141 | 142 | "@whatwg-node/promise-helpers@^1.0.0": 143 | version "1.2.2" 144 | resolved "https://registry.yarnpkg.com/@whatwg-node/promise-helpers/-/promise-helpers-1.2.2.tgz#9e26073385086975e65609d6c9b27f9d7f92280d" 145 | integrity sha512-aPVTGCs/QEYkSTnYcLKE1wyYZykbGjaXsEwXHc0FKbSlojIpdw72BQMJx9aJXzkCs6qy9WfDV0jhV9C2qIYYOA== 146 | dependencies: 147 | tslib "^2.6.3" 148 | 149 | abbrev@1: 150 | version "1.1.1" 151 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 152 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 153 | 154 | accepts@^1.3.7: 155 | version "1.3.8" 156 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 157 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 158 | dependencies: 159 | mime-types "~2.1.34" 160 | negotiator "0.6.3" 161 | 162 | accepts@^2.0.0: 163 | version "2.0.0" 164 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" 165 | integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== 166 | dependencies: 167 | mime-types "^3.0.0" 168 | negotiator "^1.0.0" 169 | 170 | anymatch@~3.1.2: 171 | version "3.1.2" 172 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" 173 | integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== 174 | dependencies: 175 | normalize-path "^3.0.0" 176 | picomatch "^2.0.4" 177 | 178 | balanced-match@^1.0.0: 179 | version "1.0.2" 180 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 181 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 182 | 183 | basic-auth@~2.0.1: 184 | version "2.0.1" 185 | resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" 186 | integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== 187 | dependencies: 188 | safe-buffer "5.1.2" 189 | 190 | binary-extensions@^2.0.0: 191 | version "2.2.0" 192 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 193 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 194 | 195 | body-parser@2.2.0, body-parser@^2.2.0: 196 | version "2.2.0" 197 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa" 198 | integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg== 199 | dependencies: 200 | bytes "^3.1.2" 201 | content-type "^1.0.5" 202 | debug "^4.4.0" 203 | http-errors "^2.0.0" 204 | iconv-lite "^0.6.3" 205 | on-finished "^2.4.1" 206 | qs "^6.14.0" 207 | raw-body "^3.0.0" 208 | type-is "^2.0.0" 209 | 210 | brace-expansion@^1.1.7: 211 | version "1.1.11" 212 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 213 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 214 | dependencies: 215 | balanced-match "^1.0.0" 216 | concat-map "0.0.1" 217 | 218 | braces@^3.0.3: 219 | version "3.0.3" 220 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 221 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 222 | dependencies: 223 | fill-range "^7.1.1" 224 | 225 | braces@~3.0.2: 226 | version "3.0.2" 227 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 228 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 229 | dependencies: 230 | fill-range "^7.0.1" 231 | 232 | bytes@3.1.2, bytes@^3.1.2: 233 | version "3.1.2" 234 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 235 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 236 | 237 | call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: 238 | version "1.0.2" 239 | resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" 240 | integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== 241 | dependencies: 242 | es-errors "^1.3.0" 243 | function-bind "^1.1.2" 244 | 245 | call-bound@^1.0.2: 246 | version "1.0.4" 247 | resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" 248 | integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== 249 | dependencies: 250 | call-bind-apply-helpers "^1.0.2" 251 | get-intrinsic "^1.3.0" 252 | 253 | chokidar@^3.5.2: 254 | version "3.5.3" 255 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" 256 | integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== 257 | dependencies: 258 | anymatch "~3.1.2" 259 | braces "~3.0.2" 260 | glob-parent "~5.1.2" 261 | is-binary-path "~2.1.0" 262 | is-glob "~4.0.1" 263 | normalize-path "~3.0.0" 264 | readdirp "~3.6.0" 265 | optionalDependencies: 266 | fsevents "~2.3.2" 267 | 268 | chokidar@^4.0.0: 269 | version "4.0.1" 270 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" 271 | integrity sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA== 272 | dependencies: 273 | readdirp "^4.0.1" 274 | 275 | concat-map@0.0.1: 276 | version "0.0.1" 277 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 278 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 279 | 280 | content-disposition@^1.0.0: 281 | version "1.0.0" 282 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.0.tgz#844426cb398f934caefcbb172200126bc7ceace2" 283 | integrity sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg== 284 | dependencies: 285 | safe-buffer "5.2.1" 286 | 287 | content-type@^1.0.4: 288 | version "1.0.4" 289 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 290 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 291 | 292 | content-type@^1.0.5: 293 | version "1.0.5" 294 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" 295 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== 296 | 297 | cookie-parser@1.4.7: 298 | version "1.4.7" 299 | resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.7.tgz#e2125635dfd766888ffe90d60c286404fa0e7b26" 300 | integrity sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw== 301 | dependencies: 302 | cookie "0.7.2" 303 | cookie-signature "1.0.6" 304 | 305 | cookie-signature@1.0.6: 306 | version "1.0.6" 307 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 308 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 309 | 310 | cookie-signature@^1.2.1: 311 | version "1.2.2" 312 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" 313 | integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== 314 | 315 | cookie@0.7.2, cookie@^0.7.1: 316 | version "0.7.2" 317 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" 318 | integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== 319 | 320 | cors@2.8.5: 321 | version "2.8.5" 322 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 323 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 324 | dependencies: 325 | object-assign "^4" 326 | vary "^1" 327 | 328 | cross-inspect@1.0.1: 329 | version "1.0.1" 330 | resolved "https://registry.yarnpkg.com/cross-inspect/-/cross-inspect-1.0.1.tgz#15f6f65e4ca963cf4cc1a2b5fef18f6ca328712b" 331 | integrity sha512-Pcw1JTvZLSJH83iiGWt6fRcT+BjZlCDRVwYLbUcHzv/CRpB7r0MlSrGbIyQvVSNyGnbt7G4AXuyCiDR3POvZ1A== 332 | dependencies: 333 | tslib "^2.4.0" 334 | 335 | data-uri-to-buffer@^4.0.0: 336 | version "4.0.0" 337 | resolved "https://registry.yarnpkg.com/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz#b5db46aea50f6176428ac05b73be39a57701a64b" 338 | integrity sha512-Vr3mLBA8qWmcuschSLAOogKgQ/Jwxulv3RNE4FXnYWRGujzrRWQI4m12fQqRkwX06C0KanhLr4hK+GydchZsaA== 339 | 340 | debug@2.6.9: 341 | version "2.6.9" 342 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 343 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 344 | dependencies: 345 | ms "2.0.0" 346 | 347 | debug@4.4.1: 348 | version "4.4.1" 349 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" 350 | integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== 351 | dependencies: 352 | ms "^2.1.3" 353 | 354 | debug@^4: 355 | version "4.3.4" 356 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" 357 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== 358 | dependencies: 359 | ms "2.1.2" 360 | 361 | debug@^4.3.5, debug@^4.4.0: 362 | version "4.4.0" 363 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" 364 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 365 | dependencies: 366 | ms "^2.1.3" 367 | 368 | depd@2.0.0, depd@^2.0.0, depd@~2.0.0: 369 | version "2.0.0" 370 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 371 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 372 | 373 | depd@~1.1.2: 374 | version "1.1.2" 375 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 376 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 377 | 378 | detect-libc@^1.0.3: 379 | version "1.0.3" 380 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 381 | integrity sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg== 382 | 383 | dotenv@16.5.0: 384 | version "16.5.0" 385 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" 386 | integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== 387 | 388 | dset@^3.1.4: 389 | version "3.1.4" 390 | resolved "https://registry.yarnpkg.com/dset/-/dset-3.1.4.tgz#f8eaf5f023f068a036d08cd07dc9ffb7d0065248" 391 | integrity sha512-2QF/g9/zTaPDc3BjNcVTGoBbXBgYfMTTceLaYcFJ/W9kggFUkhxD/hMEeuLKbugyef9SqAx8cpgwlIP/jinUTA== 392 | 393 | dunder-proto@^1.0.1: 394 | version "1.0.1" 395 | resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" 396 | integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== 397 | dependencies: 398 | call-bind-apply-helpers "^1.0.1" 399 | es-errors "^1.3.0" 400 | gopd "^1.2.0" 401 | 402 | ee-first@1.1.1: 403 | version "1.1.1" 404 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 405 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 406 | 407 | encodeurl@^2.0.0: 408 | version "2.0.0" 409 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" 410 | integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== 411 | 412 | es-define-property@^1.0.1: 413 | version "1.0.1" 414 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" 415 | integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== 416 | 417 | es-errors@^1.3.0: 418 | version "1.3.0" 419 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" 420 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== 421 | 422 | es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: 423 | version "1.1.1" 424 | resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" 425 | integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== 426 | dependencies: 427 | es-errors "^1.3.0" 428 | 429 | escape-html@^1.0.3: 430 | version "1.0.3" 431 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 432 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 433 | 434 | etag@^1.8.1: 435 | version "1.8.1" 436 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 437 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 438 | 439 | express-graphql@0.12.0: 440 | version "0.12.0" 441 | resolved "https://registry.yarnpkg.com/express-graphql/-/express-graphql-0.12.0.tgz#58deabc309909ca2c9fe2f83f5fbe94429aa23df" 442 | integrity sha512-DwYaJQy0amdy3pgNtiTDuGGM2BLdj+YO2SgbKoLliCfuHv3VVTt7vNG/ZqK2hRYjtYHE2t2KB705EU94mE64zg== 443 | dependencies: 444 | accepts "^1.3.7" 445 | content-type "^1.0.4" 446 | http-errors "1.8.0" 447 | raw-body "^2.4.1" 448 | 449 | express@5.1.0: 450 | version "5.1.0" 451 | resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9" 452 | integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA== 453 | dependencies: 454 | accepts "^2.0.0" 455 | body-parser "^2.2.0" 456 | content-disposition "^1.0.0" 457 | content-type "^1.0.5" 458 | cookie "^0.7.1" 459 | cookie-signature "^1.2.1" 460 | debug "^4.4.0" 461 | encodeurl "^2.0.0" 462 | escape-html "^1.0.3" 463 | etag "^1.8.1" 464 | finalhandler "^2.1.0" 465 | fresh "^2.0.0" 466 | http-errors "^2.0.0" 467 | merge-descriptors "^2.0.0" 468 | mime-types "^3.0.0" 469 | on-finished "^2.4.1" 470 | once "^1.4.0" 471 | parseurl "^1.3.3" 472 | proxy-addr "^2.0.7" 473 | qs "^6.14.0" 474 | range-parser "^1.2.1" 475 | router "^2.2.0" 476 | send "^1.1.0" 477 | serve-static "^2.2.0" 478 | statuses "^2.0.1" 479 | type-is "^2.0.1" 480 | vary "^1.1.2" 481 | 482 | fast-json-stable-stringify@^2.1.0: 483 | version "2.1.0" 484 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 485 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 486 | 487 | fetch-blob@^3.1.2, fetch-blob@^3.1.4: 488 | version "3.1.5" 489 | resolved "https://registry.yarnpkg.com/fetch-blob/-/fetch-blob-3.1.5.tgz#0077bf5f3fcdbd9d75a0b5362f77dbb743489863" 490 | integrity sha512-N64ZpKqoLejlrwkIAnb9iLSA3Vx/kjgzpcDhygcqJ2KKjky8nCgUQ+dzXtbrLaWZGZNmNfQTsiQ0weZ1svglHg== 491 | dependencies: 492 | node-domexception "^1.0.0" 493 | web-streams-polyfill "^3.0.3" 494 | 495 | fill-range@^7.0.1: 496 | version "7.0.1" 497 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 498 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 499 | dependencies: 500 | to-regex-range "^5.0.1" 501 | 502 | fill-range@^7.1.1: 503 | version "7.1.1" 504 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 505 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 506 | dependencies: 507 | to-regex-range "^5.0.1" 508 | 509 | finalhandler@^2.1.0: 510 | version "2.1.0" 511 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f" 512 | integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== 513 | dependencies: 514 | debug "^4.4.0" 515 | encodeurl "^2.0.0" 516 | escape-html "^1.0.3" 517 | on-finished "^2.4.1" 518 | parseurl "^1.3.3" 519 | statuses "^2.0.1" 520 | 521 | formdata-polyfill@^4.0.10: 522 | version "4.0.10" 523 | resolved "https://registry.yarnpkg.com/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz#24807c31c9d402e002ab3d8c720144ceb8848423" 524 | integrity sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g== 525 | dependencies: 526 | fetch-blob "^3.1.2" 527 | 528 | forwarded@0.2.0: 529 | version "0.2.0" 530 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 531 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 532 | 533 | fresh@^2.0.0: 534 | version "2.0.0" 535 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" 536 | integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== 537 | 538 | fsevents@~2.3.2: 539 | version "2.3.2" 540 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 541 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 542 | 543 | function-bind@^1.1.2: 544 | version "1.1.2" 545 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 546 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 547 | 548 | get-intrinsic@^1.2.5, get-intrinsic@^1.3.0: 549 | version "1.3.0" 550 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" 551 | integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== 552 | dependencies: 553 | call-bind-apply-helpers "^1.0.2" 554 | es-define-property "^1.0.1" 555 | es-errors "^1.3.0" 556 | es-object-atoms "^1.1.1" 557 | function-bind "^1.1.2" 558 | get-proto "^1.0.1" 559 | gopd "^1.2.0" 560 | has-symbols "^1.1.0" 561 | hasown "^2.0.2" 562 | math-intrinsics "^1.1.0" 563 | 564 | get-proto@^1.0.1: 565 | version "1.0.1" 566 | resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" 567 | integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== 568 | dependencies: 569 | dunder-proto "^1.0.1" 570 | es-object-atoms "^1.0.0" 571 | 572 | glob-parent@~5.1.2: 573 | version "5.1.2" 574 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" 575 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== 576 | dependencies: 577 | is-glob "^4.0.1" 578 | 579 | gopd@^1.2.0: 580 | version "1.2.0" 581 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" 582 | integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== 583 | 584 | graphql@16.11.0: 585 | version "16.11.0" 586 | resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.11.0.tgz#96d17f66370678027fdf59b2d4c20b4efaa8a633" 587 | integrity sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw== 588 | 589 | has-flag@^3.0.0: 590 | version "3.0.0" 591 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 592 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 593 | 594 | has-symbols@^1.1.0: 595 | version "1.1.0" 596 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" 597 | integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== 598 | 599 | hasown@^2.0.2: 600 | version "2.0.2" 601 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 602 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 603 | dependencies: 604 | function-bind "^1.1.2" 605 | 606 | http-errors@1.8.0: 607 | version "1.8.0" 608 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.0.tgz#75d1bbe497e1044f51e4ee9e704a62f28d336507" 609 | integrity sha512-4I8r0C5JDhT5VkvI47QktDW75rNlGVsUf/8hzjCC/wkWI/jdTRmBb9aI7erSG82r1bjKY3F6k28WnsVxB1C73A== 610 | dependencies: 611 | depd "~1.1.2" 612 | inherits "2.0.4" 613 | setprototypeof "1.2.0" 614 | statuses ">= 1.5.0 < 2" 615 | toidentifier "1.0.0" 616 | 617 | http-errors@2.0.0, http-errors@^2.0.0: 618 | version "2.0.0" 619 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 620 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 621 | dependencies: 622 | depd "2.0.0" 623 | inherits "2.0.4" 624 | setprototypeof "1.2.0" 625 | statuses "2.0.1" 626 | toidentifier "1.0.1" 627 | 628 | iconv-lite@0.4.24: 629 | version "0.4.24" 630 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 631 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 632 | dependencies: 633 | safer-buffer ">= 2.1.2 < 3" 634 | 635 | iconv-lite@0.6.3, iconv-lite@^0.6.3: 636 | version "0.6.3" 637 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" 638 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== 639 | dependencies: 640 | safer-buffer ">= 2.1.2 < 3.0.0" 641 | 642 | ignore-by-default@^1.0.1: 643 | version "1.0.1" 644 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 645 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 646 | 647 | immutable@^5.0.2: 648 | version "5.0.2" 649 | resolved "https://registry.yarnpkg.com/immutable/-/immutable-5.0.2.tgz#bb8a987349a73efbe6b3b292a9cbaf1b530d296b" 650 | integrity sha512-1NU7hWZDkV7hJ4PJ9dur9gTNQ4ePNPN4k9/0YhwjzykTi/+3Q5pF93YU5QoVj8BuOnhLgaY8gs0U2pj4kSYVcw== 651 | 652 | inherits@2.0.4: 653 | version "2.0.4" 654 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 655 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 656 | 657 | ipaddr.js@1.9.1: 658 | version "1.9.1" 659 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 660 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 661 | 662 | is-binary-path@~2.1.0: 663 | version "2.1.0" 664 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 665 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 666 | dependencies: 667 | binary-extensions "^2.0.0" 668 | 669 | is-extglob@^2.1.1: 670 | version "2.1.1" 671 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 672 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 673 | 674 | is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: 675 | version "4.0.3" 676 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" 677 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== 678 | dependencies: 679 | is-extglob "^2.1.1" 680 | 681 | is-number@^7.0.0: 682 | version "7.0.0" 683 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 684 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 685 | 686 | is-promise@^4.0.0: 687 | version "4.0.0" 688 | resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" 689 | integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== 690 | 691 | lru-cache@^6.0.0: 692 | version "6.0.0" 693 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" 694 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== 695 | dependencies: 696 | yallist "^4.0.0" 697 | 698 | math-intrinsics@^1.1.0: 699 | version "1.1.0" 700 | resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" 701 | integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== 702 | 703 | media-typer@^1.1.0: 704 | version "1.1.0" 705 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" 706 | integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== 707 | 708 | merge-descriptors@^2.0.0: 709 | version "2.0.0" 710 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" 711 | integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== 712 | 713 | micromatch@^4.0.5: 714 | version "4.0.8" 715 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 716 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 717 | dependencies: 718 | braces "^3.0.3" 719 | picomatch "^2.3.1" 720 | 721 | mime-db@1.52.0: 722 | version "1.52.0" 723 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 724 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 725 | 726 | mime-db@^1.54.0: 727 | version "1.54.0" 728 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" 729 | integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== 730 | 731 | mime-types@^3.0.0, mime-types@^3.0.1: 732 | version "3.0.1" 733 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" 734 | integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== 735 | dependencies: 736 | mime-db "^1.54.0" 737 | 738 | mime-types@~2.1.34: 739 | version "2.1.35" 740 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 741 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 742 | dependencies: 743 | mime-db "1.52.0" 744 | 745 | minimatch@^3.1.2: 746 | version "3.1.2" 747 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 748 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 749 | dependencies: 750 | brace-expansion "^1.1.7" 751 | 752 | morgan@1.10.0: 753 | version "1.10.0" 754 | resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" 755 | integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== 756 | dependencies: 757 | basic-auth "~2.0.1" 758 | debug "2.6.9" 759 | depd "~2.0.0" 760 | on-finished "~2.3.0" 761 | on-headers "~1.0.2" 762 | 763 | ms@2.0.0: 764 | version "2.0.0" 765 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 766 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 767 | 768 | ms@2.1.2: 769 | version "2.1.2" 770 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 771 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 772 | 773 | ms@^2.1.3: 774 | version "2.1.3" 775 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 776 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 777 | 778 | negotiator@0.6.3: 779 | version "0.6.3" 780 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 781 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 782 | 783 | negotiator@^1.0.0: 784 | version "1.0.0" 785 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" 786 | integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== 787 | 788 | node-addon-api@^7.0.0: 789 | version "7.1.1" 790 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-7.1.1.tgz#1aba6693b0f255258a049d621329329322aad558" 791 | integrity sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ== 792 | 793 | node-domexception@^1.0.0: 794 | version "1.0.0" 795 | resolved "https://registry.yarnpkg.com/node-domexception/-/node-domexception-1.0.0.tgz#6888db46a1f71c0b76b3f7555016b63fe64766e5" 796 | integrity sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ== 797 | 798 | node-fetch@3.3.2: 799 | version "3.3.2" 800 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-3.3.2.tgz#d1e889bacdf733b4ff3b2b243eb7a12866a0b78b" 801 | integrity sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA== 802 | dependencies: 803 | data-uri-to-buffer "^4.0.0" 804 | fetch-blob "^3.1.4" 805 | formdata-polyfill "^4.0.10" 806 | 807 | nodemon@3.1.10: 808 | version "3.1.10" 809 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.10.tgz#5015c5eb4fffcb24d98cf9454df14f4fecec9bc1" 810 | integrity sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw== 811 | dependencies: 812 | chokidar "^3.5.2" 813 | debug "^4" 814 | ignore-by-default "^1.0.1" 815 | minimatch "^3.1.2" 816 | pstree.remy "^1.1.8" 817 | semver "^7.5.3" 818 | simple-update-notifier "^2.0.0" 819 | supports-color "^5.5.0" 820 | touch "^3.1.0" 821 | undefsafe "^2.0.5" 822 | 823 | nopt@~1.0.10: 824 | version "1.0.10" 825 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 826 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 827 | dependencies: 828 | abbrev "1" 829 | 830 | normalize-path@^3.0.0, normalize-path@~3.0.0: 831 | version "3.0.0" 832 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 833 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 834 | 835 | object-assign@^4: 836 | version "4.1.1" 837 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 838 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 839 | 840 | object-inspect@^1.13.3: 841 | version "1.13.4" 842 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" 843 | integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== 844 | 845 | on-finished@^2.4.1: 846 | version "2.4.1" 847 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 848 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 849 | dependencies: 850 | ee-first "1.1.1" 851 | 852 | on-finished@~2.3.0: 853 | version "2.3.0" 854 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 855 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 856 | dependencies: 857 | ee-first "1.1.1" 858 | 859 | on-headers@~1.0.2: 860 | version "1.0.2" 861 | resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" 862 | integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== 863 | 864 | once@^1.4.0: 865 | version "1.4.0" 866 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 867 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 868 | dependencies: 869 | wrappy "1" 870 | 871 | parseurl@^1.3.3: 872 | version "1.3.3" 873 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 874 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 875 | 876 | path-to-regexp@^8.0.0: 877 | version "8.2.0" 878 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.2.0.tgz#73990cc29e57a3ff2a0d914095156df5db79e8b4" 879 | integrity sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ== 880 | 881 | picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: 882 | version "2.3.1" 883 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 884 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 885 | 886 | proxy-addr@^2.0.7: 887 | version "2.0.7" 888 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 889 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 890 | dependencies: 891 | forwarded "0.2.0" 892 | ipaddr.js "1.9.1" 893 | 894 | pstree.remy@^1.1.8: 895 | version "1.1.8" 896 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 897 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 898 | 899 | qs@^6.14.0: 900 | version "6.14.0" 901 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" 902 | integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== 903 | dependencies: 904 | side-channel "^1.1.0" 905 | 906 | range-parser@^1.2.1: 907 | version "1.2.1" 908 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 909 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 910 | 911 | raw-body@^2.4.1: 912 | version "2.5.1" 913 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 914 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 915 | dependencies: 916 | bytes "3.1.2" 917 | http-errors "2.0.0" 918 | iconv-lite "0.4.24" 919 | unpipe "1.0.0" 920 | 921 | raw-body@^3.0.0: 922 | version "3.0.0" 923 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.0.tgz#25b3476f07a51600619dae3fe82ddc28a36e5e0f" 924 | integrity sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g== 925 | dependencies: 926 | bytes "3.1.2" 927 | http-errors "2.0.0" 928 | iconv-lite "0.6.3" 929 | unpipe "1.0.0" 930 | 931 | readdirp@^4.0.1: 932 | version "4.0.2" 933 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.0.2.tgz#388fccb8b75665da3abffe2d8f8ed59fe74c230a" 934 | integrity sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA== 935 | 936 | readdirp@~3.6.0: 937 | version "3.6.0" 938 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" 939 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== 940 | dependencies: 941 | picomatch "^2.2.1" 942 | 943 | router@^2.2.0: 944 | version "2.2.0" 945 | resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" 946 | integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== 947 | dependencies: 948 | debug "^4.4.0" 949 | depd "^2.0.0" 950 | is-promise "^4.0.0" 951 | parseurl "^1.3.3" 952 | path-to-regexp "^8.0.0" 953 | 954 | safe-buffer@5.1.2: 955 | version "5.1.2" 956 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 957 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 958 | 959 | safe-buffer@5.2.1: 960 | version "5.2.1" 961 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 962 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 963 | 964 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": 965 | version "2.1.2" 966 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 967 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 968 | 969 | sass@1.89.0: 970 | version "1.89.0" 971 | resolved "https://registry.yarnpkg.com/sass/-/sass-1.89.0.tgz#6df72360c5c3ec2a9833c49adafe57b28206752d" 972 | integrity sha512-ld+kQU8YTdGNjOLfRWBzewJpU5cwEv/h5yyqlSeJcj6Yh8U4TDA9UA5FPicqDz/xgRPWRSYIQNiFks21TbA9KQ== 973 | dependencies: 974 | chokidar "^4.0.0" 975 | immutable "^5.0.2" 976 | source-map-js ">=0.6.2 <2.0.0" 977 | optionalDependencies: 978 | "@parcel/watcher" "^2.4.1" 979 | 980 | semver@^7.5.3: 981 | version "7.5.4" 982 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" 983 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== 984 | dependencies: 985 | lru-cache "^6.0.0" 986 | 987 | send@^1.1.0, send@^1.2.0: 988 | version "1.2.0" 989 | resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" 990 | integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== 991 | dependencies: 992 | debug "^4.3.5" 993 | encodeurl "^2.0.0" 994 | escape-html "^1.0.3" 995 | etag "^1.8.1" 996 | fresh "^2.0.0" 997 | http-errors "^2.0.0" 998 | mime-types "^3.0.1" 999 | ms "^2.1.3" 1000 | on-finished "^2.4.1" 1001 | range-parser "^1.2.1" 1002 | statuses "^2.0.1" 1003 | 1004 | serve-static@^2.2.0: 1005 | version "2.2.0" 1006 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" 1007 | integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== 1008 | dependencies: 1009 | encodeurl "^2.0.0" 1010 | escape-html "^1.0.3" 1011 | parseurl "^1.3.3" 1012 | send "^1.2.0" 1013 | 1014 | setprototypeof@1.2.0: 1015 | version "1.2.0" 1016 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 1017 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 1018 | 1019 | side-channel-list@^1.0.0: 1020 | version "1.0.0" 1021 | resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" 1022 | integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== 1023 | dependencies: 1024 | es-errors "^1.3.0" 1025 | object-inspect "^1.13.3" 1026 | 1027 | side-channel-map@^1.0.1: 1028 | version "1.0.1" 1029 | resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" 1030 | integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== 1031 | dependencies: 1032 | call-bound "^1.0.2" 1033 | es-errors "^1.3.0" 1034 | get-intrinsic "^1.2.5" 1035 | object-inspect "^1.13.3" 1036 | 1037 | side-channel-weakmap@^1.0.2: 1038 | version "1.0.2" 1039 | resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" 1040 | integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== 1041 | dependencies: 1042 | call-bound "^1.0.2" 1043 | es-errors "^1.3.0" 1044 | get-intrinsic "^1.2.5" 1045 | object-inspect "^1.13.3" 1046 | side-channel-map "^1.0.1" 1047 | 1048 | side-channel@^1.1.0: 1049 | version "1.1.0" 1050 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" 1051 | integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== 1052 | dependencies: 1053 | es-errors "^1.3.0" 1054 | object-inspect "^1.13.3" 1055 | side-channel-list "^1.0.0" 1056 | side-channel-map "^1.0.1" 1057 | side-channel-weakmap "^1.0.2" 1058 | 1059 | simple-update-notifier@^2.0.0: 1060 | version "2.0.0" 1061 | resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" 1062 | integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== 1063 | dependencies: 1064 | semver "^7.5.3" 1065 | 1066 | "source-map-js@>=0.6.2 <2.0.0": 1067 | version "1.0.2" 1068 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" 1069 | integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== 1070 | 1071 | statuses@2.0.1, statuses@^2.0.1: 1072 | version "2.0.1" 1073 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 1074 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 1075 | 1076 | "statuses@>= 1.5.0 < 2": 1077 | version "1.5.0" 1078 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1079 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1080 | 1081 | supports-color@^5.5.0: 1082 | version "5.5.0" 1083 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1084 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1085 | dependencies: 1086 | has-flag "^3.0.0" 1087 | 1088 | to-regex-range@^5.0.1: 1089 | version "5.0.1" 1090 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1091 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1092 | dependencies: 1093 | is-number "^7.0.0" 1094 | 1095 | toidentifier@1.0.0: 1096 | version "1.0.0" 1097 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 1098 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 1099 | 1100 | toidentifier@1.0.1: 1101 | version "1.0.1" 1102 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 1103 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 1104 | 1105 | touch@^3.1.0: 1106 | version "3.1.0" 1107 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 1108 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 1109 | dependencies: 1110 | nopt "~1.0.10" 1111 | 1112 | tslib@^2.4.0: 1113 | version "2.4.0" 1114 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" 1115 | integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== 1116 | 1117 | tslib@^2.6.3: 1118 | version "2.8.1" 1119 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" 1120 | integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== 1121 | 1122 | type-is@^2.0.0, type-is@^2.0.1: 1123 | version "2.0.1" 1124 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" 1125 | integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== 1126 | dependencies: 1127 | content-type "^1.0.5" 1128 | media-typer "^1.1.0" 1129 | mime-types "^3.0.0" 1130 | 1131 | undefsafe@^2.0.5: 1132 | version "2.0.5" 1133 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" 1134 | integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== 1135 | 1136 | unpipe@1.0.0: 1137 | version "1.0.0" 1138 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1139 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1140 | 1141 | vary@^1, vary@^1.1.2: 1142 | version "1.1.2" 1143 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1144 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1145 | 1146 | web-streams-polyfill@^3.0.3: 1147 | version "3.2.1" 1148 | resolved "https://registry.yarnpkg.com/web-streams-polyfill/-/web-streams-polyfill-3.2.1.tgz#71c2718c52b45fd49dbeee88634b3a60ceab42a6" 1149 | integrity sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q== 1150 | 1151 | wrappy@1: 1152 | version "1.0.2" 1153 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1154 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 1155 | 1156 | yallist@^4.0.0: 1157 | version "4.0.0" 1158 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" 1159 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== 1160 | --------------------------------------------------------------------------------