This commit is contained in:
rkarahan80 2025-06-13 15:10:11 +02:00 committed by GitHub
commit e30643fbb5
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 504 additions and 66 deletions

132
cli/bolt-cli.ts Normal file
View File

@ -0,0 +1,132 @@
#!/usr/bin/env node
import { Command } from 'commander';
import fs from 'fs-extra';
import path from 'path';
const program = new Command();
program
.command('make:controller <ControllerName>')
.description('Create a new controller class')
.action((controllerName: string) => {
let normalizedName = controllerName.charAt(0).toUpperCase() + controllerName.slice(1);
const controllerSuffix = 'Controller';
if (normalizedName.toLowerCase().endsWith(controllerSuffix.toLowerCase())) {
normalizedName = normalizedName.substring(0, normalizedName.length - controllerSuffix.length) + controllerSuffix;
} else {
normalizedName += controllerSuffix;
}
const controllerDir = path.resolve(process.cwd(), 'app', 'controllers');
const controllerPath = path.resolve(controllerDir, `${normalizedName}.ts`);
try {
fs.ensureDirSync(controllerDir);
if (fs.existsSync(controllerPath)) {
console.error(`Error: Controller ${normalizedName} already exists at ${controllerPath}`);
process.exit(1);
}
const boilerplate = `// app/controllers/${normalizedName}.ts
// TODO: Define or import Request and Response types suitable for the project if needed.
export class ${normalizedName} {
constructor() {
console.log('${normalizedName} initialized');
}
/**
* Example index method.
*/
public async index(): Promise<void> {
console.log('Executing ${normalizedName} index method');
// Your logic here
// Example: return some data or render a view
}
/**
* Example show method.
* @param id The ID of the resource to show.
*/
public async show(id: string): Promise<void> {
console.log(\`Executing ${normalizedName} show method for ID: \${id}\`);
// Your logic here
}
}
`;
fs.writeFileSync(controllerPath, boilerplate);
console.log(`Controller ${normalizedName} created successfully at ${controllerPath}`);
} catch (error) {
if (error instanceof Error) {
console.error(`Failed to create controller: ${error.message}`);
} else {
console.error('Failed to create controller (unknown error type):', error);
}
process.exit(1);
}
});
program
.command('make:model <ModelName>')
.description('Create a new model class')
.action((modelName: string) => {
let normalizedName = modelName.charAt(0).toUpperCase() + modelName.slice(1);
// No strict suffix like "Model" is enforced, just PascalCase.
const modelDir = path.resolve(process.cwd(), 'app', 'models');
const modelPath = path.resolve(modelDir, `${normalizedName}.ts`);
try {
fs.ensureDirSync(modelDir);
if (fs.existsSync(modelPath)) {
console.error(`Error: Model ${normalizedName} already exists at ${modelPath}`);
process.exit(1);
}
const boilerplate = `// app/models/${normalizedName}.ts
// TODO: Define database interaction logic or ORM setup if applicable.
export class ${normalizedName} {
public id: string | number; // Example property
constructor(id: string | number) {
this.id = id;
console.log('${normalizedName} initialized with id:', id);
}
public async save(): Promise<void> {
console.log('Saving ${normalizedName} instance with id:', this.id);
// Actual save logic here
}
public static async findById(id: string | number): Promise<${normalizedName} | null> {
console.log('Finding ${normalizedName} instance with id:', id);
// Actual find logic here
return null;
}
}
`;
fs.writeFileSync(modelPath, boilerplate);
console.log(`Model ${normalizedName} created successfully at ${modelPath}`);
} catch (error) {
if (error instanceof Error) {
console.error(`Failed to create model: ${error.message}`);
} else {
console.error('Failed to create model (unknown error type):', error);
}
process.exit(1);
}
});
program.parse(process.argv);
// Commander handles help output by default if no command/args are given,
// or if an unknown command is used. So, no explicit help call needed here.

126
cli/tests/cli.test.ts Normal file
View File

