├── .github └── workflows │ ├── publish.yml │ └── test.yml ├── .gitignore ├── FUNDING.yml ├── LICENSE ├── README.md ├── db.original.json ├── index.js ├── lib ├── backend │ ├── api │ │ └── index.js │ └── index.js ├── common │ ├── _connect.js │ ├── index.js │ ├── queue.js │ └── storage.js ├── engine │ ├── driver.js │ └── index.js └── index.js ├── package.json └── pnpm-lock.yaml /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | on: 3 | release: 4 | types: [published] 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | permissions: 10 | contents: read 11 | id-token: write 12 | steps: 13 | - uses: actions/checkout@v2 14 | - name: Install pnpm 15 | uses: pnpm/action-setup@v4 16 | with: 17 | version: 8 18 | - uses: actions/setup-node@v4 19 | with: 20 | node-version: 16 21 | registry-url: https://registry.npmjs.org/ 22 | cache: pnpm 23 | - run: pnpm install 24 | - run: pnpm test 25 | - run: pnpm publish --no-git-checks --access public 26 | env: 27 | NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | push: 4 | branches: 5 | - master 6 | pull_request: 7 | branches: 8 | - master 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | permissions: 14 | contents: read 15 | id-token: write 16 | steps: 17 | - uses: actions/checkout@v2 18 | - name: Install pnpm 19 | uses: pnpm/action-setup@v4 20 | with: 21 | version: 8 22 | - uses: actions/setup-node@v4 23 | with: 24 | node-version: 16 25 | cache: pnpm 26 | - run: pnpm install 27 | - run: pnpm test -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | data 3 | test -------------------------------------------------------------------------------- /FUNDING.yml: -------------------------------------------------------------------------------- 1 | patreon: ags131 2 | github: [AlinaNova21] 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) Adam Shuamann 2017 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # screepsmod-mongo 2 | 3 | ## MongoDB And Redis for the Screeps Private Server 4 | 5 | [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) 6 | [![Test](https://github.com/ScreepsMods/screepsmod-mongo/actions/workflows/test.yml/badge.svg)](https://github.com/ScreepsMods/screepsmod-mongo/actions/workflows/test.yml) 7 | [![Publish](https://github.com/ScreepsMods/screepsmod-mongo/actions/workflows/publish.yml/badge.svg)](https://github.com/ScreepsMods/screepsmod-mongo/actions/workflows/publish.yml) 8 | 9 | ## Requirements 10 | 11 | * screeps 4.0+ 12 | * mongodb 2.6+ 13 | * redis 3.0.6+ For Windows installs, you can follow these steps: https://github.com/ServiceStack/redis-windows#option-3-running-microsofts-native-port-of-redis 14 | 15 | ## Installation 16 | 17 | Installing on Ubuntu? Check out the community guide in the official Docs [Private server on Ubuntu using MongoDB and Redis](http://docs.screeps.com/contributed/ps_ubuntu.html) or the newer screeps-launcher guide [Newbie-friendly (ish) private/dedicated server setup guide for Ubuntu 18.04, with automatic startup](https://www.reddit.com/r/screeps/comments/deyq66/newbiefriendly_ish_privatededicated_server_setup/) 18 | 19 | 1. Ensure both mongodb and redis are already installed and running 20 | 2. `npm install screepsmod-mongo` inside your server's mods folder 21 | 3. Ensure the mod has been added to mods.json. Eg: 22 | ``` 23 | "mods": [ 24 | "node_modules\\screepsmod-mongo\\index.js" 25 | ], 26 | ``` 27 | 28 | 4. Start server! 29 | 5. DB Population 30 | * `mongo.importDB()` in the screeps cli imports your existing DB 31 | 32 | OR 33 | 34 | * `system.resetAllData()` in the screeps cli for a completely fresh DB 35 | 6. Once done restart the server 36 | 7. Done! 37 | 38 | ## Usage 39 | 40 | With this mod installed you can continue to manage the server as usual, 41 | all CLI commands behave identically. 42 | The original storage module will still run, but is completely ignored. 43 | 44 | Keep in mind that RAM requirements are slightly higher, by default mongo 45 | uses 50% - 1G of your system RAM. Redis on the other hand, uses very little. 46 | 47 | Mongo and Redis CLIs can be used to see and modify the data as usual, 48 | backups and restores should be done via normal mongo and redis tools. 49 | 50 | https://docs.mongodb.com/manual/tutorial/backup-and-restore-tools/ 51 | https://redis.io/topics/persistence 52 | 53 | ## Configuration 54 | 55 | All options and defaults are listed below 56 | 57 | ### Mongo 58 | 59 | * host: localhost 60 | * port: 27017 61 | * database: screeps 62 | * uri: mongodb://localhost:27017/screeps 63 | 64 | If the uri Parameter is supplied it will overwrite all other settings. Use it for Authentication, passing extra options, etc. 65 | 66 | ### Redis 67 | 68 | * host: localhost 69 | * port: 6379 70 | 71 | ## Examples 72 | 73 | Config can be applied in several ways: 74 | 75 | ### .screepsrc (Recommended) 76 | 77 | Add to the bottom of your .screepsrc file 78 | ``` 79 | [mongo] 80 | host = 192.168.0.222 81 | 82 | [redis] 83 | host = 192.168.0.222 84 | ``` 85 | 86 | ### ENV Method 87 | 88 | Please note that this method only works when launching modules directly, when launched via the default launcher they will be ignored. 89 | 90 | ``` 91 | MONGO_HOST='192.168.0.222' 92 | MONGO_CONN='mongodb://username:password@hostname.com/database_name?ssl=true' 93 | ``` 94 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib') 2 | -------------------------------------------------------------------------------- /lib/backend/api/index.js: -------------------------------------------------------------------------------- 1 | const crypto = require('crypto') 2 | const express = require('express') 3 | const bodyParser = require('body-parser') 4 | const jsonResponse = require('q-json-response') 5 | const auth = require('@screeps/backend/lib/game/api/auth') 6 | const authlib = require('@screeps/backend/lib/authlib') 7 | const _ = require('lodash') 8 | 9 | module.exports = function (config) { 10 | const { common } = config 11 | const { db, env, pubsub } = common.storage 12 | const router = new express.Router() 13 | config.backend.on('expressPreConfig', (app) => app.use(router)) 14 | router.use(bodyParser.json({ 15 | limit: '8mb', 16 | verify (request, response, buf, encoding) { 17 | request.rawBody = buf.toString(encoding) 18 | } 19 | })) 20 | router.post('/api/game/add-object-intent', auth.tokenAuth, jsonResponse(async (request) => { 21 | await checkGame(request) 22 | if (request.body.name === 'activateSafeMode') { 23 | const gameTime = parseInt(await env.get('gameTime')) 24 | const count = await db['rooms.objects'].count({ $and: [{ type: 'controller' }, { user: '' + request.user._id }, { safeMode: { $gt: gameTime } }] }) 25 | if (count > 0) throw new Error('safe mode active already') 26 | } 27 | await env.hmset(env.keys.ROOM_INTENTS + request.body.room, request.user._id.toString() + '.manual', JSON.stringify({ [request.body._id]: { [request.body.name]: request.body.intent } })) 28 | await db.rooms.update({ _id: request.body.room }, { $set: { active: true } }) 29 | })) 30 | router.get('/api/user/messages/index', auth.tokenAuth, jsonResponse((request) => { 31 | return db['users.messages'].findEx({ user: request.user._id }, { sort: { date: -1 } }) 32 | .then(data => { 33 | const messages = [] 34 | data.forEach(message => { 35 | if (!messages.find(i => i._id === message.respondent)) { 36 | messages.push({ _id: message.respondent, message }) 37 | } 38 | }) 39 | return db.users.find({ _id: { $in: _.map(messages, '_id') } }) 40 | .then(users => { 41 | users = users.map(i => _.pick(i, ['_id', 'username', 'badge'])) 42 | return { messages, users: _.keyBy(users, '_id') } 43 | }) 44 | }) 45 | })) 46 | router.post('/api/user/messages/mark-read', auth.tokenAuth, jsonResponse((request) => { 47 | const _id = request.body.id; let message 48 | console.log(_id, request.user._id) 49 | return db['users.messages'].findOne({ _id, user: request.user._id, type: 'in' }) 50 | .then((_message) => { 51 | if (!_message) { 52 | return Promise.reject(new Error('invalid id')) 53 | } 54 | message = _message 55 | return db['users.messages'].update({ _id }, { $set: { unread: false } }) 56 | }) 57 | .then((data) => { 58 | return Promise.all([ 59 | pubsub.publish(`user:${message.user}/message:${message.respondent}`, JSON.stringify({ 60 | message: { 61 | _id: request.body.id, 62 | unread: false 63 | } 64 | })), 65 | pubsub.publish(`user:${message.respondent}/message:${message.user}`, JSON.stringify({ 66 | message: { 67 | _id: message.outMessage, 68 | unread: false 69 | } 70 | })), 71 | db['users.messages'].update({ _id: message.outMessage }, { $set: { unread: false } }) 72 | ]) 73 | }) 74 | })) 75 | authlib.genToken = function (id) { 76 | const token = crypto.createHmac('sha1', 'hsdhweh342sdbj34e').update(new Date().getTime() + id).digest('hex') 77 | return env.setex(`auth_${token}`, 300, id).then(() => token) 78 | } 79 | 80 | authlib.checkToken = function (token, noConsume) { 81 | const authKey = `auth_${token}` 82 | 83 | return env.get(authKey) 84 | .then((data) => { 85 | if (!data) { 86 | return Promise.reject(false) // eslint-disable-line prefer-promise-reject-errors 87 | } 88 | if (!noConsume) { 89 | env.ttl(authKey) 90 | .then((ttl) => { 91 | if (ttl > 300) { 92 | env.expire(authKey, 300) 93 | } 94 | }) 95 | } 96 | return db.users.findOne({ _id: data }) 97 | }) 98 | .then((user) => { 99 | if (!user) { 100 | return Promise.reject(false) // eslint-disable-line prefer-promise-reject-errors 101 | } 102 | env.set(env.keys.USER_ONLINE + user._id, Date.now()) 103 | return user 104 | }) 105 | } 106 | 107 | function checkGame (req) { 108 | return db.rooms.findOne({ _id: req.body.room }) 109 | .then((room) => { 110 | if (!room) { 111 | return Promise.reject(new Error('invalid room')) 112 | } 113 | if (/^(W|E)/.test(req.body.room)) { 114 | if (room.status === 'out of borders' || (room.openTime && room.openTime > Date.now())) { 115 | return Promise.reject(new Error('out of borders')) 116 | } 117 | return true 118 | } 119 | return Promise.reject(new Error('not supported')) 120 | }) 121 | } 122 | } 123 | -------------------------------------------------------------------------------- /lib/backend/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (config) { 2 | require('./api')(config) 3 | config.backend.features = config.backend.features || [] 4 | config.backend.features.push({ 5 | name: 'screepsmod-mongo', 6 | version: require('../../package.json').version 7 | }) 8 | config.cli.on('cliSandbox', (sandbox) => { 9 | sandbox.mongo = { 10 | _help: 'mongo.importDB([pathToDB.JSON])', 11 | importDB (path) { 12 | return Promise.resolve() 13 | .then(() => sandbox.system.pauseSimulation()) 14 | .then(() => config.common.storage.importDB(path)) 15 | .then(() => sandbox.system.resumeSimulation()) 16 | } 17 | } 18 | }) 19 | } 20 | -------------------------------------------------------------------------------- /lib/common/_connect.js: -------------------------------------------------------------------------------- 1 | const q = require('q') 2 | const EventEmitter = require('events').EventEmitter 3 | const { MongoClient, ObjectId } = require('mongodb') 4 | const Redis = require('redis') 5 | const fs = require('fs') 6 | const path = require('path') 7 | 8 | const DATABASE_VERSION = 9 9 | 10 | let C 11 | 12 | module.exports = function (config) { 13 | Object.assign(exports, config.common.storage) 14 | C = config.common.constants 15 | return function storageConnect () { 16 | if (exports._connected) { 17 | return q.when() 18 | } 19 | let uri 20 | 21 | if (config.mongo.uri) { 22 | uri = config.mongo.uri 23 | delete config.mongo.uri 24 | } else { 25 | uri = `mongodb://${config.mongo.host}:${config.mongo.port}/${config.mongo.database}` 26 | } 27 | delete config.mongo.host 28 | delete config.mongo.port 29 | delete config.mongo.database 30 | 31 | const redis = Redis.createClient(config.redis) 32 | const pub = Redis.createClient(config.redis) 33 | const sub = Redis.createClient(config.redis) 34 | config.redis.clients = { redis, pub, sub } 35 | 36 | const mongo = q.ninvoke(MongoClient, 'connect', uri, Object.assign({ promiseLibrary: Promise, useUnifiedTopology: true }, config.mongo)) 37 | .then(client => { 38 | config.mongo.client = client 39 | return client.db() 40 | }) 41 | .then(db => { 42 | function wrapCollection (collection, cname) { 43 | const wrap = {} 44 | function keyToId (obj) { 45 | const idRegex = /^[a-f0-9]{24}$/ 46 | if (obj instanceof Array) return obj.map(keyToId) 47 | if (obj._id && obj._id.$in) { 48 | return Object.assign({}, obj, { 49 | _id: { 50 | $in: obj._id.$in.map(i => { 51 | if (typeof i === 'string' && i.match(idRegex)) { 52 | i = new ObjectId(i) 53 | } 54 | return i 55 | }) 56 | } 57 | }) 58 | } 59 | if (typeof obj._id === 'string' && obj._id.match(idRegex)) { 60 | return Object.assign({}, obj, { _id: new ObjectId(obj._id) }) 61 | } 62 | return obj 63 | } 64 | function idToKey (obj) { 65 | if (obj instanceof Array) return obj.map(idToKey) 66 | if (obj && obj._id) { 67 | obj._id = obj._id.toString() 68 | } 69 | return obj 70 | } 71 | function patchLokiOps (query, depth = 5) { 72 | if (!depth) return 73 | for (const k in query) { 74 | const v = query[k] 75 | if (k === '$aeq') { 76 | delete query[k] 77 | query.$eq = v 78 | } 79 | if (k === '$regex') { 80 | // https://github.com/screeps/backend-local/blob/7520c8c7e6a443ad955d25e064dbd151a909d8cb/lib/cronjobs.js#L574 81 | // const centralRooms = await db['rooms'].find({_id: {$regex: '^[WE]\d*5[NS]\d*5$'}, status: {$ne: 'out of borders'}}); 82 | // 83 | // regex is not properly escaped resulting in only a subset of possible sectors actually returning 84 | if (v === '^[WE]d*5[NS]d*5$') { 85 | query.$regex = v.replace(/\]d\*/g, ']\\d*') 86 | 87 | // https://github.com/screeps/backend-local/blob/7520c8c7e6a443ad955d25e064dbd151a909d8cb/lib/cronjobs.js#L393 88 | // https://github.com/screeps/backend-local/blob/7520c8c7e6a443ad955d25e064dbd151a909d8cb/lib/strongholds.js#L132 89 | // 90 | // ignore properly escaped sector regex queries 91 | } else if (typeof v === 'string' && v.match(/\^[EW]\d*\\d[NS]\d*\\d\$/g) === null && v.match(/\^\[[EW]{2}\]\\d\*5\[[NS]{2}\]\\d\*5\$/g) === null) { 92 | // default regex escape fix for loki regex queries to work with mongo regex queries 93 | query.$regex = v.replace(/\\{1,2}/g, '\\\\') 94 | } else { 95 | query.$regex = v 96 | } 97 | } 98 | if (typeof v === 'object') { 99 | patchLokiOps(v, depth - 1) 100 | } 101 | } 102 | } 103 | ;['find', 'findOne', 'findEx', 'by', 'count', 'ensureIndex', 'remove', 'insert', 'update'].forEach(cmethod => { 104 | wrap[cmethod] = (...a) => { 105 | let method = cmethod 106 | try { 107 | const orig = a[0] 108 | if (typeof a[0] === 'object') { 109 | a[0] = keyToId(a[0]) 110 | patchLokiOps(a[0]) 111 | } 112 | if (method === 'update') { 113 | a[2] = a[2] || {} 114 | if (a[2].multi !== false && Object.keys(a[1]).reduce((l, v) => l && v[0] === '$', true)) { 115 | a[2].multi = true 116 | } 117 | if (a[1].$merge) { 118 | const merge = a[1].$merge 119 | delete a[1].$merge 120 | const flat = (obj, stack = []) => { 121 | const ret = {} 122 | if (typeof obj === 'object' && !Array.isArray(obj)) { 123 | Object.entries(obj).forEach(([k, v]) => { 124 | Object.assign(ret, flat(v, [...stack, k])) 125 | }) 126 | } else if (stack.length) { 127 | ret[stack.join('.')] = obj 128 | } else { 129 | return obj 130 | } 131 | return ret 132 | } 133 | a[1].$set = flat(merge) 134 | } 135 | } 136 | const ex = method === 'findEx' 137 | if (method === 'find' && a[1]) { 138 | a[1] = { projection: a[1] } 139 | } 140 | if (ex) { 141 | method = 'find' 142 | a[1].skip = a[1].offset 143 | delete a[1].offset 144 | } 145 | if (method.slice(0, 6) === 'insert') method = Array.isArray(a[0]) ? 'insertMany' : 'insertOne' 146 | let chain = collection[method](...a) 147 | if (method === 'insertOne') { 148 | chain = chain.then((n) => { 149 | orig._id = n.insertedId 150 | return orig 151 | }) 152 | } 153 | if (method === 'insertMany') { 154 | chain = chain.then((n) => { 155 | orig.forEach((o, i) => (o._id = n.insertedIds[i])) 156 | return orig 157 | }) 158 | } 159 | if (method === 'update') { 160 | chain = chain.then((n) => Object.assign(n, { modified: n.result.nModified })) 161 | } 162 | if (method === 'find') { 163 | chain = q.ninvoke(chain, 'toArray') 164 | } 165 | chain = chain.then(idToKey) 166 | .catch(e => { 167 | console.error('DBERR', e, ex, a) 168 | console.log('DBERR', e.stack) 169 | }) 170 | return q(chain) 171 | } catch (e) { 172 | console.error('DBERR', e) 173 | console.log('DBERR', e.stack) 174 | return q(Promise.reject(e)) 175 | } 176 | } 177 | }) 178 | 179 | wrap.drop = (...a) => { 180 | return q.ninvoke(collection, 'drop', ...a).catch(e => q.resolve()) 181 | } 182 | wrap.clear = wrap.drop 183 | wrap.removeWhere = wrap.remove 184 | wrap.by = (_id) => wrap.find({ _id }) 185 | wrap.bulk = function (bulk, cb) { 186 | const batch = collection.initializeUnorderedBulkOp() 187 | try { 188 | bulk.forEach(i => { 189 | if (i.op === 'insert') { 190 | if (i.data._id && typeof i.data._id === 'string' && i.data._id.length === 24) { 191 | i.data._id = new ObjectId(i.data._id) 192 | } 193 | return batch.insert(i.data) 194 | } 195 | const q = { _id: (i.id && i.id.length === 24) ? new ObjectId(i.id + '') : i.id } 196 | if (i.op === 'update') { 197 | return batch.find(q).update(i.update) 198 | } 199 | if (i.op === 'remove') { 200 | return batch.find(q).remove() 201 | } 202 | console.error('UNKNOWN BULK!', i) 203 | }) 204 | return q.ninvoke(batch, 'execute') 205 | } catch (e) { 206 | if (cb) cb(e.message) 207 | console.error(e) 208 | return q.reject(e.message) 209 | } 210 | } 211 | return wrap 212 | } 213 | config.common.dbCollections.forEach(i => { 214 | const collection = db.collection(i) 215 | const indexes = config.common.dbIndexes[i] 216 | if (indexes) { 217 | collection.createIndexes(Object.entries(indexes).map(([k, v]) => ({ key: { [k]: v } }))) 218 | } 219 | exports.db[i] = wrapCollection(collection, i) 220 | }) 221 | 222 | exports.upgradeDB() 223 | }) 224 | 225 | Object.assign(exports.pubsub, { 226 | ee: new EventEmitter(), 227 | subscribed: {}, 228 | publish (channel, data) { 229 | pub.publish(channel, data) 230 | return q.when() 231 | }, 232 | subscribe (channel, cb) { 233 | if (!this.subscribed[channel]) { 234 | if (channel.match(/[?*]/)) { sub.psubscribe(channel) } else { sub.subscribe(channel) } 235 | this.subscribed[channel] = true 236 | } 237 | this.ee.on(channel, (channel, ...args) => { 238 | cb.apply({ channel }, args) 239 | }) 240 | return q.when() 241 | }, 242 | once (channel, cb) { 243 | if (!this.subscribed[channel]) { 244 | if (channel.match(/[?*]/)) { sub.psubscribe(channel) } else { sub.subscribe(channel) } 245 | this.subscribed[channel] = true 246 | } 247 | this.ee.once(channel, (channel, ...args) => { 248 | cb.apply({ channel }, args) 249 | }) 250 | return q.when() 251 | } 252 | }) 253 | sub.on('message', (channel, message) => { 254 | exports.pubsub.ee.emit(channel, channel, message) 255 | }) 256 | sub.on('pmessage', (pattern, channel, message) => { 257 | exports.pubsub.ee.emit(pattern, channel, message) 258 | }) 259 | 260 | Object.assign(exports.env, { 261 | get: q.nbind(redis.get, redis), 262 | mget: q.nbind(redis.mget, redis), 263 | sadd: q.nbind(redis.sadd, redis), 264 | smembers: q.nbind(redis.smembers, redis), 265 | set: q.nbind(redis.set, redis), 266 | setex: q.nbind(redis.setex, redis), 267 | expire: q.nbind(redis.expire, redis), 268 | ttl: q.nbind(redis.ttl, redis), 269 | del: q.nbind(redis.del, redis), 270 | hmget: q.nbind(redis.hmget, redis), 271 | hmset: q.nbind(redis.hmset, redis), 272 | hget: q.nbind(redis.hget, redis), 273 | hset: q.nbind(redis.hset, redis), 274 | hgetall: q.nbind(redis.hgetall, redis), 275 | incr: q.nbind(redis.incr, redis), 276 | flushall: q.nbind(redis.flushall, redis) 277 | }) 278 | 279 | exports._connected = true 280 | exports.resetAllData = () => q.when() // Temp dummy 281 | 282 | Object.assign(exports.queue, require('./queue')) 283 | exports.queue.wrap(redis, exports.pubsub) 284 | 285 | const oget = exports.env.get 286 | exports.env.get = function (...a) { 287 | return oget(...a).catch(() => exports.env.hgetall(...a)) 288 | } 289 | 290 | exports.resetAllData = () => { 291 | return exports.importDB(path.join(__dirname, '/../../db.original.json')).then((r) => q.when(r)) 292 | } 293 | Object.assign(config.common.storage, exports) 294 | return mongo 295 | } 296 | } 297 | 298 | exports.importDB = async function importDB (path = './db.json') { 299 | const { db, env } = exports 300 | console.log('Importing DB') 301 | try { 302 | const olddb = JSON.parse(fs.readFileSync(path).toString()) 303 | const ps = olddb.collections.map(oldcol => { 304 | const name = oldcol.name 305 | console.log('Collection', name) 306 | if (name === 'env') { 307 | return env.flushall().then(() => { 308 | const p = oldcol.data.map(row => { 309 | const ps = [] 310 | for (const k in row.data) { 311 | const v = row.data[k] 312 | const type = k.slice(0, k.indexOf(':') + 1) 313 | const hashTypes = [env.keys.MEMORY_SEGMENTS, env.keys.ROOM_HISTORY, env.keys.ROOM_EVENT_LOG] 314 | if (hashTypes.includes(type)) { 315 | for (const kk in v) { 316 | ps.push(env.hmset(k, kk, typeof v[kk] === 'object' ? JSON.stringify(v[kk]) : v[kk])) 317 | } 318 | } else if (k === env.keys.ACTIVE_ROOMS) { 319 | ps.push(env.sadd(env.keys.ACTIVE_ROOMS, v)) 320 | } else { 321 | ps.push(env.set(k, typeof v === 'object' ? JSON.stringify(v) : v)) 322 | } 323 | } 324 | return Promise.all(ps) 325 | }) 326 | return Promise.all(p) 327 | }) 328 | } else { 329 | if (!db[name]) { 330 | console.log(`invalid collection in db.json: ${name}`) 331 | return Promise.resolve() 332 | } 333 | return db[name].drop().then(() => Promise.all(oldcol.data.map(row => { 334 | delete row.meta 335 | delete row.$loki 336 | return db[name].insert(row) 337 | }))) 338 | } 339 | }) 340 | 341 | await Promise.all(ps) 342 | await db.users.update({ _id: '2' }, { $set: { _id: '2', username: 'Invader', usernameLower: 'invader', cpu: 100, cpuAvailable: 10000, gcl: 13966610.2, active: 0 } }, { upsert: true }) 343 | await db.users.update({ _id: '3' }, { $set: { _id: '3', username: 'Source Keeper', usernameLower: 'source keeper', cpu: 100, cpuAvailable: 10000, gcl: 13966610.2, active: 0 } }, { upsert: true }) 344 | await db.users.update({ username: 'Screeps' }, { username: 'Screeps', usernameLower: 'screeps', gcl: 0, cpi: 0, active: false, cpuAvailable: 0, badge: { type: 12, color1: '#999999', color2: '#999999', color3: '#999999', flip: false, param: 26 } }, { upsert: true }) 345 | await env.set(env.keys.DATABASE_VERSION, DATABASE_VERSION) 346 | await upgradeDB() 347 | console.log('Import complete. Restart the server for best results.') 348 | return 'Import complete. Restart the server for best results.' 349 | } catch (e) { 350 | return importFail(e) 351 | } 352 | } 353 | 354 | function importFail (e) { 355 | const { db, env } = exports 356 | const ps = [] 357 | ps.push(db.users.insert({ _id: '2', username: 'Invader', usernameLower: 'invader', cpu: 100, cpuAvailable: 10000, gcl: 13966610.2, active: 0 })) 358 | ps.push(db.users.insert({ _id: '3', username: 'Source Keeper', usernameLower: 'source keeper', cpu: 100, cpuAvailable: 10000, gcl: 13966610.2, active: 0 })) 359 | ps.push(db.users.insert({ username: 'Screeps', usernameLower: 'screeps', gcl: 0, cpi: 0, active: false, cpuAvailable: 0, badge: { type: 12, color1: '#999999', color2: '#999999', color3: '#999999', flip: false, param: 26 } })) 360 | ps.push(env.set('gameTime', 1)) 361 | ps.push(env.set(env.keys.DATABASE_VERSION, DATABASE_VERSION)) 362 | return Promise.resolve() 363 | .then(() => console.log('An error occured importing existing db, initializing blank server')) 364 | .then(() => console.error(e)) 365 | .then(() => Promise.all(ps)) 366 | .then(() => console.log('Server initialzed. Remember to generate rooms.')) 367 | .catch(err => console.error(err)) 368 | } 369 | 370 | async function upgradeDB () { 371 | const { db, env } = exports 372 | const version = parseFloat(await env.get(env.keys.DATABASE_VERSION) || '0') 373 | if (version === DATABASE_VERSION) return 374 | if (version === 0) { 375 | console.log('Database not initialized, skipping upgrade check') 376 | // await exports.resetAllData() 377 | // return upgradeDB() 378 | return 379 | } 380 | console.log(`Database Upgrade needed, current: ${version}, desired: ${DATABASE_VERSION}`) 381 | if (version < 2) { 382 | console.log('Applying version 2') 383 | const ps = [] 384 | ps.push(db.users.update({ money: { $gt: 0 } }, { $mul: { money: 1000 } })) 385 | ps.push(db['market.orders'].update({}, { $mul: { price: 1000 } })) 386 | ps.push(db.users.update({ username: 'Screeps' }, { username: 'Screeps', usernameLower: 'screeps', gcl: 0, cpi: 0, active: false, cpuAvailable: 0, badge: { type: 12, color1: '#999999', color2: '#999999', color3: '#999999', flip: false, param: 26 } }, { upsert: true })) 387 | await Promise.all(ps) 388 | } 389 | if (version < 3.1) { 390 | console.log('Applying version 3.1') 391 | await db.rooms.update({}, { $unset: { bus: true } }) 392 | await db.rooms.update({ _id: /^[EW]\d*0[NS]\d+$/ }, { $set: { bus: true } }) 393 | await db.rooms.update({ _id: /^[EW]\d+[NS]\d*0$/ }, { $set: { bus: true } }) 394 | } 395 | if (version < 3.2) { 396 | console.log('Applying version 3.2') 397 | const time = +(await env.get('gameTime')) 398 | await db['rooms.objects'].remove({ type: 'powerCreep', ageTime: { $lt: time } }) 399 | } 400 | 401 | if (version < 4) { // Factories update 402 | console.log('Applying version 4') 403 | const depositTypes = [C.RESOURCE_SILICON, C.RESOURCE_METAL, C.RESOURCE_BIOMASS, C.RESOURCE_MIST] 404 | const busRooms = await db.rooms.find({ $or: [{ _id: { $regex: /^[WE]\d*0[NS]/ } }, { _id: { $regex: /0$/ } }] }) 405 | const ps = [] 406 | for (const room of busRooms) { 407 | const [match, longitude, latitude] = /^[WE](\d+)[NS](\d+)$/.exec(room._id) 408 | if (match) { 409 | room.depositType = depositTypes[(longitude + latitude) % 4] 410 | ps.push(db.rooms.update({ _id: room._id }, room)) 411 | } 412 | } 413 | await Promise.all(ps) 414 | } 415 | 416 | if (version < 5) { // Store update 417 | console.log('Applying version 5') 418 | const ps = [] 419 | const energyOnly = function energyOnly (structure) { 420 | structure.store = { energy: structure.energy } 421 | structure.storeCapacityResource = { energy: structure.energyCapacity } 422 | delete structure.energy 423 | delete structure.energyCapacity 424 | } 425 | 426 | const storeOnly = function storeOnly (structure) { 427 | if (typeof structure.energyCapacity !== 'undefined') { 428 | structure.storeCapacity = structure.energyCapacity 429 | delete structure.energyCapacity 430 | } 431 | 432 | structure.store = {} 433 | C.RESOURCES_ALL.forEach(r => { 434 | if (typeof structure[r] !== 'undefined') { 435 | structure.store[r] = structure[r] 436 | delete structure[r] 437 | } 438 | }) 439 | } 440 | 441 | const converters = { 442 | spawn: energyOnly, 443 | extension: energyOnly, 444 | tower: energyOnly, 445 | link: energyOnly, 446 | storage: storeOnly, 447 | terminal: storeOnly, 448 | container: storeOnly, 449 | factory: storeOnly, 450 | creep: storeOnly, 451 | powerCreep: storeOnly, 452 | tombstone: storeOnly, 453 | nuker: function nuker (structure) { 454 | structure.store = { energy: structure.energy, G: structure.G } 455 | structure.storeCapacityResource = { energy: structure.energyCapacity, G: structure.GCapacity } 456 | 457 | delete structure.energy 458 | delete structure.energyCapacity 459 | delete structure.G 460 | delete structure.GCapacity 461 | }, 462 | powerSpawn: function powerSpawn (structure) { 463 | structure.store = { energy: structure.energy, power: structure.power } 464 | structure.storeCapacityResource = { energy: structure.energyCapacity, power: structure.powerCapacity } 465 | 466 | delete structure.energy 467 | delete structure.energyCapacity 468 | delete structure.power 469 | delete structure.powerCapacity 470 | }, 471 | lab: function lab (structure) { 472 | structure.store = { energy: structure.energy } 473 | structure.storeCapacityResource = { energy: structure.energyCapacity } 474 | if (structure.mineralType && structure.mineralAmount) { 475 | structure.store[structure.mineralType] = structure.mineralAmount 476 | structure.storeCapacityResource[structure.mineralType] = structure.mineralCapacity 477 | } else { 478 | structure.storeCapacity = structure.energyCapacity + structure.mineralCapacity 479 | } 480 | 481 | delete structure.energy 482 | delete structure.energyCapacity 483 | delete structure.mineralType 484 | delete structure.mineralAmount 485 | delete structure.mineralCapacity 486 | } 487 | } 488 | 489 | const powerCreepsCollection = db['users.power_creeps'] 490 | if (powerCreepsCollection) { 491 | const powerCreeps = await powerCreepsCollection.find({}) 492 | powerCreeps.forEach(powerCreep => { 493 | console.log(`powerCreep#${powerCreep._id}`) 494 | converters.powerCreep(powerCreep) 495 | const { _id, ...obj } = powerCreep 496 | ps.push(powerCreepsCollection.update({ _id }, obj)) 497 | }) 498 | } 499 | 500 | const roomObjects = await db['rooms.objects'].find({ type: { $in: Object.keys(converters) } }) 501 | roomObjects.forEach(object => { 502 | console.log(`${object.type}#${object._id}`) 503 | converters[object.type](object) 504 | const { _id, ...obj } = object 505 | ps.push(db['rooms.objects'].update({ _id }, obj)) 506 | }) 507 | 508 | const nowTimestamp = new Date().getTime() 509 | const orders = await db['market.orders'].find({}) 510 | orders.forEach(order => { 511 | if (!order.createdTimestamp) { 512 | console.log(`order#${order._id}`) 513 | order.createdTimestamp = nowTimestamp 514 | const { _id, ...obj } = order 515 | ps.push(db['market.orders'].update({ _id }, obj)) 516 | } 517 | }) 518 | await Promise.all(ps) 519 | } 520 | if (version < 6) { 521 | console.log('Applying version 6') 522 | const ps = [] 523 | const roomObjects = await db['rooms.objects'].find({ type: 'powerBank' }) 524 | roomObjects.forEach(object => { 525 | console.log(`${object.type}#${object._id}`) 526 | object.store = { power: object.power } 527 | delete object.power 528 | const { _id, ...obj } = object 529 | ps.push(db['rooms.objects'].update({ _id }, obj)) 530 | }) 531 | await Promise.all(ps) 532 | } 533 | 534 | if (version < 7) { 535 | console.log('Applying version 7') 536 | await db.users.update({ _id: '2' }, { 537 | $set: { 538 | badge: { 539 | type: { 540 | path1: 'm 60.493413,13.745781 -1.122536,7.527255 -23.302365,-6.118884 -24.097204,26.333431 6.412507,0.949878 -5.161481,19.706217 26.301441,24.114728 1.116562,-7.546193 23.350173,6.122868 24.097202,-26.318478 -6.462307,-0.95785 5.16845,-19.699243 z m -1.58271,10.611118 -0.270923,1.821013 C 57.330986,25.69819 55.969864,25.331543 54.570958,25.072546 Z m -8.952409,4.554029 c 11.653612,0 21.055294,9.408134 21.055294,21.069735 0,11.661603 -9.401682,21.068738 -21.055294,21.068738 -11.65361,0 -21.055297,-9.407135 -21.055297,-21.068738 0,-11.661601 9.401687,-21.069735 21.055297,-21.069735 z M 26.634018,40.123069 c -0.262324,0.618965 -0.494865,1.252967 -0.708185,1.895768 l -0.0508,-0.104656 -0.194228,-0.417627 c 0.261245,-0.385697 0.631962,-0.909531 0.953211,-1.373485 z m 47.391601,17.714764 0.115539,0.237219 0.214148,0.462479 c -0.380159,0.55986 -0.886342,1.281124 -1.3835,1.988466 0.400298,-0.870957 0.752837,-1.767746 1.053813,-2.688164 z M 41.364458,73.812322 c 0.694434,0.251619 1.40261,0.471895 2.123558,0.662817 l -2.303841,0.558165 z', 541 | path2: 'm 60.857962,24.035953 -6.397566,1.055531 c 6.084137,1.084905 11.78633,4.394548 15.786244,9.746957 5.741405,7.682749 6.465607,17.544704 2.736121,25.67958 1.511089,-2.147013 2.622575,-3.851337 2.622575,-3.851337 l 1.628526,0.241209 c 0.726895,-2.869027 1.004942,-5.843252 0.811775,-8.806053 l 1.185288,-8.634615 -3.768025,-3.072898 -2.908435,-3.21842 c -0.0103,-0.01383 -0.01958,-0.02805 -0.02988,-0.04186 -3.118009,-4.172293 -7.17889,-7.228662 -11.666624,-9.098091 z M 50.001124,37.965163 A 12.020784,12.029027 0 0 0 37.979913,49.994617 12.020784,12.029027 0 0 0 50.001124,62.024074 12.020784,12.029027 0 0 0 62.022337,49.994617 12.020784,12.029027 0 0 0 50.001124,37.965163 Z M 27.019485,39.55693 c -1.481686,2.114179 -2.5658,3.779575 -2.5658,3.779575 l -1.647451,-0.244197 c -0.69707,2.775045 -0.977606,5.64628 -0.81476,8.511019 l -1.22015,8.890775 3.768021,3.072896 3.422394,3.786551 c 2.921501,3.715734 6.608397,6.499915 10.668588,8.29872 l 5.050921,-1.223973 C 38.324728,73.038607 33.383805,69.887984 29.806406,65.100956 28.655972,63.561522 27.71377,61.932905 26.961715,60.249903 L 24.8272,48.359991 c 0.194234,-3.030146 0.935183,-6.015406 2.192285,-8.803061 z' 542 | }, 543 | color1: '#735252', 544 | color2: '#390305', 545 | color3: '#ff0d39', 546 | flip: false 547 | } 548 | } 549 | }) 550 | } 551 | 552 | if (version < 8) { 553 | console.log('Applying version 8') 554 | const gameTime = parseInt(await env.get(env.keys.GAMETIME)) 555 | const roomObjects = await db['rooms.objects'].find({ 556 | type: { $in: ['spawn', 'invaderCore'] }, 557 | spawning: { $ne: null }, 558 | 'spawning.remainingTime': { $exists: true } 559 | }) 560 | 561 | const ps = roomObjects.map(object => { 562 | console.log(`${object.type}#${object._id}: ${JSON.stringify(object.spawning, 0, 2)}`) 563 | object.spawning.spawnTime = gameTime + object.spawning.remainingTime 564 | delete object.spawning.remainingTime 565 | const { _id, ...obj } = object 566 | return db['rooms.objects'].update({ _id }, obj) 567 | }) 568 | await Promise.all(ps) 569 | } 570 | 571 | if (version < 9) { 572 | console.log('Applying version 9') 573 | 574 | const ps = [] 575 | 576 | const rooms = await db.rooms.find({}) 577 | const activeRoomNames = [] 578 | 579 | rooms.forEach(room => { 580 | if (room.active) { 581 | activeRoomNames.push(room._id) 582 | delete room.active 583 | 584 | const { _id, ...obj } = room 585 | ps.push(db.rooms.update({ _id }, obj)) 586 | } 587 | }) 588 | 589 | if (activeRoomNames[0]) { 590 | ps.push(env.sadd(env.keys.ACTIVE_ROOMS, activeRoomNames)) 591 | } 592 | 593 | await Promise.all(ps) 594 | } 595 | 596 | await env.set(env.keys.DATABASE_VERSION, '' + DATABASE_VERSION) 597 | console.log(`Database upgraded to version ${DATABASE_VERSION}`) 598 | } 599 | exports.upgradeDB = upgradeDB 600 | -------------------------------------------------------------------------------- /lib/common/index.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const ini = require('ini') 3 | 4 | module.exports = function (config) { 5 | let opts = {} 6 | try { 7 | opts = ini.parse(fs.readFileSync('./.screepsrc', { encoding: 'utf8' })) 8 | } catch (e) { } 9 | Object.assign(config, { 10 | mongo: Object.assign({ 11 | host: process.env.MONGO_HOST || 'localhost', 12 | port: process.env.MONGO_PORT || 27017, 13 | database: process.env.MONGO_DATABASE || 'screeps', 14 | uri: process.env.MONGO_CONN || '' // Pass complete Connection String in Env Variable (i.e. for authenticated connections) 15 | }, opts.mongo || {}), 16 | redis: Object.assign({ 17 | host: process.env.REDIS_HOST || 'localhost', 18 | port: process.env.REDIS_PORT || 6379 19 | }, opts.redis || {}) 20 | }) 21 | config.common.storage.env.keys.ROOM_INTENTS = 'roomIntents:' 22 | config.common.storage.env.keys.DATABASE_VERSION = 'databaseVersion' 23 | require('./storage')(config) 24 | } 25 | -------------------------------------------------------------------------------- /lib/common/queue.js: -------------------------------------------------------------------------------- 1 | const q = require('q') 2 | 3 | const queues = new Proxy({ 4 | init (name) { 5 | this[name] = { 6 | pending: `${name}Pending`, 7 | processing: `${name}Processing`, 8 | emitter: { 9 | emit (channel) { 10 | return pubsub.publish(`queue_${name}_${channel}`, '1') 11 | }, 12 | once (channel, cb) { 13 | return pubsub.once(`queue_${name}_${channel}`, (...a) => { 14 | cb(...a) // eslint-disable-line 15 | }) 16 | } 17 | } 18 | } 19 | } 20 | }, { 21 | get (target, name) { 22 | if (!target[name]) { 23 | target.init(name) 24 | } 25 | return target[name] 26 | } 27 | }) 28 | 29 | function wrap (redis, name) { 30 | return (...a) => q.ninvoke(redis, name, ...a) 31 | } 32 | 33 | let pubsub 34 | const redis = { 35 | funcs: ['get', 'del', 'llen', 'lrem', 'lpush', 'ltrim', 'rpoplpush'] 36 | } 37 | 38 | module.exports = { 39 | wrap (nredis, npubsub) { 40 | redis.funcs.forEach(f => (redis[f] = wrap(nredis, f))) 41 | pubsub = npubsub 42 | }, 43 | fetch (name, cb) { 44 | const defer = q.defer() 45 | try { 46 | const check = function () { 47 | redis.rpoplpush(queues[name].pending, queues[name].processing) 48 | .then(item => { 49 | if (!item || item === 'nil') { 50 | setTimeout(check, 10) 51 | return 52 | } 53 | defer.resolve(item) 54 | }).catch(err => console.error('fetch', err)) 55 | } 56 | check() 57 | } catch (e) { 58 | defer.reject(e.message) 59 | console.error(e) 60 | } 61 | return defer.promise 62 | }, 63 | markDone (name, id, cb) { 64 | const defer = q.defer() 65 | try { 66 | redis.lrem(queues[name].processing, 0, id) 67 | queues[name].emitter.emit('done') 68 | defer.resolve(true) 69 | } catch (e) { 70 | defer.reject(e.message) 71 | console.error(e) 72 | } 73 | return defer.promise 74 | }, 75 | add (name, id, cb) { 76 | const defer = q.defer() 77 | try { 78 | redis.lpush(queues[name].pending, id) 79 | queues[name].emitter.emit('add') 80 | defer.resolve(true) 81 | } catch (e) { 82 | defer.reject(e.message) 83 | console.error(e) 84 | } 85 | return defer.promise 86 | }, 87 | addMulti (name, array, cb) { 88 | const defer = q.defer() 89 | try { 90 | redis.lpush(queues[name].pending, ...array) 91 | queues[name].emitter.emit('add') 92 | defer.resolve(true) 93 | } catch (e) { 94 | defer.reject(e.message) 95 | console.error(e) 96 | } 97 | return defer.promise 98 | }, 99 | whenAllDone (name, cb) { 100 | const defer = q.defer() 101 | try { 102 | const check = function (reset) { 103 | q.all([ 104 | redis.llen(queues[name].pending), 105 | redis.llen(queues[name].processing) 106 | ]).then(cnts => { 107 | if (cnts[0] + cnts[1]) { 108 | // queues[name].emitter.once('done', check); 109 | setTimeout(check, 10) 110 | return 111 | } 112 | pubsub.publish('queueDone:' + name, '1') 113 | defer.resolve(true) 114 | }) 115 | } 116 | check() 117 | } catch (e) { 118 | defer.reject(e.message) 119 | console.error(e) 120 | } 121 | return defer.promise 122 | }, 123 | reset (name, cb) { 124 | const defer = q.defer() 125 | try { 126 | q.all([ 127 | redis.llen(queues[name].pending), 128 | redis.llen(queues[name].processing) 129 | ]).then((ret) => { 130 | }).then(() => q.all([ 131 | redis.del(queues[name].pending), 132 | redis.del(queues[name].processing) 133 | ])).then((ret) => { 134 | queues[name].emitter.emit('done', true) 135 | defer.resolve(true) 136 | }) 137 | } catch (e) { 138 | defer.reject(e.message) 139 | console.error(e) 140 | } 141 | return defer.promise 142 | } 143 | } 144 | -------------------------------------------------------------------------------- /lib/common/storage.js: -------------------------------------------------------------------------------- 1 | module.exports = function (config) { 2 | const storage = config.common.storage 3 | config.common.dbIndexes = { 4 | users: { user: 1, username: 1, email: 1, active: 1, cpu: 1 }, 5 | 'users.code': { user: 1 }, 6 | rooms: { active: 1, status: 1 }, 7 | 'rooms.objects': { room: 1, user: 1, type: 1, interRoom: 1 }, 8 | 'rooms.terrain': { room: 1 }, 9 | 'rooms.flags': { room: 1, user: 1 }, 10 | transactions: { user: 1 }, 11 | 'users.console': { user: 1 }, 12 | 'users.money': { user: 1 }, 13 | 'users.notifications': { user: 1 }, 14 | 'users.power_creeps': { user: 1 }, 15 | 'users.resources': { user: 1 } 16 | } 17 | if (!storage.env.keys.STATUS_DATA) { 18 | // Hotfix for server bug, to be removed once patched upstream 19 | storage.env.keys.STATUS_DATA = storage.env.keys.ROOM_STATUS_DATA 20 | } 21 | storage._connect = require('./_connect')(config) 22 | } 23 | -------------------------------------------------------------------------------- /lib/engine/driver.js: -------------------------------------------------------------------------------- 1 | const q = require('q') 2 | const _ = require('lodash') 3 | 4 | function checkNotificationOnline (userId) { 5 | return q.when(true) // TODO 6 | } 7 | 8 | module.exports = function (config) { 9 | const { common, engine } = config 10 | const { db, env } = common.storage 11 | const { driver } = engine 12 | Object.assign(driver, { 13 | saveUserIntents (userId, intents) { 14 | const updates = [] 15 | const activeRooms = new Set() 16 | for (const room in intents) { 17 | if (room === 'notify') { 18 | updates.push(checkNotificationOnline(userId) 19 | .then(() => { 20 | if (intents.notify.length > 20) { 21 | intents.notify = _.take(intents.notify, 20) 22 | } 23 | 24 | const promises = [q.when()] 25 | 26 | intents.notify.forEach((i) => { 27 | if (i.groupInterval < 0) { 28 | i.groupInterval = 0 29 | } 30 | if (i.groupInterval > 1440) { 31 | i.groupInterval = 1440 32 | } 33 | i.groupInterval *= 60 * 1000 34 | i.groupInterval = Math.floor(i.groupInterval) 35 | const date = i.groupInterval ? new Date(Math.ceil(new Date().getTime() / i.groupInterval) * i.groupInterval) : new Date() 36 | 37 | const message = ('' + i.message).substring(0, 500) 38 | 39 | promises.push(db['users.notifications'].update({ 40 | $and: [ 41 | { user: userId }, 42 | { message }, 43 | { date: date.getTime() }, 44 | { type: 'msg' } 45 | ] 46 | }, { 47 | $inc: { count: 1 } 48 | }, 49 | { upsert: true })) 50 | }) 51 | 52 | return q.all(promises) 53 | })) 54 | continue 55 | } 56 | 57 | if (room === 'market') { 58 | updates.push(db['market.intents'].insert({ user: userId, intents: intents[room] })) 59 | continue 60 | } 61 | if (room === 'global') { 62 | updates.push(db['users.intents'].insert({ user: userId, intents: intents[room] })) 63 | continue 64 | } 65 | activeRooms.add(room) 66 | updates.push(env.hset(env.keys.ROOM_INTENTS + room, userId, JSON.stringify(intents[room]))) 67 | } 68 | if (activeRooms.size > 0) { 69 | updates.push(driver.activateRoom(Array.from(activeRooms))) 70 | } 71 | return q.all(updates) 72 | }, 73 | clearRoomIntents (roomId) { 74 | return env.del(env.keys.ROOM_INTENTS + roomId) 75 | }, 76 | getRoomIntents (roomId) { 77 | return env.hgetall(env.keys.ROOM_INTENTS + roomId) 78 | .then(data => { 79 | const users = {} 80 | const manual = {} 81 | if (!data) { 82 | return { users } 83 | } 84 | _.each(data, (intents, userId) => { 85 | intents = JSON.parse(intents) 86 | const [, id] = userId.match(/^(.*)\.manual$/) || [] 87 | if (id) { 88 | manual[id] = { objectsManual: intents } 89 | } else { 90 | users[userId] = { objects: intents } 91 | } 92 | }) 93 | _.each(manual, (data, userId) => { 94 | users[userId] = users[userId] || {} 95 | users[userId].objectsManual = data.objectsManual 96 | }) 97 | return { users } 98 | }) 99 | }, 100 | incrementGameTime () { 101 | return env.incr(env.keys.GAMETIME) 102 | // common.getGametime() 103 | // .then(gameTime => env.set(env.keys.GAMETIME, gameTime + 1).then(() => gameTime + 1)) 104 | } 105 | }) 106 | } 107 | -------------------------------------------------------------------------------- /lib/engine/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (config) { 2 | require('./driver')(config) 3 | } 4 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | module.exports = function (config) { 2 | require('./common')(config) // This is for adding stuff ALL the mods/modules will see 3 | if (config.backend) require('./backend')(config) // API and CLI stuff 4 | if (config.engine) require('./engine')(config) // Engine stuff 5 | } 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "screepsmod-mongo", 3 | "version": "2.12.1", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "standard", 8 | "2npm": "publish" 9 | }, 10 | "devDependencies": { 11 | "publish": "^0.6.0", 12 | "standard": "17.1.2" 13 | }, 14 | "screeps_mod": true, 15 | "keywords": [ 16 | "screeps", 17 | "mod" 18 | ], 19 | "author": "Adam Shumann", 20 | "license": "MIT", 21 | "dependencies": { 22 | "body-parser": "^1.20.3", 23 | "express": "^4.21.2", 24 | "ini": "^1.3.8", 25 | "lodash": "^4.17.21", 26 | "mongodb": "^3.7.4", 27 | "q": "^1.5.1", 28 | "q-json-response": "^0.1.3", 29 | "redis": "^3.1.2" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | body-parser: 12 | specifier: ^1.20.3 13 | version: 1.20.3 14 | express: 15 | specifier: ^4.21.2 16 | version: 4.21.2 17 | ini: 18 | specifier: ^1.3.8 19 | version: 1.3.8 20 | lodash: 21 | specifier: ^4.17.21 22 | version: 4.17.21 23 | mongodb: 24 | specifier: ^3.7.4 25 | version: 3.7.4 26 | q: 27 | specifier: ^1.5.1 28 | version: 1.5.1 29 | q-json-response: 30 | specifier: ^0.1.3 31 | version: 0.1.3 32 | redis: 33 | specifier: ^3.1.2 34 | version: 3.1.2 35 | devDependencies: 36 | publish: 37 | specifier: ^0.6.0 38 | version: 0.6.0 39 | standard: 40 | specifier: 17.1.2 41 | version: 17.1.2 42 | 43 | packages: 44 | 45 | '@eslint-community/eslint-utils@4.7.0': 46 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 47 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 48 | peerDependencies: 49 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 50 | 51 | '@eslint-community/regexpp@4.12.1': 52 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 53 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 54 | 55 | '@eslint/eslintrc@2.1.4': 56 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 57 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 58 | 59 | '@eslint/js@8.57.1': 60 | resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} 61 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 62 | 63 | '@humanwhocodes/config-array@0.13.0': 64 | resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} 65 | engines: {node: '>=10.10.0'} 66 | deprecated: Use @eslint/config-array instead 67 | 68 | '@humanwhocodes/module-importer@1.0.1': 69 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 70 | engines: {node: '>=12.22'} 71 | 72 | '@humanwhocodes/object-schema@2.0.3': 73 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 74 | deprecated: Use @eslint/object-schema instead 75 | 76 | '@nodelib/fs.scandir@2.1.5': 77 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 78 | engines: {node: '>= 8'} 79 | 80 | '@nodelib/fs.stat@2.0.5': 81 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 82 | engines: {node: '>= 8'} 83 | 84 | '@nodelib/fs.walk@1.2.8': 85 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 86 | engines: {node: '>= 8'} 87 | 88 | '@rtsao/scc@1.1.0': 89 | resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} 90 | 91 | '@types/json5@0.0.29': 92 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} 93 | 94 | '@ungap/structured-clone@1.3.0': 95 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 96 | 97 | abbrev@1.1.1: 98 | resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} 99 | 100 | accepts@1.3.8: 101 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 102 | engines: {node: '>= 0.6'} 103 | 104 | acorn-jsx@5.3.2: 105 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 106 | peerDependencies: 107 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 108 | 109 | acorn@8.14.1: 110 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 111 | engines: {node: '>=0.4.0'} 112 | hasBin: true 113 | 114 | ajv@6.12.6: 115 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 116 | 117 | ansi-regex@5.0.1: 118 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 119 | engines: {node: '>=8'} 120 | 121 | ansi-styles@4.3.0: 122 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 123 | engines: {node: '>=8'} 124 | 125 | ansi@0.3.1: 126 | resolution: {integrity: sha512-iFY7JCgHbepc0b82yLaw4IMortylNb6wG4kL+4R0C3iv6i+RHGHux/yUX5BTiRvSX/shMnngjR1YyNMnXEFh5A==} 127 | 128 | are-we-there-yet@1.0.6: 129 | resolution: {integrity: sha512-Zfw6bteqM9gQXZ1BIWOgM8xEwMrUGoyL8nW13+O+OOgNX3YhuDN1GDgg1NzdTlmm3j+9sHy7uBZ12r+z9lXnZQ==} 130 | deprecated: This package is no longer supported. 131 | 132 | argparse@2.0.1: 133 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 134 | 135 | array-buffer-byte-length@1.0.2: 136 | resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} 137 | engines: {node: '>= 0.4'} 138 | 139 | array-flatten@1.1.1: 140 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 141 | 142 | array-includes@3.1.8: 143 | resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} 144 | engines: {node: '>= 0.4'} 145 | 146 | array.prototype.findlast@1.2.5: 147 | resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} 148 | engines: {node: '>= 0.4'} 149 | 150 | array.prototype.findlastindex@1.2.6: 151 | resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} 152 | engines: {node: '>= 0.4'} 153 | 154 | array.prototype.flat@1.3.3: 155 | resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} 156 | engines: {node: '>= 0.4'} 157 | 158 | array.prototype.flatmap@1.3.3: 159 | resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} 160 | engines: {node: '>= 0.4'} 161 | 162 | array.prototype.tosorted@1.1.4: 163 | resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} 164 | engines: {node: '>= 0.4'} 165 | 166 | arraybuffer.prototype.slice@1.0.4: 167 | resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} 168 | engines: {node: '>= 0.4'} 169 | 170 | async-function@1.0.0: 171 | resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} 172 | engines: {node: '>= 0.4'} 173 | 174 | available-typed-arrays@1.0.7: 175 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 176 | engines: {node: '>= 0.4'} 177 | 178 | balanced-match@1.0.2: 179 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 180 | 181 | bl@2.2.1: 182 | resolution: {integrity: sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==} 183 | 184 | body-parser@1.20.3: 185 | resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} 186 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 187 | 188 | brace-expansion@1.1.11: 189 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 190 | 191 | bson@1.1.6: 192 | resolution: {integrity: sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==} 193 | engines: {node: '>=0.6.19'} 194 | 195 | builtins@5.1.0: 196 | resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} 197 | 198 | bytes@3.1.2: 199 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 200 | engines: {node: '>= 0.8'} 201 | 202 | call-bind-apply-helpers@1.0.2: 203 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 204 | engines: {node: '>= 0.4'} 205 | 206 | call-bind@1.0.8: 207 | resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} 208 | engines: {node: '>= 0.4'} 209 | 210 | call-bound@1.0.4: 211 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 212 | engines: {node: '>= 0.4'} 213 | 214 | callsites@3.1.0: 215 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 216 | engines: {node: '>=6'} 217 | 218 | chalk@4.1.2: 219 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 220 | engines: {node: '>=10'} 221 | 222 | color-convert@2.0.1: 223 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 224 | engines: {node: '>=7.0.0'} 225 | 226 | color-name@1.1.4: 227 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 228 | 229 | concat-map@0.0.1: 230 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 231 | 232 | content-disposition@0.5.4: 233 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 234 | engines: {node: '>= 0.6'} 235 | 236 | content-type@1.0.5: 237 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 238 | engines: {node: '>= 0.6'} 239 | 240 | cookie-signature@1.0.6: 241 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 242 | 243 | cookie@0.7.1: 244 | resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} 245 | engines: {node: '>= 0.6'} 246 | 247 | core-util-is@1.0.3: 248 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 249 | 250 | cross-spawn@7.0.6: 251 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 252 | engines: {node: '>= 8'} 253 | 254 | data-view-buffer@1.0.2: 255 | resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} 256 | engines: {node: '>= 0.4'} 257 | 258 | data-view-byte-length@1.0.2: 259 | resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} 260 | engines: {node: '>= 0.4'} 261 | 262 | data-view-byte-offset@1.0.1: 263 | resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} 264 | engines: {node: '>= 0.4'} 265 | 266 | debug@2.6.9: 267 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 268 | peerDependencies: 269 | supports-color: '*' 270 | peerDependenciesMeta: 271 | supports-color: 272 | optional: true 273 | 274 | debug@3.2.7: 275 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} 276 | peerDependencies: 277 | supports-color: '*' 278 | peerDependenciesMeta: 279 | supports-color: 280 | optional: true 281 | 282 | debug@4.4.1: 283 | resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} 284 | engines: {node: '>=6.0'} 285 | peerDependencies: 286 | supports-color: '*' 287 | peerDependenciesMeta: 288 | supports-color: 289 | optional: true 290 | 291 | deep-is@0.1.4: 292 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 293 | 294 | define-data-property@1.1.4: 295 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 296 | engines: {node: '>= 0.4'} 297 | 298 | define-properties@1.2.1: 299 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 300 | engines: {node: '>= 0.4'} 301 | 302 | delegates@1.0.0: 303 | resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} 304 | 305 | denque@1.5.1: 306 | resolution: {integrity: sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==} 307 | engines: {node: '>=0.10'} 308 | 309 | depd@2.0.0: 310 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 311 | engines: {node: '>= 0.8'} 312 | 313 | destroy@1.2.0: 314 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 315 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 316 | 317 | doctrine@2.1.0: 318 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} 319 | engines: {node: '>=0.10.0'} 320 | 321 | doctrine@3.0.0: 322 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 323 | engines: {node: '>=6.0.0'} 324 | 325 | dunder-proto@1.0.1: 326 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 327 | engines: {node: '>= 0.4'} 328 | 329 | ee-first@1.1.1: 330 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 331 | 332 | encodeurl@1.0.2: 333 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 334 | engines: {node: '>= 0.8'} 335 | 336 | encodeurl@2.0.0: 337 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 338 | engines: {node: '>= 0.8'} 339 | 340 | error-ex@1.3.2: 341 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 342 | 343 | es-abstract@1.23.10: 344 | resolution: {integrity: sha512-MtUbM072wlJNyeYAe0mhzrD+M6DIJa96CZAOBBrhDbgKnB4MApIKefcyAB1eOdYn8cUNZgvwBvEzdoAYsxgEIw==} 345 | engines: {node: '>= 0.4'} 346 | 347 | es-define-property@1.0.1: 348 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 349 | engines: {node: '>= 0.4'} 350 | 351 | es-errors@1.3.0: 352 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 353 | engines: {node: '>= 0.4'} 354 | 355 | es-iterator-helpers@1.2.1: 356 | resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==} 357 | engines: {node: '>= 0.4'} 358 | 359 | es-object-atoms@1.1.1: 360 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 361 | engines: {node: '>= 0.4'} 362 | 363 | es-set-tostringtag@2.1.0: 364 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 365 | engines: {node: '>= 0.4'} 366 | 367 | es-shim-unscopables@1.1.0: 368 | resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} 369 | engines: {node: '>= 0.4'} 370 | 371 | es-to-primitive@1.3.0: 372 | resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} 373 | engines: {node: '>= 0.4'} 374 | 375 | escape-html@1.0.3: 376 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 377 | 378 | escape-string-regexp@4.0.0: 379 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 380 | engines: {node: '>=10'} 381 | 382 | eslint-config-standard-jsx@11.0.0: 383 | resolution: {integrity: sha512-+1EV/R0JxEK1L0NGolAr8Iktm3Rgotx3BKwgaX+eAuSX8D952LULKtjgZD3F+e6SvibONnhLwoTi9DPxN5LvvQ==} 384 | peerDependencies: 385 | eslint: ^8.8.0 386 | eslint-plugin-react: ^7.28.0 387 | 388 | eslint-config-standard@17.1.0: 389 | resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} 390 | engines: {node: '>=12.0.0'} 391 | peerDependencies: 392 | eslint: ^8.0.1 393 | eslint-plugin-import: ^2.25.2 394 | eslint-plugin-n: '^15.0.0 || ^16.0.0 ' 395 | eslint-plugin-promise: ^6.0.0 396 | 397 | eslint-import-resolver-node@0.3.9: 398 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} 399 | 400 | eslint-module-utils@2.12.0: 401 | resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} 402 | engines: {node: '>=4'} 403 | peerDependencies: 404 | '@typescript-eslint/parser': '*' 405 | eslint: '*' 406 | eslint-import-resolver-node: '*' 407 | eslint-import-resolver-typescript: '*' 408 | eslint-import-resolver-webpack: '*' 409 | peerDependenciesMeta: 410 | '@typescript-eslint/parser': 411 | optional: true 412 | eslint: 413 | optional: true 414 | eslint-import-resolver-node: 415 | optional: true 416 | eslint-import-resolver-typescript: 417 | optional: true 418 | eslint-import-resolver-webpack: 419 | optional: true 420 | 421 | eslint-plugin-es@4.1.0: 422 | resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} 423 | engines: {node: '>=8.10.0'} 424 | peerDependencies: 425 | eslint: '>=4.19.1' 426 | 427 | eslint-plugin-import@2.31.0: 428 | resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} 429 | engines: {node: '>=4'} 430 | peerDependencies: 431 | '@typescript-eslint/parser': '*' 432 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 433 | peerDependenciesMeta: 434 | '@typescript-eslint/parser': 435 | optional: true 436 | 437 | eslint-plugin-n@15.7.0: 438 | resolution: {integrity: sha512-jDex9s7D/Qial8AGVIHq4W7NswpUD5DPDL2RH8Lzd9EloWUuvUkHfv4FRLMipH5q2UtyurorBkPeNi1wVWNh3Q==} 439 | engines: {node: '>=12.22.0'} 440 | peerDependencies: 441 | eslint: '>=7.0.0' 442 | 443 | eslint-plugin-promise@6.6.0: 444 | resolution: {integrity: sha512-57Zzfw8G6+Gq7axm2Pdo3gW/Rx3h9Yywgn61uE/3elTCOePEHVrn2i5CdfBwA1BLK0Q0WqctICIUSqXZW/VprQ==} 445 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 446 | peerDependencies: 447 | eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 448 | 449 | eslint-plugin-react@7.37.5: 450 | resolution: {integrity: sha512-Qteup0SqU15kdocexFNAJMvCJEfa2xUKNV4CC1xsVMrIIqEy3SQ/rqyxCWNzfrd3/ldy6HMlD2e0JDVpDg2qIA==} 451 | engines: {node: '>=4'} 452 | peerDependencies: 453 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 454 | 455 | eslint-scope@7.2.2: 456 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 457 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 458 | 459 | eslint-utils@2.1.0: 460 | resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} 461 | engines: {node: '>=6'} 462 | 463 | eslint-utils@3.0.0: 464 | resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} 465 | engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} 466 | peerDependencies: 467 | eslint: '>=5' 468 | 469 | eslint-visitor-keys@1.3.0: 470 | resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} 471 | engines: {node: '>=4'} 472 | 473 | eslint-visitor-keys@2.1.0: 474 | resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} 475 | engines: {node: '>=10'} 476 | 477 | eslint-visitor-keys@3.4.3: 478 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 479 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 480 | 481 | eslint@8.57.1: 482 | resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} 483 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 484 | deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 485 | hasBin: true 486 | 487 | espree@9.6.1: 488 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 489 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 490 | 491 | esquery@1.6.0: 492 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 493 | engines: {node: '>=0.10'} 494 | 495 | esrecurse@4.3.0: 496 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 497 | engines: {node: '>=4.0'} 498 | 499 | estraverse@5.3.0: 500 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 501 | engines: {node: '>=4.0'} 502 | 503 | esutils@2.0.3: 504 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 505 | engines: {node: '>=0.10.0'} 506 | 507 | etag@1.8.1: 508 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 509 | engines: {node: '>= 0.6'} 510 | 511 | express@4.21.2: 512 | resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} 513 | engines: {node: '>= 0.10.0'} 514 | 515 | fast-deep-equal@3.1.3: 516 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 517 | 518 | fast-json-stable-stringify@2.1.0: 519 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 520 | 521 | fast-levenshtein@2.0.6: 522 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 523 | 524 | fastq@1.19.1: 525 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 526 | 527 | file-entry-cache@6.0.1: 528 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 529 | engines: {node: ^10.12.0 || >=12.0.0} 530 | 531 | finalhandler@1.3.1: 532 | resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} 533 | engines: {node: '>= 0.8'} 534 | 535 | find-up@3.0.0: 536 | resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} 537 | engines: {node: '>=6'} 538 | 539 | find-up@5.0.0: 540 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 541 | engines: {node: '>=10'} 542 | 543 | flat-cache@3.2.0: 544 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 545 | engines: {node: ^10.12.0 || >=12.0.0} 546 | 547 | flatted@3.3.3: 548 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 549 | 550 | for-each@0.3.5: 551 | resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} 552 | engines: {node: '>= 0.4'} 553 | 554 | forwarded@0.2.0: 555 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 556 | engines: {node: '>= 0.6'} 557 | 558 | fresh@0.5.2: 559 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 560 | engines: {node: '>= 0.6'} 561 | 562 | fs.realpath@1.0.0: 563 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 564 | 565 | function-bind@1.1.2: 566 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 567 | 568 | function.prototype.name@1.1.8: 569 | resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} 570 | engines: {node: '>= 0.4'} 571 | 572 | functions-have-names@1.2.3: 573 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 574 | 575 | gauge@1.2.7: 576 | resolution: {integrity: sha512-fVbU2wRE91yDvKUnrIaQlHKAWKY5e08PmztCrwuH5YVQ+Z/p3d0ny2T48o6uvAAXHIUnfaQdHkmxYbQft1eHVA==} 577 | deprecated: This package is no longer supported. 578 | 579 | get-intrinsic@1.3.0: 580 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 581 | engines: {node: '>= 0.4'} 582 | 583 | get-proto@1.0.1: 584 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 585 | engines: {node: '>= 0.4'} 586 | 587 | get-stdin@8.0.0: 588 | resolution: {integrity: sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==} 589 | engines: {node: '>=10'} 590 | 591 | get-symbol-description@1.1.0: 592 | resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} 593 | engines: {node: '>= 0.4'} 594 | 595 | glob-parent@6.0.2: 596 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 597 | engines: {node: '>=10.13.0'} 598 | 599 | glob@7.2.3: 600 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 601 | deprecated: Glob versions prior to v9 are no longer supported 602 | 603 | globals@13.24.0: 604 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 605 | engines: {node: '>=8'} 606 | 607 | globalthis@1.0.4: 608 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 609 | engines: {node: '>= 0.4'} 610 | 611 | gopd@1.2.0: 612 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 613 | engines: {node: '>= 0.4'} 614 | 615 | graceful-fs@4.2.11: 616 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 617 | 618 | graphemer@1.4.0: 619 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 620 | 621 | has-bigints@1.1.0: 622 | resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} 623 | engines: {node: '>= 0.4'} 624 | 625 | has-flag@4.0.0: 626 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 627 | engines: {node: '>=8'} 628 | 629 | has-property-descriptors@1.0.2: 630 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 631 | 632 | has-proto@1.2.0: 633 | resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} 634 | engines: {node: '>= 0.4'} 635 | 636 | has-symbols@1.1.0: 637 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 638 | engines: {node: '>= 0.4'} 639 | 640 | has-tostringtag@1.0.2: 641 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 642 | engines: {node: '>= 0.4'} 643 | 644 | has-unicode@2.0.1: 645 | resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} 646 | 647 | hasown@2.0.2: 648 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 649 | engines: {node: '>= 0.4'} 650 | 651 | http-errors@2.0.0: 652 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 653 | engines: {node: '>= 0.8'} 654 | 655 | iconv-lite@0.4.24: 656 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 657 | engines: {node: '>=0.10.0'} 658 | 659 | ignore@5.3.2: 660 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 661 | engines: {node: '>= 4'} 662 | 663 | import-fresh@3.3.1: 664 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 665 | engines: {node: '>=6'} 666 | 667 | imurmurhash@0.1.4: 668 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 669 | engines: {node: '>=0.8.19'} 670 | 671 | inflight@1.0.6: 672 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 673 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 674 | 675 | inherits@2.0.4: 676 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 677 | 678 | ini@1.3.8: 679 | resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} 680 | 681 | internal-slot@1.1.0: 682 | resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} 683 | engines: {node: '>= 0.4'} 684 | 685 | ipaddr.js@1.9.1: 686 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 687 | engines: {node: '>= 0.10'} 688 | 689 | is-array-buffer@3.0.5: 690 | resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} 691 | engines: {node: '>= 0.4'} 692 | 693 | is-arrayish@0.2.1: 694 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 695 | 696 | is-async-function@2.1.1: 697 | resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} 698 | engines: {node: '>= 0.4'} 699 | 700 | is-bigint@1.1.0: 701 | resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} 702 | engines: {node: '>= 0.4'} 703 | 704 | is-boolean-object@1.2.2: 705 | resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} 706 | engines: {node: '>= 0.4'} 707 | 708 | is-callable@1.2.7: 709 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 710 | engines: {node: '>= 0.4'} 711 | 712 | is-core-module@2.16.1: 713 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 714 | engines: {node: '>= 0.4'} 715 | 716 | is-data-view@1.0.2: 717 | resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} 718 | engines: {node: '>= 0.4'} 719 | 720 | is-date-object@1.1.0: 721 | resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} 722 | engines: {node: '>= 0.4'} 723 | 724 | is-extglob@2.1.1: 725 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 726 | engines: {node: '>=0.10.0'} 727 | 728 | is-finalizationregistry@1.1.1: 729 | resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} 730 | engines: {node: '>= 0.4'} 731 | 732 | is-generator-function@1.1.0: 733 | resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} 734 | engines: {node: '>= 0.4'} 735 | 736 | is-glob@4.0.3: 737 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 738 | engines: {node: '>=0.10.0'} 739 | 740 | is-map@2.0.3: 741 | resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} 742 | engines: {node: '>= 0.4'} 743 | 744 | is-number-object@1.1.1: 745 | resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} 746 | engines: {node: '>= 0.4'} 747 | 748 | is-path-inside@3.0.3: 749 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 750 | engines: {node: '>=8'} 751 | 752 | is-regex@1.2.1: 753 | resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} 754 | engines: {node: '>= 0.4'} 755 | 756 | is-set@2.0.3: 757 | resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} 758 | engines: {node: '>= 0.4'} 759 | 760 | is-shared-array-buffer@1.0.4: 761 | resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} 762 | engines: {node: '>= 0.4'} 763 | 764 | is-string@1.1.1: 765 | resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} 766 | engines: {node: '>= 0.4'} 767 | 768 | is-symbol@1.1.1: 769 | resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} 770 | engines: {node: '>= 0.4'} 771 | 772 | is-typed-array@1.1.15: 773 | resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} 774 | engines: {node: '>= 0.4'} 775 | 776 | is-weakmap@2.0.2: 777 | resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} 778 | engines: {node: '>= 0.4'} 779 | 780 | is-weakref@1.1.1: 781 | resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} 782 | engines: {node: '>= 0.4'} 783 | 784 | is-weakset@2.0.4: 785 | resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} 786 | engines: {node: '>= 0.4'} 787 | 788 | isarray@1.0.0: 789 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 790 | 791 | isarray@2.0.5: 792 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 793 | 794 | isexe@2.0.0: 795 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 796 | 797 | iterator.prototype@1.1.5: 798 | resolution: {integrity: sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==} 799 | engines: {node: '>= 0.4'} 800 | 801 | js-tokens@4.0.0: 802 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 803 | 804 | js-yaml@4.1.0: 805 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 806 | hasBin: true 807 | 808 | json-buffer@3.0.1: 809 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 810 | 811 | json-parse-better-errors@1.0.2: 812 | resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} 813 | 814 | json-schema-traverse@0.4.1: 815 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 816 | 817 | json-stable-stringify-without-jsonify@1.0.1: 818 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 819 | 820 | json5@1.0.2: 821 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} 822 | hasBin: true 823 | 824 | jsx-ast-utils@3.3.5: 825 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} 826 | engines: {node: '>=4.0'} 827 | 828 | keyv@4.5.4: 829 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 830 | 831 | levn@0.4.1: 832 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 833 | engines: {node: '>= 0.8.0'} 834 | 835 | load-json-file@5.3.0: 836 | resolution: {integrity: sha512-cJGP40Jc/VXUsp8/OrnyKyTZ1y6v/dphm3bioS+RrKXjK2BB6wHUd6JptZEFDGgGahMT+InnZO5i1Ei9mpC8Bw==} 837 | engines: {node: '>=6'} 838 | 839 | locate-path@3.0.0: 840 | resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} 841 | engines: {node: '>=6'} 842 | 843 | locate-path@6.0.0: 844 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 845 | engines: {node: '>=10'} 846 | 847 | lodash.merge@4.6.2: 848 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 849 | 850 | lodash.pad@4.5.1: 851 | resolution: {integrity: sha512-mvUHifnLqM+03YNzeTBS1/Gr6JRFjd3rRx88FHWUvamVaT9k2O/kXha3yBSOwB9/DTQrSTLJNHvLBBt2FdX7Mg==} 852 | 853 | lodash.padend@4.6.1: 854 | resolution: {integrity: sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==} 855 | 856 | lodash.padstart@4.6.1: 857 | resolution: {integrity: sha512-sW73O6S8+Tg66eY56DBk85aQzzUJDtpoXFBgELMd5P/SotAguo+1kYO6RuYgXxA4HJH3LFTFPASX6ET6bjfriw==} 858 | 859 | lodash@3.10.1: 860 | resolution: {integrity: sha512-9mDDwqVIma6OZX79ZlDACZl8sBm0TEnkf99zV3iMA4GzkIT/9hiqP5mY0HoT1iNLCrKc/R1HByV+yJfRWVJryQ==} 861 | 862 | lodash@4.17.21: 863 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 864 | 865 | loose-envify@1.4.0: 866 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 867 | hasBin: true 868 | 869 | math-intrinsics@1.1.0: 870 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 871 | engines: {node: '>= 0.4'} 872 | 873 | media-typer@0.3.0: 874 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 875 | engines: {node: '>= 0.6'} 876 | 877 | memory-pager@1.5.0: 878 | resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} 879 | 880 | merge-descriptors@1.0.3: 881 | resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} 882 | 883 | methods@1.1.2: 884 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 885 | engines: {node: '>= 0.6'} 886 | 887 | mime-db@1.52.0: 888 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 889 | engines: {node: '>= 0.6'} 890 | 891 | mime-types@2.1.35: 892 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 893 | engines: {node: '>= 0.6'} 894 | 895 | mime@1.6.0: 896 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 897 | engines: {node: '>=4'} 898 | hasBin: true 899 | 900 | minimatch@3.1.2: 901 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 902 | 903 | minimist@1.2.8: 904 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 905 | 906 | mongodb@3.7.4: 907 | resolution: {integrity: sha512-K5q8aBqEXMwWdVNh94UQTwZ6BejVbFhh1uB6c5FKtPE9eUMZPUO3sRZdgIEcHSrAWmxzpG/FeODDKL388sqRmw==} 908 | engines: {node: '>=4'} 909 | peerDependencies: 910 | aws4: '*' 911 | bson-ext: '*' 912 | kerberos: '*' 913 | mongodb-client-encryption: '*' 914 | mongodb-extjson: '*' 915 | snappy: '*' 916 | peerDependenciesMeta: 917 | aws4: 918 | optional: true 919 | bson-ext: 920 | optional: true 921 | kerberos: 922 | optional: true 923 | mongodb-client-encryption: 924 | optional: true 925 | mongodb-extjson: 926 | optional: true 927 | snappy: 928 | optional: true 929 | 930 | ms@2.0.0: 931 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 932 | 933 | ms@2.1.3: 934 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 935 | 936 | natural-compare@1.4.0: 937 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 938 | 939 | negotiator@0.6.3: 940 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 941 | engines: {node: '>= 0.6'} 942 | 943 | nopt@3.0.6: 944 | resolution: {integrity: sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==} 945 | hasBin: true 946 | 947 | npm@2.15.12: 948 | resolution: {integrity: sha512-WMoAJ518W0vHjWy1abYnTeyG9YQpSoYGPxAx7d0C0L7U7Jo44bZsrvTjccmDohCJGxpasdKfqsKsl6o/RUPx6A==} 949 | hasBin: true 950 | bundledDependencies: 951 | - abbrev 952 | - ansi 953 | - ansi-regex 954 | - ansicolors 955 | - ansistyles 956 | - archy 957 | - async-some 958 | - block-stream 959 | - char-spinner 960 | - chmodr 961 | - chownr 962 | - cmd-shim 963 | - columnify 964 | - config-chain 965 | - dezalgo 966 | - editor 967 | - fs-vacuum 968 | - fs-write-stream-atomic 969 | - fstream 970 | - fstream-npm 971 | - github-url-from-git 972 | - github-url-from-username-repo 973 | - glob 974 | - graceful-fs 975 | - hosted-git-info 976 | - imurmurhash 977 | - inflight 978 | - inherits 979 | - ini 980 | - init-package-json 981 | - lockfile 982 | - lru-cache 983 | - minimatch 984 | - mkdirp 985 | - node-gyp 986 | - nopt 987 | - normalize-git-url 988 | - normalize-package-data 989 | - npm-cache-filename 990 | - npm-install-checks 991 | - npm-package-arg 992 | - npm-registry-client 993 | - npm-user-validate 994 | - npmlog 995 | - once 996 | - opener 997 | - osenv 998 | - path-is-inside 999 | - read 1000 | - read-installed 1001 | - read-package-json 1002 | - readable-stream 1003 | - realize-package-specifier 1004 | - request 1005 | - retry 1006 | - rimraf 1007 | - semver 1008 | - sha 1009 | - slide 1010 | - sorted-object 1011 | - spdx-license-ids 1012 | - strip-ansi 1013 | - tar 1014 | - text-table 1015 | - uid-number 1016 | - umask 1017 | - validate-npm-package-license 1018 | - validate-npm-package-name 1019 | - which 1020 | - wrappy 1021 | - write-file-atomic 1022 | 1023 | npmlog@1.2.1: 1024 | resolution: {integrity: sha512-1J5KqSRvESP6XbjPaXt2H6qDzgizLTM7x0y1cXIjP2PpvdCqyNC7TO3cPRKsuYlElbi/DwkzRRdG2zpmE0IktQ==} 1025 | deprecated: This package is no longer supported. 1026 | 1027 | object-assign@4.1.1: 1028 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1029 | engines: {node: '>=0.10.0'} 1030 | 1031 | object-inspect@1.13.4: 1032 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1033 | engines: {node: '>= 0.4'} 1034 | 1035 | object-keys@1.1.1: 1036 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1037 | engines: {node: '>= 0.4'} 1038 | 1039 | object.assign@4.1.7: 1040 | resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} 1041 | engines: {node: '>= 0.4'} 1042 | 1043 | object.entries@1.1.9: 1044 | resolution: {integrity: sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==} 1045 | engines: {node: '>= 0.4'} 1046 | 1047 | object.fromentries@2.0.8: 1048 | resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} 1049 | engines: {node: '>= 0.4'} 1050 | 1051 | object.groupby@1.0.3: 1052 | resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} 1053 | engines: {node: '>= 0.4'} 1054 | 1055 | object.values@1.2.1: 1056 | resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} 1057 | engines: {node: '>= 0.4'} 1058 | 1059 | on-finished@2.4.1: 1060 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1061 | engines: {node: '>= 0.8'} 1062 | 1063 | once@1.4.0: 1064 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1065 | 1066 | optional-require@1.1.8: 1067 | resolution: {integrity: sha512-jq83qaUb0wNg9Krv1c5OQ+58EK+vHde6aBPzLvPPqJm89UQWsvSuFy9X/OSNJnFeSOKo7btE0n8Nl2+nE+z5nA==} 1068 | engines: {node: '>=4'} 1069 | 1070 | optionator@0.9.4: 1071 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1072 | engines: {node: '>= 0.8.0'} 1073 | 1074 | own-keys@1.0.1: 1075 | resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} 1076 | engines: {node: '>= 0.4'} 1077 | 1078 | p-limit@2.3.0: 1079 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1080 | engines: {node: '>=6'} 1081 | 1082 | p-limit@3.1.0: 1083 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1084 | engines: {node: '>=10'} 1085 | 1086 | p-locate@3.0.0: 1087 | resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} 1088 | engines: {node: '>=6'} 1089 | 1090 | p-locate@5.0.0: 1091 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1092 | engines: {node: '>=10'} 1093 | 1094 | p-try@2.2.0: 1095 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1096 | engines: {node: '>=6'} 1097 | 1098 | parent-module@1.0.1: 1099 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1100 | engines: {node: '>=6'} 1101 | 1102 | parse-json@4.0.0: 1103 | resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==} 1104 | engines: {node: '>=4'} 1105 | 1106 | parseurl@1.3.3: 1107 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1108 | engines: {node: '>= 0.8'} 1109 | 1110 | path-exists@3.0.0: 1111 | resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} 1112 | engines: {node: '>=4'} 1113 | 1114 | path-exists@4.0.0: 1115 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1116 | engines: {node: '>=8'} 1117 | 1118 | path-is-absolute@1.0.1: 1119 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1120 | engines: {node: '>=0.10.0'} 1121 | 1122 | path-key@3.1.1: 1123 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1124 | engines: {node: '>=8'} 1125 | 1126 | path-parse@1.0.7: 1127 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1128 | 1129 | path-to-regexp@0.1.12: 1130 | resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} 1131 | 1132 | pify@4.0.1: 1133 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} 1134 | engines: {node: '>=6'} 1135 | 1136 | pkg-conf@3.1.0: 1137 | resolution: {integrity: sha512-m0OTbR/5VPNPqO1ph6Fqbj7Hv6QU7gR/tQW40ZqrL1rjgCU85W6C1bJn0BItuJqnR98PWzw7Z8hHeChD1WrgdQ==} 1138 | engines: {node: '>=6'} 1139 | 1140 | possible-typed-array-names@1.1.0: 1141 | resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} 1142 | engines: {node: '>= 0.4'} 1143 | 1144 | prelude-ls@1.2.1: 1145 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1146 | engines: {node: '>= 0.8.0'} 1147 | 1148 | process-nextick-args@2.0.1: 1149 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1150 | 1151 | prop-types@15.8.1: 1152 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} 1153 | 1154 | proxy-addr@2.0.7: 1155 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1156 | engines: {node: '>= 0.10'} 1157 | 1158 | publish@0.6.0: 1159 | resolution: {integrity: sha512-eP+7Jvysc11/mG2pCHewDYn10UJsJV3CzgYnu4EHufs/ksTNVM3R/jPC4sZmNxJKdNJmFBw5Uuy2Az+19PJR8w==} 1160 | hasBin: true 1161 | 1162 | punycode@2.3.1: 1163 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1164 | engines: {node: '>=6'} 1165 | 1166 | q-json-response@0.1.3: 1167 | resolution: {integrity: sha512-v3SbbBCZw1z3ASTJU/cA7kTnevqVrDkiGD1uKm33kZwOuji2QvOqF+kE445h6lOggBclN/D260tlEswiDLI2dw==} 1168 | 1169 | q@1.5.1: 1170 | resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} 1171 | engines: {node: '>=0.6.0', teleport: '>=0.2.0'} 1172 | deprecated: |- 1173 | You or someone you depend on is using Q, the JavaScript Promise library that gave JavaScript developers strong feelings about promises. They can almost certainly migrate to the native JavaScript promise now. Thank you literally everyone for joining me in this bet against the odds. Be excellent to each other. 1174 | 1175 | (For a CapTP with native promises, see @endo/eventual-send and @endo/captp) 1176 | 1177 | qs@6.13.0: 1178 | resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} 1179 | engines: {node: '>=0.6'} 1180 | 1181 | queue-microtask@1.2.3: 1182 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1183 | 1184 | range-parser@1.2.1: 1185 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1186 | engines: {node: '>= 0.6'} 1187 | 1188 | raw-body@2.5.2: 1189 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 1190 | engines: {node: '>= 0.8'} 1191 | 1192 | react-is@16.13.1: 1193 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} 1194 | 1195 | readable-stream@2.3.8: 1196 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 1197 | 1198 | redis-commands@1.7.0: 1199 | resolution: {integrity: sha512-nJWqw3bTFy21hX/CPKHth6sfhZbdiHP6bTawSgQBlKOVRG7EZkfHbbHwQJnrE4vsQf0CMNE+3gJ4Fmm16vdVlQ==} 1200 | 1201 | redis-errors@1.2.0: 1202 | resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} 1203 | engines: {node: '>=4'} 1204 | 1205 | redis-parser@3.0.0: 1206 | resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} 1207 | engines: {node: '>=4'} 1208 | 1209 | redis@3.1.2: 1210 | resolution: {integrity: sha512-grn5KoZLr/qrRQVwoSkmzdbw6pwF+/rwODtrOr6vuBRiR/f3rjSTGupbF90Zpqm2oenix8Do6RV7pYEkGwlKkw==} 1211 | engines: {node: '>=10'} 1212 | 1213 | reflect.getprototypeof@1.0.10: 1214 | resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} 1215 | engines: {node: '>= 0.4'} 1216 | 1217 | regexp.prototype.flags@1.5.4: 1218 | resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} 1219 | engines: {node: '>= 0.4'} 1220 | 1221 | regexpp@3.2.0: 1222 | resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} 1223 | engines: {node: '>=8'} 1224 | 1225 | require-at@1.0.6: 1226 | resolution: {integrity: sha512-7i1auJbMUrXEAZCOQ0VNJgmcT2VOKPRl2YGJwgpHpC9CE91Mv4/4UYIUm4chGJaI381ZDq1JUicFii64Hapd8g==} 1227 | engines: {node: '>=4'} 1228 | 1229 | resolve-from@4.0.0: 1230 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1231 | engines: {node: '>=4'} 1232 | 1233 | resolve@1.22.10: 1234 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1235 | engines: {node: '>= 0.4'} 1236 | hasBin: true 1237 | 1238 | resolve@2.0.0-next.5: 1239 | resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} 1240 | hasBin: true 1241 | 1242 | reusify@1.1.0: 1243 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1244 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1245 | 1246 | rimraf@3.0.2: 1247 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1248 | deprecated: Rimraf versions prior to v4 are no longer supported 1249 | hasBin: true 1250 | 1251 | run-parallel@1.2.0: 1252 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1253 | 1254 | safe-array-concat@1.1.3: 1255 | resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} 1256 | engines: {node: '>=0.4'} 1257 | 1258 | safe-buffer@5.1.2: 1259 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1260 | 1261 | safe-buffer@5.2.1: 1262 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1263 | 1264 | safe-push-apply@1.0.0: 1265 | resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} 1266 | engines: {node: '>= 0.4'} 1267 | 1268 | safe-regex-test@1.1.0: 1269 | resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} 1270 | engines: {node: '>= 0.4'} 1271 | 1272 | safer-buffer@2.1.2: 1273 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1274 | 1275 | saslprep@1.0.3: 1276 | resolution: {integrity: sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==} 1277 | engines: {node: '>=6'} 1278 | 1279 | semver@4.3.6: 1280 | resolution: {integrity: sha512-IrpJ+yoG4EOH8DFWuVg+8H1kW1Oaof0Wxe7cPcXW3x9BjkN/eVo54F15LyqemnDIUYskQWr9qvl/RihmSy6+xQ==} 1281 | hasBin: true 1282 | 1283 | semver@6.3.1: 1284 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 1285 | hasBin: true 1286 | 1287 | semver@7.7.2: 1288 | resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} 1289 | engines: {node: '>=10'} 1290 | hasBin: true 1291 | 1292 | send@0.19.0: 1293 | resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} 1294 | engines: {node: '>= 0.8.0'} 1295 | 1296 | serve-static@1.16.2: 1297 | resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} 1298 | engines: {node: '>= 0.8.0'} 1299 | 1300 | set-function-length@1.2.2: 1301 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1302 | engines: {node: '>= 0.4'} 1303 | 1304 | set-function-name@2.0.2: 1305 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1306 | engines: {node: '>= 0.4'} 1307 | 1308 | set-proto@1.0.0: 1309 | resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} 1310 | engines: {node: '>= 0.4'} 1311 | 1312 | setprototypeof@1.2.0: 1313 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1314 | 1315 | shebang-command@2.0.0: 1316 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1317 | engines: {node: '>=8'} 1318 | 1319 | shebang-regex@3.0.0: 1320 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1321 | engines: {node: '>=8'} 1322 | 1323 | side-channel-list@1.0.0: 1324 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1325 | engines: {node: '>= 0.4'} 1326 | 1327 | side-channel-map@1.0.1: 1328 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1329 | engines: {node: '>= 0.4'} 1330 | 1331 | side-channel-weakmap@1.0.2: 1332 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1333 | engines: {node: '>= 0.4'} 1334 | 1335 | side-channel@1.1.0: 1336 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1337 | engines: {node: '>= 0.4'} 1338 | 1339 | sparse-bitfield@3.0.3: 1340 | resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} 1341 | 1342 | standard-engine@15.1.0: 1343 | resolution: {integrity: sha512-VHysfoyxFu/ukT+9v49d4BRXIokFRZuH3z1VRxzFArZdjSCFpro6rEIU3ji7e4AoAtuSfKBkiOmsrDqKW5ZSRw==} 1344 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1345 | 1346 | standard@17.1.2: 1347 | resolution: {integrity: sha512-WLm12WoXveKkvnPnPnaFUUHuOB2cUdAsJ4AiGHL2G0UNMrcRAWY2WriQaV8IQ3oRmYr0AWUbLNr94ekYFAHOrA==} 1348 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1349 | hasBin: true 1350 | 1351 | statuses@2.0.1: 1352 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1353 | engines: {node: '>= 0.8'} 1354 | 1355 | string.prototype.matchall@4.0.12: 1356 | resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} 1357 | engines: {node: '>= 0.4'} 1358 | 1359 | string.prototype.repeat@1.0.0: 1360 | resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} 1361 | 1362 | string.prototype.trim@1.2.10: 1363 | resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} 1364 | engines: {node: '>= 0.4'} 1365 | 1366 | string.prototype.trimend@1.0.9: 1367 | resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} 1368 | engines: {node: '>= 0.4'} 1369 | 1370 | string.prototype.trimstart@1.0.8: 1371 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1372 | engines: {node: '>= 0.4'} 1373 | 1374 | string_decoder@1.1.1: 1375 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1376 | 1377 | strip-ansi@6.0.1: 1378 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1379 | engines: {node: '>=8'} 1380 | 1381 | strip-bom@3.0.0: 1382 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1383 | engines: {node: '>=4'} 1384 | 1385 | strip-json-comments@3.1.1: 1386 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1387 | engines: {node: '>=8'} 1388 | 1389 | supports-color@7.2.0: 1390 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1391 | engines: {node: '>=8'} 1392 | 1393 | supports-preserve-symlinks-flag@1.0.0: 1394 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1395 | engines: {node: '>= 0.4'} 1396 | 1397 | text-table@0.2.0: 1398 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1399 | 1400 | toidentifier@1.0.1: 1401 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1402 | engines: {node: '>=0.6'} 1403 | 1404 | tsconfig-paths@3.15.0: 1405 | resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} 1406 | 1407 | type-check@0.4.0: 1408 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1409 | engines: {node: '>= 0.8.0'} 1410 | 1411 | type-fest@0.20.2: 1412 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1413 | engines: {node: '>=10'} 1414 | 1415 | type-fest@0.3.1: 1416 | resolution: {integrity: sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ==} 1417 | engines: {node: '>=6'} 1418 | 1419 | type-is@1.6.18: 1420 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 1421 | engines: {node: '>= 0.6'} 1422 | 1423 | typed-array-buffer@1.0.3: 1424 | resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} 1425 | engines: {node: '>= 0.4'} 1426 | 1427 | typed-array-byte-length@1.0.3: 1428 | resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} 1429 | engines: {node: '>= 0.4'} 1430 | 1431 | typed-array-byte-offset@1.0.4: 1432 | resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} 1433 | engines: {node: '>= 0.4'} 1434 | 1435 | typed-array-length@1.0.7: 1436 | resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} 1437 | engines: {node: '>= 0.4'} 1438 | 1439 | unbox-primitive@1.1.0: 1440 | resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} 1441 | engines: {node: '>= 0.4'} 1442 | 1443 | unpipe@1.0.0: 1444 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1445 | engines: {node: '>= 0.8'} 1446 | 1447 | uri-js@4.4.1: 1448 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1449 | 1450 | util-deprecate@1.0.2: 1451 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1452 | 1453 | utils-merge@1.0.1: 1454 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 1455 | engines: {node: '>= 0.4.0'} 1456 | 1457 | vary@1.1.2: 1458 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1459 | engines: {node: '>= 0.8'} 1460 | 1461 | version-guard@1.1.3: 1462 | resolution: {integrity: sha512-JwPr6erhX53EWH/HCSzfy1tTFrtPXUe927wdM1jqBBeYp1OM+qPHjWbsvv6pIBduqdgxxS+ScfG7S28pzyr2DQ==} 1463 | engines: {node: '>=0.10.48'} 1464 | 1465 | which-boxed-primitive@1.1.1: 1466 | resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} 1467 | engines: {node: '>= 0.4'} 1468 | 1469 | which-builtin-type@1.2.1: 1470 | resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} 1471 | engines: {node: '>= 0.4'} 1472 | 1473 | which-collection@1.0.2: 1474 | resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} 1475 | engines: {node: '>= 0.4'} 1476 | 1477 | which-typed-array@1.1.19: 1478 | resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} 1479 | engines: {node: '>= 0.4'} 1480 | 1481 | which@2.0.2: 1482 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1483 | engines: {node: '>= 8'} 1484 | hasBin: true 1485 | 1486 | word-wrap@1.2.5: 1487 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 1488 | engines: {node: '>=0.10.0'} 1489 | 1490 | wrappy@1.0.2: 1491 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1492 | 1493 | xdg-basedir@4.0.0: 1494 | resolution: {integrity: sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==} 1495 | engines: {node: '>=8'} 1496 | 1497 | yocto-queue@0.1.0: 1498 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1499 | engines: {node: '>=10'} 1500 | 1501 | snapshots: 1502 | 1503 | '@eslint-community/eslint-utils@4.7.0(eslint@8.57.1)': 1504 | dependencies: 1505 | eslint: 8.57.1 1506 | eslint-visitor-keys: 3.4.3 1507 | 1508 | '@eslint-community/regexpp@4.12.1': {} 1509 | 1510 | '@eslint/eslintrc@2.1.4': 1511 | dependencies: 1512 | ajv: 6.12.6 1513 | debug: 4.4.1 1514 | espree: 9.6.1 1515 | globals: 13.24.0 1516 | ignore: 5.3.2 1517 | import-fresh: 3.3.1 1518 | js-yaml: 4.1.0 1519 | minimatch: 3.1.2 1520 | strip-json-comments: 3.1.1 1521 | transitivePeerDependencies: 1522 | - supports-color 1523 | 1524 | '@eslint/js@8.57.1': {} 1525 | 1526 | '@humanwhocodes/config-array@0.13.0': 1527 | dependencies: 1528 | '@humanwhocodes/object-schema': 2.0.3 1529 | debug: 4.4.1 1530 | minimatch: 3.1.2 1531 | transitivePeerDependencies: 1532 | - supports-color 1533 | 1534 | '@humanwhocodes/module-importer@1.0.1': {} 1535 | 1536 | '@humanwhocodes/object-schema@2.0.3': {} 1537 | 1538 | '@nodelib/fs.scandir@2.1.5': 1539 | dependencies: 1540 | '@nodelib/fs.stat': 2.0.5 1541 | run-parallel: 1.2.0 1542 | 1543 | '@nodelib/fs.stat@2.0.5': {} 1544 | 1545 | '@nodelib/fs.walk@1.2.8': 1546 | dependencies: 1547 | '@nodelib/fs.scandir': 2.1.5 1548 | fastq: 1.19.1 1549 | 1550 | '@rtsao/scc@1.1.0': {} 1551 | 1552 | '@types/json5@0.0.29': {} 1553 | 1554 | '@ungap/structured-clone@1.3.0': {} 1555 | 1556 | abbrev@1.1.1: {} 1557 | 1558 | accepts@1.3.8: 1559 | dependencies: 1560 | mime-types: 2.1.35 1561 | negotiator: 0.6.3 1562 | 1563 | acorn-jsx@5.3.2(acorn@8.14.1): 1564 | dependencies: 1565 | acorn: 8.14.1 1566 | 1567 | acorn@8.14.1: {} 1568 | 1569 | ajv@6.12.6: 1570 | dependencies: 1571 | fast-deep-equal: 3.1.3 1572 | fast-json-stable-stringify: 2.1.0 1573 | json-schema-traverse: 0.4.1 1574 | uri-js: 4.4.1 1575 | 1576 | ansi-regex@5.0.1: {} 1577 | 1578 | ansi-styles@4.3.0: 1579 | dependencies: 1580 | color-convert: 2.0.1 1581 | 1582 | ansi@0.3.1: {} 1583 | 1584 | are-we-there-yet@1.0.6: 1585 | dependencies: 1586 | delegates: 1.0.0 1587 | readable-stream: 2.3.8 1588 | 1589 | argparse@2.0.1: {} 1590 | 1591 | array-buffer-byte-length@1.0.2: 1592 | dependencies: 1593 | call-bound: 1.0.4 1594 | is-array-buffer: 3.0.5 1595 | 1596 | array-flatten@1.1.1: {} 1597 | 1598 | array-includes@3.1.8: 1599 | dependencies: 1600 | call-bind: 1.0.8 1601 | define-properties: 1.2.1 1602 | es-abstract: 1.23.10 1603 | es-object-atoms: 1.1.1 1604 | get-intrinsic: 1.3.0 1605 | is-string: 1.1.1 1606 | 1607 | array.prototype.findlast@1.2.5: 1608 | dependencies: 1609 | call-bind: 1.0.8 1610 | define-properties: 1.2.1 1611 | es-abstract: 1.23.10 1612 | es-errors: 1.3.0 1613 | es-object-atoms: 1.1.1 1614 | es-shim-unscopables: 1.1.0 1615 | 1616 | array.prototype.findlastindex@1.2.6: 1617 | dependencies: 1618 | call-bind: 1.0.8 1619 | call-bound: 1.0.4 1620 | define-properties: 1.2.1 1621 | es-abstract: 1.23.10 1622 | es-errors: 1.3.0 1623 | es-object-atoms: 1.1.1 1624 | es-shim-unscopables: 1.1.0 1625 | 1626 | array.prototype.flat@1.3.3: 1627 | dependencies: 1628 | call-bind: 1.0.8 1629 | define-properties: 1.2.1 1630 | es-abstract: 1.23.10 1631 | es-shim-unscopables: 1.1.0 1632 | 1633 | array.prototype.flatmap@1.3.3: 1634 | dependencies: 1635 | call-bind: 1.0.8 1636 | define-properties: 1.2.1 1637 | es-abstract: 1.23.10 1638 | es-shim-unscopables: 1.1.0 1639 | 1640 | array.prototype.tosorted@1.1.4: 1641 | dependencies: 1642 | call-bind: 1.0.8 1643 | define-properties: 1.2.1 1644 | es-abstract: 1.23.10 1645 | es-errors: 1.3.0 1646 | es-shim-unscopables: 1.1.0 1647 | 1648 | arraybuffer.prototype.slice@1.0.4: 1649 | dependencies: 1650 | array-buffer-byte-length: 1.0.2 1651 | call-bind: 1.0.8 1652 | define-properties: 1.2.1 1653 | es-abstract: 1.23.10 1654 | es-errors: 1.3.0 1655 | get-intrinsic: 1.3.0 1656 | is-array-buffer: 3.0.5 1657 | 1658 | async-function@1.0.0: {} 1659 | 1660 | available-typed-arrays@1.0.7: 1661 | dependencies: 1662 | possible-typed-array-names: 1.1.0 1663 | 1664 | balanced-match@1.0.2: {} 1665 | 1666 | bl@2.2.1: 1667 | dependencies: 1668 | readable-stream: 2.3.8 1669 | safe-buffer: 5.2.1 1670 | 1671 | body-parser@1.20.3: 1672 | dependencies: 1673 | bytes: 3.1.2 1674 | content-type: 1.0.5 1675 | debug: 2.6.9 1676 | depd: 2.0.0 1677 | destroy: 1.2.0 1678 | http-errors: 2.0.0 1679 | iconv-lite: 0.4.24 1680 | on-finished: 2.4.1 1681 | qs: 6.13.0 1682 | raw-body: 2.5.2 1683 | type-is: 1.6.18 1684 | unpipe: 1.0.0 1685 | transitivePeerDependencies: 1686 | - supports-color 1687 | 1688 | brace-expansion@1.1.11: 1689 | dependencies: 1690 | balanced-match: 1.0.2 1691 | concat-map: 0.0.1 1692 | 1693 | bson@1.1.6: {} 1694 | 1695 | builtins@5.1.0: 1696 | dependencies: 1697 | semver: 7.7.2 1698 | 1699 | bytes@3.1.2: {} 1700 | 1701 | call-bind-apply-helpers@1.0.2: 1702 | dependencies: 1703 | es-errors: 1.3.0 1704 | function-bind: 1.1.2 1705 | 1706 | call-bind@1.0.8: 1707 | dependencies: 1708 | call-bind-apply-helpers: 1.0.2 1709 | es-define-property: 1.0.1 1710 | get-intrinsic: 1.3.0 1711 | set-function-length: 1.2.2 1712 | 1713 | call-bound@1.0.4: 1714 | dependencies: 1715 | call-bind-apply-helpers: 1.0.2 1716 | get-intrinsic: 1.3.0 1717 | 1718 | callsites@3.1.0: {} 1719 | 1720 | chalk@4.1.2: 1721 | dependencies: 1722 | ansi-styles: 4.3.0 1723 | supports-color: 7.2.0 1724 | 1725 | color-convert@2.0.1: 1726 | dependencies: 1727 | color-name: 1.1.4 1728 | 1729 | color-name@1.1.4: {} 1730 | 1731 | concat-map@0.0.1: {} 1732 | 1733 | content-disposition@0.5.4: 1734 | dependencies: 1735 | safe-buffer: 5.2.1 1736 | 1737 | content-type@1.0.5: {} 1738 | 1739 | cookie-signature@1.0.6: {} 1740 | 1741 | cookie@0.7.1: {} 1742 | 1743 | core-util-is@1.0.3: {} 1744 | 1745 | cross-spawn@7.0.6: 1746 | dependencies: 1747 | path-key: 3.1.1 1748 | shebang-command: 2.0.0 1749 | which: 2.0.2 1750 | 1751 | data-view-buffer@1.0.2: 1752 | dependencies: 1753 | call-bound: 1.0.4 1754 | es-errors: 1.3.0 1755 | is-data-view: 1.0.2 1756 | 1757 | data-view-byte-length@1.0.2: 1758 | dependencies: 1759 | call-bound: 1.0.4 1760 | es-errors: 1.3.0 1761 | is-data-view: 1.0.2 1762 | 1763 | data-view-byte-offset@1.0.1: 1764 | dependencies: 1765 | call-bound: 1.0.4 1766 | es-errors: 1.3.0 1767 | is-data-view: 1.0.2 1768 | 1769 | debug@2.6.9: 1770 | dependencies: 1771 | ms: 2.0.0 1772 | 1773 | debug@3.2.7: 1774 | dependencies: 1775 | ms: 2.1.3 1776 | 1777 | debug@4.4.1: 1778 | dependencies: 1779 | ms: 2.1.3 1780 | 1781 | deep-is@0.1.4: {} 1782 | 1783 | define-data-property@1.1.4: 1784 | dependencies: 1785 | es-define-property: 1.0.1 1786 | es-errors: 1.3.0 1787 | gopd: 1.2.0 1788 | 1789 | define-properties@1.2.1: 1790 | dependencies: 1791 | define-data-property: 1.1.4 1792 | has-property-descriptors: 1.0.2 1793 | object-keys: 1.1.1 1794 | 1795 | delegates@1.0.0: {} 1796 | 1797 | denque@1.5.1: {} 1798 | 1799 | depd@2.0.0: {} 1800 | 1801 | destroy@1.2.0: {} 1802 | 1803 | doctrine@2.1.0: 1804 | dependencies: 1805 | esutils: 2.0.3 1806 | 1807 | doctrine@3.0.0: 1808 | dependencies: 1809 | esutils: 2.0.3 1810 | 1811 | dunder-proto@1.0.1: 1812 | dependencies: 1813 | call-bind-apply-helpers: 1.0.2 1814 | es-errors: 1.3.0 1815 | gopd: 1.2.0 1816 | 1817 | ee-first@1.1.1: {} 1818 | 1819 | encodeurl@1.0.2: {} 1820 | 1821 | encodeurl@2.0.0: {} 1822 | 1823 | error-ex@1.3.2: 1824 | dependencies: 1825 | is-arrayish: 0.2.1 1826 | 1827 | es-abstract@1.23.10: 1828 | dependencies: 1829 | array-buffer-byte-length: 1.0.2 1830 | arraybuffer.prototype.slice: 1.0.4 1831 | available-typed-arrays: 1.0.7 1832 | call-bind: 1.0.8 1833 | call-bound: 1.0.4 1834 | data-view-buffer: 1.0.2 1835 | data-view-byte-length: 1.0.2 1836 | data-view-byte-offset: 1.0.1 1837 | es-define-property: 1.0.1 1838 | es-errors: 1.3.0 1839 | es-object-atoms: 1.1.1 1840 | es-set-tostringtag: 2.1.0 1841 | es-to-primitive: 1.3.0 1842 | function.prototype.name: 1.1.8 1843 | get-intrinsic: 1.3.0 1844 | get-proto: 1.0.1 1845 | get-symbol-description: 1.1.0 1846 | globalthis: 1.0.4 1847 | gopd: 1.2.0 1848 | has-property-descriptors: 1.0.2 1849 | has-proto: 1.2.0 1850 | has-symbols: 1.1.0 1851 | hasown: 2.0.2 1852 | internal-slot: 1.1.0 1853 | is-array-buffer: 3.0.5 1854 | is-callable: 1.2.7 1855 | is-data-view: 1.0.2 1856 | is-regex: 1.2.1 1857 | is-shared-array-buffer: 1.0.4 1858 | is-string: 1.1.1 1859 | is-typed-array: 1.1.15 1860 | is-weakref: 1.1.1 1861 | math-intrinsics: 1.1.0 1862 | object-inspect: 1.13.4 1863 | object-keys: 1.1.1 1864 | object.assign: 4.1.7 1865 | own-keys: 1.0.1 1866 | regexp.prototype.flags: 1.5.4 1867 | safe-array-concat: 1.1.3 1868 | safe-push-apply: 1.0.0 1869 | safe-regex-test: 1.1.0 1870 | set-proto: 1.0.0 1871 | string.prototype.trim: 1.2.10 1872 | string.prototype.trimend: 1.0.9 1873 | string.prototype.trimstart: 1.0.8 1874 | typed-array-buffer: 1.0.3 1875 | typed-array-byte-length: 1.0.3 1876 | typed-array-byte-offset: 1.0.4 1877 | typed-array-length: 1.0.7 1878 | unbox-primitive: 1.1.0 1879 | which-typed-array: 1.1.19 1880 | 1881 | es-define-property@1.0.1: {} 1882 | 1883 | es-errors@1.3.0: {} 1884 | 1885 | es-iterator-helpers@1.2.1: 1886 | dependencies: 1887 | call-bind: 1.0.8 1888 | call-bound: 1.0.4 1889 | define-properties: 1.2.1 1890 | es-abstract: 1.23.10 1891 | es-errors: 1.3.0 1892 | es-set-tostringtag: 2.1.0 1893 | function-bind: 1.1.2 1894 | get-intrinsic: 1.3.0 1895 | globalthis: 1.0.4 1896 | gopd: 1.2.0 1897 | has-property-descriptors: 1.0.2 1898 | has-proto: 1.2.0 1899 | has-symbols: 1.1.0 1900 | internal-slot: 1.1.0 1901 | iterator.prototype: 1.1.5 1902 | safe-array-concat: 1.1.3 1903 | 1904 | es-object-atoms@1.1.1: 1905 | dependencies: 1906 | es-errors: 1.3.0 1907 | 1908 | es-set-tostringtag@2.1.0: 1909 | dependencies: 1910 | es-errors: 1.3.0 1911 | get-intrinsic: 1.3.0 1912 | has-tostringtag: 1.0.2 1913 | hasown: 2.0.2 1914 | 1915 | es-shim-unscopables@1.1.0: 1916 | dependencies: 1917 | hasown: 2.0.2 1918 | 1919 | es-to-primitive@1.3.0: 1920 | dependencies: 1921 | is-callable: 1.2.7 1922 | is-date-object: 1.1.0 1923 | is-symbol: 1.1.1 1924 | 1925 | escape-html@1.0.3: {} 1926 | 1927 | escape-string-regexp@4.0.0: {} 1928 | 1929 | eslint-config-standard-jsx@11.0.0(eslint-plugin-react@7.37.5(eslint@8.57.1))(eslint@8.57.1): 1930 | dependencies: 1931 | eslint: 8.57.1 1932 | eslint-plugin-react: 7.37.5(eslint@8.57.1) 1933 | 1934 | eslint-config-standard@17.1.0(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1): 1935 | dependencies: 1936 | eslint: 8.57.1 1937 | eslint-plugin-import: 2.31.0(eslint@8.57.1) 1938 | eslint-plugin-n: 15.7.0(eslint@8.57.1) 1939 | eslint-plugin-promise: 6.6.0(eslint@8.57.1) 1940 | 1941 | eslint-import-resolver-node@0.3.9: 1942 | dependencies: 1943 | debug: 3.2.7 1944 | is-core-module: 2.16.1 1945 | resolve: 1.22.10 1946 | transitivePeerDependencies: 1947 | - supports-color 1948 | 1949 | eslint-module-utils@2.12.0(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): 1950 | dependencies: 1951 | debug: 3.2.7 1952 | optionalDependencies: 1953 | eslint: 8.57.1 1954 | eslint-import-resolver-node: 0.3.9 1955 | transitivePeerDependencies: 1956 | - supports-color 1957 | 1958 | eslint-plugin-es@4.1.0(eslint@8.57.1): 1959 | dependencies: 1960 | eslint: 8.57.1 1961 | eslint-utils: 2.1.0 1962 | regexpp: 3.2.0 1963 | 1964 | eslint-plugin-import@2.31.0(eslint@8.57.1): 1965 | dependencies: 1966 | '@rtsao/scc': 1.1.0 1967 | array-includes: 3.1.8 1968 | array.prototype.findlastindex: 1.2.6 1969 | array.prototype.flat: 1.3.3 1970 | array.prototype.flatmap: 1.3.3 1971 | debug: 3.2.7 1972 | doctrine: 2.1.0 1973 | eslint: 8.57.1 1974 | eslint-import-resolver-node: 0.3.9 1975 | eslint-module-utils: 2.12.0(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) 1976 | hasown: 2.0.2 1977 | is-core-module: 2.16.1 1978 | is-glob: 4.0.3 1979 | minimatch: 3.1.2 1980 | object.fromentries: 2.0.8 1981 | object.groupby: 1.0.3 1982 | object.values: 1.2.1 1983 | semver: 6.3.1 1984 | string.prototype.trimend: 1.0.9 1985 | tsconfig-paths: 3.15.0 1986 | transitivePeerDependencies: 1987 | - eslint-import-resolver-typescript 1988 | - eslint-import-resolver-webpack 1989 | - supports-color 1990 | 1991 | eslint-plugin-n@15.7.0(eslint@8.57.1): 1992 | dependencies: 1993 | builtins: 5.1.0 1994 | eslint: 8.57.1 1995 | eslint-plugin-es: 4.1.0(eslint@8.57.1) 1996 | eslint-utils: 3.0.0(eslint@8.57.1) 1997 | ignore: 5.3.2 1998 | is-core-module: 2.16.1 1999 | minimatch: 3.1.2 2000 | resolve: 1.22.10 2001 | semver: 7.7.2 2002 | 2003 | eslint-plugin-promise@6.6.0(eslint@8.57.1): 2004 | dependencies: 2005 | eslint: 8.57.1 2006 | 2007 | eslint-plugin-react@7.37.5(eslint@8.57.1): 2008 | dependencies: 2009 | array-includes: 3.1.8 2010 | array.prototype.findlast: 1.2.5 2011 | array.prototype.flatmap: 1.3.3 2012 | array.prototype.tosorted: 1.1.4 2013 | doctrine: 2.1.0 2014 | es-iterator-helpers: 1.2.1 2015 | eslint: 8.57.1 2016 | estraverse: 5.3.0 2017 | hasown: 2.0.2 2018 | jsx-ast-utils: 3.3.5 2019 | minimatch: 3.1.2 2020 | object.entries: 1.1.9 2021 | object.fromentries: 2.0.8 2022 | object.values: 1.2.1 2023 | prop-types: 15.8.1 2024 | resolve: 2.0.0-next.5 2025 | semver: 6.3.1 2026 | string.prototype.matchall: 4.0.12 2027 | string.prototype.repeat: 1.0.0 2028 | 2029 | eslint-scope@7.2.2: 2030 | dependencies: 2031 | esrecurse: 4.3.0 2032 | estraverse: 5.3.0 2033 | 2034 | eslint-utils@2.1.0: 2035 | dependencies: 2036 | eslint-visitor-keys: 1.3.0 2037 | 2038 | eslint-utils@3.0.0(eslint@8.57.1): 2039 | dependencies: 2040 | eslint: 8.57.1 2041 | eslint-visitor-keys: 2.1.0 2042 | 2043 | eslint-visitor-keys@1.3.0: {} 2044 | 2045 | eslint-visitor-keys@2.1.0: {} 2046 | 2047 | eslint-visitor-keys@3.4.3: {} 2048 | 2049 | eslint@8.57.1: 2050 | dependencies: 2051 | '@eslint-community/eslint-utils': 4.7.0(eslint@8.57.1) 2052 | '@eslint-community/regexpp': 4.12.1 2053 | '@eslint/eslintrc': 2.1.4 2054 | '@eslint/js': 8.57.1 2055 | '@humanwhocodes/config-array': 0.13.0 2056 | '@humanwhocodes/module-importer': 1.0.1 2057 | '@nodelib/fs.walk': 1.2.8 2058 | '@ungap/structured-clone': 1.3.0 2059 | ajv: 6.12.6 2060 | chalk: 4.1.2 2061 | cross-spawn: 7.0.6 2062 | debug: 4.4.1 2063 | doctrine: 3.0.0 2064 | escape-string-regexp: 4.0.0 2065 | eslint-scope: 7.2.2 2066 | eslint-visitor-keys: 3.4.3 2067 | espree: 9.6.1 2068 | esquery: 1.6.0 2069 | esutils: 2.0.3 2070 | fast-deep-equal: 3.1.3 2071 | file-entry-cache: 6.0.1 2072 | find-up: 5.0.0 2073 | glob-parent: 6.0.2 2074 | globals: 13.24.0 2075 | graphemer: 1.4.0 2076 | ignore: 5.3.2 2077 | imurmurhash: 0.1.4 2078 | is-glob: 4.0.3 2079 | is-path-inside: 3.0.3 2080 | js-yaml: 4.1.0 2081 | json-stable-stringify-without-jsonify: 1.0.1 2082 | levn: 0.4.1 2083 | lodash.merge: 4.6.2 2084 | minimatch: 3.1.2 2085 | natural-compare: 1.4.0 2086 | optionator: 0.9.4 2087 | strip-ansi: 6.0.1 2088 | text-table: 0.2.0 2089 | transitivePeerDependencies: 2090 | - supports-color 2091 | 2092 | espree@9.6.1: 2093 | dependencies: 2094 | acorn: 8.14.1 2095 | acorn-jsx: 5.3.2(acorn@8.14.1) 2096 | eslint-visitor-keys: 3.4.3 2097 | 2098 | esquery@1.6.0: 2099 | dependencies: 2100 | estraverse: 5.3.0 2101 | 2102 | esrecurse@4.3.0: 2103 | dependencies: 2104 | estraverse: 5.3.0 2105 | 2106 | estraverse@5.3.0: {} 2107 | 2108 | esutils@2.0.3: {} 2109 | 2110 | etag@1.8.1: {} 2111 | 2112 | express@4.21.2: 2113 | dependencies: 2114 | accepts: 1.3.8 2115 | array-flatten: 1.1.1 2116 | body-parser: 1.20.3 2117 | content-disposition: 0.5.4 2118 | content-type: 1.0.5 2119 | cookie: 0.7.1 2120 | cookie-signature: 1.0.6 2121 | debug: 2.6.9 2122 | depd: 2.0.0 2123 | encodeurl: 2.0.0 2124 | escape-html: 1.0.3 2125 | etag: 1.8.1 2126 | finalhandler: 1.3.1 2127 | fresh: 0.5.2 2128 | http-errors: 2.0.0 2129 | merge-descriptors: 1.0.3 2130 | methods: 1.1.2 2131 | on-finished: 2.4.1 2132 | parseurl: 1.3.3 2133 | path-to-regexp: 0.1.12 2134 | proxy-addr: 2.0.7 2135 | qs: 6.13.0 2136 | range-parser: 1.2.1 2137 | safe-buffer: 5.2.1 2138 | send: 0.19.0 2139 | serve-static: 1.16.2 2140 | setprototypeof: 1.2.0 2141 | statuses: 2.0.1 2142 | type-is: 1.6.18 2143 | utils-merge: 1.0.1 2144 | vary: 1.1.2 2145 | transitivePeerDependencies: 2146 | - supports-color 2147 | 2148 | fast-deep-equal@3.1.3: {} 2149 | 2150 | fast-json-stable-stringify@2.1.0: {} 2151 | 2152 | fast-levenshtein@2.0.6: {} 2153 | 2154 | fastq@1.19.1: 2155 | dependencies: 2156 | reusify: 1.1.0 2157 | 2158 | file-entry-cache@6.0.1: 2159 | dependencies: 2160 | flat-cache: 3.2.0 2161 | 2162 | finalhandler@1.3.1: 2163 | dependencies: 2164 | debug: 2.6.9 2165 | encodeurl: 2.0.0 2166 | escape-html: 1.0.3 2167 | on-finished: 2.4.1 2168 | parseurl: 1.3.3 2169 | statuses: 2.0.1 2170 | unpipe: 1.0.0 2171 | transitivePeerDependencies: 2172 | - supports-color 2173 | 2174 | find-up@3.0.0: 2175 | dependencies: 2176 | locate-path: 3.0.0 2177 | 2178 | find-up@5.0.0: 2179 | dependencies: 2180 | locate-path: 6.0.0 2181 | path-exists: 4.0.0 2182 | 2183 | flat-cache@3.2.0: 2184 | dependencies: 2185 | flatted: 3.3.3 2186 | keyv: 4.5.4 2187 | rimraf: 3.0.2 2188 | 2189 | flatted@3.3.3: {} 2190 | 2191 | for-each@0.3.5: 2192 | dependencies: 2193 | is-callable: 1.2.7 2194 | 2195 | forwarded@0.2.0: {} 2196 | 2197 | fresh@0.5.2: {} 2198 | 2199 | fs.realpath@1.0.0: {} 2200 | 2201 | function-bind@1.1.2: {} 2202 | 2203 | function.prototype.name@1.1.8: 2204 | dependencies: 2205 | call-bind: 1.0.8 2206 | call-bound: 1.0.4 2207 | define-properties: 1.2.1 2208 | functions-have-names: 1.2.3 2209 | hasown: 2.0.2 2210 | is-callable: 1.2.7 2211 | 2212 | functions-have-names@1.2.3: {} 2213 | 2214 | gauge@1.2.7: 2215 | dependencies: 2216 | ansi: 0.3.1 2217 | has-unicode: 2.0.1 2218 | lodash.pad: 4.5.1 2219 | lodash.padend: 4.6.1 2220 | lodash.padstart: 4.6.1 2221 | 2222 | get-intrinsic@1.3.0: 2223 | dependencies: 2224 | call-bind-apply-helpers: 1.0.2 2225 | es-define-property: 1.0.1 2226 | es-errors: 1.3.0 2227 | es-object-atoms: 1.1.1 2228 | function-bind: 1.1.2 2229 | get-proto: 1.0.1 2230 | gopd: 1.2.0 2231 | has-symbols: 1.1.0 2232 | hasown: 2.0.2 2233 | math-intrinsics: 1.1.0 2234 | 2235 | get-proto@1.0.1: 2236 | dependencies: 2237 | dunder-proto: 1.0.1 2238 | es-object-atoms: 1.1.1 2239 | 2240 | get-stdin@8.0.0: {} 2241 | 2242 | get-symbol-description@1.1.0: 2243 | dependencies: 2244 | call-bound: 1.0.4 2245 | es-errors: 1.3.0 2246 | get-intrinsic: 1.3.0 2247 | 2248 | glob-parent@6.0.2: 2249 | dependencies: 2250 | is-glob: 4.0.3 2251 | 2252 | glob@7.2.3: 2253 | dependencies: 2254 | fs.realpath: 1.0.0 2255 | inflight: 1.0.6 2256 | inherits: 2.0.4 2257 | minimatch: 3.1.2 2258 | once: 1.4.0 2259 | path-is-absolute: 1.0.1 2260 | 2261 | globals@13.24.0: 2262 | dependencies: 2263 | type-fest: 0.20.2 2264 | 2265 | globalthis@1.0.4: 2266 | dependencies: 2267 | define-properties: 1.2.1 2268 | gopd: 1.2.0 2269 | 2270 | gopd@1.2.0: {} 2271 | 2272 | graceful-fs@4.2.11: {} 2273 | 2274 | graphemer@1.4.0: {} 2275 | 2276 | has-bigints@1.1.0: {} 2277 | 2278 | has-flag@4.0.0: {} 2279 | 2280 | has-property-descriptors@1.0.2: 2281 | dependencies: 2282 | es-define-property: 1.0.1 2283 | 2284 | has-proto@1.2.0: 2285 | dependencies: 2286 | dunder-proto: 1.0.1 2287 | 2288 | has-symbols@1.1.0: {} 2289 | 2290 | has-tostringtag@1.0.2: 2291 | dependencies: 2292 | has-symbols: 1.1.0 2293 | 2294 | has-unicode@2.0.1: {} 2295 | 2296 | hasown@2.0.2: 2297 | dependencies: 2298 | function-bind: 1.1.2 2299 | 2300 | http-errors@2.0.0: 2301 | dependencies: 2302 | depd: 2.0.0 2303 | inherits: 2.0.4 2304 | setprototypeof: 1.2.0 2305 | statuses: 2.0.1 2306 | toidentifier: 1.0.1 2307 | 2308 | iconv-lite@0.4.24: 2309 | dependencies: 2310 | safer-buffer: 2.1.2 2311 | 2312 | ignore@5.3.2: {} 2313 | 2314 | import-fresh@3.3.1: 2315 | dependencies: 2316 | parent-module: 1.0.1 2317 | resolve-from: 4.0.0 2318 | 2319 | imurmurhash@0.1.4: {} 2320 | 2321 | inflight@1.0.6: 2322 | dependencies: 2323 | once: 1.4.0 2324 | wrappy: 1.0.2 2325 | 2326 | inherits@2.0.4: {} 2327 | 2328 | ini@1.3.8: {} 2329 | 2330 | internal-slot@1.1.0: 2331 | dependencies: 2332 | es-errors: 1.3.0 2333 | hasown: 2.0.2 2334 | side-channel: 1.1.0 2335 | 2336 | ipaddr.js@1.9.1: {} 2337 | 2338 | is-array-buffer@3.0.5: 2339 | dependencies: 2340 | call-bind: 1.0.8 2341 | call-bound: 1.0.4 2342 | get-intrinsic: 1.3.0 2343 | 2344 | is-arrayish@0.2.1: {} 2345 | 2346 | is-async-function@2.1.1: 2347 | dependencies: 2348 | async-function: 1.0.0 2349 | call-bound: 1.0.4 2350 | get-proto: 1.0.1 2351 | has-tostringtag: 1.0.2 2352 | safe-regex-test: 1.1.0 2353 | 2354 | is-bigint@1.1.0: 2355 | dependencies: 2356 | has-bigints: 1.1.0 2357 | 2358 | is-boolean-object@1.2.2: 2359 | dependencies: 2360 | call-bound: 1.0.4 2361 | has-tostringtag: 1.0.2 2362 | 2363 | is-callable@1.2.7: {} 2364 | 2365 | is-core-module@2.16.1: 2366 | dependencies: 2367 | hasown: 2.0.2 2368 | 2369 | is-data-view@1.0.2: 2370 | dependencies: 2371 | call-bound: 1.0.4 2372 | get-intrinsic: 1.3.0 2373 | is-typed-array: 1.1.15 2374 | 2375 | is-date-object@1.1.0: 2376 | dependencies: 2377 | call-bound: 1.0.4 2378 | has-tostringtag: 1.0.2 2379 | 2380 | is-extglob@2.1.1: {} 2381 | 2382 | is-finalizationregistry@1.1.1: 2383 | dependencies: 2384 | call-bound: 1.0.4 2385 | 2386 | is-generator-function@1.1.0: 2387 | dependencies: 2388 | call-bound: 1.0.4 2389 | get-proto: 1.0.1 2390 | has-tostringtag: 1.0.2 2391 | safe-regex-test: 1.1.0 2392 | 2393 | is-glob@4.0.3: 2394 | dependencies: 2395 | is-extglob: 2.1.1 2396 | 2397 | is-map@2.0.3: {} 2398 | 2399 | is-number-object@1.1.1: 2400 | dependencies: 2401 | call-bound: 1.0.4 2402 | has-tostringtag: 1.0.2 2403 | 2404 | is-path-inside@3.0.3: {} 2405 | 2406 | is-regex@1.2.1: 2407 | dependencies: 2408 | call-bound: 1.0.4 2409 | gopd: 1.2.0 2410 | has-tostringtag: 1.0.2 2411 | hasown: 2.0.2 2412 | 2413 | is-set@2.0.3: {} 2414 | 2415 | is-shared-array-buffer@1.0.4: 2416 | dependencies: 2417 | call-bound: 1.0.4 2418 | 2419 | is-string@1.1.1: 2420 | dependencies: 2421 | call-bound: 1.0.4 2422 | has-tostringtag: 1.0.2 2423 | 2424 | is-symbol@1.1.1: 2425 | dependencies: 2426 | call-bound: 1.0.4 2427 | has-symbols: 1.1.0 2428 | safe-regex-test: 1.1.0 2429 | 2430 | is-typed-array@1.1.15: 2431 | dependencies: 2432 | which-typed-array: 1.1.19 2433 | 2434 | is-weakmap@2.0.2: {} 2435 | 2436 | is-weakref@1.1.1: 2437 | dependencies: 2438 | call-bound: 1.0.4 2439 | 2440 | is-weakset@2.0.4: 2441 | dependencies: 2442 | call-bound: 1.0.4 2443 | get-intrinsic: 1.3.0 2444 | 2445 | isarray@1.0.0: {} 2446 | 2447 | isarray@2.0.5: {} 2448 | 2449 | isexe@2.0.0: {} 2450 | 2451 | iterator.prototype@1.1.5: 2452 | dependencies: 2453 | define-data-property: 1.1.4 2454 | es-object-atoms: 1.1.1 2455 | get-intrinsic: 1.3.0 2456 | get-proto: 1.0.1 2457 | has-symbols: 1.1.0 2458 | set-function-name: 2.0.2 2459 | 2460 | js-tokens@4.0.0: {} 2461 | 2462 | js-yaml@4.1.0: 2463 | dependencies: 2464 | argparse: 2.0.1 2465 | 2466 | json-buffer@3.0.1: {} 2467 | 2468 | json-parse-better-errors@1.0.2: {} 2469 | 2470 | json-schema-traverse@0.4.1: {} 2471 | 2472 | json-stable-stringify-without-jsonify@1.0.1: {} 2473 | 2474 | json5@1.0.2: 2475 | dependencies: 2476 | minimist: 1.2.8 2477 | 2478 | jsx-ast-utils@3.3.5: 2479 | dependencies: 2480 | array-includes: 3.1.8 2481 | array.prototype.flat: 1.3.3 2482 | object.assign: 4.1.7 2483 | object.values: 1.2.1 2484 | 2485 | keyv@4.5.4: 2486 | dependencies: 2487 | json-buffer: 3.0.1 2488 | 2489 | levn@0.4.1: 2490 | dependencies: 2491 | prelude-ls: 1.2.1 2492 | type-check: 0.4.0 2493 | 2494 | load-json-file@5.3.0: 2495 | dependencies: 2496 | graceful-fs: 4.2.11 2497 | parse-json: 4.0.0 2498 | pify: 4.0.1 2499 | strip-bom: 3.0.0 2500 | type-fest: 0.3.1 2501 | 2502 | locate-path@3.0.0: 2503 | dependencies: 2504 | p-locate: 3.0.0 2505 | path-exists: 3.0.0 2506 | 2507 | locate-path@6.0.0: 2508 | dependencies: 2509 | p-locate: 5.0.0 2510 | 2511 | lodash.merge@4.6.2: {} 2512 | 2513 | lodash.pad@4.5.1: {} 2514 | 2515 | lodash.padend@4.6.1: {} 2516 | 2517 | lodash.padstart@4.6.1: {} 2518 | 2519 | lodash@3.10.1: {} 2520 | 2521 | lodash@4.17.21: {} 2522 | 2523 | loose-envify@1.4.0: 2524 | dependencies: 2525 | js-tokens: 4.0.0 2526 | 2527 | math-intrinsics@1.1.0: {} 2528 | 2529 | media-typer@0.3.0: {} 2530 | 2531 | memory-pager@1.5.0: 2532 | optional: true 2533 | 2534 | merge-descriptors@1.0.3: {} 2535 | 2536 | methods@1.1.2: {} 2537 | 2538 | mime-db@1.52.0: {} 2539 | 2540 | mime-types@2.1.35: 2541 | dependencies: 2542 | mime-db: 1.52.0 2543 | 2544 | mime@1.6.0: {} 2545 | 2546 | minimatch@3.1.2: 2547 | dependencies: 2548 | brace-expansion: 1.1.11 2549 | 2550 | minimist@1.2.8: {} 2551 | 2552 | mongodb@3.7.4: 2553 | dependencies: 2554 | bl: 2.2.1 2555 | bson: 1.1.6 2556 | denque: 1.5.1 2557 | optional-require: 1.1.8 2558 | safe-buffer: 5.2.1 2559 | optionalDependencies: 2560 | saslprep: 1.0.3 2561 | 2562 | ms@2.0.0: {} 2563 | 2564 | ms@2.1.3: {} 2565 | 2566 | natural-compare@1.4.0: {} 2567 | 2568 | negotiator@0.6.3: {} 2569 | 2570 | nopt@3.0.6: 2571 | dependencies: 2572 | abbrev: 1.1.1 2573 | 2574 | npm@2.15.12: {} 2575 | 2576 | npmlog@1.2.1: 2577 | dependencies: 2578 | ansi: 0.3.1 2579 | are-we-there-yet: 1.0.6 2580 | gauge: 1.2.7 2581 | 2582 | object-assign@4.1.1: {} 2583 | 2584 | object-inspect@1.13.4: {} 2585 | 2586 | object-keys@1.1.1: {} 2587 | 2588 | object.assign@4.1.7: 2589 | dependencies: 2590 | call-bind: 1.0.8 2591 | call-bound: 1.0.4 2592 | define-properties: 1.2.1 2593 | es-object-atoms: 1.1.1 2594 | has-symbols: 1.1.0 2595 | object-keys: 1.1.1 2596 | 2597 | object.entries@1.1.9: 2598 | dependencies: 2599 | call-bind: 1.0.8 2600 | call-bound: 1.0.4 2601 | define-properties: 1.2.1 2602 | es-object-atoms: 1.1.1 2603 | 2604 | object.fromentries@2.0.8: 2605 | dependencies: 2606 | call-bind: 1.0.8 2607 | define-properties: 1.2.1 2608 | es-abstract: 1.23.10 2609 | es-object-atoms: 1.1.1 2610 | 2611 | object.groupby@1.0.3: 2612 | dependencies: 2613 | call-bind: 1.0.8 2614 | define-properties: 1.2.1 2615 | es-abstract: 1.23.10 2616 | 2617 | object.values@1.2.1: 2618 | dependencies: 2619 | call-bind: 1.0.8 2620 | call-bound: 1.0.4 2621 | define-properties: 1.2.1 2622 | es-object-atoms: 1.1.1 2623 | 2624 | on-finished@2.4.1: 2625 | dependencies: 2626 | ee-first: 1.1.1 2627 | 2628 | once@1.4.0: 2629 | dependencies: 2630 | wrappy: 1.0.2 2631 | 2632 | optional-require@1.1.8: 2633 | dependencies: 2634 | require-at: 1.0.6 2635 | 2636 | optionator@0.9.4: 2637 | dependencies: 2638 | deep-is: 0.1.4 2639 | fast-levenshtein: 2.0.6 2640 | levn: 0.4.1 2641 | prelude-ls: 1.2.1 2642 | type-check: 0.4.0 2643 | word-wrap: 1.2.5 2644 | 2645 | own-keys@1.0.1: 2646 | dependencies: 2647 | get-intrinsic: 1.3.0 2648 | object-keys: 1.1.1 2649 | safe-push-apply: 1.0.0 2650 | 2651 | p-limit@2.3.0: 2652 | dependencies: 2653 | p-try: 2.2.0 2654 | 2655 | p-limit@3.1.0: 2656 | dependencies: 2657 | yocto-queue: 0.1.0 2658 | 2659 | p-locate@3.0.0: 2660 | dependencies: 2661 | p-limit: 2.3.0 2662 | 2663 | p-locate@5.0.0: 2664 | dependencies: 2665 | p-limit: 3.1.0 2666 | 2667 | p-try@2.2.0: {} 2668 | 2669 | parent-module@1.0.1: 2670 | dependencies: 2671 | callsites: 3.1.0 2672 | 2673 | parse-json@4.0.0: 2674 | dependencies: 2675 | error-ex: 1.3.2 2676 | json-parse-better-errors: 1.0.2 2677 | 2678 | parseurl@1.3.3: {} 2679 | 2680 | path-exists@3.0.0: {} 2681 | 2682 | path-exists@4.0.0: {} 2683 | 2684 | path-is-absolute@1.0.1: {} 2685 | 2686 | path-key@3.1.1: {} 2687 | 2688 | path-parse@1.0.7: {} 2689 | 2690 | path-to-regexp@0.1.12: {} 2691 | 2692 | pify@4.0.1: {} 2693 | 2694 | pkg-conf@3.1.0: 2695 | dependencies: 2696 | find-up: 3.0.0 2697 | load-json-file: 5.3.0 2698 | 2699 | possible-typed-array-names@1.1.0: {} 2700 | 2701 | prelude-ls@1.2.1: {} 2702 | 2703 | process-nextick-args@2.0.1: {} 2704 | 2705 | prop-types@15.8.1: 2706 | dependencies: 2707 | loose-envify: 1.4.0 2708 | object-assign: 4.1.1 2709 | react-is: 16.13.1 2710 | 2711 | proxy-addr@2.0.7: 2712 | dependencies: 2713 | forwarded: 0.2.0 2714 | ipaddr.js: 1.9.1 2715 | 2716 | publish@0.6.0: 2717 | dependencies: 2718 | nopt: 3.0.6 2719 | npm: 2.15.12 2720 | npmlog: 1.2.1 2721 | semver: 4.3.6 2722 | 2723 | punycode@2.3.1: {} 2724 | 2725 | q-json-response@0.1.3: 2726 | dependencies: 2727 | lodash: 3.10.1 2728 | q: 1.5.1 2729 | 2730 | q@1.5.1: {} 2731 | 2732 | qs@6.13.0: 2733 | dependencies: 2734 | side-channel: 1.1.0 2735 | 2736 | queue-microtask@1.2.3: {} 2737 | 2738 | range-parser@1.2.1: {} 2739 | 2740 | raw-body@2.5.2: 2741 | dependencies: 2742 | bytes: 3.1.2 2743 | http-errors: 2.0.0 2744 | iconv-lite: 0.4.24 2745 | unpipe: 1.0.0 2746 | 2747 | react-is@16.13.1: {} 2748 | 2749 | readable-stream@2.3.8: 2750 | dependencies: 2751 | core-util-is: 1.0.3 2752 | inherits: 2.0.4 2753 | isarray: 1.0.0 2754 | process-nextick-args: 2.0.1 2755 | safe-buffer: 5.1.2 2756 | string_decoder: 1.1.1 2757 | util-deprecate: 1.0.2 2758 | 2759 | redis-commands@1.7.0: {} 2760 | 2761 | redis-errors@1.2.0: {} 2762 | 2763 | redis-parser@3.0.0: 2764 | dependencies: 2765 | redis-errors: 1.2.0 2766 | 2767 | redis@3.1.2: 2768 | dependencies: 2769 | denque: 1.5.1 2770 | redis-commands: 1.7.0 2771 | redis-errors: 1.2.0 2772 | redis-parser: 3.0.0 2773 | 2774 | reflect.getprototypeof@1.0.10: 2775 | dependencies: 2776 | call-bind: 1.0.8 2777 | define-properties: 1.2.1 2778 | es-abstract: 1.23.10 2779 | es-errors: 1.3.0 2780 | es-object-atoms: 1.1.1 2781 | get-intrinsic: 1.3.0 2782 | get-proto: 1.0.1 2783 | which-builtin-type: 1.2.1 2784 | 2785 | regexp.prototype.flags@1.5.4: 2786 | dependencies: 2787 | call-bind: 1.0.8 2788 | define-properties: 1.2.1 2789 | es-errors: 1.3.0 2790 | get-proto: 1.0.1 2791 | gopd: 1.2.0 2792 | set-function-name: 2.0.2 2793 | 2794 | regexpp@3.2.0: {} 2795 | 2796 | require-at@1.0.6: {} 2797 | 2798 | resolve-from@4.0.0: {} 2799 | 2800 | resolve@1.22.10: 2801 | dependencies: 2802 | is-core-module: 2.16.1 2803 | path-parse: 1.0.7 2804 | supports-preserve-symlinks-flag: 1.0.0 2805 | 2806 | resolve@2.0.0-next.5: 2807 | dependencies: 2808 | is-core-module: 2.16.1 2809 | path-parse: 1.0.7 2810 | supports-preserve-symlinks-flag: 1.0.0 2811 | 2812 | reusify@1.1.0: {} 2813 | 2814 | rimraf@3.0.2: 2815 | dependencies: 2816 | glob: 7.2.3 2817 | 2818 | run-parallel@1.2.0: 2819 | dependencies: 2820 | queue-microtask: 1.2.3 2821 | 2822 | safe-array-concat@1.1.3: 2823 | dependencies: 2824 | call-bind: 1.0.8 2825 | call-bound: 1.0.4 2826 | get-intrinsic: 1.3.0 2827 | has-symbols: 1.1.0 2828 | isarray: 2.0.5 2829 | 2830 | safe-buffer@5.1.2: {} 2831 | 2832 | safe-buffer@5.2.1: {} 2833 | 2834 | safe-push-apply@1.0.0: 2835 | dependencies: 2836 | es-errors: 1.3.0 2837 | isarray: 2.0.5 2838 | 2839 | safe-regex-test@1.1.0: 2840 | dependencies: 2841 | call-bound: 1.0.4 2842 | es-errors: 1.3.0 2843 | is-regex: 1.2.1 2844 | 2845 | safer-buffer@2.1.2: {} 2846 | 2847 | saslprep@1.0.3: 2848 | dependencies: 2849 | sparse-bitfield: 3.0.3 2850 | optional: true 2851 | 2852 | semver@4.3.6: {} 2853 | 2854 | semver@6.3.1: {} 2855 | 2856 | semver@7.7.2: {} 2857 | 2858 | send@0.19.0: 2859 | dependencies: 2860 | debug: 2.6.9 2861 | depd: 2.0.0 2862 | destroy: 1.2.0 2863 | encodeurl: 1.0.2 2864 | escape-html: 1.0.3 2865 | etag: 1.8.1 2866 | fresh: 0.5.2 2867 | http-errors: 2.0.0 2868 | mime: 1.6.0 2869 | ms: 2.1.3 2870 | on-finished: 2.4.1 2871 | range-parser: 1.2.1 2872 | statuses: 2.0.1 2873 | transitivePeerDependencies: 2874 | - supports-color 2875 | 2876 | serve-static@1.16.2: 2877 | dependencies: 2878 | encodeurl: 2.0.0 2879 | escape-html: 1.0.3 2880 | parseurl: 1.3.3 2881 | send: 0.19.0 2882 | transitivePeerDependencies: 2883 | - supports-color 2884 | 2885 | set-function-length@1.2.2: 2886 | dependencies: 2887 | define-data-property: 1.1.4 2888 | es-errors: 1.3.0 2889 | function-bind: 1.1.2 2890 | get-intrinsic: 1.3.0 2891 | gopd: 1.2.0 2892 | has-property-descriptors: 1.0.2 2893 | 2894 | set-function-name@2.0.2: 2895 | dependencies: 2896 | define-data-property: 1.1.4 2897 | es-errors: 1.3.0 2898 | functions-have-names: 1.2.3 2899 | has-property-descriptors: 1.0.2 2900 | 2901 | set-proto@1.0.0: 2902 | dependencies: 2903 | dunder-proto: 1.0.1 2904 | es-errors: 1.3.0 2905 | es-object-atoms: 1.1.1 2906 | 2907 | setprototypeof@1.2.0: {} 2908 | 2909 | shebang-command@2.0.0: 2910 | dependencies: 2911 | shebang-regex: 3.0.0 2912 | 2913 | shebang-regex@3.0.0: {} 2914 | 2915 | side-channel-list@1.0.0: 2916 | dependencies: 2917 | es-errors: 1.3.0 2918 | object-inspect: 1.13.4 2919 | 2920 | side-channel-map@1.0.1: 2921 | dependencies: 2922 | call-bound: 1.0.4 2923 | es-errors: 1.3.0 2924 | get-intrinsic: 1.3.0 2925 | object-inspect: 1.13.4 2926 | 2927 | side-channel-weakmap@1.0.2: 2928 | dependencies: 2929 | call-bound: 1.0.4 2930 | es-errors: 1.3.0 2931 | get-intrinsic: 1.3.0 2932 | object-inspect: 1.13.4 2933 | side-channel-map: 1.0.1 2934 | 2935 | side-channel@1.1.0: 2936 | dependencies: 2937 | es-errors: 1.3.0 2938 | object-inspect: 1.13.4 2939 | side-channel-list: 1.0.0 2940 | side-channel-map: 1.0.1 2941 | side-channel-weakmap: 1.0.2 2942 | 2943 | sparse-bitfield@3.0.3: 2944 | dependencies: 2945 | memory-pager: 1.5.0 2946 | optional: true 2947 | 2948 | standard-engine@15.1.0: 2949 | dependencies: 2950 | get-stdin: 8.0.0 2951 | minimist: 1.2.8 2952 | pkg-conf: 3.1.0 2953 | xdg-basedir: 4.0.0 2954 | 2955 | standard@17.1.2: 2956 | dependencies: 2957 | eslint: 8.57.1 2958 | eslint-config-standard: 17.1.0(eslint-plugin-import@2.31.0(eslint@8.57.1))(eslint-plugin-n@15.7.0(eslint@8.57.1))(eslint-plugin-promise@6.6.0(eslint@8.57.1))(eslint@8.57.1) 2959 | eslint-config-standard-jsx: 11.0.0(eslint-plugin-react@7.37.5(eslint@8.57.1))(eslint@8.57.1) 2960 | eslint-plugin-import: 2.31.0(eslint@8.57.1) 2961 | eslint-plugin-n: 15.7.0(eslint@8.57.1) 2962 | eslint-plugin-promise: 6.6.0(eslint@8.57.1) 2963 | eslint-plugin-react: 7.37.5(eslint@8.57.1) 2964 | standard-engine: 15.1.0 2965 | version-guard: 1.1.3 2966 | transitivePeerDependencies: 2967 | - '@typescript-eslint/parser' 2968 | - eslint-import-resolver-typescript 2969 | - eslint-import-resolver-webpack 2970 | - supports-color 2971 | 2972 | statuses@2.0.1: {} 2973 | 2974 | string.prototype.matchall@4.0.12: 2975 | dependencies: 2976 | call-bind: 1.0.8 2977 | call-bound: 1.0.4 2978 | define-properties: 1.2.1 2979 | es-abstract: 1.23.10 2980 | es-errors: 1.3.0 2981 | es-object-atoms: 1.1.1 2982 | get-intrinsic: 1.3.0 2983 | gopd: 1.2.0 2984 | has-symbols: 1.1.0 2985 | internal-slot: 1.1.0 2986 | regexp.prototype.flags: 1.5.4 2987 | set-function-name: 2.0.2 2988 | side-channel: 1.1.0 2989 | 2990 | string.prototype.repeat@1.0.0: 2991 | dependencies: 2992 | define-properties: 1.2.1 2993 | es-abstract: 1.23.10 2994 | 2995 | string.prototype.trim@1.2.10: 2996 | dependencies: 2997 | call-bind: 1.0.8 2998 | call-bound: 1.0.4 2999 | define-data-property: 1.1.4 3000 | define-properties: 1.2.1 3001 | es-abstract: 1.23.10 3002 | es-object-atoms: 1.1.1 3003 | has-property-descriptors: 1.0.2 3004 | 3005 | string.prototype.trimend@1.0.9: 3006 | dependencies: 3007 | call-bind: 1.0.8 3008 | call-bound: 1.0.4 3009 | define-properties: 1.2.1 3010 | es-object-atoms: 1.1.1 3011 | 3012 | string.prototype.trimstart@1.0.8: 3013 | dependencies: 3014 | call-bind: 1.0.8 3015 | define-properties: 1.2.1 3016 | es-object-atoms: 1.1.1 3017 | 3018 | string_decoder@1.1.1: 3019 | dependencies: 3020 | safe-buffer: 5.1.2 3021 | 3022 | strip-ansi@6.0.1: 3023 | dependencies: 3024 | ansi-regex: 5.0.1 3025 | 3026 | strip-bom@3.0.0: {} 3027 | 3028 | strip-json-comments@3.1.1: {} 3029 | 3030 | supports-color@7.2.0: 3031 | dependencies: 3032 | has-flag: 4.0.0 3033 | 3034 | supports-preserve-symlinks-flag@1.0.0: {} 3035 | 3036 | text-table@0.2.0: {} 3037 | 3038 | toidentifier@1.0.1: {} 3039 | 3040 | tsconfig-paths@3.15.0: 3041 | dependencies: 3042 | '@types/json5': 0.0.29 3043 | json5: 1.0.2 3044 | minimist: 1.2.8 3045 | strip-bom: 3.0.0 3046 | 3047 | type-check@0.4.0: 3048 | dependencies: 3049 | prelude-ls: 1.2.1 3050 | 3051 | type-fest@0.20.2: {} 3052 | 3053 | type-fest@0.3.1: {} 3054 | 3055 | type-is@1.6.18: 3056 | dependencies: 3057 | media-typer: 0.3.0 3058 | mime-types: 2.1.35 3059 | 3060 | typed-array-buffer@1.0.3: 3061 | dependencies: 3062 | call-bound: 1.0.4 3063 | es-errors: 1.3.0 3064 | is-typed-array: 1.1.15 3065 | 3066 | typed-array-byte-length@1.0.3: 3067 | dependencies: 3068 | call-bind: 1.0.8 3069 | for-each: 0.3.5 3070 | gopd: 1.2.0 3071 | has-proto: 1.2.0 3072 | is-typed-array: 1.1.15 3073 | 3074 | typed-array-byte-offset@1.0.4: 3075 | dependencies: 3076 | available-typed-arrays: 1.0.7 3077 | call-bind: 1.0.8 3078 | for-each: 0.3.5 3079 | gopd: 1.2.0 3080 | has-proto: 1.2.0 3081 | is-typed-array: 1.1.15 3082 | reflect.getprototypeof: 1.0.10 3083 | 3084 | typed-array-length@1.0.7: 3085 | dependencies: 3086 | call-bind: 1.0.8 3087 | for-each: 0.3.5 3088 | gopd: 1.2.0 3089 | is-typed-array: 1.1.15 3090 | possible-typed-array-names: 1.1.0 3091 | reflect.getprototypeof: 1.0.10 3092 | 3093 | unbox-primitive@1.1.0: 3094 | dependencies: 3095 | call-bound: 1.0.4 3096 | has-bigints: 1.1.0 3097 | has-symbols: 1.1.0 3098 | which-boxed-primitive: 1.1.1 3099 | 3100 | unpipe@1.0.0: {} 3101 | 3102 | uri-js@4.4.1: 3103 | dependencies: 3104 | punycode: 2.3.1 3105 | 3106 | util-deprecate@1.0.2: {} 3107 | 3108 | utils-merge@1.0.1: {} 3109 | 3110 | vary@1.1.2: {} 3111 | 3112 | version-guard@1.1.3: {} 3113 | 3114 | which-boxed-primitive@1.1.1: 3115 | dependencies: 3116 | is-bigint: 1.1.0 3117 | is-boolean-object: 1.2.2 3118 | is-number-object: 1.1.1 3119 | is-string: 1.1.1 3120 | is-symbol: 1.1.1 3121 | 3122 | which-builtin-type@1.2.1: 3123 | dependencies: 3124 | call-bound: 1.0.4 3125 | function.prototype.name: 1.1.8 3126 | has-tostringtag: 1.0.2 3127 | is-async-function: 2.1.1 3128 | is-date-object: 1.1.0 3129 | is-finalizationregistry: 1.1.1 3130 | is-generator-function: 1.1.0 3131 | is-regex: 1.2.1 3132 | is-weakref: 1.1.1 3133 | isarray: 2.0.5 3134 | which-boxed-primitive: 1.1.1 3135 | which-collection: 1.0.2 3136 | which-typed-array: 1.1.19 3137 | 3138 | which-collection@1.0.2: 3139 | dependencies: 3140 | is-map: 2.0.3 3141 | is-set: 2.0.3 3142 | is-weakmap: 2.0.2 3143 | is-weakset: 2.0.4 3144 | 3145 | which-typed-array@1.1.19: 3146 | dependencies: 3147 | available-typed-arrays: 1.0.7 3148 | call-bind: 1.0.8 3149 | call-bound: 1.0.4 3150 | for-each: 0.3.5 3151 | get-proto: 1.0.1 3152 | gopd: 1.2.0 3153 | has-tostringtag: 1.0.2 3154 | 3155 | which@2.0.2: 3156 | dependencies: 3157 | isexe: 2.0.0 3158 | 3159 | word-wrap@1.2.5: {} 3160 | 3161 | wrappy@1.0.2: {} 3162 | 3163 | xdg-basedir@4.0.0: {} 3164 | 3165 | yocto-queue@0.1.0: {} 3166 | --------------------------------------------------------------------------------