codereg
Version:
A CLI tool for copying and managing source code directly from GitHub repositories, perfect for modern React UI libraries and custom code management.
1 lines โข 25.3 kB
Source Map (JSON)
{"version":3,"sources":["../src/prompts/confirm-or-quit.ts","../src/prompts/file.ts","../src/prompts/registry.ts","../src/schema/index.ts","../src/utils/file-icons.ts","../src/services/registry.ts","../src/utils/logger.ts","../src/commands/add.ts","../src/commands/init.ts","../src/index.ts","../package.json"],"sourcesContent":["export async function confirmOrQuit(message: string) {\n const proceed = await confirm(message)\n\n if (!proceed) {\n process.exit(0)\n }\n}\n","import prompts from \"prompts\"\n\nexport async function promptSelectFiles(\n files: { title: string; value: string; description: string }[],\n) {\n const response = await prompts({\n type: \"multiselect\",\n name: \"files\",\n message: \"Select files to fetch:\",\n choices: files,\n hint: \"- Space to select. Return to submit\",\n suggest: async (input: string, choices: any[]) => {\n const searchTerm = input.toLowerCase()\n return choices.filter(choice =>\n choice.title.toLowerCase().startsWith(searchTerm),\n )\n },\n })\n return response.files\n}\n","import prompts from \"prompts\"\n\nexport async function promptSelectRegistry(\n registries: { name: string; url: string }[],\n) {\n const registryResponse = await prompts({\n type: \"select\",\n name: \"registry\",\n message: \"Select a registry:\",\n choices: registries.map(r => ({\n title: r.name,\n value: r.name,\n description: r.url,\n })),\n })\n return registryResponse.registry\n}\n","import { z } from \"zod\"\n\nexport const sourceSchema = z.object({\n name: z.string(),\n url: z.string(),\n})\n\nexport const registrySchema = z.object({\n name: z.string().describe(\"The unique name of the registry (e.g., 'ui')\"),\n url: z.string().url().describe(\"The URL of the GitHub repository\"),\n dirname: z\n .string()\n .describe(\n \"Destination directory path in the local project where files from this registry will be copied\",\n ),\n path: z\n .string()\n .describe(\n \"Path from repository root to the directory containing source code\",\n )\n .optional(),\n branch: z\n .string()\n .describe(\n \"The branch name to use when fetching files from the repository (default: main)\",\n )\n .optional(),\n})\n\nexport const configSchema = z\n .object({\n $schema: z.string().url().optional(),\n registry: z\n .array(registrySchema)\n .describe(\n \"List of registry entries containing repository and source definitions\",\n ),\n })\n .strict()\n","/**\n * ANSI Color codes for terminal output\n */\nconst COLORS = {\n reset: \"\\x1b[0m\",\n yellow: \"\\x1b[33m\", // JavaScript\n blue: \"\\x1b[34m\", // TypeScript\n cyan: \"\\x1b[36m\", // React\n magenta: \"\\x1b[35m\", // CSS/Styling\n green: \"\\x1b[32m\", // Data/Config\n red: \"\\x1b[31m\", // HTML\n white: \"\\x1b[37m\", // Documentation\n brightGreen: \"\\x1b[92m\", // Environment\n brightBlue: \"\\x1b[94m\", // Scripts\n brightYellow: \"\\x1b[93m\", // Media\n brightMagenta: \"\\x1b[95m\", // Images\n brightCyan: \"\\x1b[96m\", // Database\n gray: \"\\x1b[90m\", // Logs/Misc\n} as const\n\n/**\n * Map file extensions to their corresponding colors\n */\nconst FILE_EXTENSION_COLORS: Record<string, string> = {\n // JavaScript/TypeScript\n js: COLORS.yellow,\n ts: COLORS.blue,\n jsx: COLORS.cyan,\n tsx: COLORS.cyan,\n\n // Web technologies\n html: COLORS.red,\n css: COLORS.magenta,\n scss: COLORS.magenta,\n sass: COLORS.magenta,\n\n // Data & Config\n json: COLORS.green,\n yml: COLORS.green,\n yaml: COLORS.green,\n xml: COLORS.green,\n\n // Documentation\n md: COLORS.white,\n\n // Environment & Scripts\n env: COLORS.brightGreen,\n sh: COLORS.brightBlue,\n\n // Programming languages\n py: COLORS.brightGreen,\n java: COLORS.red,\n c: COLORS.blue,\n h: COLORS.blue,\n cpp: COLORS.brightBlue,\n rs: COLORS.red,\n go: COLORS.brightCyan,\n php: COLORS.magenta,\n\n // Database\n sql: COLORS.brightCyan,\n\n // Images\n svg: COLORS.brightMagenta,\n png: COLORS.brightMagenta,\n jpg: COLORS.brightMagenta,\n jpeg: COLORS.brightMagenta,\n gif: COLORS.brightMagenta,\n webp: COLORS.brightMagenta,\n\n // Media\n mp3: COLORS.brightYellow,\n wav: COLORS.brightYellow,\n mp4: COLORS.brightYellow,\n webm: COLORS.brightYellow,\n\n // Special files\n lock: COLORS.gray,\n log: COLORS.gray,\n}\n\n/**\n * Map file extensions to their corresponding emoji icons\n */\nconst FILE_EXTENSION_ICONS: Record<string, string> = {\n // JavaScript/TypeScript\n js: \"๐จ\",\n ts: \"๐ต\",\n jsx: \"โ๏ธ\",\n tsx: \"โ๏ธ\",\n\n // Web technologies\n html: \"๐\",\n css: \"๐จ\",\n scss: \"๐
\",\n sass: \"๐
\",\n\n // Data & Config\n json: \"๐ฆ\",\n yml: \"โ๏ธ\",\n yaml: \"โ๏ธ\",\n xml: \"๐ฐ\",\n\n // Documentation\n md: \"๐\",\n\n // Environment & Scripts\n env: \"๐ฑ\",\n sh: \"๐\",\n\n // Programming languages\n py: \"๐\",\n java: \"โ\",\n c: \"๐ง\",\n h: \"๐ง\",\n cpp: \"๐ \",\n rs: \"๐ฆ\",\n go: \"๐\",\n php: \"๐\",\n\n // Database\n sql: \"๐๏ธ\",\n\n // Images\n svg: \"๐ผ๏ธ\",\n png: \"๐ผ๏ธ\",\n jpg: \"๐ผ๏ธ\",\n jpeg: \"๐ผ๏ธ\",\n gif: \"๐ผ๏ธ\",\n webp: \"๐ผ๏ธ\",\n\n // Media\n mp3: \"๐ต\",\n wav: \"๐ต\",\n mp4: \"๐๏ธ\",\n webm: \"๐๏ธ\",\n\n // Special files\n lock: \"๐\",\n log: \"๐\",\n}\n\n// Special filename patterns that need to be checked before extension\nconst SPECIAL_FILES: Record<string, { emoji: string; color: string }> = {\n Dockerfile: { emoji: \"๐ณ\", color: COLORS.blue },\n \".gitignore\": { emoji: \"๐\", color: COLORS.gray },\n \".dockerignore\": { emoji: \"๐\", color: COLORS.gray },\n}\n\n// Special patterns that contain multiple dots\nconst SPECIAL_PATTERNS: { pattern: RegExp; emoji: string; color: string }[] = [\n {\n pattern: /\\.test\\.(ts|js|tsx|jsx)$/,\n emoji: \"๐งช\",\n color: COLORS.brightGreen,\n },\n { pattern: /\\.config\\.(js|ts|json)$/, emoji: \"โ๏ธ\", color: COLORS.green },\n {\n pattern: /\\.spec\\.(ts|js|tsx|jsx)$/,\n emoji: \"๐งช\",\n color: COLORS.brightGreen,\n },\n { pattern: /package\\.json$/, emoji: \"๐ฆ\", color: COLORS.green },\n { pattern: /package-lock\\.json$/, emoji: \"๐\", color: COLORS.gray },\n { pattern: /yarn\\.lock$/, emoji: \"๐\", color: COLORS.gray },\n { pattern: /pnpm-lock\\.yaml$/, emoji: \"๐\", color: COLORS.gray },\n]\n\nconst DEFAULT_ICON = \"๐\"\nconst DEFAULT_COLOR = COLORS.white\n\n/**\n * Get emoji icon for a file based on its extension\n * @param fileName - The file name including extension\n * @returns The corresponding emoji icon\n */\nexport function getFileIcon(fileName: string): string {\n // Check special files first (exact filename match)\n if (SPECIAL_FILES[fileName]) {\n return SPECIAL_FILES[fileName].emoji\n }\n\n // Check special patterns (like .test.ts, .config.js, etc.)\n for (const { pattern, emoji } of SPECIAL_PATTERNS) {\n if (pattern.test(fileName)) {\n return emoji\n }\n }\n\n // Extract extension\n const extension = fileName.split(\".\").pop()?.toLowerCase()\n\n if (!extension) {\n return DEFAULT_ICON\n }\n\n return FILE_EXTENSION_ICONS[extension] || DEFAULT_ICON\n}\n\n/**\n * Get color for a file based on its extension\n * @param fileName - The file name including extension\n * @returns The corresponding ANSI color code\n */\nexport function getFileColor(fileName: string): string {\n // Check special files first (exact filename match)\n if (SPECIAL_FILES[fileName]) {\n return SPECIAL_FILES[fileName].color\n }\n\n // Check special patterns (like .test.ts, .config.js, etc.)\n for (const { pattern, color } of SPECIAL_PATTERNS) {\n if (pattern.test(fileName)) {\n return color\n }\n }\n\n // Extract extension\n const extension = fileName.split(\".\").pop()?.toLowerCase()\n\n if (!extension) {\n return DEFAULT_COLOR\n }\n\n return FILE_EXTENSION_COLORS[extension] || DEFAULT_COLOR\n}\n\n/**\n * Get formatted display name with emoji and colored filename\n * @param fileName - The file name including extension\n * @returns Formatted string with emoji and colored filename\n */\nexport function getFileDisplayName(fileName: string): string {\n const icon = getFileIcon(fileName)\n const color = getFileColor(fileName)\n return `${icon} ${color}${fileName}${COLORS.reset}`\n}\n","import { getFileDisplayName } from \"@/utils/file-icons\"\n\nexport function getRawFileUrl(\n repoUrl: string,\n branch: string,\n filePath: string,\n) {\n const repoPath = repoUrl\n .replace(\"https://github.com/\", \"\")\n .replace(/\\.git$/, \"\")\n return `https://raw.githubusercontent.com/${repoPath}/${branch}/${filePath}`\n}\n\nexport async function getFilesList(\n repoUrl: string,\n branch: string,\n path: string,\n) {\n const repoPath = repoUrl\n .replace(\"https://github.com/\", \"\")\n .replace(/\\.git$/, \"\")\n const apiUrl = `https://api.github.com/repos/${repoPath}/contents/${path}?ref=${branch}`\n\n const res = await fetch(apiUrl)\n if (!res.ok) {\n throw new Error(\n `Failed to fetch files list: ${res.status} ${res.statusText}`,\n )\n }\n\n const data = await res.json()\n return data\n .filter((item: any) => item.type === \"file\")\n .map((item: any) => ({\n title: getFileDisplayName(item.name),\n value: item.name,\n description: item.path,\n }))\n}\n","import chalk from \"chalk\"\n\nexport const logger = {\n error(...args: unknown[]) {\n console.error(chalk.red(...args))\n },\n warn(...args: unknown[]) {\n console.warn(chalk.yellow(...args))\n },\n info(...args: unknown[]) {\n console.info(chalk.cyan(...args))\n },\n success(...args: unknown[]) {\n console.info(chalk.green(...args))\n },\n}\n","import { confirmOrQuit } from \"@/prompts/confirm-or-quit\"\nimport { promptSelectFiles } from \"@/prompts/file\"\nimport { promptSelectRegistry } from \"@/prompts/registry\"\nimport { configSchema } from \"@/schema\"\nimport { getFilesList, getRawFileUrl } from \"@/services/registry\"\nimport { logger } from \"@/utils/logger\"\nimport { Command } from \"commander\"\nimport { mkdir, readFile, writeFile } from \"fs/promises\"\nimport path from \"path\"\n\nconst CONFIG_FILE = \".codereg.config.json\"\n\n// โ
Command add\nexport const add = new Command()\n .name(\"add\")\n .description(\"add a file from a registry repository to the project\")\n .option(\"-r, --registry <name>\", \"Registry name defined in config\")\n .option(\"-f, --file <name>\", \"File name to fetch\")\n .option(\"-b, --branch <branch>\", \"Branch name (default: main)\", \"main\")\n .option(\n \"-p, --path <path>\",\n \"Path from repository root to the code directory\",\n )\n .action(async options => {\n // Read and validate config file\n const rawConfig = await readFile(CONFIG_FILE, \"utf-8\")\n const config = configSchema.parse(JSON.parse(rawConfig))\n\n // Select registry interactively if not provided\n let registryName = options.registry\n if (!registryName) {\n registryName = await promptSelectRegistry(config.registry)\n }\n\n // Find registry by name\n const registry = config.registry.find(r => r.name === registryName)\n if (!registry) {\n logger.error(`Registry '${registryName}' not found in ${CONFIG_FILE}`)\n process.exit(1)\n }\n\n const branch = options.branch || registry.branch || \"main\"\n const repoPath = options.path || registry.path || \"\"\n\n // Select files interactively if not provided\n let selectedFiles: string[] = []\n if (!options.file) {\n try {\n const files = await getFilesList(registry.url, branch, repoPath)\n selectedFiles = await promptSelectFiles(files)\n } catch (error) {\n logger.error(`Failed to fetch files list: ${error}`)\n process.exit(1)\n }\n } else {\n selectedFiles = [options.file]\n }\n\n // Download and save each selected file\n for (const fileName of selectedFiles) {\n const filePathInRepo = repoPath\n ? path.posix.join(repoPath, fileName)\n : fileName\n const rawUrl = getRawFileUrl(registry.url, branch, filePathInRepo)\n\n logger.info(`Downloading: ${rawUrl}`)\n\n const res = await fetch(rawUrl)\n if (!res.ok) {\n logger.error(\n `Failed to fetch file ${fileName}: ${res.status} ${res.statusText}`,\n )\n continue\n }\n const fileContent = await res.text()\n\n const localFilePath = path.resolve(registry.dirname, fileName)\n try {\n // Check if file already exists\n await readFile(localFilePath, \"utf-8\")\n // Ask user for confirmation before overwriting\n await confirmOrQuit(`File ${localFilePath} exists. Overwrite?`)\n } catch (e) {\n // File does not exist, proceed to write\n }\n await mkdir(path.dirname(localFilePath), { recursive: true })\n await writeFile(localFilePath, fileContent, \"utf-8\")\n logger.success(`File saved to ${localFilePath}`)\n }\n })\n","import { confirmOrQuit } from \"@/prompts/confirm-or-quit\"\nimport { logger } from \"@/utils/logger\"\nimport { Command } from \"commander\"\nimport { readFile, writeFile } from \"fs/promises\"\n\nexport const init = new Command()\n .name(\"init\")\n .description(\"initialize project with codereg\")\n .action(async () => {\n const minimalConfig = {\n $schema: \"https://cdn.jsdelivr.net/npm/codereg/dist/config.schema.json\",\n registry: [],\n }\n try {\n // Check if config file already exists\n await readFile(\".codereg.config.json\", \"utf-8\")\n // Ask user for confirmation before overwriting\n await confirmOrQuit(\".codereg.config.json exists. Overwrite?\")\n } catch (e) {\n // File does not exist, proceed to write\n }\n await writeFile(\n \".codereg.config.json\",\n JSON.stringify(minimalConfig, null, 2),\n \"utf-8\",\n )\n logger.success(\"Project initialization completed.\")\n })\n","#!/usr/bin/env node\nimport { add } from \"@/commands/add\"\nimport { init } from \"@/commands/init\"\nimport { Command } from \"commander\"\nimport packageJson from \"../package.json\"\n\nconst program = new Command()\n .name(\"codereg\")\n .version(packageJson.version, \"-v, --version\", \"display the version number\")\n .description(\"Code Registry CLI\")\n\nprogram.addCommand(init)\nprogram.addCommand(add)\n\n// Add help text with examples\nprogram.addHelpText(\n \"after\",\n `\nExamples:\n $ codereg add --registry my-registry --file example.ts\n $ codereg add -r my-registry -f example.ts -b develop\n $ codereg add -r my-registry -p src/components\n $ codereg add --help\n\nOptions for add command:\n -r, --registry <name> Registry name defined in config\n -f, --file <name> File name to fetch\n -b, --branch <branch> Branch name (default: main)\n -p, --path <path> Path from repository root to the code directory\n`,\n)\n\nprogram.parse()\n","{\n \"name\": \"codereg\",\n \"version\": \"1.4.0\",\n \"author\": \"onepercman\",\n \"description\": \"A CLI tool for copying and managing source code directly from GitHub repositories, perfect for modern React UI libraries and custom code management.\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/onepercman/codereg\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/onepercman/codereg/issues\"\n },\n \"homepage\": \"https://github.com/onepercman/codereg\",\n \"keywords\": [\n \"codereg\",\n \"github\",\n \"source-code\",\n \"react\",\n \"ui-libraries\",\n \"cli\",\n \"code-management\",\n \"development-tools\"\n ],\n \"bin\": {\n \"codereg\": \"./dist/index.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"main\": \"./dist/index.js\",\n \"types\": \"./dist/index.d.ts\",\n \"scripts\": {\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"start\": \"node dist/index.js\",\n \"test\": \"jest\",\n \"prepublishOnly\": \"npm run build\"\n },\n \"dependencies\": {\n \"chalk\": \"^5.4.1\",\n \"commander\": \"^14.0.0\",\n \"compare-versions\": \"^6.1.1\",\n \"cosmiconfig\": \"^9.0.0\",\n \"execa\": \"^9.6.0\",\n \"jsonata\": \"^2.0.6\",\n \"lru-cache\": \"^11.1.0\",\n \"ora\": \"^8.2.0\",\n \"prompts\": \"^2.4.2\",\n \"rimraf\": \"^6.0.1\",\n \"zod\": \"^3.25.67\"\n },\n \"devDependencies\": {\n \"@types/node\": \"^24.0.3\",\n \"@types/prompts\": \"^2.4.9\",\n \"prettier\": \"^3.4.2\",\n \"prettier-plugin-organize-imports\": \"^4.1.0\",\n \"tsup\": \"^8.3.0\",\n \"typescript\": \"^5.6.3\"\n }\n}\n"],"mappings":"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","names":["prompts","path","Command","readFile","writeFile","Command","Command"]}