@ -0,0 +1,126 @@
import { type ExecSyncOptionsWithStringEncoding, execSync } from 'child_process'; // Added 'type' keyword
import fs from 'fs-extra';
import path from 'path';
import assert from 'assert';
import { rimrafSync } from 'rimraf'; // Use rimrafSync
const cliCommand = 'pnpm run bolt --'; // Base command to run the CLI
const controllersDir = path.join(process.cwd(), 'app', 'controllers');
const modelsDir = path.join(process.cwd(), 'app', 'models');
const execOptions: ExecSyncOptionsWithStringEncoding = { encoding: 'utf-8', stdio: 'pipe' };
function runCli(args: string): { stdout: string; stderr: string; error: any } {
try {
const stdout = execSync(`${cliCommand} ${args}`, execOptions);
return { stdout, stderr: '', error: null };
} catch (e: any) {
// If execSync throws, 'e' is the error object.
// stdout and stderr are properties on it if the command produced output before failing.
return {
stdout: e.stdout?.toString() || '',
stderr: e.stderr?.toString() || '',
error: e
};
}
}
function cleanup() {
console.log('Cleaning up test directories...');
if (fs.existsSync(controllersDir)) {
rimrafSync(controllersDir);
}
if (fs.existsSync(modelsDir)) {
rimrafSync(modelsDir);
}
}
function testMakeController() {
console.log('Running make:controller tests...');
let result;
// Test 1: Successful creation
console.log(' Test 1: Successful controller creation');
result = runCli('make:controller TestUserController');
assert.strictEqual(result.error, null, `make:controller TestUserController failed: STDERR: ${result.stderr} STDOUT: ${result.stdout}`);
const controllerPath = path.join(controllersDir, 'TestUserController.ts');
assert(fs.existsSync(controllerPath), `TestUserController.ts should be created. STDERR: ${result.stderr}`);
const content = fs.readFileSync(controllerPath, 'utf-8');
assert(content.includes('export class TestUserController'), 'File content is incorrect');
console.log(' Test 1 PASSED');
// Test 2: Already exists
console.log(' Test 2: Controller already exists');
result = runCli('make:controller TestUserController');
assert.notStrictEqual(result.error, null, 'make:controller TestUserController should fail if controller exists');
assert(result.stderr.includes('already exists'), `Error message for existing controller is incorrect. STDERR: ${result.stderr}`);
console.log(' Test 2 PASSED');
// Test 3: Naming convention (lowercase input)
console.log(' Test 3: Controller naming convention');
result = runCli('make:controller lowercaseuser');
assert.strictEqual(result.error, null, `make:controller lowercaseuser failed: ${result.stderr}`);
const normalizedControllerPath = path.join(controllersDir, 'LowercaseuserController.ts');
assert(fs.existsSync(normalizedControllerPath), `LowercaseuserController.ts should be created. Actual path: ${normalizedControllerPath}`);
console.log(' Test 3 PASSED');
// Test 4: Missing argument
console.log(' Test 4: Missing controller name');
result = runCli('make:controller');
assert.notStrictEqual(result.error, null, 'make:controller should fail without a name');
assert(result.stderr.includes("error: missing required argument 'ControllerName'"), `Error message for missing argument is incorrect. STDERR: ${result.stderr}`);
console.log(' Test 4 PASSED');
}
function testMakeModel() {
console.log('Running make:model tests...');
let result;
// Test 1: Successful creation
console.log(' Test 1: Successful model creation');
result = runCli('make:model TestModel');
assert.strictEqual(result.error, null, `make:model TestModel failed: ${result.stderr}`);
const modelPath = path.join(modelsDir, 'TestModel.ts');
assert(fs.existsSync(modelPath), 'TestModel.ts should be created');
const content = fs.readFileSync(modelPath, 'utf-8');
assert(content.includes('export class TestModel'), 'File content is incorrect');
console.log(' Test 1 PASSED');
// Test 2: Already exists
console.log(' Test 2: Model already exists');
result = runCli('make:model TestModel');
assert.notStrictEqual(result.error, null, 'make:model TestModel should fail if model exists');
assert(result.stderr.includes('already exists'), `Error message for existing model is incorrect. STDERR: ${result.stderr}`);
console.log(' Test 2 PASSED');
// Test 3: Naming convention (lowercase input)
console.log(' Test 3: Model naming convention');
result = runCli('make:model lowermodule');
assert.strictEqual(result.error, null, `make:model lowermodule failed: ${result.stderr}`);
const normalizedModelPath = path.join(modelsDir, 'Lowermodule.ts');
assert(fs.existsSync(normalizedModelPath), `Lowermodule.ts should be created. Actual path: ${normalizedModelPath}`);
console.log(' Test 3 PASSED');
// Test 4: Missing argument
console.log(' Test 4: Missing model name');
result = runCli('make:model');
assert.notStrictEqual(result.error, null, 'make:model should fail without a name');
assert(result.stderr.includes("error: missing required argument 'ModelName'"), `Error message for missing argument is incorrect. STDERR: ${result.stderr}`);
console.log(' Test 4 PASSED');
}
// Main test execution
try {
cleanup();
testMakeController();
cleanup();
testMakeModel();
console.log('\nAll CLI tests PASSED!');
} catch (e: any) {
console.error('\nCLI tests FAILED:', e.message); // Log specific error message
if (e.stdout) console.error('STDOUT:', e.stdout.toString());
if (e.stderr) console.error('STDERR:', e.stderr.toString());
process.exit(1);
} finally {
cleanup();
}

View File

@ -14,8 +14,10 @@
"deploy": "npm run build && wrangler pages deploy", "deploy": "npm run build && wrangler pages deploy",
"build": "remix vite:build", "build": "remix vite:build",
"dev": "node pre-start.cjs && remix vite:dev", "dev": "node pre-start.cjs && remix vite:dev",
"bolt": "TS_NODE_PROJECT=tsconfig.cli.json node --loader ts-node/esm --experimental-specifier-resolution=node cli/bolt-cli.ts",
"test": "vitest --run", "test": "vitest --run",
"test:watch": "vitest", "test:watch": "vitest",
"test:cli": "TS_NODE_PROJECT=tsconfig.cli.test.json node --loader ts-node/esm --experimental-specifier-resolution=node cli/tests/cli.test.ts",
"lint": "eslint --cache --cache-location ./node_modules/.cache/eslint app", "lint": "eslint --cache --cache-location ./node_modules/.cache/eslint app",
"lint:fix": "npm run lint -- --fix && prettier app --write", "lint:fix": "npm run lint -- --fix && prettier app --write",
"start:windows": "wrangler pages dev ./build/client", "start:windows": "wrangler pages dev ./build/client",
@ -106,6 +108,7 @@
"chart.js": "^4.4.7", "chart.js": "^4.4.7",
"class-variance-authority": "^0.7.0", "class-variance-authority": "^0.7.0",
"clsx": "^2.1.0", "clsx": "^2.1.0",
"commander": "^14.0.0",
"date-fns": "^3.6.0", "date-fns": "^3.6.0",
"diff": "^5.2.0", "diff": "^5.2.0",
"dotenv": "^16.4.7", "dotenv": "^16.4.7",
@ -114,6 +117,7 @@
"electron-updater": "^6.3.9", "electron-updater": "^6.3.9",
"file-saver": "^2.0.5", "file-saver": "^2.0.5",
"framer-motion": "^11.12.0", "framer-motion": "^11.12.0",
"fs-extra": "^11.3.0",
"ignore": "^6.0.2", "ignore": "^6.0.2",
"isbot": "^4.4.0", "isbot": "^4.4.0",
"isomorphic-git": "^1.27.2", "isomorphic-git": "^1.27.2",
@ -168,11 +172,14 @@
"@types/dom-speech-recognition": "^0.0.4", "@types/dom-speech-recognition": "^0.0.4",
"@types/electron": "^1.6.12", "@types/electron": "^1.6.12",
"@types/file-saver": "^2.0.7", "@types/file-saver": "^2.0.7",
"@types/fs-extra": "^11.0.4",
"@types/js-cookie": "^3.0.6", "@types/js-cookie": "^3.0.6",
"@types/node": "^22.15.30",
"@types/path-browserify": "^1.0.3", "@types/path-browserify": "^1.0.3",
"@types/react": "^18.3.12", "@types/react": "^18.3.12",
"@types/react-dom": "^18.3.1", "@types/react-dom": "^18.3.1",
"@types/react-window": "^1.8.8", "@types/react-window": "^1.8.8",
"@types/rimraf": "^4.0.5",
"@vitejs/plugin-react": "^4.3.4", "@vitejs/plugin-react": "^4.3.4",
"concurrently": "^8.2.2", "concurrently": "^8.2.2",
"cross-env": "^7.0.3", "cross-env": "^7.0.3",
@ -191,6 +198,7 @@
"rimraf": "^4.4.1", "rimraf": "^4.4.1",
"sass-embedded": "^1.81.0", "sass-embedded": "^1.81.0",
"stream-browserify": "^3.0.0", "stream-browserify": "^3.0.0",
"ts-node": "^10.9.2",
"typescript": "^5.7.2", "typescript": "^5.7.2",
"unified": "^11.0.5", "unified": "^11.0.5",
"unocss": "^0.61.9", "unocss": "^0.61.9",

