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 +0 -21
- package/README.md +3 -27
- package/dist/index.js +77 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
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) ·
|
|
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
|
|
133
|
-
This project is
|
|
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