mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-02-03 08:53:36 +00:00
- Updated the `/start-dev` route to accept a custom development command from project settings, allowing for greater flexibility in starting dev servers. - Implemented a new `parseCustomCommand` method in the `DevServerService` to handle custom command parsing, including support for quoted strings. - Added a new `DevServerSection` component in the UI for configuring the dev server command, featuring quick presets and auto-detection options. - Updated project settings interface to include a `devCommand` property for storing custom commands. This update improves the user experience by allowing users to specify custom commands for their development servers, enhancing the overall development workflow.
192 lines
7.0 KiB
TypeScript
192 lines
7.0 KiB
TypeScript
/**
|
|
* Worktree routes - HTTP API for git worktree operations
|
|
*/
|
|
|
|
import { Router } from 'express';
|
|
import type { EventEmitter } from '../../lib/events.js';
|
|
import { validatePathParams } from '../../middleware/validate-paths.js';
|
|
import { requireValidWorktree, requireValidProject, requireGitRepoOnly } from './middleware.js';
|
|
import { createInfoHandler } from './routes/info.js';
|
|
import { createStatusHandler } from './routes/status.js';
|
|
import { createListHandler } from './routes/list.js';
|
|
import { createDiffsHandler } from './routes/diffs.js';
|
|
import { createFileDiffHandler } from './routes/file-diff.js';
|
|
import { createMergeHandler } from './routes/merge.js';
|
|
import { createCreateHandler } from './routes/create.js';
|
|
import { createDeleteHandler } from './routes/delete.js';
|
|
import { createCreatePRHandler } from './routes/create-pr.js';
|
|
import { createPRInfoHandler } from './routes/pr-info.js';
|
|
import { createCommitHandler } from './routes/commit.js';
|
|
import { createGenerateCommitMessageHandler } from './routes/generate-commit-message.js';
|
|
import { createPushHandler } from './routes/push.js';
|
|
import { createPullHandler } from './routes/pull.js';
|
|
import { createCheckoutBranchHandler } from './routes/checkout-branch.js';
|
|
import { createListBranchesHandler } from './routes/list-branches.js';
|
|
import { createSwitchBranchHandler } from './routes/switch-branch.js';
|
|
import {
|
|
createOpenInEditorHandler,
|
|
createGetDefaultEditorHandler,
|
|
createGetAvailableEditorsHandler,
|
|
createRefreshEditorsHandler,
|
|
} from './routes/open-in-editor.js';
|
|
import {
|
|
createOpenInTerminalHandler,
|
|
createGetAvailableTerminalsHandler,
|
|
createGetDefaultTerminalHandler,
|
|
createRefreshTerminalsHandler,
|
|
createOpenInExternalTerminalHandler,
|
|
} from './routes/open-in-terminal.js';
|
|
import { createInitGitHandler } from './routes/init-git.js';
|
|
import { createMigrateHandler } from './routes/migrate.js';
|
|
import { createStartDevHandler } from './routes/start-dev.js';
|
|
import { createStopDevHandler } from './routes/stop-dev.js';
|
|
import { createListDevServersHandler } from './routes/list-dev-servers.js';
|
|
import { createGetDevServerLogsHandler } from './routes/dev-server-logs.js';
|
|
import { createStartTestsHandler } from './routes/start-tests.js';
|
|
import { createStopTestsHandler } from './routes/stop-tests.js';
|
|
import { createGetTestLogsHandler } from './routes/test-logs.js';
|
|
import {
|
|
createGetInitScriptHandler,
|
|
createPutInitScriptHandler,
|
|
createDeleteInitScriptHandler,
|
|
createRunInitScriptHandler,
|
|
} from './routes/init-script.js';
|
|
import { createDiscardChangesHandler } from './routes/discard-changes.js';
|
|
import { createListRemotesHandler } from './routes/list-remotes.js';
|
|
import { createAddRemoteHandler } from './routes/add-remote.js';
|
|
import type { SettingsService } from '../../services/settings-service.js';
|
|
|
|
export function createWorktreeRoutes(
|
|
events: EventEmitter,
|
|
settingsService?: SettingsService
|
|
): Router {
|
|
const router = Router();
|
|
|
|
router.post('/info', validatePathParams('projectPath'), createInfoHandler());
|
|
router.post('/status', validatePathParams('projectPath'), createStatusHandler());
|
|
router.post('/list', createListHandler());
|
|
router.post('/diffs', validatePathParams('projectPath'), createDiffsHandler());
|
|
router.post('/file-diff', validatePathParams('projectPath', 'filePath'), createFileDiffHandler());
|
|
router.post(
|
|
'/merge',
|
|
validatePathParams('projectPath'),
|
|
requireValidProject,
|
|
createMergeHandler()
|
|
);
|
|
router.post('/create', validatePathParams('projectPath'), createCreateHandler(events));
|
|
router.post('/delete', validatePathParams('projectPath', 'worktreePath'), createDeleteHandler());
|
|
router.post('/create-pr', createCreatePRHandler());
|
|
router.post('/pr-info', createPRInfoHandler());
|
|
router.post(
|
|
'/commit',
|
|
validatePathParams('worktreePath'),
|
|
requireGitRepoOnly,
|
|
createCommitHandler()
|
|
);
|
|
router.post(
|
|
'/generate-commit-message',
|
|
validatePathParams('worktreePath'),
|
|
requireGitRepoOnly,
|
|
createGenerateCommitMessageHandler(settingsService)
|
|
);
|
|
router.post(
|
|
'/push',
|
|
validatePathParams('worktreePath'),
|
|
requireValidWorktree,
|
|
createPushHandler()
|
|
);
|
|
router.post(
|
|
'/pull',
|
|
validatePathParams('worktreePath'),
|
|
requireValidWorktree,
|
|
createPullHandler()
|
|
);
|
|
router.post('/checkout-branch', requireValidWorktree, createCheckoutBranchHandler());
|
|
router.post(
|
|
'/list-branches',
|
|
validatePathParams('worktreePath'),
|
|
requireValidWorktree,
|
|
createListBranchesHandler()
|
|
);
|
|
router.post('/switch-branch', requireValidWorktree, createSwitchBranchHandler());
|
|
router.post('/open-in-editor', validatePathParams('worktreePath'), createOpenInEditorHandler());
|
|
router.post(
|
|
'/open-in-terminal',
|
|
validatePathParams('worktreePath'),
|
|
createOpenInTerminalHandler()
|
|
);
|
|
router.get('/default-editor', createGetDefaultEditorHandler());
|
|
router.get('/available-editors', createGetAvailableEditorsHandler());
|
|
router.post('/refresh-editors', createRefreshEditorsHandler());
|
|
|
|
// External terminal routes
|
|
router.get('/available-terminals', createGetAvailableTerminalsHandler());
|
|
router.get('/default-terminal', createGetDefaultTerminalHandler());
|
|
router.post('/refresh-terminals', createRefreshTerminalsHandler());
|
|
router.post(
|
|
'/open-in-external-terminal',
|
|
validatePathParams('worktreePath'),
|
|
createOpenInExternalTerminalHandler()
|
|
);
|
|
|
|
router.post('/init-git', validatePathParams('projectPath'), createInitGitHandler());
|
|
router.post('/migrate', createMigrateHandler());
|
|
router.post(
|
|
'/start-dev',
|
|
validatePathParams('projectPath', 'worktreePath'),
|
|
createStartDevHandler(settingsService)
|
|
);
|
|
router.post('/stop-dev', createStopDevHandler());
|
|
router.post('/list-dev-servers', createListDevServersHandler());
|
|
router.get(
|
|
'/dev-server-logs',
|
|
validatePathParams('worktreePath'),
|
|
createGetDevServerLogsHandler()
|
|
);
|
|
|
|
// Test runner routes
|
|
router.post(
|
|
'/start-tests',
|
|
validatePathParams('worktreePath', 'projectPath?'),
|
|
createStartTestsHandler(settingsService)
|
|
);
|
|
router.post('/stop-tests', createStopTestsHandler());
|
|
router.get('/test-logs', validatePathParams('worktreePath?'), createGetTestLogsHandler());
|
|
|
|
// Init script routes
|
|
router.get('/init-script', createGetInitScriptHandler());
|
|
router.put('/init-script', validatePathParams('projectPath'), createPutInitScriptHandler());
|
|
router.delete('/init-script', validatePathParams('projectPath'), createDeleteInitScriptHandler());
|
|
router.post(
|
|
'/run-init-script',
|
|
validatePathParams('projectPath', 'worktreePath'),
|
|
createRunInitScriptHandler(events)
|
|
);
|
|
|
|
// Discard changes route
|
|
router.post(
|
|
'/discard-changes',
|
|
validatePathParams('worktreePath'),
|
|
requireGitRepoOnly,
|
|
createDiscardChangesHandler()
|
|
);
|
|
|
|
// List remotes route
|
|
router.post(
|
|
'/list-remotes',
|
|
validatePathParams('worktreePath'),
|
|
requireValidWorktree,
|
|
createListRemotesHandler()
|
|
);
|
|
|
|
// Add remote route
|
|
router.post(
|
|
'/add-remote',
|
|
validatePathParams('worktreePath'),
|
|
requireGitRepoOnly,
|
|
createAddRemoteHandler()
|
|
);
|
|
|
|
return router;
|
|
}
|