create-lobe-lint 2.0.0-beta.8 → 2.0.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/dist/index.js CHANGED
@@ -468,7 +468,7 @@ function installDependencies(pm, packages, cwd) {
468
468
  try {
469
469
  execSync(command, {
470
470
  cwd,
471
- stdio: "pipe"
471
+ stdio: "inherit"
472
472
  });
473
473
  return { success: true };
474
474
  } catch (error) {
@@ -568,21 +568,23 @@ async function run(options$1) {
568
568
  else shouldInstall = confirmInstall;
569
569
  }
570
570
  if (shouldInstall) {
571
- s.start("Installing dependencies...");
571
+ const installCommand = getInstallCommand(projectInfo.packageManager, deps);
572
+ p.log.info(`Running: ${pc.cyan(installCommand)}`);
572
573
  const result = installDependencies(projectInfo.packageManager, deps, cwd);
573
574
  if (result.success) {
574
- s.stop("Dependencies installed");
575
+ p.log.success("Dependencies installed");
575
576
  if (gitHooksConfigured) try {
577
+ p.log.info(`Running: ${pc.cyan("npx simple-git-hooks")}`);
576
578
  execSync("npx simple-git-hooks", {
577
579
  cwd,
578
- stdio: "pipe"
580
+ stdio: "inherit"
579
581
  });
580
582
  p.log.success("Git hooks initialized");
581
583
  } catch {
582
584
  p.log.warn("Failed to initialize git hooks. Run manually: npx simple-git-hooks");
583
585
  }
584
586
  } else {
585
- s.stop("Failed to install dependencies");
587
+ p.log.error("Failed to install dependencies");
586
588
  p.log.error(result.error || "Unknown error");
587
589
  p.log.info(`Run manually: ${pc.cyan(getInstallCommandHint(projectInfo.packageManager, deps))}`);
588
590
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["CONFIG_META: Record<ConfigTool, ConfigMeta>","PRESET_TOOLS: ConfigTool[]","ALL_TOOLS: ConfigTool[]","EXISTING_CONFIG_PATTERNS: Record<ConfigTool, string[]>","ctx: GeneratorContext","options: string[]","LINT_STAGED_RULES: Record<ConfigTool, { pattern: string; commands: string[] } | null>","pm: PackageManager","runners: Record<PackageManager, string>","ctx: GeneratorContext","lintStaged: Record<string, string[]>","simpleGitHooks: Record<string, string>","deps: string[]","ctx: GeneratorContext","files: GeneratedFile[]","tool: ConfigTool","cwd: string","existing: ConfigTool[]","value: string | undefined","cwd: string","files: GeneratedFile[]","filename: string","cwd: string","modifications: {\n lintStaged?: Record<string, string[]>;\n simpleGitHooks?: Record<string, string>;\n }","pm: PackageManager","packages: string[]","cwd: string","options: CliOptions","selections: UserSelections","ctx: GeneratorContext","detectedFramework: ReactFramework","tools: ConfigTool[]","detected: ReactFramework","framework: ReactFramework","pm: string","deps: string[]","options: CliOptions","error: unknown"],"sources":["../src/constants.ts","../src/generators/commitlint.ts","../src/generators/eslint.ts","../src/generators/prettier.ts","../src/generators/remarklint.ts","../src/generators/semantic-release.ts","../src/generators/stylelint.ts","../src/generators/git-hooks.ts","../src/generators/index.ts","../src/utils/detect.ts","../src/utils/fs.ts","../src/utils/package-json.ts","../src/utils/package-manager.ts","../src/cli.ts","../src/index.ts"],"sourcesContent":["import type { ConfigMeta, ConfigTool } from './types.js';\n\nexport const CONFIG_META: Record<ConfigTool, ConfigMeta> = {\n 'eslint': {\n name: 'eslint',\n displayName: 'ESLint',\n package: '@lobehub/eslint-config',\n peerDependencies: ['eslint'],\n configFile: 'eslint.config.mjs',\n },\n 'prettier': {\n name: 'prettier',\n displayName: 'Prettier',\n package: '@lobehub/prettier-config',\n peerDependencies: ['prettier'],\n configFile: 'prettier.config.mjs',\n },\n 'stylelint': {\n name: 'stylelint',\n displayName: 'Stylelint',\n package: '@lobehub/stylelint-config',\n peerDependencies: ['stylelint'],\n configFile: 'stylelint.config.mjs',\n },\n 'commitlint': {\n name: 'commitlint',\n displayName: 'Commitlint',\n package: '@lobehub/commitlint-config',\n peerDependencies: ['@commitlint/cli'],\n configFile: 'commitlint.config.mjs',\n },\n 'remarklint': {\n name: 'remarklint',\n displayName: 'Remarklint',\n package: '@lobehub/remarklint-config',\n peerDependencies: ['remark-cli'],\n configFile: '.remarkrc.mjs',\n },\n 'semantic-release': {\n name: 'semantic-release',\n displayName: 'Semantic Release',\n package: '@lobehub/semantic-release-config',\n peerDependencies: ['semantic-release'],\n configFile: 'release.config.mjs',\n },\n};\n\nexport const PRESET_TOOLS: ConfigTool[] = ['eslint', 'prettier', 'stylelint', 'commitlint'];\n\nexport const ALL_TOOLS: ConfigTool[] = [\n 'eslint',\n 'prettier',\n 'stylelint',\n 'commitlint',\n 'remarklint',\n 'semantic-release',\n];\n\nexport const REACT_FRAMEWORKS = ['next', 'remix', 'vite', 'expo'] as const;\n\nexport const EXISTING_CONFIG_PATTERNS: Record<ConfigTool, string[]> = {\n 'eslint': [\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n '.eslintrc',\n '.eslintrc.js',\n '.eslintrc.json',\n '.eslintrc.yaml',\n '.eslintrc.yml',\n ],\n 'prettier': [\n 'prettier.config.js',\n 'prettier.config.mjs',\n 'prettier.config.cjs',\n '.prettierrc',\n '.prettierrc.js',\n '.prettierrc.json',\n '.prettierrc.yaml',\n '.prettierrc.yml',\n ],\n 'stylelint': [\n 'stylelint.config.js',\n 'stylelint.config.mjs',\n 'stylelint.config.cjs',\n '.stylelintrc',\n '.stylelintrc.js',\n '.stylelintrc.json',\n '.stylelintrc.yaml',\n '.stylelintrc.yml',\n ],\n 'commitlint': [\n 'commitlint.config.js',\n 'commitlint.config.mjs',\n 'commitlint.config.cjs',\n '.commitlintrc',\n '.commitlintrc.js',\n '.commitlintrc.json',\n '.commitlintrc.yaml',\n '.commitlintrc.yml',\n ],\n 'remarklint': ['.remarkrc', '.remarkrc.js', '.remarkrc.mjs', '.remarkrc.json', '.remarkrc.yaml'],\n 'semantic-release': [\n 'release.config.js',\n 'release.config.mjs',\n 'release.config.cjs',\n '.releaserc',\n '.releaserc.js',\n '.releaserc.json',\n '.releaserc.yaml',\n ],\n};\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateCommitlintConfig(): GeneratedFile {\n const content = `import config from '@lobehub/commitlint-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.commitlint.configFile,\n content,\n };\n}\n\nexport function getCommitlintDependencies(): string[] {\n return [CONFIG_META.commitlint.package, ...CONFIG_META.commitlint.peerDependencies];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile, GeneratorContext } from '../types.js';\n\nexport function generateEslintConfig(ctx: GeneratorContext): GeneratedFile {\n const { projectInfo, selections } = ctx;\n const { reactFramework } = selections;\n const { hasTypeScript } = projectInfo;\n\n const options: string[] = [];\n\n switch (reactFramework) {\n case 'next': {\n options.push(`react: 'next'`, `next: true`);\n\n break;\n }\n case 'remix': {\n options.push(`react: 'remix'`);\n\n break;\n }\n case 'vite': {\n options.push(`react: 'vite'`);\n\n break;\n }\n case 'expo': {\n options.push(`react: 'expo'`, `reactNative: true`);\n\n break;\n }\n case true: {\n options.push(`react: true`);\n\n break;\n }\n // No default\n }\n\n if (hasTypeScript) {\n options.push(`typescript: true`);\n }\n\n const optionsStr = options.length > 0 ? `{\\n ${options.join(',\\n ')},\\n}` : '';\n\n const content = `import { defineConfig } from '@lobehub/eslint-config';\n\nexport default defineConfig(${optionsStr});\n`;\n\n return {\n path: CONFIG_META.eslint.configFile,\n content,\n };\n}\n\nexport function getEslintDependencies(ctx: GeneratorContext): string[] {\n const deps = [CONFIG_META.eslint.package, ...CONFIG_META.eslint.peerDependencies];\n\n if (ctx.projectInfo.hasTypeScript) {\n deps.push('typescript');\n }\n\n return deps;\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generatePrettierConfig(): GeneratedFile {\n const content = `import config from '@lobehub/prettier-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.prettier.configFile,\n content,\n };\n}\n\nexport function getPrettierDependencies(): string[] {\n return [CONFIG_META.prettier.package, ...CONFIG_META.prettier.peerDependencies];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateRemarklintConfig(): GeneratedFile {\n const content = `import config from '@lobehub/remarklint-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.remarklint.configFile,\n content,\n };\n}\n\nexport function getRemarklintDependencies(): string[] {\n return [CONFIG_META.remarklint.package, ...CONFIG_META.remarklint.peerDependencies];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateSemanticReleaseConfig(): GeneratedFile {\n const content = `import config from '@lobehub/semantic-release-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META['semantic-release'].configFile,\n content,\n };\n}\n\nexport function getSemanticReleaseDependencies(): string[] {\n return [\n CONFIG_META['semantic-release'].package,\n ...CONFIG_META['semantic-release'].peerDependencies,\n ];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateStylelintConfig(): GeneratedFile {\n const content = `import config from '@lobehub/stylelint-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.stylelint.configFile,\n content,\n };\n}\n\nexport function getStylelintDependencies(): string[] {\n return [CONFIG_META.stylelint.package, ...CONFIG_META.stylelint.peerDependencies];\n}\n","import type { ConfigTool, GeneratorContext, PackageManager } from '../types.js';\n\nexport interface GitHooksConfig {\n lintStaged: Record<string, string[]>;\n simpleGitHooks: Record<string, string>;\n}\n\nconst LINT_STAGED_RULES: Record<ConfigTool, { pattern: string; commands: string[] } | null> = {\n 'commitlint': null,\n 'eslint': { pattern: '*.{js,jsx,ts,tsx}', commands: ['eslint --fix'] },\n 'prettier': { pattern: '*', commands: ['prettier --write --ignore-unknown'] },\n 'remarklint': { pattern: '*.md', commands: ['remark --quiet --output --'] },\n 'semantic-release': null,\n 'stylelint': { pattern: '*.{css,less,scss}', commands: ['stylelint --fix'] },\n};\n\nfunction getLintStagedRunner(pm: PackageManager): string {\n const runners: Record<PackageManager, string> = {\n bun: 'bun run lint-staged',\n npm: 'npx lint-staged',\n pnpm: 'pnpm lint-staged',\n yarn: 'yarn lint-staged',\n };\n return runners[pm];\n}\n\nexport function generateGitHooksConfig(ctx: GeneratorContext): GitHooksConfig {\n const { projectInfo, selections } = ctx;\n const lintStaged: Record<string, string[]> = {};\n\n for (const tool of selections.tools) {\n const rule = LINT_STAGED_RULES[tool];\n if (rule) {\n if (!lintStaged[rule.pattern]) {\n lintStaged[rule.pattern] = [];\n }\n lintStaged[rule.pattern].push(...rule.commands);\n }\n }\n\n const simpleGitHooks: Record<string, string> = {};\n\n if (Object.keys(lintStaged).length > 0) {\n simpleGitHooks['pre-commit'] = getLintStagedRunner(projectInfo.packageManager);\n }\n\n if (selections.tools.includes('commitlint')) {\n simpleGitHooks['commit-msg'] = 'npx --no -- commitlint --edit $1';\n }\n\n return { lintStaged, simpleGitHooks };\n}\n\nexport function getGitHooksDependencies(ctx: GeneratorContext): string[] {\n const deps: string[] = [];\n const config = generateGitHooksConfig(ctx);\n\n if (Object.keys(config.lintStaged).length > 0) deps.push('lint-staged');\n if (Object.keys(config.simpleGitHooks).length > 0) deps.push('simple-git-hooks');\n\n return deps;\n}\n","import type { ConfigTool, GeneratedFile, GeneratorContext } from '../types.js';\nimport { generateCommitlintConfig, getCommitlintDependencies } from './commitlint.js';\nimport { generateEslintConfig, getEslintDependencies } from './eslint.js';\nimport { generatePrettierConfig, getPrettierDependencies } from './prettier.js';\nimport { generateRemarklintConfig, getRemarklintDependencies } from './remarklint.js';\nimport {\n generateSemanticReleaseConfig,\n getSemanticReleaseDependencies,\n} from './semantic-release.js';\nimport { generateStylelintConfig, getStylelintDependencies } from './stylelint.js';\n\nexport function generateConfigs(ctx: GeneratorContext): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n\n for (const tool of ctx.selections.tools) {\n const file = generateConfig(tool, ctx);\n if (file) {\n files.push(file);\n }\n }\n\n return files;\n}\n\nfunction generateConfig(tool: ConfigTool, ctx: GeneratorContext): GeneratedFile | null {\n switch (tool) {\n case 'eslint': {\n return generateEslintConfig(ctx);\n }\n case 'prettier': {\n return generatePrettierConfig();\n }\n case 'stylelint': {\n return generateStylelintConfig();\n }\n case 'commitlint': {\n return generateCommitlintConfig();\n }\n case 'remarklint': {\n return generateRemarklintConfig();\n }\n case 'semantic-release': {\n return generateSemanticReleaseConfig();\n }\n default: {\n return null;\n }\n }\n}\n\nexport function getDependencies(ctx: GeneratorContext): string[] {\n const deps = new Set<string>();\n\n for (const tool of ctx.selections.tools) {\n const toolDeps = getToolDependencies(tool, ctx);\n for (const dep of toolDeps) {\n deps.add(dep);\n }\n }\n\n return Array.from(deps);\n}\n\nfunction getToolDependencies(tool: ConfigTool, ctx: GeneratorContext): string[] {\n switch (tool) {\n case 'eslint': {\n return getEslintDependencies(ctx);\n }\n case 'prettier': {\n return getPrettierDependencies();\n }\n case 'stylelint': {\n return getStylelintDependencies();\n }\n case 'commitlint': {\n return getCommitlintDependencies();\n }\n case 'remarklint': {\n return getRemarklintDependencies();\n }\n case 'semantic-release': {\n return getSemanticReleaseDependencies();\n }\n default: {\n return [];\n }\n }\n}\n\nexport { generateCommitlintConfig, getCommitlintDependencies } from './commitlint.js';\nexport { generateEslintConfig, getEslintDependencies } from './eslint.js';\nexport type { GitHooksConfig } from './git-hooks.js';\nexport { generateGitHooksConfig, getGitHooksDependencies } from './git-hooks.js';\nexport { generatePrettierConfig, getPrettierDependencies } from './prettier.js';\nexport { generateRemarklintConfig, getRemarklintDependencies } from './remarklint.js';\nexport {\n generateSemanticReleaseConfig,\n getSemanticReleaseDependencies,\n} from './semantic-release.js';\nexport { generateStylelintConfig, getStylelintDependencies } from './stylelint.js';\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { LOCKS } from 'package-manager-detector';\n\nimport { EXISTING_CONFIG_PATTERNS, REACT_FRAMEWORKS } from '../constants.js';\nimport type { ConfigTool, PackageManager, ProjectInfo, ReactFramework } from '../types.js';\n\nexport function detectPackageManager(cwd: string): PackageManager {\n for (const [lockfile, agent] of Object.entries(LOCKS)) {\n if (fs.existsSync(path.join(cwd, lockfile))) {\n return agent as PackageManager;\n }\n }\n return 'npm';\n}\n\nexport function detectTypeScript(cwd: string): boolean {\n return (\n fs.existsSync(path.join(cwd, 'tsconfig.json')) ||\n fs.existsSync(path.join(cwd, 'tsconfig.base.json'))\n );\n}\n\nexport function detectReactFramework(cwd: string): ReactFramework {\n const pkgPath = path.join(cwd, 'package.json');\n if (!fs.existsSync(pkgPath)) {\n return false;\n }\n\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n if (allDeps['next']) {\n return 'next';\n }\n if (allDeps['@remix-run/react'] || allDeps['remix']) {\n return 'remix';\n }\n if (allDeps['expo']) {\n return 'expo';\n }\n if (allDeps['vite'] && allDeps['react']) {\n return 'vite';\n }\n if (allDeps['react']) {\n return true;\n }\n } catch {\n // ignore parse errors\n }\n\n return false;\n}\n\nexport function detectExistingConfigs(cwd: string): ConfigTool[] {\n const existing: ConfigTool[] = [];\n\n for (const [tool, patterns] of Object.entries(EXISTING_CONFIG_PATTERNS)) {\n for (const pattern of patterns) {\n if (fs.existsSync(path.join(cwd, pattern))) {\n existing.push(tool as ConfigTool);\n break;\n }\n }\n }\n\n return existing;\n}\n\nexport function getProjectName(cwd: string): string {\n const pkgPath = path.join(cwd, 'package.json');\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n if (pkg.name) {\n return pkg.name;\n }\n } catch {\n // ignore\n }\n }\n return path.basename(cwd);\n}\n\nexport function detectProject(cwd: string): ProjectInfo {\n const reactFramework = detectReactFramework(cwd);\n return {\n name: getProjectName(cwd),\n packageManager: detectPackageManager(cwd),\n hasTypeScript: detectTypeScript(cwd),\n hasReact: reactFramework !== false,\n reactFramework,\n existingConfigs: detectExistingConfigs(cwd),\n };\n}\n\nexport function parseReactFramework(value: string | undefined): ReactFramework {\n if (!value || value === 'false') {\n return false;\n }\n if (value === 'true') {\n return true;\n }\n if (REACT_FRAMEWORKS.includes(value as (typeof REACT_FRAMEWORKS)[number])) {\n return value as ReactFramework;\n }\n return true;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { GeneratedFile } from '../types.js';\n\nexport function writeFiles(cwd: string, files: GeneratedFile[]): void {\n for (const file of files) {\n const filePath = path.join(cwd, file.path);\n fs.writeFileSync(filePath, file.content, 'utf8');\n }\n}\n\nexport function fileExists(cwd: string, filename: string): boolean {\n return fs.existsSync(path.join(cwd, filename));\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport function readPackageJson(cwd: string): Record<string, unknown> | null {\n const pkgPath = path.join(cwd, 'package.json');\n if (!fs.existsSync(pkgPath)) return null;\n try {\n return JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n } catch {\n return null;\n }\n}\n\nexport function updatePackageJson(\n cwd: string,\n modifications: {\n lintStaged?: Record<string, string[]>;\n simpleGitHooks?: Record<string, string>;\n },\n): boolean {\n const pkg = readPackageJson(cwd);\n if (!pkg) return false;\n\n if (modifications.lintStaged && Object.keys(modifications.lintStaged).length > 0) {\n pkg['lint-staged'] = modifications.lintStaged;\n }\n if (modifications.simpleGitHooks && Object.keys(modifications.simpleGitHooks).length > 0) {\n pkg['simple-git-hooks'] = modifications.simpleGitHooks;\n }\n\n fs.writeFileSync(path.join(cwd, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', 'utf8');\n return true;\n}\n\nexport function hasExistingGitHooksConfig(cwd: string): {\n hasHusky: boolean;\n hasLintStaged: boolean;\n hasSimpleGitHooks: boolean;\n} {\n const pkg = readPackageJson(cwd);\n return {\n hasHusky: fs.existsSync(path.join(cwd, '.husky')),\n hasLintStaged: pkg ? 'lint-staged' in pkg : false,\n hasSimpleGitHooks: pkg ? 'simple-git-hooks' in pkg : false,\n };\n}\n","import { execSync } from 'node:child_process';\n\nimport type { PackageManager } from '../types.js';\n\nexport function getInstallCommand(pm: PackageManager, packages: string[]): string {\n const pkgList = packages.join(' ');\n switch (pm) {\n case 'npm': {\n return `npm install -D ${pkgList}`;\n }\n case 'yarn': {\n return `yarn add -D ${pkgList}`;\n }\n case 'pnpm': {\n return `pnpm add -D ${pkgList}`;\n }\n case 'bun': {\n return `bun add -D ${pkgList}`;\n }\n }\n}\n\nexport function installDependencies(\n pm: PackageManager,\n packages: string[],\n cwd: string,\n): { success: boolean; error?: string } {\n const command = getInstallCommand(pm, packages);\n try {\n execSync(command, {\n cwd,\n stdio: 'pipe',\n });\n return { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, error: message };\n }\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport { execSync } from 'node:child_process';\n\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { ALL_TOOLS, CONFIG_META, PRESET_TOOLS } from './constants.js';\nimport {\n generateConfigs,\n generateGitHooksConfig,\n getDependencies,\n getGitHooksDependencies,\n} from './generators/index.js';\nimport type {\n CliOptions,\n ConfigTool,\n GeneratorContext,\n ReactFramework,\n UserSelections,\n} from './types.js';\nimport {\n detectProject,\n hasExistingGitHooksConfig,\n installDependencies,\n parseReactFramework,\n updatePackageJson,\n writeFiles,\n} from './utils/index.js';\n\nexport async function run(options: CliOptions): Promise<void> {\n const cwd = process.cwd();\n\n p.intro(pc.bgCyan(pc.black(' create-lobe-lint ')));\n\n if (options.help) {\n printHelp();\n return;\n }\n\n const projectInfo = detectProject(cwd);\n\n p.note(\n [\n `${pc.dim('Project:')} ${pc.cyan(projectInfo.name)}`,\n `${pc.dim('Package Manager:')} ${pc.cyan(projectInfo.packageManager)}`,\n `${pc.dim('TypeScript:')} ${pc.cyan(projectInfo.hasTypeScript ? 'Yes' : 'No')}`,\n `${pc.dim('React Framework:')} ${pc.cyan(formatReactFramework(projectInfo.reactFramework))}`,\n projectInfo.existingConfigs.length > 0\n ? `${pc.dim('Existing configs:')} ${pc.yellow(projectInfo.existingConfigs.join(', '))}`\n : null,\n ]\n .filter(Boolean)\n .join('\\n'),\n 'Detected Project',\n );\n\n let selections: UserSelections;\n\n if (hasToolFlags(options)) {\n selections = getSelectionsFromFlags(options, projectInfo.reactFramework);\n } else if (options.preset) {\n selections = await getPresetSelections(options, projectInfo.reactFramework);\n } else if (options.manual) {\n selections = await getManualSelections(options, projectInfo.reactFramework);\n } else {\n const mode = await p.select({\n message: 'How would you like to setup?',\n options: [\n {\n value: 'preset',\n label: 'Preset (Recommended)',\n hint: 'ESLint, Prettier, Stylelint, Commitlint',\n },\n { value: 'manual', label: 'Manual', hint: 'Choose individual tools' },\n ],\n });\n\n if (p.isCancel(mode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n if (mode === 'preset') {\n selections = await getPresetSelections(options, projectInfo.reactFramework);\n } else {\n selections = await getManualSelections(options, projectInfo.reactFramework);\n }\n }\n\n if (selections.tools.length === 0) {\n p.cancel('No tools selected.');\n process.exit(0);\n }\n\n // Ask about git hooks configuration\n selections.configureGitHooks = await askGitHooksConfiguration(options, selections);\n\n const ctx: GeneratorContext = {\n cwd,\n projectInfo,\n selections,\n };\n\n const files = generateConfigs(ctx);\n const deps = getDependencies(ctx);\n\n // Add git hooks dependencies if configured\n if (selections.configureGitHooks) {\n deps.push(...getGitHooksDependencies(ctx));\n }\n\n const existingConfigsToOverwrite = selections.tools.filter((t) =>\n projectInfo.existingConfigs.includes(t),\n );\n\n if (existingConfigsToOverwrite.length > 0 && !options.yes) {\n const shouldOverwrite = await p.confirm({\n message: `Overwrite existing configs? (${existingConfigsToOverwrite.join(', ')})`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n s.start('Generating configuration files...');\n\n writeFiles(cwd, files);\n\n // Generate git hooks configuration\n let gitHooksConfigured = false;\n if (selections.configureGitHooks) {\n const gitHooksConfig = generateGitHooksConfig(ctx);\n const updated = updatePackageJson(cwd, gitHooksConfig);\n if (updated) {\n gitHooksConfigured = true;\n }\n }\n\n s.stop(`Generated ${files.length} config files`);\n\n for (const file of files) {\n p.log.success(`${pc.green('+')} ${file.path}`);\n }\n\n if (gitHooksConfigured) {\n p.log.success(`${pc.green('+')} package.json (lint-staged, simple-git-hooks)`);\n }\n\n p.note(deps.map((d) => `${pc.green('+')} ${d}`).join('\\n'), 'Dependencies to install');\n\n let shouldInstall = options.install ?? true;\n\n if (options.install === undefined && !options.yes) {\n const confirmInstall = await p.confirm({\n message: 'Install dependencies?',\n initialValue: true,\n });\n\n if (p.isCancel(confirmInstall)) {\n shouldInstall = false;\n } else {\n shouldInstall = confirmInstall;\n }\n }\n\n if (shouldInstall) {\n s.start('Installing dependencies...');\n\n const result = installDependencies(projectInfo.packageManager, deps, cwd);\n\n if (result.success) {\n s.stop('Dependencies installed');\n\n // Initialize git hooks after dependencies are installed\n if (gitHooksConfigured) {\n try {\n execSync('npx simple-git-hooks', { cwd, stdio: 'pipe' });\n p.log.success('Git hooks initialized');\n } catch {\n p.log.warn('Failed to initialize git hooks. Run manually: npx simple-git-hooks');\n }\n }\n } else {\n s.stop('Failed to install dependencies');\n p.log.error(result.error || 'Unknown error');\n p.log.info(\n `Run manually: ${pc.cyan(getInstallCommandHint(projectInfo.packageManager, deps))}`,\n );\n }\n } else {\n p.log.info(`Run: ${pc.cyan(getInstallCommandHint(projectInfo.packageManager, deps))}`);\n if (gitHooksConfigured) {\n p.log.info(`After installing, run: ${pc.cyan('npx simple-git-hooks')}`);\n }\n }\n\n p.outro(pc.green('Done! Happy linting!'));\n}\n\nfunction hasToolFlags(options: CliOptions): boolean {\n return Boolean(\n options.eslint ||\n options.prettier ||\n options.stylelint ||\n options.commitlint ||\n options.remarklint ||\n options.semanticRelease,\n );\n}\n\nfunction getSelectionsFromFlags(\n options: CliOptions,\n detectedFramework: ReactFramework,\n): UserSelections {\n const tools: ConfigTool[] = [];\n\n if (options.eslint) tools.push('eslint');\n if (options.prettier) tools.push('prettier');\n if (options.stylelint) tools.push('stylelint');\n if (options.commitlint) tools.push('commitlint');\n if (options.remarklint) tools.push('remarklint');\n if (options.semanticRelease) tools.push('semantic-release');\n\n const reactFramework =\n options.react !== undefined ? parseReactFramework(options.react) : detectedFramework;\n\n return {\n configureGitHooks: false,\n installDeps: options.install ?? true,\n reactFramework,\n tools,\n };\n}\n\nasync function getPresetSelections(\n options: CliOptions,\n detectedFramework: ReactFramework,\n): Promise<UserSelections> {\n let reactFramework = detectedFramework;\n\n if (options.react !== undefined) {\n reactFramework = parseReactFramework(options.react);\n } else if (detectedFramework !== false && !options.yes) {\n const selectedFramework = await selectReactFramework(detectedFramework);\n if (selectedFramework !== null) {\n reactFramework = selectedFramework;\n }\n }\n\n return {\n configureGitHooks: false,\n installDeps: options.install ?? true,\n reactFramework,\n tools: [...PRESET_TOOLS],\n };\n}\n\nasync function getManualSelections(\n options: CliOptions,\n detectedFramework: ReactFramework,\n): Promise<UserSelections> {\n const selectedTools = await p.multiselect({\n message: 'Select tools to configure:',\n options: ALL_TOOLS.map((tool) => ({\n value: tool,\n label: CONFIG_META[tool].displayName,\n hint: CONFIG_META[tool].package,\n })),\n initialValues: PRESET_TOOLS,\n });\n\n if (p.isCancel(selectedTools)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n let reactFramework = detectedFramework;\n\n if (selectedTools.includes('eslint')) {\n if (options.react !== undefined) {\n reactFramework = parseReactFramework(options.react);\n } else if (!options.yes) {\n const selectedFramework = await selectReactFramework(detectedFramework);\n if (selectedFramework !== null) {\n reactFramework = selectedFramework;\n }\n }\n }\n\n return {\n configureGitHooks: false,\n installDeps: options.install ?? true,\n reactFramework,\n tools: selectedTools as ConfigTool[],\n };\n}\n\nasync function selectReactFramework(detected: ReactFramework): Promise<ReactFramework | null> {\n const options = [\n { value: 'next', label: 'Next.js' },\n { value: 'remix', label: 'Remix' },\n { value: 'vite', label: 'Vite' },\n { value: 'expo', label: 'Expo (React Native)' },\n { value: 'true', label: 'Generic React' },\n { value: 'false', label: 'None (No React)' },\n ];\n\n const detectedValue = detected === true ? 'true' : detected === false ? 'false' : detected;\n\n const sortedOptions = options.toSorted((a, b) => {\n if (a.value === detectedValue) return -1;\n if (b.value === detectedValue) return 1;\n return 0;\n });\n\n if (detectedValue !== 'false') {\n sortedOptions[0] = {\n ...sortedOptions[0],\n label: `${sortedOptions[0].label} (Detected)`,\n };\n }\n\n const selected = await p.select({\n message: 'Select React framework for ESLint:',\n options: sortedOptions,\n });\n\n if (p.isCancel(selected)) {\n return null;\n }\n\n return parseReactFramework(selected as string);\n}\n\nasync function askGitHooksConfiguration(\n options: CliOptions,\n selections: UserSelections,\n): Promise<boolean> {\n // Check if --git-hooks or --no-git-hooks was explicitly set\n if (options.gitHooks !== undefined) {\n return options.gitHooks;\n }\n\n // Check if there are tools that can be linted\n const hasLintableTools = selections.tools.some((t) =>\n ['eslint', 'prettier', 'stylelint', 'remarklint'].includes(t),\n );\n const hasCommitlint = selections.tools.includes('commitlint');\n\n // Skip if no lintable tools and no commitlint\n if (!hasLintableTools && !hasCommitlint) {\n return false;\n }\n\n // Skip asking in yes mode, default to true\n if (options.yes) {\n return true;\n }\n\n // Check for existing configurations\n const cwd = process.cwd();\n const existing = hasExistingGitHooksConfig(cwd);\n\n if (existing.hasHusky) {\n p.log.warn('Detected existing Husky configuration. Git hooks setup may conflict.');\n }\n\n if (existing.hasLintStaged || existing.hasSimpleGitHooks) {\n const shouldOverwrite = await p.confirm({\n initialValue: false,\n message: 'Existing lint-staged/simple-git-hooks config detected. Overwrite?',\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n return false;\n }\n return true;\n }\n\n const hookQuestion = await p.confirm({\n initialValue: true,\n message: 'Configure lint-staged and git hooks?',\n });\n\n if (p.isCancel(hookQuestion)) {\n return false;\n }\n\n return hookQuestion;\n}\n\nfunction formatReactFramework(framework: ReactFramework): string {\n if (framework === true) return 'Generic React';\n if (framework === false) return 'None';\n return framework.charAt(0).toUpperCase() + framework.slice(1);\n}\n\nfunction getInstallCommandHint(pm: string, deps: string[]): string {\n const pkgList = deps.join(' ');\n switch (pm) {\n case 'npm': {\n return `npm install -D ${pkgList}`;\n }\n case 'yarn': {\n return `yarn add -D ${pkgList}`;\n }\n case 'pnpm': {\n return `pnpm add -D ${pkgList}`;\n }\n case 'bun': {\n return `bun add -D ${pkgList}`;\n }\n default: {\n return `npm install -D ${pkgList}`;\n }\n }\n}\n\nfunction printHelp(): void {\n console.log(`\n${pc.bold('create-lobe-lint')} - Setup LobeHub lint configurations\n\n${pc.bold('Usage:')}\n npx create-lobe-lint [options]\n\n${pc.bold('Options:')}\n -p, --preset Quick setup with preset tools (ESLint, Prettier, Stylelint, Commitlint)\n -m, --manual Manually select tools to configure\n --eslint Include ESLint configuration\n --prettier Include Prettier configuration\n --stylelint Include Stylelint configuration\n --commitlint Include Commitlint configuration\n --remarklint Include Remarklint configuration\n --semantic-release Include Semantic Release configuration\n --react <framework> Set React framework (next/remix/vite/expo/true/false)\n --git-hooks Configure lint-staged and simple-git-hooks\n --no-git-hooks Skip git hooks configuration\n --install Auto-install dependencies (default)\n --no-install Skip dependency installation\n -y, --yes Skip confirmations\n -h, --help Show help\n\n${pc.bold('Examples:')}\n npx create-lobe-lint # Interactive mode\n npx create-lobe-lint --preset -y # Quick setup with defaults\n npx create-lobe-lint --eslint --prettier --react next\n npx create-lobe-lint --manual # Select tools manually\n`);\n}\n","/* eslint-disable unicorn/no-process-exit, unicorn/prefer-top-level-await */\nimport mri from 'mri';\n\nimport { run } from './cli.js';\nimport type { CliOptions } from './types.js';\n\nconst argv = mri(process.argv.slice(2), {\n alias: {\n h: 'help',\n m: 'manual',\n p: 'preset',\n y: 'yes',\n },\n boolean: [\n 'help',\n 'preset',\n 'manual',\n 'eslint',\n 'prettier',\n 'stylelint',\n 'commitlint',\n 'remarklint',\n 'semantic-release',\n 'yes',\n 'install',\n 'git-hooks',\n ],\n string: ['react'],\n});\n\nconst options: CliOptions = {\n commitlint: argv.commitlint,\n eslint: argv.eslint,\n gitHooks: argv['git-hooks'],\n help: argv.help,\n install: argv.install,\n manual: argv.manual,\n preset: argv.preset,\n prettier: argv.prettier,\n react: argv.react,\n remarklint: argv.remarklint,\n semanticRelease: argv['semantic-release'],\n stylelint: argv.stylelint,\n yes: argv.yes,\n};\n\nrun(options).catch((error: unknown) => {\n console.error(error);\n process.exit(1);\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["CONFIG_META: Record<ConfigTool, ConfigMeta>","PRESET_TOOLS: ConfigTool[]","ALL_TOOLS: ConfigTool[]","EXISTING_CONFIG_PATTERNS: Record<ConfigTool, string[]>","ctx: GeneratorContext","options: string[]","LINT_STAGED_RULES: Record<ConfigTool, { pattern: string; commands: string[] } | null>","pm: PackageManager","runners: Record<PackageManager, string>","ctx: GeneratorContext","lintStaged: Record<string, string[]>","simpleGitHooks: Record<string, string>","deps: string[]","ctx: GeneratorContext","files: GeneratedFile[]","tool: ConfigTool","cwd: string","existing: ConfigTool[]","value: string | undefined","cwd: string","files: GeneratedFile[]","filename: string","cwd: string","modifications: {\n lintStaged?: Record<string, string[]>;\n simpleGitHooks?: Record<string, string>;\n }","pm: PackageManager","packages: string[]","cwd: string","options: CliOptions","selections: UserSelections","ctx: GeneratorContext","detectedFramework: ReactFramework","tools: ConfigTool[]","detected: ReactFramework","framework: ReactFramework","pm: string","deps: string[]","options: CliOptions","error: unknown"],"sources":["../src/constants.ts","../src/generators/commitlint.ts","../src/generators/eslint.ts","../src/generators/prettier.ts","../src/generators/remarklint.ts","../src/generators/semantic-release.ts","../src/generators/stylelint.ts","../src/generators/git-hooks.ts","../src/generators/index.ts","../src/utils/detect.ts","../src/utils/fs.ts","../src/utils/package-json.ts","../src/utils/package-manager.ts","../src/cli.ts","../src/index.ts"],"sourcesContent":["import type { ConfigMeta, ConfigTool } from './types.js';\n\nexport const CONFIG_META: Record<ConfigTool, ConfigMeta> = {\n 'eslint': {\n name: 'eslint',\n displayName: 'ESLint',\n package: '@lobehub/eslint-config',\n peerDependencies: ['eslint'],\n configFile: 'eslint.config.mjs',\n },\n 'prettier': {\n name: 'prettier',\n displayName: 'Prettier',\n package: '@lobehub/prettier-config',\n peerDependencies: ['prettier'],\n configFile: 'prettier.config.mjs',\n },\n 'stylelint': {\n name: 'stylelint',\n displayName: 'Stylelint',\n package: '@lobehub/stylelint-config',\n peerDependencies: ['stylelint'],\n configFile: 'stylelint.config.mjs',\n },\n 'commitlint': {\n name: 'commitlint',\n displayName: 'Commitlint',\n package: '@lobehub/commitlint-config',\n peerDependencies: ['@commitlint/cli'],\n configFile: 'commitlint.config.mjs',\n },\n 'remarklint': {\n name: 'remarklint',\n displayName: 'Remarklint',\n package: '@lobehub/remarklint-config',\n peerDependencies: ['remark-cli'],\n configFile: '.remarkrc.mjs',\n },\n 'semantic-release': {\n name: 'semantic-release',\n displayName: 'Semantic Release',\n package: '@lobehub/semantic-release-config',\n peerDependencies: ['semantic-release'],\n configFile: 'release.config.mjs',\n },\n};\n\nexport const PRESET_TOOLS: ConfigTool[] = ['eslint', 'prettier', 'stylelint', 'commitlint'];\n\nexport const ALL_TOOLS: ConfigTool[] = [\n 'eslint',\n 'prettier',\n 'stylelint',\n 'commitlint',\n 'remarklint',\n 'semantic-release',\n];\n\nexport const REACT_FRAMEWORKS = ['next', 'remix', 'vite', 'expo'] as const;\n\nexport const EXISTING_CONFIG_PATTERNS: Record<ConfigTool, string[]> = {\n 'eslint': [\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n '.eslintrc',\n '.eslintrc.js',\n '.eslintrc.json',\n '.eslintrc.yaml',\n '.eslintrc.yml',\n ],\n 'prettier': [\n 'prettier.config.js',\n 'prettier.config.mjs',\n 'prettier.config.cjs',\n '.prettierrc',\n '.prettierrc.js',\n '.prettierrc.json',\n '.prettierrc.yaml',\n '.prettierrc.yml',\n ],\n 'stylelint': [\n 'stylelint.config.js',\n 'stylelint.config.mjs',\n 'stylelint.config.cjs',\n '.stylelintrc',\n '.stylelintrc.js',\n '.stylelintrc.json',\n '.stylelintrc.yaml',\n '.stylelintrc.yml',\n ],\n 'commitlint': [\n 'commitlint.config.js',\n 'commitlint.config.mjs',\n 'commitlint.config.cjs',\n '.commitlintrc',\n '.commitlintrc.js',\n '.commitlintrc.json',\n '.commitlintrc.yaml',\n '.commitlintrc.yml',\n ],\n 'remarklint': ['.remarkrc', '.remarkrc.js', '.remarkrc.mjs', '.remarkrc.json', '.remarkrc.yaml'],\n 'semantic-release': [\n 'release.config.js',\n 'release.config.mjs',\n 'release.config.cjs',\n '.releaserc',\n '.releaserc.js',\n '.releaserc.json',\n '.releaserc.yaml',\n ],\n};\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateCommitlintConfig(): GeneratedFile {\n const content = `import config from '@lobehub/commitlint-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.commitlint.configFile,\n content,\n };\n}\n\nexport function getCommitlintDependencies(): string[] {\n return [CONFIG_META.commitlint.package, ...CONFIG_META.commitlint.peerDependencies];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile, GeneratorContext } from '../types.js';\n\nexport function generateEslintConfig(ctx: GeneratorContext): GeneratedFile {\n const { projectInfo, selections } = ctx;\n const { reactFramework } = selections;\n const { hasTypeScript } = projectInfo;\n\n const options: string[] = [];\n\n switch (reactFramework) {\n case 'next': {\n options.push(`react: 'next'`, `next: true`);\n\n break;\n }\n case 'remix': {\n options.push(`react: 'remix'`);\n\n break;\n }\n case 'vite': {\n options.push(`react: 'vite'`);\n\n break;\n }\n case 'expo': {\n options.push(`react: 'expo'`, `reactNative: true`);\n\n break;\n }\n case true: {\n options.push(`react: true`);\n\n break;\n }\n // No default\n }\n\n if (hasTypeScript) {\n options.push(`typescript: true`);\n }\n\n const optionsStr = options.length > 0 ? `{\\n ${options.join(',\\n ')},\\n}` : '';\n\n const content = `import { defineConfig } from '@lobehub/eslint-config';\n\nexport default defineConfig(${optionsStr});\n`;\n\n return {\n path: CONFIG_META.eslint.configFile,\n content,\n };\n}\n\nexport function getEslintDependencies(ctx: GeneratorContext): string[] {\n const deps = [CONFIG_META.eslint.package, ...CONFIG_META.eslint.peerDependencies];\n\n if (ctx.projectInfo.hasTypeScript) {\n deps.push('typescript');\n }\n\n return deps;\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generatePrettierConfig(): GeneratedFile {\n const content = `import config from '@lobehub/prettier-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.prettier.configFile,\n content,\n };\n}\n\nexport function getPrettierDependencies(): string[] {\n return [CONFIG_META.prettier.package, ...CONFIG_META.prettier.peerDependencies];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateRemarklintConfig(): GeneratedFile {\n const content = `import config from '@lobehub/remarklint-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.remarklint.configFile,\n content,\n };\n}\n\nexport function getRemarklintDependencies(): string[] {\n return [CONFIG_META.remarklint.package, ...CONFIG_META.remarklint.peerDependencies];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateSemanticReleaseConfig(): GeneratedFile {\n const content = `import config from '@lobehub/semantic-release-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META['semantic-release'].configFile,\n content,\n };\n}\n\nexport function getSemanticReleaseDependencies(): string[] {\n return [\n CONFIG_META['semantic-release'].package,\n ...CONFIG_META['semantic-release'].peerDependencies,\n ];\n}\n","import { CONFIG_META } from '../constants.js';\nimport type { GeneratedFile } from '../types.js';\n\nexport function generateStylelintConfig(): GeneratedFile {\n const content = `import config from '@lobehub/stylelint-config';\n\nexport default config;\n`;\n\n return {\n path: CONFIG_META.stylelint.configFile,\n content,\n };\n}\n\nexport function getStylelintDependencies(): string[] {\n return [CONFIG_META.stylelint.package, ...CONFIG_META.stylelint.peerDependencies];\n}\n","import type { ConfigTool, GeneratorContext, PackageManager } from '../types.js';\n\nexport interface GitHooksConfig {\n lintStaged: Record<string, string[]>;\n simpleGitHooks: Record<string, string>;\n}\n\nconst LINT_STAGED_RULES: Record<ConfigTool, { pattern: string; commands: string[] } | null> = {\n 'commitlint': null,\n 'eslint': { pattern: '*.{js,jsx,ts,tsx}', commands: ['eslint --fix'] },\n 'prettier': { pattern: '*', commands: ['prettier --write --ignore-unknown'] },\n 'remarklint': { pattern: '*.md', commands: ['remark --quiet --output --'] },\n 'semantic-release': null,\n 'stylelint': { pattern: '*.{css,less,scss}', commands: ['stylelint --fix'] },\n};\n\nfunction getLintStagedRunner(pm: PackageManager): string {\n const runners: Record<PackageManager, string> = {\n bun: 'bun run lint-staged',\n npm: 'npx lint-staged',\n pnpm: 'pnpm lint-staged',\n yarn: 'yarn lint-staged',\n };\n return runners[pm];\n}\n\nexport function generateGitHooksConfig(ctx: GeneratorContext): GitHooksConfig {\n const { projectInfo, selections } = ctx;\n const lintStaged: Record<string, string[]> = {};\n\n for (const tool of selections.tools) {\n const rule = LINT_STAGED_RULES[tool];\n if (rule) {\n if (!lintStaged[rule.pattern]) {\n lintStaged[rule.pattern] = [];\n }\n lintStaged[rule.pattern].push(...rule.commands);\n }\n }\n\n const simpleGitHooks: Record<string, string> = {};\n\n if (Object.keys(lintStaged).length > 0) {\n simpleGitHooks['pre-commit'] = getLintStagedRunner(projectInfo.packageManager);\n }\n\n if (selections.tools.includes('commitlint')) {\n simpleGitHooks['commit-msg'] = 'npx --no -- commitlint --edit $1';\n }\n\n return { lintStaged, simpleGitHooks };\n}\n\nexport function getGitHooksDependencies(ctx: GeneratorContext): string[] {\n const deps: string[] = [];\n const config = generateGitHooksConfig(ctx);\n\n if (Object.keys(config.lintStaged).length > 0) deps.push('lint-staged');\n if (Object.keys(config.simpleGitHooks).length > 0) deps.push('simple-git-hooks');\n\n return deps;\n}\n","import type { ConfigTool, GeneratedFile, GeneratorContext } from '../types.js';\nimport { generateCommitlintConfig, getCommitlintDependencies } from './commitlint.js';\nimport { generateEslintConfig, getEslintDependencies } from './eslint.js';\nimport { generatePrettierConfig, getPrettierDependencies } from './prettier.js';\nimport { generateRemarklintConfig, getRemarklintDependencies } from './remarklint.js';\nimport {\n generateSemanticReleaseConfig,\n getSemanticReleaseDependencies,\n} from './semantic-release.js';\nimport { generateStylelintConfig, getStylelintDependencies } from './stylelint.js';\n\nexport function generateConfigs(ctx: GeneratorContext): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n\n for (const tool of ctx.selections.tools) {\n const file = generateConfig(tool, ctx);\n if (file) {\n files.push(file);\n }\n }\n\n return files;\n}\n\nfunction generateConfig(tool: ConfigTool, ctx: GeneratorContext): GeneratedFile | null {\n switch (tool) {\n case 'eslint': {\n return generateEslintConfig(ctx);\n }\n case 'prettier': {\n return generatePrettierConfig();\n }\n case 'stylelint': {\n return generateStylelintConfig();\n }\n case 'commitlint': {\n return generateCommitlintConfig();\n }\n case 'remarklint': {\n return generateRemarklintConfig();\n }\n case 'semantic-release': {\n return generateSemanticReleaseConfig();\n }\n default: {\n return null;\n }\n }\n}\n\nexport function getDependencies(ctx: GeneratorContext): string[] {\n const deps = new Set<string>();\n\n for (const tool of ctx.selections.tools) {\n const toolDeps = getToolDependencies(tool, ctx);\n for (const dep of toolDeps) {\n deps.add(dep);\n }\n }\n\n return Array.from(deps);\n}\n\nfunction getToolDependencies(tool: ConfigTool, ctx: GeneratorContext): string[] {\n switch (tool) {\n case 'eslint': {\n return getEslintDependencies(ctx);\n }\n case 'prettier': {\n return getPrettierDependencies();\n }\n case 'stylelint': {\n return getStylelintDependencies();\n }\n case 'commitlint': {\n return getCommitlintDependencies();\n }\n case 'remarklint': {\n return getRemarklintDependencies();\n }\n case 'semantic-release': {\n return getSemanticReleaseDependencies();\n }\n default: {\n return [];\n }\n }\n}\n\nexport { generateCommitlintConfig, getCommitlintDependencies } from './commitlint.js';\nexport { generateEslintConfig, getEslintDependencies } from './eslint.js';\nexport type { GitHooksConfig } from './git-hooks.js';\nexport { generateGitHooksConfig, getGitHooksDependencies } from './git-hooks.js';\nexport { generatePrettierConfig, getPrettierDependencies } from './prettier.js';\nexport { generateRemarklintConfig, getRemarklintDependencies } from './remarklint.js';\nexport {\n generateSemanticReleaseConfig,\n getSemanticReleaseDependencies,\n} from './semantic-release.js';\nexport { generateStylelintConfig, getStylelintDependencies } from './stylelint.js';\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport { LOCKS } from 'package-manager-detector';\n\nimport { EXISTING_CONFIG_PATTERNS, REACT_FRAMEWORKS } from '../constants.js';\nimport type { ConfigTool, PackageManager, ProjectInfo, ReactFramework } from '../types.js';\n\nexport function detectPackageManager(cwd: string): PackageManager {\n for (const [lockfile, agent] of Object.entries(LOCKS)) {\n if (fs.existsSync(path.join(cwd, lockfile))) {\n return agent as PackageManager;\n }\n }\n return 'npm';\n}\n\nexport function detectTypeScript(cwd: string): boolean {\n return (\n fs.existsSync(path.join(cwd, 'tsconfig.json')) ||\n fs.existsSync(path.join(cwd, 'tsconfig.base.json'))\n );\n}\n\nexport function detectReactFramework(cwd: string): ReactFramework {\n const pkgPath = path.join(cwd, 'package.json');\n if (!fs.existsSync(pkgPath)) {\n return false;\n }\n\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n if (allDeps['next']) {\n return 'next';\n }\n if (allDeps['@remix-run/react'] || allDeps['remix']) {\n return 'remix';\n }\n if (allDeps['expo']) {\n return 'expo';\n }\n if (allDeps['vite'] && allDeps['react']) {\n return 'vite';\n }\n if (allDeps['react']) {\n return true;\n }\n } catch {\n // ignore parse errors\n }\n\n return false;\n}\n\nexport function detectExistingConfigs(cwd: string): ConfigTool[] {\n const existing: ConfigTool[] = [];\n\n for (const [tool, patterns] of Object.entries(EXISTING_CONFIG_PATTERNS)) {\n for (const pattern of patterns) {\n if (fs.existsSync(path.join(cwd, pattern))) {\n existing.push(tool as ConfigTool);\n break;\n }\n }\n }\n\n return existing;\n}\n\nexport function getProjectName(cwd: string): string {\n const pkgPath = path.join(cwd, 'package.json');\n if (fs.existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n if (pkg.name) {\n return pkg.name;\n }\n } catch {\n // ignore\n }\n }\n return path.basename(cwd);\n}\n\nexport function detectProject(cwd: string): ProjectInfo {\n const reactFramework = detectReactFramework(cwd);\n return {\n name: getProjectName(cwd),\n packageManager: detectPackageManager(cwd),\n hasTypeScript: detectTypeScript(cwd),\n hasReact: reactFramework !== false,\n reactFramework,\n existingConfigs: detectExistingConfigs(cwd),\n };\n}\n\nexport function parseReactFramework(value: string | undefined): ReactFramework {\n if (!value || value === 'false') {\n return false;\n }\n if (value === 'true') {\n return true;\n }\n if (REACT_FRAMEWORKS.includes(value as (typeof REACT_FRAMEWORKS)[number])) {\n return value as ReactFramework;\n }\n return true;\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nimport type { GeneratedFile } from '../types.js';\n\nexport function writeFiles(cwd: string, files: GeneratedFile[]): void {\n for (const file of files) {\n const filePath = path.join(cwd, file.path);\n fs.writeFileSync(filePath, file.content, 'utf8');\n }\n}\n\nexport function fileExists(cwd: string, filename: string): boolean {\n return fs.existsSync(path.join(cwd, filename));\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\n\nexport function readPackageJson(cwd: string): Record<string, unknown> | null {\n const pkgPath = path.join(cwd, 'package.json');\n if (!fs.existsSync(pkgPath)) return null;\n try {\n return JSON.parse(fs.readFileSync(pkgPath, 'utf8'));\n } catch {\n return null;\n }\n}\n\nexport function updatePackageJson(\n cwd: string,\n modifications: {\n lintStaged?: Record<string, string[]>;\n simpleGitHooks?: Record<string, string>;\n },\n): boolean {\n const pkg = readPackageJson(cwd);\n if (!pkg) return false;\n\n if (modifications.lintStaged && Object.keys(modifications.lintStaged).length > 0) {\n pkg['lint-staged'] = modifications.lintStaged;\n }\n if (modifications.simpleGitHooks && Object.keys(modifications.simpleGitHooks).length > 0) {\n pkg['simple-git-hooks'] = modifications.simpleGitHooks;\n }\n\n fs.writeFileSync(path.join(cwd, 'package.json'), JSON.stringify(pkg, null, 2) + '\\n', 'utf8');\n return true;\n}\n\nexport function hasExistingGitHooksConfig(cwd: string): {\n hasHusky: boolean;\n hasLintStaged: boolean;\n hasSimpleGitHooks: boolean;\n} {\n const pkg = readPackageJson(cwd);\n return {\n hasHusky: fs.existsSync(path.join(cwd, '.husky')),\n hasLintStaged: pkg ? 'lint-staged' in pkg : false,\n hasSimpleGitHooks: pkg ? 'simple-git-hooks' in pkg : false,\n };\n}\n","import { execSync } from 'node:child_process';\n\nimport type { PackageManager } from '../types.js';\n\nexport function getInstallCommand(pm: PackageManager, packages: string[]): string {\n const pkgList = packages.join(' ');\n switch (pm) {\n case 'npm': {\n return `npm install -D ${pkgList}`;\n }\n case 'yarn': {\n return `yarn add -D ${pkgList}`;\n }\n case 'pnpm': {\n return `pnpm add -D ${pkgList}`;\n }\n case 'bun': {\n return `bun add -D ${pkgList}`;\n }\n }\n}\n\nexport function installDependencies(\n pm: PackageManager,\n packages: string[],\n cwd: string,\n): { success: boolean; error?: string } {\n const command = getInstallCommand(pm, packages);\n try {\n execSync(command, {\n cwd,\n // Let the user see install progress in real time\n stdio: 'inherit',\n });\n return { success: true };\n } catch (error) {\n const message = error instanceof Error ? error.message : String(error);\n return { success: false, error: message };\n }\n}\n","/* eslint-disable unicorn/no-process-exit */\nimport { execSync } from 'node:child_process';\n\nimport * as p from '@clack/prompts';\nimport pc from 'picocolors';\n\nimport { ALL_TOOLS, CONFIG_META, PRESET_TOOLS } from './constants.js';\nimport {\n generateConfigs,\n generateGitHooksConfig,\n getDependencies,\n getGitHooksDependencies,\n} from './generators/index.js';\nimport type {\n CliOptions,\n ConfigTool,\n GeneratorContext,\n ReactFramework,\n UserSelections,\n} from './types.js';\nimport {\n detectProject,\n getInstallCommand,\n hasExistingGitHooksConfig,\n installDependencies,\n parseReactFramework,\n updatePackageJson,\n writeFiles,\n} from './utils/index.js';\n\nexport async function run(options: CliOptions): Promise<void> {\n const cwd = process.cwd();\n\n p.intro(pc.bgCyan(pc.black(' create-lobe-lint ')));\n\n if (options.help) {\n printHelp();\n return;\n }\n\n const projectInfo = detectProject(cwd);\n\n p.note(\n [\n `${pc.dim('Project:')} ${pc.cyan(projectInfo.name)}`,\n `${pc.dim('Package Manager:')} ${pc.cyan(projectInfo.packageManager)}`,\n `${pc.dim('TypeScript:')} ${pc.cyan(projectInfo.hasTypeScript ? 'Yes' : 'No')}`,\n `${pc.dim('React Framework:')} ${pc.cyan(formatReactFramework(projectInfo.reactFramework))}`,\n projectInfo.existingConfigs.length > 0\n ? `${pc.dim('Existing configs:')} ${pc.yellow(projectInfo.existingConfigs.join(', '))}`\n : null,\n ]\n .filter(Boolean)\n .join('\\n'),\n 'Detected Project',\n );\n\n let selections: UserSelections;\n\n if (hasToolFlags(options)) {\n selections = getSelectionsFromFlags(options, projectInfo.reactFramework);\n } else if (options.preset) {\n selections = await getPresetSelections(options, projectInfo.reactFramework);\n } else if (options.manual) {\n selections = await getManualSelections(options, projectInfo.reactFramework);\n } else {\n const mode = await p.select({\n message: 'How would you like to setup?',\n options: [\n {\n value: 'preset',\n label: 'Preset (Recommended)',\n hint: 'ESLint, Prettier, Stylelint, Commitlint',\n },\n { value: 'manual', label: 'Manual', hint: 'Choose individual tools' },\n ],\n });\n\n if (p.isCancel(mode)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n if (mode === 'preset') {\n selections = await getPresetSelections(options, projectInfo.reactFramework);\n } else {\n selections = await getManualSelections(options, projectInfo.reactFramework);\n }\n }\n\n if (selections.tools.length === 0) {\n p.cancel('No tools selected.');\n process.exit(0);\n }\n\n // Ask about git hooks configuration\n selections.configureGitHooks = await askGitHooksConfiguration(options, selections);\n\n const ctx: GeneratorContext = {\n cwd,\n projectInfo,\n selections,\n };\n\n const files = generateConfigs(ctx);\n const deps = getDependencies(ctx);\n\n // Add git hooks dependencies if configured\n if (selections.configureGitHooks) {\n deps.push(...getGitHooksDependencies(ctx));\n }\n\n const existingConfigsToOverwrite = selections.tools.filter((t) =>\n projectInfo.existingConfigs.includes(t),\n );\n\n if (existingConfigsToOverwrite.length > 0 && !options.yes) {\n const shouldOverwrite = await p.confirm({\n message: `Overwrite existing configs? (${existingConfigsToOverwrite.join(', ')})`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n }\n\n const s = p.spinner();\n s.start('Generating configuration files...');\n\n writeFiles(cwd, files);\n\n // Generate git hooks configuration\n let gitHooksConfigured = false;\n if (selections.configureGitHooks) {\n const gitHooksConfig = generateGitHooksConfig(ctx);\n const updated = updatePackageJson(cwd, gitHooksConfig);\n if (updated) {\n gitHooksConfigured = true;\n }\n }\n\n s.stop(`Generated ${files.length} config files`);\n\n for (const file of files) {\n p.log.success(`${pc.green('+')} ${file.path}`);\n }\n\n if (gitHooksConfigured) {\n p.log.success(`${pc.green('+')} package.json (lint-staged, simple-git-hooks)`);\n }\n\n p.note(deps.map((d) => `${pc.green('+')} ${d}`).join('\\n'), 'Dependencies to install');\n\n let shouldInstall = options.install ?? true;\n\n if (options.install === undefined && !options.yes) {\n const confirmInstall = await p.confirm({\n message: 'Install dependencies?',\n initialValue: true,\n });\n\n if (p.isCancel(confirmInstall)) {\n shouldInstall = false;\n } else {\n shouldInstall = confirmInstall;\n }\n }\n\n if (shouldInstall) {\n // Don't hide the actual install logs behind a spinner.\n // Show the command and stream output to the current terminal.\n const installCommand = getInstallCommand(projectInfo.packageManager, deps);\n p.log.info(`Running: ${pc.cyan(installCommand)}`);\n\n const result = installDependencies(projectInfo.packageManager, deps, cwd);\n\n if (result.success) {\n p.log.success('Dependencies installed');\n\n // Initialize git hooks after dependencies are installed\n if (gitHooksConfigured) {\n try {\n p.log.info(`Running: ${pc.cyan('npx simple-git-hooks')}`);\n execSync('npx simple-git-hooks', { cwd, stdio: 'inherit' });\n p.log.success('Git hooks initialized');\n } catch {\n p.log.warn('Failed to initialize git hooks. Run manually: npx simple-git-hooks');\n }\n }\n } else {\n p.log.error('Failed to install dependencies');\n p.log.error(result.error || 'Unknown error');\n p.log.info(\n `Run manually: ${pc.cyan(getInstallCommandHint(projectInfo.packageManager, deps))}`,\n );\n }\n } else {\n p.log.info(`Run: ${pc.cyan(getInstallCommandHint(projectInfo.packageManager, deps))}`);\n if (gitHooksConfigured) {\n p.log.info(`After installing, run: ${pc.cyan('npx simple-git-hooks')}`);\n }\n }\n\n p.outro(pc.green('Done! Happy linting!'));\n}\n\nfunction hasToolFlags(options: CliOptions): boolean {\n return Boolean(\n options.eslint ||\n options.prettier ||\n options.stylelint ||\n options.commitlint ||\n options.remarklint ||\n options.semanticRelease,\n );\n}\n\nfunction getSelectionsFromFlags(\n options: CliOptions,\n detectedFramework: ReactFramework,\n): UserSelections {\n const tools: ConfigTool[] = [];\n\n if (options.eslint) tools.push('eslint');\n if (options.prettier) tools.push('prettier');\n if (options.stylelint) tools.push('stylelint');\n if (options.commitlint) tools.push('commitlint');\n if (options.remarklint) tools.push('remarklint');\n if (options.semanticRelease) tools.push('semantic-release');\n\n const reactFramework =\n options.react !== undefined ? parseReactFramework(options.react) : detectedFramework;\n\n return {\n configureGitHooks: false,\n installDeps: options.install ?? true,\n reactFramework,\n tools,\n };\n}\n\nasync function getPresetSelections(\n options: CliOptions,\n detectedFramework: ReactFramework,\n): Promise<UserSelections> {\n let reactFramework = detectedFramework;\n\n if (options.react !== undefined) {\n reactFramework = parseReactFramework(options.react);\n } else if (detectedFramework !== false && !options.yes) {\n const selectedFramework = await selectReactFramework(detectedFramework);\n if (selectedFramework !== null) {\n reactFramework = selectedFramework;\n }\n }\n\n return {\n configureGitHooks: false,\n installDeps: options.install ?? true,\n reactFramework,\n tools: [...PRESET_TOOLS],\n };\n}\n\nasync function getManualSelections(\n options: CliOptions,\n detectedFramework: ReactFramework,\n): Promise<UserSelections> {\n const selectedTools = await p.multiselect({\n message: 'Select tools to configure:',\n options: ALL_TOOLS.map((tool) => ({\n value: tool,\n label: CONFIG_META[tool].displayName,\n hint: CONFIG_META[tool].package,\n })),\n initialValues: PRESET_TOOLS,\n });\n\n if (p.isCancel(selectedTools)) {\n p.cancel('Operation cancelled.');\n process.exit(0);\n }\n\n let reactFramework = detectedFramework;\n\n if (selectedTools.includes('eslint')) {\n if (options.react !== undefined) {\n reactFramework = parseReactFramework(options.react);\n } else if (!options.yes) {\n const selectedFramework = await selectReactFramework(detectedFramework);\n if (selectedFramework !== null) {\n reactFramework = selectedFramework;\n }\n }\n }\n\n return {\n configureGitHooks: false,\n installDeps: options.install ?? true,\n reactFramework,\n tools: selectedTools as ConfigTool[],\n };\n}\n\nasync function selectReactFramework(detected: ReactFramework): Promise<ReactFramework | null> {\n const options = [\n { value: 'next', label: 'Next.js' },\n { value: 'remix', label: 'Remix' },\n { value: 'vite', label: 'Vite' },\n { value: 'expo', label: 'Expo (React Native)' },\n { value: 'true', label: 'Generic React' },\n { value: 'false', label: 'None (No React)' },\n ];\n\n const detectedValue = detected === true ? 'true' : detected === false ? 'false' : detected;\n\n const sortedOptions = options.toSorted((a, b) => {\n if (a.value === detectedValue) return -1;\n if (b.value === detectedValue) return 1;\n return 0;\n });\n\n if (detectedValue !== 'false') {\n sortedOptions[0] = {\n ...sortedOptions[0],\n label: `${sortedOptions[0].label} (Detected)`,\n };\n }\n\n const selected = await p.select({\n message: 'Select React framework for ESLint:',\n options: sortedOptions,\n });\n\n if (p.isCancel(selected)) {\n return null;\n }\n\n return parseReactFramework(selected as string);\n}\n\nasync function askGitHooksConfiguration(\n options: CliOptions,\n selections: UserSelections,\n): Promise<boolean> {\n // Check if --git-hooks or --no-git-hooks was explicitly set\n if (options.gitHooks !== undefined) {\n return options.gitHooks;\n }\n\n // Check if there are tools that can be linted\n const hasLintableTools = selections.tools.some((t) =>\n ['eslint', 'prettier', 'stylelint', 'remarklint'].includes(t),\n );\n const hasCommitlint = selections.tools.includes('commitlint');\n\n // Skip if no lintable tools and no commitlint\n if (!hasLintableTools && !hasCommitlint) {\n return false;\n }\n\n // Skip asking in yes mode, default to true\n if (options.yes) {\n return true;\n }\n\n // Check for existing configurations\n const cwd = process.cwd();\n const existing = hasExistingGitHooksConfig(cwd);\n\n if (existing.hasHusky) {\n p.log.warn('Detected existing Husky configuration. Git hooks setup may conflict.');\n }\n\n if (existing.hasLintStaged || existing.hasSimpleGitHooks) {\n const shouldOverwrite = await p.confirm({\n initialValue: false,\n message: 'Existing lint-staged/simple-git-hooks config detected. Overwrite?',\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n return false;\n }\n return true;\n }\n\n const hookQuestion = await p.confirm({\n initialValue: true,\n message: 'Configure lint-staged and git hooks?',\n });\n\n if (p.isCancel(hookQuestion)) {\n return false;\n }\n\n return hookQuestion;\n}\n\nfunction formatReactFramework(framework: ReactFramework): string {\n if (framework === true) return 'Generic React';\n if (framework === false) return 'None';\n return framework.charAt(0).toUpperCase() + framework.slice(1);\n}\n\nfunction getInstallCommandHint(pm: string, deps: string[]): string {\n const pkgList = deps.join(' ');\n switch (pm) {\n case 'npm': {\n return `npm install -D ${pkgList}`;\n }\n case 'yarn': {\n return `yarn add -D ${pkgList}`;\n }\n case 'pnpm': {\n return `pnpm add -D ${pkgList}`;\n }\n case 'bun': {\n return `bun add -D ${pkgList}`;\n }\n default: {\n return `npm install -D ${pkgList}`;\n }\n }\n}\n\nfunction printHelp(): void {\n console.log(`\n${pc.bold('create-lobe-lint')} - Setup LobeHub lint configurations\n\n${pc.bold('Usage:')}\n npx create-lobe-lint [options]\n\n${pc.bold('Options:')}\n -p, --preset Quick setup with preset tools (ESLint, Prettier, Stylelint, Commitlint)\n -m, --manual Manually select tools to configure\n --eslint Include ESLint configuration\n --prettier Include Prettier configuration\n --stylelint Include Stylelint configuration\n --commitlint Include Commitlint configuration\n --remarklint Include Remarklint configuration\n --semantic-release Include Semantic Release configuration\n --react <framework> Set React framework (next/remix/vite/expo/true/false)\n --git-hooks Configure lint-staged and simple-git-hooks\n --no-git-hooks Skip git hooks configuration\n --install Auto-install dependencies (default)\n --no-install Skip dependency installation\n -y, --yes Skip confirmations\n -h, --help Show help\n\n${pc.bold('Examples:')}\n npx create-lobe-lint # Interactive mode\n npx create-lobe-lint --preset -y # Quick setup with defaults\n npx create-lobe-lint --eslint --prettier --react next\n npx create-lobe-lint --manual # Select tools manually\n`);\n}\n","/* eslint-disable unicorn/no-process-exit, unicorn/prefer-top-level-await */\nimport mri from 'mri';\n\nimport { run } from './cli.js';\nimport type { CliOptions } from './types.js';\n\nconst argv = mri(process.argv.slice(2), {\n alias: {\n h: 'help',\n m: 'manual',\n p: 'preset',\n y: 'yes',\n },\n boolean: [\n 'help',\n 'preset',\n 'manual',\n 'eslint',\n 'prettier',\n 'stylelint',\n 'commitlint',\n 'remarklint',\n 'semantic-release',\n 'yes',\n 'install',\n 'git-hooks',\n ],\n string: ['react'],\n});\n\nconst options: CliOptions = {\n commitlint: argv.commitlint,\n eslint: argv.eslint,\n gitHooks: argv['git-hooks'],\n help: argv.help,\n install: argv.install,\n manual: argv.manual,\n preset: argv.preset,\n prettier: argv.prettier,\n react: argv.react,\n remarklint: argv.remarklint,\n semanticRelease: argv['semantic-release'],\n stylelint: argv.stylelint,\n yes: argv.yes,\n};\n\nrun(options).catch((error: unknown) => {\n console.error(error);\n process.exit(1);\n});\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-lobe-lint",
3
- "version": "2.0.0-beta.8",
3
+ "version": "2.0.0",
4
4
  "description": "CLI tool to setup LobeHub lint configurations",
5
5
  "homepage": "https://github.com/lobehub/lobe-lint/tree/master/packages/create-lint",
6
6
  "bugs": {