├── .eslintrc.js ├── .eslintrc.json ├── .github └── workflows │ ├── ci.yml │ └── publish.yml ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── dist ├── __tests__ │ ├── cli.test.d.ts │ └── cli.test.js ├── index.d.ts ├── index.js ├── logger.d.ts └── logger.js ├── jest.config.js ├── package-lock.json ├── package.json ├── pnpm-lock.yaml ├── samples ├── blog.json └── jsonblog-v2.md ├── src ├── __tests__ │ └── cli.test.ts ├── index.ts ├── logger.ts └── types │ ├── jsonblog-generator-boilerplate.d.ts │ └── jsonblog-schema.d.ts └── tsconfig.json /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | parser: '@typescript-eslint/parser', 3 | extends: [ 4 | 'plugin:@typescript-eslint/recommended', 5 | ], 6 | parserOptions: { 7 | ecmaVersion: 2020, 8 | sourceType: 'module', 9 | }, 10 | rules: { 11 | '@typescript-eslint/explicit-function-return-type': 'off', 12 | '@typescript-eslint/no-explicit-any': 'off', 13 | '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], 14 | }, 15 | }; 16 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "plugins": ["@typescript-eslint"], 4 | "extends": [ 5 | "eslint:recommended", 6 | "plugin:@typescript-eslint/recommended" 7 | ], 8 | "env": { 9 | "node": true, 10 | "es2020": true 11 | }, 12 | "rules": { 13 | "@typescript-eslint/explicit-function-return-type": "warn", 14 | "@typescript-eslint/no-explicit-any": "off", 15 | "no-console": "off" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | push: 4 | branches: [ master ] 5 | pull_request: 6 | branches: [ master ] 7 | 8 | jobs: 9 | test: 10 | runs-on: ubuntu-latest 11 | 12 | steps: 13 | - uses: actions/checkout@v3 14 | - name: Use Node.js 20.x 15 | uses: actions/setup-node@v3 16 | with: 17 | node-version: '20.x' 18 | - run: npm ci 19 | - run: npm run build 20 | - run: npm run lint 21 | - run: npm test 22 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to NPM 2 | on: 3 | release: 4 | types: [created] 5 | 6 | jobs: 7 | publish: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v3 11 | - uses: actions/setup-node@v3 12 | with: 13 | node-version: '20.x' 14 | registry-url: 'https://registry.npmjs.org' 15 | - run: npm ci 16 | - run: npm run build 17 | - run: npm publish 18 | env: 19 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 20 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | build/ 3 | */**/.DS_Store 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "trailingComma": "es5", 4 | "singleQuote": true, 5 | "printWidth": 80, 6 | "tabWidth": 2 7 | } 8 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2025 JSON Blog Team 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # JsonBlog CLI 2 | 3 | [![npm version](https://badge.fury.io/js/jsonblog-cli.svg)](https://badge.fury.io/js/jsonblog-cli) 4 | [![CI](https://github.com/jsonblog/jsonblog-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/jsonblog/jsonblog-cli/actions/workflows/ci.yml) 5 | [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 6 | [![TypeScript](https://img.shields.io/badge/TypeScript-5.0.0-blue.svg)](https://www.typescriptlang.org/) 7 | 8 | A powerful, flexible static blog generator that puts content first. Write your blog posts in Markdown, manage them in JSON, and deploy anywhere. 9 | 10 | ## Why JsonBlog? 11 | 12 | - **Content Freedom**: Your content, your way. Store posts inline in JSON, as local files, remote URLs, or even on IPFS 13 | - **Format Flexibility**: Content can be Markdown, plain text, or even HTML - you choose what works best 14 | - **Zero Lock-in**: All content is pure JSON and text - no proprietary formats or databases 15 | - **Flexible Deployment**: Generate static HTML that can be hosted anywhere - GitHub Pages, Netlify, IPFS, or your own server 16 | - **Developer Friendly**: Built with TypeScript, well-documented, and extensible 17 | - **Modern Stack**: Uses [jsonblog-generator-boilerplate](https://github.com/jsonblog/jsonblog-generator-boilerplate) under the hood for clean, modern HTML output 18 | 19 | ## Installation 20 | 21 | ```bash 22 | npm install -g jsonblog-cli 23 | ``` 24 | 25 | ## Usage 26 | 27 | ```bash 28 | # Generate your blog 29 | jsonblog generate path/to/blog.json 30 | 31 | # Watch for changes and regenerate 32 | jsonblog watch path/to/blog.json 33 | ``` 34 | 35 | Hosted example - [https://lordajax.com/json-blog-20.html](https://lordajax.com/json-blog-20.html) 36 | 37 | ## JsonBlog Schema 38 | 39 | The JsonBlog schema is a community-driven format for blog content that emphasizes portability, extensibility, and content ownership. Here's the current schema (v1.0.0): 40 | 41 | ```typescript 42 | interface Blog { 43 | // Core blog information 44 | site: { 45 | title: string; 46 | description?: string; 47 | image?: string; 48 | email?: string; 49 | phone?: string; 50 | url?: string; 51 | summary?: string; 52 | profiles?: { 53 | network: string; 54 | username?: string; 55 | url?: string; 56 | }[]; 57 | }; 58 | 59 | // Author information 60 | basics: { 61 | name: string; 62 | label?: string; 63 | image?: string; 64 | email?: string; 65 | phone?: string; 66 | url?: string; 67 | summary?: string; 68 | location?: { 69 | address?: string; 70 | postalCode?: string; 71 | city?: string; 72 | countryCode?: string; 73 | region?: string; 74 | }; 75 | profiles?: { 76 | network: string; 77 | username?: string; 78 | url?: string; 79 | }[]; 80 | }; 81 | 82 | // Blog posts 83 | posts: { 84 | title: string; 85 | source?: string; 86 | description?: string; 87 | position?: string; 88 | url?: string; 89 | startDate?: string; // YYYY-MM-DD 90 | endDate?: string; // YYYY-MM-DD 91 | summary?: string; 92 | highlights?: string[]; 93 | }[]; 94 | } 95 | ``` 96 | 97 | ### Schema Versioning 98 | 99 | The schema follows semantic versioning: 100 | 101 | - MAJOR: Breaking changes to required fields 102 | - MINOR: New optional fields or features 103 | - PATCH: Documentation updates or bug fixes 104 | 105 | Current stable version: 1.0.0 106 | 107 | ## Example Blog Configuration 108 | 109 | Here's a basic example of a blog configuration file: 110 | 111 | ```json 112 | { 113 | "site": { 114 | "title": "My Blog", 115 | "description": "A blog about my thoughts", 116 | "url": "https://myblog.com", 117 | "profiles": [ 118 | { 119 | "network": "twitter", 120 | "username": "myblog", 121 | "url": "https://twitter.com/myblog" 122 | } 123 | ] 124 | }, 125 | "basics": { 126 | "name": "John Doe", 127 | "label": "Tech Blogger", 128 | "summary": "I write about technology and life", 129 | "location": { 130 | "city": "San Francisco", 131 | "countryCode": "US" 132 | } 133 | }, 134 | "posts": [ 135 | { 136 | "title": "Markdown Post", 137 | "content": "# My First Post\n\nWelcome to my blog!", 138 | "createdAt": "2025-02-25" 139 | }, 140 | { 141 | "title": "Remote Content", 142 | "contentUrl": "https://example.com/posts/remote-post.md", 143 | "createdAt": "2025-02-25" 144 | } 145 | ] 146 | } 147 | ``` 148 | 149 | ## Development 150 | 151 | ### Prerequisites 152 | 153 | - Node.js >= 20.0.0 154 | - npm 155 | 156 | ### Setup 157 | 158 | ```bash 159 | # Clone the repository 160 | git clone https://github.com/jsonblog/jsonblog-cli.git 161 | cd jsonblog-cli 162 | 163 | # Install dependencies 164 | npm install 165 | 166 | # Build the project 167 | npm run build 168 | 169 | # Run tests 170 | npm test 171 | ``` 172 | 173 | ### Available Scripts 174 | 175 | - `npm run build` - Build the TypeScript code 176 | - `npm test` - Run tests 177 | - `npm run lint` - Run ESLint 178 | - `npm run format` - Format code with Prettier 179 | 180 | ### Release Process 181 | 182 | 1. Make your changes 183 | 2. Run tests and linting: `npm test && npm run lint` 184 | 3. Use one of the following commands to create a new version: 185 | - `npm run release:patch` - Bug fixes (1.0.0 -> 1.0.1) 186 | - `npm run release:minor` - New features (1.0.0 -> 1.1.0) 187 | - `npm run release:major` - Breaking changes (1.0.0 -> 2.0.0) 188 | 4. Create a new release on GitHub to trigger the publishing workflow 189 | 190 | ## Contributing 191 | 192 | 1. Fork the repository 193 | 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 194 | 3. Commit your changes (`git commit -m 'Add some amazing feature'`) 195 | 4. Push to the branch (`git push origin feature/amazing-feature`) 196 | 5. Open a Pull Request 197 | 198 | ## Related Projects 199 | 200 | - [jsonblog-schema](https://github.com/jsonblog/jsonblog-schema) - The schema definition and validation library 201 | - [jsonblog-generator-boilerplate](https://github.com/jsonblog/jsonblog-generator-boilerplate) - The core generator used by this CLI 202 | 203 | ## Creating Your Own Generator 204 | 205 | Want to create your own blog theme? It's easy! A generator is just a package that takes your blog content and generates HTML using your own templates and styles. 206 | 207 | 1. Fork the [generator-boilerplate](https://github.com/jsonblog/jsonblog-generator-boilerplate) repository 208 | 2. Customize the templates in the `templates` directory 209 | 3. Modify the styles in `assets/main.css` 210 | 4. Update the generator logic in `src/index.ts` if needed 211 | 5. Publish your generator to npm as `jsonblog-generator-yourname` 212 | 213 | Your generator just needs to export a function that takes a blog config and outputs HTML files. The boilerplate handles all the complex stuff like Markdown rendering and file management. 214 | 215 | Example generators: 216 | 217 | - `jsonblog-generator-minimal` - A minimal, typography-focused theme 218 | - `jsonblog-generator-bootstrap` - A Bootstrap-based theme 219 | - Create your own! 220 | 221 | ## License 222 | 223 | This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details. 224 | -------------------------------------------------------------------------------- /dist/__tests__/cli.test.d.ts: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /dist/__tests__/cli.test.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | Object.defineProperty(exports, "__esModule", { value: true }); 3 | const commander_1 = require("commander"); 4 | /* eslint-disable @typescript-eslint/no-empty-function */ 5 | describe('CLI', () => { 6 | let program; 7 | beforeEach(() => { 8 | jest.resetModules(); 9 | program = new commander_1.Command(); 10 | // Register test commands 11 | program 12 | .command('build') 13 | .description('Build the blog') 14 | .action(() => { }); 15 | program 16 | .command('serve') 17 | .description('Serve the blog') 18 | .action(() => { }); 19 | }); 20 | test('should have basic commands', () => { 21 | expect(program.commands.length).toBeGreaterThan(0); 22 | }); 23 | test('should handle build command', () => { 24 | const buildCmd = program.commands.find((cmd) => cmd.name() === 'build'); 25 | expect(buildCmd === null || buildCmd === void 0 ? void 0 : buildCmd.name()).toBe('build'); 26 | }); 27 | test('should handle serve command', () => { 28 | const serveCmd = program.commands.find((cmd) => cmd.name() === 'serve'); 29 | expect(serveCmd === null || serveCmd === void 0 ? void 0 : serveCmd.name()).toBe('serve'); 30 | }); 31 | }); 32 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | export {}; 3 | -------------------------------------------------------------------------------- /dist/index.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | "use strict"; 3 | var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { 4 | if (k2 === undefined) k2 = k; 5 | var desc = Object.getOwnPropertyDescriptor(m, k); 6 | if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { 7 | desc = { enumerable: true, get: function() { return m[k]; } }; 8 | } 9 | Object.defineProperty(o, k2, desc); 10 | }) : (function(o, m, k, k2) { 11 | if (k2 === undefined) k2 = k; 12 | o[k2] = m[k]; 13 | })); 14 | var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { 15 | Object.defineProperty(o, "default", { enumerable: true, value: v }); 16 | }) : function(o, v) { 17 | o["default"] = v; 18 | }); 19 | var __importStar = (this && this.__importStar) || (function () { 20 | var ownKeys = function(o) { 21 | ownKeys = Object.getOwnPropertyNames || function (o) { 22 | var ar = []; 23 | for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; 24 | return ar; 25 | }; 26 | return ownKeys(o); 27 | }; 28 | return function (mod) { 29 | if (mod && mod.__esModule) return mod; 30 | var result = {}; 31 | if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); 32 | __setModuleDefault(result, mod); 33 | return result; 34 | }; 35 | })(); 36 | var __importDefault = (this && this.__importDefault) || function (mod) { 37 | return (mod && mod.__esModule) ? mod : { "default": mod }; 38 | }; 39 | Object.defineProperty(exports, "__esModule", { value: true }); 40 | const commander_1 = require("commander"); 41 | const fs = __importStar(require("fs-extra")); 42 | const path = __importStar(require("path")); 43 | const schema = __importStar(require("jsonblog-schema")); 44 | const express_1 = __importDefault(require("express")); 45 | const chokidar = __importStar(require("chokidar")); 46 | const logger_1 = __importDefault(require("./logger")); 47 | const BUILD_PATH = `${process.cwd()}/./build`; 48 | const DEFAULT_GENERATOR = 'jsonblog-generator-boilerplate'; 49 | const getGenerator = (generatorName) => { 50 | if (!generatorName) { 51 | logger_1.default.info('Using default generator'); 52 | return require('jsonblog-generator-boilerplate'); 53 | } 54 | logger_1.default.info({ generator: generatorName }, 'Using custom generator'); 55 | return require(generatorName); 56 | }; 57 | const build = async (generator, blog) => { 58 | logger_1.default.info('Starting build process'); 59 | const result = await schema.validateBlog(blog); 60 | if (!result.success) { 61 | logger_1.default.error({ error: result.error }, 'Blog validation failed'); 62 | return; 63 | } 64 | // Get the directory of the blog.json file to use as base path 65 | const blogDir = process.cwd(); 66 | logger_1.default.debug({ basePath: blogDir }, 'Using base path'); 67 | try { 68 | const files = await generator(blog, blogDir); 69 | logger_1.default.debug({ fileCount: files.length }, 'Generated files'); 70 | // Clean up build dir and make again 71 | logger_1.default.debug({ path: BUILD_PATH }, 'Cleaning build directory'); 72 | fs.removeSync(BUILD_PATH); 73 | fs.mkdirSync(BUILD_PATH); 74 | // Now write files given by the generator 75 | files.forEach((file) => { 76 | logger_1.default.debug({ file: file.name }, 'Writing file'); 77 | fs.outputFileSync(`${BUILD_PATH}/${file.name}`, file.content, 'utf8'); 78 | }); 79 | logger_1.default.info({ fileCount: files.length }, 'Build completed successfully'); 80 | } 81 | catch (error) { 82 | logger_1.default.error({ error }, 'Build process failed'); 83 | } 84 | }; 85 | const getBlog = (file) => { 86 | try { 87 | const blogPath = path.resolve(file); 88 | logger_1.default.debug({ path: blogPath }, 'Loading blog configuration'); 89 | return fs.readJsonSync(blogPath); 90 | } 91 | catch (error) { 92 | logger_1.default.error({ error, file }, 'Failed to load blog configuration'); 93 | process.exit(1); 94 | } 95 | }; 96 | const program = new commander_1.Command(); 97 | program 98 | .name('jsonblog') 99 | .description('CLI tool for JsonBlog') 100 | .version('2.6.0'); 101 | program 102 | .command('init') 103 | .description('Create an example blog.json') 104 | .action(() => { 105 | const samplePath = path.join(__dirname, '..', 'samples', 'blog.json'); 106 | const targetPath = path.join(process.cwd(), 'blog.json'); 107 | fs.copyFileSync(samplePath, targetPath); 108 | logger_1.default.info('Created blog.json with example content'); 109 | }); 110 | program 111 | .command('build') 112 | .description('Build the blog') 113 | .option('-g, --generator ', 'Generator to use', DEFAULT_GENERATOR) 114 | .argument('[config]', 'Path to blog config file', 'blog.json') 115 | .action(async (config, options) => { 116 | logger_1.default.info({ file: config, generator: options.generator }, 'Starting build command'); 117 | const blog = getBlog(config); 118 | const generator = getGenerator(options.generator); 119 | await build(generator, blog); 120 | }); 121 | program 122 | .command('serve') 123 | .description('Serve the blog') 124 | .option('-p, --port ', 'Port to serve on', '3000') 125 | .action((options) => { 126 | const port = parseInt(options.port, 10); 127 | const app = (0, express_1.default)(); 128 | app.use(express_1.default.static(BUILD_PATH)); 129 | app.listen(port, () => { 130 | logger_1.default.info({ port }, 'Serving blog at http://localhost:${port}'); 131 | }); 132 | }); 133 | program 134 | .command('watch') 135 | .description('Watch for changes and rebuild') 136 | .option('-g, --generator ', 'Generator to use', DEFAULT_GENERATOR) 137 | .argument('[config]', 'Path to blog config file', 'blog.json') 138 | .action(async (config, options) => { 139 | logger_1.default.info({ file: config, generator: options.generator }, 'Starting watch command'); 140 | const watcher = chokidar.watch([config, 'content/**/*', 'templates/**/*'], { 141 | ignored: /(^|[\/\\])\../, 142 | persistent: true 143 | }); 144 | logger_1.default.info(`Watching ${config} and content directory for changes...`); 145 | watcher.on('change', async (path) => { 146 | logger_1.default.info({ path }, 'File change detected'); 147 | const blog = getBlog(config); 148 | const generator = getGenerator(options.generator); 149 | await build(generator, blog); 150 | logger_1.default.info('Rebuild completed'); 151 | }); 152 | }); 153 | program.parse(); 154 | -------------------------------------------------------------------------------- /dist/logger.d.ts: -------------------------------------------------------------------------------- 1 | declare const logger: import("pino").Logger; 2 | export default logger; 3 | -------------------------------------------------------------------------------- /dist/logger.js: -------------------------------------------------------------------------------- 1 | "use strict"; 2 | var __importDefault = (this && this.__importDefault) || function (mod) { 3 | return (mod && mod.__esModule) ? mod : { "default": mod }; 4 | }; 5 | Object.defineProperty(exports, "__esModule", { value: true }); 6 | const pino_1 = __importDefault(require("pino")); 7 | const logger = (0, pino_1.default)({ 8 | transport: { 9 | target: 'pino-pretty', 10 | options: { 11 | colorize: true, 12 | translateTime: 'HH:MM:ss', 13 | ignore: 'pid,hostname', 14 | }, 15 | }, 16 | level: process.env.LOG_LEVEL || 'info', 17 | }); 18 | exports.default = logger; 19 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('ts-jest').JestConfigWithTsJest} */ 2 | module.exports = { 3 | preset: 'ts-jest', 4 | testEnvironment: 'node', 5 | testMatch: ['**/__tests__/**/*.test.ts'], 6 | }; 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "jsonblog-cli", 3 | "version": "2.15.0", 4 | "description": "CLI tool for JsonBlog", 5 | "main": "dist/index.js", 6 | "types": "dist/index.d.ts", 7 | "bin": { 8 | "jsonblog": "./dist/index.js" 9 | }, 10 | "engines": { 11 | "node": ">=20.0.0" 12 | }, 13 | "scripts": { 14 | "build": "tsc", 15 | "dev": "ts-node src/index.ts", 16 | "test": "jest", 17 | "lint": "eslint src/**/*.ts", 18 | "format": "prettier --write \"src/**/*.ts\"", 19 | "prepare": "npm run build", 20 | "prepublishOnly": "npm test && npm run lint", 21 | "preversion": "npm run lint", 22 | "version": "npm run format && git add -A src", 23 | "postversion": "git push && git push --tags", 24 | "release:patch": "npm version patch -m \"Release %s\"", 25 | "release:minor": "npm version minor -m \"Release %s\"", 26 | "release:major": "npm version major -m \"Release %s\"" 27 | }, 28 | "repository": { 29 | "type": "git", 30 | "url": "git+https://github.com/jsonblog/jsonblog-cli.git" 31 | }, 32 | "keywords": [ 33 | "jsonblog", 34 | "blog", 35 | "cli", 36 | "static-site", 37 | "markdown" 38 | ], 39 | "author": "JSON Blog Team", 40 | "license": "MIT", 41 | "bugs": { 42 | "url": "https://github.com/jsonblog/jsonblog-cli/issues" 43 | }, 44 | "homepage": "https://github.com/jsonblog/jsonblog-cli#readme", 45 | "dependencies": { 46 | "chalk": "^4.1.2", 47 | "chokidar": "^3.5.3", 48 | "commander": "^11.1.0", 49 | "express": "^4.18.2", 50 | "fs-extra": "^11.2.0", 51 | "jsonblog-generator-boilerplate": "1.15.0", 52 | "jsonblog-schema": "2.1.0", 53 | "pino": "^9.6.0", 54 | "pino-pretty": "^13.0.0" 55 | }, 56 | "devDependencies": { 57 | "@types/express": "^4.17.21", 58 | "@types/fs-extra": "^11.0.4", 59 | "@types/jest": "^29.0.0", 60 | "@types/node": "^20.0.0", 61 | "@typescript-eslint/eslint-plugin": "^5.0.0", 62 | "@typescript-eslint/parser": "^5.0.0", 63 | "eslint": "^8.0.1", 64 | "jest": "^29.0.0", 65 | "prettier": "^3.0.0", 66 | "ts-jest": "^29.0.0", 67 | "ts-node": "^10.9.2", 68 | "typescript": "^5.0.0" 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | dependencies: 4 | chalk: 5 | specifier: ^4.1.2 6 | version: 4.1.2 7 | chokidar: 8 | specifier: ^3.5.3 9 | version: 3.6.0 10 | commander: 11 | specifier: ^11.1.0 12 | version: 11.1.0 13 | express: 14 | specifier: ^4.18.2 15 | version: 4.21.2 16 | fs-extra: 17 | specifier: ^11.2.0 18 | version: 11.3.0 19 | jsonblog-generator-boilerplate: 20 | specifier: 1.6.0 21 | version: 1.6.0 22 | jsonblog-schema: 23 | specifier: 2.1.0 24 | version: 2.1.0 25 | pino: 26 | specifier: ^9.6.0 27 | version: 9.6.0 28 | pino-pretty: 29 | specifier: ^13.0.0 30 | version: 13.0.0 31 | 32 | devDependencies: 33 | '@types/express': 34 | specifier: ^4.17.21 35 | version: 4.17.21 36 | '@types/fs-extra': 37 | specifier: ^11.0.4 38 | version: 11.0.4 39 | '@types/jest': 40 | specifier: ^29.0.0 41 | version: 29.5.14 42 | '@types/node': 43 | specifier: ^20.0.0 44 | version: 20.17.19 45 | '@typescript-eslint/eslint-plugin': 46 | specifier: ^5.0.0 47 | version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.7.3) 48 | '@typescript-eslint/parser': 49 | specifier: ^5.0.0 50 | version: 5.62.0(eslint@8.57.1)(typescript@5.7.3) 51 | eslint: 52 | specifier: ^8.0.1 53 | version: 8.57.1 54 | jest: 55 | specifier: ^29.0.0 56 | version: 29.7.0(@types/node@20.17.19)(ts-node@10.9.2) 57 | prettier: 58 | specifier: ^3.0.0 59 | version: 3.5.2 60 | ts-jest: 61 | specifier: ^29.0.0 62 | version: 29.2.6(@babel/core@7.26.9)(jest@29.7.0)(typescript@5.7.3) 63 | ts-node: 64 | specifier: ^10.9.2 65 | version: 10.9.2(@types/node@20.17.19)(typescript@5.7.3) 66 | typescript: 67 | specifier: ^5.0.0 68 | version: 5.7.3 69 | 70 | packages: 71 | 72 | /@ampproject/remapping@2.3.0: 73 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 74 | engines: {node: '>=6.0.0'} 75 | dependencies: 76 | '@jridgewell/gen-mapping': 0.3.8 77 | '@jridgewell/trace-mapping': 0.3.25 78 | dev: true 79 | 80 | /@babel/code-frame@7.26.2: 81 | resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} 82 | engines: {node: '>=6.9.0'} 83 | dependencies: 84 | '@babel/helper-validator-identifier': 7.25.9 85 | js-tokens: 4.0.0 86 | picocolors: 1.1.1 87 | dev: true 88 | 89 | /@babel/compat-data@7.26.8: 90 | resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} 91 | engines: {node: '>=6.9.0'} 92 | dev: true 93 | 94 | /@babel/core@7.26.9: 95 | resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} 96 | engines: {node: '>=6.9.0'} 97 | dependencies: 98 | '@ampproject/remapping': 2.3.0 99 | '@babel/code-frame': 7.26.2 100 | '@babel/generator': 7.26.9 101 | '@babel/helper-compilation-targets': 7.26.5 102 | '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) 103 | '@babel/helpers': 7.26.9 104 | '@babel/parser': 7.26.9 105 | '@babel/template': 7.26.9 106 | '@babel/traverse': 7.26.9 107 | '@babel/types': 7.26.9 108 | convert-source-map: 2.0.0 109 | debug: 4.4.0 110 | gensync: 1.0.0-beta.2 111 | json5: 2.2.3 112 | semver: 6.3.1 113 | transitivePeerDependencies: 114 | - supports-color 115 | dev: true 116 | 117 | /@babel/generator@7.26.9: 118 | resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} 119 | engines: {node: '>=6.9.0'} 120 | dependencies: 121 | '@babel/parser': 7.26.9 122 | '@babel/types': 7.26.9 123 | '@jridgewell/gen-mapping': 0.3.8 124 | '@jridgewell/trace-mapping': 0.3.25 125 | jsesc: 3.1.0 126 | dev: true 127 | 128 | /@babel/helper-compilation-targets@7.26.5: 129 | resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} 130 | engines: {node: '>=6.9.0'} 131 | dependencies: 132 | '@babel/compat-data': 7.26.8 133 | '@babel/helper-validator-option': 7.25.9 134 | browserslist: 4.24.4 135 | lru-cache: 5.1.1 136 | semver: 6.3.1 137 | dev: true 138 | 139 | /@babel/helper-module-imports@7.25.9: 140 | resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} 141 | engines: {node: '>=6.9.0'} 142 | dependencies: 143 | '@babel/traverse': 7.26.9 144 | '@babel/types': 7.26.9 145 | transitivePeerDependencies: 146 | - supports-color 147 | dev: true 148 | 149 | /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9): 150 | resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} 151 | engines: {node: '>=6.9.0'} 152 | peerDependencies: 153 | '@babel/core': ^7.0.0 154 | dependencies: 155 | '@babel/core': 7.26.9 156 | '@babel/helper-module-imports': 7.25.9 157 | '@babel/helper-validator-identifier': 7.25.9 158 | '@babel/traverse': 7.26.9 159 | transitivePeerDependencies: 160 | - supports-color 161 | dev: true 162 | 163 | /@babel/helper-plugin-utils@7.26.5: 164 | resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} 165 | engines: {node: '>=6.9.0'} 166 | dev: true 167 | 168 | /@babel/helper-string-parser@7.25.9: 169 | resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} 170 | engines: {node: '>=6.9.0'} 171 | dev: true 172 | 173 | /@babel/helper-validator-identifier@7.25.9: 174 | resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} 175 | engines: {node: '>=6.9.0'} 176 | dev: true 177 | 178 | /@babel/helper-validator-option@7.25.9: 179 | resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} 180 | engines: {node: '>=6.9.0'} 181 | dev: true 182 | 183 | /@babel/helpers@7.26.9: 184 | resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} 185 | engines: {node: '>=6.9.0'} 186 | dependencies: 187 | '@babel/template': 7.26.9 188 | '@babel/types': 7.26.9 189 | dev: true 190 | 191 | /@babel/parser@7.26.9: 192 | resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} 193 | engines: {node: '>=6.0.0'} 194 | hasBin: true 195 | dependencies: 196 | '@babel/types': 7.26.9 197 | dev: true 198 | 199 | /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.9): 200 | resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} 201 | peerDependencies: 202 | '@babel/core': ^7.0.0-0 203 | dependencies: 204 | '@babel/core': 7.26.9 205 | '@babel/helper-plugin-utils': 7.26.5 206 | dev: true 207 | 208 | /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.9): 209 | resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} 210 | peerDependencies: 211 | '@babel/core': ^7.0.0-0 212 | dependencies: 213 | '@babel/core': 7.26.9 214 | '@babel/helper-plugin-utils': 7.26.5 215 | dev: true 216 | 217 | /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.9): 218 | resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} 219 | peerDependencies: 220 | '@babel/core': ^7.0.0-0 221 | dependencies: 222 | '@babel/core': 7.26.9 223 | '@babel/helper-plugin-utils': 7.26.5 224 | dev: true 225 | 226 | /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.9): 227 | resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} 228 | engines: {node: '>=6.9.0'} 229 | peerDependencies: 230 | '@babel/core': ^7.0.0-0 231 | dependencies: 232 | '@babel/core': 7.26.9 233 | '@babel/helper-plugin-utils': 7.26.5 234 | dev: true 235 | 236 | /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9): 237 | resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} 238 | engines: {node: '>=6.9.0'} 239 | peerDependencies: 240 | '@babel/core': ^7.0.0-0 241 | dependencies: 242 | '@babel/core': 7.26.9 243 | '@babel/helper-plugin-utils': 7.26.5 244 | dev: true 245 | 246 | /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9): 247 | resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} 248 | peerDependencies: 249 | '@babel/core': ^7.0.0-0 250 | dependencies: 251 | '@babel/core': 7.26.9 252 | '@babel/helper-plugin-utils': 7.26.5 253 | dev: true 254 | 255 | /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.9): 256 | resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} 257 | peerDependencies: 258 | '@babel/core': ^7.0.0-0 259 | dependencies: 260 | '@babel/core': 7.26.9 261 | '@babel/helper-plugin-utils': 7.26.5 262 | dev: true 263 | 264 | /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9): 265 | resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} 266 | engines: {node: '>=6.9.0'} 267 | peerDependencies: 268 | '@babel/core': ^7.0.0-0 269 | dependencies: 270 | '@babel/core': 7.26.9 271 | '@babel/helper-plugin-utils': 7.26.5 272 | dev: true 273 | 274 | /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.9): 275 | resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} 276 | peerDependencies: 277 | '@babel/core': ^7.0.0-0 278 | dependencies: 279 | '@babel/core': 7.26.9 280 | '@babel/helper-plugin-utils': 7.26.5 281 | dev: true 282 | 283 | /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.9): 284 | resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} 285 | peerDependencies: 286 | '@babel/core': ^7.0.0-0 287 | dependencies: 288 | '@babel/core': 7.26.9 289 | '@babel/helper-plugin-utils': 7.26.5 290 | dev: true 291 | 292 | /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.9): 293 | resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} 294 | peerDependencies: 295 | '@babel/core': ^7.0.0-0 296 | dependencies: 297 | '@babel/core': 7.26.9 298 | '@babel/helper-plugin-utils': 7.26.5 299 | dev: true 300 | 301 | /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.9): 302 | resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} 303 | peerDependencies: 304 | '@babel/core': ^7.0.0-0 305 | dependencies: 306 | '@babel/core': 7.26.9 307 | '@babel/helper-plugin-utils': 7.26.5 308 | dev: true 309 | 310 | /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.9): 311 | resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} 312 | peerDependencies: 313 | '@babel/core': ^7.0.0-0 314 | dependencies: 315 | '@babel/core': 7.26.9 316 | '@babel/helper-plugin-utils': 7.26.5 317 | dev: true 318 | 319 | /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.9): 320 | resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} 321 | peerDependencies: 322 | '@babel/core': ^7.0.0-0 323 | dependencies: 324 | '@babel/core': 7.26.9 325 | '@babel/helper-plugin-utils': 7.26.5 326 | dev: true 327 | 328 | /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.9): 329 | resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} 330 | engines: {node: '>=6.9.0'} 331 | peerDependencies: 332 | '@babel/core': ^7.0.0-0 333 | dependencies: 334 | '@babel/core': 7.26.9 335 | '@babel/helper-plugin-utils': 7.26.5 336 | dev: true 337 | 338 | /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.9): 339 | resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} 340 | engines: {node: '>=6.9.0'} 341 | peerDependencies: 342 | '@babel/core': ^7.0.0-0 343 | dependencies: 344 | '@babel/core': 7.26.9 345 | '@babel/helper-plugin-utils': 7.26.5 346 | dev: true 347 | 348 | /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9): 349 | resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} 350 | engines: {node: '>=6.9.0'} 351 | peerDependencies: 352 | '@babel/core': ^7.0.0-0 353 | dependencies: 354 | '@babel/core': 7.26.9 355 | '@babel/helper-plugin-utils': 7.26.5 356 | dev: true 357 | 358 | /@babel/template@7.26.9: 359 | resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} 360 | engines: {node: '>=6.9.0'} 361 | dependencies: 362 | '@babel/code-frame': 7.26.2 363 | '@babel/parser': 7.26.9 364 | '@babel/types': 7.26.9 365 | dev: true 366 | 367 | /@babel/traverse@7.26.9: 368 | resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} 369 | engines: {node: '>=6.9.0'} 370 | dependencies: 371 | '@babel/code-frame': 7.26.2 372 | '@babel/generator': 7.26.9 373 | '@babel/parser': 7.26.9 374 | '@babel/template': 7.26.9 375 | '@babel/types': 7.26.9 376 | debug: 4.4.0 377 | globals: 11.12.0 378 | transitivePeerDependencies: 379 | - supports-color 380 | dev: true 381 | 382 | /@babel/types@7.26.9: 383 | resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} 384 | engines: {node: '>=6.9.0'} 385 | dependencies: 386 | '@babel/helper-string-parser': 7.25.9 387 | '@babel/helper-validator-identifier': 7.25.9 388 | dev: true 389 | 390 | /@bcoe/v8-coverage@0.2.3: 391 | resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} 392 | dev: true 393 | 394 | /@cspotcode/source-map-support@0.8.1: 395 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 396 | engines: {node: '>=12'} 397 | dependencies: 398 | '@jridgewell/trace-mapping': 0.3.9 399 | dev: true 400 | 401 | /@eslint-community/eslint-utils@4.4.1(eslint@8.57.1): 402 | resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} 403 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 404 | peerDependencies: 405 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 406 | dependencies: 407 | eslint: 8.57.1 408 | eslint-visitor-keys: 3.4.3 409 | dev: true 410 | 411 | /@eslint-community/regexpp@4.12.1: 412 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 413 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 414 | dev: true 415 | 416 | /@eslint/eslintrc@2.1.4: 417 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 418 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 419 | dependencies: 420 | ajv: 6.12.6 421 | debug: 4.4.0 422 | espree: 9.6.1 423 | globals: 13.24.0 424 | ignore: 5.3.2 425 | import-fresh: 3.3.1 426 | js-yaml: 4.1.0 427 | minimatch: 3.1.2 428 | strip-json-comments: 3.1.1 429 | transitivePeerDependencies: 430 | - supports-color 431 | dev: true 432 | 433 | /@eslint/js@8.57.1: 434 | resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} 435 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 436 | dev: true 437 | 438 | /@humanwhocodes/config-array@0.13.0: 439 | resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} 440 | engines: {node: '>=10.10.0'} 441 | deprecated: Use @eslint/config-array instead 442 | dependencies: 443 | '@humanwhocodes/object-schema': 2.0.3 444 | debug: 4.4.0 445 | minimatch: 3.1.2 446 | transitivePeerDependencies: 447 | - supports-color 448 | dev: true 449 | 450 | /@humanwhocodes/module-importer@1.0.1: 451 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 452 | engines: {node: '>=12.22'} 453 | dev: true 454 | 455 | /@humanwhocodes/object-schema@2.0.3: 456 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 457 | deprecated: Use @eslint/object-schema instead 458 | dev: true 459 | 460 | /@istanbuljs/load-nyc-config@1.1.0: 461 | resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} 462 | engines: {node: '>=8'} 463 | dependencies: 464 | camelcase: 5.3.1 465 | find-up: 4.1.0 466 | get-package-type: 0.1.0 467 | js-yaml: 3.14.1 468 | resolve-from: 5.0.0 469 | dev: true 470 | 471 | /@istanbuljs/schema@0.1.3: 472 | resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} 473 | engines: {node: '>=8'} 474 | dev: true 475 | 476 | /@jest/console@29.7.0: 477 | resolution: {integrity: sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==} 478 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 479 | dependencies: 480 | '@jest/types': 29.6.3 481 | '@types/node': 20.17.19 482 | chalk: 4.1.2 483 | jest-message-util: 29.7.0 484 | jest-util: 29.7.0 485 | slash: 3.0.0 486 | dev: true 487 | 488 | /@jest/core@29.7.0(ts-node@10.9.2): 489 | resolution: {integrity: sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==} 490 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 491 | peerDependencies: 492 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 493 | peerDependenciesMeta: 494 | node-notifier: 495 | optional: true 496 | dependencies: 497 | '@jest/console': 29.7.0 498 | '@jest/reporters': 29.7.0 499 | '@jest/test-result': 29.7.0 500 | '@jest/transform': 29.7.0 501 | '@jest/types': 29.6.3 502 | '@types/node': 20.17.19 503 | ansi-escapes: 4.3.2 504 | chalk: 4.1.2 505 | ci-info: 3.9.0 506 | exit: 0.1.2 507 | graceful-fs: 4.2.11 508 | jest-changed-files: 29.7.0 509 | jest-config: 29.7.0(@types/node@20.17.19)(ts-node@10.9.2) 510 | jest-haste-map: 29.7.0 511 | jest-message-util: 29.7.0 512 | jest-regex-util: 29.6.3 513 | jest-resolve: 29.7.0 514 | jest-resolve-dependencies: 29.7.0 515 | jest-runner: 29.7.0 516 | jest-runtime: 29.7.0 517 | jest-snapshot: 29.7.0 518 | jest-util: 29.7.0 519 | jest-validate: 29.7.0 520 | jest-watcher: 29.7.0 521 | micromatch: 4.0.8 522 | pretty-format: 29.7.0 523 | slash: 3.0.0 524 | strip-ansi: 6.0.1 525 | transitivePeerDependencies: 526 | - babel-plugin-macros 527 | - supports-color 528 | - ts-node 529 | dev: true 530 | 531 | /@jest/environment@29.7.0: 532 | resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} 533 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 534 | dependencies: 535 | '@jest/fake-timers': 29.7.0 536 | '@jest/types': 29.6.3 537 | '@types/node': 20.17.19 538 | jest-mock: 29.7.0 539 | dev: true 540 | 541 | /@jest/expect-utils@29.7.0: 542 | resolution: {integrity: sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==} 543 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 544 | dependencies: 545 | jest-get-type: 29.6.3 546 | dev: true 547 | 548 | /@jest/expect@29.7.0: 549 | resolution: {integrity: sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==} 550 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 551 | dependencies: 552 | expect: 29.7.0 553 | jest-snapshot: 29.7.0 554 | transitivePeerDependencies: 555 | - supports-color 556 | dev: true 557 | 558 | /@jest/fake-timers@29.7.0: 559 | resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} 560 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 561 | dependencies: 562 | '@jest/types': 29.6.3 563 | '@sinonjs/fake-timers': 10.3.0 564 | '@types/node': 20.17.19 565 | jest-message-util: 29.7.0 566 | jest-mock: 29.7.0 567 | jest-util: 29.7.0 568 | dev: true 569 | 570 | /@jest/globals@29.7.0: 571 | resolution: {integrity: sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==} 572 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 573 | dependencies: 574 | '@jest/environment': 29.7.0 575 | '@jest/expect': 29.7.0 576 | '@jest/types': 29.6.3 577 | jest-mock: 29.7.0 578 | transitivePeerDependencies: 579 | - supports-color 580 | dev: true 581 | 582 | /@jest/reporters@29.7.0: 583 | resolution: {integrity: sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==} 584 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 585 | peerDependencies: 586 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 587 | peerDependenciesMeta: 588 | node-notifier: 589 | optional: true 590 | dependencies: 591 | '@bcoe/v8-coverage': 0.2.3 592 | '@jest/console': 29.7.0 593 | '@jest/test-result': 29.7.0 594 | '@jest/transform': 29.7.0 595 | '@jest/types': 29.6.3 596 | '@jridgewell/trace-mapping': 0.3.25 597 | '@types/node': 20.17.19 598 | chalk: 4.1.2 599 | collect-v8-coverage: 1.0.2 600 | exit: 0.1.2 601 | glob: 7.2.3 602 | graceful-fs: 4.2.11 603 | istanbul-lib-coverage: 3.2.2 604 | istanbul-lib-instrument: 6.0.3 605 | istanbul-lib-report: 3.0.1 606 | istanbul-lib-source-maps: 4.0.1 607 | istanbul-reports: 3.1.7 608 | jest-message-util: 29.7.0 609 | jest-util: 29.7.0 610 | jest-worker: 29.7.0 611 | slash: 3.0.0 612 | string-length: 4.0.2 613 | strip-ansi: 6.0.1 614 | v8-to-istanbul: 9.3.0 615 | transitivePeerDependencies: 616 | - supports-color 617 | dev: true 618 | 619 | /@jest/schemas@29.6.3: 620 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 621 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 622 | dependencies: 623 | '@sinclair/typebox': 0.27.8 624 | dev: true 625 | 626 | /@jest/source-map@29.6.3: 627 | resolution: {integrity: sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==} 628 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 629 | dependencies: 630 | '@jridgewell/trace-mapping': 0.3.25 631 | callsites: 3.1.0 632 | graceful-fs: 4.2.11 633 | dev: true 634 | 635 | /@jest/test-result@29.7.0: 636 | resolution: {integrity: sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==} 637 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 638 | dependencies: 639 | '@jest/console': 29.7.0 640 | '@jest/types': 29.6.3 641 | '@types/istanbul-lib-coverage': 2.0.6 642 | collect-v8-coverage: 1.0.2 643 | dev: true 644 | 645 | /@jest/test-sequencer@29.7.0: 646 | resolution: {integrity: sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==} 647 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 648 | dependencies: 649 | '@jest/test-result': 29.7.0 650 | graceful-fs: 4.2.11 651 | jest-haste-map: 29.7.0 652 | slash: 3.0.0 653 | dev: true 654 | 655 | /@jest/transform@29.7.0: 656 | resolution: {integrity: sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==} 657 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 658 | dependencies: 659 | '@babel/core': 7.26.9 660 | '@jest/types': 29.6.3 661 | '@jridgewell/trace-mapping': 0.3.25 662 | babel-plugin-istanbul: 6.1.1 663 | chalk: 4.1.2 664 | convert-source-map: 2.0.0 665 | fast-json-stable-stringify: 2.1.0 666 | graceful-fs: 4.2.11 667 | jest-haste-map: 29.7.0 668 | jest-regex-util: 29.6.3 669 | jest-util: 29.7.0 670 | micromatch: 4.0.8 671 | pirates: 4.0.6 672 | slash: 3.0.0 673 | write-file-atomic: 4.0.2 674 | transitivePeerDependencies: 675 | - supports-color 676 | dev: true 677 | 678 | /@jest/types@29.6.3: 679 | resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} 680 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 681 | dependencies: 682 | '@jest/schemas': 29.6.3 683 | '@types/istanbul-lib-coverage': 2.0.6 684 | '@types/istanbul-reports': 3.0.4 685 | '@types/node': 20.17.19 686 | '@types/yargs': 17.0.33 687 | chalk: 4.1.2 688 | dev: true 689 | 690 | /@jridgewell/gen-mapping@0.3.8: 691 | resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} 692 | engines: {node: '>=6.0.0'} 693 | dependencies: 694 | '@jridgewell/set-array': 1.2.1 695 | '@jridgewell/sourcemap-codec': 1.5.0 696 | '@jridgewell/trace-mapping': 0.3.25 697 | dev: true 698 | 699 | /@jridgewell/resolve-uri@3.1.2: 700 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 701 | engines: {node: '>=6.0.0'} 702 | dev: true 703 | 704 | /@jridgewell/set-array@1.2.1: 705 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 706 | engines: {node: '>=6.0.0'} 707 | dev: true 708 | 709 | /@jridgewell/sourcemap-codec@1.5.0: 710 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 711 | dev: true 712 | 713 | /@jridgewell/trace-mapping@0.3.25: 714 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 715 | dependencies: 716 | '@jridgewell/resolve-uri': 3.1.2 717 | '@jridgewell/sourcemap-codec': 1.5.0 718 | dev: true 719 | 720 | /@jridgewell/trace-mapping@0.3.9: 721 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 722 | dependencies: 723 | '@jridgewell/resolve-uri': 3.1.2 724 | '@jridgewell/sourcemap-codec': 1.5.0 725 | dev: true 726 | 727 | /@nodelib/fs.scandir@2.1.5: 728 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 729 | engines: {node: '>= 8'} 730 | dependencies: 731 | '@nodelib/fs.stat': 2.0.5 732 | run-parallel: 1.2.0 733 | dev: true 734 | 735 | /@nodelib/fs.stat@2.0.5: 736 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 737 | engines: {node: '>= 8'} 738 | dev: true 739 | 740 | /@nodelib/fs.walk@1.2.8: 741 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 742 | engines: {node: '>= 8'} 743 | dependencies: 744 | '@nodelib/fs.scandir': 2.1.5 745 | fastq: 1.19.0 746 | dev: true 747 | 748 | /@sinclair/typebox@0.27.8: 749 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 750 | dev: true 751 | 752 | /@sinonjs/commons@3.0.1: 753 | resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} 754 | dependencies: 755 | type-detect: 4.0.8 756 | dev: true 757 | 758 | /@sinonjs/fake-timers@10.3.0: 759 | resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} 760 | dependencies: 761 | '@sinonjs/commons': 3.0.1 762 | dev: true 763 | 764 | /@tsconfig/node10@1.0.11: 765 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 766 | dev: true 767 | 768 | /@tsconfig/node12@1.0.11: 769 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 770 | dev: true 771 | 772 | /@tsconfig/node14@1.0.3: 773 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 774 | dev: true 775 | 776 | /@tsconfig/node16@1.0.4: 777 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 778 | dev: true 779 | 780 | /@types/babel__core@7.20.5: 781 | resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} 782 | dependencies: 783 | '@babel/parser': 7.26.9 784 | '@babel/types': 7.26.9 785 | '@types/babel__generator': 7.6.8 786 | '@types/babel__template': 7.4.4 787 | '@types/babel__traverse': 7.20.6 788 | dev: true 789 | 790 | /@types/babel__generator@7.6.8: 791 | resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} 792 | dependencies: 793 | '@babel/types': 7.26.9 794 | dev: true 795 | 796 | /@types/babel__template@7.4.4: 797 | resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} 798 | dependencies: 799 | '@babel/parser': 7.26.9 800 | '@babel/types': 7.26.9 801 | dev: true 802 | 803 | /@types/babel__traverse@7.20.6: 804 | resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} 805 | dependencies: 806 | '@babel/types': 7.26.9 807 | dev: true 808 | 809 | /@types/body-parser@1.19.5: 810 | resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} 811 | dependencies: 812 | '@types/connect': 3.4.38 813 | '@types/node': 20.17.19 814 | dev: true 815 | 816 | /@types/connect@3.4.38: 817 | resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} 818 | dependencies: 819 | '@types/node': 20.17.19 820 | dev: true 821 | 822 | /@types/express-serve-static-core@4.19.6: 823 | resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} 824 | dependencies: 825 | '@types/node': 20.17.19 826 | '@types/qs': 6.9.18 827 | '@types/range-parser': 1.2.7 828 | '@types/send': 0.17.4 829 | dev: true 830 | 831 | /@types/express@4.17.21: 832 | resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} 833 | dependencies: 834 | '@types/body-parser': 1.19.5 835 | '@types/express-serve-static-core': 4.19.6 836 | '@types/qs': 6.9.18 837 | '@types/serve-static': 1.15.7 838 | dev: true 839 | 840 | /@types/fs-extra@11.0.4: 841 | resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} 842 | dependencies: 843 | '@types/jsonfile': 6.1.4 844 | '@types/node': 20.17.19 845 | dev: true 846 | 847 | /@types/graceful-fs@4.1.9: 848 | resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} 849 | dependencies: 850 | '@types/node': 20.17.19 851 | dev: true 852 | 853 | /@types/http-errors@2.0.4: 854 | resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} 855 | dev: true 856 | 857 | /@types/istanbul-lib-coverage@2.0.6: 858 | resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} 859 | dev: true 860 | 861 | /@types/istanbul-lib-report@3.0.3: 862 | resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} 863 | dependencies: 864 | '@types/istanbul-lib-coverage': 2.0.6 865 | dev: true 866 | 867 | /@types/istanbul-reports@3.0.4: 868 | resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} 869 | dependencies: 870 | '@types/istanbul-lib-report': 3.0.3 871 | dev: true 872 | 873 | /@types/jest@29.5.14: 874 | resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} 875 | dependencies: 876 | expect: 29.7.0 877 | pretty-format: 29.7.0 878 | dev: true 879 | 880 | /@types/json-schema@7.0.15: 881 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 882 | dev: true 883 | 884 | /@types/jsonfile@6.1.4: 885 | resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} 886 | dependencies: 887 | '@types/node': 20.17.19 888 | dev: true 889 | 890 | /@types/mime@1.3.5: 891 | resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} 892 | dev: true 893 | 894 | /@types/node@20.17.19: 895 | resolution: {integrity: sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==} 896 | dependencies: 897 | undici-types: 6.19.8 898 | dev: true 899 | 900 | /@types/qs@6.9.18: 901 | resolution: {integrity: sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA==} 902 | dev: true 903 | 904 | /@types/range-parser@1.2.7: 905 | resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} 906 | dev: true 907 | 908 | /@types/semver@7.5.8: 909 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 910 | dev: true 911 | 912 | /@types/send@0.17.4: 913 | resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} 914 | dependencies: 915 | '@types/mime': 1.3.5 916 | '@types/node': 20.17.19 917 | dev: true 918 | 919 | /@types/serve-static@1.15.7: 920 | resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} 921 | dependencies: 922 | '@types/http-errors': 2.0.4 923 | '@types/node': 20.17.19 924 | '@types/send': 0.17.4 925 | dev: true 926 | 927 | /@types/stack-utils@2.0.3: 928 | resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} 929 | dev: true 930 | 931 | /@types/yargs-parser@21.0.3: 932 | resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} 933 | dev: true 934 | 935 | /@types/yargs@17.0.33: 936 | resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} 937 | dependencies: 938 | '@types/yargs-parser': 21.0.3 939 | dev: true 940 | 941 | /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.57.1)(typescript@5.7.3): 942 | resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} 943 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 944 | peerDependencies: 945 | '@typescript-eslint/parser': ^5.0.0 946 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 947 | typescript: '*' 948 | peerDependenciesMeta: 949 | typescript: 950 | optional: true 951 | dependencies: 952 | '@eslint-community/regexpp': 4.12.1 953 | '@typescript-eslint/parser': 5.62.0(eslint@8.57.1)(typescript@5.7.3) 954 | '@typescript-eslint/scope-manager': 5.62.0 955 | '@typescript-eslint/type-utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) 956 | '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) 957 | debug: 4.4.0 958 | eslint: 8.57.1 959 | graphemer: 1.4.0 960 | ignore: 5.3.2 961 | natural-compare-lite: 1.4.0 962 | semver: 7.7.1 963 | tsutils: 3.21.0(typescript@5.7.3) 964 | typescript: 5.7.3 965 | transitivePeerDependencies: 966 | - supports-color 967 | dev: true 968 | 969 | /@typescript-eslint/parser@5.62.0(eslint@8.57.1)(typescript@5.7.3): 970 | resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} 971 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 972 | peerDependencies: 973 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 974 | typescript: '*' 975 | peerDependenciesMeta: 976 | typescript: 977 | optional: true 978 | dependencies: 979 | '@typescript-eslint/scope-manager': 5.62.0 980 | '@typescript-eslint/types': 5.62.0 981 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) 982 | debug: 4.4.0 983 | eslint: 8.57.1 984 | typescript: 5.7.3 985 | transitivePeerDependencies: 986 | - supports-color 987 | dev: true 988 | 989 | /@typescript-eslint/scope-manager@5.62.0: 990 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} 991 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 992 | dependencies: 993 | '@typescript-eslint/types': 5.62.0 994 | '@typescript-eslint/visitor-keys': 5.62.0 995 | dev: true 996 | 997 | /@typescript-eslint/type-utils@5.62.0(eslint@8.57.1)(typescript@5.7.3): 998 | resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} 999 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1000 | peerDependencies: 1001 | eslint: '*' 1002 | typescript: '*' 1003 | peerDependenciesMeta: 1004 | typescript: 1005 | optional: true 1006 | dependencies: 1007 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) 1008 | '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.7.3) 1009 | debug: 4.4.0 1010 | eslint: 8.57.1 1011 | tsutils: 3.21.0(typescript@5.7.3) 1012 | typescript: 5.7.3 1013 | transitivePeerDependencies: 1014 | - supports-color 1015 | dev: true 1016 | 1017 | /@typescript-eslint/types@5.62.0: 1018 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} 1019 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1020 | dev: true 1021 | 1022 | /@typescript-eslint/typescript-estree@5.62.0(typescript@5.7.3): 1023 | resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} 1024 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1025 | peerDependencies: 1026 | typescript: '*' 1027 | peerDependenciesMeta: 1028 | typescript: 1029 | optional: true 1030 | dependencies: 1031 | '@typescript-eslint/types': 5.62.0 1032 | '@typescript-eslint/visitor-keys': 5.62.0 1033 | debug: 4.4.0 1034 | globby: 11.1.0 1035 | is-glob: 4.0.3 1036 | semver: 7.7.1 1037 | tsutils: 3.21.0(typescript@5.7.3) 1038 | typescript: 5.7.3 1039 | transitivePeerDependencies: 1040 | - supports-color 1041 | dev: true 1042 | 1043 | /@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.7.3): 1044 | resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} 1045 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1046 | peerDependencies: 1047 | eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 1048 | dependencies: 1049 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 1050 | '@types/json-schema': 7.0.15 1051 | '@types/semver': 7.5.8 1052 | '@typescript-eslint/scope-manager': 5.62.0 1053 | '@typescript-eslint/types': 5.62.0 1054 | '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.7.3) 1055 | eslint: 8.57.1 1056 | eslint-scope: 5.1.1 1057 | semver: 7.7.1 1058 | transitivePeerDependencies: 1059 | - supports-color 1060 | - typescript 1061 | dev: true 1062 | 1063 | /@typescript-eslint/visitor-keys@5.62.0: 1064 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} 1065 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1066 | dependencies: 1067 | '@typescript-eslint/types': 5.62.0 1068 | eslint-visitor-keys: 3.4.3 1069 | dev: true 1070 | 1071 | /@ungap/structured-clone@1.3.0: 1072 | resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} 1073 | dev: true 1074 | 1075 | /accepts@1.3.8: 1076 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 1077 | engines: {node: '>= 0.6'} 1078 | dependencies: 1079 | mime-types: 2.1.35 1080 | negotiator: 0.6.3 1081 | dev: false 1082 | 1083 | /acorn-jsx@5.3.2(acorn@8.14.0): 1084 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 1085 | peerDependencies: 1086 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 1087 | dependencies: 1088 | acorn: 8.14.0 1089 | dev: true 1090 | 1091 | /acorn-walk@8.3.4: 1092 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 1093 | engines: {node: '>=0.4.0'} 1094 | dependencies: 1095 | acorn: 8.14.0 1096 | dev: true 1097 | 1098 | /acorn@8.14.0: 1099 | resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} 1100 | engines: {node: '>=0.4.0'} 1101 | hasBin: true 1102 | dev: true 1103 | 1104 | /ajv@6.12.6: 1105 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 1106 | dependencies: 1107 | fast-deep-equal: 3.1.3 1108 | fast-json-stable-stringify: 2.1.0 1109 | json-schema-traverse: 0.4.1 1110 | uri-js: 4.4.1 1111 | dev: true 1112 | 1113 | /ajv@8.17.1: 1114 | resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} 1115 | dependencies: 1116 | fast-deep-equal: 3.1.3 1117 | fast-uri: 3.0.6 1118 | json-schema-traverse: 1.0.0 1119 | require-from-string: 2.0.2 1120 | dev: false 1121 | 1122 | /ansi-escapes@4.3.2: 1123 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} 1124 | engines: {node: '>=8'} 1125 | dependencies: 1126 | type-fest: 0.21.3 1127 | dev: true 1128 | 1129 | /ansi-regex@5.0.1: 1130 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 1131 | engines: {node: '>=8'} 1132 | dev: true 1133 | 1134 | /ansi-styles@4.3.0: 1135 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 1136 | engines: {node: '>=8'} 1137 | dependencies: 1138 | color-convert: 2.0.1 1139 | 1140 | /ansi-styles@5.2.0: 1141 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 1142 | engines: {node: '>=10'} 1143 | dev: true 1144 | 1145 | /anymatch@3.1.3: 1146 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 1147 | engines: {node: '>= 8'} 1148 | dependencies: 1149 | normalize-path: 3.0.0 1150 | picomatch: 2.3.1 1151 | 1152 | /arg@4.1.3: 1153 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 1154 | dev: true 1155 | 1156 | /argparse@1.0.10: 1157 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 1158 | dependencies: 1159 | sprintf-js: 1.0.3 1160 | dev: true 1161 | 1162 | /argparse@2.0.1: 1163 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 1164 | 1165 | /array-flatten@1.1.1: 1166 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 1167 | dev: false 1168 | 1169 | /array-union@2.1.0: 1170 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 1171 | engines: {node: '>=8'} 1172 | dev: true 1173 | 1174 | /async@3.2.6: 1175 | resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} 1176 | dev: true 1177 | 1178 | /asynckit@0.4.0: 1179 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 1180 | dev: false 1181 | 1182 | /atomic-sleep@1.0.0: 1183 | resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} 1184 | engines: {node: '>=8.0.0'} 1185 | dev: false 1186 | 1187 | /axios@1.7.9: 1188 | resolution: {integrity: sha512-LhLcE7Hbiryz8oMDdDptSrWowmB4Bl6RCt6sIJKpRB4XtVf0iEgewX3au/pJqm+Py1kCASkb/FFKjxQaLtxJvw==} 1189 | dependencies: 1190 | follow-redirects: 1.15.9 1191 | form-data: 4.0.2 1192 | proxy-from-env: 1.1.0 1193 | transitivePeerDependencies: 1194 | - debug 1195 | dev: false 1196 | 1197 | /babel-jest@29.7.0(@babel/core@7.26.9): 1198 | resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} 1199 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1200 | peerDependencies: 1201 | '@babel/core': ^7.8.0 1202 | dependencies: 1203 | '@babel/core': 7.26.9 1204 | '@jest/transform': 29.7.0 1205 | '@types/babel__core': 7.20.5 1206 | babel-plugin-istanbul: 6.1.1 1207 | babel-preset-jest: 29.6.3(@babel/core@7.26.9) 1208 | chalk: 4.1.2 1209 | graceful-fs: 4.2.11 1210 | slash: 3.0.0 1211 | transitivePeerDependencies: 1212 | - supports-color 1213 | dev: true 1214 | 1215 | /babel-plugin-istanbul@6.1.1: 1216 | resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} 1217 | engines: {node: '>=8'} 1218 | dependencies: 1219 | '@babel/helper-plugin-utils': 7.26.5 1220 | '@istanbuljs/load-nyc-config': 1.1.0 1221 | '@istanbuljs/schema': 0.1.3 1222 | istanbul-lib-instrument: 5.2.1 1223 | test-exclude: 6.0.0 1224 | transitivePeerDependencies: 1225 | - supports-color 1226 | dev: true 1227 | 1228 | /babel-plugin-jest-hoist@29.6.3: 1229 | resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} 1230 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1231 | dependencies: 1232 | '@babel/template': 7.26.9 1233 | '@babel/types': 7.26.9 1234 | '@types/babel__core': 7.20.5 1235 | '@types/babel__traverse': 7.20.6 1236 | dev: true 1237 | 1238 | /babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.9): 1239 | resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} 1240 | peerDependencies: 1241 | '@babel/core': ^7.0.0 1242 | dependencies: 1243 | '@babel/core': 7.26.9 1244 | '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.9) 1245 | '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.9) 1246 | '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.9) 1247 | '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.9) 1248 | '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) 1249 | '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9) 1250 | '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.9) 1251 | '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.9) 1252 | '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) 1253 | '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.9) 1254 | '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.9) 1255 | '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.9) 1256 | '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) 1257 | '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.9) 1258 | '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.9) 1259 | dev: true 1260 | 1261 | /babel-preset-jest@29.6.3(@babel/core@7.26.9): 1262 | resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} 1263 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1264 | peerDependencies: 1265 | '@babel/core': ^7.0.0 1266 | dependencies: 1267 | '@babel/core': 7.26.9 1268 | babel-plugin-jest-hoist: 29.6.3 1269 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) 1270 | dev: true 1271 | 1272 | /balanced-match@1.0.2: 1273 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 1274 | dev: true 1275 | 1276 | /binary-extensions@2.3.0: 1277 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 1278 | engines: {node: '>=8'} 1279 | dev: false 1280 | 1281 | /body-parser@1.20.3: 1282 | resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} 1283 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1284 | dependencies: 1285 | bytes: 3.1.2 1286 | content-type: 1.0.5 1287 | debug: 2.6.9 1288 | depd: 2.0.0 1289 | destroy: 1.2.0 1290 | http-errors: 2.0.0 1291 | iconv-lite: 0.4.24 1292 | on-finished: 2.4.1 1293 | qs: 6.13.0 1294 | raw-body: 2.5.2 1295 | type-is: 1.6.18 1296 | unpipe: 1.0.0 1297 | transitivePeerDependencies: 1298 | - supports-color 1299 | dev: false 1300 | 1301 | /brace-expansion@1.1.11: 1302 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 1303 | dependencies: 1304 | balanced-match: 1.0.2 1305 | concat-map: 0.0.1 1306 | dev: true 1307 | 1308 | /brace-expansion@2.0.1: 1309 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 1310 | dependencies: 1311 | balanced-match: 1.0.2 1312 | dev: true 1313 | 1314 | /braces@3.0.3: 1315 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 1316 | engines: {node: '>=8'} 1317 | dependencies: 1318 | fill-range: 7.1.1 1319 | 1320 | /browserslist@4.24.4: 1321 | resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} 1322 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 1323 | hasBin: true 1324 | dependencies: 1325 | caniuse-lite: 1.0.30001700 1326 | electron-to-chromium: 1.5.104 1327 | node-releases: 2.0.19 1328 | update-browserslist-db: 1.1.2(browserslist@4.24.4) 1329 | dev: true 1330 | 1331 | /bs-logger@0.2.6: 1332 | resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} 1333 | engines: {node: '>= 6'} 1334 | dependencies: 1335 | fast-json-stable-stringify: 2.1.0 1336 | dev: true 1337 | 1338 | /bser@2.1.1: 1339 | resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} 1340 | dependencies: 1341 | node-int64: 0.4.0 1342 | dev: true 1343 | 1344 | /buffer-from@1.1.2: 1345 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 1346 | dev: true 1347 | 1348 | /bytes@3.1.2: 1349 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 1350 | engines: {node: '>= 0.8'} 1351 | dev: false 1352 | 1353 | /call-bind-apply-helpers@1.0.2: 1354 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 1355 | engines: {node: '>= 0.4'} 1356 | dependencies: 1357 | es-errors: 1.3.0 1358 | function-bind: 1.1.2 1359 | dev: false 1360 | 1361 | /call-bound@1.0.3: 1362 | resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} 1363 | engines: {node: '>= 0.4'} 1364 | dependencies: 1365 | call-bind-apply-helpers: 1.0.2 1366 | get-intrinsic: 1.3.0 1367 | dev: false 1368 | 1369 | /callsites@3.1.0: 1370 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 1371 | engines: {node: '>=6'} 1372 | dev: true 1373 | 1374 | /camelcase@5.3.1: 1375 | resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} 1376 | engines: {node: '>=6'} 1377 | dev: true 1378 | 1379 | /camelcase@6.3.0: 1380 | resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} 1381 | engines: {node: '>=10'} 1382 | dev: true 1383 | 1384 | /caniuse-lite@1.0.30001700: 1385 | resolution: {integrity: sha512-2S6XIXwaE7K7erT8dY+kLQcpa5ms63XlRkMkReXjle+kf6c5g38vyMl+Z5y8dSxOFDhcFe+nxnn261PLxBSQsQ==} 1386 | dev: true 1387 | 1388 | /chalk@4.1.2: 1389 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 1390 | engines: {node: '>=10'} 1391 | dependencies: 1392 | ansi-styles: 4.3.0 1393 | supports-color: 7.2.0 1394 | 1395 | /char-regex@1.0.2: 1396 | resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} 1397 | engines: {node: '>=10'} 1398 | dev: true 1399 | 1400 | /chokidar@3.6.0: 1401 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 1402 | engines: {node: '>= 8.10.0'} 1403 | dependencies: 1404 | anymatch: 3.1.3 1405 | braces: 3.0.3 1406 | glob-parent: 5.1.2 1407 | is-binary-path: 2.1.0 1408 | is-glob: 4.0.3 1409 | normalize-path: 3.0.0 1410 | readdirp: 3.6.0 1411 | optionalDependencies: 1412 | fsevents: 2.3.3 1413 | dev: false 1414 | 1415 | /ci-info@3.9.0: 1416 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} 1417 | engines: {node: '>=8'} 1418 | dev: true 1419 | 1420 | /cjs-module-lexer@1.4.3: 1421 | resolution: {integrity: sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q==} 1422 | dev: true 1423 | 1424 | /cliui@8.0.1: 1425 | resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} 1426 | engines: {node: '>=12'} 1427 | dependencies: 1428 | string-width: 4.2.3 1429 | strip-ansi: 6.0.1 1430 | wrap-ansi: 7.0.0 1431 | dev: true 1432 | 1433 | /co@4.6.0: 1434 | resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} 1435 | engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} 1436 | dev: true 1437 | 1438 | /collect-v8-coverage@1.0.2: 1439 | resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} 1440 | dev: true 1441 | 1442 | /color-convert@2.0.1: 1443 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 1444 | engines: {node: '>=7.0.0'} 1445 | dependencies: 1446 | color-name: 1.1.4 1447 | 1448 | /color-name@1.1.4: 1449 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 1450 | 1451 | /colorette@2.0.20: 1452 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 1453 | dev: false 1454 | 1455 | /combined-stream@1.0.8: 1456 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 1457 | engines: {node: '>= 0.8'} 1458 | dependencies: 1459 | delayed-stream: 1.0.0 1460 | dev: false 1461 | 1462 | /commander@11.1.0: 1463 | resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} 1464 | engines: {node: '>=16'} 1465 | dev: false 1466 | 1467 | /concat-map@0.0.1: 1468 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 1469 | dev: true 1470 | 1471 | /content-disposition@0.5.4: 1472 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 1473 | engines: {node: '>= 0.6'} 1474 | dependencies: 1475 | safe-buffer: 5.2.1 1476 | dev: false 1477 | 1478 | /content-type@1.0.5: 1479 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 1480 | engines: {node: '>= 0.6'} 1481 | dev: false 1482 | 1483 | /convert-source-map@2.0.0: 1484 | resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} 1485 | dev: true 1486 | 1487 | /cookie-signature@1.0.6: 1488 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 1489 | dev: false 1490 | 1491 | /cookie@0.7.1: 1492 | resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} 1493 | engines: {node: '>= 0.6'} 1494 | dev: false 1495 | 1496 | /create-jest@29.7.0(@types/node@20.17.19)(ts-node@10.9.2): 1497 | resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} 1498 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1499 | hasBin: true 1500 | dependencies: 1501 | '@jest/types': 29.6.3 1502 | chalk: 4.1.2 1503 | exit: 0.1.2 1504 | graceful-fs: 4.2.11 1505 | jest-config: 29.7.0(@types/node@20.17.19)(ts-node@10.9.2) 1506 | jest-util: 29.7.0 1507 | prompts: 2.4.2 1508 | transitivePeerDependencies: 1509 | - '@types/node' 1510 | - babel-plugin-macros 1511 | - supports-color 1512 | - ts-node 1513 | dev: true 1514 | 1515 | /create-require@1.1.1: 1516 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 1517 | dev: true 1518 | 1519 | /cross-spawn@7.0.6: 1520 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 1521 | engines: {node: '>= 8'} 1522 | dependencies: 1523 | path-key: 3.1.1 1524 | shebang-command: 2.0.0 1525 | which: 2.0.2 1526 | dev: true 1527 | 1528 | /dateformat@4.6.3: 1529 | resolution: {integrity: sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==} 1530 | dev: false 1531 | 1532 | /debug@2.6.9: 1533 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 1534 | peerDependencies: 1535 | supports-color: '*' 1536 | peerDependenciesMeta: 1537 | supports-color: 1538 | optional: true 1539 | dependencies: 1540 | ms: 2.0.0 1541 | dev: false 1542 | 1543 | /debug@4.4.0: 1544 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 1545 | engines: {node: '>=6.0'} 1546 | peerDependencies: 1547 | supports-color: '*' 1548 | peerDependenciesMeta: 1549 | supports-color: 1550 | optional: true 1551 | dependencies: 1552 | ms: 2.1.3 1553 | dev: true 1554 | 1555 | /dedent@1.5.3: 1556 | resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} 1557 | peerDependencies: 1558 | babel-plugin-macros: ^3.1.0 1559 | peerDependenciesMeta: 1560 | babel-plugin-macros: 1561 | optional: true 1562 | dev: true 1563 | 1564 | /deep-is@0.1.4: 1565 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1566 | dev: true 1567 | 1568 | /deepmerge@4.3.1: 1569 | resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} 1570 | engines: {node: '>=0.10.0'} 1571 | dev: true 1572 | 1573 | /delayed-stream@1.0.0: 1574 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1575 | engines: {node: '>=0.4.0'} 1576 | dev: false 1577 | 1578 | /depd@2.0.0: 1579 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 1580 | engines: {node: '>= 0.8'} 1581 | dev: false 1582 | 1583 | /destroy@1.2.0: 1584 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 1585 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1586 | dev: false 1587 | 1588 | /detect-newline@3.1.0: 1589 | resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} 1590 | engines: {node: '>=8'} 1591 | dev: true 1592 | 1593 | /diff-sequences@29.6.3: 1594 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 1595 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1596 | dev: true 1597 | 1598 | /diff@4.0.2: 1599 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 1600 | engines: {node: '>=0.3.1'} 1601 | dev: true 1602 | 1603 | /dir-glob@3.0.1: 1604 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 1605 | engines: {node: '>=8'} 1606 | dependencies: 1607 | path-type: 4.0.0 1608 | dev: true 1609 | 1610 | /doctrine@3.0.0: 1611 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 1612 | engines: {node: '>=6.0.0'} 1613 | dependencies: 1614 | esutils: 2.0.3 1615 | dev: true 1616 | 1617 | /dunder-proto@1.0.1: 1618 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 1619 | engines: {node: '>= 0.4'} 1620 | dependencies: 1621 | call-bind-apply-helpers: 1.0.2 1622 | es-errors: 1.3.0 1623 | gopd: 1.2.0 1624 | dev: false 1625 | 1626 | /ee-first@1.1.1: 1627 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 1628 | dev: false 1629 | 1630 | /ejs@3.1.10: 1631 | resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} 1632 | engines: {node: '>=0.10.0'} 1633 | hasBin: true 1634 | dependencies: 1635 | jake: 10.9.2 1636 | dev: true 1637 | 1638 | /electron-to-chromium@1.5.104: 1639 | resolution: {integrity: sha512-Us9M2L4cO/zMBqVkJtnj353nQhMju9slHm62NprKTmdF3HH8wYOtNvDFq/JB2+ZRoGLzdvYDiATlMHs98XBM1g==} 1640 | dev: true 1641 | 1642 | /emittery@0.13.1: 1643 | resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} 1644 | engines: {node: '>=12'} 1645 | dev: true 1646 | 1647 | /emoji-regex@8.0.0: 1648 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 1649 | dev: true 1650 | 1651 | /encodeurl@1.0.2: 1652 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 1653 | engines: {node: '>= 0.8'} 1654 | dev: false 1655 | 1656 | /encodeurl@2.0.0: 1657 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 1658 | engines: {node: '>= 0.8'} 1659 | dev: false 1660 | 1661 | /end-of-stream@1.4.4: 1662 | resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} 1663 | dependencies: 1664 | once: 1.4.0 1665 | dev: false 1666 | 1667 | /entities@4.5.0: 1668 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1669 | engines: {node: '>=0.12'} 1670 | dev: false 1671 | 1672 | /error-ex@1.3.2: 1673 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} 1674 | dependencies: 1675 | is-arrayish: 0.2.1 1676 | dev: true 1677 | 1678 | /es-define-property@1.0.1: 1679 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 1680 | engines: {node: '>= 0.4'} 1681 | dev: false 1682 | 1683 | /es-errors@1.3.0: 1684 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1685 | engines: {node: '>= 0.4'} 1686 | dev: false 1687 | 1688 | /es-object-atoms@1.1.1: 1689 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 1690 | engines: {node: '>= 0.4'} 1691 | dependencies: 1692 | es-errors: 1.3.0 1693 | dev: false 1694 | 1695 | /es-set-tostringtag@2.1.0: 1696 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 1697 | engines: {node: '>= 0.4'} 1698 | dependencies: 1699 | es-errors: 1.3.0 1700 | get-intrinsic: 1.3.0 1701 | has-tostringtag: 1.0.2 1702 | hasown: 2.0.2 1703 | dev: false 1704 | 1705 | /escalade@3.2.0: 1706 | resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} 1707 | engines: {node: '>=6'} 1708 | dev: true 1709 | 1710 | /escape-html@1.0.3: 1711 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 1712 | dev: false 1713 | 1714 | /escape-string-regexp@2.0.0: 1715 | resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} 1716 | engines: {node: '>=8'} 1717 | dev: true 1718 | 1719 | /escape-string-regexp@4.0.0: 1720 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1721 | engines: {node: '>=10'} 1722 | dev: true 1723 | 1724 | /eslint-scope@5.1.1: 1725 | resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} 1726 | engines: {node: '>=8.0.0'} 1727 | dependencies: 1728 | esrecurse: 4.3.0 1729 | estraverse: 4.3.0 1730 | dev: true 1731 | 1732 | /eslint-scope@7.2.2: 1733 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 1734 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1735 | dependencies: 1736 | esrecurse: 4.3.0 1737 | estraverse: 5.3.0 1738 | dev: true 1739 | 1740 | /eslint-visitor-keys@3.4.3: 1741 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1742 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1743 | dev: true 1744 | 1745 | /eslint@8.57.1: 1746 | resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} 1747 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1748 | deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. 1749 | hasBin: true 1750 | dependencies: 1751 | '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) 1752 | '@eslint-community/regexpp': 4.12.1 1753 | '@eslint/eslintrc': 2.1.4 1754 | '@eslint/js': 8.57.1 1755 | '@humanwhocodes/config-array': 0.13.0 1756 | '@humanwhocodes/module-importer': 1.0.1 1757 | '@nodelib/fs.walk': 1.2.8 1758 | '@ungap/structured-clone': 1.3.0 1759 | ajv: 6.12.6 1760 | chalk: 4.1.2 1761 | cross-spawn: 7.0.6 1762 | debug: 4.4.0 1763 | doctrine: 3.0.0 1764 | escape-string-regexp: 4.0.0 1765 | eslint-scope: 7.2.2 1766 | eslint-visitor-keys: 3.4.3 1767 | espree: 9.6.1 1768 | esquery: 1.6.0 1769 | esutils: 2.0.3 1770 | fast-deep-equal: 3.1.3 1771 | file-entry-cache: 6.0.1 1772 | find-up: 5.0.0 1773 | glob-parent: 6.0.2 1774 | globals: 13.24.0 1775 | graphemer: 1.4.0 1776 | ignore: 5.3.2 1777 | imurmurhash: 0.1.4 1778 | is-glob: 4.0.3 1779 | is-path-inside: 3.0.3 1780 | js-yaml: 4.1.0 1781 | json-stable-stringify-without-jsonify: 1.0.1 1782 | levn: 0.4.1 1783 | lodash.merge: 4.6.2 1784 | minimatch: 3.1.2 1785 | natural-compare: 1.4.0 1786 | optionator: 0.9.4 1787 | strip-ansi: 6.0.1 1788 | text-table: 0.2.0 1789 | transitivePeerDependencies: 1790 | - supports-color 1791 | dev: true 1792 | 1793 | /espree@9.6.1: 1794 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1795 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1796 | dependencies: 1797 | acorn: 8.14.0 1798 | acorn-jsx: 5.3.2(acorn@8.14.0) 1799 | eslint-visitor-keys: 3.4.3 1800 | dev: true 1801 | 1802 | /esprima@4.0.1: 1803 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1804 | engines: {node: '>=4'} 1805 | hasBin: true 1806 | dev: true 1807 | 1808 | /esquery@1.6.0: 1809 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1810 | engines: {node: '>=0.10'} 1811 | dependencies: 1812 | estraverse: 5.3.0 1813 | dev: true 1814 | 1815 | /esrecurse@4.3.0: 1816 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1817 | engines: {node: '>=4.0'} 1818 | dependencies: 1819 | estraverse: 5.3.0 1820 | dev: true 1821 | 1822 | /estraverse@4.3.0: 1823 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 1824 | engines: {node: '>=4.0'} 1825 | dev: true 1826 | 1827 | /estraverse@5.3.0: 1828 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1829 | engines: {node: '>=4.0'} 1830 | dev: true 1831 | 1832 | /esutils@2.0.3: 1833 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1834 | engines: {node: '>=0.10.0'} 1835 | dev: true 1836 | 1837 | /etag@1.8.1: 1838 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 1839 | engines: {node: '>= 0.6'} 1840 | dev: false 1841 | 1842 | /execa@5.1.1: 1843 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1844 | engines: {node: '>=10'} 1845 | dependencies: 1846 | cross-spawn: 7.0.6 1847 | get-stream: 6.0.1 1848 | human-signals: 2.1.0 1849 | is-stream: 2.0.1 1850 | merge-stream: 2.0.0 1851 | npm-run-path: 4.0.1 1852 | onetime: 5.1.2 1853 | signal-exit: 3.0.7 1854 | strip-final-newline: 2.0.0 1855 | dev: true 1856 | 1857 | /exit@0.1.2: 1858 | resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} 1859 | engines: {node: '>= 0.8.0'} 1860 | dev: true 1861 | 1862 | /expect@29.7.0: 1863 | resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} 1864 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1865 | dependencies: 1866 | '@jest/expect-utils': 29.7.0 1867 | jest-get-type: 29.6.3 1868 | jest-matcher-utils: 29.7.0 1869 | jest-message-util: 29.7.0 1870 | jest-util: 29.7.0 1871 | dev: true 1872 | 1873 | /express@4.21.2: 1874 | resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} 1875 | engines: {node: '>= 0.10.0'} 1876 | dependencies: 1877 | accepts: 1.3.8 1878 | array-flatten: 1.1.1 1879 | body-parser: 1.20.3 1880 | content-disposition: 0.5.4 1881 | content-type: 1.0.5 1882 | cookie: 0.7.1 1883 | cookie-signature: 1.0.6 1884 | debug: 2.6.9 1885 | depd: 2.0.0 1886 | encodeurl: 2.0.0 1887 | escape-html: 1.0.3 1888 | etag: 1.8.1 1889 | finalhandler: 1.3.1 1890 | fresh: 0.5.2 1891 | http-errors: 2.0.0 1892 | merge-descriptors: 1.0.3 1893 | methods: 1.1.2 1894 | on-finished: 2.4.1 1895 | parseurl: 1.3.3 1896 | path-to-regexp: 0.1.12 1897 | proxy-addr: 2.0.7 1898 | qs: 6.13.0 1899 | range-parser: 1.2.1 1900 | safe-buffer: 5.2.1 1901 | send: 0.19.0 1902 | serve-static: 1.16.2 1903 | setprototypeof: 1.2.0 1904 | statuses: 2.0.1 1905 | type-is: 1.6.18 1906 | utils-merge: 1.0.1 1907 | vary: 1.1.2 1908 | transitivePeerDependencies: 1909 | - supports-color 1910 | dev: false 1911 | 1912 | /fast-copy@3.0.2: 1913 | resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} 1914 | dev: false 1915 | 1916 | /fast-deep-equal@3.1.3: 1917 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1918 | 1919 | /fast-glob@3.3.3: 1920 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1921 | engines: {node: '>=8.6.0'} 1922 | dependencies: 1923 | '@nodelib/fs.stat': 2.0.5 1924 | '@nodelib/fs.walk': 1.2.8 1925 | glob-parent: 5.1.2 1926 | merge2: 1.4.1 1927 | micromatch: 4.0.8 1928 | dev: true 1929 | 1930 | /fast-json-stable-stringify@2.1.0: 1931 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1932 | dev: true 1933 | 1934 | /fast-levenshtein@2.0.6: 1935 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1936 | dev: true 1937 | 1938 | /fast-redact@3.5.0: 1939 | resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} 1940 | engines: {node: '>=6'} 1941 | dev: false 1942 | 1943 | /fast-safe-stringify@2.1.1: 1944 | resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} 1945 | dev: false 1946 | 1947 | /fast-uri@3.0.6: 1948 | resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==} 1949 | dev: false 1950 | 1951 | /fastq@1.19.0: 1952 | resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} 1953 | dependencies: 1954 | reusify: 1.0.4 1955 | dev: true 1956 | 1957 | /fb-watchman@2.0.2: 1958 | resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} 1959 | dependencies: 1960 | bser: 2.1.1 1961 | dev: true 1962 | 1963 | /file-entry-cache@6.0.1: 1964 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1965 | engines: {node: ^10.12.0 || >=12.0.0} 1966 | dependencies: 1967 | flat-cache: 3.2.0 1968 | dev: true 1969 | 1970 | /filelist@1.0.4: 1971 | resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} 1972 | dependencies: 1973 | minimatch: 5.1.6 1974 | dev: true 1975 | 1976 | /fill-range@7.1.1: 1977 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1978 | engines: {node: '>=8'} 1979 | dependencies: 1980 | to-regex-range: 5.0.1 1981 | 1982 | /finalhandler@1.3.1: 1983 | resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} 1984 | engines: {node: '>= 0.8'} 1985 | dependencies: 1986 | debug: 2.6.9 1987 | encodeurl: 2.0.0 1988 | escape-html: 1.0.3 1989 | on-finished: 2.4.1 1990 | parseurl: 1.3.3 1991 | statuses: 2.0.1 1992 | unpipe: 1.0.0 1993 | transitivePeerDependencies: 1994 | - supports-color 1995 | dev: false 1996 | 1997 | /find-up@4.1.0: 1998 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} 1999 | engines: {node: '>=8'} 2000 | dependencies: 2001 | locate-path: 5.0.0 2002 | path-exists: 4.0.0 2003 | dev: true 2004 | 2005 | /find-up@5.0.0: 2006 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 2007 | engines: {node: '>=10'} 2008 | dependencies: 2009 | locate-path: 6.0.0 2010 | path-exists: 4.0.0 2011 | dev: true 2012 | 2013 | /flat-cache@3.2.0: 2014 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 2015 | engines: {node: ^10.12.0 || >=12.0.0} 2016 | dependencies: 2017 | flatted: 3.3.3 2018 | keyv: 4.5.4 2019 | rimraf: 3.0.2 2020 | dev: true 2021 | 2022 | /flatted@3.3.3: 2023 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 2024 | dev: true 2025 | 2026 | /follow-redirects@1.15.9: 2027 | resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} 2028 | engines: {node: '>=4.0'} 2029 | peerDependencies: 2030 | debug: '*' 2031 | peerDependenciesMeta: 2032 | debug: 2033 | optional: true 2034 | dev: false 2035 | 2036 | /form-data@4.0.2: 2037 | resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} 2038 | engines: {node: '>= 6'} 2039 | dependencies: 2040 | asynckit: 0.4.0 2041 | combined-stream: 1.0.8 2042 | es-set-tostringtag: 2.1.0 2043 | mime-types: 2.1.35 2044 | dev: false 2045 | 2046 | /forwarded@0.2.0: 2047 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 2048 | engines: {node: '>= 0.6'} 2049 | dev: false 2050 | 2051 | /fresh@0.5.2: 2052 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 2053 | engines: {node: '>= 0.6'} 2054 | dev: false 2055 | 2056 | /fs-extra@11.3.0: 2057 | resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} 2058 | engines: {node: '>=14.14'} 2059 | dependencies: 2060 | graceful-fs: 4.2.11 2061 | jsonfile: 6.1.0 2062 | universalify: 2.0.1 2063 | dev: false 2064 | 2065 | /fs.realpath@1.0.0: 2066 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 2067 | dev: true 2068 | 2069 | /fsevents@2.3.3: 2070 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 2071 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 2072 | os: [darwin] 2073 | requiresBuild: true 2074 | optional: true 2075 | 2076 | /function-bind@1.1.2: 2077 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 2078 | 2079 | /gensync@1.0.0-beta.2: 2080 | resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} 2081 | engines: {node: '>=6.9.0'} 2082 | dev: true 2083 | 2084 | /get-caller-file@2.0.5: 2085 | resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} 2086 | engines: {node: 6.* || 8.* || >= 10.*} 2087 | dev: true 2088 | 2089 | /get-intrinsic@1.3.0: 2090 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 2091 | engines: {node: '>= 0.4'} 2092 | dependencies: 2093 | call-bind-apply-helpers: 1.0.2 2094 | es-define-property: 1.0.1 2095 | es-errors: 1.3.0 2096 | es-object-atoms: 1.1.1 2097 | function-bind: 1.1.2 2098 | get-proto: 1.0.1 2099 | gopd: 1.2.0 2100 | has-symbols: 1.1.0 2101 | hasown: 2.0.2 2102 | math-intrinsics: 1.1.0 2103 | dev: false 2104 | 2105 | /get-package-type@0.1.0: 2106 | resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} 2107 | engines: {node: '>=8.0.0'} 2108 | dev: true 2109 | 2110 | /get-proto@1.0.1: 2111 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 2112 | engines: {node: '>= 0.4'} 2113 | dependencies: 2114 | dunder-proto: 1.0.1 2115 | es-object-atoms: 1.1.1 2116 | dev: false 2117 | 2118 | /get-stream@6.0.1: 2119 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 2120 | engines: {node: '>=10'} 2121 | dev: true 2122 | 2123 | /glob-parent@5.1.2: 2124 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 2125 | engines: {node: '>= 6'} 2126 | dependencies: 2127 | is-glob: 4.0.3 2128 | 2129 | /glob-parent@6.0.2: 2130 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 2131 | engines: {node: '>=10.13.0'} 2132 | dependencies: 2133 | is-glob: 4.0.3 2134 | dev: true 2135 | 2136 | /glob@7.2.3: 2137 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 2138 | deprecated: Glob versions prior to v9 are no longer supported 2139 | dependencies: 2140 | fs.realpath: 1.0.0 2141 | inflight: 1.0.6 2142 | inherits: 2.0.4 2143 | minimatch: 3.1.2 2144 | once: 1.4.0 2145 | path-is-absolute: 1.0.1 2146 | dev: true 2147 | 2148 | /globals@11.12.0: 2149 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} 2150 | engines: {node: '>=4'} 2151 | dev: true 2152 | 2153 | /globals@13.24.0: 2154 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 2155 | engines: {node: '>=8'} 2156 | dependencies: 2157 | type-fest: 0.20.2 2158 | dev: true 2159 | 2160 | /globby@11.1.0: 2161 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 2162 | engines: {node: '>=10'} 2163 | dependencies: 2164 | array-union: 2.1.0 2165 | dir-glob: 3.0.1 2166 | fast-glob: 3.3.3 2167 | ignore: 5.3.2 2168 | merge2: 1.4.1 2169 | slash: 3.0.0 2170 | dev: true 2171 | 2172 | /gopd@1.2.0: 2173 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 2174 | engines: {node: '>= 0.4'} 2175 | dev: false 2176 | 2177 | /graceful-fs@4.2.11: 2178 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 2179 | 2180 | /graphemer@1.4.0: 2181 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 2182 | dev: true 2183 | 2184 | /handlebars@4.7.8: 2185 | resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} 2186 | engines: {node: '>=0.4.7'} 2187 | hasBin: true 2188 | dependencies: 2189 | minimist: 1.2.8 2190 | neo-async: 2.6.2 2191 | source-map: 0.6.1 2192 | wordwrap: 1.0.0 2193 | optionalDependencies: 2194 | uglify-js: 3.19.3 2195 | dev: false 2196 | 2197 | /has-flag@4.0.0: 2198 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 2199 | engines: {node: '>=8'} 2200 | 2201 | /has-symbols@1.1.0: 2202 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 2203 | engines: {node: '>= 0.4'} 2204 | dev: false 2205 | 2206 | /has-tostringtag@1.0.2: 2207 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 2208 | engines: {node: '>= 0.4'} 2209 | dependencies: 2210 | has-symbols: 1.1.0 2211 | dev: false 2212 | 2213 | /hasown@2.0.2: 2214 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 2215 | engines: {node: '>= 0.4'} 2216 | dependencies: 2217 | function-bind: 1.1.2 2218 | 2219 | /help-me@5.0.0: 2220 | resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} 2221 | dev: false 2222 | 2223 | /html-escaper@2.0.2: 2224 | resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} 2225 | dev: true 2226 | 2227 | /http-errors@2.0.0: 2228 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 2229 | engines: {node: '>= 0.8'} 2230 | dependencies: 2231 | depd: 2.0.0 2232 | inherits: 2.0.4 2233 | setprototypeof: 1.2.0 2234 | statuses: 2.0.1 2235 | toidentifier: 1.0.1 2236 | dev: false 2237 | 2238 | /human-signals@2.1.0: 2239 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 2240 | engines: {node: '>=10.17.0'} 2241 | dev: true 2242 | 2243 | /iconv-lite@0.4.24: 2244 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 2245 | engines: {node: '>=0.10.0'} 2246 | dependencies: 2247 | safer-buffer: 2.1.2 2248 | dev: false 2249 | 2250 | /ignore@5.3.2: 2251 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 2252 | engines: {node: '>= 4'} 2253 | dev: true 2254 | 2255 | /import-fresh@3.3.1: 2256 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 2257 | engines: {node: '>=6'} 2258 | dependencies: 2259 | parent-module: 1.0.1 2260 | resolve-from: 4.0.0 2261 | dev: true 2262 | 2263 | /import-local@3.2.0: 2264 | resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} 2265 | engines: {node: '>=8'} 2266 | hasBin: true 2267 | dependencies: 2268 | pkg-dir: 4.2.0 2269 | resolve-cwd: 3.0.0 2270 | dev: true 2271 | 2272 | /imurmurhash@0.1.4: 2273 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 2274 | engines: {node: '>=0.8.19'} 2275 | dev: true 2276 | 2277 | /inflight@1.0.6: 2278 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 2279 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 2280 | dependencies: 2281 | once: 1.4.0 2282 | wrappy: 1.0.2 2283 | dev: true 2284 | 2285 | /inherits@2.0.4: 2286 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 2287 | 2288 | /ipaddr.js@1.9.1: 2289 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 2290 | engines: {node: '>= 0.10'} 2291 | dev: false 2292 | 2293 | /is-arrayish@0.2.1: 2294 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} 2295 | dev: true 2296 | 2297 | /is-binary-path@2.1.0: 2298 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 2299 | engines: {node: '>=8'} 2300 | dependencies: 2301 | binary-extensions: 2.3.0 2302 | dev: false 2303 | 2304 | /is-core-module@2.16.1: 2305 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 2306 | engines: {node: '>= 0.4'} 2307 | dependencies: 2308 | hasown: 2.0.2 2309 | dev: true 2310 | 2311 | /is-extglob@2.1.1: 2312 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 2313 | engines: {node: '>=0.10.0'} 2314 | 2315 | /is-fullwidth-code-point@3.0.0: 2316 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 2317 | engines: {node: '>=8'} 2318 | dev: true 2319 | 2320 | /is-generator-fn@2.1.0: 2321 | resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} 2322 | engines: {node: '>=6'} 2323 | dev: true 2324 | 2325 | /is-glob@4.0.3: 2326 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 2327 | engines: {node: '>=0.10.0'} 2328 | dependencies: 2329 | is-extglob: 2.1.1 2330 | 2331 | /is-number@7.0.0: 2332 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 2333 | engines: {node: '>=0.12.0'} 2334 | 2335 | /is-path-inside@3.0.3: 2336 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 2337 | engines: {node: '>=8'} 2338 | dev: true 2339 | 2340 | /is-stream@2.0.1: 2341 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 2342 | engines: {node: '>=8'} 2343 | dev: true 2344 | 2345 | /isexe@2.0.0: 2346 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 2347 | dev: true 2348 | 2349 | /istanbul-lib-coverage@3.2.2: 2350 | resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} 2351 | engines: {node: '>=8'} 2352 | dev: true 2353 | 2354 | /istanbul-lib-instrument@5.2.1: 2355 | resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} 2356 | engines: {node: '>=8'} 2357 | dependencies: 2358 | '@babel/core': 7.26.9 2359 | '@babel/parser': 7.26.9 2360 | '@istanbuljs/schema': 0.1.3 2361 | istanbul-lib-coverage: 3.2.2 2362 | semver: 6.3.1 2363 | transitivePeerDependencies: 2364 | - supports-color 2365 | dev: true 2366 | 2367 | /istanbul-lib-instrument@6.0.3: 2368 | resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==} 2369 | engines: {node: '>=10'} 2370 | dependencies: 2371 | '@babel/core': 7.26.9 2372 | '@babel/parser': 7.26.9 2373 | '@istanbuljs/schema': 0.1.3 2374 | istanbul-lib-coverage: 3.2.2 2375 | semver: 7.7.1 2376 | transitivePeerDependencies: 2377 | - supports-color 2378 | dev: true 2379 | 2380 | /istanbul-lib-report@3.0.1: 2381 | resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} 2382 | engines: {node: '>=10'} 2383 | dependencies: 2384 | istanbul-lib-coverage: 3.2.2 2385 | make-dir: 4.0.0 2386 | supports-color: 7.2.0 2387 | dev: true 2388 | 2389 | /istanbul-lib-source-maps@4.0.1: 2390 | resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} 2391 | engines: {node: '>=10'} 2392 | dependencies: 2393 | debug: 4.4.0 2394 | istanbul-lib-coverage: 3.2.2 2395 | source-map: 0.6.1 2396 | transitivePeerDependencies: 2397 | - supports-color 2398 | dev: true 2399 | 2400 | /istanbul-reports@3.1.7: 2401 | resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} 2402 | engines: {node: '>=8'} 2403 | dependencies: 2404 | html-escaper: 2.0.2 2405 | istanbul-lib-report: 3.0.1 2406 | dev: true 2407 | 2408 | /jake@10.9.2: 2409 | resolution: {integrity: sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==} 2410 | engines: {node: '>=10'} 2411 | hasBin: true 2412 | dependencies: 2413 | async: 3.2.6 2414 | chalk: 4.1.2 2415 | filelist: 1.0.4 2416 | minimatch: 3.1.2 2417 | dev: true 2418 | 2419 | /jest-changed-files@29.7.0: 2420 | resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} 2421 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2422 | dependencies: 2423 | execa: 5.1.1 2424 | jest-util: 29.7.0 2425 | p-limit: 3.1.0 2426 | dev: true 2427 | 2428 | /jest-circus@29.7.0: 2429 | resolution: {integrity: sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==} 2430 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2431 | dependencies: 2432 | '@jest/environment': 29.7.0 2433 | '@jest/expect': 29.7.0 2434 | '@jest/test-result': 29.7.0 2435 | '@jest/types': 29.6.3 2436 | '@types/node': 20.17.19 2437 | chalk: 4.1.2 2438 | co: 4.6.0 2439 | dedent: 1.5.3 2440 | is-generator-fn: 2.1.0 2441 | jest-each: 29.7.0 2442 | jest-matcher-utils: 29.7.0 2443 | jest-message-util: 29.7.0 2444 | jest-runtime: 29.7.0 2445 | jest-snapshot: 29.7.0 2446 | jest-util: 29.7.0 2447 | p-limit: 3.1.0 2448 | pretty-format: 29.7.0 2449 | pure-rand: 6.1.0 2450 | slash: 3.0.0 2451 | stack-utils: 2.0.6 2452 | transitivePeerDependencies: 2453 | - babel-plugin-macros 2454 | - supports-color 2455 | dev: true 2456 | 2457 | /jest-cli@29.7.0(@types/node@20.17.19)(ts-node@10.9.2): 2458 | resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} 2459 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2460 | hasBin: true 2461 | peerDependencies: 2462 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 2463 | peerDependenciesMeta: 2464 | node-notifier: 2465 | optional: true 2466 | dependencies: 2467 | '@jest/core': 29.7.0(ts-node@10.9.2) 2468 | '@jest/test-result': 29.7.0 2469 | '@jest/types': 29.6.3 2470 | chalk: 4.1.2 2471 | create-jest: 29.7.0(@types/node@20.17.19)(ts-node@10.9.2) 2472 | exit: 0.1.2 2473 | import-local: 3.2.0 2474 | jest-config: 29.7.0(@types/node@20.17.19)(ts-node@10.9.2) 2475 | jest-util: 29.7.0 2476 | jest-validate: 29.7.0 2477 | yargs: 17.7.2 2478 | transitivePeerDependencies: 2479 | - '@types/node' 2480 | - babel-plugin-macros 2481 | - supports-color 2482 | - ts-node 2483 | dev: true 2484 | 2485 | /jest-config@29.7.0(@types/node@20.17.19)(ts-node@10.9.2): 2486 | resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} 2487 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2488 | peerDependencies: 2489 | '@types/node': '*' 2490 | ts-node: '>=9.0.0' 2491 | peerDependenciesMeta: 2492 | '@types/node': 2493 | optional: true 2494 | ts-node: 2495 | optional: true 2496 | dependencies: 2497 | '@babel/core': 7.26.9 2498 | '@jest/test-sequencer': 29.7.0 2499 | '@jest/types': 29.6.3 2500 | '@types/node': 20.17.19 2501 | babel-jest: 29.7.0(@babel/core@7.26.9) 2502 | chalk: 4.1.2 2503 | ci-info: 3.9.0 2504 | deepmerge: 4.3.1 2505 | glob: 7.2.3 2506 | graceful-fs: 4.2.11 2507 | jest-circus: 29.7.0 2508 | jest-environment-node: 29.7.0 2509 | jest-get-type: 29.6.3 2510 | jest-regex-util: 29.6.3 2511 | jest-resolve: 29.7.0 2512 | jest-runner: 29.7.0 2513 | jest-util: 29.7.0 2514 | jest-validate: 29.7.0 2515 | micromatch: 4.0.8 2516 | parse-json: 5.2.0 2517 | pretty-format: 29.7.0 2518 | slash: 3.0.0 2519 | strip-json-comments: 3.1.1 2520 | ts-node: 10.9.2(@types/node@20.17.19)(typescript@5.7.3) 2521 | transitivePeerDependencies: 2522 | - babel-plugin-macros 2523 | - supports-color 2524 | dev: true 2525 | 2526 | /jest-diff@29.7.0: 2527 | resolution: {integrity: sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==} 2528 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2529 | dependencies: 2530 | chalk: 4.1.2 2531 | diff-sequences: 29.6.3 2532 | jest-get-type: 29.6.3 2533 | pretty-format: 29.7.0 2534 | dev: true 2535 | 2536 | /jest-docblock@29.7.0: 2537 | resolution: {integrity: sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==} 2538 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2539 | dependencies: 2540 | detect-newline: 3.1.0 2541 | dev: true 2542 | 2543 | /jest-each@29.7.0: 2544 | resolution: {integrity: sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==} 2545 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2546 | dependencies: 2547 | '@jest/types': 29.6.3 2548 | chalk: 4.1.2 2549 | jest-get-type: 29.6.3 2550 | jest-util: 29.7.0 2551 | pretty-format: 29.7.0 2552 | dev: true 2553 | 2554 | /jest-environment-node@29.7.0: 2555 | resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} 2556 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2557 | dependencies: 2558 | '@jest/environment': 29.7.0 2559 | '@jest/fake-timers': 29.7.0 2560 | '@jest/types': 29.6.3 2561 | '@types/node': 20.17.19 2562 | jest-mock: 29.7.0 2563 | jest-util: 29.7.0 2564 | dev: true 2565 | 2566 | /jest-get-type@29.6.3: 2567 | resolution: {integrity: sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==} 2568 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2569 | dev: true 2570 | 2571 | /jest-haste-map@29.7.0: 2572 | resolution: {integrity: sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==} 2573 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2574 | dependencies: 2575 | '@jest/types': 29.6.3 2576 | '@types/graceful-fs': 4.1.9 2577 | '@types/node': 20.17.19 2578 | anymatch: 3.1.3 2579 | fb-watchman: 2.0.2 2580 | graceful-fs: 4.2.11 2581 | jest-regex-util: 29.6.3 2582 | jest-util: 29.7.0 2583 | jest-worker: 29.7.0 2584 | micromatch: 4.0.8 2585 | walker: 1.0.8 2586 | optionalDependencies: 2587 | fsevents: 2.3.3 2588 | dev: true 2589 | 2590 | /jest-leak-detector@29.7.0: 2591 | resolution: {integrity: sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==} 2592 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2593 | dependencies: 2594 | jest-get-type: 29.6.3 2595 | pretty-format: 29.7.0 2596 | dev: true 2597 | 2598 | /jest-matcher-utils@29.7.0: 2599 | resolution: {integrity: sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==} 2600 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2601 | dependencies: 2602 | chalk: 4.1.2 2603 | jest-diff: 29.7.0 2604 | jest-get-type: 29.6.3 2605 | pretty-format: 29.7.0 2606 | dev: true 2607 | 2608 | /jest-message-util@29.7.0: 2609 | resolution: {integrity: sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==} 2610 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2611 | dependencies: 2612 | '@babel/code-frame': 7.26.2 2613 | '@jest/types': 29.6.3 2614 | '@types/stack-utils': 2.0.3 2615 | chalk: 4.1.2 2616 | graceful-fs: 4.2.11 2617 | micromatch: 4.0.8 2618 | pretty-format: 29.7.0 2619 | slash: 3.0.0 2620 | stack-utils: 2.0.6 2621 | dev: true 2622 | 2623 | /jest-mock@29.7.0: 2624 | resolution: {integrity: sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==} 2625 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2626 | dependencies: 2627 | '@jest/types': 29.6.3 2628 | '@types/node': 20.17.19 2629 | jest-util: 29.7.0 2630 | dev: true 2631 | 2632 | /jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): 2633 | resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==} 2634 | engines: {node: '>=6'} 2635 | peerDependencies: 2636 | jest-resolve: '*' 2637 | peerDependenciesMeta: 2638 | jest-resolve: 2639 | optional: true 2640 | dependencies: 2641 | jest-resolve: 29.7.0 2642 | dev: true 2643 | 2644 | /jest-regex-util@29.6.3: 2645 | resolution: {integrity: sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==} 2646 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2647 | dev: true 2648 | 2649 | /jest-resolve-dependencies@29.7.0: 2650 | resolution: {integrity: sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==} 2651 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2652 | dependencies: 2653 | jest-regex-util: 29.6.3 2654 | jest-snapshot: 29.7.0 2655 | transitivePeerDependencies: 2656 | - supports-color 2657 | dev: true 2658 | 2659 | /jest-resolve@29.7.0: 2660 | resolution: {integrity: sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==} 2661 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2662 | dependencies: 2663 | chalk: 4.1.2 2664 | graceful-fs: 4.2.11 2665 | jest-haste-map: 29.7.0 2666 | jest-pnp-resolver: 1.2.3(jest-resolve@29.7.0) 2667 | jest-util: 29.7.0 2668 | jest-validate: 29.7.0 2669 | resolve: 1.22.10 2670 | resolve.exports: 2.0.3 2671 | slash: 3.0.0 2672 | dev: true 2673 | 2674 | /jest-runner@29.7.0: 2675 | resolution: {integrity: sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==} 2676 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2677 | dependencies: 2678 | '@jest/console': 29.7.0 2679 | '@jest/environment': 29.7.0 2680 | '@jest/test-result': 29.7.0 2681 | '@jest/transform': 29.7.0 2682 | '@jest/types': 29.6.3 2683 | '@types/node': 20.17.19 2684 | chalk: 4.1.2 2685 | emittery: 0.13.1 2686 | graceful-fs: 4.2.11 2687 | jest-docblock: 29.7.0 2688 | jest-environment-node: 29.7.0 2689 | jest-haste-map: 29.7.0 2690 | jest-leak-detector: 29.7.0 2691 | jest-message-util: 29.7.0 2692 | jest-resolve: 29.7.0 2693 | jest-runtime: 29.7.0 2694 | jest-util: 29.7.0 2695 | jest-watcher: 29.7.0 2696 | jest-worker: 29.7.0 2697 | p-limit: 3.1.0 2698 | source-map-support: 0.5.13 2699 | transitivePeerDependencies: 2700 | - supports-color 2701 | dev: true 2702 | 2703 | /jest-runtime@29.7.0: 2704 | resolution: {integrity: sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==} 2705 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2706 | dependencies: 2707 | '@jest/environment': 29.7.0 2708 | '@jest/fake-timers': 29.7.0 2709 | '@jest/globals': 29.7.0 2710 | '@jest/source-map': 29.6.3 2711 | '@jest/test-result': 29.7.0 2712 | '@jest/transform': 29.7.0 2713 | '@jest/types': 29.6.3 2714 | '@types/node': 20.17.19 2715 | chalk: 4.1.2 2716 | cjs-module-lexer: 1.4.3 2717 | collect-v8-coverage: 1.0.2 2718 | glob: 7.2.3 2719 | graceful-fs: 4.2.11 2720 | jest-haste-map: 29.7.0 2721 | jest-message-util: 29.7.0 2722 | jest-mock: 29.7.0 2723 | jest-regex-util: 29.6.3 2724 | jest-resolve: 29.7.0 2725 | jest-snapshot: 29.7.0 2726 | jest-util: 29.7.0 2727 | slash: 3.0.0 2728 | strip-bom: 4.0.0 2729 | transitivePeerDependencies: 2730 | - supports-color 2731 | dev: true 2732 | 2733 | /jest-snapshot@29.7.0: 2734 | resolution: {integrity: sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==} 2735 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2736 | dependencies: 2737 | '@babel/core': 7.26.9 2738 | '@babel/generator': 7.26.9 2739 | '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) 2740 | '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) 2741 | '@babel/types': 7.26.9 2742 | '@jest/expect-utils': 29.7.0 2743 | '@jest/transform': 29.7.0 2744 | '@jest/types': 29.6.3 2745 | babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) 2746 | chalk: 4.1.2 2747 | expect: 29.7.0 2748 | graceful-fs: 4.2.11 2749 | jest-diff: 29.7.0 2750 | jest-get-type: 29.6.3 2751 | jest-matcher-utils: 29.7.0 2752 | jest-message-util: 29.7.0 2753 | jest-util: 29.7.0 2754 | natural-compare: 1.4.0 2755 | pretty-format: 29.7.0 2756 | semver: 7.7.1 2757 | transitivePeerDependencies: 2758 | - supports-color 2759 | dev: true 2760 | 2761 | /jest-util@29.7.0: 2762 | resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} 2763 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2764 | dependencies: 2765 | '@jest/types': 29.6.3 2766 | '@types/node': 20.17.19 2767 | chalk: 4.1.2 2768 | ci-info: 3.9.0 2769 | graceful-fs: 4.2.11 2770 | picomatch: 2.3.1 2771 | dev: true 2772 | 2773 | /jest-validate@29.7.0: 2774 | resolution: {integrity: sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==} 2775 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2776 | dependencies: 2777 | '@jest/types': 29.6.3 2778 | camelcase: 6.3.0 2779 | chalk: 4.1.2 2780 | jest-get-type: 29.6.3 2781 | leven: 3.1.0 2782 | pretty-format: 29.7.0 2783 | dev: true 2784 | 2785 | /jest-watcher@29.7.0: 2786 | resolution: {integrity: sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==} 2787 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2788 | dependencies: 2789 | '@jest/test-result': 29.7.0 2790 | '@jest/types': 29.6.3 2791 | '@types/node': 20.17.19 2792 | ansi-escapes: 4.3.2 2793 | chalk: 4.1.2 2794 | emittery: 0.13.1 2795 | jest-util: 29.7.0 2796 | string-length: 4.0.2 2797 | dev: true 2798 | 2799 | /jest-worker@29.7.0: 2800 | resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} 2801 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2802 | dependencies: 2803 | '@types/node': 20.17.19 2804 | jest-util: 29.7.0 2805 | merge-stream: 2.0.0 2806 | supports-color: 8.1.1 2807 | dev: true 2808 | 2809 | /jest@29.7.0(@types/node@20.17.19)(ts-node@10.9.2): 2810 | resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} 2811 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 2812 | hasBin: true 2813 | peerDependencies: 2814 | node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 2815 | peerDependenciesMeta: 2816 | node-notifier: 2817 | optional: true 2818 | dependencies: 2819 | '@jest/core': 29.7.0(ts-node@10.9.2) 2820 | '@jest/types': 29.6.3 2821 | import-local: 3.2.0 2822 | jest-cli: 29.7.0(@types/node@20.17.19)(ts-node@10.9.2) 2823 | transitivePeerDependencies: 2824 | - '@types/node' 2825 | - babel-plugin-macros 2826 | - supports-color 2827 | - ts-node 2828 | dev: true 2829 | 2830 | /joycon@3.1.1: 2831 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 2832 | engines: {node: '>=10'} 2833 | dev: false 2834 | 2835 | /js-tokens@4.0.0: 2836 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 2837 | dev: true 2838 | 2839 | /js-yaml@3.14.1: 2840 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 2841 | hasBin: true 2842 | dependencies: 2843 | argparse: 1.0.10 2844 | esprima: 4.0.1 2845 | dev: true 2846 | 2847 | /js-yaml@4.1.0: 2848 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 2849 | hasBin: true 2850 | dependencies: 2851 | argparse: 2.0.1 2852 | dev: true 2853 | 2854 | /jsesc@3.1.0: 2855 | resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} 2856 | engines: {node: '>=6'} 2857 | hasBin: true 2858 | dev: true 2859 | 2860 | /json-buffer@3.0.1: 2861 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 2862 | dev: true 2863 | 2864 | /json-parse-even-better-errors@2.3.1: 2865 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} 2866 | dev: true 2867 | 2868 | /json-schema-traverse@0.4.1: 2869 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 2870 | dev: true 2871 | 2872 | /json-schema-traverse@1.0.0: 2873 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 2874 | dev: false 2875 | 2876 | /json-stable-stringify-without-jsonify@1.0.1: 2877 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 2878 | dev: true 2879 | 2880 | /json5@2.2.3: 2881 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 2882 | engines: {node: '>=6'} 2883 | hasBin: true 2884 | dev: true 2885 | 2886 | /jsonblog-generator-boilerplate@1.6.0: 2887 | resolution: {integrity: sha512-UBVQ7jA2/5wMA3ggMlRcf/26wZTdIcJXq01twxTRd6JjRwFGj98WgpRhKVeklFG6nbK4P41LlDObdbo7TiYsvw==} 2888 | engines: {node: '>=20.0.0'} 2889 | dependencies: 2890 | axios: 1.7.9 2891 | handlebars: 4.7.8 2892 | markdown-it: 14.1.0 2893 | slugify: 1.6.6 2894 | transitivePeerDependencies: 2895 | - debug 2896 | dev: false 2897 | 2898 | /jsonblog-schema@2.1.0: 2899 | resolution: {integrity: sha512-qDGCc0CgCGOgWnxDwWKgttKaqwpWaWi35Flx7CFC4qc7jwUHyzMIgaGgLPUueYy2hldPoaXOt7o/fyC9LXPxwQ==} 2900 | engines: {node: '>=20.0.0'} 2901 | dependencies: 2902 | ajv: 8.17.1 2903 | commander: 11.1.0 2904 | zod: 3.24.2 2905 | dev: false 2906 | 2907 | /jsonfile@6.1.0: 2908 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 2909 | dependencies: 2910 | universalify: 2.0.1 2911 | optionalDependencies: 2912 | graceful-fs: 4.2.11 2913 | dev: false 2914 | 2915 | /keyv@4.5.4: 2916 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 2917 | dependencies: 2918 | json-buffer: 3.0.1 2919 | dev: true 2920 | 2921 | /kleur@3.0.3: 2922 | resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} 2923 | engines: {node: '>=6'} 2924 | dev: true 2925 | 2926 | /leven@3.1.0: 2927 | resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} 2928 | engines: {node: '>=6'} 2929 | dev: true 2930 | 2931 | /levn@0.4.1: 2932 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 2933 | engines: {node: '>= 0.8.0'} 2934 | dependencies: 2935 | prelude-ls: 1.2.1 2936 | type-check: 0.4.0 2937 | dev: true 2938 | 2939 | /lines-and-columns@1.2.4: 2940 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 2941 | dev: true 2942 | 2943 | /linkify-it@5.0.0: 2944 | resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} 2945 | dependencies: 2946 | uc.micro: 2.1.0 2947 | dev: false 2948 | 2949 | /locate-path@5.0.0: 2950 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} 2951 | engines: {node: '>=8'} 2952 | dependencies: 2953 | p-locate: 4.1.0 2954 | dev: true 2955 | 2956 | /locate-path@6.0.0: 2957 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 2958 | engines: {node: '>=10'} 2959 | dependencies: 2960 | p-locate: 5.0.0 2961 | dev: true 2962 | 2963 | /lodash.memoize@4.1.2: 2964 | resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} 2965 | dev: true 2966 | 2967 | /lodash.merge@4.6.2: 2968 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 2969 | dev: true 2970 | 2971 | /lru-cache@5.1.1: 2972 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 2973 | dependencies: 2974 | yallist: 3.1.1 2975 | dev: true 2976 | 2977 | /make-dir@4.0.0: 2978 | resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} 2979 | engines: {node: '>=10'} 2980 | dependencies: 2981 | semver: 7.7.1 2982 | dev: true 2983 | 2984 | /make-error@1.3.6: 2985 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 2986 | dev: true 2987 | 2988 | /makeerror@1.0.12: 2989 | resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} 2990 | dependencies: 2991 | tmpl: 1.0.5 2992 | dev: true 2993 | 2994 | /markdown-it@14.1.0: 2995 | resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} 2996 | hasBin: true 2997 | dependencies: 2998 | argparse: 2.0.1 2999 | entities: 4.5.0 3000 | linkify-it: 5.0.0 3001 | mdurl: 2.0.0 3002 | punycode.js: 2.3.1 3003 | uc.micro: 2.1.0 3004 | dev: false 3005 | 3006 | /math-intrinsics@1.1.0: 3007 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 3008 | engines: {node: '>= 0.4'} 3009 | dev: false 3010 | 3011 | /mdurl@2.0.0: 3012 | resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} 3013 | dev: false 3014 | 3015 | /media-typer@0.3.0: 3016 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 3017 | engines: {node: '>= 0.6'} 3018 | dev: false 3019 | 3020 | /merge-descriptors@1.0.3: 3021 | resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} 3022 | dev: false 3023 | 3024 | /merge-stream@2.0.0: 3025 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 3026 | dev: true 3027 | 3028 | /merge2@1.4.1: 3029 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 3030 | engines: {node: '>= 8'} 3031 | dev: true 3032 | 3033 | /methods@1.1.2: 3034 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 3035 | engines: {node: '>= 0.6'} 3036 | dev: false 3037 | 3038 | /micromatch@4.0.8: 3039 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 3040 | engines: {node: '>=8.6'} 3041 | dependencies: 3042 | braces: 3.0.3 3043 | picomatch: 2.3.1 3044 | dev: true 3045 | 3046 | /mime-db@1.52.0: 3047 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 3048 | engines: {node: '>= 0.6'} 3049 | dev: false 3050 | 3051 | /mime-types@2.1.35: 3052 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 3053 | engines: {node: '>= 0.6'} 3054 | dependencies: 3055 | mime-db: 1.52.0 3056 | dev: false 3057 | 3058 | /mime@1.6.0: 3059 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 3060 | engines: {node: '>=4'} 3061 | hasBin: true 3062 | dev: false 3063 | 3064 | /mimic-fn@2.1.0: 3065 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 3066 | engines: {node: '>=6'} 3067 | dev: true 3068 | 3069 | /minimatch@3.1.2: 3070 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 3071 | dependencies: 3072 | brace-expansion: 1.1.11 3073 | dev: true 3074 | 3075 | /minimatch@5.1.6: 3076 | resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} 3077 | engines: {node: '>=10'} 3078 | dependencies: 3079 | brace-expansion: 2.0.1 3080 | dev: true 3081 | 3082 | /minimist@1.2.8: 3083 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 3084 | dev: false 3085 | 3086 | /ms@2.0.0: 3087 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 3088 | dev: false 3089 | 3090 | /ms@2.1.3: 3091 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 3092 | 3093 | /natural-compare-lite@1.4.0: 3094 | resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} 3095 | dev: true 3096 | 3097 | /natural-compare@1.4.0: 3098 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 3099 | dev: true 3100 | 3101 | /negotiator@0.6.3: 3102 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 3103 | engines: {node: '>= 0.6'} 3104 | dev: false 3105 | 3106 | /neo-async@2.6.2: 3107 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 3108 | dev: false 3109 | 3110 | /node-int64@0.4.0: 3111 | resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} 3112 | dev: true 3113 | 3114 | /node-releases@2.0.19: 3115 | resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} 3116 | dev: true 3117 | 3118 | /normalize-path@3.0.0: 3119 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 3120 | engines: {node: '>=0.10.0'} 3121 | 3122 | /npm-run-path@4.0.1: 3123 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 3124 | engines: {node: '>=8'} 3125 | dependencies: 3126 | path-key: 3.1.1 3127 | dev: true 3128 | 3129 | /object-inspect@1.13.4: 3130 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 3131 | engines: {node: '>= 0.4'} 3132 | dev: false 3133 | 3134 | /on-exit-leak-free@2.1.2: 3135 | resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} 3136 | engines: {node: '>=14.0.0'} 3137 | dev: false 3138 | 3139 | /on-finished@2.4.1: 3140 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 3141 | engines: {node: '>= 0.8'} 3142 | dependencies: 3143 | ee-first: 1.1.1 3144 | dev: false 3145 | 3146 | /once@1.4.0: 3147 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 3148 | dependencies: 3149 | wrappy: 1.0.2 3150 | 3151 | /onetime@5.1.2: 3152 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 3153 | engines: {node: '>=6'} 3154 | dependencies: 3155 | mimic-fn: 2.1.0 3156 | dev: true 3157 | 3158 | /optionator@0.9.4: 3159 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 3160 | engines: {node: '>= 0.8.0'} 3161 | dependencies: 3162 | deep-is: 0.1.4 3163 | fast-levenshtein: 2.0.6 3164 | levn: 0.4.1 3165 | prelude-ls: 1.2.1 3166 | type-check: 0.4.0 3167 | word-wrap: 1.2.5 3168 | dev: true 3169 | 3170 | /p-limit@2.3.0: 3171 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} 3172 | engines: {node: '>=6'} 3173 | dependencies: 3174 | p-try: 2.2.0 3175 | dev: true 3176 | 3177 | /p-limit@3.1.0: 3178 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 3179 | engines: {node: '>=10'} 3180 | dependencies: 3181 | yocto-queue: 0.1.0 3182 | dev: true 3183 | 3184 | /p-locate@4.1.0: 3185 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} 3186 | engines: {node: '>=8'} 3187 | dependencies: 3188 | p-limit: 2.3.0 3189 | dev: true 3190 | 3191 | /p-locate@5.0.0: 3192 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 3193 | engines: {node: '>=10'} 3194 | dependencies: 3195 | p-limit: 3.1.0 3196 | dev: true 3197 | 3198 | /p-try@2.2.0: 3199 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} 3200 | engines: {node: '>=6'} 3201 | dev: true 3202 | 3203 | /parent-module@1.0.1: 3204 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 3205 | engines: {node: '>=6'} 3206 | dependencies: 3207 | callsites: 3.1.0 3208 | dev: true 3209 | 3210 | /parse-json@5.2.0: 3211 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} 3212 | engines: {node: '>=8'} 3213 | dependencies: 3214 | '@babel/code-frame': 7.26.2 3215 | error-ex: 1.3.2 3216 | json-parse-even-better-errors: 2.3.1 3217 | lines-and-columns: 1.2.4 3218 | dev: true 3219 | 3220 | /parseurl@1.3.3: 3221 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 3222 | engines: {node: '>= 0.8'} 3223 | dev: false 3224 | 3225 | /path-exists@4.0.0: 3226 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 3227 | engines: {node: '>=8'} 3228 | dev: true 3229 | 3230 | /path-is-absolute@1.0.1: 3231 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 3232 | engines: {node: '>=0.10.0'} 3233 | dev: true 3234 | 3235 | /path-key@3.1.1: 3236 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 3237 | engines: {node: '>=8'} 3238 | dev: true 3239 | 3240 | /path-parse@1.0.7: 3241 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 3242 | dev: true 3243 | 3244 | /path-to-regexp@0.1.12: 3245 | resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} 3246 | dev: false 3247 | 3248 | /path-type@4.0.0: 3249 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 3250 | engines: {node: '>=8'} 3251 | dev: true 3252 | 3253 | /picocolors@1.1.1: 3254 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 3255 | dev: true 3256 | 3257 | /picomatch@2.3.1: 3258 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 3259 | engines: {node: '>=8.6'} 3260 | 3261 | /pino-abstract-transport@2.0.0: 3262 | resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} 3263 | dependencies: 3264 | split2: 4.2.0 3265 | dev: false 3266 | 3267 | /pino-pretty@13.0.0: 3268 | resolution: {integrity: sha512-cQBBIVG3YajgoUjo1FdKVRX6t9XPxwB9lcNJVD5GCnNM4Y6T12YYx8c6zEejxQsU0wrg9TwmDulcE9LR7qcJqA==} 3269 | hasBin: true 3270 | dependencies: 3271 | colorette: 2.0.20 3272 | dateformat: 4.6.3 3273 | fast-copy: 3.0.2 3274 | fast-safe-stringify: 2.1.1 3275 | help-me: 5.0.0 3276 | joycon: 3.1.1 3277 | minimist: 1.2.8 3278 | on-exit-leak-free: 2.1.2 3279 | pino-abstract-transport: 2.0.0 3280 | pump: 3.0.2 3281 | secure-json-parse: 2.7.0 3282 | sonic-boom: 4.2.0 3283 | strip-json-comments: 3.1.1 3284 | dev: false 3285 | 3286 | /pino-std-serializers@7.0.0: 3287 | resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} 3288 | dev: false 3289 | 3290 | /pino@9.6.0: 3291 | resolution: {integrity: sha512-i85pKRCt4qMjZ1+L7sy2Ag4t1atFcdbEt76+7iRJn1g2BvsnRMGu9p8pivl9fs63M2kF/A0OacFZhTub+m/qMg==} 3292 | hasBin: true 3293 | dependencies: 3294 | atomic-sleep: 1.0.0 3295 | fast-redact: 3.5.0 3296 | on-exit-leak-free: 2.1.2 3297 | pino-abstract-transport: 2.0.0 3298 | pino-std-serializers: 7.0.0 3299 | process-warning: 4.0.1 3300 | quick-format-unescaped: 4.0.4 3301 | real-require: 0.2.0 3302 | safe-stable-stringify: 2.5.0 3303 | sonic-boom: 4.2.0 3304 | thread-stream: 3.1.0 3305 | dev: false 3306 | 3307 | /pirates@4.0.6: 3308 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 3309 | engines: {node: '>= 6'} 3310 | dev: true 3311 | 3312 | /pkg-dir@4.2.0: 3313 | resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} 3314 | engines: {node: '>=8'} 3315 | dependencies: 3316 | find-up: 4.1.0 3317 | dev: true 3318 | 3319 | /prelude-ls@1.2.1: 3320 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 3321 | engines: {node: '>= 0.8.0'} 3322 | dev: true 3323 | 3324 | /prettier@3.5.2: 3325 | resolution: {integrity: sha512-lc6npv5PH7hVqozBR7lkBNOGXV9vMwROAPlumdBkX0wTbbzPu/U1hk5yL8p2pt4Xoc+2mkT8t/sow2YrV/M5qg==} 3326 | engines: {node: '>=14'} 3327 | hasBin: true 3328 | dev: true 3329 | 3330 | /pretty-format@29.7.0: 3331 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 3332 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 3333 | dependencies: 3334 | '@jest/schemas': 29.6.3 3335 | ansi-styles: 5.2.0 3336 | react-is: 18.3.1 3337 | dev: true 3338 | 3339 | /process-warning@4.0.1: 3340 | resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==} 3341 | dev: false 3342 | 3343 | /prompts@2.4.2: 3344 | resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} 3345 | engines: {node: '>= 6'} 3346 | dependencies: 3347 | kleur: 3.0.3 3348 | sisteransi: 1.0.5 3349 | dev: true 3350 | 3351 | /proxy-addr@2.0.7: 3352 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 3353 | engines: {node: '>= 0.10'} 3354 | dependencies: 3355 | forwarded: 0.2.0 3356 | ipaddr.js: 1.9.1 3357 | dev: false 3358 | 3359 | /proxy-from-env@1.1.0: 3360 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 3361 | dev: false 3362 | 3363 | /pump@3.0.2: 3364 | resolution: {integrity: sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==} 3365 | dependencies: 3366 | end-of-stream: 1.4.4 3367 | once: 1.4.0 3368 | dev: false 3369 | 3370 | /punycode.js@2.3.1: 3371 | resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} 3372 | engines: {node: '>=6'} 3373 | dev: false 3374 | 3375 | /punycode@2.3.1: 3376 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 3377 | engines: {node: '>=6'} 3378 | dev: true 3379 | 3380 | /pure-rand@6.1.0: 3381 | resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} 3382 | dev: true 3383 | 3384 | /qs@6.13.0: 3385 | resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} 3386 | engines: {node: '>=0.6'} 3387 | dependencies: 3388 | side-channel: 1.1.0 3389 | dev: false 3390 | 3391 | /queue-microtask@1.2.3: 3392 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 3393 | dev: true 3394 | 3395 | /quick-format-unescaped@4.0.4: 3396 | resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} 3397 | dev: false 3398 | 3399 | /range-parser@1.2.1: 3400 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 3401 | engines: {node: '>= 0.6'} 3402 | dev: false 3403 | 3404 | /raw-body@2.5.2: 3405 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 3406 | engines: {node: '>= 0.8'} 3407 | dependencies: 3408 | bytes: 3.1.2 3409 | http-errors: 2.0.0 3410 | iconv-lite: 0.4.24 3411 | unpipe: 1.0.0 3412 | dev: false 3413 | 3414 | /react-is@18.3.1: 3415 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 3416 | dev: true 3417 | 3418 | /readdirp@3.6.0: 3419 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 3420 | engines: {node: '>=8.10.0'} 3421 | dependencies: 3422 | picomatch: 2.3.1 3423 | dev: false 3424 | 3425 | /real-require@0.2.0: 3426 | resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} 3427 | engines: {node: '>= 12.13.0'} 3428 | dev: false 3429 | 3430 | /require-directory@2.1.1: 3431 | resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} 3432 | engines: {node: '>=0.10.0'} 3433 | dev: true 3434 | 3435 | /require-from-string@2.0.2: 3436 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 3437 | engines: {node: '>=0.10.0'} 3438 | dev: false 3439 | 3440 | /resolve-cwd@3.0.0: 3441 | resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} 3442 | engines: {node: '>=8'} 3443 | dependencies: 3444 | resolve-from: 5.0.0 3445 | dev: true 3446 | 3447 | /resolve-from@4.0.0: 3448 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 3449 | engines: {node: '>=4'} 3450 | dev: true 3451 | 3452 | /resolve-from@5.0.0: 3453 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 3454 | engines: {node: '>=8'} 3455 | dev: true 3456 | 3457 | /resolve.exports@2.0.3: 3458 | resolution: {integrity: sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==} 3459 | engines: {node: '>=10'} 3460 | dev: true 3461 | 3462 | /resolve@1.22.10: 3463 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 3464 | engines: {node: '>= 0.4'} 3465 | hasBin: true 3466 | dependencies: 3467 | is-core-module: 2.16.1 3468 | path-parse: 1.0.7 3469 | supports-preserve-symlinks-flag: 1.0.0 3470 | dev: true 3471 | 3472 | /reusify@1.0.4: 3473 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 3474 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 3475 | dev: true 3476 | 3477 | /rimraf@3.0.2: 3478 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 3479 | deprecated: Rimraf versions prior to v4 are no longer supported 3480 | hasBin: true 3481 | dependencies: 3482 | glob: 7.2.3 3483 | dev: true 3484 | 3485 | /run-parallel@1.2.0: 3486 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 3487 | dependencies: 3488 | queue-microtask: 1.2.3 3489 | dev: true 3490 | 3491 | /safe-buffer@5.2.1: 3492 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 3493 | dev: false 3494 | 3495 | /safe-stable-stringify@2.5.0: 3496 | resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==} 3497 | engines: {node: '>=10'} 3498 | dev: false 3499 | 3500 | /safer-buffer@2.1.2: 3501 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 3502 | dev: false 3503 | 3504 | /secure-json-parse@2.7.0: 3505 | resolution: {integrity: sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==} 3506 | dev: false 3507 | 3508 | /semver@6.3.1: 3509 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} 3510 | hasBin: true 3511 | dev: true 3512 | 3513 | /semver@7.7.1: 3514 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 3515 | engines: {node: '>=10'} 3516 | hasBin: true 3517 | dev: true 3518 | 3519 | /send@0.19.0: 3520 | resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} 3521 | engines: {node: '>= 0.8.0'} 3522 | dependencies: 3523 | debug: 2.6.9 3524 | depd: 2.0.0 3525 | destroy: 1.2.0 3526 | encodeurl: 1.0.2 3527 | escape-html: 1.0.3 3528 | etag: 1.8.1 3529 | fresh: 0.5.2 3530 | http-errors: 2.0.0 3531 | mime: 1.6.0 3532 | ms: 2.1.3 3533 | on-finished: 2.4.1 3534 | range-parser: 1.2.1 3535 | statuses: 2.0.1 3536 | transitivePeerDependencies: 3537 | - supports-color 3538 | dev: false 3539 | 3540 | /serve-static@1.16.2: 3541 | resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} 3542 | engines: {node: '>= 0.8.0'} 3543 | dependencies: 3544 | encodeurl: 2.0.0 3545 | escape-html: 1.0.3 3546 | parseurl: 1.3.3 3547 | send: 0.19.0 3548 | transitivePeerDependencies: 3549 | - supports-color 3550 | dev: false 3551 | 3552 | /setprototypeof@1.2.0: 3553 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 3554 | dev: false 3555 | 3556 | /shebang-command@2.0.0: 3557 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 3558 | engines: {node: '>=8'} 3559 | dependencies: 3560 | shebang-regex: 3.0.0 3561 | dev: true 3562 | 3563 | /shebang-regex@3.0.0: 3564 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 3565 | engines: {node: '>=8'} 3566 | dev: true 3567 | 3568 | /side-channel-list@1.0.0: 3569 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 3570 | engines: {node: '>= 0.4'} 3571 | dependencies: 3572 | es-errors: 1.3.0 3573 | object-inspect: 1.13.4 3574 | dev: false 3575 | 3576 | /side-channel-map@1.0.1: 3577 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 3578 | engines: {node: '>= 0.4'} 3579 | dependencies: 3580 | call-bound: 1.0.3 3581 | es-errors: 1.3.0 3582 | get-intrinsic: 1.3.0 3583 | object-inspect: 1.13.4 3584 | dev: false 3585 | 3586 | /side-channel-weakmap@1.0.2: 3587 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 3588 | engines: {node: '>= 0.4'} 3589 | dependencies: 3590 | call-bound: 1.0.3 3591 | es-errors: 1.3.0 3592 | get-intrinsic: 1.3.0 3593 | object-inspect: 1.13.4 3594 | side-channel-map: 1.0.1 3595 | dev: false 3596 | 3597 | /side-channel@1.1.0: 3598 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 3599 | engines: {node: '>= 0.4'} 3600 | dependencies: 3601 | es-errors: 1.3.0 3602 | object-inspect: 1.13.4 3603 | side-channel-list: 1.0.0 3604 | side-channel-map: 1.0.1 3605 | side-channel-weakmap: 1.0.2 3606 | dev: false 3607 | 3608 | /signal-exit@3.0.7: 3609 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 3610 | dev: true 3611 | 3612 | /sisteransi@1.0.5: 3613 | resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} 3614 | dev: true 3615 | 3616 | /slash@3.0.0: 3617 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 3618 | engines: {node: '>=8'} 3619 | dev: true 3620 | 3621 | /slugify@1.6.6: 3622 | resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==} 3623 | engines: {node: '>=8.0.0'} 3624 | dev: false 3625 | 3626 | /sonic-boom@4.2.0: 3627 | resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} 3628 | dependencies: 3629 | atomic-sleep: 1.0.0 3630 | dev: false 3631 | 3632 | /source-map-support@0.5.13: 3633 | resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} 3634 | dependencies: 3635 | buffer-from: 1.1.2 3636 | source-map: 0.6.1 3637 | dev: true 3638 | 3639 | /source-map@0.6.1: 3640 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 3641 | engines: {node: '>=0.10.0'} 3642 | 3643 | /split2@4.2.0: 3644 | resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} 3645 | engines: {node: '>= 10.x'} 3646 | dev: false 3647 | 3648 | /sprintf-js@1.0.3: 3649 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 3650 | dev: true 3651 | 3652 | /stack-utils@2.0.6: 3653 | resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} 3654 | engines: {node: '>=10'} 3655 | dependencies: 3656 | escape-string-regexp: 2.0.0 3657 | dev: true 3658 | 3659 | /statuses@2.0.1: 3660 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 3661 | engines: {node: '>= 0.8'} 3662 | dev: false 3663 | 3664 | /string-length@4.0.2: 3665 | resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} 3666 | engines: {node: '>=10'} 3667 | dependencies: 3668 | char-regex: 1.0.2 3669 | strip-ansi: 6.0.1 3670 | dev: true 3671 | 3672 | /string-width@4.2.3: 3673 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 3674 | engines: {node: '>=8'} 3675 | dependencies: 3676 | emoji-regex: 8.0.0 3677 | is-fullwidth-code-point: 3.0.0 3678 | strip-ansi: 6.0.1 3679 | dev: true 3680 | 3681 | /strip-ansi@6.0.1: 3682 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 3683 | engines: {node: '>=8'} 3684 | dependencies: 3685 | ansi-regex: 5.0.1 3686 | dev: true 3687 | 3688 | /strip-bom@4.0.0: 3689 | resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} 3690 | engines: {node: '>=8'} 3691 | dev: true 3692 | 3693 | /strip-final-newline@2.0.0: 3694 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 3695 | engines: {node: '>=6'} 3696 | dev: true 3697 | 3698 | /strip-json-comments@3.1.1: 3699 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 3700 | engines: {node: '>=8'} 3701 | 3702 | /supports-color@7.2.0: 3703 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 3704 | engines: {node: '>=8'} 3705 | dependencies: 3706 | has-flag: 4.0.0 3707 | 3708 | /supports-color@8.1.1: 3709 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 3710 | engines: {node: '>=10'} 3711 | dependencies: 3712 | has-flag: 4.0.0 3713 | dev: true 3714 | 3715 | /supports-preserve-symlinks-flag@1.0.0: 3716 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3717 | engines: {node: '>= 0.4'} 3718 | dev: true 3719 | 3720 | /test-exclude@6.0.0: 3721 | resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} 3722 | engines: {node: '>=8'} 3723 | dependencies: 3724 | '@istanbuljs/schema': 0.1.3 3725 | glob: 7.2.3 3726 | minimatch: 3.1.2 3727 | dev: true 3728 | 3729 | /text-table@0.2.0: 3730 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 3731 | dev: true 3732 | 3733 | /thread-stream@3.1.0: 3734 | resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} 3735 | dependencies: 3736 | real-require: 0.2.0 3737 | dev: false 3738 | 3739 | /tmpl@1.0.5: 3740 | resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} 3741 | dev: true 3742 | 3743 | /to-regex-range@5.0.1: 3744 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3745 | engines: {node: '>=8.0'} 3746 | dependencies: 3747 | is-number: 7.0.0 3748 | 3749 | /toidentifier@1.0.1: 3750 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 3751 | engines: {node: '>=0.6'} 3752 | dev: false 3753 | 3754 | /ts-jest@29.2.6(@babel/core@7.26.9)(jest@29.7.0)(typescript@5.7.3): 3755 | resolution: {integrity: sha512-yTNZVZqc8lSixm+QGVFcPe6+yj7+TWZwIesuOWvfcn4B9bz5x4NDzVCQQjOs7Hfouu36aEqfEbo9Qpo+gq8dDg==} 3756 | engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0} 3757 | hasBin: true 3758 | peerDependencies: 3759 | '@babel/core': '>=7.0.0-beta.0 <8' 3760 | '@jest/transform': ^29.0.0 3761 | '@jest/types': ^29.0.0 3762 | babel-jest: ^29.0.0 3763 | esbuild: '*' 3764 | jest: ^29.0.0 3765 | typescript: '>=4.3 <6' 3766 | peerDependenciesMeta: 3767 | '@babel/core': 3768 | optional: true 3769 | '@jest/transform': 3770 | optional: true 3771 | '@jest/types': 3772 | optional: true 3773 | babel-jest: 3774 | optional: true 3775 | esbuild: 3776 | optional: true 3777 | dependencies: 3778 | '@babel/core': 7.26.9 3779 | bs-logger: 0.2.6 3780 | ejs: 3.1.10 3781 | fast-json-stable-stringify: 2.1.0 3782 | jest: 29.7.0(@types/node@20.17.19)(ts-node@10.9.2) 3783 | jest-util: 29.7.0 3784 | json5: 2.2.3 3785 | lodash.memoize: 4.1.2 3786 | make-error: 1.3.6 3787 | semver: 7.7.1 3788 | typescript: 5.7.3 3789 | yargs-parser: 21.1.1 3790 | dev: true 3791 | 3792 | /ts-node@10.9.2(@types/node@20.17.19)(typescript@5.7.3): 3793 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 3794 | hasBin: true 3795 | peerDependencies: 3796 | '@swc/core': '>=1.2.50' 3797 | '@swc/wasm': '>=1.2.50' 3798 | '@types/node': '*' 3799 | typescript: '>=2.7' 3800 | peerDependenciesMeta: 3801 | '@swc/core': 3802 | optional: true 3803 | '@swc/wasm': 3804 | optional: true 3805 | dependencies: 3806 | '@cspotcode/source-map-support': 0.8.1 3807 | '@tsconfig/node10': 1.0.11 3808 | '@tsconfig/node12': 1.0.11 3809 | '@tsconfig/node14': 1.0.3 3810 | '@tsconfig/node16': 1.0.4 3811 | '@types/node': 20.17.19 3812 | acorn: 8.14.0 3813 | acorn-walk: 8.3.4 3814 | arg: 4.1.3 3815 | create-require: 1.1.1 3816 | diff: 4.0.2 3817 | make-error: 1.3.6 3818 | typescript: 5.7.3 3819 | v8-compile-cache-lib: 3.0.1 3820 | yn: 3.1.1 3821 | dev: true 3822 | 3823 | /tslib@1.14.1: 3824 | resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} 3825 | dev: true 3826 | 3827 | /tsutils@3.21.0(typescript@5.7.3): 3828 | resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} 3829 | engines: {node: '>= 6'} 3830 | peerDependencies: 3831 | typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' 3832 | dependencies: 3833 | tslib: 1.14.1 3834 | typescript: 5.7.3 3835 | dev: true 3836 | 3837 | /type-check@0.4.0: 3838 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 3839 | engines: {node: '>= 0.8.0'} 3840 | dependencies: 3841 | prelude-ls: 1.2.1 3842 | dev: true 3843 | 3844 | /type-detect@4.0.8: 3845 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 3846 | engines: {node: '>=4'} 3847 | dev: true 3848 | 3849 | /type-fest@0.20.2: 3850 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 3851 | engines: {node: '>=10'} 3852 | dev: true 3853 | 3854 | /type-fest@0.21.3: 3855 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} 3856 | engines: {node: '>=10'} 3857 | dev: true 3858 | 3859 | /type-is@1.6.18: 3860 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 3861 | engines: {node: '>= 0.6'} 3862 | dependencies: 3863 | media-typer: 0.3.0 3864 | mime-types: 2.1.35 3865 | dev: false 3866 | 3867 | /typescript@5.7.3: 3868 | resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} 3869 | engines: {node: '>=14.17'} 3870 | hasBin: true 3871 | dev: true 3872 | 3873 | /uc.micro@2.1.0: 3874 | resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} 3875 | dev: false 3876 | 3877 | /uglify-js@3.19.3: 3878 | resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} 3879 | engines: {node: '>=0.8.0'} 3880 | hasBin: true 3881 | requiresBuild: true 3882 | dev: false 3883 | optional: true 3884 | 3885 | /undici-types@6.19.8: 3886 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 3887 | dev: true 3888 | 3889 | /universalify@2.0.1: 3890 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 3891 | engines: {node: '>= 10.0.0'} 3892 | dev: false 3893 | 3894 | /unpipe@1.0.0: 3895 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 3896 | engines: {node: '>= 0.8'} 3897 | dev: false 3898 | 3899 | /update-browserslist-db@1.1.2(browserslist@4.24.4): 3900 | resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} 3901 | hasBin: true 3902 | peerDependencies: 3903 | browserslist: '>= 4.21.0' 3904 | dependencies: 3905 | browserslist: 4.24.4 3906 | escalade: 3.2.0 3907 | picocolors: 1.1.1 3908 | dev: true 3909 | 3910 | /uri-js@4.4.1: 3911 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 3912 | dependencies: 3913 | punycode: 2.3.1 3914 | dev: true 3915 | 3916 | /utils-merge@1.0.1: 3917 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 3918 | engines: {node: '>= 0.4.0'} 3919 | dev: false 3920 | 3921 | /v8-compile-cache-lib@3.0.1: 3922 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 3923 | dev: true 3924 | 3925 | /v8-to-istanbul@9.3.0: 3926 | resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} 3927 | engines: {node: '>=10.12.0'} 3928 | dependencies: 3929 | '@jridgewell/trace-mapping': 0.3.25 3930 | '@types/istanbul-lib-coverage': 2.0.6 3931 | convert-source-map: 2.0.0 3932 | dev: true 3933 | 3934 | /vary@1.1.2: 3935 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 3936 | engines: {node: '>= 0.8'} 3937 | dev: false 3938 | 3939 | /walker@1.0.8: 3940 | resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} 3941 | dependencies: 3942 | makeerror: 1.0.12 3943 | dev: true 3944 | 3945 | /which@2.0.2: 3946 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 3947 | engines: {node: '>= 8'} 3948 | hasBin: true 3949 | dependencies: 3950 | isexe: 2.0.0 3951 | dev: true 3952 | 3953 | /word-wrap@1.2.5: 3954 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 3955 | engines: {node: '>=0.10.0'} 3956 | dev: true 3957 | 3958 | /wordwrap@1.0.0: 3959 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 3960 | dev: false 3961 | 3962 | /wrap-ansi@7.0.0: 3963 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 3964 | engines: {node: '>=10'} 3965 | dependencies: 3966 | ansi-styles: 4.3.0 3967 | string-width: 4.2.3 3968 | strip-ansi: 6.0.1 3969 | dev: true 3970 | 3971 | /wrappy@1.0.2: 3972 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3973 | 3974 | /write-file-atomic@4.0.2: 3975 | resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} 3976 | engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} 3977 | dependencies: 3978 | imurmurhash: 0.1.4 3979 | signal-exit: 3.0.7 3980 | dev: true 3981 | 3982 | /y18n@5.0.8: 3983 | resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} 3984 | engines: {node: '>=10'} 3985 | dev: true 3986 | 3987 | /yallist@3.1.1: 3988 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 3989 | dev: true 3990 | 3991 | /yargs-parser@21.1.1: 3992 | resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} 3993 | engines: {node: '>=12'} 3994 | dev: true 3995 | 3996 | /yargs@17.7.2: 3997 | resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} 3998 | engines: {node: '>=12'} 3999 | dependencies: 4000 | cliui: 8.0.1 4001 | escalade: 3.2.0 4002 | get-caller-file: 2.0.5 4003 | require-directory: 2.1.1 4004 | string-width: 4.2.3 4005 | y18n: 5.0.8 4006 | yargs-parser: 21.1.1 4007 | dev: true 4008 | 4009 | /yn@3.1.1: 4010 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 4011 | engines: {node: '>=6'} 4012 | dev: true 4013 | 4014 | /yocto-queue@0.1.0: 4015 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 4016 | engines: {node: '>=10'} 4017 | dev: true 4018 | 4019 | /zod@3.24.2: 4020 | resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==} 4021 | dev: false 4022 | -------------------------------------------------------------------------------- /samples/blog.json: -------------------------------------------------------------------------------- 1 | { 2 | "site": { 3 | "title": "JSON Blog Example", 4 | "description": "A showcase of JSON Blog's features and capabilities" 5 | }, 6 | "basics": { 7 | "name": "JSON Blog Team" 8 | }, 9 | "posts": [ 10 | { 11 | "title": "JsonBlog v2: A Modern Approach to JSON-Driven Static Blogs", 12 | "source": "./jsonblog-v2.md", 13 | "createdAt": "2025-02-25" 14 | }, 15 | { 16 | "title": "Markdown Showcase", 17 | "content": "# Markdown Showcase\n\nThis post demonstrates the various markdown features supported by JSON Blog. Let's explore how different elements render.\n\n## Text Formatting\n\nYou can make text **bold**, *italic*, or ***both***. You can also ~~strike through~~ text.\n\n## Code Examples\n\nHere's a JavaScript code block showing how to create a blog post:\n\n```javascript\nconst createBlogPost = ({ title, content, date }) => {\n return {\n title,\n content,\n createdAt: date.toISOString(),\n slug: title.toLowerCase().replace(/\\s+/g, '-')\n };\n};\n\nconst post = createBlogPost({\n title: 'Hello World',\n content: 'My first post!',\n date: new Date()\n});\n```\n\nAnd some inline code: `npm install jsonblog-cli`\n\n## Blockquotes\n\n> The best way to predict the future is to invent it.\n> \n> — Alan Kay\n\n## Lists\n\nNumbered list:\n\n1. First item\n2. Second item\n 1. Sub-item one\n 2. Sub-item two\n3. Third item\n\nBullet list:\n\n- Features\n - Markdown support\n - Code highlighting\n - Clean typography\n- Simple setup\n- Fast build times\n\n## Tables\n\n| Feature | Status |\n|---------|--------|\n| Markdown | ✅ |\n| Code Highlighting | ✅ |\n| Custom Themes | ✅ |\n| RSS Feed | 🚧 |\n\n## Links\n\nVisit [JSON Blog on GitHub](https://github.com/jsonblog/jsonblog-cli) for more information.\n\n## Horizontal Rule\n\n---\n\n## Definition Lists\n\nJSON Blog\n: A modern, JSON-driven static blog generator\n\nMarkdown\n: A lightweight markup language for creating formatted text", 18 | "createdAt": "2025-02-24" 19 | } 20 | ], 21 | "pages": [ 22 | { 23 | "title": "About", 24 | "content": "# About JSON Blog\n\nJSON Blog is a modern static blog generator that uses JSON for content management and supports full markdown capabilities.\n\n## Features\n\n- Simple JSON-based content management\n- Full markdown support\n- Fast build times\n- Clean, minimalist design\n- TypeScript support" 25 | }, 26 | { 27 | "title": "Getting Started", 28 | "content": "# Getting Started\n\n## Installation\n\n```bash\nnpm install jsonblog-cli\n```\n\n## Create Your First Blog\n\n1. Create a blog.json file\n2. Add your content\n3. Run `jsonblog build blog.json`\n\nFor more detailed instructions, visit our [GitHub repository](https://github.com/jsonblog/jsonblog-cli)." 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /samples/jsonblog-v2.md: -------------------------------------------------------------------------------- 1 | # JsonBlog v2: A Modern Approach to JSON-Driven Static Blogs 2 | 3 | JsonBlog has always been about simplicity and flexibility - a tool that lets you generate your blog from a simple JSON file. With version 2.0, we're bringing this concept into the modern era while maintaining the simplicity that made JsonBlog great. 4 | 5 | ## What is JsonBlog? 6 | 7 | JsonBlog is a language-agnostic blogging framework that uses JSON as its core data format. The idea is simple: you create a `blog.json` file that contains all your blog's content and metadata, and JsonBlog generates a static website from it. What makes JsonBlog special is its generator system - you can use any generator you want, written in any language, to create your blog exactly how you want it. 8 | 9 | The core principle remains: **your content should be separate from its presentation**. 10 | 11 | ## What's New in v2? 12 | 13 | ### 1. TypeScript Support 14 | We've completely rewritten the CLI tool in TypeScript, bringing: 15 | - Better type safety 16 | - Improved code completion in modern editors 17 | - Clear interfaces for custom generators 18 | - Better error messages 19 | 20 | ### 2. Modern Development Experience 21 | - Updated all dependencies to their latest versions 22 | - Replaced deprecated libraries with modern alternatives 23 | - Added ESLint and Prettier for code quality 24 | - Improved development workflow with watch mode 25 | 26 | ### 3. Better Error Handling 27 | - Colored console output for better readability 28 | - More informative error messages 29 | - Proper async/await throughout the codebase 30 | - Better validation feedback 31 | 32 | ### 4. Improved Build Process 33 | - Faster builds with modern Node.js features 34 | - Better file watching with Chokidar 35 | - Improved file path handling 36 | - TypeScript-powered build pipeline 37 | 38 | ### 5. Better Documentation 39 | - Updated README with clear instructions 40 | - Better examples and use cases 41 | - Improved API documentation 42 | - Clear upgrade path from v1 43 | 44 | ## Backward Compatibility 45 | 46 | One of our key goals with v2 was maintaining 100% backward compatibility. Your existing: 47 | - `blog.json` files 48 | - Custom generators 49 | - Build outputs 50 | - Workflows 51 | 52 | All continue to work exactly as they did before. You can upgrade to v2 without changing any of your existing content or generators. 53 | 54 | ## Getting Started 55 | 56 | ```bash 57 | # Install JsonBlog CLI 58 | npm install -g jsonblog-cli 59 | 60 | # Create a new blog 61 | blog init 62 | 63 | # Build your blog 64 | blog build 65 | 66 | # Preview locally with auto-reload 67 | blog serve 68 | ``` 69 | 70 | ## The Future 71 | 72 | JsonBlog v2 sets the foundation for future improvements while maintaining the simplicity and flexibility that made the original version great. We're excited to see what you build with it! 73 | 74 | Some areas we're looking at for future versions: 75 | - Built-in TypeScript generator templates 76 | - Better plugin system 77 | - More built-in themes 78 | - Enhanced development tools 79 | 80 | ## Contributing 81 | 82 | JsonBlog is open source and we welcome contributions! Whether it's: 83 | - Bug reports 84 | - Feature requests 85 | - Pull requests 86 | - Custom generators 87 | - Documentation improvements 88 | 89 | Every contribution helps make JsonBlog better for everyone. 90 | 91 | ## Conclusion 92 | 93 | JsonBlog v2 brings modern development practices to the simple, flexible blogging framework you know and love. It's a significant step forward that doesn't force you to change how you work. We can't wait to see what you create with it! 94 | -------------------------------------------------------------------------------- /src/__tests__/cli.test.ts: -------------------------------------------------------------------------------- 1 | import { Command } from 'commander'; 2 | 3 | /* eslint-disable @typescript-eslint/no-empty-function */ 4 | describe('CLI', () => { 5 | let program: Command; 6 | 7 | beforeEach(() => { 8 | jest.resetModules(); 9 | program = new Command(); 10 | // Register test commands 11 | program 12 | .command('build') 13 | .description('Build the blog') 14 | .action(() => {}); 15 | program 16 | .command('serve') 17 | .description('Serve the blog') 18 | .action(() => {}); 19 | }); 20 | 21 | test('should have basic commands', () => { 22 | expect(program.commands.length).toBeGreaterThan(0); 23 | }); 24 | 25 | test('should handle build command', () => { 26 | const buildCmd = program.commands.find((cmd) => cmd.name() === 'build'); 27 | expect(buildCmd?.name()).toBe('build'); 28 | }); 29 | 30 | test('should handle serve command', () => { 31 | const serveCmd = program.commands.find((cmd) => cmd.name() === 'serve'); 32 | expect(serveCmd?.name()).toBe('serve'); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | import { Command } from 'commander'; 3 | import * as fs from 'fs-extra'; 4 | import * as path from 'path'; 5 | import * as schema from 'jsonblog-schema'; 6 | import express from 'express'; 7 | import * as chokidar from 'chokidar'; 8 | import logger from './logger'; 9 | 10 | const BUILD_PATH = `${process.cwd()}/./build`; 11 | const DEFAULT_GENERATOR = 'jsonblog-generator-boilerplate'; 12 | 13 | const getGenerator = (generatorName?: string) => { 14 | if (!generatorName) { 15 | logger.info('Using default generator'); 16 | return require('jsonblog-generator-boilerplate'); 17 | } 18 | logger.info({ generator: generatorName }, 'Using custom generator'); 19 | return require(generatorName); 20 | }; 21 | 22 | const build = async (generator: any, blog: any) => { 23 | logger.info('Starting build process'); 24 | const result = await schema.validateBlog(blog); 25 | if (!result.success) { 26 | logger.error({ error: result.error }, 'Blog validation failed'); 27 | return; 28 | } 29 | 30 | // Get the directory of the blog.json file to use as base path 31 | const blogDir = process.cwd(); 32 | logger.debug({ basePath: blogDir }, 'Using base path'); 33 | 34 | try { 35 | const files = await generator(blog, blogDir); 36 | logger.debug({ fileCount: files.length }, 'Generated files'); 37 | 38 | // Clean up build dir and make again 39 | logger.debug({ path: BUILD_PATH }, 'Cleaning build directory'); 40 | fs.removeSync(BUILD_PATH); 41 | fs.mkdirSync(BUILD_PATH); 42 | 43 | // Now write files given by the generator 44 | files.forEach((file: { name: string; content: string }) => { 45 | logger.debug({ file: file.name }, 'Writing file'); 46 | fs.outputFileSync(`${BUILD_PATH}/${file.name}`, file.content, 'utf8'); 47 | }); 48 | logger.info({ fileCount: files.length }, 'Build completed successfully'); 49 | } catch (error) { 50 | logger.error({ error }, 'Build process failed'); 51 | } 52 | }; 53 | 54 | const getBlog = (file: string) => { 55 | try { 56 | const blogPath = path.resolve(file); 57 | logger.debug({ path: blogPath }, 'Loading blog configuration'); 58 | return fs.readJsonSync(blogPath); 59 | } catch (error) { 60 | logger.error({ error, file }, 'Failed to load blog configuration'); 61 | process.exit(1); 62 | } 63 | }; 64 | 65 | const program = new Command(); 66 | 67 | program 68 | .name('jsonblog') 69 | .description('CLI tool for JsonBlog') 70 | .version('2.6.0'); 71 | 72 | program 73 | .command('init') 74 | .description('Create an example blog.json') 75 | .action(() => { 76 | const samplePath = path.join(__dirname, '..', 'samples', 'blog.json'); 77 | const targetPath = path.join(process.cwd(), 'blog.json'); 78 | fs.copyFileSync(samplePath, targetPath); 79 | logger.info('Created blog.json with example content'); 80 | }); 81 | 82 | program 83 | .command('build') 84 | .description('Build the blog') 85 | .option('-g, --generator ', 'Generator to use', DEFAULT_GENERATOR) 86 | .argument('[config]', 'Path to blog config file', 'blog.json') 87 | .action(async (config, options) => { 88 | logger.info({ file: config, generator: options.generator }, 'Starting build command'); 89 | const blog = getBlog(config); 90 | const generator = getGenerator(options.generator); 91 | await build(generator, blog); 92 | }); 93 | 94 | program 95 | .command('serve') 96 | .description('Serve the blog') 97 | .option('-p, --port ', 'Port to serve on', '3000') 98 | .action((options) => { 99 | const port = parseInt(options.port, 10); 100 | const app = express(); 101 | app.use(express.static(BUILD_PATH)); 102 | app.listen(port, () => { 103 | logger.info({ port }, 'Serving blog at http://localhost:${port}'); 104 | }); 105 | }); 106 | 107 | program 108 | .command('watch') 109 | .description('Watch for changes and rebuild') 110 | .option('-g, --generator ', 'Generator to use', DEFAULT_GENERATOR) 111 | .argument('[config]', 'Path to blog config file', 'blog.json') 112 | .action(async (config, options) => { 113 | logger.info({ file: config, generator: options.generator }, 'Starting watch command'); 114 | const watcher = chokidar.watch([config, 'content/**/*', 'templates/**/*'], { 115 | ignored: /(^|[\/\\])\../, 116 | persistent: true 117 | }); 118 | 119 | logger.info(`Watching ${config} and content directory for changes...`); 120 | 121 | watcher.on('change', async (path) => { 122 | logger.info({ path }, 'File change detected'); 123 | const blog = getBlog(config); 124 | const generator = getGenerator(options.generator); 125 | await build(generator, blog); 126 | logger.info('Rebuild completed'); 127 | }); 128 | }); 129 | 130 | program.parse(); 131 | -------------------------------------------------------------------------------- /src/logger.ts: -------------------------------------------------------------------------------- 1 | import pino from 'pino'; 2 | 3 | const logger = pino({ 4 | transport: { 5 | target: 'pino-pretty', 6 | options: { 7 | colorize: true, 8 | translateTime: 'HH:MM:ss', 9 | ignore: 'pid,hostname', 10 | }, 11 | }, 12 | level: process.env.LOG_LEVEL || 'info', 13 | }); 14 | 15 | export default logger; 16 | -------------------------------------------------------------------------------- /src/types/jsonblog-generator-boilerplate.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'jsonblog-generator-boilerplate' { 2 | interface BlogFile { 3 | name: string; 4 | content: string; 5 | } 6 | 7 | interface Generator { 8 | (blog: any): Promise; 9 | } 10 | 11 | const generator: Generator; 12 | export = generator; 13 | } 14 | -------------------------------------------------------------------------------- /src/types/jsonblog-schema.d.ts: -------------------------------------------------------------------------------- 1 | declare module 'jsonblog-schema' { 2 | interface ValidationResult { 3 | success: boolean; 4 | error?: string; 5 | } 6 | 7 | interface BlogPost { 8 | title: string; 9 | description?: string; 10 | source?: string; 11 | createdAt?: string; 12 | updatedAt?: string; 13 | } 14 | 15 | interface BlogPage { 16 | title: string; 17 | description?: string; 18 | source?: string; 19 | createdAt?: string; 20 | updatedAt?: string; 21 | } 22 | 23 | interface BlogSite { 24 | title: string; 25 | description?: string; 26 | } 27 | 28 | interface BlogBasics { 29 | name: string; 30 | label?: string; 31 | image?: string; 32 | email?: string; 33 | phone?: string; 34 | url?: string; 35 | } 36 | 37 | interface Blog { 38 | $schema?: string; 39 | site: BlogSite; 40 | basics: BlogBasics; 41 | posts: BlogPost[]; 42 | pages?: BlogPage[]; 43 | } 44 | 45 | interface Schema { 46 | validateBlog: ( 47 | blog: Blog, 48 | ) => ValidationResult; 49 | example: Blog; 50 | } 51 | 52 | const schema: Schema; 53 | export = schema; 54 | } 55 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2018", 4 | "module": "CommonJS", 5 | "lib": ["ES2018"], 6 | "declaration": true, 7 | "outDir": "./dist", 8 | "rootDir": "./src", 9 | "strict": true, 10 | "esModuleInterop": true, 11 | "skipLibCheck": true, 12 | "forceConsistentCasingInFileNames": true, 13 | "resolveJsonModule": true, 14 | "typeRoots": ["./node_modules/@types"] 15 | }, 16 | "include": ["src/**/*"], 17 | "exclude": ["node_modules", "dist"] 18 | } 19 | --------------------------------------------------------------------------------