@zayne-labs/eslint-config 0.9.2 → 0.9.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -10,7 +10,7 @@ import parse from "parse-gitignore";
10
10
  import { execSync } from "node:child_process";
11
11
 
12
12
  //#region package.json
13
- var version = "0.9.2";
13
+ var version = "0.9.3";
14
14
 
15
15
  //#endregion
16
16
  //#region src/cli/constants.ts
@@ -65,14 +65,13 @@ const frameworkOptions = [
65
65
  {
66
66
  label: c.cyan("Solid"),
67
67
  value: "solid"
68
- },
69
- {
70
- label: c.blue("Slidev"),
71
- value: "slidev"
72
68
  }
73
69
  ];
74
70
  const frameworks = frameworkOptions.map(({ value }) => value);
75
- const extraOptions = [];
71
+ const extraOptions = [{
72
+ label: c.cyan("TailwindCSS"),
73
+ value: "tailwindcss"
74
+ }];
76
75
  const extra = extraOptions.map(({ value }) => value);
77
76
  const dependenciesMap = defineEnumDeep({
78
77
  astro: ["eslint-plugin-astro", "astro-eslint-parser"],
@@ -81,7 +80,6 @@ const dependenciesMap = defineEnumDeep({
81
80
  "eslint-plugin-react-hooks",
82
81
  "eslint-plugin-react-refresh"
83
82
  ],
84
- slidev: [],
85
83
  solid: ["eslint-plugin-solid"],
86
84
  svelte: ["eslint-plugin-svelte", "svelte-eslint-parser"],
87
85
  vue: [
@@ -136,17 +134,11 @@ async function updateEslintFiles(result) {
136
134
  const configLines = [];
137
135
  if (eslintIgnores.length > 0) configLines.push(`ignores: ${JSON.stringify(eslintIgnores)},`);
138
136
  for (const framework of result.frameworks) configLines.push(`${framework}: true,`);
139
- const mainConfig = configLines.map((i) => ` ${i}`).join("\n");
137
+ const mainConfig = configLines.map((line) => ` ${line}`).join("\n");
140
138
  const additionalConfig = [];
141
139
  const eslintConfigContent = getEslintConfigContent(mainConfig, additionalConfig);
142
140
  await fsp.writeFile(pathFlatConfig, eslintConfigContent);
143
141
  p.log.success(c.green`Created ${configFileName}`);
144
- const files = fs.readdirSync(cwd);
145
- const legacyConfig = [];
146
- files.forEach((file) => {
147
- if (/eslint|prettier/.test(file) && !file.includes("eslint.config.")) legacyConfig.push(file);
148
- });
149
- if (legacyConfig.length > 0) p.note(c.dim(legacyConfig.join(", ")), "You can now remove those files manually");
150
142
  }
151
143
 
152
144
  //#endregion
@@ -160,8 +152,6 @@ const versionsMap = {
160
152
  "eslint-plugin-react-refresh": "^0.4.19",
161
153
  "eslint-plugin-solid": "^0.14.5",
162
154
  "eslint-plugin-svelte": "^3.3.3",
163
- "prettier-plugin-astro": "^0.14.1",
164
- "prettier-plugin-slidev": "^1.0.5",
165
155
  "svelte-eslint-parser": "^1.1.0"
166
156
  };
167
157
 
@@ -178,11 +168,12 @@ async function updatePackageJson(result) {
178
168
  pkg.devDependencies.eslint ??= versionsMap.eslint;
179
169
  const addedPackages = [];
180
170
  for (const framework of result.frameworks) {
181
- const deps = dependenciesMap[framework];
182
- if (!deps) continue;
183
- deps.forEach((f) => {
184
- pkg.devDependencies[f] = versionsMap[f];
185
- addedPackages.push(f);
171
+ const dependencies = dependenciesMap[framework];
172
+ if (!dependencies) continue;
173
+ dependencies.forEach((dependency) => {
174
+ if (!pkg.devDependencies) return;
175
+ pkg.devDependencies[dependency] = versionsMap[dependency];
176
+ addedPackages.push(dependency);
186
177
  });
187
178
  }
188
179
  if (addedPackages.length > 0) p.note(c.dim(addedPackages.join(", ")), "Added packages");
@@ -273,7 +264,7 @@ async function run(options = {}) {
273
264
  await updateEslintFiles(result);
274
265
  await updateVscodeSettings(result);
275
266
  p.log.success(c.green`Setup completed`);
276
- p.outro(`Now you can update the dependencies by run ${c.blue("pnpm install")} and run ${c.blue("eslint --fix")}\n`);
267
+ p.outro(`Now you can update the dependencies by running ${c.blue("pnpm install")} and also ${c.blue("eslint --fix")}\n`);
277
268
  }
278
269
 
279
270
  //#endregion
@@ -282,10 +273,10 @@ function header() {
282
273
  p.intro(`${c.green`@zayne-labs/eslint-config `}${c.dim`v${version}`}`);
283
274
  }
284
275
  const cli = cac("@zayne-labs/eslint-config");
285
- cli.command("", "Run the initialization or migration").option("--yes, -y", "Skip prompts and use default values", { default: false }).option("--template, -t <template>", "Use the framework template for optimal customization: vue / react / svelte / astro", { type: [] }).option("--extra, -e <extra>", "Use the extra utils: formatter / perfectionist / unocss", { type: [] }).action(async (args) => {
276
+ cli.command("", "Run the initialization or migration").option("--yes, -y", "Skip prompts and use default values", { default: false }).option("--template, -t <template>", "Use the framework template for optimal customization: vue / react / svelte / astro", { type: [] }).option("--extra, -e <extra>", "Use the extra utils: perfectionist / tailwindcss", { type: [] }).action(async (options) => {
286
277
  header();
287
278
  try {
288
- await run(args);
279
+ await run(options);
289
280
  } catch (error) {
290
281
  p.log.error(c.inverse.red(" Failed to migrate "));
291
282
  p.log.error(c.red`✘ ${String(error)}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["frameworkOptions: Array<PromItem<FrameworkOption>>","frameworks: FrameworkOption[]","extraOptions: Array<PromItem<ExtraLibrariesOption>>","extra: ExtraLibrariesOption[]","mainConfig: string","additionalConfigs?: string[]","result: PromptResult","eslintIgnores: string[]","pattern: string","configLines: string[]","additionalConfig: string[]","eslintConfigContent: string","legacyConfig: string[]","result: PromptResult","addedPackages: string[]","result: PromptResult","dotVscodePath: string","settingsPath: string","options: CliRunOptions","result: PromptResult","args: CliRunOptions"],"sources":["../../package.json","../../src/cli/constants.ts","../../src/cli/utils.ts","../../src/cli/stages/update-eslint-files.ts","../../src/cli/constants-generated.ts","../../src/cli/stages/update-package-json.ts","../../src/cli/stages/update-vscode-settings.ts","../../src/cli/run.ts","../../src/cli/index.ts"],"sourcesContent":["{\n\t\"name\": \"@zayne-labs/eslint-config\",\n\t\"type\": \"module\",\n\t\"version\": \"0.9.2\",\n\t\"description\": \"Zayne Labs' ESLint config preset\",\n\t\"author\": \"Ryan Zayne\",\n\t\"license\": \"MIT\",\n\t\"homepage\": \"https://github.com/zayne-labs/config#readme\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/zayne-labs/config.git\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/zayne-labs/config/issues\"\n\t},\n\t\"keywords\": [],\n\t\"sideEffects\": false,\n\t\"exports\": {\n\t\t\".\": \"./dist/index.js\"\n\t},\n\t\"bin\": \"./bin/index.js\",\n\t\"files\": [\n\t\t\"bin\",\n\t\t\"dist\"\n\t],\n\t\"engines\": {\n\t\t\"node\": \">=18.x\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"pnpm typegen && tsdown\",\n\t\t\"build:dev\": \"pnpm typegen && cross-env NODE_ENV=development tsdown\",\n\t\t\"lint:attw\": \"attw --pack . --ignore-rules=cjs-resolves-to-esm\",\n\t\t\"lint:eslint\": \"eslint . --max-warnings 0\",\n\t\t\"lint:format\": \"prettier --cache --write .\",\n\t\t\"lint:packages\": \"pnpm dedupe --check\",\n\t\t\"lint:publint\": \"publint --strict .\",\n\t\t\"lint:type-check\": \"pnpm typegen && tsc --pretty -p tsconfig.json\",\n\t\t\"release\": \"pnpm publish --no-git-checks\",\n\t\t\"release:test\": \"pnpx pkg-pr-new publish\",\n\t\t\"typegen\": \"tsx scripts/typegen.ts\",\n\t\t\"version-package\": \"changeset version\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"@eslint-react/eslint-plugin\": \">=1.15.0\",\n\t\t\"@next/eslint-plugin-next\": \">=14.2.15\",\n\t\t\"@tanstack/eslint-plugin-query\": \">=5.59.7\",\n\t\t\"@tanstack/eslint-plugin-router\": \">=1.120.17\",\n\t\t\"@zayne-labs/toolkit-type-helpers\": \"^0.9.34\",\n\t\t\"astro-eslint-parser\": \">=1.0.2\",\n\t\t\"eslint\": \">=9.12.0\",\n\t\t\"eslint-plugin-astro\": \">=1.2.0\",\n\t\t\"eslint-plugin-better-tailwindcss\": \">=3.2.0\",\n\t\t\"eslint-plugin-depend\": \">=1.2.0\",\n\t\t\"eslint-plugin-pnpm\": \">=0.3.1\",\n\t\t\"eslint-plugin-react-hooks\": \">=5.0.0\",\n\t\t\"eslint-plugin-react-refresh\": \">=0.4.12\",\n\t\t\"eslint-plugin-solid\": \">=0.14.3\",\n\t\t\"eslint-plugin-svelte\": \">=2.35.1\",\n\t\t\"eslint-plugin-vue\": \">=9.28.0\",\n\t\t\"eslint-processor-vue-blocks\": \">=0.1.2\",\n\t\t\"vue-eslint-parser\": \">=9.4.3\"\n\t},\n\t\"peerDependenciesMeta\": {\n\t\t\"@eslint-react/eslint-plugin\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"@next/eslint-plugin-next\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"@tanstack/eslint-plugin-query\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"@tanstack/eslint-plugin-router\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"astro-eslint-parser\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-astro\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-better-tailwindcss\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-depend\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-pnpm\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-react-hooks\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-react-refresh\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-solid\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-svelte\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-vue\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-processor-vue-blocks\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"vue-eslint-parser\": {\n\t\t\t\"optional\": true\n\t\t}\n\t},\n\t\"dependencies\": {\n\t\t\"@antfu/install-pkg\": \"1.1.0\",\n\t\t\"@clack/prompts\": \"0.11.0\",\n\t\t\"@eslint-community/eslint-plugin-eslint-comments\": \"4.5.0\",\n\t\t\"@eslint/compat\": \"1.3.0\",\n\t\t\"@eslint/js\": \"9.29.0\",\n\t\t\"@stylistic/eslint-plugin\": \"4.4.1\",\n\t\t\"ansis\": \"^4.0.0\",\n\t\t\"cac\": \"^6.7.14\",\n\t\t\"eslint-config-flat-gitignore\": \"2.1.0\",\n\t\t\"eslint-flat-config-utils\": \"2.1.0\",\n\t\t\"eslint-import-resolver-typescript\": \"4.4.3\",\n\t\t\"eslint-merge-processors\": \"^2.0.0\",\n\t\t\"eslint-plugin-import-x\": \"4.15.2\",\n\t\t\"eslint-plugin-jsdoc\": \"51.0.3\",\n\t\t\"eslint-plugin-jsonc\": \"2.20.1\",\n\t\t\"eslint-plugin-n\": \"17.20.0\",\n\t\t\"eslint-plugin-perfectionist\": \"4.15.0\",\n\t\t\"eslint-plugin-security\": \"3.0.1\",\n\t\t\"eslint-plugin-toml\": \"^0.12.0\",\n\t\t\"eslint-plugin-unicorn\": \"59.0.1\",\n\t\t\"eslint-plugin-yml\": \"^1.17.0\",\n\t\t\"globals\": \"16.2.0\",\n\t\t\"jsonc-eslint-parser\": \"2.4.0\",\n\t\t\"local-pkg\": \"1.1.1\",\n\t\t\"parse-gitignore\": \"^2.0.0\",\n\t\t\"toml-eslint-parser\": \"0.10.0\",\n\t\t\"typescript-eslint\": \"8.34.1\",\n\t\t\"yaml-eslint-parser\": \"1.3.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@arethetypeswrong/cli\": \"0.18.2\",\n\t\t\"@changesets/cli\": \"2.29.4\",\n\t\t\"@eslint-react/eslint-plugin\": \"1.52.2\",\n\t\t\"@next/eslint-plugin-next\": \"15.3.3\",\n\t\t\"@size-limit/esbuild-why\": \"11.2.0\",\n\t\t\"@size-limit/preset-small-lib\": \"11.2.0\",\n\t\t\"@tanstack/eslint-plugin-query\": \"5.78.0\",\n\t\t\"@tanstack/eslint-plugin-router\": \"^1.121.21\",\n\t\t\"@total-typescript/ts-reset\": \"0.6.1\",\n\t\t\"@types/eslint-plugin-security\": \"3.0.0\",\n\t\t\"@types/node\": \"24.0.3\",\n\t\t\"@zayne-labs/toolkit-type-helpers\": \"^0.9.42\",\n\t\t\"@zayne-labs/tsconfig\": \"workspace:*\",\n\t\t\"astro-eslint-parser\": \"1.2.2\",\n\t\t\"concurrently\": \"9.1.2\",\n\t\t\"cross-env\": \"7.0.3\",\n\t\t\"eslint\": \"9.29.0\",\n\t\t\"eslint-plugin-astro\": \"1.3.1\",\n\t\t\"eslint-plugin-better-tailwindcss\": \"3.3.0\",\n\t\t\"eslint-plugin-depend\": \"1.2.0\",\n\t\t\"eslint-plugin-pnpm\": \"0.3.1\",\n\t\t\"eslint-plugin-react-hooks\": \"5.2.0\",\n\t\t\"eslint-plugin-react-refresh\": \"0.4.20\",\n\t\t\"eslint-plugin-solid\": \"0.14.3\",\n\t\t\"eslint-plugin-svelte\": \"3.9.2\",\n\t\t\"eslint-plugin-vue\": \"10.2.0\",\n\t\t\"eslint-processor-vue-blocks\": \"2.0.0\",\n\t\t\"eslint-typegen\": \"2.2.0\",\n\t\t\"husky\": \"9.1.7\",\n\t\t\"lint-staged\": \"16.1.2\",\n\t\t\"pkg-pr-new\": \"0.0.51\",\n\t\t\"prettier\": \"3.5.3\",\n\t\t\"publint\": \"0.3.12\",\n\t\t\"size-limit\": \"11.2.0\",\n\t\t\"tailwindcss\": \"^4.1.10\",\n\t\t\"tsdown\": \"^0.12.8\",\n\t\t\"tsx\": \"4.20.3\",\n\t\t\"typescript\": \"5.8.3\",\n\t\t\"vue-eslint-parser\": \"10.1.3\"\n\t},\n\t\"publishConfig\": {\n\t\t\"access\": \"public\",\n\t\t\"registry\": \"https://registry.npmjs.org/\",\n\t\t\"provenance\": true\n\t}\n}\n","import { defineEnumDeep } from \"@zayne-labs/toolkit-type-helpers\";\nimport type { ExtraLibrariesOption, FrameworkOption, PromItem } from \"./types\";\n\nimport c from \"ansis\";\n\nexport const vscodeSettingsString = `\n // Auto fix\n // \"editor.codeActionsOnSave\": {\n // \"source.fixAll.eslint\": \"explicit\",\n // },\n\n // Enable eslint for all supported languages\n \"eslint.validate\": [\n \"javascript\",\n \"javascriptreact\",\n \"typescript\",\n \"typescriptreact\",\n \"vue\",\n \"html\",\n \"markdown\",\n \"json\",\n \"json5\",\n \"jsonc\",\n \"yaml\",\n \"toml\",\n \"xml\",\n \"gql\",\n \"graphql\",\n \"astro\",\n \"svelte\",\n \"css\",\n \"less\",\n \"scss\",\n \"postcss\"\n ]\n`;\n\nexport const frameworkOptions: Array<PromItem<FrameworkOption>> = [\n\t{\n\t\tlabel: c.green(\"Vue\"),\n\t\tvalue: \"vue\",\n\t},\n\t{\n\t\tlabel: c.cyan(\"React\"),\n\t\tvalue: \"react\",\n\t},\n\t{\n\t\tlabel: c.red(\"Svelte\"),\n\t\tvalue: \"svelte\",\n\t},\n\t{\n\t\tlabel: c.magenta(\"Astro\"),\n\t\tvalue: \"astro\",\n\t},\n\t{\n\t\tlabel: c.cyan(\"Solid\"),\n\t\tvalue: \"solid\",\n\t},\n\t{\n\t\tlabel: c.blue(\"Slidev\"),\n\t\tvalue: \"slidev\",\n\t},\n];\n\nexport const frameworks: FrameworkOption[] = frameworkOptions.map(({ value }) => value);\n\nexport const extraOptions: Array<PromItem<ExtraLibrariesOption>> = [\n\t// {\n\t// \tlabel: c.cyan(\"UnoCSS\"),\n\t// \tvalue: \"unocss\",\n\t// },\n];\n\nexport const extra: ExtraLibrariesOption[] = extraOptions.map(({ value }) => value);\n\nexport const dependenciesMap = defineEnumDeep({\n\tastro: [\"eslint-plugin-astro\", \"astro-eslint-parser\"],\n\treact: [\"@eslint-react/eslint-plugin\", \"eslint-plugin-react-hooks\", \"eslint-plugin-react-refresh\"],\n\tslidev: [],\n\tsolid: [\"eslint-plugin-solid\"],\n\tsvelte: [\"eslint-plugin-svelte\", \"svelte-eslint-parser\"],\n\tvue: [\"eslint-plugin-vue\", \"eslint-processor-vue-blocks\", \"vue-eslint-parser\"],\n});\n","import { execSync } from \"node:child_process\";\n\nexport function isGitClean(): boolean {\n\ttry {\n\t\texecSync(\"git diff-index --quiet HEAD --\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function getEslintConfigContent(mainConfig: string, additionalConfigs?: string[]): string {\n\tconst additionalConfigsStr = additionalConfigs?.map((config) => `,{\\n${config}\\n}`);\n\n\treturn `\nimport { zayne } from '@zayne-labs/eslint-config'\n\nexport default zayne({\n${mainConfig}\n}${additionalConfigsStr})\n`.trimStart();\n}\n","/* eslint-disable max-depth -- Allow */\nimport fs from \"node:fs\";\nimport fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\n// @ts-expect-error missing types\nimport parse from \"parse-gitignore\";\nimport type { PromptResult } from \"../types\";\nimport { getEslintConfigContent } from \"../utils\";\n\nexport async function updateEslintFiles(result: PromptResult): Promise<void> {\n\tconst cwd = process.cwd();\n\tconst pathESLintIgnore = path.join(cwd, \".eslintignore\");\n\tconst pathPackageJSON = path.join(cwd, \"package.json\");\n\n\tconst pkgContent = await fsp.readFile(pathPackageJSON, \"utf8\");\n\tconst pkg = JSON.parse(pkgContent) as Record<string, unknown>;\n\n\tconst configFileName = pkg.type === \"module\" ? \"eslint.config.js\" : \"eslint.config.mjs\";\n\tconst pathFlatConfig = path.join(cwd, configFileName);\n\n\tconst eslintIgnores: string[] = [];\n\n\tif (fs.existsSync(pathESLintIgnore)) {\n\t\tp.log.step(c.cyan`Migrating existing .eslintignore`);\n\t\tconst content = await fsp.readFile(pathESLintIgnore, \"utf8\");\n\t\tconst parsed = parse(content);\n\t\tconst globs = parsed.globs();\n\n\t\tfor (const glob of globs) {\n\t\t\tif (glob.type === \"ignore\") {\n\t\t\t\teslintIgnores.push(...(glob.patterns as string[]));\n\t\t\t}\n\n\t\t\tif (glob.type === \"unignore\") {\n\t\t\t\teslintIgnores.push(...(glob.patterns.map((pattern: string) => `!${pattern}`) as string[]));\n\t\t\t}\n\t\t}\n\t}\n\n\tconst configLines: string[] = [];\n\n\tif (eslintIgnores.length > 0) {\n\t\tconfigLines.push(`ignores: ${JSON.stringify(eslintIgnores)},`);\n\t}\n\n\tfor (const framework of result.frameworks) {\n\t\tconfigLines.push(`${framework}: true,`);\n\t}\n\n\tconst mainConfig = configLines.map((i) => ` ${i}`).join(\"\\n\");\n\tconst additionalConfig: string[] = [];\n\n\tconst eslintConfigContent: string = getEslintConfigContent(mainConfig, additionalConfig);\n\n\tawait fsp.writeFile(pathFlatConfig, eslintConfigContent);\n\tp.log.success(c.green`Created ${configFileName}`);\n\n\tconst files = fs.readdirSync(cwd);\n\tconst legacyConfig: string[] = [];\n\tfiles.forEach((file) => {\n\t\tif (/eslint|prettier/.test(file) && !file.includes(\"eslint.config.\")) {\n\t\t\tlegacyConfig.push(file);\n\t\t}\n\t});\n\n\tif (legacyConfig.length > 0) {\n\t\tp.note(c.dim(legacyConfig.join(\", \")), \"You can now remove those files manually\");\n\t}\n}\n","export const versionsMap = {\n\t\"@eslint-react/eslint-plugin\": \"^1.38.4\",\n\t\"astro-eslint-parser\": \"^1.2.2\",\n\teslint: \"^9.24.0\",\n\t\"eslint-plugin-astro\": \"^1.3.1\",\n\t\"eslint-plugin-react-hooks\": \"^5.2.0\",\n\t\"eslint-plugin-react-refresh\": \"^0.4.19\",\n\t\"eslint-plugin-solid\": \"^0.14.5\",\n\t\"eslint-plugin-svelte\": \"^3.3.3\",\n\t\"prettier-plugin-astro\": \"^0.14.1\",\n\t\"prettier-plugin-slidev\": \"^1.0.5\",\n\t\"svelte-eslint-parser\": \"^1.1.0\",\n};\n","import fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\nimport { version } from \"../../../package.json\";\nimport { dependenciesMap } from \"../constants\";\nimport { versionsMap } from \"../constants-generated\";\nimport type { PromptResult } from \"../types\";\n\nexport async function updatePackageJson(result: PromptResult): Promise<void> {\n\tconst cwd = process.cwd();\n\n\tconst pathPackageJSON = path.join(cwd, \"package.json\");\n\n\tp.log.step(c.cyan`Bumping @zayne-labs/eslint-config to v${version}`);\n\n\tconst pkgContent = await fsp.readFile(pathPackageJSON, \"utf8\");\n\tconst pkg = JSON.parse(pkgContent) as Record<string, Record<string, string | undefined> | undefined>;\n\n\tpkg.devDependencies ??= {};\n\tpkg.devDependencies[\"@zayne-labs/eslint-config\"] = `^${version}`;\n\tpkg.devDependencies.eslint ??= versionsMap.eslint;\n\n\tconst addedPackages: string[] = [];\n\n\tfor (const framework of result.frameworks) {\n\t\tconst deps = dependenciesMap[framework];\n\n\t\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\t\tif (!deps) continue;\n\n\t\tdeps.forEach((f) => {\n\t\t\t// eslint-disable-next-line ts-eslint/no-non-null-assertion -- Allow\n\t\t\tpkg.devDependencies![f] = versionsMap[f as keyof typeof versionsMap];\n\t\t\taddedPackages.push(f);\n\t\t});\n\t}\n\n\tif (addedPackages.length > 0) {\n\t\tp.note(c.dim(addedPackages.join(\", \")), \"Added packages\");\n\t}\n\n\tawait fsp.writeFile(pathPackageJSON, JSON.stringify(pkg, null, 2));\n\n\tp.log.success(c.green`Changes wrote to package.json`);\n}\n","import fs from \"node:fs\";\nimport fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport { green } from \"ansis\";\nimport { vscodeSettingsString } from \"../constants\";\nimport type { PromptResult } from \"../types\";\n\nexport async function updateVscodeSettings(result: PromptResult): Promise<void> {\n\tconst cwd = process.cwd();\n\n\tif (!result.updateVscodeSettings) return;\n\n\tconst dotVscodePath: string = path.join(cwd, \".vscode\");\n\tconst settingsPath: string = path.join(dotVscodePath, \"settings.json\");\n\n\tif (!fs.existsSync(dotVscodePath)) await fsp.mkdir(dotVscodePath, { recursive: true });\n\n\tif (!fs.existsSync(settingsPath)) {\n\t\tawait fsp.writeFile(settingsPath, `{${vscodeSettingsString}}\\n`, \"utf8\");\n\t\tp.log.success(green`Created .vscode/settings.json`);\n\t} else {\n\t\tlet settingsContent = await fsp.readFile(settingsPath, \"utf8\");\n\n\t\tsettingsContent = settingsContent.trim().replace(/\\s*\\}$/, \"\");\n\t\tsettingsContent += settingsContent.endsWith(\",\") || settingsContent.endsWith(\"{\") ? \"\" : \",\";\n\t\tsettingsContent += `${vscodeSettingsString}}\\n`;\n\n\t\tawait fsp.writeFile(settingsPath, settingsContent, \"utf8\");\n\t\tp.log.success(green`Updated .vscode/settings.json`);\n\t}\n}\n","/* eslint-disable perfectionist/sort-objects -- Ignore */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\nimport { extra, extraOptions, frameworkOptions, frameworks } from \"./constants\";\nimport { updateEslintFiles } from \"./stages/update-eslint-files\";\nimport { updatePackageJson } from \"./stages/update-package-json\";\nimport { updateVscodeSettings } from \"./stages/update-vscode-settings\";\nimport type { ExtraLibrariesOption, FrameworkOption, PromptResult } from \"./types\";\nimport { isGitClean } from \"./utils\";\n\nexport type CliRunOptions = {\n\t/**\n\t * Use the extra utils: formatter / perfectionist / unocss\n\t */\n\textra?: string[];\n\t/**\n\t * Use the framework template for optimal customization: vue / react / svelte / astro\n\t */\n\tframeworks?: string[];\n\t/**\n\t * Skip prompts and use default values\n\t */\n\tyes?: boolean;\n};\n\nexport async function run(options: CliRunOptions = {}): Promise<void> {\n\tconst argSkipPrompt = Boolean(process.env.SKIP_PROMPT) || options.yes;\n\tconst argTemplate = options.frameworks?.map((m) => m.trim()).filter(Boolean);\n\tconst argExtra = options.extra?.map((m) => m.trim()).filter(Boolean);\n\n\tif (fs.existsSync(path.join(process.cwd(), \"eslint.config.js\"))) {\n\t\tp.log.warn(c.yellow`eslint.config.js already exists, migration wizard exited.`);\n\n\t\treturn process.exit(1);\n\t}\n\n\t// Set default value for promptResult if `argSkipPrompt` is enabled\n\tlet result: PromptResult = {\n\t\textra: (argExtra ?? []) as ExtraLibrariesOption[],\n\t\tframeworks: (argTemplate ?? []) as FrameworkOption[],\n\t\tuncommittedConfirmed: false,\n\t\tupdateVscodeSettings: true,\n\t};\n\n\tif (!argSkipPrompt) {\n\t\tresult = (await p.group(\n\t\t\t{\n\t\t\t\tuncommittedConfirmed: () => {\n\t\t\t\t\tif (isGitClean()) {\n\t\t\t\t\t\treturn Promise.resolve(true);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p.confirm({\n\t\t\t\t\t\tinitialValue: false,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"There are uncommitted changes in the current repository, are you sure to continue?\",\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tframeworks: ({ results }) => {\n\t\t\t\t\tconst isArgTemplateValid =\n\t\t\t\t\t\t(argTemplate?.length ?? 0) > 0\n\t\t\t\t\t\t&& (argTemplate ?? []).filter((element) => !frameworks.includes(element)).length === 0;\n\n\t\t\t\t\tif (!results.uncommittedConfirmed || isArgTemplateValid) return;\n\n\t\t\t\t\tconst message =\n\t\t\t\t\t\targTemplate ?\n\t\t\t\t\t\t\t`\"${argTemplate}\" isn't a valid template. Please choose from below: `\n\t\t\t\t\t\t:\t\"Select a framework:\";\n\n\t\t\t\t\treturn p.multiselect<FrameworkOption>({\n\t\t\t\t\t\tmessage: c.reset(message),\n\t\t\t\t\t\toptions: frameworkOptions,\n\t\t\t\t\t\trequired: false,\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\textra: ({ results }) => {\n\t\t\t\t\tconst isArgExtraValid =\n\t\t\t\t\t\t(argExtra?.length ?? 0) > 0\n\t\t\t\t\t\t&& (argExtra ?? []).filter((element) => !extra.includes(element)).length === 0;\n\n\t\t\t\t\tif (!results.uncommittedConfirmed || isArgExtraValid) return;\n\n\t\t\t\t\tconst message =\n\t\t\t\t\t\targExtra ?\n\t\t\t\t\t\t\t`\"${argExtra}\" isn't a valid extra util. Please choose from below: `\n\t\t\t\t\t\t:\t\"Select a extra utils:\";\n\n\t\t\t\t\treturn p.multiselect<ExtraLibrariesOption>({\n\t\t\t\t\t\tmessage: c.reset(message),\n\t\t\t\t\t\toptions: extraOptions,\n\t\t\t\t\t\trequired: false,\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tupdateVscodeSettings: ({ results }) => {\n\t\t\t\t\tif (!results.uncommittedConfirmed) return;\n\n\t\t\t\t\treturn p.confirm({\n\t\t\t\t\t\tinitialValue: true,\n\t\t\t\t\t\tmessage: \"Update .vscode/settings.json for better VS Code experience?\",\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tp.cancel(\"Operation cancelled.\");\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t},\n\t\t\t}\n\t\t)) as PromptResult;\n\n\t\tif (!result.uncommittedConfirmed) {\n\t\t\treturn process.exit(1);\n\t\t}\n\t}\n\n\tawait updatePackageJson(result);\n\tawait updateEslintFiles(result);\n\tawait updateVscodeSettings(result);\n\n\tp.log.success(c.green`Setup completed`);\n\tp.outro(\n\t\t`Now you can update the dependencies by run ${c.blue(\"pnpm install\")} and run ${c.blue(\"eslint --fix\")}\\n`\n\t);\n}\n","import process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\nimport { cac } from \"cac\";\nimport { version } from \"../../package.json\";\nimport { type CliRunOptions, run } from \"./run\";\n\nfunction header(): void {\n\tp.intro(`${c.green`@zayne-labs/eslint-config `}${c.dim`v${version}`}`);\n}\n\nconst cli = cac(\"@zayne-labs/eslint-config\");\n\ncli.command(\"\", \"Run the initialization or migration\")\n\t.option(\"--yes, -y\", \"Skip prompts and use default values\", { default: false })\n\t.option(\n\t\t\"--template, -t <template>\",\n\t\t\"Use the framework template for optimal customization: vue / react / svelte / astro\",\n\t\t{ type: [] }\n\t)\n\t.option(\"--extra, -e <extra>\", \"Use the extra utils: formatter / perfectionist / unocss\", { type: [] })\n\t.action(async (args: CliRunOptions) => {\n\t\theader();\n\t\ttry {\n\t\t\tawait run(args);\n\t\t} catch (error) {\n\t\t\tp.log.error(c.inverse.red(\" Failed to migrate \"));\n\t\t\tp.log.error(c.red`✘ ${String(error)}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t});\n\ncli.help();\ncli.version(version);\ncli.parse();\n"],"mappings":";;;;;;;;;;;;cAGY;;;;ACEZ,MAAa,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgCrC,MAAaA,mBAAqD;CACjE;EACC,OAAO,EAAE,MAAM,MAAM;EACrB,OAAO;CACP;CACD;EACC,OAAO,EAAE,KAAK,QAAQ;EACtB,OAAO;CACP;CACD;EACC,OAAO,EAAE,IAAI,SAAS;EACtB,OAAO;CACP;CACD;EACC,OAAO,EAAE,QAAQ,QAAQ;EACzB,OAAO;CACP;CACD;EACC,OAAO,EAAE,KAAK,QAAQ;EACtB,OAAO;CACP;CACD;EACC,OAAO,EAAE,KAAK,SAAS;EACvB,OAAO;CACP;AACD;AAED,MAAaC,aAAgC,iBAAiB,IAAI,CAAC,EAAE,OAAO,KAAK,MAAM;AAEvF,MAAaC,eAAsD,CAKlE;AAED,MAAaC,QAAgC,aAAa,IAAI,CAAC,EAAE,OAAO,KAAK,MAAM;AAEnF,MAAa,kBAAkB,eAAe;CAC7C,OAAO,CAAC,uBAAuB,qBAAsB;CACrD,OAAO;EAAC;EAA+B;EAA6B;CAA8B;CAClG,QAAQ,CAAE;CACV,OAAO,CAAC,qBAAsB;CAC9B,QAAQ,CAAC,wBAAwB,sBAAuB;CACxD,KAAK;EAAC;EAAqB;EAA+B;CAAoB;AAC9E,EAAC;;;;AChFF,SAAgB,aAAsB;AACrC,KAAI;AACH,WAAS,iCAAiC;AAC1C,SAAO;CACP,QAAO;AACP,SAAO;CACP;AACD;AAED,SAAgB,uBAAuBC,YAAoBC,mBAAsC;CAChG,MAAM,uBAAuB,mBAAmB,IAAI,CAAC,YAAY,MAAM,OAAO,KAAK;AAEnF,QAAO,CAAC;;;;EAIP,WAAW;GACV,qBAAqB;EACtB,WAAW;AACZ;;;;ACTD,eAAsB,kBAAkBC,QAAqC;CAC5E,MAAM,MAAM,QAAQ,KAAK;CACzB,MAAM,mBAAmB,KAAK,KAAK,KAAK,gBAAgB;CACxD,MAAM,kBAAkB,KAAK,KAAK,KAAK,eAAe;CAEtD,MAAM,aAAa,MAAM,IAAI,SAAS,iBAAiB,OAAO;CAC9D,MAAM,MAAM,KAAK,MAAM,WAAW;CAElC,MAAM,iBAAiB,IAAI,SAAS,WAAW,qBAAqB;CACpE,MAAM,iBAAiB,KAAK,KAAK,KAAK,eAAe;CAErD,MAAMC,gBAA0B,CAAE;AAElC,KAAI,GAAG,WAAW,iBAAiB,EAAE;AACpC,IAAE,IAAI,KAAK,EAAE,KAAK,kCAAkC;EACpD,MAAM,UAAU,MAAM,IAAI,SAAS,kBAAkB,OAAO;EAC5D,MAAM,SAAS,MAAM,QAAQ;EAC7B,MAAM,QAAQ,OAAO,OAAO;AAE5B,OAAK,MAAM,QAAQ,OAAO;AACzB,OAAI,KAAK,SAAS,SACjB,eAAc,KAAK,GAAI,KAAK,SAAsB;AAGnD,OAAI,KAAK,SAAS,WACjB,eAAc,KAAK,GAAI,KAAK,SAAS,IAAI,CAACC,aAAqB,GAAG,QAAQ,EAAE,CAAc;EAE3F;CACD;CAED,MAAMC,cAAwB,CAAE;AAEhC,KAAI,cAAc,SAAS,EAC1B,aAAY,MAAM,WAAW,KAAK,UAAU,cAAc,CAAC,GAAG;AAG/D,MAAK,MAAM,aAAa,OAAO,WAC9B,aAAY,MAAM,EAAE,UAAU,SAAS;CAGxC,MAAM,aAAa,YAAY,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,KAAK,KAAK;CAC9D,MAAMC,mBAA6B,CAAE;CAErC,MAAMC,sBAA8B,uBAAuB,YAAY,iBAAiB;AAExF,OAAM,IAAI,UAAU,gBAAgB,oBAAoB;AACxD,GAAE,IAAI,QAAQ,EAAE,MAAM,UAAU,eAAe,EAAE;CAEjD,MAAM,QAAQ,GAAG,YAAY,IAAI;CACjC,MAAMC,eAAyB,CAAE;AACjC,OAAM,QAAQ,CAAC,SAAS;AACvB,MAAI,kBAAkB,KAAK,KAAK,KAAK,KAAK,SAAS,iBAAiB,CACnE,cAAa,KAAK,KAAK;CAExB,EAAC;AAEF,KAAI,aAAa,SAAS,EACzB,GAAE,KAAK,EAAE,IAAI,aAAa,KAAK,KAAK,CAAC,EAAE,0CAA0C;AAElF;;;;ACvED,MAAa,cAAc;CAC1B,+BAA+B;CAC/B,uBAAuB;CACvB,QAAQ;CACR,uBAAuB;CACvB,6BAA6B;CAC7B,+BAA+B;CAC/B,uBAAuB;CACvB,wBAAwB;CACxB,yBAAyB;CACzB,0BAA0B;CAC1B,wBAAwB;AACxB;;;;ACFD,eAAsB,kBAAkBC,QAAqC;CAC5E,MAAM,MAAM,QAAQ,KAAK;CAEzB,MAAM,kBAAkB,KAAK,KAAK,KAAK,eAAe;AAEtD,GAAE,IAAI,KAAK,EAAE,KAAK,wCAAwC,QAAQ,EAAE;CAEpE,MAAM,aAAa,MAAM,IAAI,SAAS,iBAAiB,OAAO;CAC9D,MAAM,MAAM,KAAK,MAAM,WAAW;AAElC,KAAI,oBAAoB,CAAE;AAC1B,KAAI,gBAAgB,gCAAgC,GAAG,QAAQ;AAC/D,KAAI,gBAAgB,WAAW,YAAY;CAE3C,MAAMC,gBAA0B,CAAE;AAElC,MAAK,MAAM,aAAa,OAAO,YAAY;EAC1C,MAAM,OAAO,gBAAgB;AAG7B,OAAK,KAAM;AAEX,OAAK,QAAQ,CAAC,MAAM;AAEnB,OAAI,gBAAiB,KAAK,YAAY;AACtC,iBAAc,KAAK,EAAE;EACrB,EAAC;CACF;AAED,KAAI,cAAc,SAAS,EAC1B,GAAE,KAAK,EAAE,IAAI,cAAc,KAAK,KAAK,CAAC,EAAE,iBAAiB;AAG1D,OAAM,IAAI,UAAU,iBAAiB,KAAK,UAAU,KAAK,MAAM,EAAE,CAAC;AAElE,GAAE,IAAI,QAAQ,EAAE,MAAM,+BAA+B;AACrD;;;;ACrCD,eAAsB,qBAAqBC,QAAqC;CAC/E,MAAM,MAAM,QAAQ,KAAK;AAEzB,MAAK,OAAO,qBAAsB;CAElC,MAAMC,gBAAwB,KAAK,KAAK,KAAK,UAAU;CACvD,MAAMC,eAAuB,KAAK,KAAK,eAAe,gBAAgB;AAEtE,MAAK,GAAG,WAAW,cAAc,CAAE,OAAM,IAAI,MAAM,eAAe,EAAE,WAAW,KAAM,EAAC;AAEtF,MAAK,GAAG,WAAW,aAAa,EAAE;AACjC,QAAM,IAAI,UAAU,eAAe,GAAG,qBAAqB,MAAM,OAAO;AACxE,IAAE,IAAI,QAAQ,MAAM,+BAA+B;CACnD,OAAM;EACN,IAAI,kBAAkB,MAAM,IAAI,SAAS,cAAc,OAAO;AAE9D,oBAAkB,gBAAgB,MAAM,CAAC,QAAQ,UAAU,GAAG;AAC9D,qBAAmB,gBAAgB,SAAS,IAAI,IAAI,gBAAgB,SAAS,IAAI,GAAG,KAAK;AACzF,sBAAoB,EAAE,qBAAqB;AAE3C,QAAM,IAAI,UAAU,cAAc,iBAAiB,OAAO;AAC1D,IAAE,IAAI,QAAQ,MAAM,+BAA+B;CACnD;AACD;;;;ACJD,eAAsB,IAAIC,UAAyB,CAAE,GAAiB;CACrE,MAAM,gBAAgB,QAAQ,QAAQ,IAAI,YAAY,IAAI,QAAQ;CAClE,MAAM,cAAc,QAAQ,YAAY,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ;CAC5E,MAAM,WAAW,QAAQ,OAAO,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,OAAO,QAAQ;AAEpE,KAAI,GAAG,WAAW,KAAK,KAAK,QAAQ,KAAK,EAAE,mBAAmB,CAAC,EAAE;AAChE,IAAE,IAAI,KAAK,EAAE,OAAO,2DAA2D;AAE/E,SAAO,QAAQ,KAAK,EAAE;CACtB;CAGD,IAAIC,SAAuB;EAC1B,OAAQ,YAAY,CAAE;EACtB,YAAa,eAAe,CAAE;EAC9B,sBAAsB;EACtB,sBAAsB;CACtB;AAED,MAAK,eAAe;AACnB,WAAU,MAAM,EAAE,MACjB;GACC,sBAAsB,MAAM;AAC3B,QAAI,YAAY,CACf,QAAO,QAAQ,QAAQ,KAAK;AAG7B,WAAO,EAAE,QAAQ;KAChB,cAAc;KACd,SACC;IACD,EAAC;GACF;GAED,YAAY,CAAC,EAAE,SAAS,KAAK;IAC5B,MAAM,sBACJ,aAAa,UAAU,KAAK,KAC1B,CAAC,eAAe,CAAE,GAAE,OAAO,CAAC,aAAa,WAAW,SAAS,QAAQ,CAAC,CAAC,WAAW;AAEtF,SAAK,QAAQ,wBAAwB,mBAAoB;IAEzD,MAAM,UACL,eACE,GAAG,YAAY,wDACf;AAEH,WAAO,EAAE,YAA6B;KACrC,SAAS,EAAE,MAAM,QAAQ;KACzB,SAAS;KACT,UAAU;IACV,EAAC;GACF;GAED,OAAO,CAAC,EAAE,SAAS,KAAK;IACvB,MAAM,mBACJ,UAAU,UAAU,KAAK,KACvB,CAAC,YAAY,CAAE,GAAE,OAAO,CAAC,aAAa,MAAM,SAAS,QAAQ,CAAC,CAAC,WAAW;AAE9E,SAAK,QAAQ,wBAAwB,gBAAiB;IAEtD,MAAM,UACL,YACE,GAAG,SAAS,0DACZ;AAEH,WAAO,EAAE,YAAkC;KAC1C,SAAS,EAAE,MAAM,QAAQ;KACzB,SAAS;KACT,UAAU;IACV,EAAC;GACF;GACD,sBAAsB,CAAC,EAAE,SAAS,KAAK;AACtC,SAAK,QAAQ,qBAAsB;AAEnC,WAAO,EAAE,QAAQ;KAChB,cAAc;KACd,SAAS;IACT,EAAC;GACF;EACD,GACD,EACC,UAAU,MAAM;AACf,KAAE,OAAO,uBAAuB;AAChC,WAAQ,KAAK,EAAE;EACf,EACD,EACD;AAED,OAAK,OAAO,qBACX,QAAO,QAAQ,KAAK,EAAE;CAEvB;AAED,OAAM,kBAAkB,OAAO;AAC/B,OAAM,kBAAkB,OAAO;AAC/B,OAAM,qBAAqB,OAAO;AAElC,GAAE,IAAI,QAAQ,EAAE,MAAM,iBAAiB;AACvC,GAAE,OACA,6CAA6C,EAAE,KAAK,eAAe,CAAC,WAAW,EAAE,KAAK,eAAe,CAAC,IACvG;AACD;;;;AC1HD,SAAS,SAAe;AACvB,GAAE,OAAO,EAAE,EAAE,MAAM,4BAA4B,EAAE,EAAE,IAAI,GAAG,QAAQ,EAAE,EAAE;AACtE;AAED,MAAM,MAAM,IAAI,4BAA4B;AAE5C,IAAI,QAAQ,IAAI,sCAAsC,CACpD,OAAO,aAAa,uCAAuC,EAAE,SAAS,MAAO,EAAC,CAC9E,OACA,6BACA,sFACA,EAAE,MAAM,CAAE,EAAE,EACZ,CACA,OAAO,uBAAuB,2DAA2D,EAAE,MAAM,CAAE,EAAE,EAAC,CACtG,OAAO,OAAOC,SAAwB;AACtC,SAAQ;AACR,KAAI;AACH,QAAM,IAAI,KAAK;CACf,SAAQ,OAAO;AACf,IAAE,IAAI,MAAM,EAAE,QAAQ,IAAI,sBAAsB,CAAC;AACjD,IAAE,IAAI,MAAM,EAAE,IAAI,IAAI,OAAO,MAAM,CAAC,EAAE;AACtC,UAAQ,KAAK,EAAE;CACf;AACD,EAAC;AAEH,IAAI,MAAM;AACV,IAAI,QAAQ,QAAQ;AACpB,IAAI,OAAO"}
1
+ {"version":3,"file":"index.js","names":["frameworkOptions: Array<PromItem<FrameworkOption>>","frameworks: FrameworkOption[]","extraOptions: Array<PromItem<ExtraLibrariesOption>>","extra: ExtraLibrariesOption[]","mainConfig: string","additionalConfigs?: string[]","result: PromptResult","eslintIgnores: string[]","pattern: string","configLines: string[]","additionalConfig: string[]","eslintConfigContent: string","result: PromptResult","addedPackages: string[]","result: PromptResult","dotVscodePath: string","settingsPath: string","options: CliRunOptions","result: PromptResult","options: CliRunOptions"],"sources":["../../package.json","../../src/cli/constants.ts","../../src/cli/utils.ts","../../src/cli/stages/update-eslint-files.ts","../../src/cli/constants-generated.ts","../../src/cli/stages/update-package-json.ts","../../src/cli/stages/update-vscode-settings.ts","../../src/cli/run.ts","../../src/cli/index.ts"],"sourcesContent":["{\n\t\"name\": \"@zayne-labs/eslint-config\",\n\t\"type\": \"module\",\n\t\"version\": \"0.9.3\",\n\t\"description\": \"Zayne Labs' ESLint config preset\",\n\t\"author\": \"Ryan Zayne\",\n\t\"license\": \"MIT\",\n\t\"homepage\": \"https://github.com/zayne-labs/config#readme\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git+https://github.com/zayne-labs/config.git\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/zayne-labs/config/issues\"\n\t},\n\t\"keywords\": [],\n\t\"sideEffects\": false,\n\t\"exports\": {\n\t\t\".\": \"./dist/index.js\"\n\t},\n\t\"bin\": \"./bin/index.js\",\n\t\"files\": [\n\t\t\"bin\",\n\t\t\"dist\"\n\t],\n\t\"engines\": {\n\t\t\"node\": \">=18.x\"\n\t},\n\t\"scripts\": {\n\t\t\"build\": \"pnpm typegen && tsdown\",\n\t\t\"build:dev\": \"pnpm typegen && cross-env NODE_ENV=development tsdown\",\n\t\t\"lint:attw\": \"attw --pack . --ignore-rules=cjs-resolves-to-esm\",\n\t\t\"lint:eslint\": \"eslint . --max-warnings 0\",\n\t\t\"lint:format\": \"prettier --cache --write .\",\n\t\t\"lint:packages\": \"pnpm dedupe --check\",\n\t\t\"lint:publint\": \"publint --strict .\",\n\t\t\"lint:type-check\": \"pnpm typegen && tsc --pretty -p tsconfig.json\",\n\t\t\"release\": \"pnpm publish --no-git-checks\",\n\t\t\"release:test\": \"pnpx pkg-pr-new publish\",\n\t\t\"typegen\": \"tsx scripts/typegen.ts\",\n\t\t\"version-package\": \"changeset version\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"@eslint-react/eslint-plugin\": \">=1.15.0\",\n\t\t\"@next/eslint-plugin-next\": \">=14.2.15\",\n\t\t\"@tanstack/eslint-plugin-query\": \">=5.59.7\",\n\t\t\"@tanstack/eslint-plugin-router\": \">=1.120.17\",\n\t\t\"@zayne-labs/toolkit-type-helpers\": \"^0.9.34\",\n\t\t\"astro-eslint-parser\": \">=1.0.2\",\n\t\t\"eslint\": \">=9.12.0\",\n\t\t\"eslint-plugin-astro\": \">=1.2.0\",\n\t\t\"eslint-plugin-better-tailwindcss\": \">=3.2.0\",\n\t\t\"eslint-plugin-depend\": \">=1.2.0\",\n\t\t\"eslint-plugin-pnpm\": \">=0.3.1\",\n\t\t\"eslint-plugin-react-hooks\": \">=5.0.0\",\n\t\t\"eslint-plugin-react-refresh\": \">=0.4.12\",\n\t\t\"eslint-plugin-solid\": \">=0.14.3\",\n\t\t\"eslint-plugin-svelte\": \">=2.35.1\",\n\t\t\"eslint-plugin-vue\": \">=9.28.0\",\n\t\t\"eslint-processor-vue-blocks\": \">=0.1.2\",\n\t\t\"vue-eslint-parser\": \">=9.4.3\"\n\t},\n\t\"peerDependenciesMeta\": {\n\t\t\"@eslint-react/eslint-plugin\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"@next/eslint-plugin-next\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"@tanstack/eslint-plugin-query\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"@tanstack/eslint-plugin-router\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"astro-eslint-parser\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-astro\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-better-tailwindcss\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-depend\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-pnpm\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-react-hooks\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-react-refresh\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-solid\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-svelte\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-plugin-vue\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"eslint-processor-vue-blocks\": {\n\t\t\t\"optional\": true\n\t\t},\n\t\t\"vue-eslint-parser\": {\n\t\t\t\"optional\": true\n\t\t}\n\t},\n\t\"dependencies\": {\n\t\t\"@antfu/install-pkg\": \"1.1.0\",\n\t\t\"@clack/prompts\": \"0.11.0\",\n\t\t\"@eslint-community/eslint-plugin-eslint-comments\": \"4.5.0\",\n\t\t\"@eslint/compat\": \"1.3.0\",\n\t\t\"@eslint/js\": \"9.29.0\",\n\t\t\"@stylistic/eslint-plugin\": \"4.4.1\",\n\t\t\"ansis\": \"^4.0.0\",\n\t\t\"cac\": \"^6.7.14\",\n\t\t\"eslint-config-flat-gitignore\": \"2.1.0\",\n\t\t\"eslint-flat-config-utils\": \"2.1.0\",\n\t\t\"eslint-import-resolver-typescript\": \"4.4.3\",\n\t\t\"eslint-merge-processors\": \"^2.0.0\",\n\t\t\"eslint-plugin-import-x\": \"4.15.2\",\n\t\t\"eslint-plugin-jsdoc\": \"51.1.1\",\n\t\t\"eslint-plugin-jsonc\": \"2.20.1\",\n\t\t\"eslint-plugin-n\": \"17.20.0\",\n\t\t\"eslint-plugin-perfectionist\": \"4.15.0\",\n\t\t\"eslint-plugin-security\": \"3.0.1\",\n\t\t\"eslint-plugin-toml\": \"^0.12.0\",\n\t\t\"eslint-plugin-unicorn\": \"59.0.1\",\n\t\t\"eslint-plugin-yml\": \"^1.17.0\",\n\t\t\"globals\": \"16.2.0\",\n\t\t\"jsonc-eslint-parser\": \"2.4.0\",\n\t\t\"local-pkg\": \"1.1.1\",\n\t\t\"parse-gitignore\": \"^2.0.0\",\n\t\t\"toml-eslint-parser\": \"0.10.0\",\n\t\t\"typescript-eslint\": \"8.34.1\",\n\t\t\"yaml-eslint-parser\": \"1.3.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@arethetypeswrong/cli\": \"0.18.2\",\n\t\t\"@changesets/cli\": \"2.29.5\",\n\t\t\"@eslint-react/eslint-plugin\": \"1.52.2\",\n\t\t\"@next/eslint-plugin-next\": \"15.3.4\",\n\t\t\"@size-limit/esbuild-why\": \"11.2.0\",\n\t\t\"@size-limit/preset-small-lib\": \"11.2.0\",\n\t\t\"@tanstack/eslint-plugin-query\": \"5.81.0\",\n\t\t\"@tanstack/eslint-plugin-router\": \"^1.121.21\",\n\t\t\"@total-typescript/ts-reset\": \"0.6.1\",\n\t\t\"@types/eslint-plugin-security\": \"3.0.0\",\n\t\t\"@types/node\": \"24.0.3\",\n\t\t\"@zayne-labs/toolkit-type-helpers\": \"^0.9.42\",\n\t\t\"@zayne-labs/tsconfig\": \"workspace:*\",\n\t\t\"astro-eslint-parser\": \"1.2.2\",\n\t\t\"concurrently\": \"9.1.2\",\n\t\t\"cross-env\": \"7.0.3\",\n\t\t\"eslint\": \"9.29.0\",\n\t\t\"eslint-plugin-astro\": \"1.3.1\",\n\t\t\"eslint-plugin-better-tailwindcss\": \"3.4.0\",\n\t\t\"eslint-plugin-depend\": \"1.2.0\",\n\t\t\"eslint-plugin-pnpm\": \"0.3.1\",\n\t\t\"eslint-plugin-react-hooks\": \"5.2.0\",\n\t\t\"eslint-plugin-react-refresh\": \"0.4.20\",\n\t\t\"eslint-plugin-solid\": \"0.14.5\",\n\t\t\"eslint-plugin-svelte\": \"3.9.3\",\n\t\t\"eslint-plugin-vue\": \"10.2.0\",\n\t\t\"eslint-processor-vue-blocks\": \"2.0.0\",\n\t\t\"eslint-typegen\": \"2.2.0\",\n\t\t\"husky\": \"9.1.7\",\n\t\t\"lint-staged\": \"16.1.2\",\n\t\t\"pkg-pr-new\": \"0.0.53\",\n\t\t\"prettier\": \"3.5.3\",\n\t\t\"publint\": \"0.3.12\",\n\t\t\"size-limit\": \"11.2.0\",\n\t\t\"tailwindcss\": \"^4.1.10\",\n\t\t\"tsdown\": \"^0.12.8\",\n\t\t\"tsx\": \"4.20.3\",\n\t\t\"typescript\": \"5.8.3\",\n\t\t\"vue-eslint-parser\": \"10.1.3\"\n\t},\n\t\"publishConfig\": {\n\t\t\"access\": \"public\",\n\t\t\"registry\": \"https://registry.npmjs.org/\",\n\t\t\"provenance\": true\n\t}\n}\n","import { defineEnumDeep } from \"@zayne-labs/toolkit-type-helpers\";\nimport c from \"ansis\";\nimport type { ExtraLibrariesOption, FrameworkOption, PromItem } from \"./types\";\n\nexport const vscodeSettingsString = `\n // Auto fix\n // \"editor.codeActionsOnSave\": {\n // \"source.fixAll.eslint\": \"explicit\",\n // },\n\n // Enable eslint for all supported languages\n \"eslint.validate\": [\n \"javascript\",\n \"javascriptreact\",\n \"typescript\",\n \"typescriptreact\",\n \"vue\",\n \"html\",\n \"markdown\",\n \"json\",\n \"json5\",\n \"jsonc\",\n \"yaml\",\n \"toml\",\n \"xml\",\n \"gql\",\n \"graphql\",\n \"astro\",\n \"svelte\",\n \"css\",\n \"less\",\n \"scss\",\n \"postcss\"\n ]\n`;\n\nexport const frameworkOptions: Array<PromItem<FrameworkOption>> = [\n\t{\n\t\tlabel: c.green(\"Vue\"),\n\t\tvalue: \"vue\",\n\t},\n\t{\n\t\tlabel: c.cyan(\"React\"),\n\t\tvalue: \"react\",\n\t},\n\t{\n\t\tlabel: c.red(\"Svelte\"),\n\t\tvalue: \"svelte\",\n\t},\n\t{\n\t\tlabel: c.magenta(\"Astro\"),\n\t\tvalue: \"astro\",\n\t},\n\t{\n\t\tlabel: c.cyan(\"Solid\"),\n\t\tvalue: \"solid\",\n\t},\n];\n\nexport const frameworks: FrameworkOption[] = frameworkOptions.map(({ value }) => value);\n\nexport const extraOptions: Array<PromItem<ExtraLibrariesOption>> = [\n\t{\n\t\tlabel: c.cyan(\"TailwindCSS\"),\n\t\tvalue: \"tailwindcss\",\n\t},\n];\n\nexport const extra: ExtraLibrariesOption[] = extraOptions.map(({ value }) => value);\n\nexport const dependenciesMap = defineEnumDeep({\n\tastro: [\"eslint-plugin-astro\", \"astro-eslint-parser\"],\n\treact: [\"@eslint-react/eslint-plugin\", \"eslint-plugin-react-hooks\", \"eslint-plugin-react-refresh\"],\n\tsolid: [\"eslint-plugin-solid\"],\n\tsvelte: [\"eslint-plugin-svelte\", \"svelte-eslint-parser\"],\n\tvue: [\"eslint-plugin-vue\", \"eslint-processor-vue-blocks\", \"vue-eslint-parser\"],\n});\n","import { execSync } from \"node:child_process\";\n\nexport function isGitClean(): boolean {\n\ttry {\n\t\texecSync(\"git diff-index --quiet HEAD --\");\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nexport function getEslintConfigContent(mainConfig: string, additionalConfigs?: string[]): string {\n\tconst additionalConfigsStr = additionalConfigs?.map((config) => `,{\\n${config}\\n}`);\n\n\treturn `\nimport { zayne } from '@zayne-labs/eslint-config'\n\nexport default zayne({\n${mainConfig}\n}${additionalConfigsStr})\n`.trimStart();\n}\n","/* eslint-disable max-depth -- Allow */\nimport fs from \"node:fs\";\nimport fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\n// @ts-expect-error missing types\nimport parse from \"parse-gitignore\";\nimport type { PromptResult } from \"../types\";\nimport { getEslintConfigContent } from \"../utils\";\n\nexport async function updateEslintFiles(result: PromptResult): Promise<void> {\n\tconst cwd = process.cwd();\n\tconst pathESLintIgnore = path.join(cwd, \".eslintignore\");\n\tconst pathPackageJSON = path.join(cwd, \"package.json\");\n\n\tconst pkgContent = await fsp.readFile(pathPackageJSON, \"utf8\");\n\tconst pkg = JSON.parse(pkgContent) as Record<string, unknown>;\n\n\tconst configFileName = pkg.type === \"module\" ? \"eslint.config.js\" : \"eslint.config.mjs\";\n\tconst pathFlatConfig = path.join(cwd, configFileName);\n\n\tconst eslintIgnores: string[] = [];\n\n\tif (fs.existsSync(pathESLintIgnore)) {\n\t\tp.log.step(c.cyan`Migrating existing .eslintignore`);\n\t\tconst content = await fsp.readFile(pathESLintIgnore, \"utf8\");\n\t\tconst parsed = parse(content);\n\t\tconst globs = parsed.globs();\n\n\t\tfor (const glob of globs) {\n\t\t\tif (glob.type === \"ignore\") {\n\t\t\t\teslintIgnores.push(...(glob.patterns as string[]));\n\t\t\t}\n\n\t\t\tif (glob.type === \"unignore\") {\n\t\t\t\teslintIgnores.push(...(glob.patterns.map((pattern: string) => `!${pattern}`) as string[]));\n\t\t\t}\n\t\t}\n\t}\n\n\tconst configLines: string[] = [];\n\n\tif (eslintIgnores.length > 0) {\n\t\tconfigLines.push(`ignores: ${JSON.stringify(eslintIgnores)},`);\n\t}\n\n\tfor (const framework of result.frameworks) {\n\t\tconfigLines.push(`${framework}: true,`);\n\t}\n\n\tconst mainConfig = configLines.map((line) => ` ${line}`).join(\"\\n\");\n\n\tconst additionalConfig: string[] = [];\n\n\tconst eslintConfigContent: string = getEslintConfigContent(mainConfig, additionalConfig);\n\n\tawait fsp.writeFile(pathFlatConfig, eslintConfigContent);\n\n\tp.log.success(c.green`Created ${configFileName}`);\n}\n","export const versionsMap = {\n\t\"@eslint-react/eslint-plugin\": \"^1.38.4\",\n\t\"astro-eslint-parser\": \"^1.2.2\",\n\teslint: \"^9.24.0\",\n\t\"eslint-plugin-astro\": \"^1.3.1\",\n\t\"eslint-plugin-react-hooks\": \"^5.2.0\",\n\t\"eslint-plugin-react-refresh\": \"^0.4.19\",\n\t\"eslint-plugin-solid\": \"^0.14.5\",\n\t\"eslint-plugin-svelte\": \"^3.3.3\",\n\t\"svelte-eslint-parser\": \"^1.1.0\",\n};\n","import fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\nimport { version } from \"../../../package.json\";\nimport { dependenciesMap } from \"../constants\";\nimport { versionsMap } from \"../constants-generated\";\nimport type { PromptResult } from \"../types\";\n\nexport async function updatePackageJson(result: PromptResult): Promise<void> {\n\tconst cwd = process.cwd();\n\n\tconst pathPackageJSON = path.join(cwd, \"package.json\");\n\n\tp.log.step(c.cyan`Bumping @zayne-labs/eslint-config to v${version}`);\n\n\tconst pkgContent = await fsp.readFile(pathPackageJSON, \"utf8\");\n\tconst pkg = JSON.parse(pkgContent) as Record<string, Record<string, string | undefined> | undefined>;\n\n\tpkg.devDependencies ??= {};\n\tpkg.devDependencies[\"@zayne-labs/eslint-config\"] = `^${version}`;\n\tpkg.devDependencies.eslint ??= versionsMap.eslint;\n\n\tconst addedPackages: string[] = [];\n\n\tfor (const framework of result.frameworks) {\n\t\tconst dependencies = dependenciesMap[framework];\n\n\t\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\t\tif (!dependencies) continue;\n\n\t\tdependencies.forEach((dependency) => {\n\t\t\tif (!pkg.devDependencies) return;\n\n\t\t\tpkg.devDependencies[dependency] = versionsMap[dependency as keyof typeof versionsMap];\n\t\t\taddedPackages.push(dependency);\n\t\t});\n\t}\n\n\tif (addedPackages.length > 0) {\n\t\tp.note(c.dim(addedPackages.join(\", \")), \"Added packages\");\n\t}\n\n\tawait fsp.writeFile(pathPackageJSON, JSON.stringify(pkg, null, 2));\n\n\tp.log.success(c.green`Changes wrote to package.json`);\n}\n","import fs from \"node:fs\";\nimport fsp from \"node:fs/promises\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport { green } from \"ansis\";\nimport { vscodeSettingsString } from \"../constants\";\nimport type { PromptResult } from \"../types\";\n\nexport async function updateVscodeSettings(result: PromptResult): Promise<void> {\n\tconst cwd = process.cwd();\n\n\tif (!result.updateVscodeSettings) return;\n\n\tconst dotVscodePath: string = path.join(cwd, \".vscode\");\n\tconst settingsPath: string = path.join(dotVscodePath, \"settings.json\");\n\n\tif (!fs.existsSync(dotVscodePath)) await fsp.mkdir(dotVscodePath, { recursive: true });\n\n\tif (!fs.existsSync(settingsPath)) {\n\t\tawait fsp.writeFile(settingsPath, `{${vscodeSettingsString}}\\n`, \"utf8\");\n\t\tp.log.success(green`Created .vscode/settings.json`);\n\t} else {\n\t\tlet settingsContent = await fsp.readFile(settingsPath, \"utf8\");\n\n\t\tsettingsContent = settingsContent.trim().replace(/\\s*\\}$/, \"\");\n\t\tsettingsContent += settingsContent.endsWith(\",\") || settingsContent.endsWith(\"{\") ? \"\" : \",\";\n\t\tsettingsContent += `${vscodeSettingsString}}\\n`;\n\n\t\tawait fsp.writeFile(settingsPath, settingsContent, \"utf8\");\n\t\tp.log.success(green`Updated .vscode/settings.json`);\n\t}\n}\n","/* eslint-disable perfectionist/sort-objects -- Ignore */\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\nimport { extra, extraOptions, frameworkOptions, frameworks } from \"./constants\";\nimport { updateEslintFiles } from \"./stages/update-eslint-files\";\nimport { updatePackageJson } from \"./stages/update-package-json\";\nimport { updateVscodeSettings } from \"./stages/update-vscode-settings\";\nimport type { ExtraLibrariesOption, FrameworkOption, PromptResult } from \"./types\";\nimport { isGitClean } from \"./utils\";\n\nexport type CliRunOptions = {\n\t/**\n\t * Use the extra utils: formatter / perfectionist / unocss\n\t */\n\textra?: string[];\n\t/**\n\t * Use the framework template for optimal customization: vue / react / svelte / astro\n\t */\n\tframeworks?: string[];\n\t/**\n\t * Skip prompts and use default values\n\t */\n\tyes?: boolean;\n};\n\nexport async function run(options: CliRunOptions = {}): Promise<void> {\n\tconst argSkipPrompt = Boolean(process.env.SKIP_PROMPT) || options.yes;\n\tconst argTemplate = options.frameworks?.map((m) => m.trim()).filter(Boolean);\n\tconst argExtra = options.extra?.map((m) => m.trim()).filter(Boolean);\n\n\tif (fs.existsSync(path.join(process.cwd(), \"eslint.config.js\"))) {\n\t\tp.log.warn(c.yellow`eslint.config.js already exists, migration wizard exited.`);\n\n\t\treturn process.exit(1);\n\t}\n\n\t// Set default value for promptResult if `argSkipPrompt` is enabled\n\tlet result: PromptResult = {\n\t\textra: (argExtra ?? []) as ExtraLibrariesOption[],\n\t\tframeworks: (argTemplate ?? []) as FrameworkOption[],\n\t\tuncommittedConfirmed: false,\n\t\tupdateVscodeSettings: true,\n\t};\n\n\tif (!argSkipPrompt) {\n\t\tresult = (await p.group(\n\t\t\t{\n\t\t\t\tuncommittedConfirmed: () => {\n\t\t\t\t\tif (isGitClean()) {\n\t\t\t\t\t\treturn Promise.resolve(true);\n\t\t\t\t\t}\n\n\t\t\t\t\treturn p.confirm({\n\t\t\t\t\t\tinitialValue: false,\n\t\t\t\t\t\tmessage:\n\t\t\t\t\t\t\t\"There are uncommitted changes in the current repository, are you sure to continue?\",\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tframeworks: ({ results }) => {\n\t\t\t\t\tconst isArgTemplateValid =\n\t\t\t\t\t\t(argTemplate?.length ?? 0) > 0\n\t\t\t\t\t\t&& (argTemplate ?? []).filter((element) => !frameworks.includes(element)).length === 0;\n\n\t\t\t\t\tif (!results.uncommittedConfirmed || isArgTemplateValid) return;\n\n\t\t\t\t\tconst message =\n\t\t\t\t\t\targTemplate ?\n\t\t\t\t\t\t\t`\"${argTemplate}\" isn't a valid template. Please choose from below: `\n\t\t\t\t\t\t:\t\"Select a framework:\";\n\n\t\t\t\t\treturn p.multiselect<FrameworkOption>({\n\t\t\t\t\t\tmessage: c.reset(message),\n\t\t\t\t\t\toptions: frameworkOptions,\n\t\t\t\t\t\trequired: false,\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\textra: ({ results }) => {\n\t\t\t\t\tconst isArgExtraValid =\n\t\t\t\t\t\t(argExtra?.length ?? 0) > 0\n\t\t\t\t\t\t&& (argExtra ?? []).filter((element) => !extra.includes(element)).length === 0;\n\n\t\t\t\t\tif (!results.uncommittedConfirmed || isArgExtraValid) return;\n\n\t\t\t\t\tconst message =\n\t\t\t\t\t\targExtra ?\n\t\t\t\t\t\t\t`\"${argExtra}\" isn't a valid extra util. Please choose from below: `\n\t\t\t\t\t\t:\t\"Select a extra utils:\";\n\n\t\t\t\t\treturn p.multiselect<ExtraLibrariesOption>({\n\t\t\t\t\t\tmessage: c.reset(message),\n\t\t\t\t\t\toptions: extraOptions,\n\t\t\t\t\t\trequired: false,\n\t\t\t\t\t});\n\t\t\t\t},\n\n\t\t\t\tupdateVscodeSettings: ({ results }) => {\n\t\t\t\t\tif (!results.uncommittedConfirmed) return;\n\n\t\t\t\t\treturn p.confirm({\n\t\t\t\t\t\tinitialValue: true,\n\t\t\t\t\t\tmessage: \"Update .vscode/settings.json for better VS Code experience?\",\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t},\n\t\t\t{\n\t\t\t\tonCancel: () => {\n\t\t\t\t\tp.cancel(\"Operation cancelled.\");\n\t\t\t\t\tprocess.exit(0);\n\t\t\t\t},\n\t\t\t}\n\t\t)) as PromptResult;\n\n\t\tif (!result.uncommittedConfirmed) {\n\t\t\treturn process.exit(1);\n\t\t}\n\t}\n\n\tawait updatePackageJson(result);\n\tawait updateEslintFiles(result);\n\tawait updateVscodeSettings(result);\n\n\tp.log.success(c.green`Setup completed`);\n\n\tp.outro(\n\t\t`Now you can update the dependencies by running ${c.blue(\"pnpm install\")} and also ${c.blue(\"eslint --fix\")}\\n`\n\t);\n}\n","import process from \"node:process\";\nimport * as p from \"@clack/prompts\";\nimport c from \"ansis\";\nimport { cac } from \"cac\";\nimport { version } from \"../../package.json\";\nimport { type CliRunOptions, run } from \"./run\";\n\nfunction header(): void {\n\tp.intro(`${c.green`@zayne-labs/eslint-config `}${c.dim`v${version}`}`);\n}\n\nconst cli = cac(\"@zayne-labs/eslint-config\");\n\ncli.command(\"\", \"Run the initialization or migration\")\n\t.option(\"--yes, -y\", \"Skip prompts and use default values\", { default: false })\n\t.option(\n\t\t\"--template, -t <template>\",\n\t\t\"Use the framework template for optimal customization: vue / react / svelte / astro\",\n\t\t{ type: [] }\n\t)\n\t.option(\"--extra, -e <extra>\", \"Use the extra utils: perfectionist / tailwindcss\", { type: [] })\n\t.action(async (options: CliRunOptions) => {\n\t\theader();\n\t\ttry {\n\t\t\tawait run(options);\n\t\t} catch (error) {\n\t\t\tp.log.error(c.inverse.red(\" Failed to migrate \"));\n\t\t\tp.log.error(c.red`✘ ${String(error)}`);\n\t\t\tprocess.exit(1);\n\t\t}\n\t});\n\ncli.help();\ncli.version(version);\ncli.parse();\n"],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -3532,103 +3532,103 @@ interface Rules {
3532
3532
  'semi-style'?: Linter.RuleEntry<SemiStyle>;
3533
3533
  /**
3534
3534
  * Disallow early returns in components. Solid components only run once, and so conditionals should be inside JSX.
3535
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/components-return-once.md
3535
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/components-return-once.md
3536
3536
  */
3537
3537
  'solid/components-return-once'?: Linter.RuleEntry<[]>;
3538
3538
  /**
3539
3539
  * Enforce naming DOM element event handlers consistently and prevent Solid's analysis from misunderstanding whether a prop should be an event handler.
3540
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/event-handlers.md
3540
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/event-handlers.md
3541
3541
  */
3542
3542
  'solid/event-handlers'?: Linter.RuleEntry<SolidEventHandlers>;
3543
3543
  /**
3544
3544
  * Enforce consistent imports from "solid-js", "solid-js/web", and "solid-js/store".
3545
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/imports.md
3545
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/imports.md
3546
3546
  */
3547
3547
  'solid/imports'?: Linter.RuleEntry<[]>;
3548
3548
  /**
3549
3549
  * Disallow passing the same prop twice in JSX.
3550
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/jsx-no-duplicate-props.md
3550
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-duplicate-props.md
3551
3551
  */
3552
3552
  'solid/jsx-no-duplicate-props'?: Linter.RuleEntry<SolidJsxNoDuplicateProps>;
3553
3553
  /**
3554
3554
  * Disallow javascript: URLs.
3555
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/jsx-no-script-url.md
3555
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-script-url.md
3556
3556
  */
3557
3557
  'solid/jsx-no-script-url'?: Linter.RuleEntry<[]>;
3558
3558
  /**
3559
3559
  * Disallow references to undefined variables in JSX. Handles custom directives.
3560
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/jsx-no-undef.md
3560
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-no-undef.md
3561
3561
  */
3562
3562
  'solid/jsx-no-undef'?: Linter.RuleEntry<SolidJsxNoUndef>;
3563
3563
  /**
3564
3564
  * Prevent variables used in JSX from being marked as unused.
3565
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/jsx-uses-vars.md
3565
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/jsx-uses-vars.md
3566
3566
  */
3567
3567
  'solid/jsx-uses-vars'?: Linter.RuleEntry<[]>;
3568
3568
  /**
3569
3569
  * Disallow usage of type-unsafe event handlers.
3570
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/no-array-handlers.md
3570
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-array-handlers.md
3571
3571
  */
3572
3572
  'solid/no-array-handlers'?: Linter.RuleEntry<[]>;
3573
3573
  /**
3574
3574
  * Disallow destructuring props. In Solid, props must be used with property accesses (`props.foo`) to preserve reactivity. This rule only tracks destructuring in the parameter list.
3575
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/no-destructure.md
3575
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-destructure.md
3576
3576
  */
3577
3577
  'solid/no-destructure'?: Linter.RuleEntry<[]>;
3578
3578
  /**
3579
3579
  * Disallow usage of the innerHTML attribute, which can often lead to security vulnerabilities.
3580
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/no-innerhtml.md
3580
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-innerhtml.md
3581
3581
  */
3582
3582
  'solid/no-innerhtml'?: Linter.RuleEntry<SolidNoInnerhtml>;
3583
3583
  /**
3584
3584
  * Disallow usage of APIs that use ES6 Proxies, only to target environments that don't support them.
3585
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/no-proxy-apis.md
3585
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-proxy-apis.md
3586
3586
  */
3587
3587
  'solid/no-proxy-apis'?: Linter.RuleEntry<[]>;
3588
3588
  /**
3589
3589
  * Disallow usage of dependency arrays in `createEffect` and `createMemo`.
3590
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/no-react-deps.md
3590
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-deps.md
3591
3591
  */
3592
3592
  'solid/no-react-deps'?: Linter.RuleEntry<[]>;
3593
3593
  /**
3594
3594
  * Disallow usage of React-specific `className`/`htmlFor` props, which were deprecated in v1.4.0.
3595
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/no-react-specific-props.md
3595
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-react-specific-props.md
3596
3596
  */
3597
3597
  'solid/no-react-specific-props'?: Linter.RuleEntry<[]>;
3598
3598
  /**
3599
3599
  * Enforce using only Solid-specific namespaced attribute names (i.e. `'on:'` in `<div on:click={...} />`).
3600
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/no-unknown-namespaces.md
3600
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/no-unknown-namespaces.md
3601
3601
  */
3602
3602
  'solid/no-unknown-namespaces'?: Linter.RuleEntry<SolidNoUnknownNamespaces>;
3603
3603
  /**
3604
3604
  * Enforce using the classlist prop over importing a classnames helper. The classlist prop accepts an object `{ [class: string]: boolean }` just like classnames.
3605
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/prefer-classlist.md
3605
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-classlist.md
3606
3606
  * @deprecated
3607
3607
  */
3608
3608
  'solid/prefer-classlist'?: Linter.RuleEntry<SolidPreferClasslist>;
3609
3609
  /**
3610
3610
  * Enforce using Solid's `<For />` component for mapping an array to JSX elements.
3611
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/prefer-for.md
3611
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-for.md
3612
3612
  */
3613
3613
  'solid/prefer-for'?: Linter.RuleEntry<[]>;
3614
3614
  /**
3615
3615
  * Enforce using Solid's `<Show />` component for conditionally showing content. Solid's compiler covers this case, so it's a stylistic rule only.
3616
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/prefer-show.md
3616
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/prefer-show.md
3617
3617
  */
3618
3618
  'solid/prefer-show'?: Linter.RuleEntry<[]>;
3619
3619
  /**
3620
3620
  * Enforce that reactivity (props, signals, memos, etc.) is properly used, so changes in those values will be tracked and update the view as expected.
3621
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/reactivity.md
3621
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/reactivity.md
3622
3622
  */
3623
3623
  'solid/reactivity'?: Linter.RuleEntry<SolidReactivity>;
3624
3624
  /**
3625
3625
  * Disallow extra closing tags for components without children.
3626
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/self-closing-comp.md
3626
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/self-closing-comp.md
3627
3627
  */
3628
3628
  'solid/self-closing-comp'?: Linter.RuleEntry<SolidSelfClosingComp>;
3629
3629
  /**
3630
3630
  * Require CSS properties in the `style` prop to be valid and kebab-cased (ex. 'font-size'), not camel-cased (ex. 'fontSize') like in React, and that property values with dimensions are strings, not numbers with implicit 'px' units.
3631
- * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/docs/style-prop.md
3631
+ * @see https://github.com/solidjs-community/eslint-plugin-solid/blob/main/packages/eslint-plugin-solid/docs/style-prop.md
3632
3632
  */
3633
3633
  'solid/style-prop'?: Linter.RuleEntry<SolidStyleProp>;
3634
3634
  /**
@@ -4179,6 +4179,16 @@ interface Rules {
4179
4179
  * @see https://eslint.org/docs/latest/rules/symbol-description
4180
4180
  */
4181
4181
  'symbol-description'?: Linter.RuleEntry<[]>;
4182
+ /**
4183
+ * Enforce a consistent order for tailwind classes.
4184
+ * @see https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/enforce-consistent-class-order.md
4185
+ */
4186
+ 'tailwindcss-better/enforce-consistent-class-order'?: Linter.RuleEntry<TailwindcssBetterEnforceConsistentClassOrder>;
4187
+ /**
4188
+ * Enforce consistent line wrapping for tailwind classes.
4189
+ * @see https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/multiline.md
4190
+ */
4191
+ 'tailwindcss-better/enforce-consistent-line-wrapping'?: Linter.RuleEntry<TailwindcssBetterEnforceConsistentLineWrapping>;
4182
4192
  /**
4183
4193
  * Enforce consistent syntax for css variables.
4184
4194
  * @see https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/enforce-consistent-variable-syntax.md
@@ -4187,6 +4197,7 @@ interface Rules {
4187
4197
  /**
4188
4198
  * Enforce consistent line wrapping for tailwind classes.
4189
4199
  * @see https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/multiline.md
4200
+ * @deprecated
4190
4201
  */
4191
4202
  'tailwindcss-better/multiline'?: Linter.RuleEntry<TailwindcssBetterMultiline>;
4192
4203
  /**
@@ -4216,7 +4227,8 @@ interface Rules {
4216
4227
  'tailwindcss-better/no-unregistered-classes'?: Linter.RuleEntry<TailwindcssBetterNoUnregisteredClasses>;
4217
4228
  /**
4218
4229
  * Enforce a consistent order for tailwind classes.
4219
- * @see https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/sort-classes.md
4230
+ * @see https://github.com/schoero/eslint-plugin-better-tailwindcss/blob/main/docs/rules/enforce-consistent-class-order.md
4231
+ * @deprecated
4220
4232
  */
4221
4233
  'tailwindcss-better/sort-classes'?: Linter.RuleEntry<TailwindcssBetterSortClasses>;
4222
4234
  /**
@@ -7808,6 +7820,7 @@ type JsdocLinesBeforeBlock = [] | [{
7808
7820
  checkBlockStarts?: boolean;
7809
7821
  excludedTags?: string[];
7810
7822
  ignoreSameLine?: boolean;
7823
+ ignoreSingleLines?: boolean;
7811
7824
  lines?: number;
7812
7825
  }];
7813
7826
  // ----- jsdoc/match-description -----
@@ -12796,6 +12809,119 @@ type SwitchColonSpacing = [] | [{
12796
12809
  before?: boolean;
12797
12810
  after?: boolean;
12798
12811
  }];
12812
+ // ----- tailwindcss-better/enforce-consistent-class-order -----
12813
+ type TailwindcssBetterEnforceConsistentClassOrder = [] | [{
12814
+ callees?: ([] | [string] | [string, string] | [] | [string] | [string, ({
12815
+ match?: "strings";
12816
+ [k: string]: unknown | undefined;
12817
+ } | {
12818
+ match?: "objectKeys";
12819
+ pathPattern?: string;
12820
+ [k: string]: unknown | undefined;
12821
+ } | {
12822
+ match?: "objectValues";
12823
+ pathPattern?: string;
12824
+ [k: string]: unknown | undefined;
12825
+ })[]] | string)[];
12826
+ attributes?: (string | [] | [string] | [string, string] | [] | [string] | [string, ({
12827
+ match?: "strings";
12828
+ [k: string]: unknown | undefined;
12829
+ } | {
12830
+ match?: "objectKeys";
12831
+ pathPattern?: string;
12832
+ [k: string]: unknown | undefined;
12833
+ } | {
12834
+ match?: "objectValues";
12835
+ pathPattern?: string;
12836
+ [k: string]: unknown | undefined;
12837
+ })[]])[];
12838
+ variables?: ([] | [string] | [string, string] | [] | [string] | [string, ({
12839
+ match?: "strings";
12840
+ [k: string]: unknown | undefined;
12841
+ } | {
12842
+ match?: "objectKeys";
12843
+ pathPattern?: string;
12844
+ [k: string]: unknown | undefined;
12845
+ } | {
12846
+ match?: "objectValues";
12847
+ pathPattern?: string;
12848
+ [k: string]: unknown | undefined;
12849
+ })[]] | string)[];
12850
+ tags?: ([] | [string] | [string, string] | [] | [string] | [string, ({
12851
+ match?: "strings";
12852
+ [k: string]: unknown | undefined;
12853
+ } | {
12854
+ match?: "objectKeys";
12855
+ pathPattern?: string;
12856
+ [k: string]: unknown | undefined;
12857
+ } | {
12858
+ match?: "objectValues";
12859
+ pathPattern?: string;
12860
+ [k: string]: unknown | undefined;
12861
+ })[]] | string)[];
12862
+ entryPoint?: string;
12863
+ tailwindConfig?: string;
12864
+ order?: ("asc" | "desc" | "official" | "improved");
12865
+ }];
12866
+ // ----- tailwindcss-better/enforce-consistent-line-wrapping -----
12867
+ type TailwindcssBetterEnforceConsistentLineWrapping = [] | [{
12868
+ callees?: ([] | [string] | [string, string] | [] | [string] | [string, ({
12869
+ match?: "strings";
12870
+ [k: string]: unknown | undefined;
12871
+ } | {
12872
+ match?: "objectKeys";
12873
+ pathPattern?: string;
12874
+ [k: string]: unknown | undefined;
12875
+ } | {
12876
+ match?: "objectValues";
12877
+ pathPattern?: string;
12878
+ [k: string]: unknown | undefined;
12879
+ })[]] | string)[];
12880
+ attributes?: (string | [] | [string] | [string, string] | [] | [string] | [string, ({
12881
+ match?: "strings";
12882
+ [k: string]: unknown | undefined;
12883
+ } | {
12884
+ match?: "objectKeys";
12885
+ pathPattern?: string;
12886
+ [k: string]: unknown | undefined;
12887
+ } | {
12888
+ match?: "objectValues";
12889
+ pathPattern?: string;
12890
+ [k: string]: unknown | undefined;
12891
+ })[]])[];
12892
+ variables?: ([] | [string] | [string, string] | [] | [string] | [string, ({
12893
+ match?: "strings";
12894
+ [k: string]: unknown | undefined;
12895
+ } | {
12896
+ match?: "objectKeys";
12897
+ pathPattern?: string;
12898
+ [k: string]: unknown | undefined;
12899
+ } | {
12900
+ match?: "objectValues";
12901
+ pathPattern?: string;
12902
+ [k: string]: unknown | undefined;
12903
+ })[]] | string)[];
12904
+ tags?: ([] | [string] | [string, string] | [] | [string] | [string, ({
12905
+ match?: "strings";
12906
+ [k: string]: unknown | undefined;
12907
+ } | {
12908
+ match?: "objectKeys";
12909
+ pathPattern?: string;
12910
+ [k: string]: unknown | undefined;
12911
+ } | {
12912
+ match?: "objectValues";
12913
+ pathPattern?: string;
12914
+ [k: string]: unknown | undefined;
12915
+ })[]] | string)[];
12916
+ entryPoint?: string;
12917
+ tailwindConfig?: string;
12918
+ classesPerLine?: number;
12919
+ group?: ("emptyLine" | "never" | "newLine");
12920
+ indent?: ("tab" | number);
12921
+ lineBreakStyle?: ("unix" | "windows");
12922
+ preferSingleLine?: boolean;
12923
+ printWidth?: number;
12924
+ }];
12799
12925
  // ----- tailwindcss-better/enforce-consistent-variable-syntax -----
12800
12926
  type TailwindcssBetterEnforceConsistentVariableSyntax = [] | [{
12801
12927
  callees?: ([] | [string] | [string, string] | [] | [string] | [string, ({
@@ -13062,6 +13188,7 @@ type TailwindcssBetterNoRestrictedClasses = [] | [{
13062
13188
  [k: string]: unknown | undefined;
13063
13189
  })[]] | string)[];
13064
13190
  restrict?: ({
13191
+ fix?: string;
13065
13192
  message?: string;
13066
13193
  pattern: string;
13067
13194
  } | string)[];
package/dist/index.js CHANGED
@@ -1357,11 +1357,9 @@ const tailwindcssBetter = async (options = {}) => {
1357
1357
  {
1358
1358
  name: "zayne/tailwindcss-better/rules",
1359
1359
  rules: {
1360
- "tailwindcss-better/enforce-consistent-variable-syntax": ["warn", { syntax: "parentheses" }],
1361
- "tailwindcss-better/multiline": ["off", {
1362
- indent: 3,
1363
- printWidth: 107
1364
- }],
1360
+ "tailwindcss-better/multiline": "off",
1361
+ "tailwindcss-better/enforce-consistent-line-wrapping": "off",
1362
+ "tailwindcss-better/enforce-consistent-variable-syntax": "warn",
1365
1363
  "tailwindcss-better/no-conflicting-classes": "warn",
1366
1364
  "tailwindcss-better/no-unregistered-classes": "warn",
1367
1365
  ...overrides