View File

@ -197,6 +197,9 @@ importers:
clsx: clsx:
specifier: ^2.1.0 specifier: ^2.1.0
version: 2.1.1 version: 2.1.1
commander:
specifier: ^14.0.0
version: 14.0.0
date-fns: date-fns:
specifier: ^3.6.0 specifier: ^3.6.0
version: 3.6.0 version: 3.6.0
@ -221,6 +224,9 @@ importers:
framer-motion: framer-motion:
specifier: ^11.12.0 specifier: ^11.12.0
version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 11.18.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
fs-extra:
specifier: ^11.3.0
version: 11.3.0
ignore: ignore:
specifier: ^6.0.2 specifier: ^6.0.2
version: 6.0.2 version: 6.0.2
@ -271,7 +277,7 @@ importers:
version: 5.3.0(chart.js@4.4.8)(react@18.3.1) version: 5.3.0(chart.js@4.4.8)(react@18.3.1)
react-dnd: react-dnd:
specifier: ^16.0.1 specifier: ^16.0.1
version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.14)(@types/react@18.3.20)(react@18.3.1) version: 16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.15.30)(@types/react@18.3.20)(react@18.3.1)
react-dnd-html5-backend: react-dnd-html5-backend:
specifier: ^16.0.1 specifier: ^16.0.1
version: 16.0.1 version: 16.0.1
@ -331,7 +337,7 @@ importers:
version: 10.0.4(react@18.3.1) version: 10.0.4(react@18.3.1)
vite-plugin-node-polyfills: vite-plugin-node-polyfills:
specifier: ^0.22.0 specifier: ^0.22.0
version: 0.22.0(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) version: 0.22.0(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
zod: zod:
specifier: ^3.24.1 specifier: ^3.24.1
version: 3.24.2 version: 3.24.2
@ -356,7 +362,7 @@ importers:
version: 2.0.0 version: 2.0.0
'@remix-run/dev': '@remix-run/dev':
specifier: ^2.15.2 specifier: ^2.15.2
version: 2.16.3(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/serve@2.16.3(typescript@5.8.2))(@types/node@22.13.14)(sass-embedded@1.86.0)(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))(wrangler@4.6.0(@cloudflare/workers-types@4.20250327.0)) version: 2.16.3(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/serve@2.16.3(typescript@5.8.2))(@types/node@22.15.30)(sass-embedded@1.86.0)(ts-node@10.9.2(@types/node@22.15.30)(typescript@5.8.2))(typescript@5.8.2)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))(wrangler@4.6.0(@cloudflare/workers-types@4.20250327.0))
'@remix-run/serve': '@remix-run/serve':
specifier: ^2.15.2 specifier: ^2.15.2
version: 2.16.3(typescript@5.8.2) version: 2.16.3(typescript@5.8.2)
@ -378,9 +384,15 @@ importers:
'@types/file-saver': '@types/file-saver':
specifier: ^2.0.7 specifier: ^2.0.7
version: 2.0.7 version: 2.0.7
'@types/fs-extra':
specifier: ^11.0.4
version: 11.0.4
'@types/js-cookie': '@types/js-cookie':
specifier: ^3.0.6 specifier: ^3.0.6
version: 3.0.6 version: 3.0.6
'@types/node':
specifier: ^22.15.30
version: 22.15.30
'@types/path-browserify': '@types/path-browserify':
specifier: ^1.0.3 specifier: ^1.0.3
version: 1.0.3 version: 1.0.3
@ -393,9 +405,12 @@ importers:
'@types/react-window': '@types/react-window':
specifier: ^1.8.8 specifier: ^1.8.8
version: 1.8.8 version: 1.8.8
'@types/rimraf':
specifier: ^4.0.5
version: 4.0.5
'@vitejs/plugin-react': '@vitejs/plugin-react':
specifier: ^4.3.4 specifier: ^4.3.4
version: 4.3.4(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) version: 4.3.4(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
concurrently: concurrently:
specifier: ^8.2.2 specifier: ^8.2.2
version: 8.2.2 version: 8.2.2
@ -447,6 +462,9 @@ importers:
stream-browserify: stream-browserify:
specifier: ^3.0.0 specifier: ^3.0.0
version: 3.0.0 version: 3.0.0
ts-node:
specifier: ^10.9.2
version: 10.9.2(@types/node@22.15.30)(typescript@5.8.2)
typescript: typescript:
specifier: ^5.7.2 specifier: ^5.7.2
version: 5.8.2 version: 5.8.2
@ -455,22 +473,22 @@ importers:
version: 11.0.5 version: 11.0.5
unocss: unocss:
specifier: ^0.61.9 specifier: ^0.61.9
version: 0.61.9(postcss@8.5.3)(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) version: 0.61.9(postcss@8.5.3)(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
vite: vite:
specifier: ^5.4.11 specifier: ^5.4.11
version: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) version: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
vite-plugin-copy: vite-plugin-copy:
specifier: ^0.1.6 specifier: ^0.1.6
version: 0.1.6 version: 0.1.6
vite-plugin-optimize-css-modules: vite-plugin-optimize-css-modules:
specifier: ^1.1.0 specifier: ^1.1.0
version: 1.2.0(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) version: 1.2.0(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
vite-tsconfig-paths: vite-tsconfig-paths:
specifier: ^4.3.2 specifier: ^4.3.2
version: 4.3.2(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) version: 4.3.2(typescript@5.8.2)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
vitest: vitest:
specifier: ^2.1.7 specifier: ^2.1.7
version: 2.1.9(@types/node@22.13.14)(jsdom@26.0.0)(sass-embedded@1.86.0) version: 2.1.9(@types/node@22.15.30)(jsdom@26.0.0)(sass-embedded@1.86.0)
wrangler: wrangler:
specifier: ^4.5.1 specifier: ^4.5.1
version: 4.6.0(@cloudflare/workers-types@4.20250327.0) version: 4.6.0(@cloudflare/workers-types@4.20250327.0)
@ -3181,6 +3199,18 @@ packages:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'} engines: {node: '>= 10'}
'@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
'@tsconfig/node12@1.0.11':
resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
'@tsconfig/node14@1.0.3':
resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
'@tsconfig/node16@1.0.4':
resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
'@types/acorn@4.0.6': '@types/acorn@4.0.6':
resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==}
@ -3230,6 +3260,9 @@ packages:
'@types/file-saver@2.0.7': '@types/file-saver@2.0.7':
resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==} resolution: {integrity: sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==}
'@types/fs-extra@11.0.4':
resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==}
'@types/fs-extra@9.0.13': '@types/fs-extra@9.0.13':
resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==}
@ -3251,6 +3284,9 @@ packages:
'@types/json-schema@7.0.15': '@types/json-schema@7.0.15':
resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
'@types/jsonfile@6.1.4':
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
'@types/keyv@3.1.4': '@types/keyv@3.1.4':
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
@ -3269,8 +3305,8 @@ packages:
'@types/node@20.17.28': '@types/node@20.17.28':
resolution: {integrity: sha512-DHlH/fNL6Mho38jTy7/JT7sn2wnXI+wULR6PV4gy4VHLVvnrV/d3pHAMQHhc4gjdLmK2ZiPoMxzp6B3yRajLSQ==} resolution: {integrity: sha512-DHlH/fNL6Mho38jTy7/JT7sn2wnXI+wULR6PV4gy4VHLVvnrV/d3pHAMQHhc4gjdLmK2ZiPoMxzp6B3yRajLSQ==}
'@types/node@22.13.14': '@types/node@22.15.30':
resolution: {integrity: sha512-Zs/Ollc1SJ8nKUAgc7ivOEdIBM8JAKgrqqUYi2J997JuKO7/tpQC+WCetQ1sypiKCQWHdvdg9wBNpUPEWZae7w==} resolution: {integrity: sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA==}
'@types/path-browserify@1.0.3': '@types/path-browserify@1.0.3':
resolution: {integrity: sha512-ZmHivEbNCBtAfcrFeBCiTjdIc2dey0l7oCGNGpSuRTy8jP6UVND7oUowlvDujBy8r2Hoa8bfFUOCiPWfmtkfxw==} resolution: {integrity: sha512-ZmHivEbNCBtAfcrFeBCiTjdIc2dey0l7oCGNGpSuRTy8jP6UVND7oUowlvDujBy8r2Hoa8bfFUOCiPWfmtkfxw==}
@ -3304,6 +3340,10 @@ packages:
'@types/responselike@1.0.3': '@types/responselike@1.0.3':
resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==}
'@types/rimraf@4.0.5':
resolution: {integrity: sha512-DTCZoIQotB2SUJnYgrEx43cQIUYOlNZz0AZPbKU4PSLYTUdML5Gox0++z4F9kQocxStrCmRNhi4x5x/UlwtKUA==}
deprecated: This is a stub types definition. rimraf provides its own type definitions, so you do not need this installed.
'@types/unist@2.0.11': '@types/unist@2.0.11':
resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==}
@ -3669,6 +3709,9 @@ packages:
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
deprecated: This package is no longer supported. deprecated: This package is no longer supported.
arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
arg@5.0.2: arg@5.0.2:
resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==}
@ -4060,6 +4103,10 @@ packages:
comma-separated-tokens@2.0.3: comma-separated-tokens@2.0.3:
resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
commander@14.0.0:
resolution: {integrity: sha512-2uM9rYjPvyq39NwLRqaiLtWHyDC1FvryJDa2ATTVims5YAS4PupsEQsDvP14FqhFr0P49CYDugi59xaxJlTXRA==}
engines: {node: '>=20'}
commander@5.1.0: commander@5.1.0:
resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
engines: {node: '>= 6'} engines: {node: '>= 6'}
@ -4363,6 +4410,10 @@ packages:
diff3@0.0.3: diff3@0.0.3:
resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==} resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==}
diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
diff@5.2.0: diff@5.2.0:
resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==}
engines: {node: '>=0.3.1'} engines: {node: '>=0.3.1'}
@ -5605,6 +5656,9 @@ packages:
magic-string@0.30.17: magic-string@0.30.17:
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
make-error@1.3.6:
resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
make-fetch-happen@10.2.1: make-fetch-happen@10.2.1:
resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==} resolution: {integrity: sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==}
engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
@ -7552,6 +7606,20 @@ packages:
peerDependencies: peerDependencies:
typescript: '>=4.8.4' typescript: '>=4.8.4'
ts-node@10.9.2:
resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
hasBin: true
peerDependencies:
'@swc/core': '>=1.2.50'
'@swc/wasm': '>=1.2.50'
'@types/node': '*'
typescript: '>=2.7'
peerDependenciesMeta:
'@swc/core':
optional: true
'@swc/wasm':
optional: true
tsconfck@3.1.5: tsconfck@3.1.5:
resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==} resolution: {integrity: sha512-CLDfGgUp7XPswWnezWwsCRxNmgQjhYq3VXHM0/XIRxhVrKw0M1if9agzryh1QS3nxjCROvV+xWxoJO1YctzzWg==}
engines: {node: ^18 || >=20} engines: {node: ^18 || >=20}
@ -7621,8 +7689,8 @@ packages:
undici-types@6.19.8: undici-types@6.19.8:
resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==}
undici-types@6.20.0: undici-types@6.21.0:
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
undici@5.29.0: undici@5.29.0:
resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==} resolution: {integrity: sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==}
@ -7797,6 +7865,9 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
hasBin: true hasBin: true
v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
valibot@0.41.0: valibot@0.41.0:
resolution: {integrity: sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==} resolution: {integrity: sha512-igDBb8CTYr8YTQlOKgaN9nSS0Be7z+WRuaeYqGf3Cjz3aKmSnqEmYnkfVjzIuumGqfHpa3fLIvMEAfhrpqN8ng==}
peerDependencies: peerDependencies:
@ -8106,6 +8177,10 @@ packages:
yauzl@2.10.0: yauzl@2.10.0:
resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
yn@3.1.1:
resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
engines: {node: '>=6'}
yocto-queue@0.1.0: yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -10502,7 +10577,7 @@ snapshots:
optionalDependencies: optionalDependencies:
typescript: 5.8.2 typescript: 5.8.2
'@remix-run/dev@2.16.3(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/serve@2.16.3(typescript@5.8.2))(@types/node@22.13.14)(sass-embedded@1.86.0)(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))(wrangler@4.6.0(@cloudflare/workers-types@4.20250327.0))': '@remix-run/dev@2.16.3(@remix-run/react@2.16.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.8.2))(@remix-run/serve@2.16.3(typescript@5.8.2))(@types/node@22.15.30)(sass-embedded@1.86.0)(ts-node@10.9.2(@types/node@22.15.30)(typescript@5.8.2))(typescript@5.8.2)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))(wrangler@4.6.0(@cloudflare/workers-types@4.20250327.0))':
dependencies: dependencies:
'@babel/core': 7.26.10 '@babel/core': 7.26.10
'@babel/generator': 7.27.0 '@babel/generator': 7.27.0
@ -10519,7 +10594,7 @@ snapshots:
'@remix-run/router': 1.23.0 '@remix-run/router': 1.23.0
'@remix-run/server-runtime': 2.16.3(typescript@5.8.2) '@remix-run/server-runtime': 2.16.3(typescript@5.8.2)
'@types/mdx': 2.0.13 '@types/mdx': 2.0.13
'@vanilla-extract/integration': 6.5.0(@types/node@22.13.14)(sass-embedded@1.86.0) '@vanilla-extract/integration': 6.5.0(@types/node@22.15.30)(sass-embedded@1.86.0)
arg: 5.0.2 arg: 5.0.2
cacache: 17.1.4 cacache: 17.1.4
chalk: 4.1.2 chalk: 4.1.2
@ -10547,7 +10622,7 @@ snapshots:
pidtree: 0.6.0 pidtree: 0.6.0
postcss: 8.5.3 postcss: 8.5.3
postcss-discard-duplicates: 5.1.0(postcss@8.5.3) postcss-discard-duplicates: 5.1.0(postcss@8.5.3)
postcss-load-config: 4.0.2(postcss@8.5.3) postcss-load-config: 4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.15.30)(typescript@5.8.2))
postcss-modules: 6.0.1(postcss@8.5.3) postcss-modules: 6.0.1(postcss@8.5.3)
prettier: 2.8.8 prettier: 2.8.8
pretty-ms: 7.0.1 pretty-ms: 7.0.1
@ -10559,12 +10634,12 @@ snapshots:
tar-fs: 2.1.2 tar-fs: 2.1.2
tsconfig-paths: 4.2.0 tsconfig-paths: 4.2.0
valibot: 0.41.0(typescript@5.8.2) valibot: 0.41.0(typescript@5.8.2)
vite-node: 3.0.0-beta.2(@types/node@22.13.14)(sass-embedded@1.86.0) vite-node: 3.0.0-beta.2(@types/node@22.15.30)(sass-embedded@1.86.0)
ws: 7.5.10 ws: 7.5.10
optionalDependencies: optionalDependencies:
'@remix-run/serve': 2.16.3(typescript@5.8.2) '@remix-run/serve': 2.16.3(typescript@5.8.2)
typescript: 5.8.2 typescript: 5.8.2
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
wrangler: 4.6.0(@cloudflare/workers-types@4.20250327.0) wrangler: 4.6.0(@cloudflare/workers-types@4.20250327.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
@ -11138,6 +11213,14 @@ snapshots:
'@tootallnate/once@2.0.0': {} '@tootallnate/once@2.0.0': {}
'@tsconfig/node10@1.0.11': {}
'@tsconfig/node12@1.0.11': {}
'@tsconfig/node14@1.0.3': {}
'@tsconfig/node16@1.0.4': {}
'@types/acorn@4.0.6': '@types/acorn@4.0.6':
dependencies: dependencies:
'@types/estree': 1.0.7 '@types/estree': 1.0.7
@ -11169,7 +11252,7 @@ snapshots:
dependencies: dependencies:
'@types/http-cache-semantics': 4.0.4 '@types/http-cache-semantics': 4.0.4
'@types/keyv': 3.1.4 '@types/keyv': 3.1.4
'@types/node': 20.17.28 '@types/node': 22.15.30
'@types/responselike': 1.0.3 '@types/responselike': 1.0.3
'@types/cookie@0.6.0': {} '@types/cookie@0.6.0': {}
@ -11198,9 +11281,14 @@ snapshots:
'@types/file-saver@2.0.7': {} '@types/file-saver@2.0.7': {}
'@types/fs-extra@11.0.4':
dependencies:
'@types/jsonfile': 6.1.4
'@types/node': 22.15.30
'@types/fs-extra@9.0.13': '@types/fs-extra@9.0.13':
dependencies: dependencies:
'@types/node': 22.13.14 '@types/node': 22.15.30
'@types/hast@2.3.10': '@types/hast@2.3.10':
dependencies: dependencies:
@ -11221,9 +11309,13 @@ snapshots:
'@types/json-schema@7.0.15': {} '@types/json-schema@7.0.15': {}
'@types/jsonfile@6.1.4':
dependencies:
'@types/node': 22.15.30
'@types/keyv@3.1.4': '@types/keyv@3.1.4':
dependencies: dependencies:
'@types/node': 20.17.28 '@types/node': 22.15.30
'@types/mdast@3.0.15': '@types/mdast@3.0.15':
dependencies: dependencies:
@ -11241,15 +11333,15 @@ snapshots:
dependencies: dependencies:
undici-types: 6.19.8 undici-types: 6.19.8
'@types/node@22.13.14': '@types/node@22.15.30':
dependencies: dependencies:
undici-types: 6.20.0 undici-types: 6.21.0
'@types/path-browserify@1.0.3': {} '@types/path-browserify@1.0.3': {}
'@types/plist@3.0.5': '@types/plist@3.0.5':
dependencies: dependencies:
'@types/node': 22.13.14 '@types/node': 22.15.30
xmlbuilder: 15.1.1 xmlbuilder: 15.1.1
optional: true optional: true
@ -11284,7 +11376,11 @@ snapshots:
'@types/responselike@1.0.3': '@types/responselike@1.0.3':
dependencies: dependencies:
'@types/node': 20.17.28 '@types/node': 22.15.30
'@types/rimraf@4.0.5':
dependencies:
rimraf: 4.4.1
'@types/unist@2.0.11': {} '@types/unist@2.0.11': {}
@ -11297,7 +11393,7 @@ snapshots:
'@types/yauzl@2.10.3': '@types/yauzl@2.10.3':
dependencies: dependencies:
'@types/node': 20.17.28 '@types/node': 22.15.30
optional: true optional: true
'@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2))(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2)': '@typescript-eslint/eslint-plugin@8.28.0(@typescript-eslint/parser@8.28.0(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2))(eslint@9.23.0(jiti@1.21.7))(typescript@5.8.2)':
@ -11393,13 +11489,13 @@ snapshots:
'@ungap/structured-clone@1.3.0': {} '@ungap/structured-clone@1.3.0': {}
'@unocss/astro@0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': '@unocss/astro@0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))':
dependencies: dependencies:
'@unocss/core': 0.61.9 '@unocss/core': 0.61.9
'@unocss/reset': 0.61.9 '@unocss/reset': 0.61.9
'@unocss/vite': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) '@unocss/vite': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
optionalDependencies: optionalDependencies:
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -11536,7 +11632,7 @@ snapshots:
dependencies: dependencies:
'@unocss/core': 0.61.9 '@unocss/core': 0.61.9
'@unocss/vite@0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': '@unocss/vite@0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))':
dependencies: dependencies:
'@ampproject/remapping': 2.3.0 '@ampproject/remapping': 2.3.0
'@rollup/pluginutils': 5.1.4(rollup@4.38.0) '@rollup/pluginutils': 5.1.4(rollup@4.38.0)
@ -11548,7 +11644,7 @@ snapshots:
chokidar: 3.6.0 chokidar: 3.6.0
fast-glob: 3.3.3 fast-glob: 3.3.3
magic-string: 0.30.17 magic-string: 0.30.17
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
- supports-color - supports-color
@ -11576,7 +11672,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- babel-plugin-macros - babel-plugin-macros
'@vanilla-extract/integration@6.5.0(@types/node@22.13.14)(sass-embedded@1.86.0)': '@vanilla-extract/integration@6.5.0(@types/node@22.15.30)(sass-embedded@1.86.0)':
dependencies: dependencies:
'@babel/core': 7.26.10 '@babel/core': 7.26.10
'@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10) '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.10)
@ -11589,8 +11685,8 @@ snapshots:
lodash: 4.17.21 lodash: 4.17.21
mlly: 1.7.4 mlly: 1.7.4
outdent: 0.8.0 outdent: 0.8.0
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
vite-node: 1.6.1(@types/node@22.13.14)(sass-embedded@1.86.0) vite-node: 1.6.1(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- babel-plugin-macros - babel-plugin-macros
@ -11605,14 +11701,14 @@ snapshots:
'@vanilla-extract/private@1.0.6': {} '@vanilla-extract/private@1.0.6': {}
'@vitejs/plugin-react@4.3.4(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': '@vitejs/plugin-react@4.3.4(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))':
dependencies: dependencies:
'@babel/core': 7.26.10 '@babel/core': 7.26.10
'@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.10)
'@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10) '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.10)
'@types/babel__core': 7.20.5 '@types/babel__core': 7.20.5
react-refresh: 0.14.2 react-refresh: 0.14.2
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -11623,13 +11719,13 @@ snapshots:
chai: 5.2.0 chai: 5.2.0
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
'@vitest/mocker@2.1.9(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0))': '@vitest/mocker@2.1.9(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))':
dependencies: dependencies:
'@vitest/spy': 2.1.9 '@vitest/spy': 2.1.9
estree-walker: 3.0.3 estree-walker: 3.0.3
magic-string: 0.30.17 magic-string: 0.30.17
optionalDependencies: optionalDependencies:
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
'@vitest/pretty-format@2.1.9': '@vitest/pretty-format@2.1.9':
dependencies: dependencies:
@ -11849,6 +11945,8 @@ snapshots:
delegates: 1.0.0 delegates: 1.0.0
readable-stream: 3.6.2 readable-stream: 3.6.2
arg@4.1.3: {}
arg@5.0.2: {} arg@5.0.2: {}
argparse@2.0.1: {} argparse@2.0.1: {}
@ -12319,6 +12417,8 @@ snapshots:
comma-separated-tokens@2.0.3: {} comma-separated-tokens@2.0.3: {}
commander@14.0.0: {}
commander@5.1.0: {} commander@5.1.0: {}
common-tags@1.8.2: {} common-tags@1.8.2: {}
@ -12608,6 +12708,8 @@ snapshots:
diff3@0.0.3: {} diff3@0.0.3: {}
diff@4.0.2: {}
diff@5.2.0: {} diff@5.2.0: {}
diffie-hellman@5.0.3: diffie-hellman@5.0.3:
@ -13145,7 +13247,7 @@ snapshots:
eval@0.1.8: eval@0.1.8:
dependencies: dependencies:
'@types/node': 22.13.14 '@types/node': 22.15.30
require-like: 0.1.2 require-like: 0.1.2
event-target-shim@5.0.1: {} event-target-shim@5.0.1: {}
@ -14191,6 +14293,8 @@ snapshots:
dependencies: dependencies:
'@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/sourcemap-codec': 1.5.0
make-error@1.3.6: {}
make-fetch-happen@10.2.1: make-fetch-happen@10.2.1:
dependencies: dependencies:
agentkeepalive: 4.6.0 agentkeepalive: 4.6.0
@ -15441,12 +15545,13 @@ snapshots:
dependencies: dependencies:
postcss: 8.5.3 postcss: 8.5.3
postcss-load-config@4.0.2(postcss@8.5.3): postcss-load-config@4.0.2(postcss@8.5.3)(ts-node@10.9.2(@types/node@22.15.30)(typescript@5.8.2)):
dependencies: dependencies:
lilconfig: 3.1.3 lilconfig: 3.1.3
yaml: 2.7.0 yaml: 2.7.0
optionalDependencies: optionalDependencies:
postcss: 8.5.3 postcss: 8.5.3
ts-node: 10.9.2(@types/node@22.15.30)(typescript@5.8.2)
postcss-modules-extract-imports@3.1.0(postcss@8.5.3): postcss-modules-extract-imports@3.1.0(postcss@8.5.3):
dependencies: dependencies:
@ -15641,7 +15746,7 @@ snapshots:
dependencies: dependencies:
dnd-core: 16.0.1 dnd-core: 16.0.1
react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.13.14)(@types/react@18.3.20)(react@18.3.1): react-dnd@16.0.1(@types/hoist-non-react-statics@3.3.6)(@types/node@22.15.30)(@types/react@18.3.20)(react@18.3.1):
dependencies: dependencies:
'@react-dnd/invariant': 4.0.2 '@react-dnd/invariant': 4.0.2
'@react-dnd/shallowequal': 4.0.2 '@react-dnd/shallowequal': 4.0.2
@ -15651,7 +15756,7 @@ snapshots:
react: 18.3.1 react: 18.3.1
optionalDependencies: optionalDependencies:
'@types/hoist-non-react-statics': 3.3.6 '@types/hoist-non-react-statics': 3.3.6
'@types/node': 22.13.14 '@types/node': 22.15.30
'@types/react': 18.3.20 '@types/react': 18.3.20
react-dom@18.3.1(react@18.3.1): react-dom@18.3.1(react@18.3.1):
@ -16642,6 +16747,24 @@ snapshots:
dependencies: dependencies:
typescript: 5.8.2 typescript: 5.8.2
ts-node@10.9.2(@types/node@22.15.30)(typescript@5.8.2):
dependencies:
'@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4
'@types/node': 22.15.30
acorn: 8.14.1
acorn-walk: 8.3.2
arg: 4.1.3
create-require: 1.1.1
diff: 4.0.2
make-error: 1.3.6
typescript: 5.8.2
v8-compile-cache-lib: 3.0.1
yn: 3.1.1
tsconfck@3.1.5(typescript@5.8.2): tsconfck@3.1.5(typescript@5.8.2):
optionalDependencies: optionalDependencies:
typescript: 5.8.2 typescript: 5.8.2
@ -16705,7 +16828,7 @@ snapshots:
undici-types@6.19.8: {} undici-types@6.19.8: {}
undici-types@6.20.0: {} undici-types@6.21.0: {}
undici@5.29.0: undici@5.29.0:
dependencies: dependencies:
@ -16820,9 +16943,9 @@ snapshots:
universalify@2.0.1: {} universalify@2.0.1: {}
unocss@0.61.9(postcss@8.5.3)(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): unocss@0.61.9(postcss@8.5.3)(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)):
dependencies: dependencies:
'@unocss/astro': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) '@unocss/astro': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
'@unocss/cli': 0.61.9(rollup@4.38.0) '@unocss/cli': 0.61.9(rollup@4.38.0)
'@unocss/core': 0.61.9 '@unocss/core': 0.61.9
'@unocss/extractor-arbitrary-variants': 0.61.9 '@unocss/extractor-arbitrary-variants': 0.61.9
@ -16841,9 +16964,9 @@ snapshots:
'@unocss/transformer-compile-class': 0.61.9 '@unocss/transformer-compile-class': 0.61.9
'@unocss/transformer-directives': 0.61.9 '@unocss/transformer-directives': 0.61.9
'@unocss/transformer-variant-group': 0.61.9 '@unocss/transformer-variant-group': 0.61.9
'@unocss/vite': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) '@unocss/vite': 0.61.9(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
optionalDependencies: optionalDependencies:
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- postcss - postcss
- rollup - rollup
@ -16921,6 +17044,8 @@ snapshots:
kleur: 4.1.5 kleur: 4.1.5
sade: 1.8.1 sade: 1.8.1
v8-compile-cache-lib@3.0.1: {}
valibot@0.41.0(typescript@5.8.2): valibot@0.41.0(typescript@5.8.2):
optionalDependencies: optionalDependencies:
typescript: 5.8.2 typescript: 5.8.2
@ -16972,13 +17097,13 @@ snapshots:
'@types/unist': 3.0.3 '@types/unist': 3.0.3
vfile-message: 4.0.2 vfile-message: 4.0.2
vite-node@1.6.1(@types/node@22.13.14)(sass-embedded@1.86.0): vite-node@1.6.1(@types/node@22.15.30)(sass-embedded@1.86.0):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.4.0 debug: 4.4.0
pathe: 1.1.2 pathe: 1.1.2
picocolors: 1.1.1 picocolors: 1.1.1
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -16990,13 +17115,13 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-node@2.1.9(@types/node@22.13.14)(sass-embedded@1.86.0): vite-node@2.1.9(@types/node@22.15.30)(sass-embedded@1.86.0):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.4.0 debug: 4.4.0
es-module-lexer: 1.6.0 es-module-lexer: 1.6.0
pathe: 1.1.2 pathe: 1.1.2
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -17008,13 +17133,13 @@ snapshots:
- supports-color - supports-color
- terser - terser
vite-node@3.0.0-beta.2(@types/node@22.13.14)(sass-embedded@1.86.0): vite-node@3.0.0-beta.2(@types/node@22.15.30)(sass-embedded@1.86.0):
dependencies: dependencies:
cac: 6.7.14 cac: 6.7.14
debug: 4.4.0 debug: 4.4.0
es-module-lexer: 1.6.0 es-module-lexer: 1.6.0
pathe: 1.1.2 pathe: 1.1.2
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- '@types/node' - '@types/node'
- less - less
@ -17030,43 +17155,43 @@ snapshots:
dependencies: dependencies:
fast-glob: 3.3.3 fast-glob: 3.3.3
vite-plugin-node-polyfills@0.22.0(rollup@4.38.0)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): vite-plugin-node-polyfills@0.22.0(rollup@4.38.0)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)):
dependencies: dependencies:
'@rollup/plugin-inject': 5.0.5(rollup@4.38.0) '@rollup/plugin-inject': 5.0.5(rollup@4.38.0)
node-stdlib-browser: 1.3.1 node-stdlib-browser: 1.3.1
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- rollup - rollup
vite-plugin-optimize-css-modules@1.2.0(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): vite-plugin-optimize-css-modules@1.2.0(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)):
dependencies: dependencies:
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
vite-tsconfig-paths@4.3.2(typescript@5.8.2)(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)): vite-tsconfig-paths@4.3.2(typescript@5.8.2)(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)):
dependencies: dependencies:
debug: 4.4.0 debug: 4.4.0
globrex: 0.1.2 globrex: 0.1.2
tsconfck: 3.1.5(typescript@5.8.2) tsconfck: 3.1.5(typescript@5.8.2)
optionalDependencies: optionalDependencies:
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
- typescript - typescript
vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0): vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0):
dependencies: dependencies:
esbuild: 0.21.5 esbuild: 0.21.5
postcss: 8.5.3 postcss: 8.5.3
rollup: 4.38.0 rollup: 4.38.0
optionalDependencies: optionalDependencies:
'@types/node': 22.13.14 '@types/node': 22.15.30
fsevents: 2.3.3 fsevents: 2.3.3
sass-embedded: 1.86.0 sass-embedded: 1.86.0
vitest@2.1.9(@types/node@22.13.14)(jsdom@26.0.0)(sass-embedded@1.86.0): vitest@2.1.9(@types/node@22.15.30)(jsdom@26.0.0)(sass-embedded@1.86.0):
dependencies: dependencies:
'@vitest/expect': 2.1.9 '@vitest/expect': 2.1.9
'@vitest/mocker': 2.1.9(vite@5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0)) '@vitest/mocker': 2.1.9(vite@5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0))
'@vitest/pretty-format': 2.1.9 '@vitest/pretty-format': 2.1.9
'@vitest/runner': 2.1.9 '@vitest/runner': 2.1.9
'@vitest/snapshot': 2.1.9 '@vitest/snapshot': 2.1.9
@ -17082,11 +17207,11 @@ snapshots:
tinyexec: 0.3.2 tinyexec: 0.3.2
tinypool: 1.0.2 tinypool: 1.0.2
tinyrainbow: 1.2.0 tinyrainbow: 1.2.0
vite: 5.4.15(@types/node@22.13.14)(sass-embedded@1.86.0) vite: 5.4.15(@types/node@22.15.30)(sass-embedded@1.86.0)
vite-node: 2.1.9(@types/node@22.13.14)(sass-embedded@1.86.0) vite-node: 2.1.9(@types/node@22.15.30)(sass-embedded@1.86.0)
why-is-node-running: 2.3.0 why-is-node-running: 2.3.0
optionalDependencies: optionalDependencies:
'@types/node': 22.13.14 '@types/node': 22.15.30
jsdom: 26.0.0 jsdom: 26.0.0
transitivePeerDependencies: transitivePeerDependencies:
- less - less
@ -17244,6 +17369,8 @@ snapshots:
buffer-crc32: 0.2.13 buffer-crc32: 0.2.13
fd-slicer: 1.1.0 fd-slicer: 1.1.0
yn@3.1.1: {}
yocto-queue@0.1.0: {} yocto-queue@0.1.0: {}
youch@3.2.3: youch@3.2.3:

22
tsconfig.cli.json Normal file
View File

@ -0,0 +1,22 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "dist/cli",
"rootDir": "cli",
"resolveJsonModule": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"ts-node": {
"esm": true,
"experimentalSpecifierResolution": "node"
},
"include": [
"cli/**/*.ts"
],
"exclude": [
"node_modules",
"app",
"dist"
]
}

23
tsconfig.cli.test.json Normal file
View File

@ -0,0 +1,23 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "dist/cli_tests",
"rootDir": ".",
"resolveJsonModule": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"ts-node": {
"esm": true,
"experimentalSpecifierResolution": "node",
"transpileOnly": true
},
"include": [
"cli/tests/**/*.ts"
],
"exclude": [
"node_modules",
"app",
"dist"
]
}