create-lobe-lint 2.0.1 → 2.0.2

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/LICENSE CHANGED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2023 LobeHub
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
package/README.md CHANGED
@@ -10,13 +10,7 @@
10
10
 
11
11
  CLI tool to setup LobeHub lint configurations
12
12
 
13
- [Changelog](./CHANGELOG.md) · \[Report Bug]\[issues-link] · \[Request Feature]\[issues-link]
14
-
15
- <!-- SHIELD GROUP -->
16
-
17
- \[!\[]\[npm-release-shield]]\[npm-release-link]
18
- \[!\[]\[npm-downloads-shield]]\[npm-downloads-link]
19
- \[!\[]\[github-license-shield]]\[github-license-link]
13
+ [Changelog](./CHANGELOG.md) · [Report Bug][issues-link] · [Request Feature][issues-link]
20
14
 
21
15
  </div>
22
16
 
@@ -44,12 +38,6 @@ CLI tool to setup LobeHub lint configurations
44
38
  - **Framework Support** - Next.js, Remix, Vite, Expo support
45
39
  - **Flexible** - Generate configs for ESLint, Prettier, Stylelint, Commitlint, Remarklint, Semantic Release
46
40
 
47
- <div align="right">
48
-
49
- [!\[\]\[back-to-top\]](#readme-top)
50
-
51
- </div>
52
-
53
41
  ## Usage
54
42
 
55
43
  Run the CLI with npx:
@@ -65,12 +53,6 @@ This will start an interactive setup process that:
65
53
  3. Generates the appropriate config files
66
54
  4. Installs the required dependencies
67
55
 
68
- <div align="right">
69
-
70
- [!\[\]\[back-to-top\]](#readme-top)
71
-
72
- </div>
73
-
74
56
  ## Options
75
57
 
76
58
  | Option | Alias | Description |
@@ -89,12 +71,6 @@ This will start an interactive setup process that:
89
71
  | `--yes` | `-y` | Skip confirmations |
90
72
  | `--help` | `-h` | Show help |
91
73
 
92
- <div align="right">
93
-
94
- [!\[\]\[back-to-top\]](#readme-top)
95
-
96
- </div>
97
-
98
74
  ## Examples
99
75
 
100
76
  ```bash
@@ -129,5 +105,5 @@ npx create-lobe-lint --preset -y --no-install
129
105
 
130
106
  #### 📝 License
131
107
 
132
- Copyright © 2026 \[LobeHub]\[profile-link]. <br />
133
- This project is [MIT](./LICENSE) licensed.
108
+ Copyright © 2026 [LobeHub](https://github.com/lobehub). <br />
109
+ This project is MIT licensed.
package/dist/index.js CHANGED
@@ -193,6 +193,57 @@ function getEslintDependencies(ctx) {
193
193
  return deps;
194
194
  }
195
195
 
196
+ //#endregion
197
+ //#region src/generators/ignore-files.ts
198
+ const COMMON_IGNORE_PATTERNS = [
199
+ "dist",
200
+ "build",
201
+ "out",
202
+ "coverage",
203
+ ".next",
204
+ ".turbo",
205
+ "node_modules",
206
+ "logs",
207
+ "test-output",
208
+ "*.log",
209
+ "*.lock",
210
+ "package-lock.json",
211
+ "*.min.*",
212
+ "public"
213
+ ];
214
+ const IGNORE_CONFIG = {
215
+ prettier: {
216
+ file: ".prettierignore",
217
+ extraPatterns: [
218
+ "storybook-static",
219
+ "CHANGELOG.md",
220
+ "LICENSE"
221
+ ]
222
+ },
223
+ stylelint: {
224
+ file: ".stylelintignore",
225
+ extraPatterns: ["storybook-static", "*.min.css"]
226
+ },
227
+ remarklint: {
228
+ file: ".remarkignore",
229
+ extraPatterns: ["CHANGELOG.md", "LICENSE"]
230
+ }
231
+ };
232
+ function generateIgnoreFiles(tools) {
233
+ const files = [];
234
+ for (const tool of tools) {
235
+ const config = IGNORE_CONFIG[tool];
236
+ if (!config) continue;
237
+ const patterns = [...COMMON_IGNORE_PATTERNS, ...config.extraPatterns];
238
+ const content = patterns.join("\n") + "\n";
239
+ files.push({
240
+ path: config.file,
241
+ content
242
+ });
243
+ }
244
+ return files;
245
+ }
246
+
196
247
  //#endregion
197
248
  //#region src/generators/prettier.ts
198
249
  function generatePrettierConfig() {
@@ -381,6 +432,7 @@ function generateConfigs(ctx) {
381
432
  const file = generateConfig(tool, ctx);
382
433
  if (file) files.push(file);
383
434
  }
435
+ if (ctx.selections.configureIgnoreFiles) files.push(...generateIgnoreFiles(ctx.selections.tools));
384
436
  return files;
385
437
  }
386
438
  function generateConfig(tool, ctx) {
@@ -584,6 +636,7 @@ async function run(options$1) {
584
636
  p.cancel("No tools selected.");
585
637
  process.exit(0);
586
638
  }
639
+ selections.configureIgnoreFiles = await askIgnoreFilesConfiguration(options$1, selections);
587
640
  selections.configureGitHooks = await askGitHooksConfiguration(options$1, selections);
588
641
  selections.configureVscode = await askVscodeConfiguration(options$1, selections);
589
642
  if (selections.configureVscode) selections.excludeUnusedImportsAutofix = await askUnusedImportsExclusion(options$1);
@@ -675,6 +728,7 @@ function getSelectionsFromFlags(options$1, detectedFramework) {
675
728
  const reactFramework = options$1.react !== void 0 ? parseReactFramework(options$1.react) : detectedFramework;
676
729
  return {
677
730
  configureGitHooks: false,
731
+ configureIgnoreFiles: false,
678
732
  configureVscode: false,
679
733
  excludeUnusedImportsAutofix: false,
680
734
  installDeps: options$1.install ?? true,
@@ -691,6 +745,7 @@ async function getPresetSelections(options$1, detectedFramework) {
691
745
  }
692
746
  return {
693
747
  configureGitHooks: false,
748
+ configureIgnoreFiles: false,
694
749
  configureVscode: false,
695
750
  excludeUnusedImportsAutofix: false,
696
751
  installDeps: options$1.install ?? true,
@@ -722,6 +777,7 @@ async function getManualSelections(options$1, detectedFramework) {
722
777
  }
723
778
  return {
724
779
  configureGitHooks: false,
780
+ configureIgnoreFiles: false,
725
781
  configureVscode: false,
726
782
  excludeUnusedImportsAutofix: false,
727
783
  installDeps: options$1.install ?? true,
@@ -773,6 +829,23 @@ async function selectReactFramework(detected) {
773
829
  if (p.isCancel(selected)) return null;
774
830
  return parseReactFramework(selected);
775
831
  }
832
+ const TOOLS_WITH_IGNORE_FILES = [
833
+ "prettier",
834
+ "stylelint",
835
+ "remarklint"
836
+ ];
837
+ async function askIgnoreFilesConfiguration(options$1, selections) {
838
+ if (options$1.ignoreFiles !== void 0) return options$1.ignoreFiles;
839
+ const hasToolsWithIgnore = selections.tools.some((t) => TOOLS_WITH_IGNORE_FILES.includes(t));
840
+ if (!hasToolsWithIgnore) return false;
841
+ if (options$1.yes) return true;
842
+ const ignoreQuestion = await p.confirm({
843
+ initialValue: true,
844
+ message: "Generate ignore files (.prettierignore, .stylelintignore, etc.)?"
845
+ });
846
+ if (p.isCancel(ignoreQuestion)) return false;
847
+ return ignoreQuestion;
848
+ }
776
849
  async function askGitHooksConfiguration(options$1, selections) {
777
850
  if (options$1.gitHooks !== void 0) return options$1.gitHooks;
778
851
  const hasLintableTools = selections.tools.some((t) => [
@@ -864,6 +937,8 @@ ${pc.bold("Options:")}
864
937
  --remarklint Include Remarklint configuration
865
938
  --semantic-release Include Semantic Release configuration
866
939
  --react <framework> Set React framework (next/remix/vite/expo/true/false)
940
+ --ignore-files Generate ignore files (.prettierignore, .stylelintignore, etc.)
941
+ --no-ignore-files Skip ignore files generation
867
942
  --git-hooks Configure lint-staged and simple-git-hooks
868
943
  --no-git-hooks Skip git hooks configuration
869
944
  --vscode Generate VSCode settings to suppress disruptive ESLint auto-fix
@@ -903,6 +978,7 @@ const argv = mri(process.argv.slice(2), {
903
978
  "yes",
904
979
  "install",
905
980
  "git-hooks",
981
+ "ignore-files",
906
982
  "vscode"
907
983
  ],
908
984
  string: ["react"]
@@ -912,6 +988,7 @@ const options = {
912
988
  eslint: argv.eslint,
913
989
  gitHooks: argv["git-hooks"],
914
990
  help: argv.help,
991
+ ignoreFiles: argv["ignore-files"],
915
992
  install: argv.install,
916
993
  manual: argv.manual,
917
994
  preset: argv.preset,
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","cwd: string","existing: Record<string, unknown>","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/vscode.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, type 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, type 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, type GeneratorContext, type 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 fs from 'node:fs';\nimport path from 'node:path';\n\nimport { type GeneratorContext } from '../types.js';\n\nconst BASE_EXCLUSION_RULES = [\n 'perfectionist/sort-enums',\n 'perfectionist/sort-interfaces',\n 'simple-import-sort/imports',\n 'simple-import-sort/exports',\n];\n\nconst REACT_EXCLUSION_RULES = ['react/jsx-sort-props'];\n\nconst OPTIONAL_UNUSED_IMPORTS_RULE = 'unused-imports/no-unused-imports';\n\nexport function getExclusionRules(ctx: GeneratorContext): string[] {\n const rules = [...BASE_EXCLUSION_RULES];\n\n if (ctx.selections.excludeUnusedImportsAutofix) {\n rules.push(OPTIONAL_UNUSED_IMPORTS_RULE);\n }\n\n if (ctx.selections.reactFramework !== false) {\n rules.push(...REACT_EXCLUSION_RULES);\n }\n\n return rules;\n}\n\nexport function generateVscodeSettings(ctx: GeneratorContext): Record<string, unknown> {\n const rules = getExclusionRules(ctx);\n\n return {\n 'eslint.codeActionsOnSave.rules': ['*', ...rules.map((r) => `!${r}`)],\n 'eslint.rules.customizations': rules.map((rule) => ({ rule, severity: 'info' })),\n };\n}\n\nexport interface VscodeWriteResult {\n conflict: boolean;\n written: boolean;\n}\n\nexport function readExistingVscodeSettings(cwd: string): Record<string, unknown> | null {\n const settingsPath = path.join(cwd, '.vscode', 'settings.json');\n if (!fs.existsSync(settingsPath)) {\n return null;\n }\n try {\n return JSON.parse(fs.readFileSync(settingsPath, 'utf8')) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nexport function hasConflictingKeys(existing: Record<string, unknown>): boolean {\n return 'eslint.codeActionsOnSave.rules' in existing || 'eslint.rules.customizations' in existing;\n}\n\nexport function writeVscodeSettings(\n cwd: string,\n ctx: GeneratorContext,\n overwrite = false,\n): VscodeWriteResult {\n const existing = readExistingVscodeSettings(cwd);\n const newSettings = generateVscodeSettings(ctx);\n\n if (existing !== null && hasConflictingKeys(existing) && !overwrite) {\n return { written: false, conflict: true };\n }\n\n const merged = { ...existing, ...newSettings };\n\n const vscodeDirPath = path.join(cwd, '.vscode');\n if (!fs.existsSync(vscodeDirPath)) {\n fs.mkdirSync(vscodeDirPath, { recursive: true });\n }\n\n const settingsPath = path.join(vscodeDirPath, 'settings.json');\n fs.writeFileSync(settingsPath, JSON.stringify(merged, null, 2) + '\\n', 'utf8');\n\n return { written: true, conflict: false };\n}\n","import { type ConfigTool, type GeneratedFile, type 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';\nexport type { VscodeWriteResult } from './vscode.js';\nexport {\n generateVscodeSettings,\n hasConflictingKeys,\n readExistingVscodeSettings,\n writeVscodeSettings,\n} from './vscode.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 {\n type ConfigTool,\n type PackageManager,\n type ProjectInfo,\n type ReactFramework,\n} 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","import { 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 hasConflictingKeys,\n readExistingVscodeSettings,\n writeVscodeSettings,\n} from './generators/index.js';\nimport {\n type CliOptions,\n type ConfigTool,\n type GeneratorContext,\n type ReactFramework,\n type 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 // Ask about VSCode configuration\n selections.configureVscode = await askVscodeConfiguration(options, selections);\n if (selections.configureVscode) {\n selections.excludeUnusedImportsAutofix = await askUnusedImportsExclusion(options);\n }\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 // Generate VSCode settings\n let vscodeConfigured = false;\n if (selections.configureVscode) {\n const result = writeVscodeSettings(cwd, ctx, true);\n if (result.written) {\n vscodeConfigured = 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 if (vscodeConfigured) {\n p.log.success(`${pc.green('+')} .vscode/settings.json`);\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 configureVscode: false,\n excludeUnusedImportsAutofix: 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 configureVscode: false,\n excludeUnusedImportsAutofix: 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 configureVscode: false,\n excludeUnusedImportsAutofix: 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\nasync function askVscodeConfiguration(\n options: CliOptions,\n selections: UserSelections,\n): Promise<boolean> {\n if (options.vscode !== undefined) {\n return options.vscode;\n }\n\n if (!selections.tools.includes('eslint')) {\n return false;\n }\n\n if (options.yes) {\n return true;\n }\n\n const cwd = process.cwd();\n const existing = readExistingVscodeSettings(cwd);\n\n if (existing !== null && hasConflictingKeys(existing)) {\n const shouldOverwrite = await p.confirm({\n initialValue: false,\n message:\n 'Existing .vscode/settings.json has ESLint autofix settings. Overwrite these fields?',\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n return false;\n }\n return true;\n }\n\n const vscodeQuestion = await p.confirm({\n initialValue: true,\n message: 'Generate VSCode settings to suppress disruptive ESLint auto-fix?',\n });\n\n if (p.isCancel(vscodeQuestion)) {\n return false;\n }\n\n return vscodeQuestion;\n}\n\nasync function askUnusedImportsExclusion(options: CliOptions): Promise<boolean> {\n if (options.yes) {\n return true;\n }\n\n const question = await p.confirm({\n initialValue: true,\n message: 'Also suppress auto-removal of unused imports on save?',\n });\n\n if (p.isCancel(question)) {\n return false;\n }\n\n return question;\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 --vscode Generate VSCode settings to suppress disruptive ESLint auto-fix\n --no-vscode Skip VSCode settings generation\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","import 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 'vscode',\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 vscode: argv.vscode,\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[]","IGNORE_CONFIG: Partial<\n Record<ConfigTool, { file: string; extraPatterns: string[]; header?: string }>\n>","tools: ConfigTool[]","files: GeneratedFile[]","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","cwd: string","existing: Record<string, unknown>","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","TOOLS_WITH_IGNORE_FILES: ConfigTool[]","framework: ReactFramework","pm: string","deps: string[]","options: CliOptions","error: unknown"],"sources":["../src/constants.ts","../src/generators/commitlint.ts","../src/generators/eslint.ts","../src/generators/ignore-files.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/vscode.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, type 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, type 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 { type ConfigTool, type GeneratedFile } from '../types.js';\n\nconst COMMON_IGNORE_PATTERNS = [\n 'dist',\n 'build',\n 'out',\n 'coverage',\n '.next',\n '.turbo',\n 'node_modules',\n 'logs',\n 'test-output',\n '*.log',\n '*.lock',\n 'package-lock.json',\n '*.min.*',\n 'public',\n];\n\nconst IGNORE_CONFIG: Partial<\n Record<ConfigTool, { file: string; extraPatterns: string[]; header?: string }>\n> = {\n prettier: {\n file: '.prettierignore',\n extraPatterns: ['storybook-static', 'CHANGELOG.md', 'LICENSE'],\n },\n stylelint: {\n file: '.stylelintignore',\n extraPatterns: ['storybook-static', '*.min.css'],\n },\n remarklint: {\n file: '.remarkignore',\n extraPatterns: ['CHANGELOG.md', 'LICENSE'],\n },\n};\n\nexport function generateIgnoreFiles(tools: ConfigTool[]): GeneratedFile[] {\n const files: GeneratedFile[] = [];\n\n for (const tool of tools) {\n const config = IGNORE_CONFIG[tool];\n if (!config) continue;\n\n const patterns = [...COMMON_IGNORE_PATTERNS, ...config.extraPatterns];\n const content = patterns.join('\\n') + '\\n';\n\n files.push({ path: config.file, content });\n }\n\n return files;\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, type GeneratorContext, type 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 fs from 'node:fs';\nimport path from 'node:path';\n\nimport { type GeneratorContext } from '../types.js';\n\nconst BASE_EXCLUSION_RULES = [\n 'perfectionist/sort-enums',\n 'perfectionist/sort-interfaces',\n 'simple-import-sort/imports',\n 'simple-import-sort/exports',\n];\n\nconst REACT_EXCLUSION_RULES = ['react/jsx-sort-props'];\n\nconst OPTIONAL_UNUSED_IMPORTS_RULE = 'unused-imports/no-unused-imports';\n\nexport function getExclusionRules(ctx: GeneratorContext): string[] {\n const rules = [...BASE_EXCLUSION_RULES];\n\n if (ctx.selections.excludeUnusedImportsAutofix) {\n rules.push(OPTIONAL_UNUSED_IMPORTS_RULE);\n }\n\n if (ctx.selections.reactFramework !== false) {\n rules.push(...REACT_EXCLUSION_RULES);\n }\n\n return rules;\n}\n\nexport function generateVscodeSettings(ctx: GeneratorContext): Record<string, unknown> {\n const rules = getExclusionRules(ctx);\n\n return {\n 'eslint.codeActionsOnSave.rules': ['*', ...rules.map((r) => `!${r}`)],\n 'eslint.rules.customizations': rules.map((rule) => ({ rule, severity: 'info' })),\n };\n}\n\nexport interface VscodeWriteResult {\n conflict: boolean;\n written: boolean;\n}\n\nexport function readExistingVscodeSettings(cwd: string): Record<string, unknown> | null {\n const settingsPath = path.join(cwd, '.vscode', 'settings.json');\n if (!fs.existsSync(settingsPath)) {\n return null;\n }\n try {\n return JSON.parse(fs.readFileSync(settingsPath, 'utf8')) as Record<string, unknown>;\n } catch {\n return null;\n }\n}\n\nexport function hasConflictingKeys(existing: Record<string, unknown>): boolean {\n return 'eslint.codeActionsOnSave.rules' in existing || 'eslint.rules.customizations' in existing;\n}\n\nexport function writeVscodeSettings(\n cwd: string,\n ctx: GeneratorContext,\n overwrite = false,\n): VscodeWriteResult {\n const existing = readExistingVscodeSettings(cwd);\n const newSettings = generateVscodeSettings(ctx);\n\n if (existing !== null && hasConflictingKeys(existing) && !overwrite) {\n return { written: false, conflict: true };\n }\n\n const merged = { ...existing, ...newSettings };\n\n const vscodeDirPath = path.join(cwd, '.vscode');\n if (!fs.existsSync(vscodeDirPath)) {\n fs.mkdirSync(vscodeDirPath, { recursive: true });\n }\n\n const settingsPath = path.join(vscodeDirPath, 'settings.json');\n fs.writeFileSync(settingsPath, JSON.stringify(merged, null, 2) + '\\n', 'utf8');\n\n return { written: true, conflict: false };\n}\n","import { type ConfigTool, type GeneratedFile, type GeneratorContext } from '../types.js';\nimport { generateCommitlintConfig, getCommitlintDependencies } from './commitlint.js';\nimport { generateEslintConfig, getEslintDependencies } from './eslint.js';\nimport { generateIgnoreFiles } from './ignore-files.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 if (ctx.selections.configureIgnoreFiles) {\n files.push(...generateIgnoreFiles(ctx.selections.tools));\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 { generateIgnoreFiles } from './ignore-files.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';\nexport type { VscodeWriteResult } from './vscode.js';\nexport {\n generateVscodeSettings,\n hasConflictingKeys,\n readExistingVscodeSettings,\n writeVscodeSettings,\n} from './vscode.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 {\n type ConfigTool,\n type PackageManager,\n type ProjectInfo,\n type ReactFramework,\n} 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","import { 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 hasConflictingKeys,\n readExistingVscodeSettings,\n writeVscodeSettings,\n} from './generators/index.js';\nimport {\n type CliOptions,\n type ConfigTool,\n type GeneratorContext,\n type ReactFramework,\n type 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 ignore files generation\n selections.configureIgnoreFiles = await askIgnoreFilesConfiguration(options, selections);\n\n // Ask about git hooks configuration\n selections.configureGitHooks = await askGitHooksConfiguration(options, selections);\n\n // Ask about VSCode configuration\n selections.configureVscode = await askVscodeConfiguration(options, selections);\n if (selections.configureVscode) {\n selections.excludeUnusedImportsAutofix = await askUnusedImportsExclusion(options);\n }\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 // Generate VSCode settings\n let vscodeConfigured = false;\n if (selections.configureVscode) {\n const result = writeVscodeSettings(cwd, ctx, true);\n if (result.written) {\n vscodeConfigured = 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 if (vscodeConfigured) {\n p.log.success(`${pc.green('+')} .vscode/settings.json`);\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 configureIgnoreFiles: false,\n configureVscode: false,\n excludeUnusedImportsAutofix: 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 configureIgnoreFiles: false,\n configureVscode: false,\n excludeUnusedImportsAutofix: 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 configureIgnoreFiles: false,\n configureVscode: false,\n excludeUnusedImportsAutofix: 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\nconst TOOLS_WITH_IGNORE_FILES: ConfigTool[] = ['prettier', 'stylelint', 'remarklint'];\n\nasync function askIgnoreFilesConfiguration(\n options: CliOptions,\n selections: UserSelections,\n): Promise<boolean> {\n if (options.ignoreFiles !== undefined) {\n return options.ignoreFiles;\n }\n\n const hasToolsWithIgnore = selections.tools.some((t) => TOOLS_WITH_IGNORE_FILES.includes(t));\n if (!hasToolsWithIgnore) {\n return false;\n }\n\n if (options.yes) {\n return true;\n }\n\n const ignoreQuestion = await p.confirm({\n initialValue: true,\n message: 'Generate ignore files (.prettierignore, .stylelintignore, etc.)?',\n });\n\n if (p.isCancel(ignoreQuestion)) {\n return false;\n }\n\n return ignoreQuestion;\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\nasync function askVscodeConfiguration(\n options: CliOptions,\n selections: UserSelections,\n): Promise<boolean> {\n if (options.vscode !== undefined) {\n return options.vscode;\n }\n\n if (!selections.tools.includes('eslint')) {\n return false;\n }\n\n if (options.yes) {\n return true;\n }\n\n const cwd = process.cwd();\n const existing = readExistingVscodeSettings(cwd);\n\n if (existing !== null && hasConflictingKeys(existing)) {\n const shouldOverwrite = await p.confirm({\n initialValue: false,\n message:\n 'Existing .vscode/settings.json has ESLint autofix settings. Overwrite these fields?',\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n return false;\n }\n return true;\n }\n\n const vscodeQuestion = await p.confirm({\n initialValue: true,\n message: 'Generate VSCode settings to suppress disruptive ESLint auto-fix?',\n });\n\n if (p.isCancel(vscodeQuestion)) {\n return false;\n }\n\n return vscodeQuestion;\n}\n\nasync function askUnusedImportsExclusion(options: CliOptions): Promise<boolean> {\n if (options.yes) {\n return true;\n }\n\n const question = await p.confirm({\n initialValue: true,\n message: 'Also suppress auto-removal of unused imports on save?',\n });\n\n if (p.isCancel(question)) {\n return false;\n }\n\n return question;\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 --ignore-files Generate ignore files (.prettierignore, .stylelintignore, etc.)\n --no-ignore-files Skip ignore files generation\n --git-hooks Configure lint-staged and simple-git-hooks\n --no-git-hooks Skip git hooks configuration\n --vscode Generate VSCode settings to suppress disruptive ESLint auto-fix\n --no-vscode Skip VSCode settings generation\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","import 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 'ignore-files',\n 'vscode',\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 ignoreFiles: argv['ignore-files'],\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 vscode: argv.vscode,\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.1",
3
+ "version": "2.0.2",
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": {