UNPKG

md-linear-sync

Version:

Sync Linear tickets to local markdown files with status-based folder organization

148 lines 6.19 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const commander_1 = require("commander"); const dotenv_1 = __importDefault(require("dotenv")); const fs_1 = require("fs"); const path_1 = require("path"); // Load environment variables dotenv_1.default.config(); // Read version from package.json const packageJson = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, '..', 'package.json'), 'utf-8')); const version = packageJson.version; const program = new commander_1.Command(); program .name('md-linear-sync') .description('Sync Linear tickets to local markdown files with status-based folder organization') .version(version, '--version', 'display version number') .helpOption('--help', 'display help for command'); program .command('init') .description('Initialize configuration and directory structure') .action(async () => { const { setupCommand } = await Promise.resolve().then(() => __importStar(require('./cli/setup'))); await setupCommand(); }); program .command('import') .description('Import all tickets from Linear') .action(async () => { const { importCommand } = await Promise.resolve().then(() => __importStar(require('./cli/import'))); await importCommand(); }); program .command('push') .description('Push local changes to Linear') .argument('[ticket-id]', 'Specific ticket ID to push') .action(async (ticketId) => { const { pushCommand } = await Promise.resolve().then(() => __importStar(require('./cli/sync'))); await pushCommand(ticketId); }); program .command('pull') .description('Pull latest changes from Linear') .argument('[ticket-id]', 'Specific ticket ID to pull') .action(async (ticketId) => { const { pullCommand } = await Promise.resolve().then(() => __importStar(require('./cli/sync'))); await pullCommand(ticketId); }); program .command('reset') .description('Delete all imported tickets and start fresh') .action(async () => { const { resetCommand } = await Promise.resolve().then(() => __importStar(require('./cli/reset'))); await resetCommand(); }); program .command('start-sync') .description('Start bidirectional sync (webhooks + file watching)') .action(async () => { const { startSyncCommand } = await Promise.resolve().then(() => __importStar(require('./cli/sync-daemon'))); await startSyncCommand(); }); program .command('stop-sync') .description('Stop bidirectional sync daemon') .action(async () => { const { stopSyncCommand } = await Promise.resolve().then(() => __importStar(require('./cli/sync-daemon'))); await stopSyncCommand(); }); program .command('setup-slack') .description('Interactive setup for Slack notifications') .action(async () => { const { setupSlackCommand } = await Promise.resolve().then(() => __importStar(require('./cli/slack-setup'))); await setupSlackCommand(); }); program .command('update-config') .description('Update md-linear-sync/.linear-sync.json with latest Linear team data (states, labels, etc.)') .action(async () => { const { updateConfigCommand } = await Promise.resolve().then(() => __importStar(require('./cli/update-config'))); await updateConfigCommand(); }); program .command('validate') .description('Validate markdown files for ticket creation') .argument('<file-path>', 'Path to markdown file to validate') .option('--json', 'Output validation results as JSON') .action(async (filePath, options) => { const { validateCommand } = await Promise.resolve().then(() => __importStar(require('./cli/validate'))); await validateCommand(filePath, options); }); program .command('create') .description('Create Linear tickets from markdown files in a directory') .argument('[directory]', 'Directory containing markdown files (defaults to current directory)') .option('--dry-run', 'Show what would be created without actually creating tickets') .action(async (directory, options) => { const { createCommand } = await Promise.resolve().then(() => __importStar(require('./cli/create'))); await createCommand(directory, options); }); program .command('comment') .description('Add a comment to a Linear ticket') .argument('<ticket-id>', 'Ticket ID (e.g., PAP-123)') .argument('<comment-text>', 'Comment text (supports markdown)') .action(async (ticketId, commentText) => { const { commentCommand } = await Promise.resolve().then(() => __importStar(require('./cli/comment'))); await commentCommand(ticketId, commentText); }); program.parse(); //# sourceMappingURL=cli.js.map