@dafish/gogo-meta 0.1.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -2
- package/dist/cli.js +11 -3
- package/dist/cli.js.map +1 -1
- package/dist/index.js +11 -3
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/core/executor.ts","../src/types/index.ts","../src/core/config.ts","../src/core/output.ts","../src/commands/init.ts","../src/core/loop.ts","../src/core/filter.ts","../src/commands/exec.ts","../src/commands/run.ts","../src/commands/git/clone.ts","../src/commands/git/update.ts","../src/commands/git/status.ts","../src/commands/git/pull.ts","../src/commands/git/push.ts","../src/commands/git/branch.ts","../src/commands/git/checkout.ts","../src/commands/git/commit.ts","../src/commands/git/index.ts","../src/commands/project/create.ts","../src/commands/project/import.ts","../src/commands/project/index.ts","../src/commands/npm/install.ts","../src/commands/npm/link.ts","../src/commands/npm/run.ts","../src/commands/npm/index.ts","../src/cli.ts"],"names":["error","join","basename","mkdir","success","appendFile","readFile","info","execute","runCommand","dirname"],"mappings":"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","file":"cli.js","sourcesContent":["import { spawn, execSync, type ExecSyncOptions } from 'node:child_process';\nimport type { ExecutorOptions, ExecutorResult } from '../types/index.js';\n\nconst DEFAULT_TIMEOUT = 300_000; // 5 minutes\n\nexport async function execute(command: string, options: ExecutorOptions): Promise<ExecutorResult> {\n const { cwd, env = process.env, timeout = DEFAULT_TIMEOUT, shell = true } = options;\n\n return new Promise((resolve) => {\n let stdout = '';\n let stderr = '';\n let timedOut = false;\n\n const isUnix = process.platform !== 'win32';\n const child = spawn(command, {\n cwd,\n env,\n shell,\n stdio: ['inherit', 'pipe', 'pipe'],\n detached: isUnix,\n });\n\n const killProcessGroup = (signal: NodeJS.Signals) => {\n if (isUnix && child.pid) {\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n } else {\n child.kill(signal);\n }\n };\n\n const timeoutId = setTimeout(() => {\n timedOut = true;\n killProcessGroup('SIGTERM');\n setTimeout(() => {\n if (!child.killed) {\n killProcessGroup('SIGKILL');\n }\n }, 5000);\n }, timeout);\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: code ?? (timedOut ? 124 : 1),\n stdout: stdout.trim(),\n stderr: stderr.trim(),\n timedOut,\n });\n });\n\n child.on('error', (err) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: 1,\n stdout: '',\n stderr: err.message,\n timedOut: false,\n });\n });\n });\n}\n\nfunction getShellPath(shell: boolean | undefined): string | undefined {\n if (shell === false || shell === undefined) return undefined;\n return process.platform === 'win32' ? process.env['ComSpec'] || 'cmd.exe' : '/bin/sh';\n}\n\nexport function executeSync(command: string, options: ExecutorOptions): ExecutorResult {\n const { cwd, env = process.env, timeout = DEFAULT_TIMEOUT, shell = true } = options;\n\n try {\n const execOptions: ExecSyncOptions = {\n cwd,\n env,\n shell: getShellPath(shell),\n timeout,\n encoding: 'utf-8',\n stdio: ['inherit', 'pipe', 'pipe'],\n };\n const result = execSync(command, execOptions) as string;\n\n return {\n exitCode: 0,\n stdout: result.trim(),\n stderr: '',\n timedOut: false,\n };\n } catch (error: unknown) {\n const err = error as {\n status?: number;\n stdout?: string;\n stderr?: string;\n killed?: boolean;\n signal?: string;\n };\n\n return {\n exitCode: err.status ?? 1,\n stdout: err.stdout?.trim() ?? '',\n stderr: err.stderr?.trim() ?? '',\n timedOut: err.killed === true || err.signal === 'SIGTERM',\n };\n }\n}\n\nexport async function executeStreaming(\n command: string,\n options: ExecutorOptions & {\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n }\n): Promise<ExecutorResult> {\n const { cwd, env = process.env, timeout = DEFAULT_TIMEOUT, shell = true, onStdout, onStderr } = options;\n\n return new Promise((resolve) => {\n let stdout = '';\n let stderr = '';\n let timedOut = false;\n\n const isUnix = process.platform !== 'win32';\n const child = spawn(command, {\n cwd,\n env,\n shell,\n stdio: ['inherit', 'pipe', 'pipe'],\n detached: isUnix,\n });\n\n const killProcessGroup = (signal: NodeJS.Signals) => {\n if (isUnix && child.pid) {\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n } else {\n child.kill(signal);\n }\n };\n\n const timeoutId = setTimeout(() => {\n timedOut = true;\n killProcessGroup('SIGTERM');\n }, timeout);\n\n child.stdout?.on('data', (data: Buffer) => {\n const str = data.toString();\n stdout += str;\n onStdout?.(str);\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n const str = data.toString();\n stderr += str;\n onStderr?.(str);\n });\n\n child.on('close', (code) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: code ?? (timedOut ? 124 : 1),\n stdout: stdout.trim(),\n stderr: stderr.trim(),\n timedOut,\n });\n });\n\n child.on('error', (err) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: 1,\n stdout: '',\n stderr: err.message,\n timedOut: false,\n });\n });\n });\n}\n","import { z } from 'zod';\n\nexport const CommandConfigObjectSchema = z.object({\n cmd: z.string(),\n description: z.string().optional(),\n parallel: z.boolean().optional(),\n concurrency: z.number().int().positive().optional(),\n includeOnly: z.array(z.string()).optional(),\n excludeOnly: z.array(z.string()).optional(),\n includePattern: z.string().optional(),\n excludePattern: z.string().optional(),\n});\n\nexport const CommandConfigSchema = z.union([\n z.string(),\n CommandConfigObjectSchema,\n]);\n\nexport type CommandConfigObject = z.infer<typeof CommandConfigObjectSchema>;\nexport type CommandConfig = z.infer<typeof CommandConfigSchema>;\n\nexport const MetaConfigSchema = z.object({\n projects: z.record(z.string(), z.string()),\n ignore: z.array(z.string()).default(['.git', 'node_modules', '.vagrant', '.vscode']),\n commands: z.record(z.string(), CommandConfigSchema).optional(),\n});\n\nexport type MetaConfig = z.infer<typeof MetaConfigSchema>;\n\nexport const LoopRcSchema = z.object({\n ignore: z.array(z.string()).default([]),\n});\n\nexport type LoopRc = z.infer<typeof LoopRcSchema>;\n\nexport interface FilterOptions {\n includeOnly?: string[] | undefined;\n excludeOnly?: string[] | undefined;\n includePattern?: RegExp | undefined;\n excludePattern?: RegExp | undefined;\n}\n\nexport interface ExecutorOptions {\n cwd: string;\n env?: NodeJS.ProcessEnv | undefined;\n timeout?: number | undefined;\n shell?: boolean | undefined;\n}\n\nexport interface ExecutorResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n timedOut?: boolean | undefined;\n}\n\nexport interface LoopOptions extends FilterOptions {\n parallel?: boolean | undefined;\n concurrency?: number | undefined;\n suppressOutput?: boolean | undefined;\n}\n\nexport interface LoopResult {\n directory: string;\n result: ExecutorResult;\n success: boolean;\n duration: number;\n}\n\nexport interface ProjectInfo {\n path: string;\n url: string;\n exists: boolean;\n}\n\nexport type CommandHandler<T = void> = (options: T) => Promise<void>;\n","import { readFile, writeFile, access } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { MetaConfigSchema, LoopRcSchema, type MetaConfig, type LoopRc, type CommandConfig } from '../types/index.js';\n\nexport const META_FILE = '.gogo';\nexport const LOOPRC_FILE = '.looprc';\n\nexport class ConfigError extends Error {\n constructor(message: string, public readonly path?: string) {\n super(message);\n this.name = 'ConfigError';\n }\n}\n\nexport async function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function findFileUp(filename: string, startDir: string): Promise<string | null> {\n let currentDir = startDir;\n\n while (true) {\n const filePath = join(currentDir, filename);\n if (await fileExists(filePath)) {\n return filePath;\n }\n\n const parentDir = dirname(currentDir);\n if (parentDir === currentDir) {\n return null;\n }\n currentDir = parentDir;\n }\n}\n\nexport async function readMetaConfig(cwd: string): Promise<MetaConfig> {\n const metaPath = await findFileUp(META_FILE, cwd);\n\n if (!metaPath) {\n throw new ConfigError(\n `No ${META_FILE} file found. Run 'gogo init' to create one, or navigate to a directory with a ${META_FILE} file.`\n );\n }\n\n try {\n const content = await readFile(metaPath, 'utf-8');\n const parsed = JSON.parse(content);\n return MetaConfigSchema.parse(parsed);\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new ConfigError(`Invalid JSON in ${META_FILE} file`, metaPath);\n }\n if (error instanceof Error && error.name === 'ZodError') {\n throw new ConfigError(`Invalid ${META_FILE} file structure: ${error.message}`, metaPath);\n }\n throw error;\n }\n}\n\nexport async function writeMetaConfig(cwd: string, config: MetaConfig): Promise<void> {\n const metaPath = join(cwd, META_FILE);\n const validated = MetaConfigSchema.parse(config);\n const content = JSON.stringify(validated, null, 2) + '\\n';\n await writeFile(metaPath, content, 'utf-8');\n}\n\nexport async function readLoopRc(cwd: string): Promise<LoopRc | null> {\n const looprcPath = await findFileUp(LOOPRC_FILE, cwd);\n\n if (!looprcPath) {\n return null;\n }\n\n try {\n const content = await readFile(looprcPath, 'utf-8');\n const parsed = JSON.parse(content);\n return LoopRcSchema.parse(parsed);\n } catch {\n return null;\n }\n}\n\nexport function getMetaDir(cwd: string): Promise<string | null> {\n return findFileUp(META_FILE, cwd).then((path) => (path ? dirname(path) : null));\n}\n\nexport function createDefaultConfig(): MetaConfig {\n return {\n projects: {},\n ignore: ['.git', 'node_modules', '.vagrant', '.vscode'],\n };\n}\n\nexport function addProject(config: MetaConfig, path: string, url: string): MetaConfig {\n return {\n ...config,\n projects: {\n ...config.projects,\n [path]: url,\n },\n };\n}\n\nexport function removeProject(config: MetaConfig, path: string): MetaConfig {\n const { [path]: _removed, ...remainingProjects } = config.projects;\n return {\n ...config,\n projects: remainingProjects,\n };\n}\n\nexport function getProjectPaths(config: MetaConfig): string[] {\n return Object.keys(config.projects);\n}\n\nexport function getProjectUrl(config: MetaConfig, path: string): string | undefined {\n return config.projects[path];\n}\n\nexport interface ResolvedCommand {\n cmd: string;\n description?: string | undefined;\n parallel?: boolean | undefined;\n concurrency?: number | undefined;\n includeOnly?: string[] | undefined;\n excludeOnly?: string[] | undefined;\n includePattern?: string | undefined;\n excludePattern?: string | undefined;\n}\n\nexport function normalizeCommand(config: CommandConfig): ResolvedCommand {\n if (typeof config === 'string') {\n return { cmd: config };\n }\n return config;\n}\n\nexport function getCommand(metaConfig: MetaConfig, name: string): ResolvedCommand | undefined {\n const commands = metaConfig.commands;\n if (!commands) {\n return undefined;\n }\n const command = commands[name];\n if (command === undefined) {\n return undefined;\n }\n return normalizeCommand(command);\n}\n\nexport function listCommands(metaConfig: MetaConfig): Array<{ name: string; command: ResolvedCommand }> {\n const commands = metaConfig.commands ?? {};\n return Object.entries(commands).map(([name, config]) => ({\n name,\n command: normalizeCommand(config),\n }));\n}\n","import pc from 'picocolors';\n\nexport const symbols = {\n success: pc.green('✓'),\n error: pc.red('✗'),\n warning: pc.yellow('⚠'),\n info: pc.blue('ℹ'),\n arrow: pc.cyan('→'),\n bullet: pc.gray('•'),\n} as const;\n\nexport function success(message: string): void {\n console.log(`${symbols.success} ${message}`);\n}\n\nexport function error(message: string): void {\n console.error(`${symbols.error} ${pc.red(message)}`);\n}\n\nexport function warning(message: string): void {\n console.warn(`${symbols.warning} ${pc.yellow(message)}`);\n}\n\nexport function info(message: string): void {\n console.log(`${symbols.info} ${message}`);\n}\n\nexport function header(directory: string): void {\n console.log(`\\n${symbols.arrow} ${pc.bold(pc.cyan(directory))}`);\n}\n\nexport function dim(message: string): void {\n console.log(pc.dim(message));\n}\n\nexport function bold(message: string): string {\n return pc.bold(message);\n}\n\nexport function projectStatus(directory: string, status: 'success' | 'error', message?: string): void {\n const symbol = status === 'success' ? symbols.success : symbols.error;\n const colorFn = status === 'success' ? pc.green : pc.red;\n const suffix = message ? ` ${pc.dim(message)}` : '';\n console.log(`${symbol} ${colorFn(directory)}${suffix}`);\n}\n\nexport function commandOutput(stdout: string, stderr: string): void {\n if (stdout.trim()) {\n console.log(stdout);\n }\n if (stderr.trim()) {\n console.error(pc.dim(stderr));\n }\n}\n\nexport function summary(results: { success: number; failed: number; total: number }): void {\n const { success: successCount, failed, total } = results;\n\n console.log('');\n if (failed === 0) {\n console.log(`${symbols.success} ${pc.green(`All ${total} projects completed successfully`)}`);\n } else {\n console.log(\n `${symbols.warning} ${pc.yellow(`${successCount}/${total} projects succeeded, ${failed} failed`)}`\n );\n }\n}\n\nexport function formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n const seconds = (ms / 1000).toFixed(1);\n return `${seconds}s`;\n}\n","import { Command } from 'commander';\nimport { join } from 'node:path';\nimport { writeMetaConfig, createDefaultConfig, fileExists, META_FILE } from '../core/config.js';\nimport * as output from '../core/output.js';\n\ninterface InitOptions {\n force?: boolean;\n}\n\nexport async function initCommand(options: InitOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaPath = join(cwd, META_FILE);\n\n if (await fileExists(metaPath)) {\n if (!options.force) {\n throw new Error(\n `${META_FILE} file already exists. Use --force to overwrite.`\n );\n }\n output.warning(`Overwriting existing ${META_FILE} file`);\n }\n\n const config = createDefaultConfig();\n await writeMetaConfig(cwd, config);\n\n output.success(`Created ${META_FILE} file in ${cwd}`);\n output.info('Add projects with: gogo project import <folder> <repo-url>');\n}\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Initialize a new gogo-meta repository')\n .option('-f, --force', 'Overwrite existing .gogo file')\n .action(async (options: InitOptions) => {\n await initCommand(options);\n });\n}\n","import { join } from 'node:path';\nimport { execute } from './executor.js';\nimport { applyFilters } from './filter.js';\nimport { getProjectPaths, readLoopRc } from './config.js';\nimport * as output from './output.js';\nimport type { MetaConfig, LoopOptions, LoopResult, ExecutorResult } from '../types/index.js';\n\nconst DEFAULT_CONCURRENCY = 4;\n\nexport interface LoopContext {\n config: MetaConfig;\n metaDir: string;\n}\n\ntype CommandFn = (dir: string, projectPath: string) => Promise<ExecutorResult>;\n\nasync function runSequential(\n command: string | CommandFn,\n directories: string[],\n context: LoopContext,\n options: LoopOptions\n): Promise<LoopResult[]> {\n const results: LoopResult[] = [];\n\n for (const projectPath of directories) {\n const absoluteDir = join(context.metaDir, projectPath);\n\n if (!options.suppressOutput) {\n output.header(projectPath);\n }\n\n const start = Date.now();\n\n let result: ExecutorResult;\n if (typeof command === 'function') {\n result = await command(absoluteDir, projectPath);\n } else {\n result = await execute(command, { cwd: absoluteDir });\n }\n\n const duration = Date.now() - start;\n\n if (!options.suppressOutput) {\n output.commandOutput(result.stdout, result.stderr);\n }\n\n results.push({\n directory: projectPath,\n result,\n success: result.exitCode === 0,\n duration,\n });\n }\n\n return results;\n}\n\nasync function runParallel(\n command: string | CommandFn,\n directories: string[],\n context: LoopContext,\n options: LoopOptions\n): Promise<LoopResult[]> {\n const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n const results: LoopResult[] = [];\n const pending: Promise<void>[] = [];\n let index = 0;\n\n const runOne = async (projectPath: string): Promise<void> => {\n const absoluteDir = join(context.metaDir, projectPath);\n const start = Date.now();\n\n let result: ExecutorResult;\n if (typeof command === 'function') {\n result = await command(absoluteDir, projectPath);\n } else {\n result = await execute(command, { cwd: absoluteDir });\n }\n\n const duration = Date.now() - start;\n\n results.push({\n directory: projectPath,\n result,\n success: result.exitCode === 0,\n duration,\n });\n };\n\n const runNext = async (): Promise<void> => {\n while (index < directories.length) {\n const currentIndex = index++;\n const projectPath = directories[currentIndex];\n if (projectPath) {\n await runOne(projectPath);\n }\n }\n };\n\n const workers = Math.min(concurrency, directories.length);\n for (let i = 0; i < workers; i++) {\n pending.push(runNext());\n }\n\n await Promise.all(pending);\n\n const orderedResults = directories\n .map((dir) => results.find((r) => r.directory === dir))\n .filter((r): r is LoopResult => r !== undefined);\n\n if (!options.suppressOutput) {\n for (const result of orderedResults) {\n output.header(result.directory);\n output.commandOutput(result.result.stdout, result.result.stderr);\n }\n }\n\n return orderedResults;\n}\n\nexport async function loop(\n command: string | CommandFn,\n context: LoopContext,\n options: LoopOptions = {}\n): Promise<LoopResult[]> {\n let directories = getProjectPaths(context.config);\n\n const loopRc = await readLoopRc(context.metaDir);\n if (loopRc?.ignore) {\n const ignoreSet = new Set(loopRc.ignore);\n directories = directories.filter((dir) => !ignoreSet.has(dir));\n }\n\n directories = applyFilters(directories, options);\n\n if (directories.length === 0) {\n output.warning('No projects match the specified filters');\n return [];\n }\n\n const results = options.parallel\n ? await runParallel(command, directories, context, options)\n : await runSequential(command, directories, context, options);\n\n if (!options.suppressOutput) {\n const successCount = results.filter((r) => r.success).length;\n const failedCount = results.length - successCount;\n output.summary({ success: successCount, failed: failedCount, total: results.length });\n }\n\n return results;\n}\n\nexport function hasFailures(results: LoopResult[]): boolean {\n return results.some((r) => !r.success);\n}\n\nexport function getExitCode(results: LoopResult[]): number {\n return hasFailures(results) ? 1 : 0;\n}\n","import { basename } from 'node:path';\nimport type { FilterOptions } from '../types/index.js';\n\nexport function applyFilters(directories: string[], options: FilterOptions): string[] {\n let result = [...directories];\n\n if (options.includeOnly && options.includeOnly.length > 0) {\n const includeSet = new Set(options.includeOnly);\n result = result.filter((dir) => includeSet.has(dir) || includeSet.has(basename(dir)));\n }\n\n if (options.excludeOnly && options.excludeOnly.length > 0) {\n const excludeSet = new Set(options.excludeOnly);\n result = result.filter((dir) => !excludeSet.has(dir) && !excludeSet.has(basename(dir)));\n }\n\n if (options.includePattern) {\n result = result.filter((dir) => options.includePattern!.test(dir));\n }\n\n if (options.excludePattern) {\n result = result.filter((dir) => !options.excludePattern!.test(dir));\n }\n\n return result;\n}\n\nexport function parseFilterList(input: string | undefined): string[] | undefined {\n if (!input) {\n return undefined;\n }\n return input\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n}\n\nexport function parseFilterPattern(input: string | undefined): RegExp | undefined {\n if (!input) {\n return undefined;\n }\n try {\n return new RegExp(input);\n } catch {\n throw new Error(`Invalid regex pattern: ${input}`);\n }\n}\n\nexport function createFilterOptions(options: {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n}): FilterOptions {\n return {\n includeOnly: parseFilterList(options.includeOnly),\n excludeOnly: parseFilterList(options.excludeOnly),\n includePattern: parseFilterPattern(options.includePattern),\n excludePattern: parseFilterPattern(options.excludePattern),\n };\n}\n\nexport function filterFromLoopRc(\n directories: string[],\n ignore: string[]\n): string[] {\n if (ignore.length === 0) {\n return directories;\n }\n\n const ignoreSet = new Set(ignore);\n return directories.filter((dir) => {\n const dirBasename = basename(dir);\n return !ignoreSet.has(dir) && !ignoreSet.has(dirBasename);\n });\n}\n","import { Command } from 'commander';\nimport { readMetaConfig, getMetaDir } from '../core/config.js';\nimport { loop, getExitCode } from '../core/loop.js';\nimport { createFilterOptions } from '../core/filter.js';\nimport * as output from '../core/output.js';\n\ninterface ExecOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function execCommand(command: string, options: ExecOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info(`Executing: ${output.bold(command)}`);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n\nexport function registerExecCommand(program: Command): void {\n program\n .command('exec <command>')\n .description('Execute a command in all project directories')\n .option('--include-only <dirs>', 'Only include specified directories (comma-separated)')\n .option('--exclude-only <dirs>', 'Exclude specified directories (comma-separated)')\n .option('--include-pattern <regex>', 'Include directories matching regex pattern')\n .option('--exclude-pattern <regex>', 'Exclude directories matching regex pattern')\n .option('--parallel', 'Execute commands in parallel')\n .option('--concurrency <number>', 'Max parallel processes (default: 4)', parseInt)\n .action(async (command: string, options: ExecOptions) => {\n await execCommand(command, options);\n });\n}\n","import { Command } from 'commander';\nimport { readMetaConfig, getMetaDir, getCommand, listCommands, type ResolvedCommand } from '../core/config.js';\nimport { loop, getExitCode } from '../core/loop.js';\nimport { createFilterOptions, parseFilterPattern } from '../core/filter.js';\nimport * as output from '../core/output.js';\nimport type { FilterOptions, LoopOptions } from '../types/index.js';\n\ninterface RunOptions {\n list?: boolean;\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nfunction formatCommandList(commands: Array<{ name: string; command: ResolvedCommand }>): void {\n if (commands.length === 0) {\n output.info('No commands defined in .gogo file');\n output.dim(' Add commands to your .gogo file:');\n output.dim(' \"commands\": { \"build\": \"npm run build\" }');\n return;\n }\n\n output.info('Available commands:');\n console.log('');\n\n const maxNameLen = Math.max(...commands.map((c) => c.name.length));\n\n for (const { name, command } of commands) {\n const paddedName = name.padEnd(maxNameLen);\n const desc = command.description ?? command.cmd;\n console.log(` ${output.bold(paddedName)} ${desc}`);\n }\n}\n\nexport async function runCommand(name: string | undefined, options: RunOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n\n if (options.list || name === undefined) {\n formatCommandList(listCommands(config));\n return;\n }\n\n const commandDef = getCommand(config, name);\n\n if (!commandDef) {\n const available = Object.keys(config.commands ?? {});\n if (available.length === 0) {\n throw new Error(`Unknown command: \"${name}\". No commands are defined in .gogo file.`);\n }\n throw new Error(`Unknown command: \"${name}\". Available commands: ${available.join(', ')}`);\n }\n\n const cliFilterOptions = createFilterOptions(options);\n\n const mergedFilterOptions: FilterOptions = {\n includeOnly: cliFilterOptions.includeOnly ?? commandDef.includeOnly,\n excludeOnly: cliFilterOptions.excludeOnly ?? commandDef.excludeOnly,\n includePattern: cliFilterOptions.includePattern ?? parseFilterPattern(commandDef.includePattern),\n excludePattern: cliFilterOptions.excludePattern ?? parseFilterPattern(commandDef.excludePattern),\n };\n\n const loopOptions: LoopOptions = {\n ...mergedFilterOptions,\n parallel: options.parallel ?? commandDef.parallel,\n concurrency: options.concurrency ?? commandDef.concurrency,\n };\n\n output.info(`Running \"${name}\": ${output.bold(commandDef.cmd)}`);\n\n const results = await loop(commandDef.cmd, { config, metaDir }, loopOptions);\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n\nexport function registerRunCommand(program: Command): void {\n program\n .command('run [name]')\n .description('Run a predefined command from .gogo file')\n .option('-l, --list', 'List all available commands')\n .option('--include-only <dirs>', 'Only include specified directories (comma-separated)')\n .option('--exclude-only <dirs>', 'Exclude specified directories (comma-separated)')\n .option('--include-pattern <regex>', 'Include directories matching regex pattern')\n .option('--exclude-pattern <regex>', 'Exclude directories matching regex pattern')\n .option('--parallel', 'Execute commands in parallel')\n .option('--concurrency <number>', 'Max parallel processes (default: 4)', parseInt)\n .action(async (name: string | undefined, options: RunOptions) => {\n await runCommand(name, options);\n });\n}\n","import { join, basename } from 'node:path';\nimport { mkdir } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport { readMetaConfig, fileExists } from '../../core/config.js';\nimport * as output from '../../core/output.js';\n\ninterface CloneOptions {\n directory?: string;\n}\n\nfunction extractRepoName(url: string): string {\n const match = url.match(/\\/([^/]+?)(\\.git)?$/);\n return match?.[1] ?? 'repo';\n}\n\nexport async function cloneCommand(url: string, options: CloneOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const repoName = options.directory ?? extractRepoName(url);\n const targetDir = join(cwd, repoName);\n\n if (await fileExists(targetDir)) {\n throw new Error(`Directory \"${repoName}\" already exists`);\n }\n\n output.info(`Cloning meta repository: ${url}`);\n\n const cloneResult = await execute(`git clone \"${url}\" \"${repoName}\"`, { cwd });\n\n if (cloneResult.exitCode !== 0) {\n output.error(`Failed to clone meta repository`);\n output.commandOutput(cloneResult.stdout, cloneResult.stderr);\n process.exitCode = 1;\n return;\n }\n\n output.success(`Cloned meta repository to ${repoName}`);\n\n const metaPath = join(targetDir, '.gogo');\n if (!(await fileExists(metaPath))) {\n output.warning('No .gogo file found in cloned repository');\n return;\n }\n\n const config = await readMetaConfig(targetDir);\n const projects = Object.entries(config.projects);\n\n if (projects.length === 0) {\n output.info('No child repositories defined in .gogo');\n return;\n }\n\n output.info(`Cloning ${projects.length} child repositories...`);\n\n let successCount = 0;\n let failCount = 0;\n\n for (const [projectPath, projectUrl] of projects) {\n const projectDir = join(targetDir, projectPath);\n\n if (await fileExists(projectDir)) {\n output.projectStatus(projectPath, 'success', 'already exists');\n successCount++;\n continue;\n }\n\n const parentDir = join(targetDir, projectPath, '..');\n await mkdir(parentDir, { recursive: true });\n\n const result = await execute(`git clone \"${projectUrl}\" \"${basename(projectPath)}\"`, {\n cwd: parentDir,\n });\n\n if (result.exitCode === 0) {\n output.projectStatus(projectPath, 'success', 'cloned');\n successCount++;\n } else {\n output.projectStatus(projectPath, 'error', result.stderr || 'clone failed');\n failCount++;\n }\n }\n\n output.summary({ success: successCount, failed: failCount, total: projects.length });\n\n if (failCount > 0) {\n process.exitCode = 1;\n }\n}\n","import { join, basename } from 'node:path';\nimport { mkdir } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport { readMetaConfig, getMetaDir, fileExists } from '../../core/config.js';\nimport { applyFilters, createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface UpdateOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function updateCommand(options: UpdateOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n let projectEntries = Object.entries(config.projects);\n const projectPaths = projectEntries.map(([path]) => path);\n const filteredPaths = applyFilters(projectPaths, filterOptions);\n projectEntries = projectEntries.filter(([path]) => filteredPaths.includes(path));\n\n if (projectEntries.length === 0) {\n output.warning('No projects match the specified filters');\n return;\n }\n\n output.info(`Checking ${projectEntries.length} repositories...`);\n\n const missing: Array<[string, string]> = [];\n\n for (const [projectPath, projectUrl] of projectEntries) {\n const projectDir = join(metaDir, projectPath);\n if (!(await fileExists(projectDir))) {\n missing.push([projectPath, projectUrl]);\n }\n }\n\n if (missing.length === 0) {\n output.success('All repositories are already cloned');\n return;\n }\n\n output.info(`Cloning ${missing.length} missing repositories...`);\n\n let successCount = 0;\n let failCount = 0;\n\n const cloneOne = async ([projectPath, projectUrl]: [string, string]): Promise<boolean> => {\n const projectDir = join(metaDir, projectPath);\n const parentDir = join(projectDir, '..');\n\n await mkdir(parentDir, { recursive: true });\n\n const result = await execute(`git clone \"${projectUrl}\" \"${basename(projectPath)}\"`, {\n cwd: parentDir,\n });\n\n if (result.exitCode === 0) {\n output.projectStatus(projectPath, 'success', 'cloned');\n return true;\n } else {\n output.projectStatus(projectPath, 'error', result.stderr || 'clone failed');\n return false;\n }\n };\n\n if (options.parallel) {\n const concurrency = options.concurrency ?? 4;\n const results: boolean[] = [];\n\n for (let i = 0; i < missing.length; i += concurrency) {\n const batch = missing.slice(i, i + concurrency);\n const batchResults = await Promise.all(batch.map(cloneOne));\n results.push(...batchResults);\n }\n\n successCount = results.filter(Boolean).length;\n failCount = results.filter((r) => !r).length;\n } else {\n for (const entry of missing) {\n const success = await cloneOne(entry);\n if (success) {\n successCount++;\n } else {\n failCount++;\n }\n }\n }\n\n output.summary({ success: successCount, failed: failCount, total: missing.length });\n\n if (failCount > 0) {\n process.exitCode = 1;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface StatusOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n}\n\nexport async function statusCommand(options: StatusOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info('Checking git status across repositories...');\n\n const results = await loop('git status --short --branch', { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface PullOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function pullCommand(options: PullOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info('Pulling changes across repositories...');\n\n const results = await loop('git pull', { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface PushOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n}\n\nexport async function pushCommand(options: PushOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info('Pushing changes across repositories...');\n\n const results = await loop('git push', { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface BranchOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n delete?: boolean;\n all?: boolean;\n}\n\nexport async function branchCommand(name: string | undefined, options: BranchOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n let command: string;\n let actionMessage: string;\n\n if (name) {\n if (options.delete) {\n command = `git branch -d \"${name}\"`;\n actionMessage = `Deleting branch \"${name}\" across repositories...`;\n } else {\n command = `git branch \"${name}\"`;\n actionMessage = `Creating branch \"${name}\" across repositories...`;\n }\n } else {\n command = options.all ? 'git branch -a' : 'git branch';\n actionMessage = 'Listing branches across repositories...';\n }\n\n output.info(actionMessage);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface CheckoutOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n create?: boolean;\n}\n\nexport async function checkoutCommand(branch: string, options: CheckoutOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n const flag = options.create ? '-b ' : '';\n const command = `git checkout ${flag}\"${branch}\"`;\n const actionMessage = options.create\n ? `Creating and checking out branch \"${branch}\" across repositories...`\n : `Checking out branch \"${branch}\" across repositories...`;\n\n output.info(actionMessage);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface CommitOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n message: string;\n}\n\nexport async function commitCommand(options: CommitOptions): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n const escapedMessage = options.message.replace(/\"/g, '\\\\\"');\n const command = `git commit -m \"${escapedMessage}\"`;\n\n output.info('Committing changes across repositories...');\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: false,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { Command } from 'commander';\nimport { cloneCommand } from './clone.js';\nimport { updateCommand } from './update.js';\nimport { statusCommand } from './status.js';\nimport { pullCommand } from './pull.js';\nimport { pushCommand } from './push.js';\nimport { branchCommand } from './branch.js';\nimport { checkoutCommand } from './checkout.js';\nimport { commitCommand } from './commit.js';\n\ninterface GitCommandOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport function registerGitCommands(program: Command): void {\n const git = program\n .command('git')\n .description('Git operations across all repositories');\n\n git\n .command('clone <url>')\n .description('Clone a meta repository and all child repositories')\n .option('-d, --directory <dir>', 'Target directory name')\n .action(async (url: string, options: { directory?: string }) => {\n await cloneCommand(url, options);\n });\n\n git\n .command('update')\n .description('Clone any missing child repositories defined in .gogo')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Clone in parallel')\n .option('--concurrency <number>', 'Max parallel clones', parseInt)\n .action(async (options: GitCommandOptions) => {\n await updateCommand(options);\n });\n\n git\n .command('status')\n .description('Show git status across all repositories')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (options: GitCommandOptions) => {\n await statusCommand(options);\n });\n\n git\n .command('pull')\n .description('Pull changes in all repositories')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel operations', parseInt)\n .action(async (options: GitCommandOptions) => {\n await pullCommand(options);\n });\n\n git\n .command('push')\n .description('Push changes in all repositories')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (options: GitCommandOptions) => {\n await pushCommand(options);\n });\n\n git\n .command('branch [name]')\n .description('List, create, or delete branches')\n .option('-d, --delete', 'Delete the branch')\n .option('-a, --all', 'List all branches (local and remote)')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (name: string | undefined, options: GitCommandOptions & { delete?: boolean; all?: boolean }) => {\n await branchCommand(name, options);\n });\n\n git\n .command('checkout <branch>')\n .description('Checkout a branch in all repositories')\n .option('-b, --create', 'Create the branch if it does not exist')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (branch: string, options: GitCommandOptions & { create?: boolean }) => {\n await checkoutCommand(branch, options);\n });\n\n git\n .command('commit')\n .description('Commit changes in all repositories')\n .requiredOption('-m, --message <message>', 'Commit message')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .action(async (options: GitCommandOptions & { message: string }) => {\n await commitCommand(options);\n });\n}\n","import { join } from 'node:path';\nimport { mkdir, appendFile } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport {\n readMetaConfig,\n writeMetaConfig,\n getMetaDir,\n addProject,\n fileExists,\n} from '../../core/config.js';\nimport * as output from '../../core/output.js';\n\nexport async function createCommand(folder: string, url: string): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const projectDir = join(metaDir, folder);\n\n if (await fileExists(projectDir)) {\n throw new Error(`Directory \"${folder}\" already exists`);\n }\n\n output.info(`Creating new project: ${folder}`);\n\n await mkdir(projectDir, { recursive: true });\n\n const initResult = await execute('git init', { cwd: projectDir });\n if (initResult.exitCode !== 0) {\n throw new Error(`Failed to initialize git repository: ${initResult.stderr}`);\n }\n\n const remoteResult = await execute(`git remote add origin \"${url}\"`, { cwd: projectDir });\n if (remoteResult.exitCode !== 0) {\n throw new Error(`Failed to add remote: ${remoteResult.stderr}`);\n }\n\n const config = await readMetaConfig(metaDir);\n const updatedConfig = addProject(config, folder, url);\n await writeMetaConfig(metaDir, updatedConfig);\n\n const gitignorePath = join(metaDir, '.gitignore');\n if (await fileExists(gitignorePath)) {\n await appendFile(gitignorePath, `\\n${folder}\\n`);\n output.info(`Added ${folder} to .gitignore`);\n }\n\n output.success(`Created project \"${folder}\"`);\n output.info(`Repository initialized with remote: ${url}`);\n}\n","import { join, basename } from 'node:path';\nimport { mkdir, appendFile } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport {\n readMetaConfig,\n writeMetaConfig,\n getMetaDir,\n addProject,\n fileExists,\n} from '../../core/config.js';\nimport * as output from '../../core/output.js';\n\nasync function getRemoteUrl(dir: string): Promise<string | null> {\n const result = await execute('git remote get-url origin', { cwd: dir });\n if (result.exitCode === 0 && result.stdout) {\n return result.stdout.trim();\n }\n return null;\n}\n\nexport async function importCommand(folder: string, url?: string): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const projectDir = join(metaDir, folder);\n const projectExists = await fileExists(projectDir);\n\n if (projectExists) {\n const existingUrl = await getRemoteUrl(projectDir);\n\n if (!existingUrl && !url) {\n throw new Error(\n `Directory \"${folder}\" exists but has no remote. Provide a URL to set one.`\n );\n }\n\n const finalUrl = url ?? existingUrl;\n\n if (url && existingUrl && url !== existingUrl) {\n output.warning(`Existing remote URL differs from provided URL`);\n output.info(`Existing: ${existingUrl}`);\n output.info(`Provided: ${url}`);\n }\n\n const config = await readMetaConfig(metaDir);\n const updatedConfig = addProject(config, folder, finalUrl!);\n await writeMetaConfig(metaDir, updatedConfig);\n\n output.success(`Imported existing project \"${folder}\"`);\n output.info(`Repository URL: ${finalUrl}`);\n } else {\n if (!url) {\n throw new Error('URL is required when importing a non-existent project');\n }\n\n output.info(`Cloning ${url} into ${folder}...`);\n\n const parentDir = join(metaDir, folder, '..');\n await mkdir(parentDir, { recursive: true });\n\n const cloneResult = await execute(`git clone \"${url}\" \"${basename(folder)}\"`, {\n cwd: parentDir,\n });\n\n if (cloneResult.exitCode !== 0) {\n throw new Error(`Failed to clone repository: ${cloneResult.stderr}`);\n }\n\n const config = await readMetaConfig(metaDir);\n const updatedConfig = addProject(config, folder, url);\n await writeMetaConfig(metaDir, updatedConfig);\n\n output.success(`Imported project \"${folder}\"`);\n }\n\n const gitignorePath = join(metaDir, '.gitignore');\n if (await fileExists(gitignorePath)) {\n await appendFile(gitignorePath, `\\n${folder}\\n`);\n output.info(`Added ${folder} to .gitignore`);\n }\n}\n","import { Command } from 'commander';\nimport { createCommand } from './create.js';\nimport { importCommand } from './import.js';\n\nexport function registerProjectCommands(program: Command): void {\n const project = program\n .command('project')\n .description('Project management commands');\n\n project\n .command('create <folder> <url>')\n .description('Create and initialize a new child repository')\n .action(async (folder: string, url: string) => {\n await createCommand(folder, url);\n });\n\n project\n .command('import <folder> [url]')\n .description('Import an existing repository as a child project')\n .action(async (folder: string, url?: string) => {\n await importCommand(folder, url);\n });\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface InstallOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function installCommand(\n variant: 'install' | 'ci',\n options: InstallOptions = {}\n): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n const command = `npm ${variant}`;\n output.info(`Running \"${command}\" across repositories...`);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { join } from 'node:path';\nimport { readFile, symlink, unlink, mkdir } from 'node:fs/promises';\nimport { readMetaConfig, getMetaDir, fileExists } from '../../core/config.js';\nimport { applyFilters, createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface LinkOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n all?: boolean;\n}\n\ninterface PackageJson {\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nasync function readPackageJson(dir: string): Promise<PackageJson | null> {\n const packageJsonPath = join(dir, 'package.json');\n if (!(await fileExists(packageJsonPath))) {\n return null;\n }\n\n try {\n const content = await readFile(packageJsonPath, 'utf-8');\n return JSON.parse(content) as PackageJson;\n } catch {\n return null;\n }\n}\n\nasync function createSymlink(target: string, linkPath: string): Promise<boolean> {\n try {\n if (await fileExists(linkPath)) {\n await unlink(linkPath);\n }\n\n const parentDir = join(linkPath, '..');\n await mkdir(parentDir, { recursive: true });\n\n await symlink(target, linkPath, 'dir');\n return true;\n } catch {\n output.error(`Failed to create symlink: ${linkPath} -> ${target}`);\n return false;\n }\n}\n\nexport async function linkCommand(options: LinkOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n let projectPaths = Object.keys(config.projects);\n projectPaths = applyFilters(projectPaths, filterOptions);\n\n if (projectPaths.length === 0) {\n output.warning('No projects match the specified filters');\n return;\n }\n\n const projectPackages: Map<string, { path: string; packageJson: PackageJson }> = new Map();\n\n for (const projectPath of projectPaths) {\n const fullPath = join(metaDir, projectPath);\n const packageJson = await readPackageJson(fullPath);\n\n if (packageJson?.name) {\n projectPackages.set(packageJson.name, { path: fullPath, packageJson });\n }\n }\n\n if (projectPackages.size === 0) {\n output.warning('No projects with package.json found');\n return;\n }\n\n output.info(`Found ${projectPackages.size} linkable projects`);\n\n let linkCount = 0;\n\n if (options.all) {\n for (const [consumerName, consumer] of projectPackages) {\n const allDeps = {\n ...consumer.packageJson.dependencies,\n ...consumer.packageJson.devDependencies,\n };\n\n for (const [depName] of Object.entries(allDeps)) {\n const provider = projectPackages.get(depName);\n if (provider) {\n const nodeModulesPath = join(consumer.path, 'node_modules', depName);\n const success = await createSymlink(provider.path, nodeModulesPath);\n\n if (success) {\n output.projectStatus(\n `${consumerName}`,\n 'success',\n `linked ${depName}`\n );\n linkCount++;\n }\n }\n }\n }\n } else {\n for (const [packageName, info] of projectPackages) {\n output.info(`Creating global link for ${packageName}...`);\n const { execute } = await import('../../core/executor.js');\n const result = await execute('npm link', { cwd: info.path });\n\n if (result.exitCode === 0) {\n output.projectStatus(packageName, 'success', 'linked globally');\n linkCount++;\n } else {\n output.projectStatus(packageName, 'error', result.stderr);\n }\n }\n }\n\n output.success(`Created ${linkCount} links`);\n}\n","import { join } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { readMetaConfig, getMetaDir, fileExists } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\nimport type { ExecutorResult } from '../../types/index.js';\n\ninterface RunOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n ifPresent?: boolean;\n}\n\nasync function hasScript(dir: string, scriptName: string): Promise<boolean> {\n const packageJsonPath = join(dir, 'package.json');\n if (!(await fileExists(packageJsonPath))) {\n return false;\n }\n\n try {\n const content = await readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(content) as { scripts?: Record<string, string> };\n return scriptName in (packageJson.scripts ?? {});\n } catch {\n return false;\n }\n}\n\nexport async function runCommand(script: string, options: RunOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info(`Running \"npm run ${script}\" across repositories...`);\n\n const command = options.ifPresent\n ? async (dir: string, _projectPath: string): Promise<ExecutorResult> => {\n const hasScriptResult = await hasScript(dir, script);\n if (!hasScriptResult) {\n return {\n exitCode: 0,\n stdout: `Script \"${script}\" not found, skipping`,\n stderr: '',\n };\n }\n\n const { execute } = await import('../../core/executor.js');\n return execute(`npm run ${script}`, { cwd: dir });\n }\n : `npm run ${script}`;\n\n if (options.ifPresent && typeof command === 'function') {\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n } else {\n const results = await loop(command as string, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n }\n}\n","import { Command } from 'commander';\nimport { installCommand } from './install.js';\nimport { linkCommand } from './link.js';\nimport { runCommand } from './run.js';\n\ninterface NpmCommandOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport function registerNpmCommands(program: Command): void {\n const npm = program\n .command('npm')\n .description('NPM operations across all repositories');\n\n npm\n .command('install')\n .alias('i')\n .description('Run npm install in all projects')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel processes', parseInt)\n .action(async (options: NpmCommandOptions) => {\n await installCommand('install', options);\n });\n\n npm\n .command('ci')\n .description('Run npm ci in all projects')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel processes', parseInt)\n .action(async (options: NpmCommandOptions) => {\n await installCommand('ci', options);\n });\n\n npm\n .command('link')\n .description('Create npm links between projects')\n .option('--all', 'Link all projects bidirectionally')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .action(async (options: NpmCommandOptions & { all?: boolean }) => {\n await linkCommand(options);\n });\n\n npm\n .command('run <script>')\n .description('Run an npm script in all projects')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel processes', parseInt)\n .option('--if-present', 'Only run if script exists')\n .action(async (script: string, options: NpmCommandOptions & { ifPresent?: boolean }) => {\n await runCommand(script, options);\n });\n}\n","import { Command } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { registerInitCommand } from './commands/init.js';\nimport { registerExecCommand } from './commands/exec.js';\nimport { registerRunCommand } from './commands/run.js';\nimport { registerGitCommands } from './commands/git/index.js';\nimport { registerProjectCommands } from './commands/project/index.js';\nimport { registerNpmCommands } from './commands/npm/index.js';\nimport * as output from './core/output.js';\n\nfunction getVersion(): string {\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const packageJsonPath = join(__dirname, '..', 'package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n return packageJson.version;\n } catch {\n return '0.0.0';\n }\n}\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name('gogo')\n .description('A modern CLI tool for managing multi-repository projects')\n .version(getVersion())\n .option('--include-only <dirs>', 'Only include specified directories (comma-separated)')\n .option('--exclude-only <dirs>', 'Exclude specified directories (comma-separated)')\n .option('--include-pattern <regex>', 'Include directories matching regex pattern')\n .option('--exclude-pattern <regex>', 'Exclude directories matching regex pattern')\n .option('--parallel', 'Execute commands in parallel')\n .option('--concurrency <number>', 'Max parallel processes (default: 4)', parseInt);\n\n registerInitCommand(program);\n registerExecCommand(program);\n registerRunCommand(program);\n registerGitCommands(program);\n registerProjectCommands(program);\n registerNpmCommands(program);\n\n return program;\n}\n\nasync function main(): Promise<void> {\n const program = createProgram();\n\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n if (error instanceof Error) {\n output.error(error.message);\n } else {\n output.error('An unexpected error occurred');\n }\n process.exit(1);\n }\n}\n\nmain();\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/core/executor.ts","../src/types/index.ts","../src/core/config.ts","../src/core/output.ts","../src/commands/init.ts","../src/core/loop.ts","../src/core/filter.ts","../src/commands/exec.ts","../src/commands/run.ts","../src/commands/git/clone.ts","../src/commands/git/update.ts","../src/commands/git/status.ts","../src/commands/git/pull.ts","../src/commands/git/push.ts","../src/commands/git/branch.ts","../src/commands/git/checkout.ts","../src/commands/git/commit.ts","../src/commands/git/index.ts","../src/commands/project/create.ts","../src/commands/project/import.ts","../src/commands/project/index.ts","../src/commands/npm/install.ts","../src/commands/npm/link.ts","../src/commands/npm/run.ts","../src/commands/npm/index.ts","../src/cli.ts"],"names":["error","join","basename","mkdir","success","config","updatedConfig","appendFile","readFile","info","execute","runCommand","dirname"],"mappings":"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","file":"cli.js","sourcesContent":["import { spawn, execSync, type ExecSyncOptions } from 'node:child_process';\nimport type { ExecutorOptions, ExecutorResult } from '../types/index.js';\n\nconst DEFAULT_TIMEOUT = 300_000; // 5 minutes\n\nexport async function execute(command: string, options: ExecutorOptions): Promise<ExecutorResult> {\n const { cwd, env = process.env, timeout = DEFAULT_TIMEOUT, shell = true } = options;\n\n return new Promise((resolve) => {\n let stdout = '';\n let stderr = '';\n let timedOut = false;\n\n const isUnix = process.platform !== 'win32';\n const child = spawn(command, {\n cwd,\n env,\n shell,\n stdio: ['inherit', 'pipe', 'pipe'],\n detached: isUnix,\n });\n\n const killProcessGroup = (signal: NodeJS.Signals) => {\n if (isUnix && child.pid) {\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n } else {\n child.kill(signal);\n }\n };\n\n const timeoutId = setTimeout(() => {\n timedOut = true;\n killProcessGroup('SIGTERM');\n setTimeout(() => {\n if (!child.killed) {\n killProcessGroup('SIGKILL');\n }\n }, 5000);\n }, timeout);\n\n child.stdout?.on('data', (data: Buffer) => {\n stdout += data.toString();\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n stderr += data.toString();\n });\n\n child.on('close', (code) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: code ?? (timedOut ? 124 : 1),\n stdout: stdout.trim(),\n stderr: stderr.trim(),\n timedOut,\n });\n });\n\n child.on('error', (err) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: 1,\n stdout: '',\n stderr: err.message,\n timedOut: false,\n });\n });\n });\n}\n\nfunction getShellPath(shell: boolean | undefined): string | undefined {\n if (shell === false || shell === undefined) return undefined;\n return process.platform === 'win32' ? process.env['ComSpec'] || 'cmd.exe' : '/bin/sh';\n}\n\nexport function executeSync(command: string, options: ExecutorOptions): ExecutorResult {\n const { cwd, env = process.env, timeout = DEFAULT_TIMEOUT, shell = true } = options;\n\n try {\n const execOptions: ExecSyncOptions = {\n cwd,\n env,\n shell: getShellPath(shell),\n timeout,\n encoding: 'utf-8',\n stdio: ['inherit', 'pipe', 'pipe'],\n };\n const result = execSync(command, execOptions) as string;\n\n return {\n exitCode: 0,\n stdout: result.trim(),\n stderr: '',\n timedOut: false,\n };\n } catch (error: unknown) {\n const err = error as {\n status?: number;\n stdout?: string;\n stderr?: string;\n killed?: boolean;\n signal?: string;\n };\n\n return {\n exitCode: err.status ?? 1,\n stdout: err.stdout?.trim() ?? '',\n stderr: err.stderr?.trim() ?? '',\n timedOut: err.killed === true || err.signal === 'SIGTERM',\n };\n }\n}\n\nexport async function executeStreaming(\n command: string,\n options: ExecutorOptions & {\n onStdout?: (data: string) => void;\n onStderr?: (data: string) => void;\n }\n): Promise<ExecutorResult> {\n const { cwd, env = process.env, timeout = DEFAULT_TIMEOUT, shell = true, onStdout, onStderr } = options;\n\n return new Promise((resolve) => {\n let stdout = '';\n let stderr = '';\n let timedOut = false;\n\n const isUnix = process.platform !== 'win32';\n const child = spawn(command, {\n cwd,\n env,\n shell,\n stdio: ['inherit', 'pipe', 'pipe'],\n detached: isUnix,\n });\n\n const killProcessGroup = (signal: NodeJS.Signals) => {\n if (isUnix && child.pid) {\n try {\n process.kill(-child.pid, signal);\n } catch {\n child.kill(signal);\n }\n } else {\n child.kill(signal);\n }\n };\n\n const timeoutId = setTimeout(() => {\n timedOut = true;\n killProcessGroup('SIGTERM');\n }, timeout);\n\n child.stdout?.on('data', (data: Buffer) => {\n const str = data.toString();\n stdout += str;\n onStdout?.(str);\n });\n\n child.stderr?.on('data', (data: Buffer) => {\n const str = data.toString();\n stderr += str;\n onStderr?.(str);\n });\n\n child.on('close', (code) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: code ?? (timedOut ? 124 : 1),\n stdout: stdout.trim(),\n stderr: stderr.trim(),\n timedOut,\n });\n });\n\n child.on('error', (err) => {\n clearTimeout(timeoutId);\n resolve({\n exitCode: 1,\n stdout: '',\n stderr: err.message,\n timedOut: false,\n });\n });\n });\n}\n","import { z } from 'zod';\n\nexport const CommandConfigObjectSchema = z.object({\n cmd: z.string(),\n description: z.string().optional(),\n parallel: z.boolean().optional(),\n concurrency: z.number().int().positive().optional(),\n includeOnly: z.array(z.string()).optional(),\n excludeOnly: z.array(z.string()).optional(),\n includePattern: z.string().optional(),\n excludePattern: z.string().optional(),\n});\n\nexport const CommandConfigSchema = z.union([\n z.string(),\n CommandConfigObjectSchema,\n]);\n\nexport type CommandConfigObject = z.infer<typeof CommandConfigObjectSchema>;\nexport type CommandConfig = z.infer<typeof CommandConfigSchema>;\n\nexport const MetaConfigSchema = z.object({\n projects: z.record(z.string(), z.string()),\n ignore: z.array(z.string()).default(['.git', 'node_modules', '.vagrant', '.vscode']),\n commands: z.record(z.string(), CommandConfigSchema).optional(),\n});\n\nexport type MetaConfig = z.infer<typeof MetaConfigSchema>;\n\nexport const LoopRcSchema = z.object({\n ignore: z.array(z.string()).default([]),\n});\n\nexport type LoopRc = z.infer<typeof LoopRcSchema>;\n\nexport interface FilterOptions {\n includeOnly?: string[] | undefined;\n excludeOnly?: string[] | undefined;\n includePattern?: RegExp | undefined;\n excludePattern?: RegExp | undefined;\n}\n\nexport interface ExecutorOptions {\n cwd: string;\n env?: NodeJS.ProcessEnv | undefined;\n timeout?: number | undefined;\n shell?: boolean | undefined;\n}\n\nexport interface ExecutorResult {\n exitCode: number;\n stdout: string;\n stderr: string;\n timedOut?: boolean | undefined;\n}\n\nexport interface LoopOptions extends FilterOptions {\n parallel?: boolean | undefined;\n concurrency?: number | undefined;\n suppressOutput?: boolean | undefined;\n}\n\nexport interface LoopResult {\n directory: string;\n result: ExecutorResult;\n success: boolean;\n duration: number;\n}\n\nexport interface ProjectInfo {\n path: string;\n url: string;\n exists: boolean;\n}\n\nexport type CommandHandler<T = void> = (options: T) => Promise<void>;\n","import { readFile, writeFile, access } from 'node:fs/promises';\nimport { join, dirname } from 'node:path';\nimport { MetaConfigSchema, LoopRcSchema, type MetaConfig, type LoopRc, type CommandConfig } from '../types/index.js';\n\nexport const META_FILE = '.gogo';\nexport const LOOPRC_FILE = '.looprc';\n\nexport class ConfigError extends Error {\n constructor(message: string, public readonly path?: string) {\n super(message);\n this.name = 'ConfigError';\n }\n}\n\nexport async function fileExists(path: string): Promise<boolean> {\n try {\n await access(path);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function findFileUp(filename: string, startDir: string): Promise<string | null> {\n let currentDir = startDir;\n\n while (true) {\n const filePath = join(currentDir, filename);\n if (await fileExists(filePath)) {\n return filePath;\n }\n\n const parentDir = dirname(currentDir);\n if (parentDir === currentDir) {\n return null;\n }\n currentDir = parentDir;\n }\n}\n\nexport async function readMetaConfig(cwd: string): Promise<MetaConfig> {\n const metaPath = await findFileUp(META_FILE, cwd);\n\n if (!metaPath) {\n throw new ConfigError(\n `No ${META_FILE} file found. Run 'gogo init' to create one, or navigate to a directory with a ${META_FILE} file.`\n );\n }\n\n try {\n const content = await readFile(metaPath, 'utf-8');\n const parsed = JSON.parse(content);\n return MetaConfigSchema.parse(parsed);\n } catch (error) {\n if (error instanceof SyntaxError) {\n throw new ConfigError(`Invalid JSON in ${META_FILE} file`, metaPath);\n }\n if (error instanceof Error && error.name === 'ZodError') {\n throw new ConfigError(`Invalid ${META_FILE} file structure: ${error.message}`, metaPath);\n }\n throw error;\n }\n}\n\nexport async function writeMetaConfig(cwd: string, config: MetaConfig): Promise<void> {\n const metaPath = join(cwd, META_FILE);\n const validated = MetaConfigSchema.parse(config);\n const content = JSON.stringify(validated, null, 2) + '\\n';\n await writeFile(metaPath, content, 'utf-8');\n}\n\nexport async function readLoopRc(cwd: string): Promise<LoopRc | null> {\n const looprcPath = await findFileUp(LOOPRC_FILE, cwd);\n\n if (!looprcPath) {\n return null;\n }\n\n try {\n const content = await readFile(looprcPath, 'utf-8');\n const parsed = JSON.parse(content);\n return LoopRcSchema.parse(parsed);\n } catch {\n return null;\n }\n}\n\nexport function getMetaDir(cwd: string): Promise<string | null> {\n return findFileUp(META_FILE, cwd).then((path) => (path ? dirname(path) : null));\n}\n\nexport function createDefaultConfig(): MetaConfig {\n return {\n projects: {},\n ignore: ['.git', 'node_modules', '.vagrant', '.vscode'],\n };\n}\n\nexport function addProject(config: MetaConfig, path: string, url: string): MetaConfig {\n return {\n ...config,\n projects: {\n ...config.projects,\n [path]: url,\n },\n };\n}\n\nexport function removeProject(config: MetaConfig, path: string): MetaConfig {\n const { [path]: _removed, ...remainingProjects } = config.projects;\n return {\n ...config,\n projects: remainingProjects,\n };\n}\n\nexport function getProjectPaths(config: MetaConfig): string[] {\n return Object.keys(config.projects);\n}\n\nexport function getProjectUrl(config: MetaConfig, path: string): string | undefined {\n return config.projects[path];\n}\n\nexport interface ResolvedCommand {\n cmd: string;\n description?: string | undefined;\n parallel?: boolean | undefined;\n concurrency?: number | undefined;\n includeOnly?: string[] | undefined;\n excludeOnly?: string[] | undefined;\n includePattern?: string | undefined;\n excludePattern?: string | undefined;\n}\n\nexport function normalizeCommand(config: CommandConfig): ResolvedCommand {\n if (typeof config === 'string') {\n return { cmd: config };\n }\n return config;\n}\n\nexport function getCommand(metaConfig: MetaConfig, name: string): ResolvedCommand | undefined {\n const commands = metaConfig.commands;\n if (!commands) {\n return undefined;\n }\n const command = commands[name];\n if (command === undefined) {\n return undefined;\n }\n return normalizeCommand(command);\n}\n\nexport function listCommands(metaConfig: MetaConfig): Array<{ name: string; command: ResolvedCommand }> {\n const commands = metaConfig.commands ?? {};\n return Object.entries(commands).map(([name, config]) => ({\n name,\n command: normalizeCommand(config),\n }));\n}\n","import pc from 'picocolors';\n\nexport const symbols = {\n success: pc.green('✓'),\n error: pc.red('✗'),\n warning: pc.yellow('⚠'),\n info: pc.blue('ℹ'),\n arrow: pc.cyan('→'),\n bullet: pc.gray('•'),\n} as const;\n\nexport function success(message: string): void {\n console.log(`${symbols.success} ${message}`);\n}\n\nexport function error(message: string): void {\n console.error(`${symbols.error} ${pc.red(message)}`);\n}\n\nexport function warning(message: string): void {\n console.warn(`${symbols.warning} ${pc.yellow(message)}`);\n}\n\nexport function info(message: string): void {\n console.log(`${symbols.info} ${message}`);\n}\n\nexport function header(directory: string): void {\n console.log(`\\n${symbols.arrow} ${pc.bold(pc.cyan(directory))}`);\n}\n\nexport function dim(message: string): void {\n console.log(pc.dim(message));\n}\n\nexport function bold(message: string): string {\n return pc.bold(message);\n}\n\nexport function projectStatus(directory: string, status: 'success' | 'error', message?: string): void {\n const symbol = status === 'success' ? symbols.success : symbols.error;\n const colorFn = status === 'success' ? pc.green : pc.red;\n const suffix = message ? ` ${pc.dim(message)}` : '';\n console.log(`${symbol} ${colorFn(directory)}${suffix}`);\n}\n\nexport function commandOutput(stdout: string, stderr: string): void {\n if (stdout.trim()) {\n console.log(stdout);\n }\n if (stderr.trim()) {\n console.error(pc.dim(stderr));\n }\n}\n\nexport function summary(results: { success: number; failed: number; total: number }): void {\n const { success: successCount, failed, total } = results;\n\n console.log('');\n if (failed === 0) {\n console.log(`${symbols.success} ${pc.green(`All ${total} projects completed successfully`)}`);\n } else {\n console.log(\n `${symbols.warning} ${pc.yellow(`${successCount}/${total} projects succeeded, ${failed} failed`)}`\n );\n }\n}\n\nexport function formatDuration(ms: number): string {\n if (ms < 1000) {\n return `${ms}ms`;\n }\n const seconds = (ms / 1000).toFixed(1);\n return `${seconds}s`;\n}\n","import { Command } from 'commander';\nimport { join } from 'node:path';\nimport { writeMetaConfig, createDefaultConfig, fileExists, META_FILE } from '../core/config.js';\nimport * as output from '../core/output.js';\n\ninterface InitOptions {\n force?: boolean;\n}\n\nexport async function initCommand(options: InitOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaPath = join(cwd, META_FILE);\n\n if (await fileExists(metaPath)) {\n if (!options.force) {\n throw new Error(\n `${META_FILE} file already exists. Use --force to overwrite.`\n );\n }\n output.warning(`Overwriting existing ${META_FILE} file`);\n }\n\n const config = createDefaultConfig();\n await writeMetaConfig(cwd, config);\n\n output.success(`Created ${META_FILE} file in ${cwd}`);\n output.info('Add projects with: gogo project import <folder> <repo-url>');\n}\n\nexport function registerInitCommand(program: Command): void {\n program\n .command('init')\n .description('Initialize a new gogo-meta repository')\n .option('-f, --force', 'Overwrite existing .gogo file')\n .action(async (options: InitOptions) => {\n await initCommand(options);\n });\n}\n","import { join } from 'node:path';\nimport { execute } from './executor.js';\nimport { applyFilters } from './filter.js';\nimport { getProjectPaths, readLoopRc } from './config.js';\nimport * as output from './output.js';\nimport type { MetaConfig, LoopOptions, LoopResult, ExecutorResult } from '../types/index.js';\n\nconst DEFAULT_CONCURRENCY = 4;\n\nexport interface LoopContext {\n config: MetaConfig;\n metaDir: string;\n}\n\ntype CommandFn = (dir: string, projectPath: string) => Promise<ExecutorResult>;\n\nasync function runSequential(\n command: string | CommandFn,\n directories: string[],\n context: LoopContext,\n options: LoopOptions\n): Promise<LoopResult[]> {\n const results: LoopResult[] = [];\n\n for (const projectPath of directories) {\n const absoluteDir = join(context.metaDir, projectPath);\n\n if (!options.suppressOutput) {\n output.header(projectPath);\n }\n\n const start = Date.now();\n\n let result: ExecutorResult;\n if (typeof command === 'function') {\n result = await command(absoluteDir, projectPath);\n } else {\n result = await execute(command, { cwd: absoluteDir });\n }\n\n const duration = Date.now() - start;\n\n if (!options.suppressOutput) {\n output.commandOutput(result.stdout, result.stderr);\n }\n\n results.push({\n directory: projectPath,\n result,\n success: result.exitCode === 0,\n duration,\n });\n }\n\n return results;\n}\n\nasync function runParallel(\n command: string | CommandFn,\n directories: string[],\n context: LoopContext,\n options: LoopOptions\n): Promise<LoopResult[]> {\n const concurrency = options.concurrency ?? DEFAULT_CONCURRENCY;\n const results: LoopResult[] = [];\n const pending: Promise<void>[] = [];\n let index = 0;\n\n const runOne = async (projectPath: string): Promise<void> => {\n const absoluteDir = join(context.metaDir, projectPath);\n const start = Date.now();\n\n let result: ExecutorResult;\n if (typeof command === 'function') {\n result = await command(absoluteDir, projectPath);\n } else {\n result = await execute(command, { cwd: absoluteDir });\n }\n\n const duration = Date.now() - start;\n\n results.push({\n directory: projectPath,\n result,\n success: result.exitCode === 0,\n duration,\n });\n };\n\n const runNext = async (): Promise<void> => {\n while (index < directories.length) {\n const currentIndex = index++;\n const projectPath = directories[currentIndex];\n if (projectPath) {\n await runOne(projectPath);\n }\n }\n };\n\n const workers = Math.min(concurrency, directories.length);\n for (let i = 0; i < workers; i++) {\n pending.push(runNext());\n }\n\n await Promise.all(pending);\n\n const orderedResults = directories\n .map((dir) => results.find((r) => r.directory === dir))\n .filter((r): r is LoopResult => r !== undefined);\n\n if (!options.suppressOutput) {\n for (const result of orderedResults) {\n output.header(result.directory);\n output.commandOutput(result.result.stdout, result.result.stderr);\n }\n }\n\n return orderedResults;\n}\n\nexport async function loop(\n command: string | CommandFn,\n context: LoopContext,\n options: LoopOptions = {}\n): Promise<LoopResult[]> {\n let directories = getProjectPaths(context.config);\n\n const loopRc = await readLoopRc(context.metaDir);\n if (loopRc?.ignore) {\n const ignoreSet = new Set(loopRc.ignore);\n directories = directories.filter((dir) => !ignoreSet.has(dir));\n }\n\n directories = applyFilters(directories, options);\n\n if (directories.length === 0) {\n output.warning('No projects match the specified filters');\n return [];\n }\n\n const results = options.parallel\n ? await runParallel(command, directories, context, options)\n : await runSequential(command, directories, context, options);\n\n if (!options.suppressOutput) {\n const successCount = results.filter((r) => r.success).length;\n const failedCount = results.length - successCount;\n output.summary({ success: successCount, failed: failedCount, total: results.length });\n }\n\n return results;\n}\n\nexport function hasFailures(results: LoopResult[]): boolean {\n return results.some((r) => !r.success);\n}\n\nexport function getExitCode(results: LoopResult[]): number {\n return hasFailures(results) ? 1 : 0;\n}\n","import { basename } from 'node:path';\nimport type { FilterOptions } from '../types/index.js';\n\nexport function applyFilters(directories: string[], options: FilterOptions): string[] {\n let result = [...directories];\n\n if (options.includeOnly && options.includeOnly.length > 0) {\n const includeSet = new Set(options.includeOnly);\n result = result.filter((dir) => includeSet.has(dir) || includeSet.has(basename(dir)));\n }\n\n if (options.excludeOnly && options.excludeOnly.length > 0) {\n const excludeSet = new Set(options.excludeOnly);\n result = result.filter((dir) => !excludeSet.has(dir) && !excludeSet.has(basename(dir)));\n }\n\n if (options.includePattern) {\n result = result.filter((dir) => options.includePattern!.test(dir));\n }\n\n if (options.excludePattern) {\n result = result.filter((dir) => !options.excludePattern!.test(dir));\n }\n\n return result;\n}\n\nexport function parseFilterList(input: string | undefined): string[] | undefined {\n if (!input) {\n return undefined;\n }\n return input\n .split(',')\n .map((s) => s.trim())\n .filter((s) => s.length > 0);\n}\n\nexport function parseFilterPattern(input: string | undefined): RegExp | undefined {\n if (!input) {\n return undefined;\n }\n try {\n return new RegExp(input);\n } catch {\n throw new Error(`Invalid regex pattern: ${input}`);\n }\n}\n\nexport function createFilterOptions(options: {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n}): FilterOptions {\n return {\n includeOnly: parseFilterList(options.includeOnly),\n excludeOnly: parseFilterList(options.excludeOnly),\n includePattern: parseFilterPattern(options.includePattern),\n excludePattern: parseFilterPattern(options.excludePattern),\n };\n}\n\nexport function filterFromLoopRc(\n directories: string[],\n ignore: string[]\n): string[] {\n if (ignore.length === 0) {\n return directories;\n }\n\n const ignoreSet = new Set(ignore);\n return directories.filter((dir) => {\n const dirBasename = basename(dir);\n return !ignoreSet.has(dir) && !ignoreSet.has(dirBasename);\n });\n}\n","import { Command } from 'commander';\nimport { readMetaConfig, getMetaDir } from '../core/config.js';\nimport { loop, getExitCode } from '../core/loop.js';\nimport { createFilterOptions } from '../core/filter.js';\nimport * as output from '../core/output.js';\n\ninterface ExecOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function execCommand(command: string, options: ExecOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info(`Executing: ${output.bold(command)}`);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n\nexport function registerExecCommand(program: Command): void {\n program\n .command('exec <command>')\n .description('Execute a command in all project directories')\n .option('--include-only <dirs>', 'Only include specified directories (comma-separated)')\n .option('--exclude-only <dirs>', 'Exclude specified directories (comma-separated)')\n .option('--include-pattern <regex>', 'Include directories matching regex pattern')\n .option('--exclude-pattern <regex>', 'Exclude directories matching regex pattern')\n .option('--parallel', 'Execute commands in parallel')\n .option('--concurrency <number>', 'Max parallel processes (default: 4)', parseInt)\n .action(async (command: string, options: ExecOptions) => {\n await execCommand(command, options);\n });\n}\n","import { Command } from 'commander';\nimport { readMetaConfig, getMetaDir, getCommand, listCommands, type ResolvedCommand } from '../core/config.js';\nimport { loop, getExitCode } from '../core/loop.js';\nimport { createFilterOptions, parseFilterPattern } from '../core/filter.js';\nimport * as output from '../core/output.js';\nimport type { FilterOptions, LoopOptions } from '../types/index.js';\n\ninterface RunOptions {\n list?: boolean;\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nfunction formatCommandList(commands: Array<{ name: string; command: ResolvedCommand }>): void {\n if (commands.length === 0) {\n output.info('No commands defined in .gogo file');\n output.dim(' Add commands to your .gogo file:');\n output.dim(' \"commands\": { \"build\": \"npm run build\" }');\n return;\n }\n\n output.info('Available commands:');\n console.log('');\n\n const maxNameLen = Math.max(...commands.map((c) => c.name.length));\n\n for (const { name, command } of commands) {\n const paddedName = name.padEnd(maxNameLen);\n const desc = command.description ?? command.cmd;\n console.log(` ${output.bold(paddedName)} ${desc}`);\n }\n}\n\nexport async function runCommand(name: string | undefined, options: RunOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n\n if (options.list || name === undefined) {\n formatCommandList(listCommands(config));\n return;\n }\n\n const commandDef = getCommand(config, name);\n\n if (!commandDef) {\n const available = Object.keys(config.commands ?? {});\n if (available.length === 0) {\n throw new Error(`Unknown command: \"${name}\". No commands are defined in .gogo file.`);\n }\n throw new Error(`Unknown command: \"${name}\". Available commands: ${available.join(', ')}`);\n }\n\n const cliFilterOptions = createFilterOptions(options);\n\n const mergedFilterOptions: FilterOptions = {\n includeOnly: cliFilterOptions.includeOnly ?? commandDef.includeOnly,\n excludeOnly: cliFilterOptions.excludeOnly ?? commandDef.excludeOnly,\n includePattern: cliFilterOptions.includePattern ?? parseFilterPattern(commandDef.includePattern),\n excludePattern: cliFilterOptions.excludePattern ?? parseFilterPattern(commandDef.excludePattern),\n };\n\n const loopOptions: LoopOptions = {\n ...mergedFilterOptions,\n parallel: options.parallel ?? commandDef.parallel,\n concurrency: options.concurrency ?? commandDef.concurrency,\n };\n\n output.info(`Running \"${name}\": ${output.bold(commandDef.cmd)}`);\n\n const results = await loop(commandDef.cmd, { config, metaDir }, loopOptions);\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n\nexport function registerRunCommand(program: Command): void {\n program\n .command('run [name]')\n .description('Run a predefined command from .gogo file')\n .option('-l, --list', 'List all available commands')\n .option('--include-only <dirs>', 'Only include specified directories (comma-separated)')\n .option('--exclude-only <dirs>', 'Exclude specified directories (comma-separated)')\n .option('--include-pattern <regex>', 'Include directories matching regex pattern')\n .option('--exclude-pattern <regex>', 'Exclude directories matching regex pattern')\n .option('--parallel', 'Execute commands in parallel')\n .option('--concurrency <number>', 'Max parallel processes (default: 4)', parseInt)\n .action(async (name: string | undefined, options: RunOptions) => {\n await runCommand(name, options);\n });\n}\n","import { join, basename } from 'node:path';\nimport { mkdir } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport { readMetaConfig, fileExists } from '../../core/config.js';\nimport * as output from '../../core/output.js';\n\ninterface CloneOptions {\n directory?: string;\n}\n\nfunction extractRepoName(url: string): string {\n const match = url.match(/\\/([^/]+?)(\\.git)?$/);\n return match?.[1] ?? 'repo';\n}\n\nexport async function cloneCommand(url: string, options: CloneOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const repoName = options.directory ?? extractRepoName(url);\n const targetDir = join(cwd, repoName);\n\n if (await fileExists(targetDir)) {\n throw new Error(`Directory \"${repoName}\" already exists`);\n }\n\n output.info(`Cloning meta repository: ${url}`);\n\n const cloneResult = await execute(`git clone \"${url}\" \"${repoName}\"`, { cwd });\n\n if (cloneResult.exitCode !== 0) {\n output.error(`Failed to clone meta repository`);\n output.commandOutput(cloneResult.stdout, cloneResult.stderr);\n process.exitCode = 1;\n return;\n }\n\n output.success(`Cloned meta repository to ${repoName}`);\n\n const metaPath = join(targetDir, '.gogo');\n if (!(await fileExists(metaPath))) {\n output.warning('No .gogo file found in cloned repository');\n return;\n }\n\n const config = await readMetaConfig(targetDir);\n const projects = Object.entries(config.projects);\n\n if (projects.length === 0) {\n output.info('No child repositories defined in .gogo');\n return;\n }\n\n output.info(`Cloning ${projects.length} child repositories...`);\n\n let successCount = 0;\n let failCount = 0;\n\n for (const [projectPath, projectUrl] of projects) {\n const projectDir = join(targetDir, projectPath);\n\n if (await fileExists(projectDir)) {\n output.projectStatus(projectPath, 'success', 'already exists');\n successCount++;\n continue;\n }\n\n const parentDir = join(targetDir, projectPath, '..');\n await mkdir(parentDir, { recursive: true });\n\n const result = await execute(`git clone \"${projectUrl}\" \"${basename(projectPath)}\"`, {\n cwd: parentDir,\n });\n\n if (result.exitCode === 0) {\n output.projectStatus(projectPath, 'success', 'cloned');\n successCount++;\n } else {\n output.projectStatus(projectPath, 'error', result.stderr || 'clone failed');\n failCount++;\n }\n }\n\n output.summary({ success: successCount, failed: failCount, total: projects.length });\n\n if (failCount > 0) {\n process.exitCode = 1;\n }\n}\n","import { join, basename } from 'node:path';\nimport { mkdir } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport { readMetaConfig, getMetaDir, fileExists } from '../../core/config.js';\nimport { applyFilters, createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface UpdateOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function updateCommand(options: UpdateOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n let projectEntries = Object.entries(config.projects);\n const projectPaths = projectEntries.map(([path]) => path);\n const filteredPaths = applyFilters(projectPaths, filterOptions);\n projectEntries = projectEntries.filter(([path]) => filteredPaths.includes(path));\n\n if (projectEntries.length === 0) {\n output.warning('No projects match the specified filters');\n return;\n }\n\n output.info(`Checking ${projectEntries.length} repositories...`);\n\n const missing: Array<[string, string]> = [];\n\n for (const [projectPath, projectUrl] of projectEntries) {\n const projectDir = join(metaDir, projectPath);\n if (!(await fileExists(projectDir))) {\n missing.push([projectPath, projectUrl]);\n }\n }\n\n if (missing.length === 0) {\n output.success('All repositories are already cloned');\n return;\n }\n\n output.info(`Cloning ${missing.length} missing repositories...`);\n\n let successCount = 0;\n let failCount = 0;\n\n const cloneOne = async ([projectPath, projectUrl]: [string, string]): Promise<boolean> => {\n const projectDir = join(metaDir, projectPath);\n const parentDir = join(projectDir, '..');\n\n await mkdir(parentDir, { recursive: true });\n\n const result = await execute(`git clone \"${projectUrl}\" \"${basename(projectPath)}\"`, {\n cwd: parentDir,\n });\n\n if (result.exitCode === 0) {\n output.projectStatus(projectPath, 'success', 'cloned');\n return true;\n } else {\n output.projectStatus(projectPath, 'error', result.stderr || 'clone failed');\n return false;\n }\n };\n\n if (options.parallel) {\n const concurrency = options.concurrency ?? 4;\n const results: boolean[] = [];\n\n for (let i = 0; i < missing.length; i += concurrency) {\n const batch = missing.slice(i, i + concurrency);\n const batchResults = await Promise.all(batch.map(cloneOne));\n results.push(...batchResults);\n }\n\n successCount = results.filter(Boolean).length;\n failCount = results.filter((r) => !r).length;\n } else {\n for (const entry of missing) {\n const success = await cloneOne(entry);\n if (success) {\n successCount++;\n } else {\n failCount++;\n }\n }\n }\n\n output.summary({ success: successCount, failed: failCount, total: missing.length });\n\n if (failCount > 0) {\n process.exitCode = 1;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface StatusOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n}\n\nexport async function statusCommand(options: StatusOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info('Checking git status across repositories...');\n\n const results = await loop('git status --short --branch', { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface PullOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function pullCommand(options: PullOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info('Pulling changes across repositories...');\n\n const results = await loop('git pull', { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface PushOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n}\n\nexport async function pushCommand(options: PushOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info('Pushing changes across repositories...');\n\n const results = await loop('git push', { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface BranchOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n delete?: boolean;\n all?: boolean;\n}\n\nexport async function branchCommand(name: string | undefined, options: BranchOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n let command: string;\n let actionMessage: string;\n\n if (name) {\n if (options.delete) {\n command = `git branch -d \"${name}\"`;\n actionMessage = `Deleting branch \"${name}\" across repositories...`;\n } else {\n command = `git branch \"${name}\"`;\n actionMessage = `Creating branch \"${name}\" across repositories...`;\n }\n } else {\n command = options.all ? 'git branch -a' : 'git branch';\n actionMessage = 'Listing branches across repositories...';\n }\n\n output.info(actionMessage);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface CheckoutOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n create?: boolean;\n}\n\nexport async function checkoutCommand(branch: string, options: CheckoutOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n const flag = options.create ? '-b ' : '';\n const command = `git checkout ${flag}\"${branch}\"`;\n const actionMessage = options.create\n ? `Creating and checking out branch \"${branch}\" across repositories...`\n : `Checking out branch \"${branch}\" across repositories...`;\n\n output.info(actionMessage);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface CommitOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n message: string;\n}\n\nexport async function commitCommand(options: CommitOptions): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n const escapedMessage = options.message.replace(/\"/g, '\\\\\"');\n const command = `git commit -m \"${escapedMessage}\"`;\n\n output.info('Committing changes across repositories...');\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: false,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { Command } from 'commander';\nimport { cloneCommand } from './clone.js';\nimport { updateCommand } from './update.js';\nimport { statusCommand } from './status.js';\nimport { pullCommand } from './pull.js';\nimport { pushCommand } from './push.js';\nimport { branchCommand } from './branch.js';\nimport { checkoutCommand } from './checkout.js';\nimport { commitCommand } from './commit.js';\n\ninterface GitCommandOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport function registerGitCommands(program: Command): void {\n const git = program\n .command('git')\n .description('Git operations across all repositories');\n\n git\n .command('clone <url>')\n .description('Clone a meta repository and all child repositories')\n .option('-d, --directory <dir>', 'Target directory name')\n .action(async (url: string, options: { directory?: string }) => {\n await cloneCommand(url, options);\n });\n\n git\n .command('update')\n .description('Clone any missing child repositories defined in .gogo')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Clone in parallel')\n .option('--concurrency <number>', 'Max parallel clones', parseInt)\n .action(async (options: GitCommandOptions) => {\n await updateCommand(options);\n });\n\n git\n .command('status')\n .description('Show git status across all repositories')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (options: GitCommandOptions) => {\n await statusCommand(options);\n });\n\n git\n .command('pull')\n .description('Pull changes in all repositories')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel operations', parseInt)\n .action(async (options: GitCommandOptions) => {\n await pullCommand(options);\n });\n\n git\n .command('push')\n .description('Push changes in all repositories')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (options: GitCommandOptions) => {\n await pushCommand(options);\n });\n\n git\n .command('branch [name]')\n .description('List, create, or delete branches')\n .option('-d, --delete', 'Delete the branch')\n .option('-a, --all', 'List all branches (local and remote)')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (name: string | undefined, options: GitCommandOptions & { delete?: boolean; all?: boolean }) => {\n await branchCommand(name, options);\n });\n\n git\n .command('checkout <branch>')\n .description('Checkout a branch in all repositories')\n .option('-b, --create', 'Create the branch if it does not exist')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .action(async (branch: string, options: GitCommandOptions & { create?: boolean }) => {\n await checkoutCommand(branch, options);\n });\n\n git\n .command('commit')\n .description('Commit changes in all repositories')\n .requiredOption('-m, --message <message>', 'Commit message')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .action(async (options: GitCommandOptions & { message: string }) => {\n await commitCommand(options);\n });\n}\n","import { join } from 'node:path';\nimport { mkdir, appendFile } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport {\n readMetaConfig,\n writeMetaConfig,\n getMetaDir,\n addProject,\n fileExists,\n} from '../../core/config.js';\nimport * as output from '../../core/output.js';\n\nexport async function createCommand(folder: string, url: string): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const projectDir = join(metaDir, folder);\n\n if (await fileExists(projectDir)) {\n throw new Error(`Directory \"${folder}\" already exists`);\n }\n\n output.info(`Creating new project: ${folder}`);\n\n await mkdir(projectDir, { recursive: true });\n\n const initResult = await execute('git init', { cwd: projectDir });\n if (initResult.exitCode !== 0) {\n throw new Error(`Failed to initialize git repository: ${initResult.stderr}`);\n }\n\n const remoteResult = await execute(`git remote add origin \"${url}\"`, { cwd: projectDir });\n if (remoteResult.exitCode !== 0) {\n throw new Error(`Failed to add remote: ${remoteResult.stderr}`);\n }\n\n const config = await readMetaConfig(metaDir);\n const updatedConfig = addProject(config, folder, url);\n await writeMetaConfig(metaDir, updatedConfig);\n\n const gitignorePath = join(metaDir, '.gitignore');\n if (await fileExists(gitignorePath)) {\n await appendFile(gitignorePath, `\\n${folder}\\n`);\n output.info(`Added ${folder} to .gitignore`);\n }\n\n output.success(`Created project \"${folder}\"`);\n output.info(`Repository initialized with remote: ${url}`);\n}\n","import { join, basename } from 'node:path';\nimport { mkdir, appendFile } from 'node:fs/promises';\nimport { execute } from '../../core/executor.js';\nimport {\n readMetaConfig,\n writeMetaConfig,\n getMetaDir,\n addProject,\n fileExists,\n} from '../../core/config.js';\nimport * as output from '../../core/output.js';\n\ninterface ImportOptions {\n noClone?: boolean;\n}\n\nasync function getRemoteUrl(dir: string): Promise<string | null> {\n const result = await execute('git remote get-url origin', { cwd: dir });\n if (result.exitCode === 0 && result.stdout) {\n return result.stdout.trim();\n }\n return null;\n}\n\nexport async function importCommand(\n folder: string,\n url?: string,\n options: ImportOptions = {}\n): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const projectDir = join(metaDir, folder);\n const projectExists = await fileExists(projectDir);\n\n if (projectExists) {\n const existingUrl = await getRemoteUrl(projectDir);\n\n if (!existingUrl && !url) {\n throw new Error(\n `Directory \"${folder}\" exists but has no remote. Provide a URL to set one.`\n );\n }\n\n const finalUrl = url ?? existingUrl;\n\n if (url && existingUrl && url !== existingUrl) {\n output.warning(`Existing remote URL differs from provided URL`);\n output.info(`Existing: ${existingUrl}`);\n output.info(`Provided: ${url}`);\n }\n\n const config = await readMetaConfig(metaDir);\n const updatedConfig = addProject(config, folder, finalUrl!);\n await writeMetaConfig(metaDir, updatedConfig);\n\n output.success(`Imported existing project \"${folder}\"`);\n output.info(`Repository URL: ${finalUrl}`);\n } else {\n if (!url) {\n throw new Error('URL is required when importing a non-existent project');\n }\n\n if (options.noClone) {\n const config = await readMetaConfig(metaDir);\n const updatedConfig = addProject(config, folder, url);\n await writeMetaConfig(metaDir, updatedConfig);\n output.success(`Registered project \"${folder}\" (not cloned)`);\n output.info(`Run \"gogo git update\" to clone missing projects`);\n return;\n }\n\n output.info(`Cloning ${url} into ${folder}...`);\n\n const parentDir = join(metaDir, folder, '..');\n await mkdir(parentDir, { recursive: true });\n\n const cloneResult = await execute(`git clone \"${url}\" \"${basename(folder)}\"`, {\n cwd: parentDir,\n });\n\n if (cloneResult.exitCode !== 0) {\n throw new Error(`Failed to clone repository: ${cloneResult.stderr}`);\n }\n\n const config = await readMetaConfig(metaDir);\n const updatedConfig = addProject(config, folder, url);\n await writeMetaConfig(metaDir, updatedConfig);\n\n output.success(`Imported project \"${folder}\"`);\n }\n\n const gitignorePath = join(metaDir, '.gitignore');\n if (await fileExists(gitignorePath)) {\n await appendFile(gitignorePath, `\\n${folder}\\n`);\n output.info(`Added ${folder} to .gitignore`);\n }\n}\n","import { Command } from 'commander';\nimport { createCommand } from './create.js';\nimport { importCommand } from './import.js';\n\nexport function registerProjectCommands(program: Command): void {\n const project = program\n .command('project')\n .description('Project management commands');\n\n project\n .command('create <folder> <url>')\n .description('Create and initialize a new child repository')\n .action(async (folder: string, url: string) => {\n await createCommand(folder, url);\n });\n\n project\n .command('import <folder> [url]')\n .description('Import an existing repository as a child project')\n .option('--no-clone', 'Register project without cloning')\n .action(async (folder: string, url: string | undefined, options: { clone?: boolean }) => {\n await importCommand(folder, url, { noClone: options.clone === false });\n });\n}\n","import { readMetaConfig, getMetaDir } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface InstallOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport async function installCommand(\n variant: 'install' | 'ci',\n options: InstallOptions = {}\n): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n const command = `npm ${variant}`;\n output.info(`Running \"${command}\" across repositories...`);\n\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n}\n","import { join } from 'node:path';\nimport { readFile, symlink, unlink, mkdir } from 'node:fs/promises';\nimport { readMetaConfig, getMetaDir, fileExists } from '../../core/config.js';\nimport { applyFilters, createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\n\ninterface LinkOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n all?: boolean;\n}\n\ninterface PackageJson {\n name?: string;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nasync function readPackageJson(dir: string): Promise<PackageJson | null> {\n const packageJsonPath = join(dir, 'package.json');\n if (!(await fileExists(packageJsonPath))) {\n return null;\n }\n\n try {\n const content = await readFile(packageJsonPath, 'utf-8');\n return JSON.parse(content) as PackageJson;\n } catch {\n return null;\n }\n}\n\nasync function createSymlink(target: string, linkPath: string): Promise<boolean> {\n try {\n if (await fileExists(linkPath)) {\n await unlink(linkPath);\n }\n\n const parentDir = join(linkPath, '..');\n await mkdir(parentDir, { recursive: true });\n\n await symlink(target, linkPath, 'dir');\n return true;\n } catch {\n output.error(`Failed to create symlink: ${linkPath} -> ${target}`);\n return false;\n }\n}\n\nexport async function linkCommand(options: LinkOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n let projectPaths = Object.keys(config.projects);\n projectPaths = applyFilters(projectPaths, filterOptions);\n\n if (projectPaths.length === 0) {\n output.warning('No projects match the specified filters');\n return;\n }\n\n const projectPackages: Map<string, { path: string; packageJson: PackageJson }> = new Map();\n\n for (const projectPath of projectPaths) {\n const fullPath = join(metaDir, projectPath);\n const packageJson = await readPackageJson(fullPath);\n\n if (packageJson?.name) {\n projectPackages.set(packageJson.name, { path: fullPath, packageJson });\n }\n }\n\n if (projectPackages.size === 0) {\n output.warning('No projects with package.json found');\n return;\n }\n\n output.info(`Found ${projectPackages.size} linkable projects`);\n\n let linkCount = 0;\n\n if (options.all) {\n for (const [consumerName, consumer] of projectPackages) {\n const allDeps = {\n ...consumer.packageJson.dependencies,\n ...consumer.packageJson.devDependencies,\n };\n\n for (const [depName] of Object.entries(allDeps)) {\n const provider = projectPackages.get(depName);\n if (provider) {\n const nodeModulesPath = join(consumer.path, 'node_modules', depName);\n const success = await createSymlink(provider.path, nodeModulesPath);\n\n if (success) {\n output.projectStatus(\n `${consumerName}`,\n 'success',\n `linked ${depName}`\n );\n linkCount++;\n }\n }\n }\n }\n } else {\n for (const [packageName, info] of projectPackages) {\n output.info(`Creating global link for ${packageName}...`);\n const { execute } = await import('../../core/executor.js');\n const result = await execute('npm link', { cwd: info.path });\n\n if (result.exitCode === 0) {\n output.projectStatus(packageName, 'success', 'linked globally');\n linkCount++;\n } else {\n output.projectStatus(packageName, 'error', result.stderr);\n }\n }\n }\n\n output.success(`Created ${linkCount} links`);\n}\n","import { join } from 'node:path';\nimport { readFile } from 'node:fs/promises';\nimport { readMetaConfig, getMetaDir, fileExists } from '../../core/config.js';\nimport { loop, getExitCode } from '../../core/loop.js';\nimport { createFilterOptions } from '../../core/filter.js';\nimport * as output from '../../core/output.js';\nimport type { ExecutorResult } from '../../types/index.js';\n\ninterface RunOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n ifPresent?: boolean;\n}\n\nasync function hasScript(dir: string, scriptName: string): Promise<boolean> {\n const packageJsonPath = join(dir, 'package.json');\n if (!(await fileExists(packageJsonPath))) {\n return false;\n }\n\n try {\n const content = await readFile(packageJsonPath, 'utf-8');\n const packageJson = JSON.parse(content) as { scripts?: Record<string, string> };\n return scriptName in (packageJson.scripts ?? {});\n } catch {\n return false;\n }\n}\n\nexport async function runCommand(script: string, options: RunOptions = {}): Promise<void> {\n const cwd = process.cwd();\n const metaDir = await getMetaDir(cwd);\n\n if (!metaDir) {\n throw new Error('Not in a gogo-meta repository. Run \"gogo init\" first.');\n }\n\n const config = await readMetaConfig(cwd);\n const filterOptions = createFilterOptions(options);\n\n output.info(`Running \"npm run ${script}\" across repositories...`);\n\n const command = options.ifPresent\n ? async (dir: string, _projectPath: string): Promise<ExecutorResult> => {\n const hasScriptResult = await hasScript(dir, script);\n if (!hasScriptResult) {\n return {\n exitCode: 0,\n stdout: `Script \"${script}\" not found, skipping`,\n stderr: '',\n };\n }\n\n const { execute } = await import('../../core/executor.js');\n return execute(`npm run ${script}`, { cwd: dir });\n }\n : `npm run ${script}`;\n\n if (options.ifPresent && typeof command === 'function') {\n const results = await loop(command, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n } else {\n const results = await loop(command as string, { config, metaDir }, {\n ...filterOptions,\n parallel: options.parallel,\n concurrency: options.concurrency,\n });\n\n const exitCode = getExitCode(results);\n if (exitCode !== 0) {\n process.exitCode = exitCode;\n }\n }\n}\n","import { Command } from 'commander';\nimport { installCommand } from './install.js';\nimport { linkCommand } from './link.js';\nimport { runCommand } from './run.js';\n\ninterface NpmCommandOptions {\n includeOnly?: string;\n excludeOnly?: string;\n includePattern?: string;\n excludePattern?: string;\n parallel?: boolean;\n concurrency?: number;\n}\n\nexport function registerNpmCommands(program: Command): void {\n const npm = program\n .command('npm')\n .description('NPM operations across all repositories');\n\n npm\n .command('install')\n .alias('i')\n .description('Run npm install in all projects')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel processes', parseInt)\n .action(async (options: NpmCommandOptions) => {\n await installCommand('install', options);\n });\n\n npm\n .command('ci')\n .description('Run npm ci in all projects')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel processes', parseInt)\n .action(async (options: NpmCommandOptions) => {\n await installCommand('ci', options);\n });\n\n npm\n .command('link')\n .description('Create npm links between projects')\n .option('--all', 'Link all projects bidirectionally')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .action(async (options: NpmCommandOptions & { all?: boolean }) => {\n await linkCommand(options);\n });\n\n npm\n .command('run <script>')\n .description('Run an npm script in all projects')\n .option('--include-only <dirs>', 'Only include specified directories')\n .option('--exclude-only <dirs>', 'Exclude specified directories')\n .option('--parallel', 'Run in parallel')\n .option('--concurrency <number>', 'Max parallel processes', parseInt)\n .option('--if-present', 'Only run if script exists')\n .action(async (script: string, options: NpmCommandOptions & { ifPresent?: boolean }) => {\n await runCommand(script, options);\n });\n}\n","import { Command } from 'commander';\nimport { readFileSync } from 'node:fs';\nimport { fileURLToPath } from 'node:url';\nimport { dirname, join } from 'node:path';\nimport { registerInitCommand } from './commands/init.js';\nimport { registerExecCommand } from './commands/exec.js';\nimport { registerRunCommand } from './commands/run.js';\nimport { registerGitCommands } from './commands/git/index.js';\nimport { registerProjectCommands } from './commands/project/index.js';\nimport { registerNpmCommands } from './commands/npm/index.js';\nimport * as output from './core/output.js';\n\nfunction getVersion(): string {\n try {\n const __dirname = dirname(fileURLToPath(import.meta.url));\n const packageJsonPath = join(__dirname, '..', 'package.json');\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n return packageJson.version;\n } catch {\n return '0.0.0';\n }\n}\n\nexport function createProgram(): Command {\n const program = new Command();\n\n program\n .name('gogo')\n .description('A modern CLI tool for managing multi-repository projects')\n .version(getVersion())\n .option('--include-only <dirs>', 'Only include specified directories (comma-separated)')\n .option('--exclude-only <dirs>', 'Exclude specified directories (comma-separated)')\n .option('--include-pattern <regex>', 'Include directories matching regex pattern')\n .option('--exclude-pattern <regex>', 'Exclude directories matching regex pattern')\n .option('--parallel', 'Execute commands in parallel')\n .option('--concurrency <number>', 'Max parallel processes (default: 4)', parseInt);\n\n registerInitCommand(program);\n registerExecCommand(program);\n registerRunCommand(program);\n registerGitCommands(program);\n registerProjectCommands(program);\n registerNpmCommands(program);\n\n return program;\n}\n\nasync function main(): Promise<void> {\n const program = createProgram();\n\n try {\n await program.parseAsync(process.argv);\n } catch (error) {\n if (error instanceof Error) {\n output.error(error.message);\n } else {\n output.error('An unexpected error occurred');\n }\n process.exit(1);\n }\n}\n\nmain();\n"]}
|
package/dist/index.js
CHANGED
|
@@ -1009,7 +1009,7 @@ async function getRemoteUrl(dir) {
|
|
|
1009
1009
|
}
|
|
1010
1010
|
return null;
|
|
1011
1011
|
}
|
|
1012
|
-
async function importCommand(folder, url) {
|
|
1012
|
+
async function importCommand(folder, url, options = {}) {
|
|
1013
1013
|
const cwd = process.cwd();
|
|
1014
1014
|
const metaDir = await getMetaDir(cwd);
|
|
1015
1015
|
if (!metaDir) {
|
|
@@ -1039,6 +1039,14 @@ async function importCommand(folder, url) {
|
|
|
1039
1039
|
if (!url) {
|
|
1040
1040
|
throw new Error("URL is required when importing a non-existent project");
|
|
1041
1041
|
}
|
|
1042
|
+
if (options.noClone) {
|
|
1043
|
+
const config2 = await readMetaConfig(metaDir);
|
|
1044
|
+
const updatedConfig2 = addProject(config2, folder, url);
|
|
1045
|
+
await writeMetaConfig(metaDir, updatedConfig2);
|
|
1046
|
+
success(`Registered project "${folder}" (not cloned)`);
|
|
1047
|
+
info(`Run "gogo git update" to clone missing projects`);
|
|
1048
|
+
return;
|
|
1049
|
+
}
|
|
1042
1050
|
info(`Cloning ${url} into ${folder}...`);
|
|
1043
1051
|
const parentDir = join(metaDir, folder, "..");
|
|
1044
1052
|
await mkdir(parentDir, { recursive: true });
|
|
@@ -1068,8 +1076,8 @@ function registerProjectCommands(program) {
|
|
|
1068
1076
|
project.command("create <folder> <url>").description("Create and initialize a new child repository").action(async (folder, url) => {
|
|
1069
1077
|
await createCommand(folder, url);
|
|
1070
1078
|
});
|
|
1071
|
-
project.command("import <folder> [url]").description("Import an existing repository as a child project").action(async (folder, url) => {
|
|
1072
|
-
await importCommand(folder, url);
|
|
1079
|
+
project.command("import <folder> [url]").description("Import an existing repository as a child project").option("--no-clone", "Register project without cloning").action(async (folder, url, options) => {
|
|
1080
|
+
await importCommand(folder, url, { noClone: options.clone === false });
|
|
1073
1081
|
});
|
|
1074
1082
|
}
|
|
1075
1083
|
|