@bit-ocean/cli
Version:
Universal CLI.
1 lines • 41.9 kB
Source Map (JSON)
{"version":3,"sources":["../src/config.ts","../src/utils/logger.ts","../src/utils/get-latest-package-json.ts","../src/utils/is-monorepo.ts","../src/utils/read-git-repo.ts","../src/utils/read-global-config.ts","../src/utils/read-package-json.ts","../src/utils/read-project-package-json.ts","../src/bump/bit-ocean.ts","../src/bump/action.ts","../src/cspell/sort-dicts.ts","../src/cspell/action.ts","../src/generators/config.ts","../src/generators/contributors.ts","../src/generators/monorepo-lib.ts","../src/generators/action.ts","../src/cmd.ts"],"names":["globalConfig","teamConfig","Logger","message","bgBlue","lightGreen","lightRed","VERSION_COMMAND","getLatestVersion","version","execSync","isMonorepo","fs","file","readGitRepo","configFilePath","path","process","remoteUrlMatch","match","org","repo","CONFIG_FILE_NAME","readGlobalConfig","pathToFileURL","readPackageJson","packageJsonPath","fileURLToPath","packageJsonContent","DEFAULT_MONOREPO_DIRS","readProjectPackageJson","pathMap","readMonorepoRootPackageJson","readMonorepoPackageJsonFiles","p","readMonorepoPackages","dir","packageDirs","bumpBitOceanDeps","latestVersion","packageJsonMap","totalBumpCount","packageJson","versionDeps","updatedDependencies","d","isBitOceanDep","isWorkspaceDep","isDepLatest","getBumpedDepVersion","updatedDevDependencies","updatedPackageJson","v","origin","target","dep","bump","response","prompts","action","DICTS_DIR","sortFile","filePath","words","value","index","array","a","b","e","sortDicts","cspell","generateConfig","config","sourcePath","resolve","targetFile","cwd","templateContent","renderedContent","Handlebars","err","IGNORED_USERS","COMPLETELY_ARBITRARY_CONTRIBUTION_COUNT","PAGE_LIMIT","getContributorsApiUrl","GitHubToken","getData","url","fetch","fetchUsers","page","lastLength","contributors","thresholdContributors","user","writeTable","perLine","columns","lines","i","usr","image","name","main","githubContributors","lastUsers","users","c","result","generateContributors","error","exit","generateMonorepoLib","options","packageName","targetPath","templatePaths","getTemplatePaths","processTemplateFile","targetWritePath","byteCount","mkdir","readFile","writeFile","relative","rm","rootPath","results","traverseDirectory","currentPath","level","entryPromise","readdir","entry","entryPath","join","relativePath","g","gitRepoInfo","_","values","packageOrgName","packageDescription","program","args","check","argv"],"mappings":"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","file":"index.cjs","sourcesContent":["import { teamConfig } from '@bit-ocean/config'\n\nimport type { GlobalConfig } from './types'\n\nexport const globalConfig = Object.freeze<GlobalConfig>({\n name: `${teamConfig.TEAM_NAME} CLI`\n})\n","import { bgBlue, lightGreen, lightRed } from 'kolorist'\n\nimport { globalConfig } from '@/config'\n\nexport class Logger {\n static info(message: string) {\n process.stdout.write(`${bgBlue(` ${globalConfig.name} `)} ${message}\\n`)\n }\n\n static success(message: string) {\n process.stdout.write(`${bgBlue(` ${globalConfig.name} `)} ${lightGreen(message)}\\n`)\n }\n\n static error(message: string | Error) {\n if (message instanceof Error) {\n // eslint-disable-next-line no-console\n console.error(message)\n } else {\n process.stdout.write(`${bgBlue(` ${globalConfig.name} `)} ${lightRed(message)}\\n`)\n }\n }\n}\n","import { execSync } from 'node:child_process'\n\nimport { Logger } from './logger'\n\nconst VERSION_COMMAND = 'npm view @bit-ocean/cli@latest version'\n\nexport function getLatestVersion() {\n let version\n try {\n const stdout = execSync(VERSION_COMMAND, {\n encoding: 'utf-8'\n })\n version = stdout.toString().trim()\n } catch {\n Logger.error('Get latest version failed!')\n return null\n }\n return version\n}\n","import fs from 'node:fs'\n\nexport function isMonorepo() {\n return fs.readdirSync(process.cwd()).some((file) => file.includes('pnpm-workspace'))\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\n\nexport function readGitRepo() {\n const configFilePath = path.join(process.cwd(), '.git', 'config')\n\n const configContent = fs.readFileSync(configFilePath, 'utf-8')\n\n const remoteUrlMatch = configContent.match(/\\[remote \"origin\"\\][\\s\\S]*?url\\s*=\\s*(.*)/)\n if (!remoteUrlMatch) {\n throw Error('remote.origin.url not found!')\n }\n\n const match = remoteUrlMatch[1].match(/github\\.com\\/([^/]+)\\/([^/]+)\\.git/)\n\n if (!match || match.length < 3) {\n throw Error('Invalid git remote url')\n }\n\n const [, org, repo] = match\n\n return { org, repo }\n}\n","import path from 'node:path'\nimport { pathToFileURL } from 'node:url'\n\nimport type { GlobalConfig } from '@/types'\n\nconst CONFIG_FILE_NAME = 'bit-ocean.config.js'\n\n/**\n * Get config from `bit-ocean.config.js`\n * @description Now only support `bit-ocean.config.js` in the root directory\n */\nexport async function readGlobalConfig(): Promise<GlobalConfig | null> {\n try {\n const config: GlobalConfig = (\n await import(pathToFileURL(path.join(process.cwd(), CONFIG_FILE_NAME)).href)\n ).default\n return config ?? null\n } catch {\n return null\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nimport type { PackageJson } from 'type-fest'\n\nexport function readPackageJson(): PackageJson {\n const packageJsonPath = path.resolve(\n path.dirname(fileURLToPath(import.meta.url)),\n '../package.json'\n ) // NOTE: __dirname is not available in ES modules\n const packageJsonContent = fs.readFileSync(packageJsonPath, 'utf-8')\n return JSON.parse(packageJsonContent)\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport process from 'node:process'\n\nimport type { PackageJson } from 'type-fest'\n\nimport { isMonorepo } from './is-monorepo'\n\nconst DEFAULT_MONOREPO_DIRS = ['packages', 'apps']\n\n/**\n * Read project `package.json` files, including monorepo.\n */\nexport function readProjectPackageJson() {\n const pathMap = new Map<string, PackageJson>()\n\n pathMap.set(path.resolve(process.cwd(), 'package.json'), readMonorepoRootPackageJson())\n\n if (isMonorepo()) {\n readMonorepoPackageJsonFiles().forEach((p) => {\n try {\n pathMap.set(p, JSON.parse(fs.readFileSync(p, 'utf-8')))\n } catch {\n //\n }\n })\n }\n\n return pathMap\n}\n\nfunction readMonorepoRootPackageJson() {\n return JSON.parse(fs.readFileSync(path.resolve(process.cwd(), 'package.json'), 'utf-8'))\n}\n\nfunction readMonorepoPackages(): [string, string[]][] {\n return DEFAULT_MONOREPO_DIRS.map((dir) => [dir, fs.readdirSync(path.resolve(process.cwd(), dir))])\n}\n\nfunction readMonorepoPackageJsonFiles() {\n const packages = readMonorepoPackages()\n return packages\n .map(([dir, packageDirs]) =>\n packageDirs.map((p) => path.resolve(process.cwd(), dir, p, 'package.json'))\n )\n .flat()\n}\n","import { execSync } from 'node:child_process'\nimport fs from 'node:fs'\n\nimport { getLatestVersion, Logger, readProjectPackageJson } from '@/utils'\n\nexport const bumpBitOceanDeps = async () => {\n const latestVersion = getLatestVersion()\n\n if (!latestVersion) {\n Logger.error('Get version failed!')\n return\n }\n\n const packageJsonMap = readProjectPackageJson()\n\n if (packageJsonMap.size === 0) {\n Logger.error('No package.json found!')\n }\n\n let totalBumpCount = 0\n\n packageJsonMap.forEach((packageJson, path) => {\n const versionDeps: [d: string, v: string][] = []\n\n const updatedDependencies = packageJson.dependencies && { ...packageJson.dependencies }\n if (updatedDependencies) {\n Object.keys(packageJson.dependencies ?? {}).forEach((d) => {\n if (\n packageJson.dependencies?.[d] &&\n isBitOceanDep(d) &&\n !isWorkspaceDep(packageJson.dependencies[d]!) &&\n !isDepLatest(packageJson.dependencies[d]!, latestVersion)\n ) {\n const version = getBumpedDepVersion(packageJson.dependencies[d]!, latestVersion)\n updatedDependencies[d] = version\n versionDeps.push([d, version])\n }\n })\n }\n\n const updatedDevDependencies = packageJson.devDependencies && { ...packageJson.devDependencies }\n if (updatedDevDependencies) {\n Object.keys(packageJson.devDependencies ?? {}).forEach((d) => {\n if (\n packageJson.devDependencies?.[d] &&\n isBitOceanDep(d) &&\n !isWorkspaceDep(packageJson.devDependencies[d]!) &&\n !isDepLatest(packageJson.devDependencies[d]!, latestVersion)\n ) {\n const version = getBumpedDepVersion(packageJson.devDependencies[d]!, latestVersion)\n updatedDevDependencies[d] = version\n versionDeps.push([d, version])\n }\n })\n }\n\n const updatedPackageJson = {\n ...packageJson,\n dependencies: updatedDependencies,\n devDependencies: updatedDevDependencies\n }\n\n if (versionDeps.length > 0) {\n fs.writeFileSync(path, `${JSON.stringify(updatedPackageJson, null, 2)}\\n`)\n versionDeps.map(([d, v]) => Logger.success(`Bumping ${d} to ${v} in ${packageJson.name}`))\n totalBumpCount += versionDeps.length\n }\n })\n\n if (totalBumpCount === 0) {\n Logger.success('No dependencies need to be bumped.')\n } else {\n execSync('pnpm install', { stdio: 'inherit' })\n }\n}\n\nfunction getBumpedDepVersion(origin: string, target: string) {\n if (isWorkspaceDep(origin)) {\n return origin\n }\n if (origin.includes('^')) {\n return `^${target}`\n }\n if (origin.includes('~')) {\n return `~${target}`\n }\n return target\n}\n\nfunction isBitOceanDep(dep: string) {\n return dep.startsWith('@bit-ocean/')\n}\n\nfunction isWorkspaceDep(version: string) {\n return version.includes('workspace:')\n}\n\nfunction isDepLatest(origin: string, target: string) {\n return origin.includes(target)\n}\n","import prompts from 'prompts'\n\nimport { Logger } from '@/utils'\n\nimport { bumpBitOceanDeps } from './bit-ocean'\n\nenum ActionChoice {\n INFRA\n}\n\nexport const bump = async () => {\n const response = await prompts([\n {\n type: 'select',\n name: 'action',\n message: 'Select which to bump:',\n choices: [\n {\n title: '@bit-ocean/*',\n value: ActionChoice.INFRA,\n description: 'Bump the version of @bit-ocean/*.'\n }\n ]\n }\n ])\n\n const { action } = response\n\n switch (action) {\n case ActionChoice.INFRA:\n await bumpBitOceanDeps()\n break\n default:\n Logger.error('No action selected!')\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\n\nimport { Logger } from '@/utils'\n\nconst DICTS_DIR = 'packages/cspell/dicts'\n\nasync function sortFile(filePath: string) {\n try {\n const words = fs\n .readFileSync(filePath, 'utf-8')\n .split('\\n')\n .filter((value, index, array) => value && array.indexOf(value) === index)\n .sort((a, b) => a.toLocaleLowerCase().localeCompare(b.toLocaleLowerCase()))\n fs.writeFileSync(filePath, words.join('\\n'))\n Logger.success(`Sorted ${filePath}`)\n } catch (e) {\n Logger.error(`Error sorting ${filePath}: ${(e as Error).message}`)\n }\n}\n\nexport async function sortDicts() {\n // Sort `.cspell.txt`\n if (fs.existsSync('.cspell.txt')) {\n await sortFile('.cspell.txt')\n }\n // Sort all files in `packages/cspell/dicts`\n await Promise.all(\n fs\n .readdirSync(DICTS_DIR)\n .filter((file) => file.endsWith('.txt')) // Only process .txt files\n .map((file) => sortFile(path.join(DICTS_DIR, file)))\n )\n}\n","import prompts from 'prompts'\n\nimport { Logger } from '@/utils'\n\nimport { sortDicts } from './sort-dicts'\n\nenum ActionChoice {\n SORT_DICTS\n}\n\nexport const cspell = async () => {\n const response = await prompts({\n type: 'select',\n name: 'action',\n message: 'Select an action:',\n choices: [\n {\n title: 'Sort dicts',\n value: ActionChoice.SORT_DICTS,\n description: 'Sort CSpell dictionaries alphabetically.'\n }\n ]\n })\n\n const { action } = response\n\n switch (action) {\n case ActionChoice.SORT_DICTS:\n sortDicts()\n break\n default:\n Logger.error('No action selected!')\n }\n}\n","import fs from 'node:fs'\nimport { resolve } from 'node:path'\nimport { cwd } from 'node:process'\n\nimport Handlebars from 'handlebars'\n\nimport type { GlobalConfig } from '@/types'\nimport { Logger } from '@/utils'\n\nexport const generateConfig = async (config: GlobalConfig) => {\n const sourcePath = resolve(import.meta.dirname, '../assets/engineering/bit-ocean.config.hbs')\n const targetFile = resolve(cwd(), 'bit-ocean.config.js')\n const templateContent = fs.readFileSync(sourcePath, 'utf-8')\n const renderedContent = Handlebars.compile(templateContent)(config)\n try {\n fs.writeFileSync(targetFile, renderedContent)\n Logger.success('bit-ocean.config.js has been created!')\n } catch (err) {\n Logger.error(err as Error)\n }\n}\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { exit } from 'node:process'\n\nimport fetch from 'cross-fetch'\n\nimport { Logger, readGlobalConfig } from '@/utils'\n\n// 忽略的用户,机器人\nconst IGNORED_USERS = new Set([\n 'dependabot[bot]',\n 'eslint[bot]',\n 'greenkeeper[bot]',\n 'semantic-release-bot'\n])\n\n// 项目最少贡献次数\nconst COMPLETELY_ARBITRARY_CONTRIBUTION_COUNT = 3\n// 每页最大贡献人数\nconst PAGE_LIMIT = 100\n// GitHub 获取贡献者列表 API 地址\nconst getContributorsApiUrl = (org: string, repo: string) =>\n `https://api.github.com/repos/${org}/${repo}/contributors?per_page=${PAGE_LIMIT}`\n// GitHub token\nconst GitHubToken = 'ghp_*'\n\ninterface Contributor {\n contributions: number\n type: string\n login?: string\n url?: string\n avatar_url?: string\n html_url?: string\n}\n\ninterface User {\n login: string\n name: string\n avatar_url: string\n html_url: string\n}\n\n/**\n * 获取数据\n * @param url 接口地址\n */\nasync function getData<T>(url: string | undefined): Promise<T | null> {\n if (url == null) {\n return null\n }\n\n const response = await fetch(url, {\n method: 'GET',\n headers: {\n Accept: 'application/vnd.github.v3+json',\n Authorization: GitHubToken\n }\n })\n\n return (await response.json()) as Promise<T>\n}\n\nasync function* fetchUsers(page = 1): AsyncIterableIterator<Contributor[]> {\n const { org, repo } = (await readGlobalConfig()) ?? {}\n if (!org || !repo) {\n throw new Error('Missing org or repo in bit-ocean.config.js!')\n }\n\n let lastLength = 0\n do {\n // eslint-disable-next-line no-await-in-loop\n const contributors = await getData<Contributor[] | { message: string }>(\n `${getContributorsApiUrl(org!, repo!)}&page=${page}`\n )\n\n if (!Array.isArray(contributors)) {\n throw new Error(contributors?.message ?? 'An error occurred')\n }\n\n const thresholdContributors = contributors.filter(\n (user) => user.contributions >= COMPLETELY_ARBITRARY_CONTRIBUTION_COUNT\n )\n yield thresholdContributors\n\n lastLength = thresholdContributors.length\n } while (\n /*\n If the filtered list wasn't 100 long, that means that either:\n - there wasn't 100 users in the page, or\n - there wasn't 100 users with > threshold commits in the page.\n\n In either case, it means that there's no need to fetch any more pages\n */\n lastLength === PAGE_LIMIT\n )\n}\n\nfunction writeTable(contributors: User[], perLine = 5): void {\n const columns = contributors.length > perLine ? perLine : contributors.length\n\n const lines = [\n '<!---------------------------------------------',\n ' | DO NOT MODIFY THIS FILE MANUALLY |',\n ' | |',\n ' | THIS FILE HAS BEEN AUTOMATICALLY GENERATED |',\n ' | |',\n ' | YOU CAN REGENERATE THIS FILE USING |',\n ' | |',\n ' | @bit-ocean/cli |',\n ' ---------------------------------------------->',\n '',\n '# Contributors',\n '',\n 'Thanks goes to these wonderful people:',\n '',\n '<!-- prettier-ignore-start -->',\n '<!-- markdownlint-disable -->',\n '<table>'\n ]\n\n let i = 0\n // eslint-disable-next-line no-restricted-syntax\n for (const usr of contributors) {\n if (i % columns === 0) {\n if (i !== 0) {\n lines.push(' </tr>')\n }\n lines.push(' <tr>')\n }\n\n const image = `<img src=\"${usr.avatar_url}&size=100\" width=\"100px;\" alt=\"\"/>`\n const name = `<sub><b>${usr.name || usr.login}</b></sub>`\n\n lines.push(` <td align=\"center\"><a href=\"${usr.html_url}\">${image}<br />${name}</a></td>`)\n // eslint-disable-next-line no-plusplus\n ++i\n }\n if (i % columns !== 0) {\n lines.push(' </tr>')\n }\n\n lines.push('</table>')\n lines.push('')\n lines.push('<!-- markdownlint-restore -->')\n lines.push('<!-- prettier-ignore-end -->')\n lines.push('')\n lines.push(\n `This list is auto-generated using \\`@bit-ocean/cli\\`. It shows the top ${PAGE_LIMIT} contributors with > ${COMPLETELY_ARBITRARY_CONTRIBUTION_COUNT} contributions.`\n )\n lines.push('')\n\n fs.writeFileSync(path.join(process.cwd(), 'CONTRIBUTORS.md'), lines.join('\\n'))\n}\n\nasync function main() {\n const githubContributors: Contributor[] = []\n\n // eslint-disable-next-line no-restricted-syntax\n for await (const lastUsers of fetchUsers()) {\n githubContributors.push(...lastUsers)\n }\n\n const users = await Promise.allSettled(\n githubContributors\n .filter((usr) => usr.login && usr.type !== 'Bot' && !IGNORED_USERS.has(usr.login))\n .map((c) => getData<User>(c.url))\n )\n\n writeTable(\n users\n .map((result) => {\n if (result.status === 'fulfilled') {\n return result.value\n }\n return null\n })\n .filter((c): c is User => c?.login != null),\n 5\n )\n}\n\nexport const generateContributors = () =>\n main()\n .then(() => Logger.success('Generate contributors successfully!'))\n .catch((error) => {\n Logger.error('Generate contributors failed!')\n Logger.error(error)\n exit(1)\n })\n","import { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises'\nimport { join, relative, resolve } from 'node:path'\nimport { cwd } from 'node:process'\n\nimport Handlebars from 'handlebars'\n\nimport { Logger } from '@/utils'\n\ninterface GenerateMonorepoLibOptions {\n packageName: string\n packageOrgName: string\n packageDescription: string\n org: string\n repo: string\n}\n\ninterface PathInfo {\n type: 'dir' | 'file'\n path: string\n relativePath: string\n level: number\n}\n\nenum PathType {\n DIR = 'dir',\n FILE = 'file'\n}\n\nexport const generateMonorepoLib = async (options: GenerateMonorepoLibOptions) => {\n const { packageName } = options\n const sourcePath = resolve(import.meta.dirname, '../assets/templates/monorepo-lib')\n const targetPath = resolve(cwd(), 'bit-ocean.config.js', '../packages', packageName)\n\n try {\n const templatePaths = await getTemplatePaths(sourcePath)\n\n const processTemplateFile = async (p: PathInfo) => {\n const targetWritePath = resolve(targetPath, p.relativePath)\n let byteCount: number = 0\n if (p.type === PathType.DIR) {\n await mkdir(targetWritePath)\n } else {\n const templateContent = await readFile(p.path, 'utf-8')\n const renderedContent = Handlebars.compile(templateContent)(options)\n await writeFile(targetWritePath, renderedContent)\n byteCount = Buffer.byteLength(renderedContent, 'utf-8')\n }\n Logger.success(\n `CREATED ${relative(cwd(), targetWritePath)}${byteCount ? ` (${byteCount} bytes)` : ''}`\n )\n }\n\n // TODO: Check if the target path already exists, and if so, ask the user if they want to overwrite it\n try {\n await rm(targetPath, { recursive: true })\n } catch {\n //\n }\n\n await mkdir(targetPath)\n\n while (templatePaths.length) {\n // eslint-disable-next-line no-await-in-loop\n await processTemplateFile(templatePaths.shift()!)\n }\n } catch (err) {\n Logger.error(err as Error)\n }\n}\n\nasync function getTemplatePaths(rootPath: string) {\n const results: PathInfo[] = []\n\n async function traverseDirectory(currentPath: string, level = 0) {\n try {\n const entries = await readdir(currentPath, { withFileTypes: true })\n\n const entryPromise = entries.map(async (entry) => {\n const entryPath = join(currentPath, entry.name)\n const relativePath = relative(\n rootPath,\n entryPath.endsWith('.hbs') ? entryPath.slice(0, -4) : entryPath\n )\n\n if (entry.isDirectory()) {\n results.push({\n type: PathType.DIR,\n path: entryPath,\n relativePath,\n level\n })\n await traverseDirectory(entryPath, level + 1)\n } else {\n results.push({\n type: PathType.FILE,\n path: entryPath,\n relativePath,\n level\n })\n }\n })\n\n await Promise.all(entryPromise)\n } catch (err) {\n Logger.error(err as Error)\n }\n }\n\n await traverseDirectory(rootPath)\n return results.toSorted((a, b) => a.level - b.level)\n}\n","import prompts from 'prompts'\n\nimport { Logger, readGitRepo } from '@/utils'\n\nimport { generateConfig } from './config'\nimport { generateContributors } from './contributors'\nimport { generateMonorepoLib } from './monorepo-lib'\n\nenum ActionChoice {\n MONOREPO_LIB,\n CONFIG,\n CONTRIBUTORS\n}\n\nexport const g = async () => {\n const gitRepoInfo = readGitRepo()\n const response = await prompts([\n {\n type: 'select',\n name: 'action',\n message: 'Select a generator:',\n choices: [\n {\n title: 'Monorepo Lib',\n value: ActionChoice.MONOREPO_LIB,\n description: 'Generate a monorepo lib.'\n },\n {\n title: 'Config',\n value: ActionChoice.CONFIG,\n description: 'Generate bit-ocean.config.js.'\n },\n {\n title: 'Contributors',\n value: ActionChoice.CONTRIBUTORS,\n description: 'Generate CONTRIBUTORS.md.'\n }\n ]\n },\n {\n type: (_, values) => (values.action === ActionChoice.MONOREPO_LIB ? 'text' : null),\n name: 'packageName',\n message: 'Enter the lib name:',\n initial: 'my-lib'\n },\n {\n type: (_, values) => (values.action === ActionChoice.MONOREPO_LIB ? 'text' : null),\n name: 'packageDescription',\n message: 'Enter the lib description:',\n initial: 'My lib description.'\n },\n {\n type: (_, values) => (values.action === ActionChoice.MONOREPO_LIB ? 'text' : null),\n name: 'packageOrgName',\n message: 'Enter the npm org name:',\n initial: gitRepoInfo.org,\n // TODO: Not work.\n hint: (_, values) => `Your lib name will be: @${values.packageOrgName}/${values.packageName}`\n },\n {\n type: (_, values) => (values.action === ActionChoice.CONFIG ? 'text' : null),\n name: 'repo',\n message: 'Enter the GitHub repository name:',\n initial: gitRepoInfo.repo\n },\n {\n type: (_, values) => (values.action === ActionChoice.CONFIG ? 'text' : null),\n name: 'org',\n message: 'Enter the GitHub organization name:',\n initial: gitRepoInfo.org\n },\n {\n type: (_, values) => (values.action === ActionChoice.CONFIG ? 'text' : null),\n name: 'repo',\n message: 'Enter the GitHub repository name:',\n initial: gitRepoInfo.repo\n }\n ])\n\n const {\n action,\n packageName,\n packageOrgName,\n packageDescription,\n org = gitRepoInfo.org,\n repo = gitRepoInfo.repo\n } = response\n\n switch (action) {\n case ActionChoice.MONOREPO_LIB:\n generateMonorepoLib({\n packageName,\n packageOrgName,\n packageDescription,\n repo,\n org\n })\n break\n case ActionChoice.CONFIG:\n generateConfig({ repo, org })\n break\n case ActionChoice.CONTRIBUTORS:\n generateContributors()\n break\n default:\n Logger.error('No action selected!')\n }\n}\n","import { argv, exit } from 'node:process'\n\nimport { program } from 'commander'\n\nimport { Logger, readPackageJson } from '@/utils'\n\nimport { bump } from './bump'\nimport { globalConfig } from './config'\nimport { cspell } from './cspell'\nimport { g } from './generators'\n\nprogram\n .name(globalConfig.name!)\n .description('Universal CLI tools for Bit Ocean.')\n .version(readPackageJson().version!, '-v, --version', 'Output the current version.')\n .helpOption('-h, --help', 'Output usage information.')\n .helpCommand(false)\n\nprogram\n .command('cspell')\n .summary('CSpell related scripts.')\n .description('CSpell related scripts.')\n .action(cspell)\nprogram\n .command('engineering')\n .summary('Engineering tools.')\n .description('Engineering tools.')\n .option('-c, --check', 'Check the engineering tools.')\n .action((args) => {\n const { check } = args\n if (check) {\n Logger.info('Check the engineering tools.')\n } else {\n Logger.info('Engineering tools.')\n }\n })\nprogram.command('g').description('Generators').action(g)\nprogram.command('bump').description('Bump the version of the deps.').action(bump)\n\nprogram.on('command:*', () => {\n Logger.error('Action not found!')\n exit(1)\n})\n\nprogram.parse(argv)\n"]}