├── .gitignore ├── .prettierignore ├── LICENSE.md ├── README.md ├── bin └── test.ts ├── commands ├── inspire_command.ts ├── scheduler_command.ts └── scheduler_list_command.ts ├── configure.ts ├── example.png ├── index.ts ├── package.json ├── pnpm-lock.yaml ├── providers └── scheduler_provider.ts ├── services └── main.ts ├── src ├── decorator.ts ├── scheduler.ts ├── utils.ts └── worker.ts ├── stubs ├── main.ts └── start │ └── scheduler.stub ├── tests └── expression.spec.ts └── tsconfig.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | coverage 3 | test/__app 4 | .DS_STORE 5 | .nyc_output 6 | .idea 7 | .vscode/ 8 | *.sublime-project 9 | *.sublime-workspace 10 | *.log 11 | build 12 | dist 13 | shrinkwrap.yaml -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | build 2 | README.md 3 | docs 4 | *.md 5 | *.html 6 | config.json 7 | .eslintrc.json 8 | package.json 9 | *.txt -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # The MIT License 2 | 3 | Copyright 2022 Georges KABBOUCHI, contributors 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |
2 |

AdonisJS Scheduler

3 | 4 |

Task scheduler for AdonisJS v6

5 | 6 |

7 | 8 | npm 9 | 10 | 11 | License: MIT 12 | 13 | Typescript 14 |

15 |
16 | 17 |

18 | Scheduler code example 19 |

