diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..0ef035d --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +version: 2 +updates: + - package-ecosystem: 'npm' + directory: '/' + schedule: + interval: 'weekly' + day: 'saturday' + versioning-strategy: 'increase' + labels: + - 'dependencies' + open-pull-requests-limit: 5 + pull-request-branch-name: + separator: '-' + commit-message: + # cause a release for non-dev-deps + prefix: fix(deps) + # no release for dev-deps + prefix-development: chore(dev-deps) + ignore: + - dependency-name: '@salesforce/dev-scripts' + - dependency-name: '*' + update-types: ['version-update:semver-major'] diff --git a/.github/workflows/run-unit-tests.yaml b/.github/workflows/run-unit-tests.yaml new file mode 100644 index 0000000..74aaad0 --- /dev/null +++ b/.github/workflows/run-unit-tests.yaml @@ -0,0 +1,24 @@ +# This workflow will do a clean installation of node dependencies, cache/restore them, build the source code and run tests across different versions of node +# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-nodejs + +name: Node.js CI + +on: ['push'] + +jobs: + build-and-test: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + os: [ubuntu-latest, macos-latest] + + steps: + - uses: actions/checkout@v4 + - name: Use Node.js 22 + uses: actions/setup-node@v4 + with: + node-version: '22.x' + cache: 'npm' + - run: npm ci + - run: npm run test diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..c9df035 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,161 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Overview + +**@codifycli/schemas** is the central contract library for the Codify ecosystem. It defines: +- JSON Schemas for all IPC message formats between Codify CLI core and plugins +- TypeScript type definitions for type-safe message handling +- Configuration file schemas for Codify projects and resources +- Schema store integration for IDE autocomplete/validation + +Codify is an infrastructure-as-code tool with a plugin-based architecture where the CLI core orchestrates resource management through plugins that communicate via IPC messages validated by this package. + +## Common Commands + +### Testing +```bash +npm test # Run all tests with vitest +``` + +### Building +```bash +npm run prepublishOnly # Compile TypeScript and prepare for publishing (runs `tsc`) +``` + +### Scripts +```bash +npm run script:upload-plugin # Upload resource schemas to Supabase registry +``` + +## Architecture + +### Plugin Communication Protocol + +Codify uses a request/response IPC protocol where: +- **Core CLI** sends messages to plugins with commands like `initialize`, `validate`, `plan`, `apply`, `import` +- **Plugins** respond with structured data validated against response schemas +- **Two message wrapper versions**: V1 (basic) and V2 (adds `requestId` for correlation) + +### Directory Structure + +``` +src/ +├── messages/ # Request/response schemas for each IPC message type +│ ├── *-request-data-schema.json +│ ├── *-response-data-schema.json +│ └── commands.ts # MessageCmd enum +├── types/ # TypeScript interfaces and enums +│ └── index.ts # All exported types +├── schemastore/ # IDE integration schema +│ └── codify-schema.json # Combined schema for autocomplete (2,462 lines) +├── config-file-schema.json # Top-level config file format +├── project-schema.json # "project" block definition +├── resource-schema.json # Base resource configuration +├── ipc-message-schema.json # V1 message wrapper +├── ipc-message-schema-v2.json # V2 message wrapper (adds requestId) +└── index.ts # Main exports +``` + +### Key Schemas + +**Configuration Schemas:** +- `config-file-schema.json` - Top-level array of config blocks with `type` field +- `project-schema.json` - Special "project" block with version, plugins, description +- `resource-schema.json` - Base schema for all resources (type, name, dependsOn, os) + +**Message Schemas (src/messages/):** +- Initialize: Plugin startup, capability discovery +- Validate: Resource configuration validation +- Plan: Calculate changes (create/destroy/modify/recreate/noop) +- Apply: Execute planned changes +- Import: Discover existing system resources +- Match: Find matching resource in array +- Get Resource Info: Query resource metadata +- Command Request/Response: Execute commands (sudo/interactive) +- Set Verbosity, Press Key to Continue, Error Response, Empty Response + +**Schema Store:** +- `codify-schema.json` - Comprehensive IDE integration schema combining all resource types + +### TypeScript Integration + +- Uses `resolveJsonModule: true` to import JSON schemas as typed modules +- All JSON schemas are copied to `dist/` during build +- Types and schemas are co-located for easier maintenance +- Strict mode enabled with full null checking + +### Build Process + +1. TypeScript compiles `src/` → `dist/` +2. JSON schemas copied to `dist/` +3. Type declarations (`.d.ts`) generated +4. Source maps created +5. Package published as ES modules + +## Development Workflow + +### Adding a New Message Type + +1. Create schemas in `src/messages/`: + - `[name]-request-data-schema.json` + - `[name]-response-data-schema.json` +2. Add TypeScript types in `src/types/index.ts`: + - `[Name]RequestData` interface + - `[Name]ResponseData` interface +3. Update `MessageCmd` enum if needed in `src/messages/commands.ts` +4. Import and export schemas in `src/index.ts` +5. Create test: `src/messages/[name]-request-data-schema.test.ts` +6. Run tests and build + +### Testing Pattern + +Each schema has a `.test.ts` file that: +- Uses AJV in strict mode to compile the schema +- Tests valid inputs return `true` +- Tests invalid inputs return `false` with appropriate errors +- Validates naming conventions and patterns + +**Configuration:** Tests use `tsconfig.test.json` which disables `strictNullChecks` for testing flexibility. + +### Resource Schema Management + +Resource schemas are defined in `src/schemastore/codify-schema.json` and uploaded to Supabase registry via `scripts/upload-resources.ts`. This script: +1. Upserts "default" plugin +2. Extracts each resource from the schema store +3. Upserts into `registry_resources` table +4. Extracts parameters and upserts into `registry_resource_parameters` table + +Requires environment variables: `SUPABASE_URL`, `SUPABASE_SERVICE_ROLE_KEY` + +## Key Concepts + +### Stateful vs Stateless Resources +- **Stateful**: CLI tracks state, plugins receive both desired config and current state +- **Stateless**: Plugins determine current state themselves, receive only desired config + +### Resource Dependencies +Resources declare dependencies via `dependsOn` array containing resource identifiers. + +### Operating System Support +Resources specify OS compatibility: +- `ResourceOs` enum: LINUX | MACOS | WINDOWS +- `LinuxDistro` enum: Comprehensive distro list (debian, ubuntu, fedora, arch, alpine, etc.) +- `OS` enum: Node.js platform values (Darwin | Linux | Windows_NT) + +### Sensitive Parameters +Parameters can be marked `isSensitive: true` for secure handling by the CLI. + +### Plan Parameter Changes +Plans track changes at parameter level: +- `ParameterOperation`: ADD | REMOVE | MODIFY | NOOP +- Each parameter change includes old/new values + +## Important Notes + +- **Breaking Changes**: This package is critical infrastructure - maintain backward compatibility +- **Validation**: All schemas must have corresponding tests +- **Documentation**: Include `$comment` fields with documentation URLs in schemas +- **Version Patterns**: Use semantic versioning regex: `^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$` +- **Type Patterns**: Resource types use pattern `^[a-zA-Z][\w-]+$` (alphanumeric start, then alphanumeric/underscore/hyphen) \ No newline at end of file diff --git a/README.md b/README.md index 8aadc21..d1dffe9 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,243 @@ -## Codify Schemas +# @codifycli/schemas -JSON schemas for config validation for [codify CLI](https://codifycli.com). +[![npm version](https://img.shields.io/npm/v/@codifycli/schemas.svg)](https://www.npmjs.com/package/@codifycli/schemas) +[![License: ISC](https://img.shields.io/badge/License-ISC-blue.svg)](https://opensource.org/licenses/ISC) + +JSON Schemas and TypeScript types that govern the message formats and configuration file formats for [Codify](https://codifycli.com). + +## Overview + +**@codifycli/schemas** is the central contract library for the Codify ecosystem, providing: + +- **JSON Schemas** for validating IPC messages between Codify CLI and plugins +- **TypeScript types** for type-safe plugin development +- **Configuration schemas** for Codify project and resource files +- **IDE integration** via schema store for autocomplete and validation + +This package ensures that all components of the Codify ecosystem communicate using a well-defined, validated protocol. + +## Installation + +```bash +npm install @codifycli/schemas +``` + +## Usage + +### For Plugin Developers + +Import schemas and types to build type-safe Codify plugins: + +```typescript +import { + InitializeRequestData, + InitializeResponseData, + ValidateRequestData, + ValidateResponseData, + PlanRequestData, + PlanResponseData, + ApplyRequestData, + MessageCmd, + MessageStatus, + ResourceOperation, +} from '@codifycli/schemas'; + +// Handle initialize message +function handleInitialize(request: InitializeRequestData): InitializeResponseData { + return { + resourceDefinitions: [ + { + type: 'my-resource', + dependencies: [], + os: ['linux', 'macOS'], + linuxDistros: ['debian', 'ubuntu'], + isSensitive: [], + allowMultiple: false, + } + ] + }; +} + +// Handle plan message +function handlePlan(request: PlanRequestData): PlanResponseData { + return { + planId: crypto.randomUUID(), + operation: ResourceOperation.CREATE, + parameterChanges: [], + }; +} +``` + +### Validating Messages + +Use the included AJV validator to validate IPC messages: + +```typescript +import Ajv from 'ajv'; +import { + InitializeRequestDataSchema, + InitializeResponseDataSchema, +} from '@codifycli/schemas'; + +const ajv = new Ajv({ strict: true }); + +// Validate request +const validateRequest = ajv.compile(InitializeRequestDataSchema); +if (!validateRequest(data)) { + console.error('Invalid request:', validateRequest.errors); +} + +// Validate response +const validateResponse = ajv.compile(InitializeResponseDataSchema); +if (!validateResponse(responseData)) { + console.error('Invalid response:', validateResponse.errors); +} +``` + +### Configuration File Schemas + +Use configuration schemas to validate Codify config files: + +```typescript +import { + ConfigFileSchema, + ProjectSchema, + ResourceSchema, + Config, + ProjectConfig, + ResourceConfig, +} from '@codifycli/schemas'; + +// Type-safe configuration +const config: Config[] = [ + { + type: 'project', + version: '1.0.0', + plugins: { + 'my-plugin': '1.0.0', + }, + }, + { + type: 'my-resource', + name: 'example', + dependsOn: [], + os: ['linux'], + }, +]; +``` + +## Available Schemas + +### Configuration Schemas + +- **ConfigFileSchema** - Top-level configuration file format +- **ProjectSchema** - Project block with version and plugin declarations +- **ResourceSchema** - Base schema for resource configurations + +### Message Schemas + +Plugin lifecycle messages: + +- **InitializeRequestDataSchema / InitializeResponseDataSchema** - Plugin startup +- **ValidateRequestDataSchema / ValidateResponseDataSchema** - Validate resources +- **PlanRequestDataSchema / PlanResponseDataSchema** - Calculate changes +- **ApplyRequestDataSchema** - Execute changes +- **ImportRequestDataSchema / ImportResponseDataSchema** - Import existing resources +- **MatchRequestDataSchema / MatchResponseDataSchema** - Find matching resources +- **GetResourceInfoRequestDataSchema / GetResourceInfoResponseDataSchema** - Query metadata + +CLI support messages: + +- **CommandRequestDataSchema / CommandResponseDataSchema** - Execute commands +- **PressKeyToContinueRequestDataSchema / PressKeyToContinueResponseDataSchema** - User interaction +- **SetVerbosityRequestDataSchema** - Adjust logging level +- **ErrorResponseDataSchema** - Error reporting +- **EmptyResponseDataSchema** - No data responses + +### IPC Message Wrappers + +- **IpcMessageSchema** - V1 message wrapper (cmd, status, data) +- **IpcMessageV2Schema** - V2 message wrapper (adds requestId) + +## TypeScript Types + +The package exports comprehensive TypeScript types and enums: + +### Enums + +- `MessageCmd` - Command identifiers (initialize, validate, plan, apply, etc.) +- `MessageStatus` - SUCCESS | ERROR +- `ResourceOperation` - CREATE | DESTROY | MODIFY | RECREATE | NOOP +- `ParameterOperation` - ADD | REMOVE | MODIFY | NOOP +- `ResourceOs` - LINUX | MACOS | WINDOWS +- `OS` - Darwin | Linux | Windows_NT +- `LinuxDistro` - Comprehensive Linux distribution list +- `SpawnStatus` - SUCCESS | ERROR + +### Interfaces + +All request/response data types are exported as TypeScript interfaces, providing full type safety when building plugins. + +## IDE Integration + +The package includes a comprehensive schema store file (`codify-schema.json`) for IDE autocomplete and validation. Configure your IDE to use this schema for `.codify` or similar configuration files. + +## Development + +### Running Tests + +```bash +npm test +``` + +Tests use Vitest and AJV to validate that all schemas compile correctly and accept/reject appropriate inputs. + +### Building + +```bash +npm run prepublishOnly +``` + +Compiles TypeScript and prepares the package for publishing. + +### Project Structure + +``` +src/ +├── messages/ # Request/response schemas for IPC messages +├── types/ # TypeScript type definitions +├── schemastore/ # IDE integration schema +├── *.json # Core configuration schemas +└── index.ts # Main exports +``` + +## Plugin Development Guide + +When building a Codify plugin, you'll implement handlers for these core messages: + +1. **Initialize** - Declare what resource types your plugin manages +2. **Validate** - Validate user configurations for your resources +3. **Plan** - Determine what changes need to be made +4. **Apply** - Execute the planned changes +5. **Import** (optional) - Discover existing resources to bring under Codify management + +Each message type has strictly validated request and response formats defined by this package. + +## Contributing + +Contributions are welcome! Please ensure: + +- All schemas have corresponding test files +- Tests pass with `npm test` +- TypeScript types are updated alongside schemas +- Changes maintain backward compatibility + +## License + +ISC + +## Links + +- [Codify CLI](https://codifycli.com) +- [npm package](https://www.npmjs.com/package/@codifycli/schemas) +- [GitHub repository](https://github.com/codifycli/schemas) \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 1daf936..f5d62ee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,15 +1,15 @@ { - "name": "codify-schemas", - "version": "1.0.77", + "name": "@codifycli/schemas", + "version": "1.0.0-beta1", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "codify-schemas", - "version": "1.0.77", + "name": "@codifycli/schemas", + "version": "1.0.0-beta1", "license": "ISC", "dependencies": { - "ajv": "^8.12.0" + "ajv": "^8.18.0" }, "devDependencies": { "@supabase/supabase-js": "^2.50.0", @@ -18,279 +18,296 @@ "dotenv": "^16.5.0", "tsx": "^4.20.3", "typescript": "^5.3.3", - "vitest": "^1.4.0" + "vitest": "^4.0.18" } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", - "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", + "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", - "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", + "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", - "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", + "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", - "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", + "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", - "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", + "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", - "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", + "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", - "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", + "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", - "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", + "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", - "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", + "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", - "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", + "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", - "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", + "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", - "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", + "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", "cpu": [ "loong64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", - "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", + "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", "cpu": [ "mips64el" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", - "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", + "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", - "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", + "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", - "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", + "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", - "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", + "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-arm64": { @@ -311,19 +328,20 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", - "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", + "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openbsd-arm64": { @@ -344,19 +362,20 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", - "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", + "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/openharmony-arm64": { @@ -377,261 +396,436 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", - "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", + "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", - "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", + "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", - "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", + "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", - "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", + "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ], "engines": { - "node": ">=12" - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.13.0.tgz", - "integrity": "sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.59.0.tgz", + "integrity": "sha512-upnNBkA6ZH2VKGcBj9Fyl9IGNPULcjXRlg0LLeaioQWueH30p6IXtJEbKAgvyv+mJaMxSm1l6xwDXYjpEMiLMg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.13.0.tgz", - "integrity": "sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.59.0.tgz", + "integrity": "sha512-hZ+Zxj3SySm4A/DylsDKZAeVg0mvi++0PYVceVyX7hemkw7OreKdCvW2oQ3T1FMZvCaQXqOTHb8qmBShoqk69Q==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.13.0.tgz", - "integrity": "sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.59.0.tgz", + "integrity": "sha512-W2Psnbh1J8ZJw0xKAd8zdNgF9HRLkdWwwdWqubSVk0pUuQkoHnv7rx4GiF9rT4t5DIZGAsConRE3AxCdJ4m8rg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.13.0.tgz", - "integrity": "sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.59.0.tgz", + "integrity": "sha512-ZW2KkwlS4lwTv7ZVsYDiARfFCnSGhzYPdiOU4IM2fDbL+QGlyAbjgSFuqNRbSthybLbIJ915UtZBtmuLrQAT/w==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.59.0.tgz", + "integrity": "sha512-EsKaJ5ytAu9jI3lonzn3BgG8iRBjV4LxZexygcQbpiU0wU0ATxhNVEpXKfUa0pS05gTcSDMKpn3Sx+QB9RlTTA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.59.0.tgz", + "integrity": "sha512-d3DuZi2KzTMjImrxoHIAODUZYoUUMsuUiY4SRRcJy6NJoZ6iIqWnJu9IScV9jXysyGMVuW+KNzZvBLOcpdl3Vg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.13.0.tgz", - "integrity": "sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.59.0.tgz", + "integrity": "sha512-t4ONHboXi/3E0rT6OZl1pKbl2Vgxf9vJfWgmUoCEVQVxhW6Cw/c8I6hbbu7DAvgp82RKiH7TpLwxnJeKv2pbsw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.59.0.tgz", + "integrity": "sha512-CikFT7aYPA2ufMD086cVORBYGHffBo4K8MQ4uPS/ZnY54GKj36i196u8U+aDVT2LX4eSMbyHtyOh7D7Zvk2VvA==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.13.0.tgz", - "integrity": "sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.59.0.tgz", + "integrity": "sha512-jYgUGk5aLd1nUb1CtQ8E+t5JhLc9x5WdBKew9ZgAXg7DBk0ZHErLHdXM24rfX+bKrFe+Xp5YuJo54I5HFjGDAA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.13.0.tgz", - "integrity": "sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.59.0.tgz", + "integrity": "sha512-peZRVEdnFWZ5Bh2KeumKG9ty7aCXzzEsHShOZEFiCQlDEepP1dpUl/SrUNXNg13UmZl+gzVDPsiCwnV1uI0RUA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.59.0.tgz", + "integrity": "sha512-gbUSW/97f7+r4gHy3Jlup8zDG190AuodsWnNiXErp9mT90iCy9NKKU0Xwx5k8VlRAIV2uU9CsMnEFg/xXaOfXg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.59.0.tgz", + "integrity": "sha512-yTRONe79E+o0FWFijasoTjtzG9EBedFXJMl888NBEDCDV9I2wGbFFfJQQe63OijbFCUZqxpHz1GzpbtSFikJ4Q==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.59.0.tgz", + "integrity": "sha512-sw1o3tfyk12k3OEpRddF68a1unZ5VCN7zoTNtSn2KndUE+ea3m3ROOKRCZxEpmT9nsGnogpFP9x6mnLTCaoLkA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.59.0.tgz", + "integrity": "sha512-+2kLtQ4xT3AiIxkzFVFXfsmlZiG5FXYW7ZyIIvGA7Bdeuh9Z0aN4hVyXS/G1E9bTP/vqszNIN/pUKCk/BTHsKA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.13.0.tgz", - "integrity": "sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.59.0.tgz", + "integrity": "sha512-NDYMpsXYJJaj+I7UdwIuHHNxXZ/b/N2hR15NyH3m2qAtb/hHPA4g4SuuvrdxetTdndfj9b1WOmy73kcPRoERUg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.59.0.tgz", + "integrity": "sha512-nLckB8WOqHIf1bhymk+oHxvM9D3tyPndZH8i8+35p/1YiVoVswPid2yLzgX7ZJP0KQvnkhM4H6QZ5m0LzbyIAg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.59.0.tgz", + "integrity": "sha512-oF87Ie3uAIvORFBpwnCvUzdeYUqi2wY6jRFWJAy1qus/udHFYIkplYRW+wo+GRUP4sKzYdmE1Y3+rY5Gc4ZO+w==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.13.0.tgz", - "integrity": "sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.59.0.tgz", + "integrity": "sha512-3AHmtQq/ppNuUspKAlvA8HtLybkDflkMuLK4DPo77DfthRb71V84/c4MlWJXixZz4uruIH4uaa07IqoAkG64fg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.13.0.tgz", - "integrity": "sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.59.0.tgz", + "integrity": "sha512-2UdiwS/9cTAx7qIUZB/fWtToJwvt0Vbo0zmnYt7ED35KPg13Q0ym1g442THLC7VyI6JfYTP4PiSOWyoMdV2/xg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.59.0.tgz", + "integrity": "sha512-M3bLRAVk6GOwFlPTIxVBSYKUaqfLrn8l0psKinkCFxl4lQvOSz8ZrKDz2gxcBwHFpci0B6rttydI4IpS4IS/jQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.59.0.tgz", + "integrity": "sha512-tt9KBJqaqp5i5HUZzoafHZX8b5Q2Fe7UjYERADll83O4fGqJ49O1FsL6LpdzVFQcpwvnyd0i+K/VSwu/o/nWlA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.13.0.tgz", - "integrity": "sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.59.0.tgz", + "integrity": "sha512-V5B6mG7OrGTwnxaNUzZTDTjDS7F75PO1ae6MJYdiMu60sq0CqN5CVeVsbhPxalupvTX8gXVSU9gq+Rx1/hvu6A==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.13.0.tgz", - "integrity": "sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.59.0.tgz", + "integrity": "sha512-UKFMHPuM9R0iBegwzKF4y0C4J9u8C6MEJgFuXTBerMk7EJ92GFVFYBfOZaSGLu6COf7FxpQNqhNS4c4icUPqxA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.59.0.tgz", + "integrity": "sha512-laBkYlSS1n2L8fSo1thDNGrCTQMmxjYY5G0WFWjFFYZkKPjsMBsgJfGf4TLxXrF6RyhI60L8TMOjBMvXiTcxeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.13.0.tgz", - "integrity": "sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.59.0.tgz", + "integrity": "sha512-2HRCml6OztYXyJXAvdDXPKcawukWY2GpR5/nxKp4iBgiO3wcoEGkAaqctIbZcNB6KlUQBIqt8VYkNSj2397EfA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@standard-schema/spec/-/spec-1.1.0.tgz", + "integrity": "sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==", + "dev": true, + "license": "MIT" }, "node_modules/@supabase/auth-js": { "version": "2.71.1", @@ -714,11 +908,30 @@ "@supabase/storage-js": "2.12.1" } }, + "node_modules/@types/chai": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-5.2.3.tgz", + "integrity": "sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/deep-eql/-/deep-eql-4.0.2.tgz", + "integrity": "sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { "version": "20.17.14", @@ -747,209 +960,99 @@ } }, "node_modules/@vitest/expect": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.4.0.tgz", - "integrity": "sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", + "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", - "chai": "^4.3.10" + "@standard-schema/spec": "^1.0.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "chai": "^6.2.1", + "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/expect/node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/@vitest/expect/node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@vitest/expect/node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@vitest/expect/node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@vitest/expect/node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/@vitest/expect/node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/@vitest/runner": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.4.0.tgz", - "integrity": "sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==", + "node_modules/@vitest/pretty-format": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", + "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "1.4.0", - "p-limit": "^5.0.0", - "pathe": "^1.1.1" + "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/runner/node_modules/p-limit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", - "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", + "node_modules/@vitest/runner": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-4.0.18.tgz", + "integrity": "sha512-rpk9y12PGa22Jg6g5M3UVVnTS7+zycIGk9ZNGN+m6tZHKQb7jrP7/77WfZy13Y/EUDd52NDsLRQhYKtv7XfPQw==", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@vitest/runner/node_modules/yocto-queue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", - "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", - "dev": true, - "engines": { - "node": ">=12.20" + "@vitest/utils": "4.0.18", + "pathe": "^2.0.3" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.4.0.tgz", - "integrity": "sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-4.0.18.tgz", + "integrity": "sha512-PCiV0rcl7jKQjbgYqjtakly6T1uwv/5BQ9SwBLekVg/EaYeQFPiXcgrC2Y7vDMA8dM1SUEAEV82kgSQIlXNMvA==", "dev": true, + "license": "MIT", "dependencies": { - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "pretty-format": "^29.7.0" + "@vitest/pretty-format": "4.0.18", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.4.0.tgz", - "integrity": "sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", + "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", "dev": true, - "dependencies": { - "tinyspy": "^2.2.0" - }, + "license": "MIT", "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.4.0.tgz", - "integrity": "sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==", + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", + "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", "dev": true, + "license": "MIT", "dependencies": { - "diff-sequences": "^29.6.3", - "estree-walker": "^3.0.3", - "loupe": "^2.3.7", - "pretty-format": "^29.7.0" + "@vitest/pretty-format": "4.0.18", + "tinyrainbow": "^3.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, - "node_modules/@vitest/utils/node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", - "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.18.0.tgz", + "integrity": "sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==", + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -973,59 +1076,24 @@ } } }, - "node_modules/cac": { - "version": "6.7.14", - "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", - "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, + "license": "MIT", "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=12" } }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/chai": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" } }, "node_modules/dotenv": { @@ -1041,235 +1109,211 @@ "url": "https://dotenvx.com" } }, + "node_modules/es-module-lexer": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz", + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==", + "dev": true, + "license": "MIT" + }, "node_modules/esbuild": { - "version": "0.19.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", - "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", + "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.12", - "@esbuild/android-arm": "0.19.12", - "@esbuild/android-arm64": "0.19.12", - "@esbuild/android-x64": "0.19.12", - "@esbuild/darwin-arm64": "0.19.12", - "@esbuild/darwin-x64": "0.19.12", - "@esbuild/freebsd-arm64": "0.19.12", - "@esbuild/freebsd-x64": "0.19.12", - "@esbuild/linux-arm": "0.19.12", - "@esbuild/linux-arm64": "0.19.12", - "@esbuild/linux-ia32": "0.19.12", - "@esbuild/linux-loong64": "0.19.12", - "@esbuild/linux-mips64el": "0.19.12", - "@esbuild/linux-ppc64": "0.19.12", - "@esbuild/linux-riscv64": "0.19.12", - "@esbuild/linux-s390x": "0.19.12", - "@esbuild/linux-x64": "0.19.12", - "@esbuild/netbsd-x64": "0.19.12", - "@esbuild/openbsd-x64": "0.19.12", - "@esbuild/sunos-x64": "0.19.12", - "@esbuild/win32-arm64": "0.19.12", - "@esbuild/win32-ia32": "0.19.12", - "@esbuild/win32-x64": "0.19.12" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/execa": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", - "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", - "dev": true, - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^8.0.1", - "human-signals": "^5.0.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^4.1.0", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": ">=16.17" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "@esbuild/aix-ppc64": "0.27.3", + "@esbuild/android-arm": "0.27.3", + "@esbuild/android-arm64": "0.27.3", + "@esbuild/android-x64": "0.27.3", + "@esbuild/darwin-arm64": "0.27.3", + "@esbuild/darwin-x64": "0.27.3", + "@esbuild/freebsd-arm64": "0.27.3", + "@esbuild/freebsd-x64": "0.27.3", + "@esbuild/linux-arm": "0.27.3", + "@esbuild/linux-arm64": "0.27.3", + "@esbuild/linux-ia32": "0.27.3", + "@esbuild/linux-loong64": "0.27.3", + "@esbuild/linux-mips64el": "0.27.3", + "@esbuild/linux-ppc64": "0.27.3", + "@esbuild/linux-riscv64": "0.27.3", + "@esbuild/linux-s390x": "0.27.3", + "@esbuild/linux-x64": "0.27.3", + "@esbuild/netbsd-arm64": "0.27.3", + "@esbuild/netbsd-x64": "0.27.3", + "@esbuild/openbsd-arm64": "0.27.3", + "@esbuild/openbsd-x64": "0.27.3", + "@esbuild/openharmony-arm64": "0.27.3", + "@esbuild/sunos-x64": "0.27.3", + "@esbuild/win32-arm64": "0.27.3", + "@esbuild/win32-ia32": "0.27.3", + "@esbuild/win32-x64": "0.27.3" + } + }, + "node_modules/esbuild/node_modules/@esbuild/netbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", + "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "cpu": [ + "arm64" + ], "dev": true, - "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ - "darwin" + "netbsd" ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=18" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", - "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", + "node_modules/esbuild/node_modules/@esbuild/openbsd-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", + "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": "*" + "node": ">=18" } }, - "node_modules/get-stream": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", - "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "node_modules/esbuild/node_modules/@esbuild/openharmony-arm64": { + "version": "0.27.3", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", + "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/get-tsconfig": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", - "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", "dev": true, "license": "MIT", "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/human-signals": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", - "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", - "dev": true, - "engines": { - "node": ">=16.17.0" + "@types/estree": "^1.0.0" } }, - "node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/expect-type": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.3.0.tgz", + "integrity": "sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==", "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.0.0" } }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", - "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, - "node_modules/local-pkg": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", - "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", + "node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", "dev": true, - "dependencies": { - "mlly": "^1.4.2", - "pkg-types": "^1.0.3" - }, + "license": "MIT", "engines": { - "node": ">=14" + "node": ">=12.0.0" }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=12" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "node_modules/get-tsconfig": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.1.tgz", + "integrity": "sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==", "dev": true, - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/mlly": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.6.1.tgz", - "integrity": "sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "dev": true, + "license": "MIT", "dependencies": { - "acorn": "^8.11.3", - "pathe": "^1.1.2", - "pkg-types": "^1.0.3", - "ufo": "^1.3.2" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -1277,6 +1321,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -1284,84 +1329,48 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/obug": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/obug/-/obug-2.1.1.tgz", + "integrity": "sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==", "dev": true, - "dependencies": { - "path-key": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT" }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", - "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "dependencies": { - "mimic-fn": "^4.0.0" - }, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/pkg-types": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", - "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", - "dev": true, - "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.5.8", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", + "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", "dev": true, "funding": [ { @@ -1377,55 +1386,16 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, - "node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, "node_modules/require-from-string": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", @@ -1445,12 +1415,13 @@ } }, "node_modules/rollup": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.13.0.tgz", - "integrity": "sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==", + "version": "4.59.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.59.0.tgz", + "integrity": "sha512-2oMpl67a3zCH9H79LeMcbDhXW/UmWG/y2zuqnF2jQq5uq9TbM9TVyXvA4+t+ne2IIkBdrLpAaRQAvo7YI/Yyeg==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.8" }, "bin": { "rollup": "dist/bin/rollup" @@ -1460,66 +1431,47 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.13.0", - "@rollup/rollup-android-arm64": "4.13.0", - "@rollup/rollup-darwin-arm64": "4.13.0", - "@rollup/rollup-darwin-x64": "4.13.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.13.0", - "@rollup/rollup-linux-arm64-gnu": "4.13.0", - "@rollup/rollup-linux-arm64-musl": "4.13.0", - "@rollup/rollup-linux-riscv64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-gnu": "4.13.0", - "@rollup/rollup-linux-x64-musl": "4.13.0", - "@rollup/rollup-win32-arm64-msvc": "4.13.0", - "@rollup/rollup-win32-ia32-msvc": "4.13.0", - "@rollup/rollup-win32-x64-msvc": "4.13.0", + "@rollup/rollup-android-arm-eabi": "4.59.0", + "@rollup/rollup-android-arm64": "4.59.0", + "@rollup/rollup-darwin-arm64": "4.59.0", + "@rollup/rollup-darwin-x64": "4.59.0", + "@rollup/rollup-freebsd-arm64": "4.59.0", + "@rollup/rollup-freebsd-x64": "4.59.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.59.0", + "@rollup/rollup-linux-arm-musleabihf": "4.59.0", + "@rollup/rollup-linux-arm64-gnu": "4.59.0", + "@rollup/rollup-linux-arm64-musl": "4.59.0", + "@rollup/rollup-linux-loong64-gnu": "4.59.0", + "@rollup/rollup-linux-loong64-musl": "4.59.0", + "@rollup/rollup-linux-ppc64-gnu": "4.59.0", + "@rollup/rollup-linux-ppc64-musl": "4.59.0", + "@rollup/rollup-linux-riscv64-gnu": "4.59.0", + "@rollup/rollup-linux-riscv64-musl": "4.59.0", + "@rollup/rollup-linux-s390x-gnu": "4.59.0", + "@rollup/rollup-linux-x64-gnu": "4.59.0", + "@rollup/rollup-linux-x64-musl": "4.59.0", + "@rollup/rollup-openbsd-x64": "4.59.0", + "@rollup/rollup-openharmony-arm64": "4.59.0", + "@rollup/rollup-win32-arm64-msvc": "4.59.0", + "@rollup/rollup-win32-ia32-msvc": "4.59.0", + "@rollup/rollup-win32-x64-gnu": "4.59.0", + "@rollup/rollup-win32-x64-msvc": "4.59.0", "fsevents": "~2.3.2" } }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", - "dev": true - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "license": "ISC" }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -1528,58 +1480,56 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/std-env": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", - "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", - "dev": true + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz", + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", + "dev": true, + "license": "MIT" }, - "node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/tinyexec": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", + "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/strip-literal": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-2.0.0.tgz", - "integrity": "sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, + "license": "MIT", "dependencies": { - "js-tokens": "^8.0.2" + "fdir": "^6.5.0", + "picomatch": "^4.0.3" }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, - "node_modules/tinybench": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", - "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", - "dev": true - }, - "node_modules/tinypool": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", - "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", - "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "node_modules/tinyrainbow": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", + "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -2044,15 +1994,6 @@ "@esbuild/win32-x64": "0.25.9" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/typescript": { "version": "5.7.3", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.3.tgz", @@ -2066,237 +2007,192 @@ "node": ">=14.17" } }, - "node_modules/ufo": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.1.tgz", - "integrity": "sha512-HGyF79+/qZ4soRvM+nHERR2pJ3VXDZ/8sL1uLahdgEDf580NkgiWOxLk33FetExqOWp352JZRsgXbG/4MaGOSg==", - "dev": true - }, "node_modules/undici-types": { "version": "6.19.8", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", "dev": true }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/vite": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.1.6.tgz", - "integrity": "sha512-yYIAZs9nVfRJ/AiOLCA91zzhjsHUgMjB+EigzFb6W2XTLO8JixBCKCjvhKZaye+NKYHCrkv3Oh50dH9EdLU2RA==", + "node_modules/vitest": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-4.0.18.tgz", + "integrity": "sha512-hOQuK7h0FGKgBAas7v0mSAsnvrIgAvWmRFjmzpJ7SwFHH3g1k2u37JtYwOwmEKhK6ZO3v9ggDBBm0La1LCK4uQ==", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.35", - "rollup": "^4.2.0" + "@vitest/expect": "4.0.18", + "@vitest/mocker": "4.0.18", + "@vitest/pretty-format": "4.0.18", + "@vitest/runner": "4.0.18", + "@vitest/snapshot": "4.0.18", + "@vitest/spy": "4.0.18", + "@vitest/utils": "4.0.18", + "es-module-lexer": "^1.7.0", + "expect-type": "^1.2.2", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^3.10.0", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.0.3", + "vite": "^6.0.0 || ^7.0.0", + "why-is-node-running": "^2.3.0" }, "bin": { - "vite": "bin/vite.js" + "vitest": "vitest.mjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.0.18", + "@vitest/browser-preview": "4.0.18", + "@vitest/browser-webdriverio": "4.0.18", + "@vitest/ui": "4.0.18", + "happy-dom": "*", + "jsdom": "*" }, "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, "@types/node": { "optional": true }, - "less": { + "@vitest/browser-playwright": { "optional": true }, - "lightningcss": { + "@vitest/browser-preview": { "optional": true }, - "sass": { + "@vitest/browser-webdriverio": { "optional": true }, - "stylus": { + "@vitest/ui": { "optional": true }, - "sugarss": { + "happy-dom": { "optional": true }, - "terser": { + "jsdom": { "optional": true } } }, - "node_modules/vite-node": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.4.0.tgz", - "integrity": "sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==", + "node_modules/vitest/node_modules/@vitest/mocker": { + "version": "4.0.18", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-4.0.18.tgz", + "integrity": "sha512-HhVd0MDnzzsgevnOWCBj5Otnzobjy5wLBe4EdeeFGv8luMsGcYqDuFRMcttKWZA5vVO8RFjexVovXvAM4JoJDQ==", "dev": true, + "license": "MIT", "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" - }, - "bin": { - "vite-node": "vite-node.mjs" - }, - "engines": { - "node": "^18.0.0 || >=20.0.0" + "@vitest/spy": "4.0.18", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" }, "funding": { "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0-0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } } }, - "node_modules/vitest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.4.0.tgz", - "integrity": "sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==", + "node_modules/vitest/node_modules/vite": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", + "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/expect": "1.4.0", - "@vitest/runner": "1.4.0", - "@vitest/snapshot": "1.4.0", - "@vitest/spy": "1.4.0", - "@vitest/utils": "1.4.0", - "acorn-walk": "^8.3.2", - "chai": "^4.3.10", - "debug": "^4.3.4", - "execa": "^8.0.1", - "local-pkg": "^0.5.0", - "magic-string": "^0.30.5", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.5.0", - "strip-literal": "^2.0.0", - "tinybench": "^2.5.1", - "tinypool": "^0.8.2", - "vite": "^5.0.0", - "vite-node": "1.4.0", - "why-is-node-running": "^2.2.2" + "esbuild": "^0.27.0", + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { - "vitest": "vitest.mjs" + "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" }, "peerDependencies": { - "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "1.4.0", - "@vitest/ui": "1.4.0", - "happy-dom": "*", - "jsdom": "*" + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { - "@edge-runtime/vm": { + "@types/node": { "optional": true }, - "@types/node": { + "jiti": { "optional": true }, - "@vitest/browser": { + "less": { "optional": true }, - "@vitest/ui": { + "lightningcss": { "optional": true }, - "happy-dom": { + "sass": { "optional": true }, - "jsdom": { + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { "optional": true } } }, - "node_modules/vitest/node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/vitest/node_modules/chai": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", - "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/vitest/node_modules/check-error": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", - "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/vitest/node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/vitest/node_modules/loupe": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", - "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/vitest/node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", @@ -2315,26 +2211,12 @@ "webidl-conversions": "^3.0.0" } }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/why-is-node-running": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", - "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", "dev": true, + "license": "MIT", "dependencies": { "siginfo": "^2.0.0", "stackback": "0.0.2" diff --git a/package.json b/package.json index 0da9e2b..75aa5b6 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "codify-schemas", - "version": "1.0.86-beta1", - "description": "", + "name": "@codifycli/schemas", + "version": "1.0.0", + "description": "JSON Schemas and types that govern the message format and Codify config formats for Codify", "type": "module", "main": "dist/index.js", "typings": "dist/index.d.ts", @@ -14,11 +14,11 @@ "author": "", "license": "ISC", "dependencies": { - "ajv": "^8.12.0" + "ajv": "^8.18.0" }, "devDependencies": { "@types/node": "20.17.14", - "vitest": "^1.4.0", + "vitest": "^4.0.18", "typescript": "^5.3.3", "ajv-formats": "^3.0.1", "@supabase/supabase-js": "^2.50.0", diff --git a/scripts/upload-resources.ts b/scripts/upload-resources.ts index dc0adcc..419b2e3 100644 --- a/scripts/upload-resources.ts +++ b/scripts/upload-resources.ts @@ -36,7 +36,8 @@ async function main() { schema: JSON.stringify(resource), documentation_url: resource.$comment, }, {onConflict: ['type', 'plugin_id']}) - .select(); + .select() + .throwOnError(); const { id: resourceId } = resourceRow.data![0]; @@ -49,7 +50,9 @@ async function main() { schema: property, })) - await client.from('registry_resource_parameters').upsert(parameters, {onConflict: ['name', 'resource_id']}); + await client.from('registry_resource_parameters') + .upsert(parameters, {onConflict: ['name', 'resource_id']}) + .throwOnError(); } return new Response('Upload complete'); diff --git a/src/index.ts b/src/index.ts index f3a67d4..894fb60 100644 --- a/src/index.ts +++ b/src/index.ts @@ -4,7 +4,6 @@ import ResourceSchema from './resource-schema.json' with {type: 'json'} import IpcMessageSchema from './ipc-message-schema.json' with {type: 'json'} import IpcMessageV2Schema from './ipc-message-schema-v2.json' with {type: 'json'} import ApplyRequestDataSchema from './messages/apply-request-data-schema.json' with {type: 'json'} -import ApplyResponseDataSchema from './messages/apply-response-data-schema.json' with {type: 'json'} import ErrorResponseDataSchema from './messages/error-response-data-schema.json' with {type: 'json'} import GetResourceInfoRequestDataSchema from './messages/get-resource-info-request-data-schema.json' with {type: 'json'} import GetResourceInfoResponseDataSchema from './messages/get-resource-info-response-data-schema.json' with {type: 'json'} @@ -22,6 +21,8 @@ import CommandRequestDataSchema from './messages/command-request-data-schema.jso import CommandRequestResponseDataSchema from './messages/command-response-data-schema.json' with {type: 'json'}; import PressKeyToContinueRequestDataSchema from './messages/press-key-to-continue-request-data-schema.json' with {type: 'json'}; import PressKeyToContinueResponseDataSchema from './messages/press-key-to-continue-response-data-schema.json' with {type: 'json'}; +import SetVerbosityRequestDataSchema from './messages/set-verbosity-request-data-schema.json' with {type: 'json'}; +import EmptyResponseDataSchema from './messages/empty-response-data-schema.json' with {type: 'json'}; export { ConfigFileSchema, @@ -30,7 +31,6 @@ export { IpcMessageSchema, IpcMessageV2Schema, ApplyRequestDataSchema, - ApplyResponseDataSchema, ErrorResponseDataSchema, GetResourceInfoRequestDataSchema, GetResourceInfoResponseDataSchema, @@ -48,6 +48,8 @@ export { CommandRequestResponseDataSchema, PressKeyToContinueRequestDataSchema, PressKeyToContinueResponseDataSchema, + SetVerbosityRequestDataSchema, + EmptyResponseDataSchema, } export * from './types/index.js'; diff --git a/src/messages/apply-response-data-schema.json b/src/messages/apply-response-data-schema.json deleted file mode 100644 index f6c114f..0000000 --- a/src/messages/apply-response-data-schema.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://www.codifycli.com/apply-response-data-schema.json", - "title": "Apply Response Schema Data", - "type": "null" -} diff --git a/src/messages/command-request-data-schema.json b/src/messages/command-request-data-schema.json index b0455f9..de464c3 100644 --- a/src/messages/command-request-data-schema.json +++ b/src/messages/command-request-data-schema.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema", - "$id": "https://www.codifycli.com/sudo-request.json", + "$id": "https://www.codifycli.com/command-request.json", "title": "Command request", "description": "Request the core CLI to perform a command. This is required for sudo and interactive", "type": "object", @@ -9,10 +9,6 @@ "type": "string", "description": "The command that is requesting sudo" }, - "type": { - "enum": ["sudo", "interactive"], - "description": "The request type. Right now only sudo and interactive are supported" - }, "options": { "type": "object", "description": "The options for codifySpawn that is needed to run the command", @@ -24,11 +20,23 @@ "argv0": { "type": "string", "description": "Arguments to pass in" + }, + "requiresRoot": { + "type": "boolean", + "description": "Whether or not this command needs to be run in root" + }, + "interactive": { + "type": "boolean", + "description": "Whether or not this command needs to be run in interactive mode" + }, + "stdin": { + "type": "boolean", + "description": "Whether or not this command requires stdin" } }, "additionalProperties": true } }, - "required": ["command", "type"], + "required": ["command"], "additionalProperties": false } diff --git a/src/messages/command-request-data-schema.test.ts b/src/messages/command-request-data-schema.test.ts index dfa8466..5f82590 100644 --- a/src/messages/command-request-data-schema.test.ts +++ b/src/messages/command-request-data-schema.test.ts @@ -15,7 +15,6 @@ describe('Get resources response data schema', () => { const validate = ajv.compile(schema); expect(validate({ command: 'abc def', - type: 'sudo' })).to.be.true; }) @@ -23,9 +22,9 @@ describe('Get resources response data schema', () => { const validate = ajv.compile(schema); expect(validate({ command: 'abc def', - type: 'interactive', options: { cwd: '.', + interactive: true, } })).to.be.true; }) @@ -34,7 +33,6 @@ describe('Get resources response data schema', () => { const validate = ajv.compile(schema); expect(validate({ command: 'abc def', - type: 'sudo', options: { cwd: '.', requiresRoot: true, @@ -47,9 +45,9 @@ describe('Get resources response data schema', () => { const validate = ajv.compile(schema); expect(validate({ command: 'abc def', - type: 'interactive', options: { cwd: '.', + requiresRoot: true, }, additional: {} })).to.be.false; diff --git a/src/messages/commands.ts b/src/messages/commands.ts index 8c76089..23d7271 100644 --- a/src/messages/commands.ts +++ b/src/messages/commands.ts @@ -3,7 +3,7 @@ export enum MessageCmd { VALIDATE = 'validate', PLAN = 'plan', APPLY = 'apply', - SUDO_REQUEST = 'sudo_request', + COMMAND_REQUEST = 'command_request', PRESS_KEY_TO_CONTINUE_REQUEST = 'press_key_to_continue_request', CODIFY_CREDENTIALS_REQUEST = 'codify_credentials_request' } diff --git a/src/messages/empty-response-data-schema.json b/src/messages/empty-response-data-schema.json new file mode 100644 index 0000000..4d9f14a --- /dev/null +++ b/src/messages/empty-response-data-schema.json @@ -0,0 +1,7 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://www.codifycli.com/empty-response-data-schema.json", + "title": "Empty Response Schema Data", + "description": "An empty response", + "type": "null" +} diff --git a/src/messages/apply-response-data-schema.test.ts b/src/messages/empty-response-data-schema.test.ts similarity index 50% rename from src/messages/apply-response-data-schema.test.ts rename to src/messages/empty-response-data-schema.test.ts index 5035027..10bd057 100644 --- a/src/messages/apply-response-data-schema.test.ts +++ b/src/messages/empty-response-data-schema.test.ts @@ -1,20 +1,17 @@ -import schema from './apply-response-data-schema.json'; +import schema from './empty-response-data-schema.json'; import {describe, expect, it} from 'vitest' -import addFormats from 'ajv-formats'; -import Ajv from 'ajv'; +import Ajv from 'ajv' const ajv = new Ajv({ strict: true, }) -addFormats.default(ajv); - -describe('Apply request data schema', () => { +describe('Empty Response Data Schema', () => { it('compiles', () => { ajv.compile(schema); }) - it("validates an empty config", () => { + it("Only empty object", () => { const validate = ajv.compile(schema); expect(validate(null)).to.be.true; }) diff --git a/src/messages/get-resource-info-response-data-schema.json b/src/messages/get-resource-info-response-data-schema.json index 14fc192..f7d75dd 100644 --- a/src/messages/get-resource-info-response-data-schema.json +++ b/src/messages/get-resource-info-response-data-schema.json @@ -28,6 +28,13 @@ "enum": ["Darwin", "Linux", "Windows_NT"] } }, + "linuxDistros": { + "type": "array", + "items": { + "type": "string", + "description": "The Linux distros the resource is compatible with" + } + }, "import": { "type": "object", "properties": { diff --git a/src/messages/get-resource-info-response-data-schema.test.ts b/src/messages/get-resource-info-response-data-schema.test.ts index 36af05a..7356dd4 100644 --- a/src/messages/get-resource-info-response-data-schema.test.ts +++ b/src/messages/get-resource-info-response-data-schema.test.ts @@ -1,7 +1,7 @@ import schema from './get-resource-info-response-data-schema.json'; import { describe, it, expect } from 'vitest' import Ajv from 'ajv' -import {GetResourceInfoResponseData} from "../types.js"; +import {GetResourceInfoResponseData} from "../types/index.js"; const ajv = new Ajv({ strict: true, diff --git a/src/messages/initialize-response-data-schema.json b/src/messages/initialize-response-data-schema.json index 20dda5e..04d520b 100644 --- a/src/messages/initialize-response-data-schema.json +++ b/src/messages/initialize-response-data-schema.json @@ -30,7 +30,14 @@ "items": { "enum": ["Darwin", "Linux", "Windows_NT"] } + }, + "linuxDistros": { + "type": "array", + "items": { + "type": "string" + } } + }, "required": [ "type", diff --git a/src/messages/set-verbosity-request-data-schema.json b/src/messages/set-verbosity-request-data-schema.json new file mode 100644 index 0000000..b880f07 --- /dev/null +++ b/src/messages/set-verbosity-request-data-schema.json @@ -0,0 +1,14 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "https://www.codifycli.com/set-verbosity-request.json", + "title": "Set Verbosity Request", + "description": "Request the plugin to set its verbosity level", + "type": "object", + "properties": { + "verbosityLevel": { + "type": "number", + "description": "The verbosity level to set for the plugin" + } + }, + "additionalProperties": false +} diff --git a/src/messages/set-verbosity-request-data-schema.test.ts b/src/messages/set-verbosity-request-data-schema.test.ts new file mode 100644 index 0000000..76f017f --- /dev/null +++ b/src/messages/set-verbosity-request-data-schema.test.ts @@ -0,0 +1,20 @@ +import schema from './set-verbosity-request-data-schema.json'; +import {describe, expect, it} from 'vitest' +import Ajv from 'ajv' + +const ajv = new Ajv({ + strict: true, +}) + +describe('Set Verbosity Request Data Schema', () => { + it('compiles', () => { + ajv.compile(schema); + }) + + it("Sets a verbosity level", () => { + const validate = ajv.compile(schema); + expect(validate({ + verbosityLevel: 2, + })).to.be.true; + }) +}) diff --git a/src/resource-schema.json b/src/resource-schema.json index 6c0b08f..a456fa5 100644 --- a/src/resource-schema.json +++ b/src/resource-schema.json @@ -9,6 +9,13 @@ "type": "string", "pattern": "^[a-zA-Z][\\w-]+$" }, + "os": { + "type": "array", + "items": { + "enum": ["linux", "macOS", "windows"] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", diff --git a/src/resource-schema.test.ts b/src/resource-schema.test.ts index 34d38d1..7b018c0 100644 --- a/src/resource-schema.test.ts +++ b/src/resource-schema.test.ts @@ -36,4 +36,12 @@ describe("Resource schema tests", () => { expect(validate({ type: "type", dependsOn: "item1" })).to.be.false; expect(validate({ type: "type", dependsOn: [6] })).to.be.false; }) + + it("os supports linux, macOS, and windows", () => { + const validate = ajv.compile(schema); + expect(validate({ type: "type", os: ["macOS", "windows", "linux"] })).to.be.true; + expect(validate({ type: "type", os: ["item1", "item1"] })).to.be.false; + expect(validate({ type: "type", os: ["macOS"] })).to.be.true; + expect(validate({ type: "type", os: ["macOS", "macOS"] })).to.be.false; + }) }); diff --git a/src/schemastore/codify-schema.json b/src/schemastore/codify-schema.json index d3f635c..a89e1a7 100644 --- a/src/schemastore/codify-schema.json +++ b/src/schemastore/codify-schema.json @@ -47,6 +47,17 @@ "type": "string", "description": "The global username to set for git" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -72,6 +83,17 @@ { "type": "object", "properties": { + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -118,6 +140,17 @@ "default": false, "description": "Only plan and manage explicitly declared paths found in shell startup scripts. This value is forced to true for stateful mode" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -154,6 +187,17 @@ "type": "string", "description": "The alias value" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -177,6 +221,75 @@ ], "additionalProperties": false }, + { + "type": "object", + "properties": { + "aliases": { + "description": "aliases resource. Can be used to manage aliases", + "type": "array", + "items": { + "type": "object", + "properties": { + "alias": { + "type": "string", + "title": "aliases", + "description": "aliases resource. Can be used to manage aliases" + }, + "value": { + "type": "string", + "title": "aliases", + "description": "aliases resource. Can be used to manage aliases" + } + }, + "required": [ + "alias", + "value" + ], + "additionalProperties": false, + "title": "aliases", + "description": "aliases resource. Can be used to manage aliases" + }, + "title": "aliases" + }, + "declarationsOnly": { + "type": "boolean", + "title": "aliases", + "description": "aliases resource. Can be used to manage aliases" + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "aliases", + "type": "string" + } + }, + "additionalProperties": false, + "description": "aliases resource. Can be used to manage aliases", + "required": [ + "type" + ] + }, { "$comment": "https://docs.codifycli.com/core-resources/homebrew/", "description": "Install homebrew and manages formulae, casks and taps.", @@ -211,6 +324,17 @@ "type": "boolean", "description": "Only consider packages that the user has explicitly specified in the plan and ignore any dependent packages" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -249,6 +373,17 @@ "type": "string", "description": "The global Python version set by pyenv." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -276,6 +411,17 @@ "description": "Installs git-lfs. This resource will automatically activate git-lfs as well.", "type": "object", "properties": { + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -303,6 +449,17 @@ "type": "object", "description": "Installs aws-cli.", "properties": { + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -363,6 +520,17 @@ "type": "string", "description": "The metadata service num attempts" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -398,6 +566,17 @@ "type": "string", "description": "The specific version of Terraform to install. Defaults to latest." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -436,6 +615,17 @@ "description": "The global Node version set by nvm.", "type": "string" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -474,6 +664,17 @@ "description": "Set the global Java version using Jenv.", "type": "string" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -501,6 +702,17 @@ "type": "object", "description": "Installs pgcli.", "properties": { + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -533,6 +745,17 @@ "description": "The directory to install VSCode into. Defaults to /Applications.", "default": "/Applications" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -564,6 +787,13 @@ "type": "string", "description": "Remote repository to clone repo from." }, + "repositories": { + "type": "array", + "description": "Remote repositories to clone. This is a convenience property for cloning multiple repositories at once.", + "items": { + "type": "string" + } + }, "parentDirectory": { "type": "string", "description": "Parent directory to clone into. The folder name will use default git semantics which extracts the last part of the clone url. Only one of parentDirectory or directory can be specified" @@ -576,6 +806,17 @@ "type": "boolean", "description": "Automatically verifies the ssh connection for ssh git clones. Defaults to true." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -599,18 +840,28 @@ ] }, { - "$comment": "https://docs.codifycli.com/core-resources/android-studio/", "type": "object", - "description": "Install Android Studios.", "properties": { "version": { + "description": "android-studio resource. Can be used to manage android-studio", "type": "string", - "description": "Android studios version. Visit: https://developer.android.com/studio/releases for version info" + "title": "android-studio" }, "directory": { + "description": "android-studio resource. Can be used to manage android-studio", "type": "string", - "description": "The directory to install Android Studios into. Defaults to /Applications", - "default": "/Applications" + "title": "android-studio" + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", @@ -630,21 +881,34 @@ } }, "additionalProperties": false, + "description": "android-studio resource. Can be used to manage android-studio", "required": [ "type" ] }, { - "$comment": "https://docs.codifycli.com/core-resources/asdf/asdf/", "type": "object", - "description": "Installs asdf and manages asdf plugins. Use 'asdf-install' or 'asdf-plugin' to install the actual tool. Use 'asdf-global' or 'asdf-local' to activate the tool in the shell.", "properties": { "plugins": { + "description": "asdf resource. Can be used to manage asdf", "type": "array", - "description": "Asdf plugins to install. See: https://github.com/asdf-community for a full list", "items": { - "type": "string" - } + "type": "string", + "title": "asdf", + "description": "asdf resource. Can be used to manage asdf" + }, + "title": "asdf" + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", @@ -664,66 +928,45 @@ } }, "additionalProperties": false, + "description": "asdf resource. Can be used to manage asdf", "required": [ "type" ] }, { - "$comment": "https://docs.codifycli.com/core-resources/asdf/asdf-plugin/", - "description": "Installs a plugin and manages specific tool versions.", "type": "object", "properties": { "plugin": { + "description": "asdf-plugin resource. Can be used to manage asdf-plugin", "type": "string", - "description": "Asdf plugin name" + "title": "asdf-plugin" }, "versions": { + "description": "asdf-plugin resource. Can be used to manage asdf-plugin", "type": "array", - "description": "A list of versions to install", "items": { - "type": "string" - } + "type": "string", + "title": "asdf-plugin", + "description": "asdf-plugin resource. Can be used to manage asdf-plugin" + }, + "title": "asdf-plugin" }, "gitUrl": { + "description": "asdf-plugin resource. Can be used to manage asdf-plugin", "type": "string", - "description": "The gitUrl of the plugin" - }, - "name": { - "description": "Optional name. Useful for specifying multiple resources of the same type", - "type": "string", - "pattern": "^[\\w-]+$" + "title": "asdf-plugin" }, - "dependsOn": { + "os": { "type": "array", "items": { - "type": "string" + "enum": [ + "linux", + "macOS", + "windows" + ] }, "uniqueItems": true }, - "type": { - "const": "asdf-plugin", - "type": "string" - } - }, - "required": [ - "plugin", - "type" - ], - "additionalProperties": false - }, - { - "$comment": "https://docs.codifycli.com/core-resources/asdf/asdf-global/", - "type": "object", - "description": "Manage the asdf global version for a tool. An asdf-global or asdf-local resource must be specified before a tool installed with asdf is active in the shell.", - "properties": { - "plugin": { - "type": "string", - "description": "Asdf plugin name" - }, - "version": { - "type": "string", - "description": "A version to install" - }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -737,85 +980,51 @@ "uniqueItems": true }, "type": { - "const": "asdf-global", + "const": "asdf-plugin", "type": "string" } }, "required": [ "plugin", - "version", "type" ], - "additionalProperties": false + "additionalProperties": false, + "description": "asdf-plugin resource. Can be used to manage asdf-plugin" }, { - "$comment": "https://docs.codifycli.com/core-resources/asdf/asdf-local/", - "description": "Manage the asdf local version for a tool. An asdf-global or asdf-local resource must be specified before a tool installed with asdf is active in the shell.", "type": "object", "properties": { "plugin": { + "description": "asdf-install resource. Can be used to manage asdf-install", "type": "string", - "description": "Asdf plugin name" - }, - "version": { - "type": "string", - "description": "A version to install" - }, - "directory": { - "type": "string", - "description": "A local install of the version. Provide the location to install the version. For the current directory use '.'" + "title": "asdf-install" }, - "directories": { + "versions": { + "description": "asdf-install resource. Can be used to manage asdf-install", "type": "array", - "description": "An array of install locations for the specified version. For the current directory use '.", "items": { - "type": "string" - } + "type": "string", + "title": "asdf-install", + "description": "asdf-install resource. Can be used to manage asdf-install" + }, + "title": "asdf-install" }, - "name": { - "description": "Optional name. Useful for specifying multiple resources of the same type", + "directory": { + "description": "asdf-install resource. Can be used to manage asdf-install", "type": "string", - "pattern": "^[\\w-]+$" + "title": "asdf-install" }, - "dependsOn": { + "os": { "type": "array", "items": { - "type": "string" + "enum": [ + "linux", + "macOS", + "windows" + ] }, "uniqueItems": true }, - "type": { - "const": "asdf-local", - "type": "string" - } - }, - "required": [ - "plugin", - "version", - "type" - ], - "additionalProperties": false - }, - { - "$comment": "https://docs.codifycli.com/core-resources/asdf/asdf-install/", - "type": "object", - "description": "Install a .tools-version file or directly install an asdf plugin + tool version.", - "properties": { - "plugin": { - "type": "string", - "description": "Asdf plugin name" - }, - "versions": { - "type": "array", - "description": "A list of versions to install", - "items": { - "type": "string" - } - }, - "directory": { - "type": "string", - "description": "The directory to run the install command" - }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -834,6 +1043,7 @@ } }, "additionalProperties": false, + "description": "asdf-install resource. Can be used to manage asdf-install", "required": [ "type" ] @@ -874,6 +1084,17 @@ "type": "string", "description": "The folder to generate the ssh key in. Defaults to `$HOME/.ssh`" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -960,6 +1181,17 @@ } } }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -996,6 +1228,17 @@ "type": "boolean", "description": "Corresponds to the --apple-use-keychain parameter. Controls whether the key should be loaded into the apple keychain. Only keys with a passphrase can be loaded" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1036,6 +1279,17 @@ "type": "string", "description": "The directory that the action should be ran in." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1060,24 +1314,36 @@ "additionalProperties": false }, { - "$comment": "https://docs.codifycli.com/core-resources/files/file/", - "description": "Manages a file.", "type": "object", "properties": { "path": { + "description": "file resource. Can be used to manage file", "type": "string", - "description": "The location of the file." + "title": "file" }, "contents": { + "description": "file resource. Can be used to manage file", "type": "string", - "description": "The contents of the file." + "title": "file" }, "onlyCreate": { + "description": "file resource. Can be used to manage file", "type": "boolean", - "description": "Forces the resource to only create the file if it doesn't exist but don't detect any content changes." + "title": "file" }, - "name": { - "description": "Optional name. Useful for specifying multiple resources of the same type", + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", "pattern": "^[\\w-]+$" }, @@ -1098,7 +1364,8 @@ "contents", "type" ], - "additionalProperties": false + "additionalProperties": false, + "description": "file resource. Can be used to manage file" }, { "$comment": "https://docs.codifycli.com/core-resources/files/remote-file/", @@ -1121,6 +1388,17 @@ "type": "boolean", "description": "Forces the resource to only create the file if it doesn't exist but don't detect any content changes. Also skips uploading the file to Codify cloud on refresh and import." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1150,6 +1428,17 @@ "type": "object", "description": "Install and manage local packages with virtualenv", "properties": { + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1205,6 +1494,17 @@ "type": "boolean", "description": "If an requirements.txt is available in the cwd, automatically install it when a virtual env is first created." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1241,6 +1541,17 @@ "type": "string", "description": "Set the global node version. Corresponds to pnpm env --global use" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1266,6 +1577,17 @@ { "type": "object", "properties": { + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1336,6 +1658,17 @@ "type": "boolean", "description": "If an requirements.txt is available in the cwd, automatically install it when a virtual env is first created." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1400,6 +1733,17 @@ "type": "string" } }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1443,6 +1787,17 @@ "type": "string", "description": "The working directory to run commands from. If cwd is supplied, the other parameters can be specified as relative to cwd." }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1496,6 +1851,17 @@ ] } }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1551,6 +1917,17 @@ ] } }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1573,6 +1950,58 @@ "type" ] }, + { + "$comment": "https://docs.codifycli.com/core-resources/javascript/npm-login/", + "description": "Manage npm login/authentication in ~/.npmrc, including scoped registry mapping and tokens.", + "type": "object", + "properties": { + "authToken": { + "type": "string", + "description": "The npm auth token used for authenticating with the registry. If not provided, then web login is assumed" + }, + "scope": { + "type": "string", + "description": "Optional npm scope (e.g. @myorg) to bind to a specific registry.", + "pattern": "^@.+\\.?" + }, + "registry": { + "type": "string", + "description": "Registry URL to use for authentication and optional scope mapping." + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "npm-login", + "type": "string" + } + }, + "required": [ + "authToken", + "type" + ], + "additionalProperties": false + }, { "$comment": "https://docs.codifycli.com/core-resources/docker/", "type": "object", @@ -1586,6 +2015,17 @@ "type": "boolean", "description": "Use the current user to install docker. Defaults to true" }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, "name": { "description": "Optional name. Useful for specifying multiple resources of the same type", "type": "string", @@ -1607,6 +2047,413 @@ "required": [ "type" ] + }, + { + "$comment": "https://docs.codifycli.com/core-resources/apt/", + "description": "Manage apt packages on Debian-based systems.", + "type": "object", + "properties": { + "install": { + "type": "array", + "description": "Installs packages using apt.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + ] + } + }, + "update": { + "type": "boolean", + "description": "Whether to run apt-get update before installing packages. Defaults to true." + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "apt", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + }, + { + "$comment": "https://docs.codifycli.com/core-resources/yum/", + "description": "Manage yum packages on Red Hat-based systems.", + "type": "object", + "properties": { + "install": { + "type": "array", + "description": "Installs packages using yum.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + ] + } + }, + "update": { + "type": "boolean", + "description": "Whether to run yum check-update before installing packages. Defaults to true." + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "yum", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + }, + { + "$comment": "https://docs.codifycli.com/core-resources/dnf/", + "description": "Manage dnf packages on modern Red Hat-based systems.", + "type": "object", + "properties": { + "install": { + "type": "array", + "description": "Installs packages using dnf.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "version": { + "type": "string" + } + }, + "required": [ + "name" + ] + } + ] + } + }, + "update": { + "type": "boolean", + "description": "Whether to run dnf check-update before installing packages. Defaults to true." + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "dnf", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + }, + { + "$comment": "https://docs.codifycli.com/core-resources/snap/", + "description": "Manage snap packages on Linux systems.", + "type": "object", + "properties": { + "install": { + "type": "array", + "description": "Installs packages using snap.", + "items": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "channel": { + "type": "string", + "description": "The channel to install from (e.g., stable, edge, beta, candidate)" + }, + "classic": { + "type": "boolean", + "description": "Install the snap in classic mode (with full system access)" + } + }, + "required": [ + "name" + ] + } + ] + } + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "snap", + "type": "string" + } + }, + "additionalProperties": false, + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "tartHome": { + "description": "tart resource. Can be used to manage tart", + "type": "string", + "title": "tart" + }, + "clone": { + "description": "tart resource. Can be used to manage tart", + "type": "array", + "items": { + "type": "object", + "properties": { + "sourceName": { + "description": "tart resource. Can be used to manage tart", + "type": "string", + "title": "tart" + }, + "name": { + "description": "tart resource. Can be used to manage tart", + "type": "string", + "title": "tart" + } + }, + "required": [ + "sourceName", + "name" + ], + "additionalProperties": false, + "title": "tart", + "description": "tart resource. Can be used to manage tart" + }, + "title": "tart" + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "tart", + "type": "string" + } + }, + "additionalProperties": false, + "description": "tart resource. Can be used to manage tart", + "required": [ + "type" + ] + }, + { + "type": "object", + "properties": { + "sourceName": { + "description": "tart-vm resource. Can be used to manage tart-vm", + "type": "string", + "title": "tart-vm" + }, + "localName": { + "description": "tart-vm resource. Can be used to manage tart-vm", + "type": "string", + "title": "tart-vm" + }, + "memory": { + "description": "tart-vm resource. Can be used to manage tart-vm", + "type": "number", + "title": "tart-vm" + }, + "cpu": { + "description": "tart-vm resource. Can be used to manage tart-vm", + "type": "number", + "title": "tart-vm" + }, + "display": { + "description": "tart-vm resource. Can be used to manage tart-vm", + "type": "string", + "title": "tart-vm" + }, + "diskSize": { + "description": "tart-vm resource. Can be used to manage tart-vm", + "type": "number", + "title": "tart-vm" + }, + "os": { + "type": "array", + "items": { + "enum": [ + "linux", + "macOS", + "windows" + ] + }, + "uniqueItems": true + }, + "name": { + "description": "Optional name. Useful for specifying multiple resources of the same type", + "type": "string", + "pattern": "^[\\w-]+$" + }, + "dependsOn": { + "type": "array", + "items": { + "type": "string" + }, + "uniqueItems": true + }, + "type": { + "const": "tart-vm", + "type": "string" + } + }, + "required": [ + "sourceName", + "localName", + "type" + ], + "additionalProperties": false, + "description": "tart-vm resource. Can be used to manage tart-vm" } ] } diff --git a/src/types/index.ts b/src/types/index.ts index 5668c4b..b903e49 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,5 +1,5 @@ -import { SpawnOptions } from "node:child_process"; -import { ErrorObject } from "ajv"; +import type {SpawnOptions} from "node:child_process"; +import type {ErrorObject} from "ajv"; export interface StringIndexedObject { [x: string]: unknown; @@ -15,9 +15,16 @@ export interface ProjectConfig extends Config { description?: string; } +export enum ResourceOs { + LINUX = 'linux', + MACOS = 'macOS', + WINDOWS = 'windows', +} + export interface ResourceConfig extends Config { name?: string; dependsOn?: string[]; + os?: Array; } export enum MessageStatus { @@ -114,6 +121,7 @@ export interface GetResourceInfoResponseData { requiredParameters: string[] | null; }, operatingSystems?: OS[]; + linuxDistros?: LinuxDistro[]; importAndDestroy?: { requiredParameters: string[] | null; preventImport?: boolean; @@ -172,6 +180,7 @@ export interface ResourceDefinition { type: string; dependencies: string[]; operatingSystems?: OS[]; + linuxDistros?: LinuxDistro[]; sensitiveParameters?: string[]; } @@ -183,16 +192,13 @@ export interface InitializeResponseData { resourceDefinitions: Array; } -export enum CommandRequestType { - SUDO = 'sudo', - INTERACTIVE = 'interactive' -} - export interface CommandRequestData { command: string; - type: CommandRequestType, options: { cwd?: string; + interactive?: boolean; + requiresRoot?: boolean; + stdin?: boolean; } & Omit } @@ -208,6 +214,12 @@ export interface PressKeyToContinueRequestData { export interface PressKeyToContinueResponseData {} +export interface SetVerbosityRequestData { + verbosityLevel: number; +} + +export interface EmptyResponseData {} + export enum SpawnStatus { SUCCESS = 'success', ERROR = 'error', @@ -218,3 +230,25 @@ export enum OS { Linux = 'Linux', Windows = 'Windows_NT', } + +export enum LinuxDistro { + DEBIAN_BASED = 'debian-based', + RPM_BASED = 'rpm-based', + ARCH = 'arch', + CENTOS = 'centos', + DEBIAN = 'debian', + FEDORA = 'fedora', + RHEL = 'rhel', + UBUNTU = 'ubuntu', + ALPINE = 'alpine', + AMAZON_LINUX = 'amzn', + OPENSUSE = 'opensuse', + SUSE = 'sles', + MANJARO = 'manjaro', + MINT = 'linuxmint', + POP_OS = 'pop', + ELEMENTARY_OS = 'elementary', + KALI = 'kali', + GENTOO = 'gentoo', + SLACKWARE = 'slackware', +} diff --git a/tsconfig.json b/tsconfig.json index 3b83fe2..525ff3f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -11,6 +11,7 @@ "declaration": true, "emitDecoratorMetadata": true, "experimentalDecorators": true, + "verbatimModuleSyntax": true, "rootDir": "src", "outDir": "./dist" },