@zayne-labs/eslint-config 0.9.1 → 0.9.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/dist/cli/index.js +20 -24
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +858 -311
- package/dist/index.js +62 -47
- package/dist/index.js.map +1 -1
- package/package.json +40 -37
package/dist/cli/index.js
CHANGED
|
@@ -1,20 +1,16 @@
|
|
|
1
1
|
import { defineEnumDeep } from "@zayne-labs/toolkit-type-helpers";
|
|
2
2
|
import process from "node:process";
|
|
3
|
-
import * as p$4 from "@clack/prompts";
|
|
4
|
-
import * as p$3 from "@clack/prompts";
|
|
5
|
-
import * as p$2 from "@clack/prompts";
|
|
6
|
-
import * as p$1 from "@clack/prompts";
|
|
7
3
|
import * as p from "@clack/prompts";
|
|
8
4
|
import c, { green } from "ansis";
|
|
9
5
|
import { cac } from "cac";
|
|
10
6
|
import fs from "node:fs";
|
|
11
7
|
import path from "node:path";
|
|
12
8
|
import fsp from "node:fs/promises";
|
|
13
|
-
import { execSync } from "node:child_process";
|
|
14
9
|
import parse from "parse-gitignore";
|
|
10
|
+
import { execSync } from "node:child_process";
|
|
15
11
|
|
|
16
12
|
//#region package.json
|
|
17
|
-
var version = "0.9.
|
|
13
|
+
var version = "0.9.2";
|
|
18
14
|
|
|
19
15
|
//#endregion
|
|
20
16
|
//#region src/cli/constants.ts
|
|
@@ -128,7 +124,7 @@ async function updateEslintFiles(result) {
|
|
|
128
124
|
const pathFlatConfig = path.join(cwd, configFileName);
|
|
129
125
|
const eslintIgnores = [];
|
|
130
126
|
if (fs.existsSync(pathESLintIgnore)) {
|
|
131
|
-
p
|
|
127
|
+
p.log.step(c.cyan`Migrating existing .eslintignore`);
|
|
132
128
|
const content = await fsp.readFile(pathESLintIgnore, "utf8");
|
|
133
129
|
const parsed = parse(content);
|
|
134
130
|
const globs = parsed.globs();
|
|
@@ -144,13 +140,13 @@ async function updateEslintFiles(result) {
|
|
|
144
140
|
const additionalConfig = [];
|
|
145
141
|
const eslintConfigContent = getEslintConfigContent(mainConfig, additionalConfig);
|
|
146
142
|
await fsp.writeFile(pathFlatConfig, eslintConfigContent);
|
|
147
|
-
p
|
|
143
|
+
p.log.success(c.green`Created ${configFileName}`);
|
|
148
144
|
const files = fs.readdirSync(cwd);
|
|
149
145
|
const legacyConfig = [];
|
|
150
146
|
files.forEach((file) => {
|
|
151
|
-
if (/eslint|prettier/.test(file) &&
|
|
147
|
+
if (/eslint|prettier/.test(file) && !file.includes("eslint.config.")) legacyConfig.push(file);
|
|
152
148
|
});
|
|
153
|
-
if (legacyConfig.length > 0) p
|
|
149
|
+
if (legacyConfig.length > 0) p.note(c.dim(legacyConfig.join(", ")), "You can now remove those files manually");
|
|
154
150
|
}
|
|
155
151
|
|
|
156
152
|
//#endregion
|
|
@@ -174,7 +170,7 @@ const versionsMap = {
|
|
|
174
170
|
async function updatePackageJson(result) {
|
|
175
171
|
const cwd = process.cwd();
|
|
176
172
|
const pathPackageJSON = path.join(cwd, "package.json");
|
|
177
|
-
p
|
|
173
|
+
p.log.step(c.cyan`Bumping @zayne-labs/eslint-config to v${version}`);
|
|
178
174
|
const pkgContent = await fsp.readFile(pathPackageJSON, "utf8");
|
|
179
175
|
const pkg = JSON.parse(pkgContent);
|
|
180
176
|
pkg.devDependencies ??= {};
|
|
@@ -189,9 +185,9 @@ async function updatePackageJson(result) {
|
|
|
189
185
|
addedPackages.push(f);
|
|
190
186
|
});
|
|
191
187
|
}
|
|
192
|
-
if (addedPackages.length > 0) p
|
|
188
|
+
if (addedPackages.length > 0) p.note(c.dim(addedPackages.join(", ")), "Added packages");
|
|
193
189
|
await fsp.writeFile(pathPackageJSON, JSON.stringify(pkg, null, 2));
|
|
194
|
-
p
|
|
190
|
+
p.log.success(c.green`Changes wrote to package.json`);
|
|
195
191
|
}
|
|
196
192
|
|
|
197
193
|
//#endregion
|
|
@@ -204,14 +200,14 @@ async function updateVscodeSettings(result) {
|
|
|
204
200
|
if (!fs.existsSync(dotVscodePath)) await fsp.mkdir(dotVscodePath, { recursive: true });
|
|
205
201
|
if (!fs.existsSync(settingsPath)) {
|
|
206
202
|
await fsp.writeFile(settingsPath, `{${vscodeSettingsString}}\n`, "utf8");
|
|
207
|
-
p
|
|
203
|
+
p.log.success(green`Created .vscode/settings.json`);
|
|
208
204
|
} else {
|
|
209
205
|
let settingsContent = await fsp.readFile(settingsPath, "utf8");
|
|
210
206
|
settingsContent = settingsContent.trim().replace(/\s*\}$/, "");
|
|
211
207
|
settingsContent += settingsContent.endsWith(",") || settingsContent.endsWith("{") ? "" : ",";
|
|
212
208
|
settingsContent += `${vscodeSettingsString}}\n`;
|
|
213
209
|
await fsp.writeFile(settingsPath, settingsContent, "utf8");
|
|
214
|
-
p
|
|
210
|
+
p.log.success(green`Updated .vscode/settings.json`);
|
|
215
211
|
}
|
|
216
212
|
}
|
|
217
213
|
|
|
@@ -222,7 +218,7 @@ async function run(options = {}) {
|
|
|
222
218
|
const argTemplate = options.frameworks?.map((m) => m.trim()).filter(Boolean);
|
|
223
219
|
const argExtra = options.extra?.map((m) => m.trim()).filter(Boolean);
|
|
224
220
|
if (fs.existsSync(path.join(process.cwd(), "eslint.config.js"))) {
|
|
225
|
-
p
|
|
221
|
+
p.log.warn(c.yellow`eslint.config.js already exists, migration wizard exited.`);
|
|
226
222
|
return process.exit(1);
|
|
227
223
|
}
|
|
228
224
|
let result = {
|
|
@@ -232,10 +228,10 @@ async function run(options = {}) {
|
|
|
232
228
|
updateVscodeSettings: true
|
|
233
229
|
};
|
|
234
230
|
if (!argSkipPrompt) {
|
|
235
|
-
result = await p
|
|
231
|
+
result = await p.group({
|
|
236
232
|
uncommittedConfirmed: () => {
|
|
237
233
|
if (isGitClean()) return Promise.resolve(true);
|
|
238
|
-
return p
|
|
234
|
+
return p.confirm({
|
|
239
235
|
initialValue: false,
|
|
240
236
|
message: "There are uncommitted changes in the current repository, are you sure to continue?"
|
|
241
237
|
});
|
|
@@ -244,7 +240,7 @@ async function run(options = {}) {
|
|
|
244
240
|
const isArgTemplateValid = (argTemplate?.length ?? 0) > 0 && (argTemplate ?? []).filter((element) => !frameworks.includes(element)).length === 0;
|
|
245
241
|
if (!results.uncommittedConfirmed || isArgTemplateValid) return;
|
|
246
242
|
const message = argTemplate ? `"${argTemplate}" isn't a valid template. Please choose from below: ` : "Select a framework:";
|
|
247
|
-
return p
|
|
243
|
+
return p.multiselect({
|
|
248
244
|
message: c.reset(message),
|
|
249
245
|
options: frameworkOptions,
|
|
250
246
|
required: false
|
|
@@ -254,7 +250,7 @@ async function run(options = {}) {
|
|
|
254
250
|
const isArgExtraValid = (argExtra?.length ?? 0) > 0 && (argExtra ?? []).filter((element) => !extra.includes(element)).length === 0;
|
|
255
251
|
if (!results.uncommittedConfirmed || isArgExtraValid) return;
|
|
256
252
|
const message = argExtra ? `"${argExtra}" isn't a valid extra util. Please choose from below: ` : "Select a extra utils:";
|
|
257
|
-
return p
|
|
253
|
+
return p.multiselect({
|
|
258
254
|
message: c.reset(message),
|
|
259
255
|
options: extraOptions,
|
|
260
256
|
required: false
|
|
@@ -262,13 +258,13 @@ async function run(options = {}) {
|
|
|
262
258
|
},
|
|
263
259
|
updateVscodeSettings: ({ results }) => {
|
|
264
260
|
if (!results.uncommittedConfirmed) return;
|
|
265
|
-
return p
|
|
261
|
+
return p.confirm({
|
|
266
262
|
initialValue: true,
|
|
267
263
|
message: "Update .vscode/settings.json for better VS Code experience?"
|
|
268
264
|
});
|
|
269
265
|
}
|
|
270
266
|
}, { onCancel: () => {
|
|
271
|
-
p
|
|
267
|
+
p.cancel("Operation cancelled.");
|
|
272
268
|
process.exit(0);
|
|
273
269
|
} });
|
|
274
270
|
if (!result.uncommittedConfirmed) return process.exit(1);
|
|
@@ -276,8 +272,8 @@ async function run(options = {}) {
|
|
|
276
272
|
await updatePackageJson(result);
|
|
277
273
|
await updateEslintFiles(result);
|
|
278
274
|
await updateVscodeSettings(result);
|
|
279
|
-
p
|
|
280
|
-
p
|
|
275
|
+
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`);
|
|
281
277
|
}
|
|
282
278
|
|
|
283
279
|
//#endregion
|
package/dist/cli/index.js.map
CHANGED
|
@@ -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.1\",\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\"@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-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-tailwindcss\": \">=3.17.4\",\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\"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-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-tailwindcss\": {\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.10.1\",\n\t\t\"@eslint-community/eslint-plugin-eslint-comments\": \"4.5.0\",\n\t\t\"@eslint/compat\": \"1.2.9\",\n\t\t\"@eslint/js\": \"9.26.0\",\n\t\t\"@stylistic/eslint-plugin\": \"4.2.0\",\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.0.1\",\n\t\t\"eslint-import-resolver-typescript\": \"4.3.4\",\n\t\t\"eslint-merge-processors\": \"^2.0.0\",\n\t\t\"eslint-plugin-import-x\": \"4.11.1\",\n\t\t\"eslint-plugin-jsdoc\": \"50.6.17\",\n\t\t\"eslint-plugin-jsonc\": \"2.20.0\",\n\t\t\"eslint-plugin-n\": \"17.18.0\",\n\t\t\"eslint-plugin-perfectionist\": \"4.13.0\",\n\t\t\"eslint-plugin-security\": \"3.0.1\",\n\t\t\"eslint-plugin-solid\": \"^0.14.3\",\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.1.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.32.1\",\n\t\t\"yaml-eslint-parser\": \"1.3.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@arethetypeswrong/cli\": \"0.18.1\",\n\t\t\"@changesets/cli\": \"2.29.4\",\n\t\t\"@eslint-react/eslint-plugin\": \"1.49.0\",\n\t\t\"@next/eslint-plugin-next\": \"15.3.2\",\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.74.7\",\n\t\t\"@total-typescript/ts-reset\": \"0.6.1\",\n\t\t\"@types/eslint-plugin-security\": \"3.0.0\",\n\t\t\"@types/eslint-plugin-tailwindcss\": \"3.17.0\",\n\t\t\"@types/node\": \"22.15.18\",\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.26.0\",\n\t\t\"eslint-plugin-astro\": \"1.3.1\",\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.6.0\",\n\t\t\"eslint-plugin-tailwindcss\": \"3.18.0\",\n\t\t\"eslint-plugin-vue\": \"10.1.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.0.0\",\n\t\t\"pkg-pr-new\": \"0.0.49\",\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\": \"3.4.17\",\n\t\t\"tsdown\": \"^0.11.9\",\n\t\t\"tsx\": \"4.19.4\",\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\";\nimport type { PromptResult } from \"../types\";\nimport { getEslintConfigContent } from \"../utils\";\n\n// @ts-expect-error missing types\nimport parse from \"parse-gitignore\";\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) && !/eslint\\.config\\./.test(file)) {\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\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 = argTemplate\n\t\t\t\t\t\t? `\"${argTemplate}\" isn't a valid template. Please choose from below: `\n\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\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 = argExtra\n\t\t\t\t\t\t? `\"${argExtra}\" isn't a valid extra util. Please choose from below: `\n\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":"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"}
|
|
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":"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"}
|