20 | 21 | 24 | 25 | ## Installation 26 | 27 | Install the package from npm using the following command: 28 | 29 | ```bash 30 | node ace add adonisjs-scheduler 31 | ``` 32 | 33 | ## Running The Scheduler 34 | 35 | ```sh 36 | node ace scheduler:run 37 | # or 38 | node ace scheduler:work 39 | 40 | # automatically restart the scheduler when files are modified during development mode 41 | node ace scheduler:run --watch 42 | ``` 43 | 44 | ## Defining Schedules 45 | 46 | ```ts 47 | // start/scheduler.ts 48 | 49 | import scheduler from 'adonisjs-scheduler/services/main' 50 | 51 | import PurgeUsers from '../commands/purge_users' 52 | 53 | scheduler.command('inspire').everyFiveSeconds() 54 | scheduler.command(PurgeUsers, ['30 days']).everyFiveSeconds().withoutOverlapping() 55 | 56 | scheduler.withoutOverlapping( 57 | () => { 58 | scheduler.command('inspire').everySecond() 59 | scheduler.command(PurgeUsers, ['30 days']).everyFiveSeconds() 60 | }, 61 | { expiresAt: 30_000 } 62 | ) 63 | 64 | scheduler 65 | .call(() => { 66 | console.log('Pruge DB!') 67 | }) 68 | .weekly() 69 | ``` 70 | 71 | or define schedule directly on command 72 | 73 | ```ts 74 | import { BaseCommand, args } from '@adonisjs/core/ace' 75 | import { schedule } from 'adonisjs-scheduler' 76 | 77 | @schedule("* * * * *", ["30 days"]) 78 | @schedule((s) => s.everyFiveSeconds().immediate(), ["7 days"]) 79 | @schedule((s) => s.everyMinute(), ["42 days"]) 80 | export default class PurgeUsers extends BaseCommand { 81 | static commandName = 'purge:users' 82 | static description = '' 83 | 84 | static options: CommandOptions = {} 85 | 86 | @args.string() 87 | declare olderThan: string 88 | 89 | async run() { 90 | // 91 | } 92 | } 93 | ``` 94 | 95 | 96 | ## Schedule Frequency Options 97 | 98 | | Method | Description | 99 | | -------------------------------- | ------------------------------------------------------- | 100 | | `.cron('* * * * *');` | Run the task on a custom cron schedule | 101 | | `.everyMinute();` | Run the task every minute | 102 | | `.everyTwoMinutes();` | Run the task every two minutes | 103 | | `.everyThreeMinutes();` | Run the task every three minutes | 104 | | `.everyFourMinutes();` | Run the task every four minutes | 105 | | `.everyFiveMinutes();` | Run the task every five minutes | 106 | | `.everyTenMinutes();` | Run the task every ten minutes | 107 | | `.everyFifteenMinutes();` | Run the task every fifteen minutes | 108 | | `.everyThirtyMinutes();` | Run the task every thirty minutes | 109 | | `.hourly();` | Run the task every hour | 110 | | `.hourlyAt(17);` | Run the task every hour at 17 minutes past the hour. | 111 | | `.everyTwoHours();` | Run the task every two hours | 112 | | `.everyThreeHours();` | Run the task every three hours | 113 | | `.everyFourHours();` | Run the task every four hours | 114 | | `.everyFiveHours();` | Run the task every five hours | 115 | | `.everySixHours();` | Run the task every six hours | 116 | | `.daily();` | Run the task every day at midnight | 117 | | `.dailyAt('13:00');` | Run the task every day at 13:00. | 118 | | `.twiceDaily(1, 13);` | Run the task daily at 1:00 & 13:00. | 119 | | `.twiceDailyAt(1, 13, 15);` | Run the task daily at 1:15 & 13:15. | 120 | | `.weekly();` | Run the task every Sunday at 00:00 | 121 | | `.weeklyOn(1, '8:00');` | Run the task every week on Monday at 8:00. | 122 | | `.monthly();` | Run the task on the first day of every month at 00:00 | 123 | | `.monthlyOn(4, '15:00');` | Run the task every month on the 4th at 15:00. | 124 | | `.twiceMonthly(1, 16, '13:00');` | Run the task monthly on the 1st and 16th at 13:00. | 125 | | `.lastDayOfMonth('15:00');` | Run the task on the last day of the month at 15:00. | 126 | | `.quarterly();` | Run the task on the first day of every quarter at 00:00.| 127 | | `.quarterlyOn(4, '14:00');` | Run the task every quarter on the 4th at 14:00. | 128 | | `.yearly();` | Run the task on the first day of every year at 00:00. | 129 | | `.yearlyOn(6, 1, '17:00');` | Run the task every year on June 1st at 17:00. | 130 | | `.timezone('America/New_York');` | Set the timezone for the task. | 131 | | `.immediate();` | Run the task on startup | 132 | | `.withoutOverlapping();` | Run the task without overlapping | 133 | 134 | 135 | ## Alternative Ways to Run the Scheduler 136 | 137 | Besides using `node ace scheduler:run`, you can also manually initialize and control the scheduler worker in your code: 138 | 139 | ```ts 140 | import { Worker } from 'adonisjs-scheduler' 141 | import app from '@adonisjs/core/services/app' 142 | 143 | const worker = new Worker(app) 144 | 145 | app.terminating(async () => { 146 | await worker.stop() 147 | }) 148 | 149 | await worker.start() 150 | ``` 151 | 152 | 153 | Note: make sure to modify `adonisrc.ts` and include the environment where the worker is running. 154 | 155 | ```ts 156 | import { defineConfig } from '@adonisjs/core/app' 157 | 158 | export default defineConfig({ 159 | providers: [ 160 | { 161 | file: () => import('adonisjs-scheduler/scheduler_provider'), 162 | environment: ['console', 'web'], // <--- 163 | }, 164 | 165 | // or enable for all environments 166 | () => import('adonisjs-scheduler/scheduler_provider'), 167 | }) 168 | ``` 169 | -------------------------------------------------------------------------------- /bin/test.ts: -------------------------------------------------------------------------------- 1 | import { assert } from '@japa/assert' 2 | import { configure, processCLIArgs, run } from '@japa/runner' 3 | 4 | processCLIArgs(process.argv.slice(2)) 5 | 6 | configure({ 7 | files: ['tests/**/*.spec.ts'], 8 | plugins: [assert()], 9 | }) 10 | 11 | run() 12 | -------------------------------------------------------------------------------- /commands/inspire_command.ts: -------------------------------------------------------------------------------- 1 | import { BaseCommand } from '@adonisjs/core/ace' 2 | import { CommandOptions } from '@adonisjs/core/types/ace' 3 | 4 | const quotes = [ 5 | 'Act only according to that maxim whereby you can, at the same time, will that it should become a universal law. - Immanuel Kant', 6 | 'An unexamined life is not worth living. - Socrates', 7 | 'Be present above all else. - Naval Ravikant', 8 | 'Do what you can, with what you have, where you are. - Theodore Roosevelt', 9 | 'Happiness is not something readymade. It comes from your own actions. - Dalai Lama', 10 | 'He who is contented is rich. - Laozi', 11 | 'I begin to speak only when I am certain what I will say is not better left unsaid. - Cato the Younger', 12 | 'I have not failed. I\'ve just found 10,000 ways that won\'t work. - Thomas Edison', 13 | 'If you do not have a consistent goal in life, you can not live it in a consistent way. - Marcus Aurelius', 14 | 'It is never too late to be what you might have been. - George Eliot', 15 | 'It is not the man who has too little, but the man who craves more, that is poor. - Seneca', 16 | 'It is quality rather than quantity that matters. - Lucius Annaeus Seneca', 17 | 'Knowing is not enough; we must apply. Being willing is not enough; we must do. - Leonardo da Vinci', 18 | 'Let all your things have their places; let each part of your business have its time. - Benjamin Franklin', 19 | 'Live as if you were to die tomorrow. Learn as if you were to live forever. - Mahatma Gandhi', 20 | 'No surplus words or unnecessary actions. - Marcus Aurelius', 21 | 'Nothing worth having comes easy. - Theodore Roosevelt', 22 | 'Order your soul. Reduce your wants. - Augustine', 23 | 'People find pleasure in different ways. I find it in keeping my mind clear. - Marcus Aurelius', 24 | 'Simplicity is an acquired taste. - Katharine Gerould', 25 | 'Simplicity is the consequence of refined emotions. - Jean D\'Alembert', 26 | 'Simplicity is the essence of happiness. - Cedric Bledsoe', 27 | 'Simplicity is the ultimate sophistication. - Leonardo da Vinci', 28 | 'Smile, breathe, and go slowly. - Thich Nhat Hanh', 29 | 'The only way to do great work is to love what you do. - Steve Jobs', 30 | 'The whole future lies in uncertainty: live immediately. - Seneca', 31 | 'Very little is needed to make a happy life. - Marcus Aurelius', 32 | 'Waste no more time arguing what a good man should be, be one. - Marcus Aurelius', 33 | 'Well begun is half done. - Aristotle', 34 | 'When there is no desire, all things are at peace. - Laozi', 35 | 'Walk as if you are kissing the Earth with your feet. - Thich Nhat Hanh', 36 | 'Because you are alive, everything is possible. - Thich Nhat Hanh', 37 | 'Breathing in, I calm body and mind. Breathing out, I smile. - Thich Nhat Hanh', 38 | 'Life is available only in the present moment. - Thich Nhat Hanh', 39 | 'The best way to take care of the future is to take care of the present moment. - Thich Nhat Hanh', 40 | 'Nothing in life is to be feared, it is only to be understood. Now is the time to understand more, so that we may fear less. - Marie Curie', 41 | 'The biggest battle is the war against ignorance. - Mustafa Kemal Atatürk', 42 | 'Always remember that you are absolutely unique. Just like everyone else. - Margaret Mead', 43 | 'You must be the change you wish to see in the world. - Mahatma Gandhi', 44 | ]; 45 | 46 | export default class InspireCommand extends BaseCommand { 47 | static commandName = 'inspire' 48 | static description = '' 49 | 50 | static options: CommandOptions = { 51 | startApp: true 52 | } 53 | 54 | public async run() { 55 | this.logger.info(quotes[Math.floor(Math.random() * quotes.length)]); 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /commands/scheduler_command.ts: -------------------------------------------------------------------------------- 1 | import { BaseCommand, flags } from '@adonisjs/core/ace' 2 | import { CommandOptions } from '@adonisjs/core/types/ace' 3 | import { ChildProcess, spawn } from 'child_process' 4 | import chokidar from 'chokidar' 5 | import { Worker } from '../src/worker.js' 6 | 7 | export default class SchedulerCommand extends BaseCommand { 8 | static commandName = 'scheduler:run' 9 | static description = '' 10 | static aliases: string[] = ['scheduler:work', 'schedule:work', 'schedule:run'] 11 | 12 | static options: CommandOptions = { 13 | startApp: true, 14 | staysAlive: true, 15 | } 16 | 17 | @flags.boolean({ description: 'Restart the scheduler on file changes' }) 18 | declare watch: boolean 19 | 20 | declare worker: Worker 21 | 22 | prepare() { 23 | this.app.terminating(async () => { 24 | if (this.worker) await this.worker.stop() 25 | }) 26 | } 27 | 28 | public async run() { 29 | if (this.watch) { 30 | return await this.runAndWatch() 31 | } 32 | 33 | this.worker = new Worker(this.app) 34 | await this.worker.start() 35 | } 36 | 37 | public async runAndWatch() { 38 | const logger = await this.app.container.make('logger') 39 | let child: ChildProcess 40 | 41 | const startProcess = () => { 42 | if (child) child.kill() 43 | child = spawn('node', ['ace.js', 'scheduler:run'], { stdio: 'inherit' }) 44 | } 45 | 46 | const watcher = chokidar.watch([this.app.appRoot.pathname], { 47 | //@ts-ignore 48 | ignored: (path, stats) => { 49 | if (path.includes('node_modules') || path.includes('.git') || path.includes('build')) { 50 | return true 51 | } 52 | 53 | return stats?.isFile() && !path.endsWith('.ts') && !path.endsWith('.js') 54 | }, 55 | persistent: true, 56 | ignoreInitial: true, 57 | }) 58 | 59 | let timeoutId: NodeJS.Timeout 60 | 61 | watcher.on('all', (event, path) => { 62 | if (typeof path === 'string') { 63 | logger.info( 64 | `File ${path.replace(this.app.appRoot.pathname, '')} changed (${event}), restarting...` 65 | ) 66 | } 67 | clearTimeout(timeoutId) 68 | timeoutId = setTimeout(() => { 69 | startProcess() 70 | }, 300) 71 | }) 72 | 73 | startProcess() 74 | 75 | this.app.terminating(async () => { 76 | if (child) child.kill() 77 | process.exit() 78 | }) 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /commands/scheduler_list_command.ts: -------------------------------------------------------------------------------- 1 | import { BaseCommand, cliHelpers } from '@adonisjs/core/ace' 2 | import { CommandOptions } from '@adonisjs/core/types/ace' 3 | import { CronExpressionParser } from 'cron-parser' 4 | import { DateTime } from 'luxon' 5 | import stringWidth from 'string-width' 6 | 7 | export default class SchedulerCommand extends BaseCommand { 8 | static commandName = 'scheduler:list' 9 | static description = '' 10 | 11 | static options: CommandOptions = { 12 | startApp: true, 13 | } 14 | 15 | public async run() { 16 | const schedule = await this.app.container.make('scheduler') 17 | await schedule.boot() 18 | 19 | const items: any[] = [] 20 | for (let index = 0; index < schedule.items.length; index++) { 21 | const command = schedule.items[index] 22 | 23 | const commandName = 24 | command.type === 'callback' 25 | ? `Closure #${index + 1}` 26 | : `node ace ${command.commandName}` + 27 | (command.commandArgs.length 28 | ? ` ${this.ui.colors.cyan(command.commandArgs.join(' '))}` 29 | : '') 30 | 31 | const cron = CronExpressionParser.parse(command.expression, { 32 | tz: command.config.timezone, 33 | }) 34 | 35 | const nextDueDate = DateTime.fromJSDate(cron.next().toDate()).toRelative() 36 | 37 | items.push({ 38 | expression: ` ${this.ui.colors.yellow(command.expression)} `, 39 | commandName: ` ${commandName} `, 40 | nextDueDate: this.ui.colors.dim(` Next Due: ${nextDueDate}`), 41 | }) 42 | } 43 | 44 | const expressions = items.map((item) => item.expression) 45 | const largestExpressionLength = Math.max(...expressions.map((e) => stringWidth(e))) 46 | const formattedExpressions = cliHelpers.justify(expressions, { 47 | maxWidth: largestExpressionLength, 48 | }) 49 | 50 | const commands = items.map((item) => item.commandName) 51 | const largestCommandLength = Math.max(...commands.map((e) => stringWidth(e))) 52 | const formattedCommands = cliHelpers.justify(commands, { 53 | maxWidth: largestCommandLength, 54 | paddingChar: this.ui.colors.dim('.'), 55 | }) 56 | 57 | const dates = items.map((item) => item.nextDueDate) 58 | const largestDateLength = 59 | cliHelpers.TERMINAL_SIZE - (largestExpressionLength + largestCommandLength) - 10 60 | const formattedDates = cliHelpers.truncate( 61 | cliHelpers.justify(dates, { 62 | maxWidth: largestDateLength, 63 | align: 'right', 64 | paddingChar: this.ui.colors.dim('.'), 65 | }), 66 | { 67 | maxWidth: largestDateLength, 68 | } 69 | ) 70 | 71 | for (let index = 0; index < formattedExpressions.length; index++) { 72 | const expression = formattedExpressions[index] 73 | const command = formattedCommands[index] 74 | const date = formattedDates[index] 75 | 76 | this.logger.log(`${expression}${command}${date}`) 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /configure.ts: -------------------------------------------------------------------------------- 1 | /* 2 | |-------------------------------------------------------------------------- 3 | | Configure hook 4 | |-------------------------------------------------------------------------- 5 | | 6 | | The configure hook is called when someone runs "node ace configure " 7 | | command. You are free to perform any operations inside this function to 8 | | configure the package. 9 | | 10 | | To make things easier, you have access to the underlying "ConfigureCommand" 11 | | instance and you can use codemods to modify the source files. 12 | | 13 | */ 14 | 15 | import ConfigureCommand from '@adonisjs/core/commands/configure' 16 | import { stubsRoot } from './stubs/main.js' 17 | 18 | export async function configure(command: ConfigureCommand) { 19 | const codemods = await command.createCodemods() 20 | 21 | await codemods.makeUsingStub(stubsRoot, 'start/scheduler.stub', {}) 22 | 23 | 24 | await codemods.updateRcFile((rcFile: any) => { 25 | rcFile.addProvider('adonisjs-scheduler/scheduler_provider', ['console']) 26 | rcFile.addCommand('adonisjs-scheduler/commands') 27 | rcFile.addPreloadFile('#start/scheduler', ['console']) 28 | }) 29 | } -------------------------------------------------------------------------------- /example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/KABBOUCHI/adonisjs-scheduler/c698f08c71ea5cc21f04f322d931f35c38a24d37/example.png -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | /* 2 | |-------------------------------------------------------------------------- 3 | | Package entrypoint 4 | |-------------------------------------------------------------------------- 5 | | 6 | | Export values from the package entrypoint as you see fit. 7 | | 8 | */ 9 | 10 | export { configure } from './configure.js' 11 | export { stubsRoot } from './stubs/main.js' 12 | export { Scheduler } from './src/scheduler.js' 13 | export { Worker } from './src/worker.js' 14 | export { schedule } from './src/decorator.js' 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "adonisjs-scheduler", 3 | "version": "2.4.0", 4 | "description": "Task scheduler for AdonisJS", 5 | "homepage": "https://github.com/KABBOUCHI/adonisjs-scheduler#readme", 6 | "license": "MIT", 7 | "keywords": [ 8 | "adonisjs", 9 | "scheduler", 10 | "crons" 11 | ], 12 | "type": "module", 13 | "author": "Georges KABBOUCHI ", 14 | "main": "build/providers/scheduler_provider.js", 15 | "files": [ 16 | "build" 17 | ], 18 | "scripts": { 19 | "build": "npm run clean && npm run build-only && npm run copyfiles", 20 | "copyfiles": "copyfiles \"stubs/**/*.stub\" build", 21 | "build-only": "tsc && npm run index:commands", 22 | "clean": "rimraf build", 23 | "prepublishOnly": "npm run build", 24 | "index:commands": "adonis-kit index build/commands", 25 | "test": "node --enable-source-maps --import=ts-node-maintained/register/esm bin/test.ts" 26 | }, 27 | "exports": { 28 | ".": "./build/index.js", 29 | "./services/main": "./build/services/main.js", 30 | "./scheduler_provider": "./build/providers/scheduler_provider.js", 31 | "./commands": "./build/commands/main.js" 32 | }, 33 | "devDependencies": { 34 | "@adonisjs/core": "^6.2.0", 35 | "@adonisjs/eslint-config": "^1.2.1", 36 | "@adonisjs/prettier-config": "^1.2.1", 37 | "@adonisjs/tsconfig": "^1.2.1", 38 | "@japa/assert": "^4.0.0", 39 | "@japa/runner": "^3.1.4", 40 | "@swc/core": "^1.3.102", 41 | "@types/async-lock": "^1.4.2", 42 | "@types/luxon": "^3.4.2", 43 | "@types/node": "^22.10.1", 44 | "@types/node-cron": "^3.0.7", 45 | "copyfiles": "^2.4.1", 46 | "eslint": "^8.19.0", 47 | "prettier": "^2.7.1", 48 | "rimraf": "^3.0.2", 49 | "ts-node-maintained": "^10.9.4", 50 | "typescript": "^5.3.3" 51 | }, 52 | "publishConfig": { 53 | "tag": "latest", 54 | "access": "public" 55 | }, 56 | "repository": { 57 | "type": "git", 58 | "url": "git+https://github.com/KABBOUCHI/adonisjs-scheduler.git" 59 | }, 60 | "bugs": { 61 | "url": "https://github.com/KABBOUCHI/adonisjs-scheduler/issues" 62 | }, 63 | "eslintConfig": { 64 | "extends": "@adonisjs/eslint-config/package" 65 | }, 66 | "prettier": "@adonisjs/prettier-config", 67 | "dependencies": { 68 | "async-lock": "^1.4.1", 69 | "chokidar": "^4.0.2", 70 | "cron-parser": "^5.0.4", 71 | "luxon": "^3.5.0", 72 | "node-cron": "^3.0.2", 73 | "string-width": "^7.2.0" 74 | }, 75 | "peerDependencies": { 76 | "@adonisjs/core": "^6.2.0" 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | async-lock: 12 | specifier: ^1.4.1 13 | version: 1.4.1 14 | chokidar: 15 | specifier: ^4.0.2 16 | version: 4.0.2 17 | cron-parser: 18 | specifier: ^5.0.4 19 | version: 5.0.4 20 | luxon: 21 | specifier: ^3.5.0 22 | version: 3.5.0 23 | node-cron: 24 | specifier: ^3.0.2 25 | version: 3.0.3 26 | string-width: 27 | specifier: ^7.2.0 28 | version: 7.2.0 29 | devDependencies: 30 | '@adonisjs/core': 31 | specifier: ^6.2.0 32 | version: 6.2.1 33 | '@adonisjs/eslint-config': 34 | specifier: ^1.2.1 35 | version: 1.2.1(eslint@8.56.0)(prettier@2.8.8)(typescript@5.3.3) 36 | '@adonisjs/prettier-config': 37 | specifier: ^1.2.1 38 | version: 1.2.1 39 | '@adonisjs/tsconfig': 40 | specifier: ^1.2.1 41 | version: 1.2.1 42 | '@japa/assert': 43 | specifier: ^4.0.0 44 | version: 4.0.0(@japa/runner@3.1.4) 45 | '@japa/runner': 46 | specifier: ^3.1.4 47 | version: 3.1.4 48 | '@swc/core': 49 | specifier: ^1.3.102 50 | version: 1.3.105 51 | '@types/async-lock': 52 | specifier: ^1.4.2 53 | version: 1.4.2 54 | '@types/luxon': 55 | specifier: ^3.4.2 56 | version: 3.4.2 57 | '@types/node': 58 | specifier: ^22.10.1 59 | version: 22.10.1 60 | '@types/node-cron': 61 | specifier: ^3.0.7 62 | version: 3.0.11 63 | copyfiles: 64 | specifier: ^2.4.1 65 | version: 2.4.1 66 | eslint: 67 | specifier: ^8.19.0 68 | version: 8.56.0 69 | prettier: 70 | specifier: ^2.7.1 71 | version: 2.8.8 72 | rimraf: 73 | specifier: ^3.0.2 74 | version: 3.0.2 75 | ts-node-maintained: 76 | specifier: ^10.9.4 77 | version: 10.9.4(@swc/core@1.3.105)(@types/node@22.10.1)(typescript@5.3.3) 78 | typescript: 79 | specifier: ^5.3.3 80 | version: 5.3.3 81 | 82 | packages: 83 | 84 | '@aashutoshrathi/word-wrap@1.2.6': 85 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 86 | engines: {node: '>=0.10.0'} 87 | 88 | '@adonisjs/ace@13.0.0': 89 | resolution: {integrity: sha512-Hj5QjRgYnMUXiYuzMH5gQtzHH2hBNo4BO8VW7Jkrbbvh/YlUeFBkTSpTY010EBxmxSrslZKuHQynJ9JVRFExyQ==} 90 | engines: {node: '>=18.16.0'} 91 | 92 | '@adonisjs/application@8.0.2': 93 | resolution: {integrity: sha512-BQ21lTQJKcz4W12SVF5QZ60u+oSO1Ihh5YLc9HjgNNC4QhByY5f/QBnrCqS/ietu10IucX4ZncJ0HFU+F8t1Uw==} 94 | engines: {node: '>=18.16.0'} 95 | peerDependencies: 96 | '@adonisjs/config': ^5.0.0 97 | '@adonisjs/fold': ^10.0.0 98 | 99 | '@adonisjs/bodyparser@10.0.1': 100 | resolution: {integrity: sha512-Q5NvSjqSt8yNN/CObu7pRDgMRpFVnPHL1CReBK1Y9ZdPpSCJ+/n/GpOYsUh+ChhFMjRNdFy4rDk3RJ2QUOTHIQ==} 101 | engines: {node: '>=18.16.0'} 102 | peerDependencies: 103 | '@adonisjs/http-server': ^7.0.2 104 | 105 | '@adonisjs/config@5.0.1': 106 | resolution: {integrity: sha512-hyednyDBGsoBthbcf7S8r8M68tS8Y7rnIBPIZKHhQikXOXgf/E9IkQWgWjJR9+ODbaiMY69roJYR5L9dElre7w==} 107 | engines: {node: '>=18.16.0'} 108 | 109 | '@adonisjs/core@6.2.1': 110 | resolution: {integrity: sha512-6qDlwpJiolBIo9t+zClvdUIpku0MCL7NfNvVA4jaAjn9BGDS8azhasRsVRCvVFQeQrCxIap42QbV4kxoatyFLw==} 111 | engines: {node: '>=18.16.0'} 112 | hasBin: true 113 | peerDependencies: 114 | '@adonisjs/assembler': ^7.0.0 115 | '@vinejs/vine': ^1.7.0 116 | argon2: ^0.31.1 117 | bcrypt: ^5.1.1 118 | edge.js: ^6.0.1 119 | peerDependenciesMeta: 120 | '@adonisjs/assembler': 121 | optional: true 122 | '@vinejs/vine': 123 | optional: true 124 | argon2: 125 | optional: true 126 | bcrypt: 127 | optional: true 128 | edge.js: 129 | optional: true 130 | 131 | '@adonisjs/encryption@6.0.1': 132 | resolution: {integrity: sha512-9Vz2xU8cryCvRgQDri+4khZIeRDM6yJFe35PdR6xyhgQaT91Qn7fJ2oAcg3yVuNp3WKxg6PTRcxva+ZTfdP3SA==} 133 | engines: {node: '>=18.16.0'} 134 | 135 | '@adonisjs/env@5.0.1': 136 | resolution: {integrity: sha512-jka5D+LHjG0Cuy1IpuOv7NfO5Pu4SZ41UzX5csPeXzBIWyuD9as+HphxctHZpsD2KZ97EuSbVJv6zzxJfZ4Edg==} 137 | engines: {node: '>=18.16.0'} 138 | 139 | '@adonisjs/eslint-config@1.2.1': 140 | resolution: {integrity: sha512-kCGvnLcRWyw21YVEnka1TDNquJKrqkY6K7EENxM6tWwoHUyn0j99ssX4+Hv3d2UVvVezcC4KF1l8YZKzLqlgjA==} 141 | peerDependencies: 142 | eslint: '>=7.4.0' 143 | prettier: '>=2.0.0' 144 | 145 | '@adonisjs/eslint-plugin@1.2.1': 146 | resolution: {integrity: sha512-dwL0x5An5n/q1sy4ZL3eUqqTGlTJKn/Z8m53m7/DpAHtvq4QZTaxUZ3rF5WgnNiI5Q8+wyc/JcQ+lvQ4T0vH+A==} 147 | 148 | '@adonisjs/events@9.0.1': 149 | resolution: {integrity: sha512-1tOwBrwrJLE7zLB+/KzbAzBUq8IeQMLdqUFVC0d5A+Bq0ko/kn4O2xoRAybhrG9NHxQtFoSrOx+Ynb/8d+YffQ==} 150 | engines: {node: '>=18.16.0'} 151 | peerDependencies: 152 | '@adonisjs/application': ^8.0.2 153 | '@adonisjs/fold': ^10.0.1 154 | 155 | '@adonisjs/fold@10.0.1': 156 | resolution: {integrity: sha512-3SqwopxFtvy3WDs1Z3ZOdjS1M3JfTX8r0dCEQ+ascXhiLYwmv0LCoCY3vcmwVL+wpuyOG1qkKWkjZP1sB3+/bA==} 157 | engines: {node: '>=18.16.0'} 158 | 159 | '@adonisjs/hash@9.0.1': 160 | resolution: {integrity: sha512-K1jHQWr7ovXf6zHoo+70fmAt33op50GVygZd6ilvyQfCCEPx3lRqGoxqmRdgzDW5eCAfxCwy+nH7zxf8BhX4GQ==} 161 | engines: {node: '>=18.16.0'} 162 | peerDependencies: 163 | argon2: ^0.31.2 164 | bcrypt: ^5.1.1 165 | peerDependenciesMeta: 166 | argon2: 167 | optional: true 168 | bcrypt: 169 | optional: true 170 | 171 | '@adonisjs/http-server@7.0.2': 172 | resolution: {integrity: sha512-WFMTPxHdr4U9YXZqPxsTCXznlcj4g5phZHhe4JRT21Atedtz/hPMzRCmNOts2wIU9AP5YD6CYCyFnE/1VC2ecA==} 173 | engines: {node: '>=18.16.0'} 174 | peerDependencies: 175 | '@adonisjs/application': ^8.0.2 176 | '@adonisjs/encryption': ^6.0.0 177 | '@adonisjs/events': ^9.0.0 178 | '@adonisjs/fold': ^10.0.1 179 | '@adonisjs/logger': ^6.0.1 180 | 181 | '@adonisjs/logger@6.0.1': 182 | resolution: {integrity: sha512-zt3G2XPWZcreO6okdZ4A9CXfZhPBaAUTbsJZrLEYILdb5E0r5ZGw/MH6enK4uiN7BI+Y90W6HjXfQzKmXnNV2g==} 183 | engines: {node: '>=18.16.0'} 184 | 185 | '@adonisjs/prettier-config@1.2.1': 186 | resolution: {integrity: sha512-lE9vJNKvknB+RO7uf11C2aT4nPjCxrP6IqPDjVu3HU7qy1VPY1e44SEsxdCOvOm7aFbv9hRV8ZN7sOl37Wa8ww==} 187 | 188 | '@adonisjs/repl@4.0.1': 189 | resolution: {integrity: sha512-fgDRC5I8RBKHzsJPM4rRQF/OWI0K9cNihCIf4yHdqQt3mhFqWSOUjSi4sXWykdICLiddmyBO86au7i0d0dj5vQ==} 190 | engines: {node: '>=18.16.0'} 191 | 192 | '@adonisjs/tsconfig@1.2.1': 193 | resolution: {integrity: sha512-N8zdNw/bC3ft64e7CGr/LfYDCumoWe3wwePEqq2LRTCjBN/ICyxywW6f60QHLr+q17yHMU6fRFDt0GuRLXtPSA==} 194 | 195 | '@arr/every@1.0.1': 196 | resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} 197 | engines: {node: '>=4'} 198 | 199 | '@babel/code-frame@7.23.5': 200 | resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} 201 | engines: {node: '>=6.9.0'} 202 | 203 | '@babel/helper-validator-identifier@7.22.20': 204 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} 205 | engines: {node: '>=6.9.0'} 206 | 207 | '@babel/highlight@7.23.4': 208 | resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} 209 | engines: {node: '>=6.9.0'} 210 | 211 | '@colors/colors@1.5.0': 212 | resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} 213 | engines: {node: '>=0.1.90'} 214 | 215 | '@cspotcode/source-map-support@0.8.1': 216 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 217 | engines: {node: '>=12'} 218 | 219 | '@eslint-community/eslint-utils@4.4.0': 220 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 221 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 222 | peerDependencies: 223 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 224 | 225 | '@eslint-community/regexpp@4.10.0': 226 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 227 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 228 | 229 | '@eslint/eslintrc@2.1.4': 230 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 231 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 232 | 233 | '@eslint/js@8.56.0': 234 | resolution: {integrity: sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==} 235 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 236 | 237 | '@humanwhocodes/config-array@0.11.14': 238 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 239 | engines: {node: '>=10.10.0'} 240 | 241 | '@humanwhocodes/module-importer@1.0.1': 242 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 243 | engines: {node: '>=12.22'} 244 | 245 | '@humanwhocodes/object-schema@2.0.2': 246 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 247 | 248 | '@japa/assert@4.0.0': 249 | resolution: {integrity: sha512-f1qQGT3haTQANUD62GqBX8fl7MVjtQFsxjbGCfYhZW4esD25epgbeuA1KhnDhwno885B7IA9RZqgyYlmYQ483A==} 250 | engines: {node: '>=18.16.0'} 251 | peerDependencies: 252 | '@japa/runner': ^3.1.2 253 | 254 | '@japa/core@9.0.1': 255 | resolution: {integrity: sha512-snngJNbvYC92nn+dB69DT2iyosWZLXPRnOp8NJnVEeotkkKAWSmcDqBKw9qq2+MVdshwClvKFVXTxko4MtmlEQ==} 256 | engines: {node: '>=18.16.0'} 257 | 258 | '@japa/errors-printer@3.0.4': 259 | resolution: {integrity: sha512-gqBWkc8X6n5y91HH7H8fXyfe3rKV1+YeMNgE/+CY6hXf0/BS7J55s/QldosKEV2ZiWj/WmE6UPZiFH8W873fGw==} 260 | engines: {node: '>=18.16.0'} 261 | 262 | '@japa/runner@3.1.4': 263 | resolution: {integrity: sha512-ShaVZLdYq3GbFwyNiqQMCfdEoNq9vgYC0P6Z9gflqPcSUfOmN5jeJTLrLpChCBM5Sx9kYuAm5Bh6cqv1ZrArkQ==} 264 | engines: {node: '>=18.16.0'} 265 | 266 | '@jest/schemas@29.6.3': 267 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 268 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 269 | 270 | '@jridgewell/resolve-uri@3.1.1': 271 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 272 | engines: {node: '>=6.0.0'} 273 | 274 | '@jridgewell/sourcemap-codec@1.4.15': 275 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 276 | 277 | '@jridgewell/trace-mapping@0.3.9': 278 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 279 | 280 | '@lukeed/ms@2.0.2': 281 | resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==} 282 | engines: {node: '>=8'} 283 | 284 | '@noble/hashes@1.3.3': 285 | resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} 286 | engines: {node: '>= 16'} 287 | 288 | '@nodelib/fs.scandir@2.1.5': 289 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 290 | engines: {node: '>= 8'} 291 | 292 | '@nodelib/fs.stat@2.0.5': 293 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 294 | engines: {node: '>= 8'} 295 | 296 | '@nodelib/fs.walk@1.2.8': 297 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 298 | engines: {node: '>= 8'} 299 | 300 | '@paralleldrive/cuid2@2.2.2': 301 | resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} 302 | 303 | '@phc/format@1.0.0': 304 | resolution: {integrity: sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==} 305 | engines: {node: '>=10'} 306 | 307 | '@pkgr/core@0.1.1': 308 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 309 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 310 | 311 | '@poppinss/cliui@6.3.0': 312 | resolution: {integrity: sha512-GEu/IsJ9SanzAGa9NaHsHneumwlScLfhBJHU8uYcB6GyaTvQQg38OuiGnn5U95Wk3a/roUOSsrEVU1bnVvYtoQ==} 313 | engines: {node: '>=18.16.0'} 314 | 315 | '@poppinss/cliui@6.4.2': 316 | resolution: {integrity: sha512-+zx32scWjFUReNAzi75/QBwTiQrQ70a3khF5TNnyJVA8V2I9wTRPBLPdLWt83E5m1nTufoilF2MI7UBALkFH1Q==} 317 | engines: {node: '>=18.16.0'} 318 | 319 | '@poppinss/colors@4.1.2': 320 | resolution: {integrity: sha512-+qLfhQrdLa7RqJNZmGIc1ERVz2JtMD3kLI41tNfKhQBZt0wiWoYMhP/Tv+eopPnMy3NwANWgDSbqsi+teY1oig==} 321 | engines: {node: '>=18.16.0'} 322 | 323 | '@poppinss/colors@4.1.4': 324 | resolution: {integrity: sha512-FA+nTU8p6OcSH4tLDY5JilGYr1bVWHpNmcLr7xmMEdbWmKHa+3QZ+DqefrXKmdjO/brHTnQZo20lLSjaO7ydog==} 325 | engines: {node: '>=18.16.0'} 326 | 327 | '@poppinss/hooks@7.2.2': 328 | resolution: {integrity: sha512-EDivPMt9sAUV5kNhH2bvtVjuLvHhQ6SKVP19OjvvcyRalqAa6KqCItJ2qeU8A93s0cr1a28Sytu+KSwsmOY8pg==} 329 | engines: {node: '>=18.16.0'} 330 | 331 | '@poppinss/hooks@7.2.5': 332 | resolution: {integrity: sha512-mxORKQ5CFzQNi6yK3zwCGWfGS507w23IhV3kFq42QzWlv/vpvf4aMJDbtfMCR5p52ghVoe0d1wmgp77ak2ORhQ==} 333 | engines: {node: '>=18.16.0'} 334 | 335 | '@poppinss/macroable@1.0.1': 336 | resolution: {integrity: sha512-bO3+rnqGhE+gdx4DOyYjY9jCm2+c5Ncyl2Gmst0w271rIFnsB00btonpdmAqvFNzS8rcas+APGm+47fYMmkpQA==} 337 | engines: {node: '>=18.16.0'} 338 | 339 | '@poppinss/macroable@1.0.4': 340 | resolution: {integrity: sha512-ct43jurbe7lsUX5eIrj4ijO3j/6zIPp7CDnFWXDs7UPAbw1Pu1iH3oAmFdP4jcskKJBURH5M9oTtyeiUXyHX8Q==} 341 | engines: {node: '>=18.16.0'} 342 | 343 | '@poppinss/matchit@3.1.2': 344 | resolution: {integrity: sha512-Bx+jY+vmdQFmwYiHliiPjr+oVBaGnh79B1h1FSAm3jME1QylLFt8PPYC0ymO8Q5PzJj/KuE3jeTnZhRHOWqq8g==} 345 | 346 | '@poppinss/middleware@3.2.2': 347 | resolution: {integrity: sha512-73AJXODpZcfpO3b9Fr4SQNksXtATpUpCAnKgIUVDfZqAsS1gzLGhDfYo/Qi44hH29P8q28MXqmaoYY2oTpdZFQ==} 348 | engines: {node: '>=18.16.0'} 349 | 350 | '@poppinss/multiparty@2.0.1': 351 | resolution: {integrity: sha512-Pf3V9PFyZDIkDBBiAOT2hdmA+1l/+hverHbUnMzNzwtwgO50s2ZPt5KxUydVA0hceg9gryo5unQ0WUF1SO9tkQ==} 352 | 353 | '@poppinss/prompts@3.1.2': 354 | resolution: {integrity: sha512-wjAWTZkZz2kH5dVGbEPx9IRxJcIy6Nzn614TdGsn2kzeMI5woPaKWKxrLEQfK/teIxUrOVUmbjcorDohBkIjiw==} 355 | engines: {node: '>=18.16.0'} 356 | 357 | '@poppinss/utils@6.7.1': 358 | resolution: {integrity: sha512-M/IiE/lp493QEcDXpFHqlJGU4Tw0mw2JLCH1NgmL2UtL9QL4aTgd0MPwjIYOtikA0ug/oJwM1e7z1NKTGig/rw==} 359 | engines: {node: '>=18.16.0'} 360 | 361 | '@poppinss/validator-lite@1.0.3': 362 | resolution: {integrity: sha512-u4dmT7PDHwNtxY3q1jHVp/u+hMEEcBlkzd37QwwM4tVt/0mLlEDttSfPQ+TT7sqPG4VEtWKwVSlMInwPUYyJpA==} 363 | 364 | '@sinclair/typebox@0.27.8': 365 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 366 | 367 | '@sindresorhus/is@6.1.0': 368 | resolution: {integrity: sha512-BuvU07zq3tQ/2SIgBsEuxKYDyDjC0n7Zir52bpHy2xnBbW81+po43aLFPLbeV3HRAheFbGud1qgcqSYfhtHMAg==} 369 | engines: {node: '>=16'} 370 | 371 | '@swc/core-darwin-arm64@1.3.105': 372 | resolution: {integrity: sha512-buWeweLVDXXmcnfIemH4PGnpjwsDTUGitnPchdftb0u1FU8zSSP/lw/pUCBDG/XvWAp7c/aFxgN4CyG0j7eayA==} 373 | engines: {node: '>=10'} 374 | cpu: [arm64] 375 | os: [darwin] 376 | 377 | '@swc/core-darwin-x64@1.3.105': 378 | resolution: {integrity: sha512-hFmXPApqjA/8sy/9NpljHVaKi1OvL9QkJ2MbbTCCbJERuHMpMUeMBUWipHRfepGHFhU+9B9zkEup/qJaJR4XIg==} 379 | engines: {node: '>=10'} 380 | cpu: [x64] 381 | os: [darwin] 382 | 383 | '@swc/core-linux-arm-gnueabihf@1.3.105': 384 | resolution: {integrity: sha512-mwXyMC41oMKkKrPpL8uJpOxw7fyfQoVtIw3Y5p0Blabk+espNYqix0E8VymHdRKuLmM//z5wVmMsuHdGBHvZeg==} 385 | engines: {node: '>=10'} 386 | cpu: [arm] 387 | os: [linux] 388 | 389 | '@swc/core-linux-arm64-gnu@1.3.105': 390 | resolution: {integrity: sha512-H7yEIVydnUtqBSUxwmO6vpIQn7j+Rr0DF6ZOORPyd/SFzQJK9cJRtmJQ3ZMzlJ1Bb+1gr3MvjgLEnmyCYEm2Hg==} 391 | engines: {node: '>=10'} 392 | cpu: [arm64] 393 | os: [linux] 394 | 395 | '@swc/core-linux-arm64-musl@1.3.105': 396 | resolution: {integrity: sha512-Jg7RTFT3pGFdGt5elPV6oDkinRy7q9cXpenjXnJnM2uvx3jOwnsAhexPyCDHom8SHL0j+9kaLLC66T3Gz1E4UA==} 397 | engines: {node: '>=10'} 398 | cpu: [arm64] 399 | os: [linux] 400 | 401 | '@swc/core-linux-x64-gnu@1.3.105': 402 | resolution: {integrity: sha512-DJghplpyusAmp1X5pW/y93MmS/u83Sx5GrpJxI6KLPa82+NItTgMcl8KBQmW5GYAJpVKZyaIvBanS5TdR8aN2w==} 403 | engines: {node: '>=10'} 404 | cpu: [x64] 405 | os: [linux] 406 | 407 | '@swc/core-linux-x64-musl@1.3.105': 408 | resolution: {integrity: sha512-wD5jL2dZH/5nPNssBo6jhOvkI0lmWnVR4vnOXWjuXgjq1S0AJpO5jdre/6pYLmf26hft3M42bteDnjR4AAZ38w==} 409 | engines: {node: '>=10'} 410 | cpu: [x64] 411 | os: [linux] 412 | 413 | '@swc/core-win32-arm64-msvc@1.3.105': 414 | resolution: {integrity: sha512-UqJtwILUHRw2+3UTPnRkZrzM/bGdQtbR4UFdp79mZQYfryeOUVNg7aJj/bWUTkKtLiZ3o+FBNrM/x2X1mJX5bA==} 415 | engines: {node: '>=10'} 416 | cpu: [arm64] 417 | os: [win32] 418 | 419 | '@swc/core-win32-ia32-msvc@1.3.105': 420 | resolution: {integrity: sha512-Z95C6vZgBEJ1snidYyjVKnVWiy/ZpPiIFIXGWkDr4ZyBgL3eZX12M6LzZ+NApHKffrbO4enbFyFomueBQgS2oA==} 421 | engines: {node: '>=10'} 422 | cpu: [ia32] 423 | os: [win32] 424 | 425 | '@swc/core-win32-x64-msvc@1.3.105': 426 | resolution: {integrity: sha512-3J8fkyDPFsS3mszuYUY4Wfk7/B2oio9qXUwF3DzOs2MK+XgdyMLIptIxL7gdfitXJBH8k39uVjrIw1JGJDjyFA==} 427 | engines: {node: '>=10'} 428 | cpu: [x64] 429 | os: [win32] 430 | 431 | '@swc/core@1.3.105': 432 | resolution: {integrity: sha512-me2VZyr3OjqRpFrYQJJYy7x/zbFSl9nt+MAGnIcBtjDsN00iTVqEaKxBjPBFQV9BDAgPz2SRWes/DhhVm5SmMw==} 433 | engines: {node: '>=10'} 434 | peerDependencies: 435 | '@swc/helpers': ^0.5.0 436 | peerDependenciesMeta: 437 | '@swc/helpers': 438 | optional: true 439 | 440 | '@swc/counter@0.1.2': 441 | resolution: {integrity: sha512-9F4ys4C74eSTEUNndnER3VJ15oru2NumfQxS8geE+f3eB5xvfxpWyqE5XlVnxb/R14uoXi6SLbBwwiDSkv+XEw==} 442 | 443 | '@swc/types@0.1.5': 444 | resolution: {integrity: sha512-myfUej5naTBWnqOCc/MdVOLVjXUXtIA+NpDrDBKJtLLg2shUjBu3cZmB/85RyitKc55+lUUyl7oRfLOvkr2hsw==} 445 | 446 | '@tokenizer/token@0.3.0': 447 | resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} 448 | 449 | '@tsconfig/node10@1.0.9': 450 | resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} 451 | 452 | '@tsconfig/node12@1.0.11': 453 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 454 | 455 | '@tsconfig/node14@1.0.3': 456 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 457 | 458 | '@tsconfig/node16@1.0.4': 459 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 460 | 461 | '@types/async-lock@1.4.2': 462 | resolution: {integrity: sha512-HlZ6Dcr205BmNhwkdXqrg2vkFMN2PluI7Lgr8In3B3wE5PiQHhjRqtW/lGdVU9gw+sM0JcIDx2AN+cW8oSWIcw==} 463 | 464 | '@types/bytes@3.1.4': 465 | resolution: {integrity: sha512-A0uYgOj3zNc4hNjHc5lYUfJQ/HVyBXiUMKdXd7ysclaE6k9oJdavQzODHuwjpUu2/boCP8afjQYi8z/GtvNCWA==} 466 | 467 | '@types/chai@5.0.1': 468 | resolution: {integrity: sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA==} 469 | 470 | '@types/deep-eql@4.0.2': 471 | resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 472 | 473 | '@types/he@1.2.3': 474 | resolution: {integrity: sha512-q67/qwlxblDzEDvzHhVkwc1gzVWxaNxeyHUBF4xElrvjL11O+Ytze+1fGpBHlr/H9myiBUaUXNnNPmBHxxfAcA==} 475 | 476 | '@types/json-schema@7.0.15': 477 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 478 | 479 | '@types/luxon@3.4.2': 480 | resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} 481 | 482 | '@types/node-cron@3.0.11': 483 | resolution: {integrity: sha512-0ikrnug3/IyneSHqCBeslAhlK2aBfYek1fGo4bP4QnZPmiqSGRK+Oy7ZMisLWkesffJvQ1cqAcBnJC+8+nxIAg==} 484 | 485 | '@types/node@22.10.1': 486 | resolution: {integrity: sha512-qKgsUwfHZV2WCWLAnVP1JqnpE6Im6h3Y0+fYgMTasNQ7V++CBX5OT1as0g0f+OyubbFqhf6XVNIsmN4IIhEgGQ==} 487 | 488 | '@types/normalize-package-data@2.4.4': 489 | resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} 490 | 491 | '@types/pluralize@0.0.33': 492 | resolution: {integrity: sha512-JOqsl+ZoCpP4e8TDke9W79FDcSgPAR0l6pixx2JHkhnRjvShyYiAYw2LVsnA7K08Y6DeOnaU6ujmENO4os/cYg==} 493 | 494 | '@types/qs@6.9.11': 495 | resolution: {integrity: sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==} 496 | 497 | '@types/semver@7.5.6': 498 | resolution: {integrity: sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==} 499 | 500 | '@typescript-eslint/eslint-plugin@6.19.1': 501 | resolution: {integrity: sha512-roQScUGFruWod9CEyoV5KlCYrubC/fvG8/1zXuT0WTcxX87GnMMmnksMwSg99lo1xiKrBzw2icsJPMAw1OtKxg==} 502 | engines: {node: ^16.0.0 || >=18.0.0} 503 | peerDependencies: 504 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha 505 | eslint: ^7.0.0 || ^8.0.0 506 | typescript: '*' 507 | peerDependenciesMeta: 508 | typescript: 509 | optional: true 510 | 511 | '@typescript-eslint/parser@6.19.1': 512 | resolution: {integrity: sha512-WEfX22ziAh6pRE9jnbkkLGp/4RhTpffr2ZK5bJ18M8mIfA8A+k97U9ZyaXCEJRlmMHh7R9MJZWXp/r73DzINVQ==} 513 | engines: {node: ^16.0.0 || >=18.0.0} 514 | peerDependencies: 515 | eslint: ^7.0.0 || ^8.0.0 516 | typescript: '*' 517 | peerDependenciesMeta: 518 | typescript: 519 | optional: true 520 | 521 | '@typescript-eslint/scope-manager@6.19.1': 522 | resolution: {integrity: sha512-4CdXYjKf6/6aKNMSly/BP4iCSOpvMmqtDzRtqFyyAae3z5kkqEjKndR5vDHL8rSuMIIWP8u4Mw4VxLyxZW6D5w==} 523 | engines: {node: ^16.0.0 || >=18.0.0} 524 | 525 | '@typescript-eslint/type-utils@6.19.1': 526 | resolution: {integrity: sha512-0vdyld3ecfxJuddDjACUvlAeYNrHP/pDeQk2pWBR2ESeEzQhg52DF53AbI9QCBkYE23lgkhLCZNkHn2hEXXYIg==} 527 | engines: {node: ^16.0.0 || >=18.0.0} 528 | peerDependencies: 529 | eslint: ^7.0.0 || ^8.0.0 530 | typescript: '*' 531 | peerDependenciesMeta: 532 | typescript: 533 | optional: true 534 | 535 | '@typescript-eslint/types@6.19.1': 536 | resolution: {integrity: sha512-6+bk6FEtBhvfYvpHsDgAL3uo4BfvnTnoge5LrrCj2eJN8g3IJdLTD4B/jK3Q6vo4Ql/Hoip9I8aB6fF+6RfDqg==} 537 | engines: {node: ^16.0.0 || >=18.0.0} 538 | 539 | '@typescript-eslint/typescript-estree@6.19.1': 540 | resolution: {integrity: sha512-aFdAxuhzBFRWhy+H20nYu19+Km+gFfwNO4TEqyszkMcgBDYQjmPJ61erHxuT2ESJXhlhrO7I5EFIlZ+qGR8oVA==} 541 | engines: {node: ^16.0.0 || >=18.0.0} 542 | peerDependencies: 543 | typescript: '*' 544 | peerDependenciesMeta: 545 | typescript: 546 | optional: true 547 | 548 | '@typescript-eslint/utils@6.19.1': 549 | resolution: {integrity: sha512-JvjfEZuP5WoMqwh9SPAPDSHSg9FBHHGhjPugSRxu5jMfjvBpq5/sGTD+9M9aQ5sh6iJ8AY/Kk/oUYVEMAPwi7w==} 550 | engines: {node: ^16.0.0 || >=18.0.0} 551 | peerDependencies: 552 | eslint: ^7.0.0 || ^8.0.0 553 | 554 | '@typescript-eslint/visitor-keys@6.19.1': 555 | resolution: {integrity: sha512-gkdtIO+xSO/SmI0W68DBg4u1KElmIUo3vXzgHyGPs6cxgB0sa3TlptRAAE0hUY1hM6FcDKEv7aIwiTGm76cXfQ==} 556 | engines: {node: ^16.0.0 || >=18.0.0} 557 | 558 | '@ungap/structured-clone@1.2.0': 559 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 560 | 561 | abort-controller@3.0.0: 562 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 563 | engines: {node: '>=6.5'} 564 | 565 | abstract-logging@2.0.1: 566 | resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==} 567 | 568 | accepts@1.3.8: 569 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 570 | engines: {node: '>= 0.6'} 571 | 572 | acorn-jsx@5.3.2: 573 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 574 | peerDependencies: 575 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 576 | 577 | acorn-walk@8.3.2: 578 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 579 | engines: {node: '>=0.4.0'} 580 | 581 | acorn@8.11.3: 582 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 583 | engines: {node: '>=0.4.0'} 584 | hasBin: true 585 | 586 | ajv@6.12.6: 587 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 588 | 589 | ansi-colors@4.1.3: 590 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} 591 | engines: {node: '>=6'} 592 | 593 | ansi-escapes@6.2.0: 594 | resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} 595 | engines: {node: '>=14.16'} 596 | 597 | ansi-escapes@7.0.0: 598 | resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} 599 | engines: {node: '>=18'} 600 | 601 | ansi-regex@5.0.1: 602 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 603 | engines: {node: '>=8'} 604 | 605 | ansi-regex@6.0.1: 606 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 607 | engines: {node: '>=12'} 608 | 609 | ansi-styles@3.2.1: 610 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 611 | engines: {node: '>=4'} 612 | 613 | ansi-styles@4.3.0: 614 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 615 | engines: {node: '>=8'} 616 | 617 | ansi-styles@5.2.0: 618 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 619 | engines: {node: '>=10'} 620 | 621 | ansi-styles@6.2.1: 622 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 623 | engines: {node: '>=12'} 624 | 625 | arg@4.1.3: 626 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 627 | 628 | argparse@2.0.1: 629 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 630 | 631 | array-union@2.1.0: 632 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 633 | engines: {node: '>=8'} 634 | 635 | as-table@1.0.55: 636 | resolution: {integrity: sha512-xvsWESUJn0JN421Xb9MQw6AsMHRCUknCe0Wjlxvjud80mU4E6hQf1A6NzQKcYNmYw62MfzEtXc+badstZP3JpQ==} 637 | 638 | assertion-error@2.0.1: 639 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 640 | engines: {node: '>=12'} 641 | 642 | async-lock@1.4.1: 643 | resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} 644 | 645 | async-retry@1.3.3: 646 | resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} 647 | 648 | atomic-sleep@1.0.0: 649 | resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 650 | engines: {node: '>=8.0.0'} 651 | 652 | balanced-match@1.0.2: 653 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 654 | 655 | base64-js@1.5.1: 656 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 657 | 658 | brace-expansion@1.1.11: 659 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 660 | 661 | brace-expansion@2.0.1: 662 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 663 | 664 | braces@3.0.2: 665 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 666 | engines: {node: '>=8'} 667 | 668 | buffer@6.0.3: 669 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 670 | 671 | builtin-modules@3.3.0: 672 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} 673 | engines: {node: '>=6'} 674 | 675 | bytes@3.1.2: 676 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 677 | engines: {node: '>= 0.8'} 678 | 679 | call-bind@1.0.5: 680 | resolution: {integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==} 681 | 682 | callsites@3.1.0: 683 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 684 | engines: {node: '>=6'} 685 | 686 | case-anything@2.1.13: 687 | resolution: {integrity: sha512-zlOQ80VrQ2Ue+ymH5OuM/DlDq64mEm+B9UTdHULv5osUMD6HalNTblf2b1u/m6QecjsnOkBpqVZ+XPwIVsy7Ng==} 688 | engines: {node: '>=12.13'} 689 | 690 | chai@5.1.2: 691 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} 692 | engines: {node: '>=12'} 693 | 694 | chalk@2.4.2: 695 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} 696 | engines: {node: '>=4'} 697 | 698 | chalk@4.1.2: 699 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 700 | engines: {node: '>=10'} 701 | 702 | check-error@2.1.1: 703 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 704 | engines: {node: '>= 16'} 705 | 706 | chokidar@4.0.2: 707 | resolution: {integrity: sha512-/b57FK+bblSU+dfewfFe0rT1YjVDfOmeLQwCAuC+vwvgLkXboATqqmy+Ipux6JrF6L5joe5CBnFOw+gLWH6yKg==} 708 | engines: {node: '>= 14.16.0'} 709 | 710 | ci-info@3.9.0: 711 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 712 | engines: {node: '>=8'} 713 | 714 | clean-regexp@1.0.0: 715 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} 716 | engines: {node: '>=4'} 717 | 718 | cli-boxes@3.0.0: 719 | resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} 720 | engines: {node: '>=10'} 721 | 722 | cli-boxes@4.0.1: 723 | resolution: {integrity: sha512-5IOn+jcCEHEraYolBPs/sT4BxYCe2nHg374OPiItB1O96KZFseS2gthU4twyYzeDcFew4DaUM/xwc5BQf08JJw==} 724 | engines: {node: '>=18.20 <19 || >=20.10'} 725 | 726 | cli-cursor@4.0.0: 727 | resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} 728 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 729 | 730 | cli-cursor@5.0.0: 731 | resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} 732 | engines: {node: '>=18'} 733 | 734 | cli-table3@0.6.3: 735 | resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} 736 | engines: {node: 10.* || >= 12.*} 737 | 738 | cli-table3@0.6.5: 739 | resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} 740 | engines: {node: 10.* || >= 12.*} 741 | 742 | cli-truncate@4.0.0: 743 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 744 | engines: {node: '>=18'} 745 | 746 | cliui@7.0.4: 747 | resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} 748 | 749 | color-convert@1.9.3: 750 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 751 | 752 | color-convert@2.0.1: 753 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 754 | engines: {node: '>=7.0.0'} 755 | 756 | color-name@1.1.3: 757 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 758 | 759 | color-name@1.1.4: 760 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 761 | 762 | common-path-prefix@3.0.0: 763 | resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} 764 | 765 | concat-map@0.0.1: 766 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 767 | 768 | content-disposition@0.5.4: 769 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 770 | engines: {node: '>= 0.6'} 771 | 772 | convert-hrtime@5.0.0: 773 | resolution: {integrity: sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==} 774 | engines: {node: '>=12'} 775 | 776 | cookie@0.5.0: 777 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 778 | engines: {node: '>= 0.6'} 779 | 780 | cookie@0.6.0: 781 | resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} 782 | engines: {node: '>= 0.6'} 783 | 784 | copyfiles@2.4.1: 785 | resolution: {integrity: sha512-fereAvAvxDrQDOXybk3Qu3dPbOoKoysFMWtkY3mv5BsL8//OSZVL5DCLYqgRfY5cWirgRzlC+WSrxp6Bo3eNZg==} 786 | hasBin: true 787 | 788 | core-util-is@1.0.3: 789 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 790 | 791 | create-require@1.1.1: 792 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 793 | 794 | cron-parser@5.0.4: 795 | resolution: {integrity: sha512-ud6L7uGE4a7QxKndq106+99iKMlhG1/gSVlA4SH7qy3xO/R/EUoXFTJFMBOogdk00mZiXPONRI4wFKAcymKp6w==} 796 | engines: {node: '>=18'} 797 | 798 | cross-spawn@7.0.3: 799 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 800 | engines: {node: '>= 8'} 801 | 802 | data-uri-to-buffer@2.0.2: 803 | resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==} 804 | 805 | debug@4.3.4: 806 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 807 | engines: {node: '>=6.0'} 808 | peerDependencies: 809 | supports-color: '*' 810 | peerDependenciesMeta: 811 | supports-color: 812 | optional: true 813 | 814 | deep-eql@5.0.2: 815 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 816 | engines: {node: '>=6'} 817 | 818 | deep-is@0.1.4: 819 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 820 | 821 | define-data-property@1.1.1: 822 | resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} 823 | engines: {node: '>= 0.4'} 824 | 825 | depd@2.0.0: 826 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 827 | engines: {node: '>= 0.8'} 828 | 829 | destroy@1.2.0: 830 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 831 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 832 | 833 | diff-sequences@29.6.3: 834 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 835 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 836 | 837 | diff@4.0.2: 838 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 839 | engines: {node: '>=0.3.1'} 840 | 841 | dir-glob@3.0.1: 842 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 843 | engines: {node: '>=8'} 844 | 845 | doctrine@3.0.0: 846 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 847 | engines: {node: '>=6.0.0'} 848 | 849 | dotenv@16.4.1: 850 | resolution: {integrity: sha512-CjA3y+Dr3FyFDOAMnxZEGtnW9KBR2M0JvvUtXNW+dYJL5ROWxP9DUHCwgFqpMk0OXCc0ljhaNTr2w/kutYIcHQ==} 851 | engines: {node: '>=12'} 852 | 853 | ee-first@1.1.1: 854 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 855 | 856 | emittery@1.0.1: 857 | resolution: {integrity: sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==} 858 | engines: {node: '>=14.16'} 859 | 860 | emittery@1.0.3: 861 | resolution: {integrity: sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==} 862 | engines: {node: '>=14.16'} 863 | 864 | emoji-regex@10.3.0: 865 | resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} 866 | 867 | emoji-regex@8.0.0: 868 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 869 | 870 | encodeurl@1.0.2: 871 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 872 | engines: {node: '>= 0.8'} 873 | 874 | enquirer@2.4.1: 875 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} 876 | engines: {node: '>=8.6'} 877 | 878 | environment@1.1.0: 879 | resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} 880 | engines: {node: '>=18'} 881 | 882 | error-ex@1.3.2: 883 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 884 | 885 | es-module-lexer@1.4.1: 886 | resolution: {integrity: sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==} 887 | 888 | escalade@3.1.1: 889 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 890 | engines: {node: '>=6'} 891 | 892 | escape-string-regexp@1.0.5: 893 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 894 | engines: {node: '>=0.8.0'} 895 | 896 | escape-string-regexp@4.0.0: 897 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 898 | engines: {node: '>=10'} 899 | 900 | eslint-compat-utils@0.4.1: 901 | resolution: {integrity: sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==} 902 | engines: {node: '>=12'} 903 | peerDependencies: 904 | eslint: '>=6.0.0' 905 | 906 | eslint-config-prettier@8.10.0: 907 | resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} 908 | hasBin: true 909 | peerDependencies: 910 | eslint: '>=7.0.0' 911 | 912 | eslint-plugin-jsonc@2.13.0: 913 | resolution: {integrity: sha512-2wWdJfpO/UbZzPDABuUVvlUQjfMJa2p2iQfYt/oWxOMpXCcjuiMUSaA02gtY/Dbu82vpaSqc+O7Xq6ECHwtIxA==} 914 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 915 | peerDependencies: 916 | eslint: '>=6.0.0' 917 | 918 | eslint-plugin-prettier@5.1.3: 919 | resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} 920 | engines: {node: ^14.18.0 || >=16.0.0} 921 | peerDependencies: 922 | '@types/eslint': '>=8.0.0' 923 | eslint: '>=8.0.0' 924 | eslint-config-prettier: '*' 925 | prettier: '>=3.0.0' 926 | peerDependenciesMeta: 927 | '@types/eslint': 928 | optional: true 929 | eslint-config-prettier: 930 | optional: true 931 | 932 | eslint-plugin-unicorn@47.0.0: 933 | resolution: {integrity: sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==} 934 | engines: {node: '>=16'} 935 | peerDependencies: 936 | eslint: '>=8.38.0' 937 | 938 | eslint-scope@7.2.2: 939 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 940 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 941 | 942 | eslint-visitor-keys@3.4.3: 943 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 944 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 945 | 946 | eslint@8.56.0: 947 | resolution: {integrity: sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==} 948 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 949 | hasBin: true 950 | 951 | espree@9.6.1: 952 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 953 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 954 | 955 | esquery@1.5.0: 956 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 957 | engines: {node: '>=0.10'} 958 | 959 | esrecurse@4.3.0: 960 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 961 | engines: {node: '>=4.0'} 962 | 963 | estraverse@5.3.0: 964 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 965 | engines: {node: '>=4.0'} 966 | 967 | esutils@2.0.3: 968 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 969 | engines: {node: '>=0.10.0'} 970 | 971 | etag@1.8.1: 972 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 973 | engines: {node: '>= 0.6'} 974 | 975 | event-target-shim@5.0.1: 976 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 977 | engines: {node: '>=6'} 978 | 979 | events@3.3.0: 980 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 981 | engines: {node: '>=0.8.x'} 982 | 983 | fast-deep-equal@3.1.3: 984 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 985 | 986 | fast-diff@1.3.0: 987 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 988 | 989 | fast-glob@3.3.2: 990 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 991 | engines: {node: '>=8.6.0'} 992 | 993 | fast-json-stable-stringify@2.1.0: 994 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 995 | 996 | fast-levenshtein@2.0.6: 997 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 998 | 999 | fast-redact@3.3.0: 1000 | resolution: {integrity: sha512-6T5V1QK1u4oF+ATxs1lWUmlEk6P2T9HqJG3e2DnHOdVgZy2rFJBoEnrIedcTXlkAHU/zKC+7KETJ+KGGKwxgMQ==} 1001 | engines: {node: '>=6'} 1002 | 1003 | fastest-levenshtein@1.0.16: 1004 | resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} 1005 | engines: {node: '>= 4.9.1'} 1006 | 1007 | fastq@1.16.0: 1008 | resolution: {integrity: sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==} 1009 | 1010 | file-entry-cache@6.0.1: 1011 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1012 | engines: {node: ^10.12.0 || >=12.0.0} 1013 | 1014 | file-type@19.0.0: 1015 | resolution: {integrity: sha512-s7cxa7/leUWLiXO78DVVfBVse+milos9FitauDLG1pI7lNaJ2+5lzPnr2N24ym+84HVwJL6hVuGfgVE+ALvU8Q==} 1016 | engines: {node: '>=18'} 1017 | 1018 | fill-range@7.0.1: 1019 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1020 | engines: {node: '>=8'} 1021 | 1022 | find-cache-dir@5.0.0: 1023 | resolution: {integrity: sha512-OuWNfjfP05JcpAP3JPgAKUhWefjMRfI5iAoSsvE24ANYWJaepAtlSgWECSVEuRgSXpyNEc9DJwG/TZpgcOqyig==} 1024 | engines: {node: '>=16'} 1025 | 1026 | find-up@4.1.0: 1027 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1028 | engines: {node: '>=8'} 1029 | 1030 | find-up@5.0.0: 1031 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1032 | engines: {node: '>=10'} 1033 | 1034 | find-up@6.3.0: 1035 | resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} 1036 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1037 | 1038 | flat-cache@3.2.0: 1039 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1040 | engines: {node: ^10.12.0 || >=12.0.0} 1041 | 1042 | flatted@3.2.9: 1043 | resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} 1044 | 1045 | flattie@1.1.0: 1046 | resolution: {integrity: sha512-xU99gDEnciIwJdGcBmNHnzTJ/w5AT+VFJOu6sTB6WM8diOYNA3Sa+K1DiEBQ7XH4QikQq3iFW1U+jRVcotQnBw==} 1047 | engines: {node: '>=8'} 1048 | 1049 | forwarded@0.2.0: 1050 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 1051 | engines: {node: '>= 0.6'} 1052 | 1053 | fresh@0.5.2: 1054 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 1055 | engines: {node: '>= 0.6'} 1056 | 1057 | fs.realpath@1.0.0: 1058 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1059 | 1060 | function-bind@1.1.2: 1061 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1062 | 1063 | get-caller-file@2.0.5: 1064 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 1065 | engines: {node: 6.* || 8.* || >= 10.*} 1066 | 1067 | get-east-asian-width@1.2.0: 1068 | resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} 1069 | engines: {node: '>=18'} 1070 | 1071 | get-intrinsic@1.2.2: 1072 | resolution: {integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==} 1073 | 1074 | get-source@2.0.12: 1075 | resolution: {integrity: sha512-X5+4+iD+HoSeEED+uwrQ07BOQr0kEDFMVqqpBuI+RaZBpBpHCuXxo70bjar6f0b0u/DQJsJ7ssurpP0V60Az+w==} 1076 | 1077 | getopts@2.3.0: 1078 | resolution: {integrity: sha512-5eDf9fuSXwxBL6q5HX+dhDj+dslFGWzU5thZ9kNKUkcPtaPdatmUFKwHFrLb/uf/WpA4BHET+AX3Scl56cAjpA==} 1079 | 1080 | glob-parent@5.1.2: 1081 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1082 | engines: {node: '>= 6'} 1083 | 1084 | glob-parent@6.0.2: 1085 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1086 | engines: {node: '>=10.13.0'} 1087 | 1088 | glob@7.2.3: 1089 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1090 | 1091 | globals@13.24.0: 1092 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1093 | engines: {node: '>=8'} 1094 | 1095 | globby@11.1.0: 1096 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1097 | engines: {node: '>=10'} 1098 | 1099 | gopd@1.0.1: 1100 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1101 | 1102 | graphemer@1.4.0: 1103 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1104 | 1105 | has-flag@3.0.0: 1106 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1107 | engines: {node: '>=4'} 1108 | 1109 | has-flag@4.0.0: 1110 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1111 | engines: {node: '>=8'} 1112 | 1113 | has-property-descriptors@1.0.1: 1114 | resolution: {integrity: sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==} 1115 | 1116 | has-proto@1.0.1: 1117 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} 1118 | engines: {node: '>= 0.4'} 1119 | 1120 | has-symbols@1.0.3: 1121 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1122 | engines: {node: '>= 0.4'} 1123 | 1124 | hasown@2.0.0: 1125 | resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} 1126 | engines: {node: '>= 0.4'} 1127 | 1128 | he@1.2.0: 1129 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1130 | hasBin: true 1131 | 1132 | hosted-git-info@2.8.9: 1133 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} 1134 | 1135 | http-errors@2.0.0: 1136 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 1137 | engines: {node: '>= 0.8'} 1138 | 1139 | iconv-lite@0.4.24: 1140 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1141 | engines: {node: '>=0.10.0'} 1142 | 1143 | ieee754@1.2.1: 1144 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 1145 | 1146 | ignore@5.3.0: 1147 | resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} 1148 | engines: {node: '>= 4'} 1149 | 1150 | import-fresh@3.3.0: 1151 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1152 | engines: {node: '>=6'} 1153 | 1154 | imurmurhash@0.1.4: 1155 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1156 | engines: {node: '>=0.8.19'} 1157 | 1158 | indent-string@4.0.0: 1159 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} 1160 | engines: {node: '>=8'} 1161 | 1162 | inflation@2.1.0: 1163 | resolution: {integrity: sha512-t54PPJHG1Pp7VQvxyVCJ9mBbjG3Hqryges9bXoOO6GExCPa+//i/d5GSuFtpx3ALLd7lgIAur6zrIlBQyJuMlQ==} 1164 | engines: {node: '>= 0.8.0'} 1165 | 1166 | inflight@1.0.6: 1167 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1168 | 1169 | inherits@2.0.4: 1170 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1171 | 1172 | ipaddr.js@1.9.1: 1173 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 1174 | engines: {node: '>= 0.10'} 1175 | 1176 | is-arrayish@0.2.1: 1177 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 1178 | 1179 | is-builtin-module@3.2.1: 1180 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} 1181 | engines: {node: '>=6'} 1182 | 1183 | is-core-module@2.13.1: 1184 | resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} 1185 | 1186 | is-extglob@2.1.1: 1187 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1188 | engines: {node: '>=0.10.0'} 1189 | 1190 | is-fullwidth-code-point@3.0.0: 1191 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1192 | engines: {node: '>=8'} 1193 | 1194 | is-fullwidth-code-point@4.0.0: 1195 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1196 | engines: {node: '>=12'} 1197 | 1198 | is-fullwidth-code-point@5.0.0: 1199 | resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} 1200 | engines: {node: '>=18'} 1201 | 1202 | is-glob@4.0.3: 1203 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1204 | engines: {node: '>=0.10.0'} 1205 | 1206 | is-number@7.0.0: 1207 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1208 | engines: {node: '>=0.12.0'} 1209 | 1210 | is-path-inside@3.0.3: 1211 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1212 | engines: {node: '>=8'} 1213 | 1214 | isarray@0.0.1: 1215 | resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} 1216 | 1217 | isarray@1.0.0: 1218 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 1219 | 1220 | isexe@2.0.0: 1221 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1222 | 1223 | jest-diff@29.7.0: 1224 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 1225 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1226 | 1227 | jest-get-type@29.6.3: 1228 | resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 1229 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1230 | 1231 | js-tokens@4.0.0: 1232 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1233 | 1234 | js-yaml@4.1.0: 1235 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1236 | hasBin: true 1237 | 1238 | jsesc@0.5.0: 1239 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} 1240 | hasBin: true 1241 | 1242 | jsesc@3.0.2: 1243 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} 1244 | engines: {node: '>=6'} 1245 | hasBin: true 1246 | 1247 | json-buffer@3.0.1: 1248 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1249 | 1250 | json-parse-even-better-errors@2.3.1: 1251 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 1252 | 1253 | json-schema-traverse@0.4.1: 1254 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1255 | 1256 | json-stable-stringify-without-jsonify@1.0.1: 1257 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1258 | 1259 | jsonc-eslint-parser@2.4.0: 1260 | resolution: {integrity: sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==} 1261 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1262 | 1263 | jsonschema@1.4.1: 1264 | resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} 1265 | 1266 | keyv@4.5.4: 1267 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1268 | 1269 | kleur@4.1.5: 1270 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1271 | engines: {node: '>=6'} 1272 | 1273 | levn@0.4.1: 1274 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1275 | engines: {node: '>= 0.8.0'} 1276 | 1277 | lines-and-columns@1.2.4: 1278 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1279 | 1280 | locate-path@5.0.0: 1281 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 1282 | engines: {node: '>=8'} 1283 | 1284 | locate-path@6.0.0: 1285 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1286 | engines: {node: '>=10'} 1287 | 1288 | locate-path@7.2.0: 1289 | resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} 1290 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1291 | 1292 | lodash.merge@4.6.2: 1293 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1294 | 1295 | lodash@4.17.21: 1296 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1297 | 1298 | log-update@6.0.0: 1299 | resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} 1300 | engines: {node: '>=18'} 1301 | 1302 | log-update@6.1.0: 1303 | resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} 1304 | engines: {node: '>=18'} 1305 | 1306 | loupe@3.1.2: 1307 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} 1308 | 1309 | lru-cache@6.0.0: 1310 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1311 | engines: {node: '>=10'} 1312 | 1313 | luxon@3.5.0: 1314 | resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} 1315 | engines: {node: '>=12'} 1316 | 1317 | make-error@1.3.6: 1318 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1319 | 1320 | media-typer@0.3.0: 1321 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 1322 | engines: {node: '>= 0.6'} 1323 | 1324 | media-typer@1.1.0: 1325 | resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} 1326 | engines: {node: '>= 0.8'} 1327 | 1328 | merge2@1.4.1: 1329 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1330 | engines: {node: '>= 8'} 1331 | 1332 | micromatch@4.0.5: 1333 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1334 | engines: {node: '>=8.6'} 1335 | 1336 | mime-db@1.52.0: 1337 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1338 | engines: {node: '>= 0.6'} 1339 | 1340 | mime-types@2.1.35: 1341 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1342 | engines: {node: '>= 0.6'} 1343 | 1344 | mimic-fn@2.1.0: 1345 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1346 | engines: {node: '>=6'} 1347 | 1348 | mimic-function@5.0.1: 1349 | resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1350 | engines: {node: '>=18'} 1351 | 1352 | min-indent@1.0.1: 1353 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} 1354 | engines: {node: '>=4'} 1355 | 1356 | minimatch@3.1.2: 1357 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1358 | 1359 | minimatch@9.0.3: 1360 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1361 | engines: {node: '>=16 || 14 >=14.17'} 1362 | 1363 | mkdirp@1.0.4: 1364 | resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} 1365 | engines: {node: '>=10'} 1366 | hasBin: true 1367 | 1368 | ms@2.1.2: 1369 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1370 | 1371 | ms@2.1.3: 1372 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1373 | 1374 | mustache@4.2.0: 1375 | resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} 1376 | hasBin: true 1377 | 1378 | natural-compare@1.4.0: 1379 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1380 | 1381 | negotiator@0.6.3: 1382 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 1383 | engines: {node: '>= 0.6'} 1384 | 1385 | node-cron@3.0.3: 1386 | resolution: {integrity: sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==} 1387 | engines: {node: '>=6.0.0'} 1388 | 1389 | noms@0.0.0: 1390 | resolution: {integrity: sha512-lNDU9VJaOPxUmXcLb+HQFeUgQQPtMI24Gt6hgfuMHRJgMRHMF/qZ4HJD3GDru4sSw9IQl2jPjAYnQrdIeLbwow==} 1391 | 1392 | normalize-package-data@2.5.0: 1393 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} 1394 | 1395 | object-inspect@1.13.1: 1396 | resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} 1397 | 1398 | on-exit-leak-free@2.1.2: 1399 | resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 1400 | engines: {node: '>=14.0.0'} 1401 | 1402 | on-finished@2.4.1: 1403 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1404 | engines: {node: '>= 0.8'} 1405 | 1406 | once@1.4.0: 1407 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1408 | 1409 | onetime@5.1.2: 1410 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1411 | engines: {node: '>=6'} 1412 | 1413 | onetime@7.0.0: 1414 | resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1415 | engines: {node: '>=18'} 1416 | 1417 | optionator@0.9.3: 1418 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1419 | engines: {node: '>= 0.8.0'} 1420 | 1421 | p-limit@2.3.0: 1422 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 1423 | engines: {node: '>=6'} 1424 | 1425 | p-limit@3.1.0: 1426 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1427 | engines: {node: '>=10'} 1428 | 1429 | p-limit@4.0.0: 1430 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} 1431 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1432 | 1433 | p-locate@4.1.0: 1434 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 1435 | engines: {node: '>=8'} 1436 | 1437 | p-locate@5.0.0: 1438 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1439 | engines: {node: '>=10'} 1440 | 1441 | p-locate@6.0.0: 1442 | resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} 1443 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1444 | 1445 | p-try@2.2.0: 1446 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 1447 | engines: {node: '>=6'} 1448 | 1449 | parent-module@1.0.1: 1450 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1451 | engines: {node: '>=6'} 1452 | 1453 | parse-imports@1.1.2: 1454 | resolution: {integrity: sha512-UgTSNWlBvx+f4nxVSH3fOyJPJKol8GkFuG8mN8q9FqtmJgwaEx0azPRlXXX0klNlRxoP2gwme00TPDSm6rm/IA==} 1455 | engines: {node: '>= 12.17'} 1456 | 1457 | parse-json@5.2.0: 1458 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 1459 | engines: {node: '>=8'} 1460 | 1461 | path-exists@4.0.0: 1462 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1463 | engines: {node: '>=8'} 1464 | 1465 | path-exists@5.0.0: 1466 | resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} 1467 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1468 | 1469 | path-is-absolute@1.0.1: 1470 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1471 | engines: {node: '>=0.10.0'} 1472 | 1473 | path-key@3.1.1: 1474 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1475 | engines: {node: '>=8'} 1476 | 1477 | path-parse@1.0.7: 1478 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1479 | 1480 | path-type@4.0.0: 1481 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1482 | engines: {node: '>=8'} 1483 | 1484 | pathval@2.0.0: 1485 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1486 | engines: {node: '>= 14.16'} 1487 | 1488 | peek-readable@5.0.0: 1489 | resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==} 1490 | engines: {node: '>=14.16'} 1491 | 1492 | picomatch@2.3.1: 1493 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1494 | engines: {node: '>=8.6'} 1495 | 1496 | pino-abstract-transport@1.1.0: 1497 | resolution: {integrity: sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA==} 1498 | 1499 | pino-std-serializers@6.2.2: 1500 | resolution: {integrity: sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA==} 1501 | 1502 | pino@8.17.2: 1503 | resolution: {integrity: sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ==} 1504 | hasBin: true 1505 | 1506 | pkg-dir@7.0.0: 1507 | resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} 1508 | engines: {node: '>=14.16'} 1509 | 1510 | pluralize@8.0.0: 1511 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} 1512 | engines: {node: '>=4'} 1513 | 1514 | prelude-ls@1.2.1: 1515 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1516 | engines: {node: '>= 0.8.0'} 1517 | 1518 | prettier-linter-helpers@1.0.0: 1519 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1520 | engines: {node: '>=6.0.0'} 1521 | 1522 | prettier@2.8.8: 1523 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} 1524 | engines: {node: '>=10.13.0'} 1525 | hasBin: true 1526 | 1527 | pretty-format@29.7.0: 1528 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1529 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1530 | 1531 | pretty-hrtime@1.0.3: 1532 | resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} 1533 | engines: {node: '>= 0.8'} 1534 | 1535 | printable-characters@1.0.42: 1536 | resolution: {integrity: sha512-dKp+C4iXWK4vVYZmYSd0KBH5F/h1HoZRsbJ82AVKRO3PEo8L4lBS/vLwhVtpwwuYcoIsVY+1JYKR268yn480uQ==} 1537 | 1538 | process-nextick-args@2.0.1: 1539 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 1540 | 1541 | process-warning@3.0.0: 1542 | resolution: {integrity: sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==} 1543 | 1544 | process@0.11.10: 1545 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 1546 | engines: {node: '>= 0.6.0'} 1547 | 1548 | proxy-addr@2.0.7: 1549 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1550 | engines: {node: '>= 0.10'} 1551 | 1552 | punycode@2.3.1: 1553 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1554 | engines: {node: '>=6'} 1555 | 1556 | qs@6.11.2: 1557 | resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} 1558 | engines: {node: '>=0.6'} 1559 | 1560 | queue-microtask@1.2.3: 1561 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1562 | 1563 | quick-format-unescaped@4.0.4: 1564 | resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 1565 | 1566 | random-bytes@1.0.0: 1567 | resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} 1568 | engines: {node: '>= 0.8'} 1569 | 1570 | raw-body@2.5.2: 1571 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 1572 | engines: {node: '>= 0.8'} 1573 | 1574 | react-is@18.3.1: 1575 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 1576 | 1577 | read-pkg-up@7.0.1: 1578 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} 1579 | engines: {node: '>=8'} 1580 | 1581 | read-pkg@5.2.0: 1582 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} 1583 | engines: {node: '>=8'} 1584 | 1585 | readable-stream@1.0.34: 1586 | resolution: {integrity: sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==} 1587 | 1588 | readable-stream@2.3.8: 1589 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 1590 | 1591 | readable-stream@3.6.2: 1592 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 1593 | engines: {node: '>= 6'} 1594 | 1595 | readable-stream@4.5.2: 1596 | resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} 1597 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1598 | 1599 | readable-web-to-node-stream@3.0.2: 1600 | resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} 1601 | engines: {node: '>=8'} 1602 | 1603 | readdirp@4.0.2: 1604 | resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} 1605 | engines: {node: '>= 14.16.0'} 1606 | 1607 | real-require@0.2.0: 1608 | resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 1609 | engines: {node: '>= 12.13.0'} 1610 | 1611 | regexp-tree@0.1.27: 1612 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} 1613 | hasBin: true 1614 | 1615 | regjsparser@0.10.0: 1616 | resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} 1617 | hasBin: true 1618 | 1619 | require-directory@2.1.1: 1620 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 1621 | engines: {node: '>=0.10.0'} 1622 | 1623 | resolve-from@4.0.0: 1624 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1625 | engines: {node: '>=4'} 1626 | 1627 | resolve@1.22.8: 1628 | resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} 1629 | hasBin: true 1630 | 1631 | restore-cursor@4.0.0: 1632 | resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} 1633 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1634 | 1635 | restore-cursor@5.1.0: 1636 | resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1637 | engines: {node: '>=18'} 1638 | 1639 | retry@0.13.1: 1640 | resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} 1641 | engines: {node: '>= 4'} 1642 | 1643 | reusify@1.0.4: 1644 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1645 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1646 | 1647 | rimraf@3.0.2: 1648 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1649 | hasBin: true 1650 | 1651 | run-parallel@1.2.0: 1652 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1653 | 1654 | safe-buffer@5.1.2: 1655 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1656 | 1657 | safe-buffer@5.2.1: 1658 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1659 | 1660 | safe-regex@2.1.1: 1661 | resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} 1662 | 1663 | safe-stable-stringify@2.4.3: 1664 | resolution: {integrity: sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==} 1665 | engines: {node: '>=10'} 1666 | 1667 | safer-buffer@2.1.2: 1668 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1669 | 1670 | secure-json-parse@2.7.0: 1671 | resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} 1672 | 1673 | semver@5.7.2: 1674 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} 1675 | hasBin: true 1676 | 1677 | semver@7.5.4: 1678 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1679 | engines: {node: '>=10'} 1680 | hasBin: true 1681 | 1682 | serialize-error@11.0.3: 1683 | resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==} 1684 | engines: {node: '>=14.16'} 1685 | 1686 | set-function-length@1.2.0: 1687 | resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} 1688 | engines: {node: '>= 0.4'} 1689 | 1690 | setprototypeof@1.2.0: 1691 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1692 | 1693 | shebang-command@2.0.0: 1694 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1695 | engines: {node: '>=8'} 1696 | 1697 | shebang-regex@3.0.0: 1698 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1699 | engines: {node: '>=8'} 1700 | 1701 | side-channel@1.0.4: 1702 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 1703 | 1704 | signal-exit@3.0.7: 1705 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1706 | 1707 | signal-exit@4.1.0: 1708 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1709 | engines: {node: '>=14'} 1710 | 1711 | slash@3.0.0: 1712 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1713 | engines: {node: '>=8'} 1714 | 1715 | slash@5.1.0: 1716 | resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} 1717 | engines: {node: '>=14.16'} 1718 | 1719 | slashes@3.0.12: 1720 | resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} 1721 | 1722 | slice-ansi@5.0.0: 1723 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1724 | engines: {node: '>=12'} 1725 | 1726 | slice-ansi@7.1.0: 1727 | resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} 1728 | engines: {node: '>=18'} 1729 | 1730 | slugify@1.6.6: 1731 | resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} 1732 | engines: {node: '>=8.0.0'} 1733 | 1734 | sonic-boom@3.8.0: 1735 | resolution: {integrity: sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA==} 1736 | 1737 | source-map@0.6.1: 1738 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1739 | engines: {node: '>=0.10.0'} 1740 | 1741 | spdx-correct@3.2.0: 1742 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} 1743 | 1744 | spdx-exceptions@2.4.0: 1745 | resolution: {integrity: sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==} 1746 | 1747 | spdx-expression-parse@3.0.1: 1748 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} 1749 | 1750 | spdx-license-ids@3.0.16: 1751 | resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} 1752 | 1753 | split-lines@3.0.0: 1754 | resolution: {integrity: sha512-d0TpRBL/VfKDXsk8JxPF7zgF5pCUDdBMSlEL36xBgVeaX448t+yGXcJaikUyzkoKOJ0l6KpMfygzJU9naIuivw==} 1755 | engines: {node: '>=12'} 1756 | 1757 | split2@4.2.0: 1758 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 1759 | engines: {node: '>= 10.x'} 1760 | 1761 | stacktracey@2.1.8: 1762 | resolution: {integrity: sha512-Kpij9riA+UNg7TnphqjH7/CzctQ/owJGNbFkfEeve4Z4uxT5+JapVLFXcsurIfN34gnTWZNJ/f7NMG0E8JDzTw==} 1763 | 1764 | statuses@2.0.1: 1765 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1766 | engines: {node: '>= 0.8'} 1767 | 1768 | string-width@4.2.3: 1769 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1770 | engines: {node: '>=8'} 1771 | 1772 | string-width@7.2.0: 1773 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1774 | engines: {node: '>=18'} 1775 | 1776 | string_decoder@0.10.31: 1777 | resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} 1778 | 1779 | string_decoder@1.1.1: 1780 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1781 | 1782 | string_decoder@1.3.0: 1783 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1784 | 1785 | strip-ansi@6.0.1: 1786 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1787 | engines: {node: '>=8'} 1788 | 1789 | strip-ansi@7.1.0: 1790 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1791 | engines: {node: '>=12'} 1792 | 1793 | strip-indent@3.0.0: 1794 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} 1795 | engines: {node: '>=8'} 1796 | 1797 | strip-json-comments@3.1.1: 1798 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1799 | engines: {node: '>=8'} 1800 | 1801 | strtok3@7.0.0: 1802 | resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==} 1803 | engines: {node: '>=14.16'} 1804 | 1805 | supports-color@10.0.0: 1806 | resolution: {integrity: sha512-HRVVSbCCMbj7/kdWF9Q+bbckjBHLtHMEoJWlkmYzzdwhYMkjkOwubLM6t7NbWKjgKamGDrWL1++KrjUO1t9oAQ==} 1807 | engines: {node: '>=18'} 1808 | 1809 | supports-color@5.5.0: 1810 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1811 | engines: {node: '>=4'} 1812 | 1813 | supports-color@7.2.0: 1814 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1815 | engines: {node: '>=8'} 1816 | 1817 | supports-color@9.4.0: 1818 | resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} 1819 | engines: {node: '>=12'} 1820 | 1821 | supports-preserve-symlinks-flag@1.0.0: 1822 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1823 | engines: {node: '>= 0.4'} 1824 | 1825 | synckit@0.6.2: 1826 | resolution: {integrity: sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==} 1827 | engines: {node: '>=12.20'} 1828 | 1829 | synckit@0.8.8: 1830 | resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} 1831 | engines: {node: ^14.18.0 || >=16.0.0} 1832 | 1833 | tempura@0.4.0: 1834 | resolution: {integrity: sha512-ghCAK7t3Yuy40NUA/pmS1aDY8M5MfZT4+S465S8YvwwDdgk3jLm/5BGwtMG/rMICDYY8T7Owe1qm91ArBOKd6w==} 1835 | engines: {node: '>=10'} 1836 | 1837 | terminal-size@4.0.0: 1838 | resolution: {integrity: sha512-rcdty1xZ2/BkWa4ANjWRp4JGpda2quksXIHgn5TMjNBPZfwzJIgR68DKfSYiTL+CZWowDX/sbOo5ME/FRURvYQ==} 1839 | engines: {node: '>=18'} 1840 | 1841 | text-table@0.2.0: 1842 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1843 | 1844 | thread-stream@2.4.1: 1845 | resolution: {integrity: sha512-d/Ex2iWd1whipbT681JmTINKw0ZwOUBZm7+Gjs64DHuX34mmw8vJL2bFAaNacaW72zYiTJxSHi5abUuOi5nsfg==} 1846 | 1847 | through2@2.0.5: 1848 | resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} 1849 | 1850 | time-span@5.1.0: 1851 | resolution: {integrity: sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==} 1852 | engines: {node: '>=12'} 1853 | 1854 | tmp-cache@1.1.0: 1855 | resolution: {integrity: sha512-j040fkL/x+XAZQ9K3bKGEPwgYhOZNBQLa3NXEADUiuno9C+3N2JJA4bVPDREixp604G3/vTXWA3DIPpA9lu1RQ==} 1856 | engines: {node: '>=6'} 1857 | 1858 | to-regex-range@5.0.1: 1859 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1860 | engines: {node: '>=8.0'} 1861 | 1862 | toidentifier@1.0.1: 1863 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 1864 | engines: {node: '>=0.6'} 1865 | 1866 | token-types@5.0.1: 1867 | resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==} 1868 | engines: {node: '>=14.16'} 1869 | 1870 | truncatise@0.0.8: 1871 | resolution: {integrity: sha512-cXzueh9pzBCsLzhToB4X4gZCb3KYkrsAcBAX97JnazE74HOl3cpBJYEV7nabHeG/6/WXCU5Yujlde/WPBUwnsg==} 1872 | 1873 | ts-api-utils@1.0.3: 1874 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} 1875 | engines: {node: '>=16.13.0'} 1876 | peerDependencies: 1877 | typescript: '>=4.2.0' 1878 | 1879 | ts-node-maintained@10.9.4: 1880 | resolution: {integrity: sha512-Fq4c+LoWee4E0YWDBsotcBR8CB9pStBYBUuanQjXuOlLFescZ4uEODG8mdpDGGWYSCCaQXBjEgXzLIGu/NbyNw==} 1881 | hasBin: true 1882 | peerDependencies: 1883 | '@swc/core': '>=1.2.50' 1884 | '@swc/wasm': '>=1.2.50' 1885 | '@types/node': '*' 1886 | typescript: '>=2.7' 1887 | peerDependenciesMeta: 1888 | '@swc/core': 1889 | optional: true 1890 | '@swc/wasm': 1891 | optional: true 1892 | 1893 | tslib@2.6.2: 1894 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1895 | 1896 | type-check@0.4.0: 1897 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1898 | engines: {node: '>= 0.8.0'} 1899 | 1900 | type-fest@0.20.2: 1901 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1902 | engines: {node: '>=10'} 1903 | 1904 | type-fest@0.6.0: 1905 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==} 1906 | engines: {node: '>=8'} 1907 | 1908 | type-fest@0.8.1: 1909 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} 1910 | engines: {node: '>=8'} 1911 | 1912 | type-fest@2.19.0: 1913 | resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} 1914 | engines: {node: '>=12.20'} 1915 | 1916 | type-fest@3.13.1: 1917 | resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} 1918 | engines: {node: '>=14.16'} 1919 | 1920 | type-is@1.6.18: 1921 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 1922 | engines: {node: '>= 0.6'} 1923 | 1924 | typescript@5.3.3: 1925 | resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} 1926 | engines: {node: '>=14.17'} 1927 | hasBin: true 1928 | 1929 | uid-safe@2.1.5: 1930 | resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} 1931 | engines: {node: '>= 0.8'} 1932 | 1933 | undici-types@6.20.0: 1934 | resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} 1935 | 1936 | unpipe@1.0.0: 1937 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 1938 | engines: {node: '>= 0.8'} 1939 | 1940 | untildify@4.0.0: 1941 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} 1942 | engines: {node: '>=8'} 1943 | 1944 | uri-js@4.4.1: 1945 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1946 | 1947 | util-deprecate@1.0.2: 1948 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1949 | 1950 | uuid@8.3.2: 1951 | resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} 1952 | hasBin: true 1953 | 1954 | v8-compile-cache-lib@3.0.1: 1955 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 1956 | 1957 | validate-npm-package-license@3.0.4: 1958 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} 1959 | 1960 | validator@13.11.0: 1961 | resolution: {integrity: sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==} 1962 | engines: {node: '>= 0.10'} 1963 | 1964 | vary@1.1.2: 1965 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 1966 | engines: {node: '>= 0.8'} 1967 | 1968 | which@2.0.2: 1969 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1970 | engines: {node: '>= 8'} 1971 | hasBin: true 1972 | 1973 | wordwrap@1.0.0: 1974 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 1975 | 1976 | wrap-ansi@7.0.0: 1977 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1978 | engines: {node: '>=10'} 1979 | 1980 | wrap-ansi@9.0.0: 1981 | resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} 1982 | engines: {node: '>=18'} 1983 | 1984 | wrappy@1.0.2: 1985 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1986 | 1987 | xtend@4.0.2: 1988 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 1989 | engines: {node: '>=0.4'} 1990 | 1991 | y18n@5.0.8: 1992 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 1993 | engines: {node: '>=10'} 1994 | 1995 | yallist@4.0.0: 1996 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1997 | 1998 | yargs-parser@20.2.9: 1999 | resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} 2000 | engines: {node: '>=10'} 2001 | 2002 | yargs-parser@21.1.1: 2003 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 2004 | engines: {node: '>=12'} 2005 | 2006 | yargs@16.2.0: 2007 | resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} 2008 | engines: {node: '>=10'} 2009 | 2010 | yn@3.1.1: 2011 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 2012 | engines: {node: '>=6'} 2013 | 2014 | yocto-queue@0.1.0: 2015 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2016 | engines: {node: '>=10'} 2017 | 2018 | yocto-queue@1.1.1: 2019 | resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} 2020 | engines: {node: '>=12.20'} 2021 | 2022 | youch-terminal@2.2.3: 2023 | resolution: {integrity: sha512-/PE77ZwG072tXBvF47S9RL9/G80u86icZ5QwyjblyM67L4n/T5qQeM3Xrecbu8kkDDr/9T/PTj/X+6G/OSRQug==} 2024 | 2025 | youch@3.3.3: 2026 | resolution: {integrity: sha512-qSFXUk3UZBLfggAW3dJKg0BMblG5biqSF8M34E06o5CSsZtH92u9Hqmj2RzGiHDi64fhe83+4tENFP2DB6t6ZA==} 2027 | 2028 | snapshots: 2029 | 2030 | '@aashutoshrathi/word-wrap@1.2.6': {} 2031 | 2032 | '@adonisjs/ace@13.0.0': 2033 | dependencies: 2034 | '@poppinss/cliui': 6.3.0 2035 | '@poppinss/hooks': 7.2.2 2036 | '@poppinss/macroable': 1.0.1 2037 | '@poppinss/prompts': 3.1.2 2038 | '@poppinss/utils': 6.7.1 2039 | fastest-levenshtein: 1.0.16 2040 | jsonschema: 1.4.1 2041 | string-width: 7.2.0 2042 | yargs-parser: 21.1.1 2043 | youch: 3.3.3 2044 | youch-terminal: 2.2.3 2045 | 2046 | '@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1)': 2047 | dependencies: 2048 | '@adonisjs/config': 5.0.1 2049 | '@adonisjs/fold': 10.0.1 2050 | '@poppinss/hooks': 7.2.2 2051 | '@poppinss/macroable': 1.0.1 2052 | '@poppinss/utils': 6.7.1 2053 | glob-parent: 6.0.2 2054 | tempura: 0.4.0 2055 | 2056 | '@adonisjs/bodyparser@10.0.1(@adonisjs/http-server@7.0.2(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/encryption@6.0.1)(@adonisjs/events@9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1)(@adonisjs/logger@6.0.1))': 2057 | dependencies: 2058 | '@adonisjs/http-server': 7.0.2(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/encryption@6.0.1)(@adonisjs/events@9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1)(@adonisjs/logger@6.0.1) 2059 | '@paralleldrive/cuid2': 2.2.2 2060 | '@poppinss/macroable': 1.0.1 2061 | '@poppinss/multiparty': 2.0.1 2062 | '@poppinss/utils': 6.7.1 2063 | '@types/qs': 6.9.11 2064 | bytes: 3.1.2 2065 | file-type: 19.0.0 2066 | inflation: 2.1.0 2067 | media-typer: 1.1.0 2068 | qs: 6.11.2 2069 | raw-body: 2.5.2 2070 | 2071 | '@adonisjs/config@5.0.1': 2072 | dependencies: 2073 | '@poppinss/utils': 6.7.1 2074 | 2075 | '@adonisjs/core@6.2.1': 2076 | dependencies: 2077 | '@adonisjs/ace': 13.0.0 2078 | '@adonisjs/application': 8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1) 2079 | '@adonisjs/bodyparser': 10.0.1(@adonisjs/http-server@7.0.2(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/encryption@6.0.1)(@adonisjs/events@9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1)(@adonisjs/logger@6.0.1)) 2080 | '@adonisjs/config': 5.0.1 2081 | '@adonisjs/encryption': 6.0.1 2082 | '@adonisjs/env': 5.0.1 2083 | '@adonisjs/events': 9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1) 2084 | '@adonisjs/fold': 10.0.1 2085 | '@adonisjs/hash': 9.0.1 2086 | '@adonisjs/http-server': 7.0.2(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/encryption@6.0.1)(@adonisjs/events@9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1)(@adonisjs/logger@6.0.1) 2087 | '@adonisjs/logger': 6.0.1 2088 | '@adonisjs/repl': 4.0.1 2089 | '@paralleldrive/cuid2': 2.2.2 2090 | '@poppinss/macroable': 1.0.1 2091 | '@poppinss/utils': 6.7.1 2092 | '@sindresorhus/is': 6.1.0 2093 | '@types/he': 1.2.3 2094 | he: 1.2.0 2095 | parse-imports: 1.1.2 2096 | pretty-hrtime: 1.0.3 2097 | string-width: 7.2.0 2098 | youch: 3.3.3 2099 | youch-terminal: 2.2.3 2100 | 2101 | '@adonisjs/encryption@6.0.1': 2102 | dependencies: 2103 | '@poppinss/utils': 6.7.1 2104 | 2105 | '@adonisjs/env@5.0.1': 2106 | dependencies: 2107 | '@poppinss/utils': 6.7.1 2108 | '@poppinss/validator-lite': 1.0.3 2109 | dotenv: 16.4.1 2110 | split-lines: 3.0.0 2111 | 2112 | '@adonisjs/eslint-config@1.2.1(eslint@8.56.0)(prettier@2.8.8)(typescript@5.3.3)': 2113 | dependencies: 2114 | '@adonisjs/eslint-plugin': 1.2.1(eslint@8.56.0)(typescript@5.3.3) 2115 | '@typescript-eslint/eslint-plugin': 6.19.1(@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3) 2116 | '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) 2117 | eslint: 8.56.0 2118 | eslint-config-prettier: 8.10.0(eslint@8.56.0) 2119 | eslint-plugin-jsonc: 2.13.0(eslint@8.56.0) 2120 | eslint-plugin-prettier: 5.1.3(eslint-config-prettier@8.10.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8) 2121 | eslint-plugin-unicorn: 47.0.0(eslint@8.56.0) 2122 | jsonc-eslint-parser: 2.4.0 2123 | prettier: 2.8.8 2124 | transitivePeerDependencies: 2125 | - '@types/eslint' 2126 | - supports-color 2127 | - typescript 2128 | 2129 | '@adonisjs/eslint-plugin@1.2.1(eslint@8.56.0)(typescript@5.3.3)': 2130 | dependencies: 2131 | '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) 2132 | transitivePeerDependencies: 2133 | - eslint 2134 | - supports-color 2135 | - typescript 2136 | 2137 | '@adonisjs/events@9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1)': 2138 | dependencies: 2139 | '@adonisjs/application': 8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1) 2140 | '@adonisjs/fold': 10.0.1 2141 | '@poppinss/utils': 6.7.1 2142 | '@sindresorhus/is': 6.1.0 2143 | emittery: 1.0.1 2144 | 2145 | '@adonisjs/fold@10.0.1': 2146 | dependencies: 2147 | '@poppinss/utils': 6.7.1 2148 | 2149 | '@adonisjs/hash@9.0.1': 2150 | dependencies: 2151 | '@phc/format': 1.0.0 2152 | '@poppinss/utils': 6.7.1 2153 | 2154 | '@adonisjs/http-server@7.0.2(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/encryption@6.0.1)(@adonisjs/events@9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1)(@adonisjs/logger@6.0.1)': 2155 | dependencies: 2156 | '@adonisjs/application': 8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1) 2157 | '@adonisjs/encryption': 6.0.1 2158 | '@adonisjs/events': 9.0.1(@adonisjs/application@8.0.2(@adonisjs/config@5.0.1)(@adonisjs/fold@10.0.1))(@adonisjs/fold@10.0.1) 2159 | '@adonisjs/fold': 10.0.1 2160 | '@adonisjs/logger': 6.0.1 2161 | '@paralleldrive/cuid2': 2.2.2 2162 | '@poppinss/macroable': 1.0.1 2163 | '@poppinss/matchit': 3.1.2 2164 | '@poppinss/middleware': 3.2.2 2165 | '@poppinss/utils': 6.7.1 2166 | '@sindresorhus/is': 6.1.0 2167 | accepts: 1.3.8 2168 | content-disposition: 0.5.4 2169 | cookie: 0.6.0 2170 | destroy: 1.2.0 2171 | encodeurl: 1.0.2 2172 | etag: 1.8.1 2173 | fresh: 0.5.2 2174 | mime-types: 2.1.35 2175 | on-finished: 2.4.1 2176 | proxy-addr: 2.0.7 2177 | qs: 6.11.2 2178 | tmp-cache: 1.1.0 2179 | type-is: 1.6.18 2180 | vary: 1.1.2 2181 | youch: 3.3.3 2182 | 2183 | '@adonisjs/logger@6.0.1': 2184 | dependencies: 2185 | '@poppinss/utils': 6.7.1 2186 | abstract-logging: 2.0.1 2187 | pino: 8.17.2 2188 | 2189 | '@adonisjs/prettier-config@1.2.1': {} 2190 | 2191 | '@adonisjs/repl@4.0.1': 2192 | dependencies: 2193 | '@poppinss/colors': 4.1.2 2194 | string-width: 7.2.0 2195 | 2196 | '@adonisjs/tsconfig@1.2.1': {} 2197 | 2198 | '@arr/every@1.0.1': {} 2199 | 2200 | '@babel/code-frame@7.23.5': 2201 | dependencies: 2202 | '@babel/highlight': 7.23.4 2203 | chalk: 2.4.2 2204 | 2205 | '@babel/helper-validator-identifier@7.22.20': {} 2206 | 2207 | '@babel/highlight@7.23.4': 2208 | dependencies: 2209 | '@babel/helper-validator-identifier': 7.22.20 2210 | chalk: 2.4.2 2211 | js-tokens: 4.0.0 2212 | 2213 | '@colors/colors@1.5.0': 2214 | optional: true 2215 | 2216 | '@cspotcode/source-map-support@0.8.1': 2217 | dependencies: 2218 | '@jridgewell/trace-mapping': 0.3.9 2219 | 2220 | '@eslint-community/eslint-utils@4.4.0(eslint@8.56.0)': 2221 | dependencies: 2222 | eslint: 8.56.0 2223 | eslint-visitor-keys: 3.4.3 2224 | 2225 | '@eslint-community/regexpp@4.10.0': {} 2226 | 2227 | '@eslint/eslintrc@2.1.4': 2228 | dependencies: 2229 | ajv: 6.12.6 2230 | debug: 4.3.4 2231 | espree: 9.6.1 2232 | globals: 13.24.0 2233 | ignore: 5.3.0 2234 | import-fresh: 3.3.0 2235 | js-yaml: 4.1.0 2236 | minimatch: 3.1.2 2237 | strip-json-comments: 3.1.1 2238 | transitivePeerDependencies: 2239 | - supports-color 2240 | 2241 | '@eslint/js@8.56.0': {} 2242 | 2243 | '@humanwhocodes/config-array@0.11.14': 2244 | dependencies: 2245 | '@humanwhocodes/object-schema': 2.0.2 2246 | debug: 4.3.4 2247 | minimatch: 3.1.2 2248 | transitivePeerDependencies: 2249 | - supports-color 2250 | 2251 | '@humanwhocodes/module-importer@1.0.1': {} 2252 | 2253 | '@humanwhocodes/object-schema@2.0.2': {} 2254 | 2255 | '@japa/assert@4.0.0(@japa/runner@3.1.4)': 2256 | dependencies: 2257 | '@japa/runner': 3.1.4 2258 | '@poppinss/macroable': 1.0.4 2259 | '@types/chai': 5.0.1 2260 | assertion-error: 2.0.1 2261 | chai: 5.1.2 2262 | 2263 | '@japa/core@9.0.1': 2264 | dependencies: 2265 | '@poppinss/cliui': 6.4.2 2266 | '@poppinss/hooks': 7.2.5 2267 | '@poppinss/macroable': 1.0.4 2268 | async-retry: 1.3.3 2269 | emittery: 1.0.3 2270 | string-width: 7.2.0 2271 | time-span: 5.1.0 2272 | 2273 | '@japa/errors-printer@3.0.4': 2274 | dependencies: 2275 | '@poppinss/colors': 4.1.4 2276 | jest-diff: 29.7.0 2277 | supports-color: 9.4.0 2278 | youch: 3.3.3 2279 | youch-terminal: 2.2.3 2280 | 2281 | '@japa/runner@3.1.4': 2282 | dependencies: 2283 | '@japa/core': 9.0.1 2284 | '@japa/errors-printer': 3.0.4 2285 | '@poppinss/colors': 4.1.4 2286 | '@poppinss/hooks': 7.2.5 2287 | fast-glob: 3.3.2 2288 | find-cache-dir: 5.0.0 2289 | getopts: 2.3.0 2290 | ms: 2.1.3 2291 | serialize-error: 11.0.3 2292 | slash: 5.1.0 2293 | supports-color: 9.4.0 2294 | 2295 | '@jest/schemas@29.6.3': 2296 | dependencies: 2297 | '@sinclair/typebox': 0.27.8 2298 | 2299 | '@jridgewell/resolve-uri@3.1.1': {} 2300 | 2301 | '@jridgewell/sourcemap-codec@1.4.15': {} 2302 | 2303 | '@jridgewell/trace-mapping@0.3.9': 2304 | dependencies: 2305 | '@jridgewell/resolve-uri': 3.1.1 2306 | '@jridgewell/sourcemap-codec': 1.4.15 2307 | 2308 | '@lukeed/ms@2.0.2': {} 2309 | 2310 | '@noble/hashes@1.3.3': {} 2311 | 2312 | '@nodelib/fs.scandir@2.1.5': 2313 | dependencies: 2314 | '@nodelib/fs.stat': 2.0.5 2315 | run-parallel: 1.2.0 2316 | 2317 | '@nodelib/fs.stat@2.0.5': {} 2318 | 2319 | '@nodelib/fs.walk@1.2.8': 2320 | dependencies: 2321 | '@nodelib/fs.scandir': 2.1.5 2322 | fastq: 1.16.0 2323 | 2324 | '@paralleldrive/cuid2@2.2.2': 2325 | dependencies: 2326 | '@noble/hashes': 1.3.3 2327 | 2328 | '@phc/format@1.0.0': {} 2329 | 2330 | '@pkgr/core@0.1.1': {} 2331 | 2332 | '@poppinss/cliui@6.3.0': 2333 | dependencies: 2334 | '@poppinss/colors': 4.1.2 2335 | cli-boxes: 3.0.0 2336 | cli-table3: 0.6.3 2337 | cli-truncate: 4.0.0 2338 | log-update: 6.0.0 2339 | pretty-hrtime: 1.0.3 2340 | string-width: 7.2.0 2341 | supports-color: 9.4.0 2342 | terminal-size: 4.0.0 2343 | wordwrap: 1.0.0 2344 | 2345 | '@poppinss/cliui@6.4.2': 2346 | dependencies: 2347 | '@poppinss/colors': 4.1.4 2348 | cli-boxes: 4.0.1 2349 | cli-table3: 0.6.5 2350 | cli-truncate: 4.0.0 2351 | log-update: 6.1.0 2352 | pretty-hrtime: 1.0.3 2353 | string-width: 7.2.0 2354 | supports-color: 10.0.0 2355 | terminal-size: 4.0.0 2356 | wordwrap: 1.0.0 2357 | 2358 | '@poppinss/colors@4.1.2': 2359 | dependencies: 2360 | kleur: 4.1.5 2361 | 2362 | '@poppinss/colors@4.1.4': 2363 | dependencies: 2364 | kleur: 4.1.5 2365 | 2366 | '@poppinss/hooks@7.2.2': {} 2367 | 2368 | '@poppinss/hooks@7.2.5': {} 2369 | 2370 | '@poppinss/macroable@1.0.1': {} 2371 | 2372 | '@poppinss/macroable@1.0.4': {} 2373 | 2374 | '@poppinss/matchit@3.1.2': 2375 | dependencies: 2376 | '@arr/every': 1.0.1 2377 | 2378 | '@poppinss/middleware@3.2.2': {} 2379 | 2380 | '@poppinss/multiparty@2.0.1': 2381 | dependencies: 2382 | http-errors: 2.0.0 2383 | safe-buffer: 5.2.1 2384 | uid-safe: 2.1.5 2385 | 2386 | '@poppinss/prompts@3.1.2': 2387 | dependencies: 2388 | '@poppinss/colors': 4.1.2 2389 | '@poppinss/utils': 6.7.1 2390 | enquirer: 2.4.1 2391 | 2392 | '@poppinss/utils@6.7.1': 2393 | dependencies: 2394 | '@lukeed/ms': 2.0.2 2395 | '@types/bytes': 3.1.4 2396 | '@types/pluralize': 0.0.33 2397 | bytes: 3.1.2 2398 | case-anything: 2.1.13 2399 | flattie: 1.1.0 2400 | pluralize: 8.0.0 2401 | safe-stable-stringify: 2.4.3 2402 | secure-json-parse: 2.7.0 2403 | slash: 5.1.0 2404 | slugify: 1.6.6 2405 | truncatise: 0.0.8 2406 | 2407 | '@poppinss/validator-lite@1.0.3': 2408 | dependencies: 2409 | validator: 13.11.0 2410 | 2411 | '@sinclair/typebox@0.27.8': {} 2412 | 2413 | '@sindresorhus/is@6.1.0': {} 2414 | 2415 | '@swc/core-darwin-arm64@1.3.105': 2416 | optional: true 2417 | 2418 | '@swc/core-darwin-x64@1.3.105': 2419 | optional: true 2420 | 2421 | '@swc/core-linux-arm-gnueabihf@1.3.105': 2422 | optional: true 2423 | 2424 | '@swc/core-linux-arm64-gnu@1.3.105': 2425 | optional: true 2426 | 2427 | '@swc/core-linux-arm64-musl@1.3.105': 2428 | optional: true 2429 | 2430 | '@swc/core-linux-x64-gnu@1.3.105': 2431 | optional: true 2432 | 2433 | '@swc/core-linux-x64-musl@1.3.105': 2434 | optional: true 2435 | 2436 | '@swc/core-win32-arm64-msvc@1.3.105': 2437 | optional: true 2438 | 2439 | '@swc/core-win32-ia32-msvc@1.3.105': 2440 | optional: true 2441 | 2442 | '@swc/core-win32-x64-msvc@1.3.105': 2443 | optional: true 2444 | 2445 | '@swc/core@1.3.105': 2446 | dependencies: 2447 | '@swc/counter': 0.1.2 2448 | '@swc/types': 0.1.5 2449 | optionalDependencies: 2450 | '@swc/core-darwin-arm64': 1.3.105 2451 | '@swc/core-darwin-x64': 1.3.105 2452 | '@swc/core-linux-arm-gnueabihf': 1.3.105 2453 | '@swc/core-linux-arm64-gnu': 1.3.105 2454 | '@swc/core-linux-arm64-musl': 1.3.105 2455 | '@swc/core-linux-x64-gnu': 1.3.105 2456 | '@swc/core-linux-x64-musl': 1.3.105 2457 | '@swc/core-win32-arm64-msvc': 1.3.105 2458 | '@swc/core-win32-ia32-msvc': 1.3.105 2459 | '@swc/core-win32-x64-msvc': 1.3.105 2460 | 2461 | '@swc/counter@0.1.2': {} 2462 | 2463 | '@swc/types@0.1.5': {} 2464 | 2465 | '@tokenizer/token@0.3.0': {} 2466 | 2467 | '@tsconfig/node10@1.0.9': {} 2468 | 2469 | '@tsconfig/node12@1.0.11': {} 2470 | 2471 | '@tsconfig/node14@1.0.3': {} 2472 | 2473 | '@tsconfig/node16@1.0.4': {} 2474 | 2475 | '@types/async-lock@1.4.2': {} 2476 | 2477 | '@types/bytes@3.1.4': {} 2478 | 2479 | '@types/chai@5.0.1': 2480 | dependencies: 2481 | '@types/deep-eql': 4.0.2 2482 | 2483 | '@types/deep-eql@4.0.2': {} 2484 | 2485 | '@types/he@1.2.3': {} 2486 | 2487 | '@types/json-schema@7.0.15': {} 2488 | 2489 | '@types/luxon@3.4.2': {} 2490 | 2491 | '@types/node-cron@3.0.11': {} 2492 | 2493 | '@types/node@22.10.1': 2494 | dependencies: 2495 | undici-types: 6.20.0 2496 | 2497 | '@types/normalize-package-data@2.4.4': {} 2498 | 2499 | '@types/pluralize@0.0.33': {} 2500 | 2501 | '@types/qs@6.9.11': {} 2502 | 2503 | '@types/semver@7.5.6': {} 2504 | 2505 | '@typescript-eslint/eslint-plugin@6.19.1(@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3))(eslint@8.56.0)(typescript@5.3.3)': 2506 | dependencies: 2507 | '@eslint-community/regexpp': 4.10.0 2508 | '@typescript-eslint/parser': 6.19.1(eslint@8.56.0)(typescript@5.3.3) 2509 | '@typescript-eslint/scope-manager': 6.19.1 2510 | '@typescript-eslint/type-utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) 2511 | '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) 2512 | '@typescript-eslint/visitor-keys': 6.19.1 2513 | debug: 4.3.4 2514 | eslint: 8.56.0 2515 | graphemer: 1.4.0 2516 | ignore: 5.3.0 2517 | natural-compare: 1.4.0 2518 | semver: 7.5.4 2519 | ts-api-utils: 1.0.3(typescript@5.3.3) 2520 | optionalDependencies: 2521 | typescript: 5.3.3 2522 | transitivePeerDependencies: 2523 | - supports-color 2524 | 2525 | '@typescript-eslint/parser@6.19.1(eslint@8.56.0)(typescript@5.3.3)': 2526 | dependencies: 2527 | '@typescript-eslint/scope-manager': 6.19.1 2528 | '@typescript-eslint/types': 6.19.1 2529 | '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) 2530 | '@typescript-eslint/visitor-keys': 6.19.1 2531 | debug: 4.3.4 2532 | eslint: 8.56.0 2533 | optionalDependencies: 2534 | typescript: 5.3.3 2535 | transitivePeerDependencies: 2536 | - supports-color 2537 | 2538 | '@typescript-eslint/scope-manager@6.19.1': 2539 | dependencies: 2540 | '@typescript-eslint/types': 6.19.1 2541 | '@typescript-eslint/visitor-keys': 6.19.1 2542 | 2543 | '@typescript-eslint/type-utils@6.19.1(eslint@8.56.0)(typescript@5.3.3)': 2544 | dependencies: 2545 | '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) 2546 | '@typescript-eslint/utils': 6.19.1(eslint@8.56.0)(typescript@5.3.3) 2547 | debug: 4.3.4 2548 | eslint: 8.56.0 2549 | ts-api-utils: 1.0.3(typescript@5.3.3) 2550 | optionalDependencies: 2551 | typescript: 5.3.3 2552 | transitivePeerDependencies: 2553 | - supports-color 2554 | 2555 | '@typescript-eslint/types@6.19.1': {} 2556 | 2557 | '@typescript-eslint/typescript-estree@6.19.1(typescript@5.3.3)': 2558 | dependencies: 2559 | '@typescript-eslint/types': 6.19.1 2560 | '@typescript-eslint/visitor-keys': 6.19.1 2561 | debug: 4.3.4 2562 | globby: 11.1.0 2563 | is-glob: 4.0.3 2564 | minimatch: 9.0.3 2565 | semver: 7.5.4 2566 | ts-api-utils: 1.0.3(typescript@5.3.3) 2567 | optionalDependencies: 2568 | typescript: 5.3.3 2569 | transitivePeerDependencies: 2570 | - supports-color 2571 | 2572 | '@typescript-eslint/utils@6.19.1(eslint@8.56.0)(typescript@5.3.3)': 2573 | dependencies: 2574 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 2575 | '@types/json-schema': 7.0.15 2576 | '@types/semver': 7.5.6 2577 | '@typescript-eslint/scope-manager': 6.19.1 2578 | '@typescript-eslint/types': 6.19.1 2579 | '@typescript-eslint/typescript-estree': 6.19.1(typescript@5.3.3) 2580 | eslint: 8.56.0 2581 | semver: 7.5.4 2582 | transitivePeerDependencies: 2583 | - supports-color 2584 | - typescript 2585 | 2586 | '@typescript-eslint/visitor-keys@6.19.1': 2587 | dependencies: 2588 | '@typescript-eslint/types': 6.19.1 2589 | eslint-visitor-keys: 3.4.3 2590 | 2591 | '@ungap/structured-clone@1.2.0': {} 2592 | 2593 | abort-controller@3.0.0: 2594 | dependencies: 2595 | event-target-shim: 5.0.1 2596 | 2597 | abstract-logging@2.0.1: {} 2598 | 2599 | accepts@1.3.8: 2600 | dependencies: 2601 | mime-types: 2.1.35 2602 | negotiator: 0.6.3 2603 | 2604 | acorn-jsx@5.3.2(acorn@8.11.3): 2605 | dependencies: 2606 | acorn: 8.11.3 2607 | 2608 | acorn-walk@8.3.2: {} 2609 | 2610 | acorn@8.11.3: {} 2611 | 2612 | ajv@6.12.6: 2613 | dependencies: 2614 | fast-deep-equal: 3.1.3 2615 | fast-json-stable-stringify: 2.1.0 2616 | json-schema-traverse: 0.4.1 2617 | uri-js: 4.4.1 2618 | 2619 | ansi-colors@4.1.3: {} 2620 | 2621 | ansi-escapes@6.2.0: 2622 | dependencies: 2623 | type-fest: 3.13.1 2624 | 2625 | ansi-escapes@7.0.0: 2626 | dependencies: 2627 | environment: 1.1.0 2628 | 2629 | ansi-regex@5.0.1: {} 2630 | 2631 | ansi-regex@6.0.1: {} 2632 | 2633 | ansi-styles@3.2.1: 2634 | dependencies: 2635 | color-convert: 1.9.3 2636 | 2637 | ansi-styles@4.3.0: 2638 | dependencies: 2639 | color-convert: 2.0.1 2640 | 2641 | ansi-styles@5.2.0: {} 2642 | 2643 | ansi-styles@6.2.1: {} 2644 | 2645 | arg@4.1.3: {} 2646 | 2647 | argparse@2.0.1: {} 2648 | 2649 | array-union@2.1.0: {} 2650 | 2651 | as-table@1.0.55: 2652 | dependencies: 2653 | printable-characters: 1.0.42 2654 | 2655 | assertion-error@2.0.1: {} 2656 | 2657 | async-lock@1.4.1: {} 2658 | 2659 | async-retry@1.3.3: 2660 | dependencies: 2661 | retry: 0.13.1 2662 | 2663 | atomic-sleep@1.0.0: {} 2664 | 2665 | balanced-match@1.0.2: {} 2666 | 2667 | base64-js@1.5.1: {} 2668 | 2669 | brace-expansion@1.1.11: 2670 | dependencies: 2671 | balanced-match: 1.0.2 2672 | concat-map: 0.0.1 2673 | 2674 | brace-expansion@2.0.1: 2675 | dependencies: 2676 | balanced-match: 1.0.2 2677 | 2678 | braces@3.0.2: 2679 | dependencies: 2680 | fill-range: 7.0.1 2681 | 2682 | buffer@6.0.3: 2683 | dependencies: 2684 | base64-js: 1.5.1 2685 | ieee754: 1.2.1 2686 | 2687 | builtin-modules@3.3.0: {} 2688 | 2689 | bytes@3.1.2: {} 2690 | 2691 | call-bind@1.0.5: 2692 | dependencies: 2693 | function-bind: 1.1.2 2694 | get-intrinsic: 1.2.2 2695 | set-function-length: 1.2.0 2696 | 2697 | callsites@3.1.0: {} 2698 | 2699 | case-anything@2.1.13: {} 2700 | 2701 | chai@5.1.2: 2702 | dependencies: 2703 | assertion-error: 2.0.1 2704 | check-error: 2.1.1 2705 | deep-eql: 5.0.2 2706 | loupe: 3.1.2 2707 | pathval: 2.0.0 2708 | 2709 | chalk@2.4.2: 2710 | dependencies: 2711 | ansi-styles: 3.2.1 2712 | escape-string-regexp: 1.0.5 2713 | supports-color: 5.5.0 2714 | 2715 | chalk@4.1.2: 2716 | dependencies: 2717 | ansi-styles: 4.3.0 2718 | supports-color: 7.2.0 2719 | 2720 | check-error@2.1.1: {} 2721 | 2722 | chokidar@4.0.2: 2723 | dependencies: 2724 | readdirp: 4.0.2 2725 | 2726 | ci-info@3.9.0: {} 2727 | 2728 | clean-regexp@1.0.0: 2729 | dependencies: 2730 | escape-string-regexp: 1.0.5 2731 | 2732 | cli-boxes@3.0.0: {} 2733 | 2734 | cli-boxes@4.0.1: {} 2735 | 2736 | cli-cursor@4.0.0: 2737 | dependencies: 2738 | restore-cursor: 4.0.0 2739 | 2740 | cli-cursor@5.0.0: 2741 | dependencies: 2742 | restore-cursor: 5.1.0 2743 | 2744 | cli-table3@0.6.3: 2745 | dependencies: 2746 | string-width: 4.2.3 2747 | optionalDependencies: 2748 | '@colors/colors': 1.5.0 2749 | 2750 | cli-table3@0.6.5: 2751 | dependencies: 2752 | string-width: 4.2.3 2753 | optionalDependencies: 2754 | '@colors/colors': 1.5.0 2755 | 2756 | cli-truncate@4.0.0: 2757 | dependencies: 2758 | slice-ansi: 5.0.0 2759 | string-width: 7.2.0 2760 | 2761 | cliui@7.0.4: 2762 | dependencies: 2763 | string-width: 4.2.3 2764 | strip-ansi: 6.0.1 2765 | wrap-ansi: 7.0.0 2766 | 2767 | color-convert@1.9.3: 2768 | dependencies: 2769 | color-name: 1.1.3 2770 | 2771 | color-convert@2.0.1: 2772 | dependencies: 2773 | color-name: 1.1.4 2774 | 2775 | color-name@1.1.3: {} 2776 | 2777 | color-name@1.1.4: {} 2778 | 2779 | common-path-prefix@3.0.0: {} 2780 | 2781 | concat-map@0.0.1: {} 2782 | 2783 | content-disposition@0.5.4: 2784 | dependencies: 2785 | safe-buffer: 5.2.1 2786 | 2787 | convert-hrtime@5.0.0: {} 2788 | 2789 | cookie@0.5.0: {} 2790 | 2791 | cookie@0.6.0: {} 2792 | 2793 | copyfiles@2.4.1: 2794 | dependencies: 2795 | glob: 7.2.3 2796 | minimatch: 3.1.2 2797 | mkdirp: 1.0.4 2798 | noms: 0.0.0 2799 | through2: 2.0.5 2800 | untildify: 4.0.0 2801 | yargs: 16.2.0 2802 | 2803 | core-util-is@1.0.3: {} 2804 | 2805 | create-require@1.1.1: {} 2806 | 2807 | cron-parser@5.0.4: 2808 | dependencies: 2809 | luxon: 3.5.0 2810 | 2811 | cross-spawn@7.0.3: 2812 | dependencies: 2813 | path-key: 3.1.1 2814 | shebang-command: 2.0.0 2815 | which: 2.0.2 2816 | 2817 | data-uri-to-buffer@2.0.2: {} 2818 | 2819 | debug@4.3.4: 2820 | dependencies: 2821 | ms: 2.1.2 2822 | 2823 | deep-eql@5.0.2: {} 2824 | 2825 | deep-is@0.1.4: {} 2826 | 2827 | define-data-property@1.1.1: 2828 | dependencies: 2829 | get-intrinsic: 1.2.2 2830 | gopd: 1.0.1 2831 | has-property-descriptors: 1.0.1 2832 | 2833 | depd@2.0.0: {} 2834 | 2835 | destroy@1.2.0: {} 2836 | 2837 | diff-sequences@29.6.3: {} 2838 | 2839 | diff@4.0.2: {} 2840 | 2841 | dir-glob@3.0.1: 2842 | dependencies: 2843 | path-type: 4.0.0 2844 | 2845 | doctrine@3.0.0: 2846 | dependencies: 2847 | esutils: 2.0.3 2848 | 2849 | dotenv@16.4.1: {} 2850 | 2851 | ee-first@1.1.1: {} 2852 | 2853 | emittery@1.0.1: {} 2854 | 2855 | emittery@1.0.3: {} 2856 | 2857 | emoji-regex@10.3.0: {} 2858 | 2859 | emoji-regex@8.0.0: {} 2860 | 2861 | encodeurl@1.0.2: {} 2862 | 2863 | enquirer@2.4.1: 2864 | dependencies: 2865 | ansi-colors: 4.1.3 2866 | strip-ansi: 6.0.1 2867 | 2868 | environment@1.1.0: {} 2869 | 2870 | error-ex@1.3.2: 2871 | dependencies: 2872 | is-arrayish: 0.2.1 2873 | 2874 | es-module-lexer@1.4.1: {} 2875 | 2876 | escalade@3.1.1: {} 2877 | 2878 | escape-string-regexp@1.0.5: {} 2879 | 2880 | escape-string-regexp@4.0.0: {} 2881 | 2882 | eslint-compat-utils@0.4.1(eslint@8.56.0): 2883 | dependencies: 2884 | eslint: 8.56.0 2885 | semver: 7.5.4 2886 | 2887 | eslint-config-prettier@8.10.0(eslint@8.56.0): 2888 | dependencies: 2889 | eslint: 8.56.0 2890 | 2891 | eslint-plugin-jsonc@2.13.0(eslint@8.56.0): 2892 | dependencies: 2893 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 2894 | eslint: 8.56.0 2895 | eslint-compat-utils: 0.4.1(eslint@8.56.0) 2896 | espree: 9.6.1 2897 | graphemer: 1.4.0 2898 | jsonc-eslint-parser: 2.4.0 2899 | natural-compare: 1.4.0 2900 | synckit: 0.6.2 2901 | 2902 | eslint-plugin-prettier@5.1.3(eslint-config-prettier@8.10.0(eslint@8.56.0))(eslint@8.56.0)(prettier@2.8.8): 2903 | dependencies: 2904 | eslint: 8.56.0 2905 | prettier: 2.8.8 2906 | prettier-linter-helpers: 1.0.0 2907 | synckit: 0.8.8 2908 | optionalDependencies: 2909 | eslint-config-prettier: 8.10.0(eslint@8.56.0) 2910 | 2911 | eslint-plugin-unicorn@47.0.0(eslint@8.56.0): 2912 | dependencies: 2913 | '@babel/helper-validator-identifier': 7.22.20 2914 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 2915 | ci-info: 3.9.0 2916 | clean-regexp: 1.0.0 2917 | eslint: 8.56.0 2918 | esquery: 1.5.0 2919 | indent-string: 4.0.0 2920 | is-builtin-module: 3.2.1 2921 | jsesc: 3.0.2 2922 | lodash: 4.17.21 2923 | pluralize: 8.0.0 2924 | read-pkg-up: 7.0.1 2925 | regexp-tree: 0.1.27 2926 | regjsparser: 0.10.0 2927 | safe-regex: 2.1.1 2928 | semver: 7.5.4 2929 | strip-indent: 3.0.0 2930 | 2931 | eslint-scope@7.2.2: 2932 | dependencies: 2933 | esrecurse: 4.3.0 2934 | estraverse: 5.3.0 2935 | 2936 | eslint-visitor-keys@3.4.3: {} 2937 | 2938 | eslint@8.56.0: 2939 | dependencies: 2940 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) 2941 | '@eslint-community/regexpp': 4.10.0 2942 | '@eslint/eslintrc': 2.1.4 2943 | '@eslint/js': 8.56.0 2944 | '@humanwhocodes/config-array': 0.11.14 2945 | '@humanwhocodes/module-importer': 1.0.1 2946 | '@nodelib/fs.walk': 1.2.8 2947 | '@ungap/structured-clone': 1.2.0 2948 | ajv: 6.12.6 2949 | chalk: 4.1.2 2950 | cross-spawn: 7.0.3 2951 | debug: 4.3.4 2952 | doctrine: 3.0.0 2953 | escape-string-regexp: 4.0.0 2954 | eslint-scope: 7.2.2 2955 | eslint-visitor-keys: 3.4.3 2956 | espree: 9.6.1 2957 | esquery: 1.5.0 2958 | esutils: 2.0.3 2959 | fast-deep-equal: 3.1.3 2960 | file-entry-cache: 6.0.1 2961 | find-up: 5.0.0 2962 | glob-parent: 6.0.2 2963 | globals: 13.24.0 2964 | graphemer: 1.4.0 2965 | ignore: 5.3.0 2966 | imurmurhash: 0.1.4 2967 | is-glob: 4.0.3 2968 | is-path-inside: 3.0.3 2969 | js-yaml: 4.1.0 2970 | json-stable-stringify-without-jsonify: 1.0.1 2971 | levn: 0.4.1 2972 | lodash.merge: 4.6.2 2973 | minimatch: 3.1.2 2974 | natural-compare: 1.4.0 2975 | optionator: 0.9.3 2976 | strip-ansi: 6.0.1 2977 | text-table: 0.2.0 2978 | transitivePeerDependencies: 2979 | - supports-color 2980 | 2981 | espree@9.6.1: 2982 | dependencies: 2983 | acorn: 8.11.3 2984 | acorn-jsx: 5.3.2(acorn@8.11.3) 2985 | eslint-visitor-keys: 3.4.3 2986 | 2987 | esquery@1.5.0: 2988 | dependencies: 2989 | estraverse: 5.3.0 2990 | 2991 | esrecurse@4.3.0: 2992 | dependencies: 2993 | estraverse: 5.3.0 2994 | 2995 | estraverse@5.3.0: {} 2996 | 2997 | esutils@2.0.3: {} 2998 | 2999 | etag@1.8.1: {} 3000 | 3001 | event-target-shim@5.0.1: {} 3002 | 3003 | events@3.3.0: {} 3004 | 3005 | fast-deep-equal@3.1.3: {} 3006 | 3007 | fast-diff@1.3.0: {} 3008 | 3009 | fast-glob@3.3.2: 3010 | dependencies: 3011 | '@nodelib/fs.stat': 2.0.5 3012 | '@nodelib/fs.walk': 1.2.8 3013 | glob-parent: 5.1.2 3014 | merge2: 1.4.1 3015 | micromatch: 4.0.5 3016 | 3017 | fast-json-stable-stringify@2.1.0: {} 3018 | 3019 | fast-levenshtein@2.0.6: {} 3020 | 3021 | fast-redact@3.3.0: {} 3022 | 3023 | fastest-levenshtein@1.0.16: {} 3024 | 3025 | fastq@1.16.0: 3026 | dependencies: 3027 | reusify: 1.0.4 3028 | 3029 | file-entry-cache@6.0.1: 3030 | dependencies: 3031 | flat-cache: 3.2.0 3032 | 3033 | file-type@19.0.0: 3034 | dependencies: 3035 | readable-web-to-node-stream: 3.0.2 3036 | strtok3: 7.0.0 3037 | token-types: 5.0.1 3038 | 3039 | fill-range@7.0.1: 3040 | dependencies: 3041 | to-regex-range: 5.0.1 3042 | 3043 | find-cache-dir@5.0.0: 3044 | dependencies: 3045 | common-path-prefix: 3.0.0 3046 | pkg-dir: 7.0.0 3047 | 3048 | find-up@4.1.0: 3049 | dependencies: 3050 | locate-path: 5.0.0 3051 | path-exists: 4.0.0 3052 | 3053 | find-up@5.0.0: 3054 | dependencies: 3055 | locate-path: 6.0.0 3056 | path-exists: 4.0.0 3057 | 3058 | find-up@6.3.0: 3059 | dependencies: 3060 | locate-path: 7.2.0 3061 | path-exists: 5.0.0 3062 | 3063 | flat-cache@3.2.0: 3064 | dependencies: 3065 | flatted: 3.2.9 3066 | keyv: 4.5.4 3067 | rimraf: 3.0.2 3068 | 3069 | flatted@3.2.9: {} 3070 | 3071 | flattie@1.1.0: {} 3072 | 3073 | forwarded@0.2.0: {} 3074 | 3075 | fresh@0.5.2: {} 3076 | 3077 | fs.realpath@1.0.0: {} 3078 | 3079 | function-bind@1.1.2: {} 3080 | 3081 | get-caller-file@2.0.5: {} 3082 | 3083 | get-east-asian-width@1.2.0: {} 3084 | 3085 | get-intrinsic@1.2.2: 3086 | dependencies: 3087 | function-bind: 1.1.2 3088 | has-proto: 1.0.1 3089 | has-symbols: 1.0.3 3090 | hasown: 2.0.0 3091 | 3092 | get-source@2.0.12: 3093 | dependencies: 3094 | data-uri-to-buffer: 2.0.2 3095 | source-map: 0.6.1 3096 | 3097 | getopts@2.3.0: {} 3098 | 3099 | glob-parent@5.1.2: 3100 | dependencies: 3101 | is-glob: 4.0.3 3102 | 3103 | glob-parent@6.0.2: 3104 | dependencies: 3105 | is-glob: 4.0.3 3106 | 3107 | glob@7.2.3: 3108 | dependencies: 3109 | fs.realpath: 1.0.0 3110 | inflight: 1.0.6 3111 | inherits: 2.0.4 3112 | minimatch: 3.1.2 3113 | once: 1.4.0 3114 | path-is-absolute: 1.0.1 3115 | 3116 | globals@13.24.0: 3117 | dependencies: 3118 | type-fest: 0.20.2 3119 | 3120 | globby@11.1.0: 3121 | dependencies: 3122 | array-union: 2.1.0 3123 | dir-glob: 3.0.1 3124 | fast-glob: 3.3.2 3125 | ignore: 5.3.0 3126 | merge2: 1.4.1 3127 | slash: 3.0.0 3128 | 3129 | gopd@1.0.1: 3130 | dependencies: 3131 | get-intrinsic: 1.2.2 3132 | 3133 | graphemer@1.4.0: {} 3134 | 3135 | has-flag@3.0.0: {} 3136 | 3137 | has-flag@4.0.0: {} 3138 | 3139 | has-property-descriptors@1.0.1: 3140 | dependencies: 3141 | get-intrinsic: 1.2.2 3142 | 3143 | has-proto@1.0.1: {} 3144 | 3145 | has-symbols@1.0.3: {} 3146 | 3147 | hasown@2.0.0: 3148 | dependencies: 3149 | function-bind: 1.1.2 3150 | 3151 | he@1.2.0: {} 3152 | 3153 | hosted-git-info@2.8.9: {} 3154 | 3155 | http-errors@2.0.0: 3156 | dependencies: 3157 | depd: 2.0.0 3158 | inherits: 2.0.4 3159 | setprototypeof: 1.2.0 3160 | statuses: 2.0.1 3161 | toidentifier: 1.0.1 3162 | 3163 | iconv-lite@0.4.24: 3164 | dependencies: 3165 | safer-buffer: 2.1.2 3166 | 3167 | ieee754@1.2.1: {} 3168 | 3169 | ignore@5.3.0: {} 3170 | 3171 | import-fresh@3.3.0: 3172 | dependencies: 3173 | parent-module: 1.0.1 3174 | resolve-from: 4.0.0 3175 | 3176 | imurmurhash@0.1.4: {} 3177 | 3178 | indent-string@4.0.0: {} 3179 | 3180 | inflation@2.1.0: {} 3181 | 3182 | inflight@1.0.6: 3183 | dependencies: 3184 | once: 1.4.0 3185 | wrappy: 1.0.2 3186 | 3187 | inherits@2.0.4: {} 3188 | 3189 | ipaddr.js@1.9.1: {} 3190 | 3191 | is-arrayish@0.2.1: {} 3192 | 3193 | is-builtin-module@3.2.1: 3194 | dependencies: 3195 | builtin-modules: 3.3.0 3196 | 3197 | is-core-module@2.13.1: 3198 | dependencies: 3199 | hasown: 2.0.0 3200 | 3201 | is-extglob@2.1.1: {} 3202 | 3203 | is-fullwidth-code-point@3.0.0: {} 3204 | 3205 | is-fullwidth-code-point@4.0.0: {} 3206 | 3207 | is-fullwidth-code-point@5.0.0: 3208 | dependencies: 3209 | get-east-asian-width: 1.2.0 3210 | 3211 | is-glob@4.0.3: 3212 | dependencies: 3213 | is-extglob: 2.1.1 3214 | 3215 | is-number@7.0.0: {} 3216 | 3217 | is-path-inside@3.0.3: {} 3218 | 3219 | isarray@0.0.1: {} 3220 | 3221 | isarray@1.0.0: {} 3222 | 3223 | isexe@2.0.0: {} 3224 | 3225 | jest-diff@29.7.0: 3226 | dependencies: 3227 | chalk: 4.1.2 3228 | diff-sequences: 29.6.3 3229 | jest-get-type: 29.6.3 3230 | pretty-format: 29.7.0 3231 | 3232 | jest-get-type@29.6.3: {} 3233 | 3234 | js-tokens@4.0.0: {} 3235 | 3236 | js-yaml@4.1.0: 3237 | dependencies: 3238 | argparse: 2.0.1 3239 | 3240 | jsesc@0.5.0: {} 3241 | 3242 | jsesc@3.0.2: {} 3243 | 3244 | json-buffer@3.0.1: {} 3245 | 3246 | json-parse-even-better-errors@2.3.1: {} 3247 | 3248 | json-schema-traverse@0.4.1: {} 3249 | 3250 | json-stable-stringify-without-jsonify@1.0.1: {} 3251 | 3252 | jsonc-eslint-parser@2.4.0: 3253 | dependencies: 3254 | acorn: 8.11.3 3255 | eslint-visitor-keys: 3.4.3 3256 | espree: 9.6.1 3257 | semver: 7.5.4 3258 | 3259 | jsonschema@1.4.1: {} 3260 | 3261 | keyv@4.5.4: 3262 | dependencies: 3263 | json-buffer: 3.0.1 3264 | 3265 | kleur@4.1.5: {} 3266 | 3267 | levn@0.4.1: 3268 | dependencies: 3269 | prelude-ls: 1.2.1 3270 | type-check: 0.4.0 3271 | 3272 | lines-and-columns@1.2.4: {} 3273 | 3274 | locate-path@5.0.0: 3275 | dependencies: 3276 | p-locate: 4.1.0 3277 | 3278 | locate-path@6.0.0: 3279 | dependencies: 3280 | p-locate: 5.0.0 3281 | 3282 | locate-path@7.2.0: 3283 | dependencies: 3284 | p-locate: 6.0.0 3285 | 3286 | lodash.merge@4.6.2: {} 3287 | 3288 | lodash@4.17.21: {} 3289 | 3290 | log-update@6.0.0: 3291 | dependencies: 3292 | ansi-escapes: 6.2.0 3293 | cli-cursor: 4.0.0 3294 | slice-ansi: 7.1.0 3295 | strip-ansi: 7.1.0 3296 | wrap-ansi: 9.0.0 3297 | 3298 | log-update@6.1.0: 3299 | dependencies: 3300 | ansi-escapes: 7.0.0 3301 | cli-cursor: 5.0.0 3302 | slice-ansi: 7.1.0 3303 | strip-ansi: 7.1.0 3304 | wrap-ansi: 9.0.0 3305 | 3306 | loupe@3.1.2: {} 3307 | 3308 | lru-cache@6.0.0: 3309 | dependencies: 3310 | yallist: 4.0.0 3311 | 3312 | luxon@3.5.0: {} 3313 | 3314 | make-error@1.3.6: {} 3315 | 3316 | media-typer@0.3.0: {} 3317 | 3318 | media-typer@1.1.0: {} 3319 | 3320 | merge2@1.4.1: {} 3321 | 3322 | micromatch@4.0.5: 3323 | dependencies: 3324 | braces: 3.0.2 3325 | picomatch: 2.3.1 3326 | 3327 | mime-db@1.52.0: {} 3328 | 3329 | mime-types@2.1.35: 3330 | dependencies: 3331 | mime-db: 1.52.0 3332 | 3333 | mimic-fn@2.1.0: {} 3334 | 3335 | mimic-function@5.0.1: {} 3336 | 3337 | min-indent@1.0.1: {} 3338 | 3339 | minimatch@3.1.2: 3340 | dependencies: 3341 | brace-expansion: 1.1.11 3342 | 3343 | minimatch@9.0.3: 3344 | dependencies: 3345 | brace-expansion: 2.0.1 3346 | 3347 | mkdirp@1.0.4: {} 3348 | 3349 | ms@2.1.2: {} 3350 | 3351 | ms@2.1.3: {} 3352 | 3353 | mustache@4.2.0: {} 3354 | 3355 | natural-compare@1.4.0: {} 3356 | 3357 | negotiator@0.6.3: {} 3358 | 3359 | node-cron@3.0.3: 3360 | dependencies: 3361 | uuid: 8.3.2 3362 | 3363 | noms@0.0.0: 3364 | dependencies: 3365 | inherits: 2.0.4 3366 | readable-stream: 1.0.34 3367 | 3368 | normalize-package-data@2.5.0: 3369 | dependencies: 3370 | hosted-git-info: 2.8.9 3371 | resolve: 1.22.8 3372 | semver: 5.7.2 3373 | validate-npm-package-license: 3.0.4 3374 | 3375 | object-inspect@1.13.1: {} 3376 | 3377 | on-exit-leak-free@2.1.2: {} 3378 | 3379 | on-finished@2.4.1: 3380 | dependencies: 3381 | ee-first: 1.1.1 3382 | 3383 | once@1.4.0: 3384 | dependencies: 3385 | wrappy: 1.0.2 3386 | 3387 | onetime@5.1.2: 3388 | dependencies: 3389 | mimic-fn: 2.1.0 3390 | 3391 | onetime@7.0.0: 3392 | dependencies: 3393 | mimic-function: 5.0.1 3394 | 3395 | optionator@0.9.3: 3396 | dependencies: 3397 | '@aashutoshrathi/word-wrap': 1.2.6 3398 | deep-is: 0.1.4 3399 | fast-levenshtein: 2.0.6 3400 | levn: 0.4.1 3401 | prelude-ls: 1.2.1 3402 | type-check: 0.4.0 3403 | 3404 | p-limit@2.3.0: 3405 | dependencies: 3406 | p-try: 2.2.0 3407 | 3408 | p-limit@3.1.0: 3409 | dependencies: 3410 | yocto-queue: 0.1.0 3411 | 3412 | p-limit@4.0.0: 3413 | dependencies: 3414 | yocto-queue: 1.1.1 3415 | 3416 | p-locate@4.1.0: 3417 | dependencies: 3418 | p-limit: 2.3.0 3419 | 3420 | p-locate@5.0.0: 3421 | dependencies: 3422 | p-limit: 3.1.0 3423 | 3424 | p-locate@6.0.0: 3425 | dependencies: 3426 | p-limit: 4.0.0 3427 | 3428 | p-try@2.2.0: {} 3429 | 3430 | parent-module@1.0.1: 3431 | dependencies: 3432 | callsites: 3.1.0 3433 | 3434 | parse-imports@1.1.2: 3435 | dependencies: 3436 | es-module-lexer: 1.4.1 3437 | slashes: 3.0.12 3438 | 3439 | parse-json@5.2.0: 3440 | dependencies: 3441 | '@babel/code-frame': 7.23.5 3442 | error-ex: 1.3.2 3443 | json-parse-even-better-errors: 2.3.1 3444 | lines-and-columns: 1.2.4 3445 | 3446 | path-exists@4.0.0: {} 3447 | 3448 | path-exists@5.0.0: {} 3449 | 3450 | path-is-absolute@1.0.1: {} 3451 | 3452 | path-key@3.1.1: {} 3453 | 3454 | path-parse@1.0.7: {} 3455 | 3456 | path-type@4.0.0: {} 3457 | 3458 | pathval@2.0.0: {} 3459 | 3460 | peek-readable@5.0.0: {} 3461 | 3462 | picomatch@2.3.1: {} 3463 | 3464 | pino-abstract-transport@1.1.0: 3465 | dependencies: 3466 | readable-stream: 4.5.2 3467 | split2: 4.2.0 3468 | 3469 | pino-std-serializers@6.2.2: {} 3470 | 3471 | pino@8.17.2: 3472 | dependencies: 3473 | atomic-sleep: 1.0.0 3474 | fast-redact: 3.3.0 3475 | on-exit-leak-free: 2.1.2 3476 | pino-abstract-transport: 1.1.0 3477 | pino-std-serializers: 6.2.2 3478 | process-warning: 3.0.0 3479 | quick-format-unescaped: 4.0.4 3480 | real-require: 0.2.0 3481 | safe-stable-stringify: 2.4.3 3482 | sonic-boom: 3.8.0 3483 | thread-stream: 2.4.1 3484 | 3485 | pkg-dir@7.0.0: 3486 | dependencies: 3487 | find-up: 6.3.0 3488 | 3489 | pluralize@8.0.0: {} 3490 | 3491 | prelude-ls@1.2.1: {} 3492 | 3493 | prettier-linter-helpers@1.0.0: 3494 | dependencies: 3495 | fast-diff: 1.3.0 3496 | 3497 | prettier@2.8.8: {} 3498 | 3499 | pretty-format@29.7.0: 3500 | dependencies: 3501 | '@jest/schemas': 29.6.3 3502 | ansi-styles: 5.2.0 3503 | react-is: 18.3.1 3504 | 3505 | pretty-hrtime@1.0.3: {} 3506 | 3507 | printable-characters@1.0.42: {} 3508 | 3509 | process-nextick-args@2.0.1: {} 3510 | 3511 | process-warning@3.0.0: {} 3512 | 3513 | process@0.11.10: {} 3514 | 3515 | proxy-addr@2.0.7: 3516 | dependencies: 3517 | forwarded: 0.2.0 3518 | ipaddr.js: 1.9.1 3519 | 3520 | punycode@2.3.1: {} 3521 | 3522 | qs@6.11.2: 3523 | dependencies: 3524 | side-channel: 1.0.4 3525 | 3526 | queue-microtask@1.2.3: {} 3527 | 3528 | quick-format-unescaped@4.0.4: {} 3529 | 3530 | random-bytes@1.0.0: {} 3531 | 3532 | raw-body@2.5.2: 3533 | dependencies: 3534 | bytes: 3.1.2 3535 | http-errors: 2.0.0 3536 | iconv-lite: 0.4.24 3537 | unpipe: 1.0.0 3538 | 3539 | react-is@18.3.1: {} 3540 | 3541 | read-pkg-up@7.0.1: 3542 | dependencies: 3543 | find-up: 4.1.0 3544 | read-pkg: 5.2.0 3545 | type-fest: 0.8.1 3546 | 3547 | read-pkg@5.2.0: 3548 | dependencies: 3549 | '@types/normalize-package-data': 2.4.4 3550 | normalize-package-data: 2.5.0 3551 | parse-json: 5.2.0 3552 | type-fest: 0.6.0 3553 | 3554 | readable-stream@1.0.34: 3555 | dependencies: 3556 | core-util-is: 1.0.3 3557 | inherits: 2.0.4 3558 | isarray: 0.0.1 3559 | string_decoder: 0.10.31 3560 | 3561 | readable-stream@2.3.8: 3562 | dependencies: 3563 | core-util-is: 1.0.3 3564 | inherits: 2.0.4 3565 | isarray: 1.0.0 3566 | process-nextick-args: 2.0.1 3567 | safe-buffer: 5.1.2 3568 | string_decoder: 1.1.1 3569 | util-deprecate: 1.0.2 3570 | 3571 | readable-stream@3.6.2: 3572 | dependencies: 3573 | inherits: 2.0.4 3574 | string_decoder: 1.3.0 3575 | util-deprecate: 1.0.2 3576 | 3577 | readable-stream@4.5.2: 3578 | dependencies: 3579 | abort-controller: 3.0.0 3580 | buffer: 6.0.3 3581 | events: 3.3.0 3582 | process: 0.11.10 3583 | string_decoder: 1.3.0 3584 | 3585 | readable-web-to-node-stream@3.0.2: 3586 | dependencies: 3587 | readable-stream: 3.6.2 3588 | 3589 | readdirp@4.0.2: {} 3590 | 3591 | real-require@0.2.0: {} 3592 | 3593 | regexp-tree@0.1.27: {} 3594 | 3595 | regjsparser@0.10.0: 3596 | dependencies: 3597 | jsesc: 0.5.0 3598 | 3599 | require-directory@2.1.1: {} 3600 | 3601 | resolve-from@4.0.0: {} 3602 | 3603 | resolve@1.22.8: 3604 | dependencies: 3605 | is-core-module: 2.13.1 3606 | path-parse: 1.0.7 3607 | supports-preserve-symlinks-flag: 1.0.0 3608 | 3609 | restore-cursor@4.0.0: 3610 | dependencies: 3611 | onetime: 5.1.2 3612 | signal-exit: 3.0.7 3613 | 3614 | restore-cursor@5.1.0: 3615 | dependencies: 3616 | onetime: 7.0.0 3617 | signal-exit: 4.1.0 3618 | 3619 | retry@0.13.1: {} 3620 | 3621 | reusify@1.0.4: {} 3622 | 3623 | rimraf@3.0.2: 3624 | dependencies: 3625 | glob: 7.2.3 3626 | 3627 | run-parallel@1.2.0: 3628 | dependencies: 3629 | queue-microtask: 1.2.3 3630 | 3631 | safe-buffer@5.1.2: {} 3632 | 3633 | safe-buffer@5.2.1: {} 3634 | 3635 | safe-regex@2.1.1: 3636 | dependencies: 3637 | regexp-tree: 0.1.27 3638 | 3639 | safe-stable-stringify@2.4.3: {} 3640 | 3641 | safer-buffer@2.1.2: {} 3642 | 3643 | secure-json-parse@2.7.0: {} 3644 | 3645 | semver@5.7.2: {} 3646 | 3647 | semver@7.5.4: 3648 | dependencies: 3649 | lru-cache: 6.0.0 3650 | 3651 | serialize-error@11.0.3: 3652 | dependencies: 3653 | type-fest: 2.19.0 3654 | 3655 | set-function-length@1.2.0: 3656 | dependencies: 3657 | define-data-property: 1.1.1 3658 | function-bind: 1.1.2 3659 | get-intrinsic: 1.2.2 3660 | gopd: 1.0.1 3661 | has-property-descriptors: 1.0.1 3662 | 3663 | setprototypeof@1.2.0: {} 3664 | 3665 | shebang-command@2.0.0: 3666 | dependencies: 3667 | shebang-regex: 3.0.0 3668 | 3669 | shebang-regex@3.0.0: {} 3670 | 3671 | side-channel@1.0.4: 3672 | dependencies: 3673 | call-bind: 1.0.5 3674 | get-intrinsic: 1.2.2 3675 | object-inspect: 1.13.1 3676 | 3677 | signal-exit@3.0.7: {} 3678 | 3679 | signal-exit@4.1.0: {} 3680 | 3681 | slash@3.0.0: {} 3682 | 3683 | slash@5.1.0: {} 3684 | 3685 | slashes@3.0.12: {} 3686 | 3687 | slice-ansi@5.0.0: 3688 | dependencies: 3689 | ansi-styles: 6.2.1 3690 | is-fullwidth-code-point: 4.0.0 3691 | 3692 | slice-ansi@7.1.0: 3693 | dependencies: 3694 | ansi-styles: 6.2.1 3695 | is-fullwidth-code-point: 5.0.0 3696 | 3697 | slugify@1.6.6: {} 3698 | 3699 | sonic-boom@3.8.0: 3700 | dependencies: 3701 | atomic-sleep: 1.0.0 3702 | 3703 | source-map@0.6.1: {} 3704 | 3705 | spdx-correct@3.2.0: 3706 | dependencies: 3707 | spdx-expression-parse: 3.0.1 3708 | spdx-license-ids: 3.0.16 3709 | 3710 | spdx-exceptions@2.4.0: {} 3711 | 3712 | spdx-expression-parse@3.0.1: 3713 | dependencies: 3714 | spdx-exceptions: 2.4.0 3715 | spdx-license-ids: 3.0.16 3716 | 3717 | spdx-license-ids@3.0.16: {} 3718 | 3719 | split-lines@3.0.0: {} 3720 | 3721 | split2@4.2.0: {} 3722 | 3723 | stacktracey@2.1.8: 3724 | dependencies: 3725 | as-table: 1.0.55 3726 | get-source: 2.0.12 3727 | 3728 | statuses@2.0.1: {} 3729 | 3730 | string-width@4.2.3: 3731 | dependencies: 3732 | emoji-regex: 8.0.0 3733 | is-fullwidth-code-point: 3.0.0 3734 | strip-ansi: 6.0.1 3735 | 3736 | string-width@7.2.0: 3737 | dependencies: 3738 | emoji-regex: 10.3.0 3739 | get-east-asian-width: 1.2.0 3740 | strip-ansi: 7.1.0 3741 | 3742 | string_decoder@0.10.31: {} 3743 | 3744 | string_decoder@1.1.1: 3745 | dependencies: 3746 | safe-buffer: 5.1.2 3747 | 3748 | string_decoder@1.3.0: 3749 | dependencies: 3750 | safe-buffer: 5.2.1 3751 | 3752 | strip-ansi@6.0.1: 3753 | dependencies: 3754 | ansi-regex: 5.0.1 3755 | 3756 | strip-ansi@7.1.0: 3757 | dependencies: 3758 | ansi-regex: 6.0.1 3759 | 3760 | strip-indent@3.0.0: 3761 | dependencies: 3762 | min-indent: 1.0.1 3763 | 3764 | strip-json-comments@3.1.1: {} 3765 | 3766 | strtok3@7.0.0: 3767 | dependencies: 3768 | '@tokenizer/token': 0.3.0 3769 | peek-readable: 5.0.0 3770 | 3771 | supports-color@10.0.0: {} 3772 | 3773 | supports-color@5.5.0: 3774 | dependencies: 3775 | has-flag: 3.0.0 3776 | 3777 | supports-color@7.2.0: 3778 | dependencies: 3779 | has-flag: 4.0.0 3780 | 3781 | supports-color@9.4.0: {} 3782 | 3783 | supports-preserve-symlinks-flag@1.0.0: {} 3784 | 3785 | synckit@0.6.2: 3786 | dependencies: 3787 | tslib: 2.6.2 3788 | 3789 | synckit@0.8.8: 3790 | dependencies: 3791 | '@pkgr/core': 0.1.1 3792 | tslib: 2.6.2 3793 | 3794 | tempura@0.4.0: {} 3795 | 3796 | terminal-size@4.0.0: {} 3797 | 3798 | text-table@0.2.0: {} 3799 | 3800 | thread-stream@2.4.1: 3801 | dependencies: 3802 | real-require: 0.2.0 3803 | 3804 | through2@2.0.5: 3805 | dependencies: 3806 | readable-stream: 2.3.8 3807 | xtend: 4.0.2 3808 | 3809 | time-span@5.1.0: 3810 | dependencies: 3811 | convert-hrtime: 5.0.0 3812 | 3813 | tmp-cache@1.1.0: {} 3814 | 3815 | to-regex-range@5.0.1: 3816 | dependencies: 3817 | is-number: 7.0.0 3818 | 3819 | toidentifier@1.0.1: {} 3820 | 3821 | token-types@5.0.1: 3822 | dependencies: 3823 | '@tokenizer/token': 0.3.0 3824 | ieee754: 1.2.1 3825 | 3826 | truncatise@0.0.8: {} 3827 | 3828 | ts-api-utils@1.0.3(typescript@5.3.3): 3829 | dependencies: 3830 | typescript: 5.3.3 3831 | 3832 | ts-node-maintained@10.9.4(@swc/core@1.3.105)(@types/node@22.10.1)(typescript@5.3.3): 3833 | dependencies: 3834 | '@cspotcode/source-map-support': 0.8.1 3835 | '@tsconfig/node10': 1.0.9 3836 | '@tsconfig/node12': 1.0.11 3837 | '@tsconfig/node14': 1.0.3 3838 | '@tsconfig/node16': 1.0.4 3839 | '@types/node': 22.10.1 3840 | acorn: 8.11.3 3841 | acorn-walk: 8.3.2 3842 | arg: 4.1.3 3843 | create-require: 1.1.1 3844 | diff: 4.0.2 3845 | make-error: 1.3.6 3846 | typescript: 5.3.3 3847 | v8-compile-cache-lib: 3.0.1 3848 | yn: 3.1.1 3849 | optionalDependencies: 3850 | '@swc/core': 1.3.105 3851 | 3852 | tslib@2.6.2: {} 3853 | 3854 | type-check@0.4.0: 3855 | dependencies: 3856 | prelude-ls: 1.2.1 3857 | 3858 | type-fest@0.20.2: {} 3859 | 3860 | type-fest@0.6.0: {} 3861 | 3862 | type-fest@0.8.1: {} 3863 | 3864 | type-fest@2.19.0: {} 3865 | 3866 | type-fest@3.13.1: {} 3867 | 3868 | type-is@1.6.18: 3869 | dependencies: 3870 | media-typer: 0.3.0 3871 | mime-types: 2.1.35 3872 | 3873 | typescript@5.3.3: {} 3874 | 3875 | uid-safe@2.1.5: 3876 | dependencies: 3877 | random-bytes: 1.0.0 3878 | 3879 | undici-types@6.20.0: {} 3880 | 3881 | unpipe@1.0.0: {} 3882 | 3883 | untildify@4.0.0: {} 3884 | 3885 | uri-js@4.4.1: 3886 | dependencies: 3887 | punycode: 2.3.1 3888 | 3889 | util-deprecate@1.0.2: {} 3890 | 3891 | uuid@8.3.2: {} 3892 | 3893 | v8-compile-cache-lib@3.0.1: {} 3894 | 3895 | validate-npm-package-license@3.0.4: 3896 | dependencies: 3897 | spdx-correct: 3.2.0 3898 | spdx-expression-parse: 3.0.1 3899 | 3900 | validator@13.11.0: {} 3901 | 3902 | vary@1.1.2: {} 3903 | 3904 | which@2.0.2: 3905 | dependencies: 3906 | isexe: 2.0.0 3907 | 3908 | wordwrap@1.0.0: {} 3909 | 3910 | wrap-ansi@7.0.0: 3911 | dependencies: 3912 | ansi-styles: 4.3.0 3913 | string-width: 4.2.3 3914 | strip-ansi: 6.0.1 3915 | 3916 | wrap-ansi@9.0.0: 3917 | dependencies: 3918 | ansi-styles: 6.2.1 3919 | string-width: 7.2.0 3920 | strip-ansi: 7.1.0 3921 | 3922 | wrappy@1.0.2: {} 3923 | 3924 | xtend@4.0.2: {} 3925 | 3926 | y18n@5.0.8: {} 3927 | 3928 | yallist@4.0.0: {} 3929 | 3930 | yargs-parser@20.2.9: {} 3931 | 3932 | yargs-parser@21.1.1: {} 3933 | 3934 | yargs@16.2.0: 3935 | dependencies: 3936 | cliui: 7.0.4 3937 | escalade: 3.1.1 3938 | get-caller-file: 2.0.5 3939 | require-directory: 2.1.1 3940 | string-width: 4.2.3 3941 | y18n: 5.0.8 3942 | yargs-parser: 20.2.9 3943 | 3944 | yn@3.1.1: {} 3945 | 3946 | yocto-queue@0.1.0: {} 3947 | 3948 | yocto-queue@1.1.1: {} 3949 | 3950 | youch-terminal@2.2.3: 3951 | dependencies: 3952 | kleur: 4.1.5 3953 | string-width: 4.2.3 3954 | wordwrap: 1.0.0 3955 | 3956 | youch@3.3.3: 3957 | dependencies: 3958 | cookie: 0.5.0 3959 | mustache: 4.2.0 3960 | stacktracey: 2.1.8 3961 | -------------------------------------------------------------------------------- /providers/scheduler_provider.ts: -------------------------------------------------------------------------------- 1 | import type { ApplicationService } from '@adonisjs/core/types' 2 | import { Scheduler } from '../src/scheduler.js' 3 | 4 | declare module '@adonisjs/core/types' { 5 | export interface ContainerBindings { 6 | scheduler: Scheduler 7 | } 8 | } 9 | 10 | export default class SchedulerProvider { 11 | constructor(protected app: ApplicationService) {} 12 | 13 | public boot() { 14 | this.app.container.singleton('scheduler', () => { 15 | return new Scheduler(this.app) 16 | }) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /services/main.ts: -------------------------------------------------------------------------------- 1 | import type { Scheduler } from '../src/scheduler.js' 2 | import app from '@adonisjs/core/services/app' 3 | 4 | let scheduler: Scheduler 5 | 6 | await app.booted(async () => { 7 | scheduler = await app.container.make("scheduler") 8 | }) 9 | 10 | export { scheduler as default } -------------------------------------------------------------------------------- /src/decorator.ts: -------------------------------------------------------------------------------- 1 | import type { BaseCommand } from '@adonisjs/core/ace' 2 | import { ScheduleCommand, Scheduler } from './scheduler.js' 3 | import { arrayWrap } from './utils.js' 4 | 5 | export function schedule( 6 | expression: string | ((s: ScheduleCommand) => ScheduleCommand), 7 | args: string | string[] = [] 8 | ) { 9 | return function (target: T) { 10 | if (typeof expression === 'string') { 11 | Scheduler.__decorator_schedules.push( 12 | new ScheduleCommand(target.commandName, arrayWrap(args)).cron(expression) 13 | ) 14 | } else { 15 | Scheduler.__decorator_schedules.push( 16 | expression(new ScheduleCommand(target.commandName, arrayWrap(args))) 17 | ) 18 | } 19 | 20 | return target 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /src/scheduler.ts: -------------------------------------------------------------------------------- 1 | import { BaseCommand, FsLoader } from '@adonisjs/core/ace' 2 | import type { ApplicationService } from '@adonisjs/core/types' 3 | import { DateTime } from 'luxon' 4 | import { arrayWrap } from './utils.js' 5 | 6 | type Range< 7 | START extends number, 8 | END extends number, 9 | ARR extends unknown[] = [], 10 | ACC extends number = never 11 | > = ARR['length'] extends END 12 | ? ACC | START | END 13 | : Range 14 | 15 | export abstract class BaseSchedule { 16 | abstract type: string 17 | expression: string = '0 * * * * *' // seconds minutes hours dayOfMonth month dayOfWeek 18 | config = { 19 | enabled: true, 20 | immediate: false, 21 | withoutOverlapping: false, 22 | expiresAt: 3600000, 23 | timezone: undefined as string | undefined, 24 | } 25 | 26 | beforeCallbacks: (() => Promise)[] = [] 27 | afterCallbacks: (() => Promise)[] = [] 28 | 29 | public before(callback: () => Promise) { 30 | this.beforeCallbacks.push(callback) 31 | 32 | return this 33 | } 34 | 35 | public after(callback: () => Promise) { 36 | this.afterCallbacks.push(callback) 37 | 38 | return this 39 | } 40 | 41 | public timezone(timezone: string) { 42 | this.config.timezone = timezone 43 | 44 | return this 45 | } 46 | 47 | public skip(state: boolean = true) { 48 | this.config.enabled = !state 49 | 50 | return this 51 | } 52 | 53 | public immediate(state: boolean = true) { 54 | this.config.immediate = state 55 | 56 | return this 57 | } 58 | 59 | public withoutOverlapping(expiresAt: number = 3600000) { 60 | this.config.withoutOverlapping = true 61 | this.config.expiresAt = expiresAt 62 | 63 | return this 64 | } 65 | 66 | public everyMinutes(minutes: number) { 67 | return this.spliceIntoPosition(1, `*/${minutes}`) 68 | } 69 | 70 | public everyMinute() { 71 | return this.spliceIntoPosition(1, '*') 72 | } 73 | 74 | public everyTwoMinutes() { 75 | return this.everyMinutes(2) 76 | } 77 | 78 | public everyThreeMinutes() { 79 | return this.everyMinutes(3) 80 | } 81 | 82 | public everyFourMinutes() { 83 | return this.everyMinutes(4) 84 | } 85 | 86 | public everyFiveMinutes() { 87 | return this.everyMinutes(5) 88 | } 89 | 90 | public everyTenMinutes() { 91 | return this.everyMinutes(10) 92 | } 93 | 94 | public everyFifteenMinutes() { 95 | return this.everyMinutes(15) 96 | } 97 | 98 | public everyThirtyMinutes() { 99 | return this.everyMinutes(30) 100 | } 101 | 102 | public hourly() { 103 | return this.spliceIntoPosition(1, 0) 104 | } 105 | 106 | public hourlyAt(offset: string | number | Range<0, 59> | Range<0, 59>[]) { 107 | return this.hourBasedSchedule(offset, '*') 108 | } 109 | 110 | public everyHours(hours: number, offset: any[] | string | number = 0) { 111 | return this.hourBasedSchedule(offset, `*/${hours}`) 112 | } 113 | public everyOddHour(offset: any[] | string | number = 0) { 114 | return this.hourBasedSchedule(offset, '1-23/2') 115 | } 116 | 117 | public everyTwoHours(offset: any[] | string | number = 0) { 118 | return this.everyHours(2, offset) 119 | } 120 | 121 | public everyThreeHours(offset: any[] | string | number = 0) { 122 | return this.everyHours(3, offset) 123 | } 124 | 125 | public everyFourHours(offset: any[] | string | number = 0) { 126 | return this.everyHours(4, offset) 127 | } 128 | 129 | public everyFiveHours(offset: any[] | string | number = 0) { 130 | return this.everyHours(5, offset) 131 | } 132 | 133 | public everySixHours(offset: any[] | string | number = 0) { 134 | return this.everyHours(6, offset) 135 | } 136 | 137 | public daily() { 138 | return this.hourBasedSchedule(0, 0) 139 | } 140 | 141 | public weekdays() { 142 | return this.spliceIntoPosition(5, '1-5') 143 | } 144 | 145 | public weekends() { 146 | return this.spliceIntoPosition(5, '6,0') 147 | } 148 | 149 | public mondays() { 150 | return this.days(1) 151 | } 152 | 153 | public tuesdays() { 154 | return this.days(2) 155 | } 156 | 157 | public wednesdays() { 158 | return this.days(3) 159 | } 160 | 161 | public thursdays() { 162 | return this.days(4) 163 | } 164 | 165 | public fridays() { 166 | return this.days(5) 167 | } 168 | 169 | public saturdays() { 170 | return this.days(6) 171 | } 172 | 173 | public sundays() { 174 | return this.days(0) 175 | } 176 | 177 | public weekly() { 178 | return this.spliceIntoPosition(1, 0).spliceIntoPosition(2, 0).spliceIntoPosition(5, 0) 179 | } 180 | 181 | public weeklyOn(dayOfWeek: Range<0, 7> = 1, time: string = '0:0') { 182 | this.dailyAt(time) 183 | 184 | return this.days(dayOfWeek as any) 185 | } 186 | 187 | public monthly() { 188 | return this.spliceIntoPosition(1, 0).spliceIntoPosition(2, 0).spliceIntoPosition(3, 1) 189 | } 190 | 191 | public quarterly() { 192 | return this.spliceIntoPosition(1, 0) 193 | .spliceIntoPosition(2, 0) 194 | .spliceIntoPosition(3, 1) 195 | .spliceIntoPosition(4, '1-12/3') 196 | } 197 | 198 | public yearly() { 199 | return this.spliceIntoPosition(1, 0) 200 | .spliceIntoPosition(2, 0) 201 | .spliceIntoPosition(3, 1) 202 | .spliceIntoPosition(4, 1) 203 | } 204 | 205 | public yearlyOn(month: number = 1, dayOfMonth: string | Range<1, 31> = 1, time: string = '0:0') { 206 | this.dailyAt(time) 207 | 208 | return this.spliceIntoPosition(3, dayOfMonth).spliceIntoPosition(4, month) 209 | } 210 | 211 | public everySecond() { 212 | return this.spliceIntoPosition(0, '*') 213 | } 214 | 215 | public everySeconds(second: Range<1, 59>) { 216 | return this.spliceIntoPosition(0, `*/${second}`) 217 | } 218 | 219 | public everyFiveSeconds() { 220 | return this.everySeconds(5) 221 | } 222 | 223 | public everyTenSeconds() { 224 | return this.everySeconds(10) 225 | } 226 | 227 | public everyFifteenSeconds() { 228 | return this.everySeconds(15) 229 | } 230 | 231 | public everyThirtySeconds() { 232 | return this.everySeconds(30) 233 | } 234 | 235 | public cron(expression: string) { 236 | this.expression = expression 237 | 238 | return this 239 | } 240 | 241 | protected spliceIntoPosition(position: number, value: string | number) { 242 | const segements = this.expression.split(' ') 243 | 244 | segements[position] = String(value) 245 | 246 | this.cron(segements.join(' ')) 247 | 248 | return this 249 | } 250 | 251 | protected hourBasedSchedule( 252 | minutes: string | number | Range<0, 59>[], 253 | hours: string | number | Range<0, 59>[] 254 | ) { 255 | minutes = Array.isArray(minutes) ? minutes.join(',') : minutes 256 | hours = Array.isArray(hours) ? hours.join(',') : hours 257 | 258 | return this.spliceIntoPosition(1, minutes).spliceIntoPosition(2, hours) 259 | } 260 | 261 | public days(days: string | number | string[] | number[] | any[]) { 262 | return this.spliceIntoPosition(5, Array.isArray(days) ? days.join(',') : days) 263 | } 264 | 265 | public at(time: string) { 266 | return this.dailyAt(time) 267 | } 268 | 269 | public dailyAt(time: string) { 270 | let segments = time.split(':') 271 | 272 | return this.hourBasedSchedule( 273 | segments.length === 2 ? Number(segments[1]) : '0', 274 | Number(segments[0]) 275 | ) 276 | } 277 | 278 | public twiceDailyAt(first: Range<0, 23> = 1, second: Range<0, 23> = 13, offset = 0) { 279 | const hours = first + ',' + second 280 | 281 | return this.hourBasedSchedule(offset, hours) 282 | } 283 | 284 | public twiceDaily(first: Range<0, 23> = 1, second: Range<0, 23> = 13) { 285 | return this.twiceDailyAt(first, second, 0) 286 | } 287 | 288 | public twiceMonthly(first: Range<1, 31> = 1, second: Range<1, 31> = 13, time: string = '0:0') { 289 | const dayOfMonth = first + ',' + second 290 | 291 | this.dailyAt(time) 292 | 293 | return this.spliceIntoPosition(3, dayOfMonth) 294 | } 295 | 296 | public lastDayOfMonth(time: string = '0:0') { 297 | this.dailyAt(time) 298 | 299 | return this.spliceIntoPosition(3, DateTime.now().endOf('month').day) 300 | } 301 | 302 | public monthlyOn(dayOfMonth: Range<1, 31> = 1, time: string = '0:0') { 303 | this.dailyAt(time) 304 | 305 | return this.spliceIntoPosition(3, dayOfMonth) 306 | } 307 | 308 | public getExpression() { 309 | return this.expression 310 | } 311 | } 312 | 313 | export class ScheduleCommand extends BaseSchedule { 314 | type: 'command' = 'command' 315 | 316 | commandName: string 317 | commandArgs: string[] 318 | 319 | constructor(commandName: string, commandArgs: string[] = []) { 320 | super() 321 | 322 | this.commandName = commandName 323 | this.commandArgs = commandArgs 324 | } 325 | } 326 | 327 | export class ScheduleCallback extends BaseSchedule { 328 | type: 'callback' = 'callback' 329 | 330 | callback: Function 331 | 332 | constructor(callback: Function) { 333 | super() 334 | 335 | this.callback = callback 336 | } 337 | } 338 | 339 | export class Scheduler { 340 | constructor(protected app: ApplicationService) { 341 | this.app = app 342 | } 343 | 344 | static __decorator_schedules: (ScheduleCallback | ScheduleCommand)[] = [] 345 | 346 | items: (ScheduleCallback | ScheduleCommand)[] = [] 347 | 348 | onStartingCallback?: () => void | Promise 349 | onStartedCallback?: () => void | Promise 350 | 351 | public async boot() { 352 | const fsLoader = new FsLoader(this.app.commandsPath()) 353 | await fsLoader.getMetaData() 354 | 355 | for (const command of this.app.rcFile.commands) { 356 | const loader = await (typeof command === 'function' ? command() : command) 357 | await loader.getMetaData() 358 | } 359 | 360 | if (!Scheduler.__decorator_schedules || Scheduler.__decorator_schedules.length === 0) return 361 | 362 | this.items.push(...Scheduler.__decorator_schedules) 363 | } 364 | 365 | public command(name: string | typeof BaseCommand, args: string | string[] = []) { 366 | let newCommand = new ScheduleCommand( 367 | typeof name === 'string' ? name : name.commandName, 368 | arrayWrap(args) 369 | ) 370 | 371 | this.items.push(newCommand) 372 | 373 | return newCommand 374 | } 375 | 376 | public call(callback: Function) { 377 | let newCommand = new ScheduleCallback(callback) 378 | 379 | this.items.push(newCommand) 380 | 381 | return newCommand 382 | } 383 | 384 | public withoutOverlapping(callback: () => void, config = { expiresAt: 3600000 }) { 385 | const lastLength = this.items.length 386 | callback() 387 | const currentLength = this.items.length 388 | 389 | const newItems = this.items.slice(lastLength, currentLength) 390 | 391 | for (const item of newItems) { 392 | item.withoutOverlapping(config.expiresAt) 393 | } 394 | } 395 | 396 | public onStarting(callback: () => void | Promise) { 397 | this.onStartingCallback = callback 398 | } 399 | 400 | public onStarted(callback: () => void | Promise) { 401 | this.onStartedCallback = callback 402 | } 403 | } 404 | -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | export const arrayWrap = (value: T | T[]): T[] => { 2 | return Array.isArray(value) ? value : [value] 3 | } 4 | -------------------------------------------------------------------------------- /src/worker.ts: -------------------------------------------------------------------------------- 1 | import type { ApplicationService } from '@adonisjs/core/types' 2 | import cron from 'node-cron' 3 | import AsyncLock from 'async-lock' 4 | import { FsLoader, type BaseCommand, Kernel } from '@adonisjs/core/ace' 5 | 6 | const lock = new AsyncLock() 7 | 8 | interface IRunOptions { 9 | enabled: boolean 10 | timeout: number 11 | key: string 12 | onBusy?: () => any | PromiseLike 13 | } 14 | 15 | const run = async (cb: () => any | PromiseLike, options: IRunOptions) => { 16 | if (!options.enabled) return await cb() 17 | 18 | if (lock.isBusy(options.key)) { 19 | if (options.onBusy) { 20 | await options.onBusy() 21 | } 22 | return 23 | } 24 | 25 | await lock.acquire(options.key, cb, { maxPending: 1, timeout: options.timeout }) 26 | } 27 | 28 | export class Worker { 29 | tasks: cron.ScheduledTask[] = [] 30 | loaders: any[] = [] 31 | booted = false 32 | 33 | constructor(public app: ApplicationService) {} 34 | 35 | async boot() { 36 | if (this.booted) return 37 | 38 | const schedule = await this.app.container.make('scheduler') 39 | await schedule.boot() 40 | 41 | const fsLoader = new FsLoader(this.app.commandsPath()) 42 | this.loaders = [fsLoader] 43 | 44 | this.app.rcFile.commands.forEach((commandModule) => { 45 | this.loaders.push(() => 46 | typeof commandModule === 'function' ? commandModule() : this.app.import(commandModule) 47 | ) 48 | }) 49 | 50 | this.booted = true 51 | } 52 | 53 | async start() { 54 | await this.boot() 55 | 56 | const schedule = await this.app.container.make('scheduler') 57 | const logger = await this.app.container.make('logger') 58 | 59 | if (schedule.onStartingCallback) { 60 | await schedule.onStartingCallback() 61 | } 62 | 63 | for (let index = 0; index < schedule.items.length; index++) { 64 | const command = schedule.items[index] 65 | this.tasks.push( 66 | cron.schedule( 67 | command.expression, 68 | async () => { 69 | try { 70 | switch (command.type) { 71 | case 'command': 72 | const ace = new Kernel(this.app) 73 | 74 | for (const loader of this.loaders) { 75 | ace.addLoader(loader) 76 | } 77 | 78 | for (const callback of command.beforeCallbacks) { 79 | await callback() 80 | } 81 | await run(() => ace.exec(command.commandName, command.commandArgs), { 82 | enabled: command.config.withoutOverlapping, 83 | timeout: command.config.expiresAt, 84 | key: `${index}-${command.commandName}-${command.commandArgs}`, 85 | onBusy: () => { 86 | logger.warn( 87 | `Command ${index}-${command.commandName}-${command.commandArgs} is busy` 88 | ) 89 | }, 90 | }) 91 | for (const callback of command.afterCallbacks) { 92 | await callback() 93 | } 94 | break 95 | 96 | case 'callback': 97 | for (const callback of command.beforeCallbacks) { 98 | await callback() 99 | } 100 | await run(() => command.callback(), { 101 | enabled: command.config.withoutOverlapping, 102 | timeout: command.config.expiresAt, 103 | key: `${index}-callback`, 104 | onBusy: () => { 105 | logger.warn(`Callback ${index} is busy`) 106 | }, 107 | }) 108 | for (const callback of command.afterCallbacks) { 109 | await callback() 110 | } 111 | 112 | default: 113 | break 114 | } 115 | } catch (error) { 116 | logger.error(error) 117 | } 118 | }, 119 | { 120 | scheduled: command.config.enabled, 121 | timezone: command.config.timezone, 122 | runOnInit: command.config.enabled && command.config.immediate, 123 | } 124 | ) 125 | ) 126 | } 127 | 128 | logger.info(`Schedule worker started successfully.`) 129 | 130 | if (schedule.onStartedCallback) { 131 | await schedule.onStartedCallback() 132 | } 133 | } 134 | 135 | async stop() { 136 | await Promise.all(this.tasks.map((task) => task.stop())) 137 | } 138 | } 139 | -------------------------------------------------------------------------------- /stubs/main.ts: -------------------------------------------------------------------------------- 1 | import { dirname } from 'node:path' 2 | import { fileURLToPath } from 'node:url' 3 | 4 | /** 5 | * Path to the root directory where the stubs are stored. We use 6 | * this path within commands and the configure hook 7 | */ 8 | export const stubsRoot = dirname(fileURLToPath(import.meta.url)) 9 | -------------------------------------------------------------------------------- /stubs/start/scheduler.stub: -------------------------------------------------------------------------------- 1 | {{{ 2 | exports({ to: app.startPath('scheduler.ts') }) 3 | }}} 4 | 5 | import scheduler from 'adonisjs-scheduler/services/main' 6 | 7 | scheduler.command("inspire").everyFiveSeconds(); 8 | 9 | scheduler.call(() => { 10 | console.log("Pruge DB!"); 11 | }).weekly(); -------------------------------------------------------------------------------- /tests/expression.spec.ts: -------------------------------------------------------------------------------- 1 | import { test } from '@japa/runner' 2 | import { BaseSchedule } from '../src/scheduler.js' 3 | import { DateTime } from 'luxon' 4 | 5 | class TestSchedule extends BaseSchedule { 6 | type: string = 'test' 7 | } 8 | 9 | const schedule = () => new TestSchedule() 10 | 11 | test.group('Expression', () => { 12 | test('every second', ({ assert }) => { 13 | assert.equal('* * * * * *', schedule().everySecond().getExpression()) 14 | }) 15 | 16 | test('every x seconds', ({ assert }) => { 17 | assert.equal('*/5 * * * * *', schedule().everyFiveSeconds().getExpression()) 18 | assert.equal('*/10 * * * * *', schedule().everyTenSeconds().getExpression()) 19 | assert.equal('*/15 * * * * *', schedule().everyFifteenSeconds().getExpression()) 20 | assert.equal('*/42 * * * * *', schedule().everySeconds(42).getExpression()) 21 | }) 22 | 23 | test('every minute', ({ assert }) => { 24 | assert.equal('0 * * * * *', schedule().getExpression()) 25 | assert.equal('0 * * * * *', schedule().everyMinute().getExpression()) 26 | }) 27 | 28 | test('every x minutes', ({ assert }) => { 29 | assert.equal('0 */2 * * * *', schedule().everyTwoMinutes().getExpression()) 30 | assert.equal('0 */3 * * * *', schedule().everyThreeMinutes().getExpression()) 31 | assert.equal('0 */5 * * * *', schedule().everyFiveMinutes().getExpression()) 32 | assert.equal('0 */10 * * * *', schedule().everyTenMinutes().getExpression()) 33 | assert.equal('0 */15 * * * *', schedule().everyFifteenMinutes().getExpression()) 34 | assert.equal('0 */42 * * * *', schedule().everyMinutes(42).getExpression()) 35 | }) 36 | 37 | test('daily', ({ assert }) => { 38 | assert.equal('0 0 0 * * *', schedule().daily().getExpression()) 39 | }) 40 | 41 | test('daily at', ({ assert }) => { 42 | assert.equal('0 8 13 * * *', schedule().dailyAt('13:08').getExpression()) 43 | }) 44 | 45 | test('twice daily', ({ assert }) => { 46 | assert.equal('0 0 3,15 * * *', schedule().twiceDaily(3, 15).getExpression()) 47 | }) 48 | 49 | test('twice daily at', ({ assert }) => { 50 | assert.equal('0 5 3,15 * * *', schedule().twiceDailyAt(3, 15, 5).getExpression()) 51 | }) 52 | 53 | test('weekly', ({ assert }) => { 54 | assert.equal('0 0 0 * * 0', schedule().weekly().getExpression()) 55 | }) 56 | 57 | test('weekly on', ({ assert }) => { 58 | assert.equal('0 0 8 * * 1', schedule().weeklyOn(1, '8:00').getExpression()) 59 | }) 60 | 61 | test('override with hourly', ({ assert }) => { 62 | assert.equal('0 0 * * * *', schedule().everyFiveMinutes().hourly().getExpression()) 63 | assert.equal('0 37 * * * *', schedule().hourlyAt(37).getExpression()) 64 | assert.equal('0 */10 * * * *', schedule().hourlyAt('*/10').getExpression()) 65 | assert.equal('0 15,30,45 * * * *', schedule().hourlyAt([15, 30, 45]).getExpression()) 66 | }) 67 | 68 | test('hourly', ({ assert }) => { 69 | assert.equal('0 0 1-23/2 * * *', schedule().everyOddHour().getExpression()) 70 | assert.equal('0 0 */2 * * *', schedule().everyTwoHours().getExpression()) 71 | assert.equal('0 0 */3 * * *', schedule().everyThreeHours().getExpression()) 72 | assert.equal('0 0 */4 * * *', schedule().everyFourHours().getExpression()) 73 | assert.equal('0 0 */6 * * *', schedule().everySixHours().getExpression()) 74 | 75 | assert.equal('0 37 1-23/2 * * *', schedule().everyOddHour(37).getExpression()) 76 | assert.equal('0 37 */2 * * *', schedule().everyTwoHours(37).getExpression()) 77 | assert.equal('0 37 */3 * * *', schedule().everyThreeHours(37).getExpression()) 78 | assert.equal('0 37 */4 * * *', schedule().everyFourHours(37).getExpression()) 79 | assert.equal('0 37 */6 * * *', schedule().everySixHours(37).getExpression()) 80 | 81 | assert.equal('0 */10 1-23/2 * * *', schedule().everyOddHour('*/10').getExpression()) 82 | assert.equal('0 */10 */2 * * *', schedule().everyTwoHours('*/10').getExpression()) 83 | assert.equal('0 */10 */3 * * *', schedule().everyThreeHours('*/10').getExpression()) 84 | assert.equal('0 */10 */4 * * *', schedule().everyFourHours('*/10').getExpression()) 85 | assert.equal('0 */10 */6 * * *', schedule().everySixHours('*/10').getExpression()) 86 | 87 | assert.equal('0 15,30,45 1-23/2 * * *', schedule().everyOddHour([15, 30, 45]).getExpression()) 88 | assert.equal('0 15,30,45 */2 * * *', schedule().everyTwoHours([15, 30, 45]).getExpression()) 89 | assert.equal('0 15,30,45 */3 * * *', schedule().everyThreeHours([15, 30, 45]).getExpression()) 90 | assert.equal('0 15,30,45 */4 * * *', schedule().everyFourHours([15, 30, 45]).getExpression()) 91 | assert.equal('0 15,30,45 */6 * * *', schedule().everySixHours([15, 30, 45]).getExpression()) 92 | }) 93 | 94 | test('monthly', ({ assert }) => { 95 | assert.equal('0 0 0 1 * *', schedule().monthly().getExpression()) 96 | }) 97 | 98 | test('monthly on', ({ assert }) => { 99 | assert.equal('0 0 15 4 * *', schedule().monthlyOn(4, '15:00').getExpression()) 100 | }) 101 | 102 | test('LastDayOfMonth', ({ assert }) => { 103 | const lastDayOfMonth = DateTime.now().endOf('month').day 104 | 105 | assert.equal(`0 0 0 ${lastDayOfMonth} * *`, schedule().lastDayOfMonth().getExpression()) 106 | }) 107 | 108 | test('twice monthly', ({ assert }) => { 109 | assert.equal('0 0 0 1,16 * *', schedule().twiceMonthly(1, 16).getExpression()) 110 | }) 111 | 112 | test('twice monthlyAtTime', ({ assert }) => { 113 | assert.equal('0 30 1 1,16 * *', schedule().twiceMonthly(1, 16, '1:30').getExpression()) 114 | }) 115 | 116 | test('monthly on with minutes', ({ assert }) => { 117 | assert.equal('0 15 15 4 * *', schedule().monthlyOn(4, '15:15').getExpression()) 118 | }) 119 | 120 | test('weekdays daily', ({ assert }) => { 121 | assert.equal('0 0 0 * * 1-5', schedule().weekdays().daily().getExpression()) 122 | }) 123 | 124 | test('weekdays hourly', ({ assert }) => { 125 | assert.equal('0 0 * * * 1-5', schedule().weekdays().hourly().getExpression()) 126 | }) 127 | test('weekdays', ({ assert }) => { 128 | assert.equal('0 * * * * 1-5', schedule().weekdays().getExpression()) 129 | }) 130 | 131 | test('weekends', ({ assert }) => { 132 | assert.equal('0 * * * * 6,0', schedule().weekends().getExpression()) 133 | }) 134 | 135 | test('sundays', ({ assert }) => { 136 | assert.equal('0 * * * * 0', schedule().sundays().getExpression()) 137 | }) 138 | 139 | test('mondays', ({ assert }) => { 140 | assert.equal('0 * * * * 1', schedule().mondays().getExpression()) 141 | }) 142 | 143 | test('tuesdays', ({ assert }) => { 144 | assert.equal('0 * * * * 2', schedule().tuesdays().getExpression()) 145 | }) 146 | 147 | test('wednesdays', ({ assert }) => { 148 | assert.equal('0 * * * * 3', schedule().wednesdays().getExpression()) 149 | }) 150 | 151 | test('thursdays', ({ assert }) => { 152 | assert.equal('0 * * * * 4', schedule().thursdays().getExpression()) 153 | }) 154 | test('fridays', ({ assert }) => { 155 | assert.equal('0 * * * * 5', schedule().fridays().getExpression()) 156 | }) 157 | 158 | test('saturdays', ({ assert }) => { 159 | assert.equal('0 * * * * 6', schedule().saturdays().getExpression()) 160 | }) 161 | 162 | test('quarterly', ({ assert }) => { 163 | assert.equal('0 0 0 1 1-12/3 *', schedule().quarterly().getExpression()) 164 | }) 165 | test('yearly', ({ assert }) => { 166 | assert.equal('0 0 0 1 1 *', schedule().yearly().getExpression()) 167 | }) 168 | 169 | test('yearly on', ({ assert }) => { 170 | assert.equal('0 8 15 5 4 *', schedule().yearlyOn(4, 5, '15:08').getExpression()) 171 | }) 172 | 173 | test('yearly on and mondays only', ({ assert }) => { 174 | assert.equal('0 1 9 * 7 1', schedule().mondays().yearlyOn(7, '*', '09:01').getExpression()) 175 | }) 176 | 177 | test('yearly on tuesdays And DayOfMonth 20', ({ assert }) => { 178 | assert.equal('0 1 9 20 7 2', schedule().tuesdays().yearlyOn(7, 20, '09:01').getExpression()) 179 | }) 180 | }) 181 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@adonisjs/tsconfig/tsconfig.package.json", 3 | "compilerOptions": { 4 | "rootDir": "./", 5 | "outDir": "./build" 6 | } 7 | } --------------------------------------------------------------------------------