@solvro/config 1.13.6 → 1.13.7-beta.1

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/bin/index.js CHANGED
File without changes
package/dist/cli/index.js CHANGED
@@ -59,13 +59,13 @@ var PackageJson = class {
59
59
  }
60
60
  this.json = json;
61
61
  }
62
- hasPackage(pkg) {
63
- return isPackageListed(pkg);
62
+ hasPackage(package_) {
63
+ return isPackageListed(package_);
64
64
  }
65
- async doesSatisfies(pkg, version) {
65
+ async doesSatisfies(package_, version) {
66
66
  await this.load();
67
67
  assert(this.json !== null);
68
- const packageInfo = await getPackageInfo(pkg);
68
+ const packageInfo = await getPackageInfo(package_);
69
69
  if (packageInfo?.version === void 0) {
70
70
  return false;
71
71
  }
@@ -89,17 +89,21 @@ var PackageJson = class {
89
89
  }
90
90
  async getProjectType() {
91
91
  const isAdonis = await isPackageListed("@adonisjs/core");
92
- const isNext = await isPackageListed("next");
93
- if (isNext && isAdonis) {
92
+ const isReact = await isPackageListed("react");
93
+ const isNestJs = await isPackageListed("@nestjs/core");
94
+ if (isReact && isAdonis) {
94
95
  throw new Error(
95
- "You can't use both Adonis and Next.js in the same project"
96
+ "You can't use both Adonis and React in the same project"
96
97
  );
97
98
  }
99
+ if (isNestJs) {
100
+ return "nestjs";
101
+ }
98
102
  if (isAdonis) {
99
103
  return "adonis";
100
104
  }
101
- if (isNext) {
102
- return "next";
105
+ if (isReact) {
106
+ return "react";
103
107
  }
104
108
  return "node";
105
109
  }
@@ -119,22 +123,22 @@ var PackageJson = class {
119
123
  this.json.scripts[name] = script;
120
124
  await this.save();
121
125
  }
122
- async install(pkg, options) {
123
- const isInstalled = await this.hasPackage(pkg);
126
+ async install(package_, options) {
127
+ const isInstalled = await this.hasPackage(package_);
124
128
  if (!isInstalled) {
125
129
  const spinner2 = p2.spinner();
126
- spinner2.start(`Instalowanie ${pkg}`);
127
- await $$`npm i ${options?.dev === true ? "-D" : ""} ${pkg}@latest`;
128
- spinner2.stop(`${pkg} zainstalowany \u{1F60D}`);
130
+ spinner2.start(`Instalowanie ${package_}`);
131
+ await $$`npm i ${options?.dev === true ? "-D" : ""} ${package_}@latest`;
132
+ spinner2.stop(`${package_} zainstalowany \u{1F60D}`);
129
133
  await this.load();
130
134
  return;
131
135
  }
132
- const info = await getPackageInfo(pkg);
136
+ const info = await getPackageInfo(package_);
133
137
  if (info?.version !== void 0 && options?.minVersion !== void 0 && !semver.satisfies(info.version, options.minVersion) || options?.alwaysUpdate === true) {
134
138
  const spinner2 = p2.spinner();
135
- spinner2.start(`Aktualizowanie ${pkg}`);
136
- await $$`npm i ${options.dev === true ? "-D" : ""} ${pkg}@latest`;
137
- spinner2.stop(`${pkg} zaktualizowany \u{1F60D}`);
139
+ spinner2.start(`Aktualizowanie ${package_}`);
140
+ await $$`npm i ${options.dev === true ? "-D" : ""} ${package_}@latest`;
141
+ spinner2.stop(`${package_} zaktualizowany \u{1F60D}`);
138
142
  await this.load();
139
143
  }
140
144
  }
@@ -203,7 +207,7 @@ var installEslint = async () => {
203
207
  await packageJson3.load();
204
208
  await packageJson3.install("eslint", { dev: true, minVersion: ">=9" });
205
209
  const type = await packageJson3.getProjectType();
206
- if (type === "next") {
210
+ if (type === "react" && await packageJson3.hasPackage("next")) {
207
211
  const is15 = await packageJson3.doesSatisfies("next", ">=15");
208
212
  if (!is15) {
209
213
  p3.cancel(
@@ -219,7 +223,7 @@ var installEslint = async () => {
219
223
  if (eslintConfig !== void 0) {
220
224
  const eslintContent = await fs.readFile(
221
225
  path3.join(root2, eslintConfig),
222
- "utf-8"
226
+ "utf8"
223
227
  );
224
228
  if (eslintContent.includes("export default solvro(")) {
225
229
  p3.note("Eslint jest ju\u017C skonfigurowany. Pomijam.");
@@ -374,8 +378,8 @@ updates:
374
378
  - dependency-name: "@solvro/config"
375
379
  `;
376
380
 
377
- // src/cli/templates/next-ci.ts
378
- var nextCi = ({
381
+ // src/cli/templates/react-ci.ts
382
+ var reactCi = ({
379
383
  nodeVersion,
380
384
  withCommitlint
381
385
  }) => `name: CI
@@ -416,8 +420,8 @@ var packageJson4 = new PackageJson();
416
420
  var installGithubActions = async () => {
417
421
  const root2 = gitRoot();
418
422
  await packageJson4.load();
419
- const ghWorkflowsDir = path4.join(root2, ".github/workflows");
420
- await fs2.mkdir(ghWorkflowsDir, { recursive: true });
423
+ const ghWorkflowsDirectory = path4.join(root2, ".github/workflows");
424
+ await fs2.mkdir(ghWorkflowsDirectory, { recursive: true });
421
425
  const type = await packageJson4.getProjectType();
422
426
  const withCommitlint = await packageJson4.hasPackage("@commitlint/cli");
423
427
  if (type === "adonis") {
@@ -428,21 +432,21 @@ var installGithubActions = async () => {
428
432
  process.exit(1);
429
433
  }
430
434
  await fs2.writeFile(
431
- path4.join(ghWorkflowsDir, "ci.yml"),
435
+ path4.join(ghWorkflowsDirectory, "ci.yml"),
432
436
  adonisCi({
433
437
  nodeVersion: "22",
434
438
  withCommitlint
435
439
  })
436
440
  );
437
441
  await fs2.writeFile(
438
- path4.join(ghWorkflowsDir, "db.yml"),
442
+ path4.join(ghWorkflowsDirectory, "db.yml"),
439
443
  adonisMigrationsCi()
440
444
  );
441
445
  }
442
- if (type === "next") {
446
+ if (type === "react") {
443
447
  await fs2.writeFile(
444
- path4.join(ghWorkflowsDir, "ci.yml"),
445
- nextCi({
448
+ path4.join(ghWorkflowsDirectory, "ci.yml"),
449
+ reactCi({
446
450
  nodeVersion: "22",
447
451
  withCommitlint
448
452
  })
@@ -537,7 +541,6 @@ if (!isGitClean()) {
537
541
  }
538
542
  }
539
543
  var packageJson7 = new PackageJson();
540
- await packageJson7.ensureESM();
541
544
  var projectType = await packageJson7.getProjectType();
542
545
  if (projectType === "adonis") {
543
546
  const isConfirmed = await polishConfirm({
@@ -547,10 +550,11 @@ if (projectType === "adonis") {
547
550
  p6.cancel("Zg\u0142o\u015B b\u0142\u0105d na GitHubie :(, a my spr\xF3bujemy pom\xF3c.");
548
551
  process.exit(1);
549
552
  }
553
+ await packageJson7.ensureESM();
550
554
  }
551
- if (projectType === "next") {
555
+ if (projectType === "react") {
552
556
  const isConfirmed = await polishConfirm({
553
- message: `Wygl\u0105da jakby\u015B u\u017Cywa\u0142 Next.js. Czy to si\u0119 zgadza?`
557
+ message: `Wygl\u0105da jakby\u015B u\u017Cywa\u0142 Reacta. Czy to si\u0119 zgadza?`
554
558
  });
555
559
  if (p6.isCancel(isConfirmed)) {
556
560
  p6.cancel("\u{1F621}");
@@ -560,10 +564,20 @@ if (projectType === "next") {
560
564
  p6.cancel("Zg\u0142o\u015B b\u0142\u0105d na GitHubie :(, a my spr\xF3bujemy pom\xF3c.");
561
565
  process.exit(1);
562
566
  }
567
+ await packageJson7.ensureESM();
568
+ }
569
+ if (projectType === "nestjs") {
570
+ const isConfirmed = await polishConfirm({
571
+ message: `Wygl\u0105da jakby\u015B u\u017Cywa\u0142 NestJsa. Czy to si\u0119 zgadza?`
572
+ });
573
+ if (p6.isCancel(isConfirmed)) {
574
+ p6.cancel("\u{1F621}");
575
+ process.exit(1);
576
+ }
563
577
  }
564
578
  if (projectType === "node") {
565
579
  p6.cancel(
566
- "Nie znaleziono ani Adonisa, ani Next.js. Musisz r\u0119cznie konfigurowa\u0107 projekt."
580
+ "Nie znaleziono ani Adonisa, Reacta, ani NestJsa. Musisz r\u0119cznie konfigurowa\u0107 projekt."
567
581
  );
568
582
  process.exit(1);
569
583
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/$$.ts","../../src/utils/git-root.ts","../../src/utils/polish-confirm.ts","../../src/cli/install-commitlint.ts","../../src/cli/install-husky.ts","../../src/cli/templates/commitlint.ts","../../src/cli/install-eslint.ts","../../src/cli/install-ga.ts","../../src/cli/templates/commit-lint-ci.ts","../../src/cli/templates/adonis-ci.ts","../../src/cli/templates/adonis-ci-migrations.ts","../../src/cli/templates/dependabot.ts","../../src/cli/templates/next-ci.ts","../../src/cli/install-lint-staged.ts","../../src/cli/install-prettier.ts"],"sourcesContent":["import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { isGitClean } from \"../utils/is-git-clean\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\nimport { installCommitLint } from \"./install-commitlint\";\nimport { installEslint } from \"./install-eslint\";\nimport { installGithubActions } from \"./install-ga\";\nimport { installLintStaged } from \"./install-lint-staged\";\nimport { installPrettier } from \"./install-prettier\";\n\np.intro(c.bold(c.bgBlue(\" @solvro/config \")));\n\nif (!isGitClean()) {\n const isConfirmed = await polishConfirm({\n message: `Masz niezapisane zmiany w Git. Czy chcesz kontynuować?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Zapisz zmiany w Git i spróbuj ponownie.\");\n process.exit(1);\n }\n}\n\nconst packageJson = new PackageJson();\n\nawait packageJson.ensureESM();\n\nconst projectType = await packageJson.getProjectType();\n\nif (projectType === \"adonis\") {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał Adonisa. Czy to się zgadza?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Zgłoś błąd na GitHubie :(, a my spróbujemy pomóc.\");\n process.exit(1);\n }\n}\n\nif (projectType === \"next\") {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał Next.js. Czy to się zgadza?`,\n });\n\n if (p.isCancel(isConfirmed)) {\n p.cancel(\"😡\");\n process.exit(1);\n }\n\n if (!isConfirmed) {\n p.cancel(\"Zgłoś błąd na GitHubie :(, a my spróbujemy pomóc.\");\n process.exit(1);\n }\n}\n\nif (projectType === \"node\") {\n p.cancel(\n \"Nie znaleziono ani Adonisa, ani Next.js. Musisz ręcznie konfigurować projekt.\",\n );\n process.exit(1);\n}\n\nconst additionalTools = await p.multiselect({\n message: `Które rzeczy Cię interesują? ${c.gray(\"zaznacz spacją, potwierdź enterem\")}`,\n initialValues: [\"eslint\", \"prettier\", \"gh-action\", \"commitlint\"],\n options: [\n {\n value: \"eslint\",\n label: c.bold(c.blueBright(\"ESLint\")),\n hint: \"sprawdzanie jakości kodu\",\n },\n {\n value: \"prettier\",\n label: c.bold(c.yellowBright(\"Prettier\")),\n hint: \"formatowanie\",\n },\n {\n value: \"gh-action\",\n label: c.bold(\"GitHub Actions\"),\n hint: \"automatyczne testy na Githubie\",\n },\n {\n value: \"commitlint\",\n label: c.bold(\"Commitlint\"),\n hint: \"walidacja treści commitów\",\n },\n ],\n required: false,\n});\n\nif (p.isCancel(additionalTools) || additionalTools.length === 0) {\n p.cancel(\"Nie wybrano żadnych narzędzi.\");\n process.exit(1);\n}\n\nawait packageJson.install(\"@solvro/config\", { dev: true, alwaysUpdate: true });\n\nif (additionalTools.includes(\"eslint\")) {\n await installEslint();\n}\n\nif (additionalTools.includes(\"prettier\")) {\n await installPrettier();\n\n await installLintStaged();\n}\n\nif (additionalTools.includes(\"commitlint\")) {\n await installCommitLint();\n}\n\nif (additionalTools.includes(\"gh-action\")) {\n await installGithubActions();\n}\n","import { execSync } from \"node:child_process\";\n\nexport function isGitClean(): boolean {\n try {\n execSync(\"git diff-index --quiet HEAD --\");\n return true;\n } catch {\n return false;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport { getPackageInfo, isPackageListed, loadPackageJSON } from \"local-pkg\";\nimport assert from \"node:assert\";\nimport { writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport semver from \"semver\";\n\nimport { $$ } from \"./$$\";\nimport { gitRoot } from \"./git-root\";\nimport { polishConfirm } from \"./polish-confirm\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n\n async load() {\n const json = await loadPackageJSON(gitRoot());\n\n if (json === null) {\n p.cancel(\n \"Nie znaleziono package.json. Upewnij się, że jesteś w katalogu projektu.\",\n );\n process.exit(1);\n }\n\n this.json = json;\n }\n\n hasPackage(pkg: string) {\n return isPackageListed(pkg);\n }\n\n async doesSatisfies(pkg: string, version: string) {\n await this.load();\n\n assert(this.json !== null);\n\n const packageInfo = await getPackageInfo(pkg);\n\n if (packageInfo?.version === undefined) {\n return false;\n }\n\n return semver.satisfies(packageInfo.version, version);\n }\n\n async ensureESM() {\n await this.load();\n\n assert(this.json !== null);\n\n if (this.json.type === \"module\") {\n return;\n }\n\n const isConfirmed = await polishConfirm({\n message: `Twój projekt nie używa ESM (brak type: \"module\" w package.json). Czy chcesz to dodać? (Wymagane by kontynuować)`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Zmień projekt na ESM i spróbuj ponownie.\");\n process.exit(1);\n }\n\n this.json.type = \"module\";\n\n await this.save();\n }\n\n async getProjectType() {\n const isAdonis = await isPackageListed(\"@adonisjs/core\");\n const isNext = await isPackageListed(\"next\");\n\n if (isNext && isAdonis) {\n throw new Error(\n \"You can't use both Adonis and Next.js in the same project\",\n );\n }\n\n if (isAdonis) {\n return \"adonis\";\n }\n\n if (isNext) {\n return \"next\";\n }\n\n return \"node\";\n }\n\n async save() {\n await writeFile(\n path.join(gitRoot(), \"package.json\"),\n JSON.stringify(this.json, null, 2),\n );\n }\n\n async addScriptIfNotExists(name: string, script: string) {\n await this.load();\n\n assert(this.json !== null);\n\n if (this.json.scripts?.[name] !== undefined) {\n return;\n }\n\n this.json.scripts = this.json.scripts ?? {};\n this.json.scripts[name] = script;\n\n await this.save();\n }\n\n async install(\n pkg: string,\n options?: { minVersion?: string; dev?: boolean; alwaysUpdate?: boolean },\n ) {\n const isInstalled = await this.hasPackage(pkg);\n\n if (!isInstalled) {\n const spinner = p.spinner();\n spinner.start(`Instalowanie ${pkg}`);\n await $$`npm i ${options?.dev === true ? \"-D\" : \"\"} ${pkg}@latest`;\n spinner.stop(`${pkg} zainstalowany 😍`);\n\n await this.load();\n\n return;\n }\n\n const info = await getPackageInfo(pkg);\n\n if (\n (info?.version !== undefined &&\n options?.minVersion !== undefined &&\n !semver.satisfies(info.version, options.minVersion)) ||\n options?.alwaysUpdate === true\n ) {\n const spinner = p.spinner();\n spinner.start(`Aktualizowanie ${pkg}`);\n await $$`npm i ${options.dev === true ? \"-D\" : \"\"} ${pkg}@latest`;\n spinner.stop(`${pkg} zaktualizowany 😍`);\n\n await this.load();\n }\n }\n}\n","import { $ } from \"execa\";\n\nimport { gitRoot } from \"./git-root\";\n\nexport const $$ = $({\n cwd: gitRoot(),\n});\n","import { execSync } from \"node:child_process\";\n\nexport const gitRoot = () => {\n const root = execSync(\"git rev-parse --show-toplevel\").toString().trim();\n return root;\n};\n","import * as p from \"@clack/prompts\";\n\nexport const polishConfirm = async (props: p.ConfirmOptions) => {\n return p.confirm({\n active: \"Tak\",\n inactive: \"Nie\",\n ...props,\n });\n};\n","import { writeFile } from \"fs/promises\";\nimport path from \"path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\nimport { commitlint } from \"./templates/commitlint\";\n\nconst root = gitRoot();\n\nconst packageJson = new PackageJson();\n\nexport const installCommitLint = async () => {\n await installHusky();\n\n await packageJson.install(\"@commitlint/cli\", { dev: true });\n\n await writeFile(\n path.join(root, \".husky/commit-msg\"),\n 'npx commitlint --edit \"$1\"\\n',\n );\n\n await writeFile(path.join(root, \".commitlintrc.js\"), commitlint());\n};\n","import assert from \"assert\";\n\nimport { $$ } from \"../utils/$$\";\nimport { PackageJson } from \"../utils/package-json\";\n\nconst packageJson = new PackageJson();\n\nexport const installHusky = async () => {\n if (!(await packageJson.hasPackage(\"husky\"))) {\n await packageJson.install(\"husky\", { dev: true });\n await $$`npx husky init`;\n }\n\n await packageJson.load();\n\n assert(packageJson.json !== null);\n\n packageJson.json.scripts = packageJson.json.scripts ?? {};\n packageJson.json.scripts.prepare = `husky || true`;\n\n await packageJson.save();\n};\n","export const commitlint = () => `export default {\n extends: [\"@solvro/config/commitlint\"],\n};\n`;\n","import * as p from \"@clack/prompts\";\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\n\nconst eslintConfigNames = [\n \".eslintrc.js\",\n \".eslintrc.cjs\",\n \".eslintrc.yaml\",\n \".eslintrc.yml\",\n \".eslintrc.json\",\n \".eslintrc\",\n \"eslint.config.js\",\n \"eslint.config.mjs\",\n \"eslint.config.cjs\",\n \"eslint.config.ts\",\n \"eslint.config.mts\",\n \"eslint.config.cts\",\n];\n\nconst packageJson = new PackageJson();\n\nexport const installEslint = async () => {\n const root = gitRoot();\n\n await packageJson.load();\n\n await packageJson.install(\"eslint\", { dev: true, minVersion: \">=9\" });\n\n const type = await packageJson.getProjectType();\n\n if (type === \"next\") {\n const is15 = await packageJson.doesSatisfies(\"next\", \">=15\");\n\n if (!is15) {\n p.cancel(\n \"Next.js musi być w conajmniej wersji 15. Zaktualizuj Next.js i spróbuj ponownie.\\nWięcej informacji tutaj: https://nextjs.org/docs/app/building-your-application/upgrading/version-15\",\n );\n process.exit(1);\n }\n\n await packageJson.install(\"@next/eslint-plugin-next\", { dev: true });\n }\n\n const eslintConfig = eslintConfigNames.find((configName) =>\n existsSync(path.join(root, configName)),\n );\n\n if (eslintConfig !== undefined) {\n const eslintContent = await fs.readFile(\n path.join(root, eslintConfig),\n \"utf-8\",\n );\n\n if (eslintContent.includes(\"export default solvro(\")) {\n p.note(\"Eslint jest już skonfigurowany. Pomijam.\");\n\n return;\n } else {\n const isConfirmed = await polishConfirm({\n message: `Znaleziono plik konfiguracyjny Eslint. Czy chcesz go nadpisać?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Nadpisz plik konfiguracyjny Eslint i spróbuj ponownie.\");\n process.exit(1);\n }\n\n await fs.rm(path.join(root, eslintConfig));\n }\n }\n\n await fs.writeFile(\n path.join(gitRoot(), \"eslint.config.js\"),\n `import { solvro } from \"@solvro/config/eslint\";\n\nexport default solvro();\n`,\n );\n\n p.note(\"Plik konfiguracyjny Eslint został utworzony.\");\n};\n","import * as p from \"@clack/prompts\";\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { adonisCi } from \"./templates/adonis-ci\";\nimport { adonisMigrationsCi } from \"./templates/adonis-ci-migrations\";\nimport { dependabot } from \"./templates/dependabot\";\nimport { nextCi } from \"./templates/next-ci\";\n\nconst packageJson = new PackageJson();\n\nexport const installGithubActions = async () => {\n const root = gitRoot();\n await packageJson.load();\n\n const ghWorkflowsDir = path.join(root, \".github/workflows\");\n await fs.mkdir(ghWorkflowsDir, { recursive: true });\n\n const type = await packageJson.getProjectType();\n\n const withCommitlint = await packageJson.hasPackage(\"@commitlint/cli\");\n\n if (type === \"adonis\") {\n if (!existsSync(path.join(root, \".env.example\"))) {\n p.cancel(\n \"Nie znaleziono pliku .env.example. Upewnij się, że jesteś w katalogu projektu Adonisa.\",\n );\n process.exit(1);\n }\n\n await fs.writeFile(\n path.join(ghWorkflowsDir, \"ci.yml\"),\n adonisCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n\n await fs.writeFile(\n path.join(ghWorkflowsDir, \"db.yml\"),\n adonisMigrationsCi(),\n );\n }\n\n if (type === \"next\") {\n await fs.writeFile(\n path.join(ghWorkflowsDir, \"ci.yml\"),\n nextCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n }\n\n if (!existsSync(path.join(root, \".github/dependabot.yml\"))) {\n await fs.writeFile(path.join(root, \".github/dependabot.yml\"), dependabot());\n }\n\n await packageJson.addScriptIfNotExists(\"format:check\", \"prettier --check .\");\n await packageJson.addScriptIfNotExists(\"lint\", \"eslint . --max-warnings=0\");\n await packageJson.addScriptIfNotExists(\"format\", \"prettier --write .\");\n await packageJson.addScriptIfNotExists(\"typecheck\", \"tsc --noEmit\");\n\n p.note(\"Dodano konfigurację CI i skrypty.\");\n};\n","export const commitLintCi = () => `\n - name: Check commit name\n if: github.event_name == 'pull_request'\n run: npx commitlint --from \\${{ github.event.pull_request.base.sha }} --to \\${{ github.event.pull_request.head.sha }} --verbose\n`;\n","import { commitLintCi } from \"./commit-lint-ci\";\n\nexport const adonisCi = ({\n nodeVersion,\n withCommitlint,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n}) => `name: CI\n\non:\n push:\n branches: [\"main\"]\n pull_request:\n\njobs:\n lint:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout\n uses: actions/checkout@v4\n with:\n fetch-depth: 0\n\n - name: Setup node\n uses: actions/setup-node@v4\n with:\n node-version: ${nodeVersion}\n cache: \"npm\"\n\n - name: Install dependencies\n run: npm ci\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n${withCommitlint ? commitLintCi() : \"\"}\n - name: Run prettier\n run: npm run format:check\n if: always()\n\n - name: Run Lint\n run: npm run lint\n if: always()\n\n - name: Check types\n run: npm run typecheck\n if: always()\n\n - name: Run tests\n run: npm test\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\n","export const adonisMigrationsCi = () => `name: Migration check\n\non:\n pull_request:\n branches: [\"*\"]\n push:\n branches: [\"main\"]\n\njobs:\n migration-check:\n runs-on: ubuntu-latest\n env:\n DB_HOST: 127.0.0.1\n DB_PORT: 5432\n DB_USER: postgres\n DB_PASSWORD: postgres\n DB_DATABASE: postgres\n\n services:\n postgres:\n image: postgres\n env:\n POSTGRES_PASSWORD: postgres\n options: >-\n --health-cmd pg_isready\n --health-interval 10s\n --health-timeout 5s\n --health-retries 5\n ports:\n - 5432:5432\n\n steps:\n - name: Check out repository code\n uses: actions/checkout@v4\n\n - name: Install dependencies\n run: npm ci\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n\n - name: Run AdonisJS migrations\n run: node ace migration:run\n\n - name: Rollback and rerun AdonisJS migrations\n run: node ace migration:refresh\n`;\n","export const dependabot = () => `version: 2\nupdates:\n - package-ecosystem: \"npm\"\n directory: \"/\"\n schedule:\n interval: \"daily\"\n allow:\n - dependency-name: \"@solvro/config\"\n`;\n","import { commitLintCi } from \"./commit-lint-ci\";\n\nexport const nextCi = ({\n nodeVersion,\n withCommitlint,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n}) => `name: CI\n\non:\n push:\n branches: [\"main\"]\n pull_request:\n\njobs:\n lint:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout\n uses: actions/checkout@v4\n with:\n fetch-depth: 0\n\n - name: Setup node\n uses: actions/setup-node@v4\n with:\n node-version: ${nodeVersion}\n cache: 'npm'\n\n - name: Install dependencies\n run: npm ci\n${withCommitlint ? commitLintCi() : \"\"}\n - name: Format check\n run: npm run format:check\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\n","import assert from \"assert\";\nimport { writeFile } from \"fs/promises\";\n\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\n\nconst packageJson = new PackageJson();\n\nexport const installLintStaged = async () => {\n await packageJson.load();\n\n assert(packageJson.json !== null);\n\n await installHusky();\n\n await packageJson.install(\"lint-staged\", { dev: true });\n\n await writeFile(\".husky/pre-commit\", \"npx lint-staged\\n\");\n\n packageJson.json[\"lint-staged\"] = {\n \"*\": \"prettier -w --ignore-unknown\",\n };\n\n await packageJson.save();\n};\n","import * as p from \"@clack/prompts\";\nimport assert from \"node:assert\";\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\n\nconst prettierConfigNames = [\n \".prettierrc.js\",\n \".prettierrc.cjs\",\n \".prettierrc.yaml\",\n \".prettierrc.yml\",\n \".prettierrc.json\",\n \".prettierrc\",\n \"prettier.config.js\",\n \"prettier.config.mjs\",\n \"prettier.config.cjs\",\n \"prettier.config.ts\",\n \"prettier.config.mts\",\n \"prettier.config.cts\",\n];\n\nconst packageJson = new PackageJson();\n\nexport const installPrettier = async () => {\n const root = gitRoot();\n\n await packageJson.load();\n assert(packageJson.json !== null);\n\n await packageJson.install(\"prettier\", { dev: true, minVersion: \">=3\" });\n\n const prettierConfig = prettierConfigNames.find((configName) =>\n existsSync(path.join(root, configName)),\n );\n\n const solvroPrettierPath = \"@solvro/config/prettier\";\n\n if (prettierConfig !== undefined || packageJson.json.prettier !== undefined) {\n if (packageJson.json.prettier === solvroPrettierPath) {\n p.note(\"Konfiguracja Prettiera jest już ustawiona. Pomijam.\");\n return;\n }\n\n const isConfirmed = await polishConfirm({\n message: `Znaleziono konfigurację Prettiera. Czy chcesz ją nadpisać?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Usuń konfiguracje Prettiera i spróbuj ponownie.\");\n process.exit(1);\n }\n\n for (const configName of prettierConfigNames) {\n await fs.rm(path.join(root, configName)).catch(() => null);\n }\n }\n\n packageJson.json.prettier = solvroPrettierPath;\n\n await packageJson.save();\n\n p.note(\"Konfiguracja Prettiera została dodana.\");\n};\n"],"mappings":"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","names":["p","p","execSync","root","spinner","writeFile","path","assert","assert","packageJson","writeFile","path","p","path","packageJson","root","path","p","existsSync","fs","path","packageJson","root","path","existsSync","assert","writeFile","packageJson","assert","writeFile","p","assert","existsSync","fs","path","packageJson","root","assert","existsSync","path","packageJson"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/$$.ts","../../src/utils/git-root.ts","../../src/utils/polish-confirm.ts","../../src/cli/install-commitlint.ts","../../src/cli/install-husky.ts","../../src/cli/templates/commitlint.ts","../../src/cli/install-eslint.ts","../../src/cli/install-ga.ts","../../src/cli/templates/commit-lint-ci.ts","../../src/cli/templates/adonis-ci.ts","../../src/cli/templates/adonis-ci-migrations.ts","../../src/cli/templates/dependabot.ts","../../src/cli/templates/react-ci.ts","../../src/cli/install-lint-staged.ts","../../src/cli/install-prettier.ts"],"sourcesContent":["import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { isGitClean } from \"../utils/is-git-clean\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\nimport { installCommitLint } from \"./install-commitlint\";\nimport { installEslint } from \"./install-eslint\";\nimport { installGithubActions } from \"./install-ga\";\nimport { installLintStaged } from \"./install-lint-staged\";\nimport { installPrettier } from \"./install-prettier\";\n\np.intro(c.bold(c.bgBlue(\" @solvro/config \")));\n\nif (!isGitClean()) {\n const isConfirmed = await polishConfirm({\n message: `Masz niezapisane zmiany w Git. Czy chcesz kontynuować?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Zapisz zmiany w Git i spróbuj ponownie.\");\n process.exit(1);\n }\n}\n\nconst packageJson = new PackageJson();\n\nconst projectType = await packageJson.getProjectType();\n\nif (projectType === \"adonis\") {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał Adonisa. Czy to się zgadza?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Zgłoś błąd na GitHubie :(, a my spróbujemy pomóc.\");\n process.exit(1);\n }\n\n await packageJson.ensureESM();\n}\n\nif (projectType === \"react\") {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał Reacta. Czy to się zgadza?`,\n });\n\n if (p.isCancel(isConfirmed)) {\n p.cancel(\"😡\");\n process.exit(1);\n }\n\n if (!isConfirmed) {\n p.cancel(\"Zgłoś błąd na GitHubie :(, a my spróbujemy pomóc.\");\n process.exit(1);\n }\n\n await packageJson.ensureESM();\n}\n\nif (projectType === \"nestjs\") {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał NestJsa. Czy to się zgadza?`,\n });\n\n if (p.isCancel(isConfirmed)) {\n p.cancel(\"😡\");\n process.exit(1);\n }\n}\n\nif (projectType === \"node\") {\n p.cancel(\n \"Nie znaleziono ani Adonisa, Reacta, ani NestJsa. Musisz ręcznie konfigurować projekt.\",\n );\n process.exit(1);\n}\n\nconst additionalTools = await p.multiselect({\n message: `Które rzeczy Cię interesują? ${c.gray(\"zaznacz spacją, potwierdź enterem\")}`,\n initialValues: [\"eslint\", \"prettier\", \"gh-action\", \"commitlint\"],\n options: [\n {\n value: \"eslint\",\n label: c.bold(c.blueBright(\"ESLint\")),\n hint: \"sprawdzanie jakości kodu\",\n },\n {\n value: \"prettier\",\n label: c.bold(c.yellowBright(\"Prettier\")),\n hint: \"formatowanie\",\n },\n {\n value: \"gh-action\",\n label: c.bold(\"GitHub Actions\"),\n hint: \"automatyczne testy na Githubie\",\n },\n {\n value: \"commitlint\",\n label: c.bold(\"Commitlint\"),\n hint: \"walidacja treści commitów\",\n },\n ],\n required: false,\n});\n\nif (p.isCancel(additionalTools) || additionalTools.length === 0) {\n p.cancel(\"Nie wybrano żadnych narzędzi.\");\n process.exit(1);\n}\n\nawait packageJson.install(\"@solvro/config\", { dev: true, alwaysUpdate: true });\n\nif (additionalTools.includes(\"eslint\")) {\n await installEslint();\n}\n\nif (additionalTools.includes(\"prettier\")) {\n await installPrettier();\n\n await installLintStaged();\n}\n\nif (additionalTools.includes(\"commitlint\")) {\n await installCommitLint();\n}\n\nif (additionalTools.includes(\"gh-action\")) {\n await installGithubActions();\n}\n","import { execSync } from \"node:child_process\";\n\nexport function isGitClean(): boolean {\n try {\n execSync(\"git diff-index --quiet HEAD --\");\n return true;\n } catch {\n return false;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport { getPackageInfo, isPackageListed, loadPackageJSON } from \"local-pkg\";\nimport assert from \"node:assert\";\nimport { writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport semver from \"semver\";\n\nimport { $$ } from \"./$$\";\nimport { gitRoot } from \"./git-root\";\nimport { polishConfirm } from \"./polish-confirm\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n\n async load() {\n const json = await loadPackageJSON(gitRoot());\n\n if (json === null) {\n p.cancel(\n \"Nie znaleziono package.json. Upewnij się, że jesteś w katalogu projektu.\",\n );\n process.exit(1);\n }\n\n this.json = json;\n }\n\n hasPackage(package_: string) {\n return isPackageListed(package_);\n }\n\n async doesSatisfies(package_: string, version: string) {\n await this.load();\n\n assert(this.json !== null);\n\n const packageInfo = await getPackageInfo(package_);\n\n if (packageInfo?.version === undefined) {\n return false;\n }\n\n return semver.satisfies(packageInfo.version, version);\n }\n\n async ensureESM() {\n await this.load();\n\n assert(this.json !== null);\n\n if (this.json.type === \"module\") {\n return;\n }\n\n const isConfirmed = await polishConfirm({\n message: `Twój projekt nie używa ESM (brak type: \"module\" w package.json). Czy chcesz to dodać? (Wymagane by kontynuować)`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Zmień projekt na ESM i spróbuj ponownie.\");\n process.exit(1);\n }\n\n this.json.type = \"module\";\n\n await this.save();\n }\n\n async getProjectType() {\n const isAdonis = await isPackageListed(\"@adonisjs/core\");\n const isReact = await isPackageListed(\"react\");\n const isNestJs = await isPackageListed(\"@nestjs/core\");\n if (isReact && isAdonis) {\n throw new Error(\n \"You can't use both Adonis and React in the same project\",\n );\n }\n\n if (isNestJs) {\n return \"nestjs\";\n }\n\n if (isAdonis) {\n return \"adonis\";\n }\n\n if (isReact) {\n return \"react\";\n }\n\n return \"node\";\n }\n\n async save() {\n await writeFile(\n path.join(gitRoot(), \"package.json\"),\n JSON.stringify(this.json, null, 2),\n );\n }\n\n async addScriptIfNotExists(name: string, script: string) {\n await this.load();\n\n assert(this.json !== null);\n\n if (this.json.scripts?.[name] !== undefined) {\n return;\n }\n\n this.json.scripts = this.json.scripts ?? {};\n this.json.scripts[name] = script;\n\n await this.save();\n }\n\n async install(\n package_: string,\n options?: { minVersion?: string; dev?: boolean; alwaysUpdate?: boolean },\n ) {\n const isInstalled = await this.hasPackage(package_);\n\n if (!isInstalled) {\n const spinner = p.spinner();\n spinner.start(`Instalowanie ${package_}`);\n await $$`npm i ${options?.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n spinner.stop(`${package_} zainstalowany 😍`);\n\n await this.load();\n\n return;\n }\n\n const info = await getPackageInfo(package_);\n\n if (\n (info?.version !== undefined &&\n options?.minVersion !== undefined &&\n !semver.satisfies(info.version, options.minVersion)) ||\n options?.alwaysUpdate === true\n ) {\n const spinner = p.spinner();\n spinner.start(`Aktualizowanie ${package_}`);\n await $$`npm i ${options.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n spinner.stop(`${package_} zaktualizowany 😍`);\n\n await this.load();\n }\n }\n}\n","import { $ } from \"execa\";\n\nimport { gitRoot } from \"./git-root\";\n\nexport const $$ = $({\n cwd: gitRoot(),\n});\n","import { execSync } from \"node:child_process\";\n\nexport const gitRoot = () => {\n const root = execSync(\"git rev-parse --show-toplevel\").toString().trim();\n return root;\n};\n","import * as p from \"@clack/prompts\";\n\nexport const polishConfirm = async (props: p.ConfirmOptions) => {\n return p.confirm({\n active: \"Tak\",\n inactive: \"Nie\",\n ...props,\n });\n};\n","import { writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\nimport { commitlint } from \"./templates/commitlint\";\n\nconst root = gitRoot();\n\nconst packageJson = new PackageJson();\n\nexport const installCommitLint = async () => {\n await installHusky();\n\n await packageJson.install(\"@commitlint/cli\", { dev: true });\n\n await writeFile(\n path.join(root, \".husky/commit-msg\"),\n 'npx commitlint --edit \"$1\"\\n',\n );\n\n await writeFile(path.join(root, \".commitlintrc.js\"), commitlint());\n};\n","import assert from \"assert\";\n\nimport { $$ } from \"../utils/$$\";\nimport { PackageJson } from \"../utils/package-json\";\n\nconst packageJson = new PackageJson();\n\nexport const installHusky = async () => {\n if (!(await packageJson.hasPackage(\"husky\"))) {\n await packageJson.install(\"husky\", { dev: true });\n await $$`npx husky init`;\n }\n\n await packageJson.load();\n\n assert(packageJson.json !== null);\n\n packageJson.json.scripts = packageJson.json.scripts ?? {};\n packageJson.json.scripts.prepare = `husky || true`;\n\n await packageJson.save();\n};\n","export const commitlint = () => `export default {\n extends: [\"@solvro/config/commitlint\"],\n};\n`;\n","import * as p from \"@clack/prompts\";\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\n\nconst eslintConfigNames = [\n \".eslintrc.js\",\n \".eslintrc.cjs\",\n \".eslintrc.yaml\",\n \".eslintrc.yml\",\n \".eslintrc.json\",\n \".eslintrc\",\n \"eslint.config.js\",\n \"eslint.config.mjs\",\n \"eslint.config.cjs\",\n \"eslint.config.ts\",\n \"eslint.config.mts\",\n \"eslint.config.cts\",\n];\n\nconst packageJson = new PackageJson();\n\nexport const installEslint = async () => {\n const root = gitRoot();\n\n await packageJson.load();\n\n await packageJson.install(\"eslint\", { dev: true, minVersion: \">=9\" });\n\n const type = await packageJson.getProjectType();\n\n if (type === \"react\" && (await packageJson.hasPackage(\"next\"))) {\n const is15 = await packageJson.doesSatisfies(\"next\", \">=15\");\n\n if (!is15) {\n p.cancel(\n \"Next.js musi być w conajmniej wersji 15. Zaktualizuj Next.js i spróbuj ponownie.\\nWięcej informacji tutaj: https://nextjs.org/docs/app/building-your-application/upgrading/version-15\",\n );\n process.exit(1);\n }\n\n await packageJson.install(\"@next/eslint-plugin-next\", { dev: true });\n }\n\n const eslintConfig = eslintConfigNames.find((configName) =>\n existsSync(path.join(root, configName)),\n );\n\n if (eslintConfig !== undefined) {\n const eslintContent = await fs.readFile(\n path.join(root, eslintConfig),\n \"utf8\",\n );\n\n if (eslintContent.includes(\"export default solvro(\")) {\n p.note(\"Eslint jest już skonfigurowany. Pomijam.\");\n\n return;\n } else {\n const isConfirmed = await polishConfirm({\n message: `Znaleziono plik konfiguracyjny Eslint. Czy chcesz go nadpisać?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Nadpisz plik konfiguracyjny Eslint i spróbuj ponownie.\");\n process.exit(1);\n }\n\n await fs.rm(path.join(root, eslintConfig));\n }\n }\n\n await fs.writeFile(\n path.join(gitRoot(), \"eslint.config.js\"),\n `import { solvro } from \"@solvro/config/eslint\";\n\nexport default solvro();\n`,\n );\n\n p.note(\"Plik konfiguracyjny Eslint został utworzony.\");\n};\n","import * as p from \"@clack/prompts\";\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { adonisCi } from \"./templates/adonis-ci\";\nimport { adonisMigrationsCi } from \"./templates/adonis-ci-migrations\";\nimport { dependabot } from \"./templates/dependabot\";\nimport { reactCi } from \"./templates/react-ci\";\n\nconst packageJson = new PackageJson();\n\nexport const installGithubActions = async () => {\n const root = gitRoot();\n await packageJson.load();\n\n const ghWorkflowsDirectory = path.join(root, \".github/workflows\");\n await fs.mkdir(ghWorkflowsDirectory, { recursive: true });\n\n const type = await packageJson.getProjectType();\n\n const withCommitlint = await packageJson.hasPackage(\"@commitlint/cli\");\n\n if (type === \"adonis\") {\n if (!existsSync(path.join(root, \".env.example\"))) {\n p.cancel(\n \"Nie znaleziono pliku .env.example. Upewnij się, że jesteś w katalogu projektu Adonisa.\",\n );\n process.exit(1);\n }\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n adonisCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"db.yml\"),\n adonisMigrationsCi(),\n );\n }\n\n if (type === \"react\") {\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n reactCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n }\n\n if (!existsSync(path.join(root, \".github/dependabot.yml\"))) {\n await fs.writeFile(path.join(root, \".github/dependabot.yml\"), dependabot());\n }\n\n await packageJson.addScriptIfNotExists(\"format:check\", \"prettier --check .\");\n await packageJson.addScriptIfNotExists(\"lint\", \"eslint . --max-warnings=0\");\n await packageJson.addScriptIfNotExists(\"format\", \"prettier --write .\");\n await packageJson.addScriptIfNotExists(\"typecheck\", \"tsc --noEmit\");\n\n p.note(\"Dodano konfigurację CI i skrypty.\");\n};\n","export const commitLintCi = () => `\n - name: Check commit name\n if: github.event_name == 'pull_request'\n run: npx commitlint --from \\${{ github.event.pull_request.base.sha }} --to \\${{ github.event.pull_request.head.sha }} --verbose\n`;\n","import { commitLintCi } from \"./commit-lint-ci\";\n\nexport const adonisCi = ({\n nodeVersion,\n withCommitlint,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n}) => `name: CI\n\non:\n push:\n branches: [\"main\"]\n pull_request:\n\njobs:\n lint:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout\n uses: actions/checkout@v4\n with:\n fetch-depth: 0\n\n - name: Setup node\n uses: actions/setup-node@v4\n with:\n node-version: ${nodeVersion}\n cache: \"npm\"\n\n - name: Install dependencies\n run: npm ci\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n${withCommitlint ? commitLintCi() : \"\"}\n - name: Run prettier\n run: npm run format:check\n if: always()\n\n - name: Run Lint\n run: npm run lint\n if: always()\n\n - name: Check types\n run: npm run typecheck\n if: always()\n\n - name: Run tests\n run: npm test\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\n","export const adonisMigrationsCi = () => `name: Migration check\n\non:\n pull_request:\n branches: [\"*\"]\n push:\n branches: [\"main\"]\n\njobs:\n migration-check:\n runs-on: ubuntu-latest\n env:\n DB_HOST: 127.0.0.1\n DB_PORT: 5432\n DB_USER: postgres\n DB_PASSWORD: postgres\n DB_DATABASE: postgres\n\n services:\n postgres:\n image: postgres\n env:\n POSTGRES_PASSWORD: postgres\n options: >-\n --health-cmd pg_isready\n --health-interval 10s\n --health-timeout 5s\n --health-retries 5\n ports:\n - 5432:5432\n\n steps:\n - name: Check out repository code\n uses: actions/checkout@v4\n\n - name: Install dependencies\n run: npm ci\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n\n - name: Run AdonisJS migrations\n run: node ace migration:run\n\n - name: Rollback and rerun AdonisJS migrations\n run: node ace migration:refresh\n`;\n","export const dependabot = () => `version: 2\nupdates:\n - package-ecosystem: \"npm\"\n directory: \"/\"\n schedule:\n interval: \"daily\"\n allow:\n - dependency-name: \"@solvro/config\"\n`;\n","import { commitLintCi } from \"./commit-lint-ci\";\n\nexport const reactCi = ({\n nodeVersion,\n withCommitlint,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n}) => `name: CI\n\non:\n push:\n branches: [\"main\"]\n pull_request:\n\njobs:\n lint:\n runs-on: ubuntu-latest\n steps:\n - name: Checkout\n uses: actions/checkout@v4\n with:\n fetch-depth: 0\n\n - name: Setup node\n uses: actions/setup-node@v4\n with:\n node-version: ${nodeVersion}\n cache: 'npm'\n\n - name: Install dependencies\n run: npm ci\n${withCommitlint ? commitLintCi() : \"\"}\n - name: Format check\n run: npm run format:check\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\n","import assert from \"node:assert\";\nimport { writeFile } from \"node:fs/promises\";\n\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\n\nconst packageJson = new PackageJson();\n\nexport const installLintStaged = async () => {\n await packageJson.load();\n\n assert(packageJson.json !== null);\n\n await installHusky();\n\n await packageJson.install(\"lint-staged\", { dev: true });\n\n await writeFile(\".husky/pre-commit\", \"npx lint-staged\\n\");\n\n packageJson.json[\"lint-staged\"] = {\n \"*\": \"prettier -w --ignore-unknown\",\n };\n\n await packageJson.save();\n};\n","import * as p from \"@clack/prompts\";\nimport assert from \"node:assert\";\nimport { existsSync } from \"node:fs\";\nimport * as fs from \"node:fs/promises\";\nimport path from \"node:path\";\n\nimport { gitRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\n\nconst prettierConfigNames = [\n \".prettierrc.js\",\n \".prettierrc.cjs\",\n \".prettierrc.yaml\",\n \".prettierrc.yml\",\n \".prettierrc.json\",\n \".prettierrc\",\n \"prettier.config.js\",\n \"prettier.config.mjs\",\n \"prettier.config.cjs\",\n \"prettier.config.ts\",\n \"prettier.config.mts\",\n \"prettier.config.cts\",\n];\n\nconst packageJson = new PackageJson();\n\nexport const installPrettier = async () => {\n const root = gitRoot();\n\n await packageJson.load();\n assert(packageJson.json !== null);\n\n await packageJson.install(\"prettier\", { dev: true, minVersion: \">=3\" });\n\n const prettierConfig = prettierConfigNames.find((configName) =>\n existsSync(path.join(root, configName)),\n );\n\n const solvroPrettierPath = \"@solvro/config/prettier\";\n\n if (prettierConfig !== undefined || packageJson.json.prettier !== undefined) {\n if (packageJson.json.prettier === solvroPrettierPath) {\n p.note(\"Konfiguracja Prettiera jest już ustawiona. Pomijam.\");\n return;\n }\n\n const isConfirmed = await polishConfirm({\n message: `Znaleziono konfigurację Prettiera. Czy chcesz ją nadpisać?`,\n });\n\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(\"Usuń konfiguracje Prettiera i spróbuj ponownie.\");\n process.exit(1);\n }\n\n for (const configName of prettierConfigNames) {\n await fs.rm(path.join(root, configName)).catch(() => null);\n }\n }\n\n packageJson.json.prettier = solvroPrettierPath;\n\n await packageJson.save();\n\n p.note(\"Konfiguracja Prettiera została dodana.\");\n};\n"],"mappings":"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","names":["p","p","execSync","root","spinner","writeFile","path","assert","assert","packageJson","writeFile","path","p","path","packageJson","root","path","p","existsSync","fs","path","packageJson","root","path","existsSync","assert","writeFile","packageJson","assert","writeFile","p","assert","existsSync","fs","path","packageJson","root","assert","existsSync","path","packageJson"]}
@@ -1,5 +1,5 @@
1
1
  import { UserConfig } from '@commitlint/types';
2
2
 
3
- declare const Configuration: UserConfig;
3
+ declare const config: UserConfig;
4
4
 
5
- export { Configuration as default };
5
+ export { config as default };
@@ -1,5 +1,5 @@
1
1
  // src/commitlint/index.ts
2
- var Configuration = {
2
+ var config = {
3
3
  extends: ["@commitlint/config-conventional"],
4
4
  helpUrl: "https://docs.solvro.pl/github#nazewnictwo-commit%C3%B3w",
5
5
  rules: {
@@ -35,7 +35,7 @@ var Configuration = {
35
35
  "footer-max-line-length": [0, "always"]
36
36
  }
37
37
  };
38
- var commitlint_default = Configuration;
38
+ var commitlint_default = config;
39
39
  export {
40
40
  commitlint_default as default
41
41
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/commitlint/index.ts"],"sourcesContent":["import { type UserConfig } from \"@commitlint/types\";\n\nconst Configuration: UserConfig = {\n extends: [\"@commitlint/config-conventional\"],\n helpUrl: \"https://docs.solvro.pl/github#nazewnictwo-commit%C3%B3w\",\n rules: {\n \"type-enum\": [\n 2,\n \"always\",\n [\n // A new feature\n \"feat\",\n //A bug fix\n \"fix\",\n // A code change that neither fixes a bug nor adds a feature\n \"refactor\",\n // Boring changes\n \"chore\",\n // Documentation-only changes\n \"docs\",\n // Changes to CI workflows\n \"ci\",\n // Adding missing tests or correcting existing tests\n \"test\",\n \"build\",\n \"release\",\n ],\n ],\n\n // @ts-expect-error ???\n \"body-max-length\": [0, \"always\"],\n // @ts-expect-error ???\n \"body-max-line-length\": [0, \"always\"],\n // @ts-expect-error ???\n \"footer-max-length\": [0, \"always\"],\n // @ts-expect-error ???\n \"footer-max-line-length\": [0, \"always\"],\n },\n};\n\nexport default Configuration;\n"],"mappings":";AAEA,IAAM,gBAA4B;AAAA,EAChC,SAAS,CAAC,iCAAiC;AAAA,EAC3C,SAAS;AAAA,EACT,OAAO;AAAA,IACL,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA;AAAA,QAEE;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,mBAAmB,CAAC,GAAG,QAAQ;AAAA;AAAA,IAE/B,wBAAwB,CAAC,GAAG,QAAQ;AAAA;AAAA,IAEpC,qBAAqB,CAAC,GAAG,QAAQ;AAAA;AAAA,IAEjC,0BAA0B,CAAC,GAAG,QAAQ;AAAA,EACxC;AACF;AAEA,IAAO,qBAAQ;","names":[]}
1
+ {"version":3,"sources":["../../src/commitlint/index.ts"],"sourcesContent":["import type { UserConfig } from \"@commitlint/types\";\n\nconst config: UserConfig = {\n extends: [\"@commitlint/config-conventional\"],\n helpUrl: \"https://docs.solvro.pl/github#nazewnictwo-commit%C3%B3w\",\n rules: {\n \"type-enum\": [\n 2,\n \"always\",\n [\n // A new feature\n \"feat\",\n //A bug fix\n \"fix\",\n // A code change that neither fixes a bug nor adds a feature\n \"refactor\",\n // Boring changes\n \"chore\",\n // Documentation-only changes\n \"docs\",\n // Changes to CI workflows\n \"ci\",\n // Adding missing tests or correcting existing tests\n \"test\",\n \"build\",\n \"release\",\n ],\n ],\n\n // @ts-expect-error ???\n \"body-max-length\": [0, \"always\"],\n // @ts-expect-error ???\n \"body-max-line-length\": [0, \"always\"],\n // @ts-expect-error ???\n \"footer-max-length\": [0, \"always\"],\n // @ts-expect-error ???\n \"footer-max-line-length\": [0, \"always\"],\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default config;\n"],"mappings":";AAEA,IAAM,SAAqB;AAAA,EACzB,SAAS,CAAC,iCAAiC;AAAA,EAC3C,SAAS;AAAA,EACT,OAAO;AAAA,IACL,aAAa;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA;AAAA,QAEE;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAGA,mBAAmB,CAAC,GAAG,QAAQ;AAAA;AAAA,IAE/B,wBAAwB,CAAC,GAAG,QAAQ;AAAA;AAAA,IAEpC,qBAAqB,CAAC,GAAG,QAAQ;AAAA;AAAA,IAEjC,0BAA0B,CAAC,GAAG,QAAQ;AAAA,EACxC;AACF;AAGA,IAAO,qBAAQ;","names":[]}
@@ -140,11 +140,8 @@ function a11y() {
140
140
  return [
141
141
  {
142
142
  files: ["**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}"],
143
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
144
143
  ...jsxA11y.flatConfigs.recommended,
145
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
146
144
  languageOptions: {
147
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
148
145
  ...jsxA11y.flatConfigs.recommended.languageOptions,
149
146
  globals: {
150
147
  ...globals.serviceworker,
@@ -329,23 +326,29 @@ function ignores() {
329
326
  }
330
327
 
331
328
  // src/eslint/configs/imports.ts
332
- function imports(options = { forbidDefaultExport: false }) {
329
+ var forbiddenUiLibraries = [
330
+ "@headlessui/react",
331
+ "@mui/material",
332
+ "@chakra-ui/react",
333
+ "@chakra-ui/core",
334
+ "@nextui-org/react",
335
+ "react-bootstrap",
336
+ "antd"
337
+ ];
338
+ function imports({
339
+ forbidDefaultExport = true
340
+ } = {}) {
333
341
  const config = [
334
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
335
342
  default4.flatConfigs.typescript,
336
343
  {
337
344
  name: "solvro/imports/rules",
338
345
  plugins: {
339
- antfu: default3,
340
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
341
- import: default4
346
+ antfu: default3
342
347
  },
343
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
344
348
  rules: {
345
349
  "antfu/import-dedupe": "error",
346
350
  "antfu/no-import-dist": "error",
347
351
  "antfu/no-import-node-modules-by-path": "error",
348
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
349
352
  ...default4.flatConfigs.recommended.rules,
350
353
  "import/no-dynamic-require": "warn",
351
354
  "import/no-unresolved": "off",
@@ -357,14 +360,18 @@ function imports(options = { forbidDefaultExport: false }) {
357
360
  {
358
361
  name: "axios",
359
362
  message: "Please use fetch instead"
360
- }
363
+ },
364
+ ...forbiddenUiLibraries.map((library) => ({
365
+ name: library,
366
+ message: `Please use ui.shadcn.com components instead.`
367
+ }))
361
368
  ]
362
369
  }
363
370
  ]
364
371
  }
365
372
  }
366
373
  ];
367
- if (options.forbidDefaultExport) {
374
+ if (forbidDefaultExport) {
368
375
  config.push(
369
376
  {
370
377
  rules: { "import/no-default-export": "error" }
@@ -472,6 +479,7 @@ function javascript() {
472
479
  "no-func-assign": "error",
473
480
  "no-global-assign": "error",
474
481
  "no-implied-eval": "error",
482
+ "no-implicit-coercion": "error",
475
483
  "no-import-assign": "error",
476
484
  "no-invalid-regexp": "error",
477
485
  "no-irregular-whitespace": "error",
@@ -670,36 +678,24 @@ import pluginReact from "eslint-plugin-react";
670
678
  import pluginReactHooks from "eslint-plugin-react-hooks";
671
679
  import { isPackageExists } from "local-pkg";
672
680
  var nextJsPackages = ["next"];
673
- var forbiddenLibraries = [
674
- "@headlessui/react",
675
- "@mui/material",
676
- "@chakra-ui/react",
677
- "@chakra-ui/core",
678
- "@nextui-org/react",
679
- "react-bootstrap",
680
- "antd"
681
- ];
682
681
  async function react() {
683
682
  const isUsingNext = nextJsPackages.some((index) => isPackageExists(index));
684
- const nextjsConfig2 = [];
683
+ const nextjsConfig = [];
685
684
  if (isUsingNext) {
686
685
  const nextPlugin = await import("@next/eslint-plugin-next").then(
687
- // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access
688
686
  (d) => d.default
689
687
  );
690
- nextjsConfig2.push(
688
+ nextjsConfig.push(
691
689
  {
692
690
  name: "solvro/next/setup",
693
691
  plugins: {
694
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
695
692
  "@next/next": nextPlugin
696
693
  },
697
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access
698
694
  rules: nextPlugin.configs.recommended.rules
699
695
  },
700
696
  {
701
697
  files: [
702
- "**/app/**/{page,loading,layout,template,error,not-found,unauthorized,forbidden,default}.{js,jsx,ts,tsx}",
698
+ "**/app/**/{page,loading,layout,template,error,not-found,unauthorized,forbidden,default,robots,sitemap}.{js,jsx,ts,tsx}",
703
699
  "**/pages/**/*.{js,jsx,ts,tsx}"
704
700
  ],
705
701
  name: "solvro/next/pages",
@@ -714,11 +710,10 @@ async function react() {
714
710
  name: "solvro/react/setup",
715
711
  plugins: {
716
712
  react: pluginReact,
717
- // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
718
713
  "react-hooks": pluginReactHooks
719
714
  }
720
715
  },
721
- ...nextjsConfig2,
716
+ ...nextjsConfig,
722
717
  {
723
718
  files: ["**/*.{js,jsx,mjs,cjs,ts,tsx}"],
724
719
  languageOptions: {
@@ -757,16 +752,7 @@ async function react() {
757
752
  allowDestructuredState: true
758
753
  }
759
754
  ],
760
- "react/no-array-index-key": "warn",
761
- "@typescript-eslint/no-restricted-imports": [
762
- "error",
763
- {
764
- paths: forbiddenLibraries.map((library) => ({
765
- name: library,
766
- message: `Please use ui.shadcn.com components instead.`
767
- }))
768
- }
769
- ]
755
+ "react/no-array-index-key": "warn"
770
756
  }
771
757
  },
772
758
  ...pluginQuery.configs["flat/recommended"],
@@ -803,6 +789,8 @@ function typescriptRelaxed() {
803
789
  checksVoidReturn: false
804
790
  }
805
791
  ],
792
+ "no-useless-constructor": "off",
793
+ "@typescript-eslint/no-useless-constructor": "error",
806
794
  "unused-imports/no-unused-vars": "off",
807
795
  "@typescript-eslint/no-unused-vars": [
808
796
  "error",
@@ -991,7 +979,11 @@ function unicorn() {
991
979
  props: false,
992
980
  prop: false,
993
981
  ref: false
994
- }
982
+ },
983
+ allowList: {
984
+ e2e: true
985
+ },
986
+ ignore: [String.raw`e2e`]
995
987
  }
996
988
  ]
997
989
  }
@@ -1031,7 +1023,35 @@ var adonisConfig = [
1031
1023
  }
1032
1024
  }
1033
1025
  ];
1034
- var nextjsConfig = async () => [
1026
+ var nestjsConfig = [
1027
+ ...node(),
1028
+ ...unicorn(),
1029
+ ...typescriptStrict(),
1030
+ ...imports({ forbidDefaultExport: true }),
1031
+ {
1032
+ rules: {
1033
+ "no-implicit-coercion": [
1034
+ "error",
1035
+ {
1036
+ allow: ["+"]
1037
+ }
1038
+ ],
1039
+ "unicorn/prefer-top-level-await": "off"
1040
+ }
1041
+ },
1042
+ {
1043
+ rules: {
1044
+ "@typescript-eslint/no-extraneous-class": [
1045
+ "error",
1046
+ {
1047
+ allowEmpty: true
1048
+ }
1049
+ ]
1050
+ },
1051
+ files: ["**/*.module.ts"]
1052
+ }
1053
+ ];
1054
+ var reactConfig = async () => [
1035
1055
  ...a11y(),
1036
1056
  ...unicorn(),
1037
1057
  ...typescriptStrict(),
@@ -1048,18 +1068,20 @@ var configs = [
1048
1068
  var defaultOverrides = [...ignores(), ...formatters(), ...disables()];
1049
1069
  var solvro = async (...overrides) => {
1050
1070
  const isAdonis = await isPackageListed("@adonisjs/core");
1051
- const isNext = await isPackageListed("next");
1052
- if (isNext && isAdonis) {
1053
- throw new Error(
1054
- "You can't use both Adonis and Next.js in the same project"
1055
- );
1071
+ const isReact = await isPackageListed("react");
1072
+ const isNestJs = await isPackageListed("@nestjs/core");
1073
+ if (isReact && isAdonis) {
1074
+ throw new Error("You can't use both Adonis and React in the same project");
1056
1075
  }
1057
1076
  const newConfig = [];
1058
1077
  if (isAdonis) {
1059
1078
  newConfig.push(...adonisConfig);
1060
1079
  }
1061
- if (isNext) {
1062
- newConfig.push(...await nextjsConfig());
1080
+ if (isNestJs) {
1081
+ newConfig.push(...nestjsConfig);
1082
+ }
1083
+ if (isReact) {
1084
+ newConfig.push(...await reactConfig());
1063
1085
  }
1064
1086
  const tsConfigPath = findUpSync2("tsconfig.json", {
1065
1087
  cwd: process.cwd()
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/eslint-config-flat-gitignore/dist/index.mjs","../../node_modules/@eslint/compat/dist/esm/index.js","../../src/eslint/index.ts","../../src/eslint/configs/a11y.ts","../../src/eslint/plugins.ts","../../src/eslint/configs/comments.ts","../../src/eslint/configs/disables.ts","../../src/eslint/globs.ts","../../src/eslint/configs/formatters.ts","../../src/eslint/configs/ignores.ts","../../src/eslint/configs/imports.ts","../../src/eslint/configs/javascript.ts","../../src/eslint/configs/jsdoc.ts","../../src/eslint/configs/node.ts","../../src/eslint/configs/react.ts","../../src/eslint/configs/typescript-relaxed.ts","../../src/eslint/configs/typescript-strict.ts","../../src/eslint/configs/unicorn.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path, { join, resolve, relative, dirname } from 'node:path';\nimport process from 'node:process';\nimport { convertIgnorePatternToMinimatch } from '@eslint/compat';\nimport 'node:fs/promises';\nimport { fileURLToPath } from 'node:url';\n\nfunction toArray(array) {\n array = array ?? [];\n return Array.isArray(array) ? array : [array];\n}\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nfunction findUpSync(name, {\n\tcwd = process.cwd(),\n\ttype = 'file',\n\tstopAt,\n} = {}) {\n\tlet directory = path.resolve(toPath(cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tstopAt = path.resolve(directory, toPath(stopAt) ?? root);\n\n\twhile (directory && directory !== stopAt && directory !== root) {\n\t\tconst filePath = path.isAbsolute(name) ? name : path.join(directory, name);\n\n\t\ttry {\n\t\t\tconst stats = fs.statSync(filePath, {throwIfNoEntry: false});\n\t\t\tif ((type === 'file' && stats?.isFile()) || (type === 'directory' && stats?.isDirectory())) {\n\t\t\t\treturn filePath;\n\t\t\t}\n\t\t} catch {}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n}\n\nconst GITIGNORE = \".gitignore\";\nconst GITMODULES = \".gitmodules\";\nfunction ignore(options = {}) {\n const ignores = [];\n const {\n cwd = process.cwd(),\n root = false,\n files: _files = root ? GITIGNORE : findUpSync(GITIGNORE, { cwd }) || [],\n filesGitModules: _filesGitModules = root ? fs.existsSync(join(cwd, GITMODULES)) ? GITMODULES : [] : findUpSync(GITMODULES, { cwd }) || [],\n strict = true\n } = options;\n const files = toArray(_files).map((file) => resolve(cwd, file));\n const filesGitModules = toArray(_filesGitModules).map((file) => resolve(cwd, file));\n for (const file of files) {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf8\");\n } catch (error) {\n if (strict)\n throw error;\n continue;\n }\n const relativePath = relative(cwd, dirname(file)).replaceAll(\"\\\\\", \"/\");\n const globs = content.split(/\\r?\\n/u).filter((line) => line && !line.startsWith(\"#\")).map((line) => convertIgnorePatternToMinimatch(line)).map((glob) => relativeMinimatch(glob, relativePath, cwd)).filter((glob) => glob !== null);\n ignores.push(...globs);\n }\n for (const file of filesGitModules) {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf8\");\n } catch (error) {\n if (strict)\n throw error;\n continue;\n }\n const dirs = parseGitSubmodules(content);\n ignores.push(...dirs.map((dir) => `${dir}/**`));\n }\n if (strict && files.length === 0)\n throw new Error(\"No .gitignore file found\");\n return {\n name: options.name || \"gitignore\",\n ignores\n };\n}\nfunction relativeMinimatch(pattern, relativePath, cwd) {\n if ([\"\", \".\", \"/\"].includes(relativePath))\n return pattern;\n const negated = pattern.startsWith(\"!\") ? \"!\" : \"\";\n let cleanPattern = negated ? pattern.slice(1) : pattern;\n if (!relativePath.endsWith(\"/\"))\n relativePath = `${relativePath}/`;\n const isParent = relativePath.startsWith(\"..\");\n if (!isParent)\n return `${negated}${relativePath}${cleanPattern}`;\n if (!relativePath.match(/^(\\.\\.\\/)+$/))\n throw new Error(\"The ignore file location should be either a parent or child directory\");\n if (cleanPattern.startsWith(\"**\"))\n return pattern;\n const parents = relative(resolve(cwd, relativePath), cwd).split(/[/\\\\]/);\n while (parents.length && cleanPattern.startsWith(`${parents[0]}/`)) {\n cleanPattern = cleanPattern.slice(parents[0].length + 1);\n parents.shift();\n }\n if (cleanPattern.startsWith(\"**\"))\n return `${negated}${cleanPattern}`;\n if (parents.length === 0)\n return `${negated}${cleanPattern}`;\n return null;\n}\nfunction parseGitSubmodules(content) {\n return content.split(/\\r?\\n/u).map((line) => line.match(/path\\s*=\\s*(.+)/u)).filter((match) => match !== null).map((match) => match[1].trim());\n}\n\nexport { ignore as default };\n","// @ts-self-types=\"./index.d.ts\"\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/**\n * @filedescription Functions to fix up rules to provide missing methods on the `context` object.\n * @author Nicholas C. Zakas\n */\n\n//-----------------------------------------------------------------------------\n// Types\n//-----------------------------------------------------------------------------\n\n/** @typedef {import(\"eslint\").ESLint.Plugin} FixupPluginDefinition */\n/** @typedef {import(\"eslint\").Rule.RuleModule} FixupRuleDefinition */\n/** @typedef {FixupRuleDefinition[\"create\"]} FixupLegacyRuleDefinition */\n/** @typedef {import(\"eslint\").Linter.Config} FixupConfig */\n/** @typedef {Array<FixupConfig>} FixupConfigArray */\n\n//-----------------------------------------------------------------------------\n// Data\n//-----------------------------------------------------------------------------\n\n/**\n * The removed methods from the `context` object that need to be added back.\n * The keys are the name of the method on the `context` object and the values\n * are the name of the method on the `sourceCode` object.\n * @type {Map<string, string>}\n */\nconst removedMethodNames = new Map([\n\t[\"getSource\", \"getText\"],\n\t[\"getSourceLines\", \"getLines\"],\n\t[\"getAllComments\", \"getAllComments\"],\n\t[\"getDeclaredVariables\", \"getDeclaredVariables\"],\n\t[\"getNodeByRangeIndex\", \"getNodeByRangeIndex\"],\n\t[\"getCommentsBefore\", \"getCommentsBefore\"],\n\t[\"getCommentsAfter\", \"getCommentsAfter\"],\n\t[\"getCommentsInside\", \"getCommentsInside\"],\n\t[\"getJSDocComment\", \"getJSDocComment\"],\n\t[\"getFirstToken\", \"getFirstToken\"],\n\t[\"getFirstTokens\", \"getFirstTokens\"],\n\t[\"getLastToken\", \"getLastToken\"],\n\t[\"getLastTokens\", \"getLastTokens\"],\n\t[\"getTokenAfter\", \"getTokenAfter\"],\n\t[\"getTokenBefore\", \"getTokenBefore\"],\n\t[\"getTokenByRangeStart\", \"getTokenByRangeStart\"],\n\t[\"getTokens\", \"getTokens\"],\n\t[\"getTokensAfter\", \"getTokensAfter\"],\n\t[\"getTokensBefore\", \"getTokensBefore\"],\n\t[\"getTokensBetween\", \"getTokensBetween\"],\n]);\n\n/**\n * Tracks the original rule definition and the fixed-up rule definition.\n * @type {WeakMap<FixupRuleDefinition|FixupLegacyRuleDefinition,FixupRuleDefinition>}\n */\nconst fixedUpRuleReplacements = new WeakMap();\n\n/**\n * Tracks all of the fixed up rule definitions so we don't duplicate effort.\n * @type {WeakSet<FixupRuleDefinition>}\n */\nconst fixedUpRules = new WeakSet();\n\n/**\n * Tracks the original plugin definition and the fixed-up plugin definition.\n * @type {WeakMap<FixupPluginDefinition,FixupPluginDefinition>}\n */\nconst fixedUpPluginReplacements = new WeakMap();\n\n/**\n * Tracks all of the fixed up plugin definitions so we don't duplicate effort.\n * @type {WeakSet<FixupPluginDefinition>}\n */\nconst fixedUpPlugins = new WeakSet();\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\n/**\n * Takes the given rule and creates a new rule with the `create()` method wrapped\n * to provide the missing methods on the `context` object.\n * @param {FixupRuleDefinition|FixupLegacyRuleDefinition} ruleDefinition The rule to fix up.\n * @returns {FixupRuleDefinition} The fixed-up rule.\n */\nfunction fixupRule(ruleDefinition) {\n\t// first check if we've already fixed up this rule\n\tif (fixedUpRuleReplacements.has(ruleDefinition)) {\n\t\treturn fixedUpRuleReplacements.get(ruleDefinition);\n\t}\n\n\tconst isLegacyRule = typeof ruleDefinition === \"function\";\n\n\t// check to see if this rule definition has already been fixed up\n\tif (!isLegacyRule && fixedUpRules.has(ruleDefinition)) {\n\t\treturn ruleDefinition;\n\t}\n\n\tconst originalCreate = isLegacyRule\n\t\t? ruleDefinition\n\t\t: ruleDefinition.create.bind(ruleDefinition);\n\n\tfunction ruleCreate(context) {\n\t\t// if getScope is already there then no need to create old methods\n\t\tif (\"getScope\" in context) {\n\t\t\treturn originalCreate(context);\n\t\t}\n\n\t\tconst sourceCode = context.sourceCode;\n\t\tlet currentNode = sourceCode.ast;\n\n\t\tconst newContext = Object.assign(Object.create(context), {\n\t\t\tparserServices: sourceCode.parserServices,\n\n\t\t\t/*\n\t\t\t * The following methods rely on the current node in the traversal,\n\t\t\t * so we need to add them manually.\n\t\t\t */\n\t\t\tgetScope() {\n\t\t\t\treturn sourceCode.getScope(currentNode);\n\t\t\t},\n\n\t\t\tgetAncestors() {\n\t\t\t\treturn sourceCode.getAncestors(currentNode);\n\t\t\t},\n\n\t\t\tmarkVariableAsUsed(variable) {\n\t\t\t\tsourceCode.markVariableAsUsed(variable, currentNode);\n\t\t\t},\n\t\t});\n\n\t\t// add passthrough methods\n\t\tfor (const [\n\t\t\tcontextMethodName,\n\t\t\tsourceCodeMethodName,\n\t\t] of removedMethodNames) {\n\t\t\tnewContext[contextMethodName] =\n\t\t\t\tsourceCode[sourceCodeMethodName].bind(sourceCode);\n\t\t}\n\n\t\t// freeze just like the original context\n\t\tObject.freeze(newContext);\n\n\t\t/*\n\t\t * Create the visitor object using the original create() method.\n\t\t * This is necessary to ensure that the visitor object is created\n\t\t * with the correct context.\n\t\t */\n\t\tconst visitor = originalCreate(newContext);\n\n\t\t/*\n\t\t * Wrap each method in the visitor object to update the currentNode\n\t\t * before calling the original method. This is necessary because the\n\t\t * methods like `getScope()` need to know the current node.\n\t\t */\n\t\tfor (const [methodName, method] of Object.entries(visitor)) {\n\t\t\t/*\n\t\t\t * Node is the second argument to most code path methods,\n\t\t\t * and the third argument for onCodePathSegmentLoop.\n\t\t\t */\n\t\t\tif (methodName.startsWith(\"on\")) {\n\t\t\t\t// eslint-disable-next-line no-loop-func -- intentionally updating shared `currentNode` variable\n\t\t\t\tvisitor[methodName] = (...args) => {\n\t\t\t\t\tcurrentNode =\n\t\t\t\t\t\targs[methodName === \"onCodePathSegmentLoop\" ? 2 : 1];\n\n\t\t\t\t\treturn method.call(visitor, ...args);\n\t\t\t\t};\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func -- intentionally updating shared `currentNode` variable\n\t\t\tvisitor[methodName] = (...args) => {\n\t\t\t\tcurrentNode = args[0];\n\n\t\t\t\treturn method.call(visitor, ...args);\n\t\t\t};\n\t\t}\n\n\t\treturn visitor;\n\t}\n\n\tconst newRuleDefinition = {\n\t\t...(isLegacyRule ? undefined : ruleDefinition),\n\t\tcreate: ruleCreate,\n\t};\n\n\t// copy `schema` property of function-style rule or top-level `schema` property of object-style rule into `meta` object\n\t// @ts-ignore -- top-level `schema` property was not offically supported for object-style rules so it doesn't exist in types\n\tconst { schema } = ruleDefinition;\n\tif (schema) {\n\t\tif (!newRuleDefinition.meta) {\n\t\t\tnewRuleDefinition.meta = { schema };\n\t\t} else {\n\t\t\tnewRuleDefinition.meta = {\n\t\t\t\t...newRuleDefinition.meta,\n\t\t\t\t// top-level `schema` had precedence over `meta.schema` so it's okay to overwrite `meta.schema` if it exists\n\t\t\t\tschema,\n\t\t\t};\n\t\t}\n\t}\n\n\t// cache the fixed up rule\n\tfixedUpRuleReplacements.set(ruleDefinition, newRuleDefinition);\n\tfixedUpRules.add(newRuleDefinition);\n\n\treturn newRuleDefinition;\n}\n\n/**\n * Takes the given plugin and creates a new plugin with all of the rules wrapped\n * to provide the missing methods on the `context` object.\n * @param {FixupPluginDefinition} plugin The plugin to fix up.\n * @returns {FixupPluginDefinition} The fixed-up plugin.\n */\nfunction fixupPluginRules(plugin) {\n\t// first check if we've already fixed up this plugin\n\tif (fixedUpPluginReplacements.has(plugin)) {\n\t\treturn fixedUpPluginReplacements.get(plugin);\n\t}\n\n\t/*\n\t * If the plugin has already been fixed up, or if the plugin\n\t * doesn't have any rules, we can just return it.\n\t */\n\tif (fixedUpPlugins.has(plugin) || !plugin.rules) {\n\t\treturn plugin;\n\t}\n\n\tconst newPlugin = {\n\t\t...plugin,\n\t\trules: Object.fromEntries(\n\t\t\tObject.entries(plugin.rules).map(([ruleId, ruleDefinition]) => [\n\t\t\t\truleId,\n\t\t\t\tfixupRule(ruleDefinition),\n\t\t\t]),\n\t\t),\n\t};\n\n\t// cache the fixed up plugin\n\tfixedUpPluginReplacements.set(plugin, newPlugin);\n\tfixedUpPlugins.add(newPlugin);\n\n\treturn newPlugin;\n}\n\n/**\n * Takes the given configuration and creates a new configuration with all of the\n * rules wrapped to provide the missing methods on the `context` object.\n * @param {FixupConfigArray|FixupConfig} config The configuration to fix up.\n * @returns {FixupConfigArray} The fixed-up configuration.\n */\nfunction fixupConfigRules(config) {\n\tconst configs = Array.isArray(config) ? config : [config];\n\n\treturn configs.map(configItem => {\n\t\tif (!configItem.plugins) {\n\t\t\treturn configItem;\n\t\t}\n\n\t\tconst newPlugins = Object.fromEntries(\n\t\t\tObject.entries(configItem.plugins).map(([pluginName, plugin]) => [\n\t\t\t\tpluginName,\n\t\t\t\tfixupPluginRules(plugin),\n\t\t\t]),\n\t\t);\n\n\t\treturn {\n\t\t\t...configItem,\n\t\t\tplugins: newPlugins,\n\t\t};\n\t});\n}\n\n/**\n * @fileoverview Ignore file utilities for the compat package.\n * @author Nicholas C. Zakas\n */\n\n\n//-----------------------------------------------------------------------------\n// Types\n//-----------------------------------------------------------------------------\n\n/** @typedef {import(\"eslint\").Linter.Config} FlatConfig */\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\n/**\n * Converts an ESLint ignore pattern to a minimatch pattern.\n * @param {string} pattern The .eslintignore or .gitignore pattern to convert.\n * @returns {string} The converted pattern.\n */\nfunction convertIgnorePatternToMinimatch(pattern) {\n\tconst isNegated = pattern.startsWith(\"!\");\n\tconst negatedPrefix = isNegated ? \"!\" : \"\";\n\tconst patternToTest = (isNegated ? pattern.slice(1) : pattern).trimEnd();\n\n\t// special cases\n\tif ([\"\", \"**\", \"/**\", \"**/\"].includes(patternToTest)) {\n\t\treturn `${negatedPrefix}${patternToTest}`;\n\t}\n\n\tconst firstIndexOfSlash = patternToTest.indexOf(\"/\");\n\n\tconst matchEverywherePrefix =\n\t\tfirstIndexOfSlash < 0 || firstIndexOfSlash === patternToTest.length - 1\n\t\t\t? \"**/\"\n\t\t\t: \"\";\n\n\tconst patternWithoutLeadingSlash =\n\t\tfirstIndexOfSlash === 0 ? patternToTest.slice(1) : patternToTest;\n\n\t/*\n\t * Escape `{` and `(` because in gitignore patterns they are just\n\t * literal characters without any specific syntactic meaning,\n\t * while in minimatch patterns they can form brace expansion or extglob syntax.\n\t *\n\t * For example, gitignore pattern `src/{a,b}.js` ignores file `src/{a,b}.js`.\n\t * But, the same minimatch pattern `src/{a,b}.js` ignores files `src/a.js` and `src/b.js`.\n\t * Minimatch pattern `src/\\{a,b}.js` is equivalent to gitignore pattern `src/{a,b}.js`.\n\t */\n\tconst escapedPatternWithoutLeadingSlash =\n\t\tpatternWithoutLeadingSlash.replaceAll(\n\t\t\t/(?=((?:\\\\.|[^{(])*))\\1([{(])/guy,\n\t\t\t\"$1\\\\$2\",\n\t\t);\n\n\tconst matchInsideSuffix = patternToTest.endsWith(\"/**\") ? \"/*\" : \"\";\n\n\treturn `${negatedPrefix}${matchEverywherePrefix}${escapedPatternWithoutLeadingSlash}${matchInsideSuffix}`;\n}\n\n/**\n * Reads an ignore file and returns an object with the ignore patterns.\n * @param {string} ignoreFilePath The absolute path to the ignore file.\n * @returns {FlatConfig} An object with an `ignores` property that is an array of ignore patterns.\n * @throws {Error} If the ignore file path is not an absolute path.\n */\nfunction includeIgnoreFile(ignoreFilePath) {\n\tif (!path.isAbsolute(ignoreFilePath)) {\n\t\tthrow new Error(\"The ignore file location must be an absolute path.\");\n\t}\n\n\tconst ignoreFile = fs.readFileSync(ignoreFilePath, \"utf8\");\n\tconst lines = ignoreFile.split(/\\r?\\n/u);\n\n\treturn {\n\t\tname: \"Imported .gitignore patterns\",\n\t\tignores: lines\n\t\t\t.map(line => line.trim())\n\t\t\t.filter(line => line && !line.startsWith(\"#\"))\n\t\t\t.map(convertIgnorePatternToMinimatch),\n\t};\n}\n\nexport { convertIgnorePatternToMinimatch, fixupConfigRules, fixupPluginRules, fixupRule, includeIgnoreFile };\n","import gitignore from \"eslint-config-flat-gitignore\";\nimport { findUpSync } from \"find-up-simple\";\nimport { isPackageListed } from \"local-pkg\";\nimport path from \"node:path\";\nimport tseslint from \"typescript-eslint\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { configApp } from \"@adonisjs/eslint-config\";\n\nimport { a11y } from \"./configs/a11y\";\nimport { comments } from \"./configs/comments\";\nimport { disables } from \"./configs/disables\";\nimport { formatters } from \"./configs/formatters\";\nimport { ignores } from \"./configs/ignores\";\nimport { imports } from \"./configs/imports\";\nimport { javascript } from \"./configs/javascript\";\nimport { jsdoc } from \"./configs/jsdoc\";\nimport { node } from \"./configs/node\";\nimport { react } from \"./configs/react\";\nimport { typescriptRelaxed } from \"./configs/typescript-relaxed\";\nimport { typescriptStrict } from \"./configs/typescript-strict\";\nimport { unicorn } from \"./configs/unicorn\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\nconst builtinAdonisConfig: ConfigWithExtends[] = configApp();\n\nconst adonisConfig: ConfigWithExtends[] = [\n ...builtinAdonisConfig,\n ...node(),\n ...imports(),\n {\n rules: {\n \"@typescript-eslint/naming-convention\": [\n \"error\",\n {\n selector: [\"enum\", \"enumMember\", \"class\", \"interface\", \"typeLike\"],\n format: [\"PascalCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n {\n selector: [\"classProperty\", \"classMethod\", \"method\", \"variableLike\"],\n format: [\"camelCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n {\n selector: \"variable\",\n format: [\"camelCase\", \"UPPER_CASE\", \"PascalCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n ],\n },\n },\n];\n\nconst nextjsConfig = async (): Promise<ConfigWithExtends[]> => [\n ...a11y(),\n ...unicorn(),\n ...typescriptStrict(),\n ...imports({ forbidDefaultExport: true }),\n ...(await react()),\n];\n\nconst configs: ConfigWithExtends[] = [\n gitignore(),\n ...javascript(),\n ...jsdoc(),\n ...comments(),\n ...typescriptRelaxed(),\n];\n\nconst defaultOverrides = [...ignores(), ...formatters(), ...disables()];\n\nexport const solvro = async (...overrides: ConfigWithExtends[]) => {\n const isAdonis = await isPackageListed(\"@adonisjs/core\");\n const isNext = await isPackageListed(\"next\");\n\n if (isNext && isAdonis) {\n throw new Error(\n \"You can't use both Adonis and Next.js in the same project\",\n );\n }\n\n const newConfig: ConfigWithExtends[] = [];\n\n if (isAdonis) {\n newConfig.push(...adonisConfig);\n }\n\n if (isNext) {\n newConfig.push(...(await nextjsConfig()));\n }\n\n const tsConfigPath = findUpSync(\"tsconfig.json\", {\n cwd: process.cwd(),\n });\n\n if (tsConfigPath == null) {\n throw new Error(\"No tsconfig.json found\");\n }\n\n const rootDirectory = path.dirname(tsConfigPath);\n\n configs.push({\n languageOptions: {\n parserOptions: {\n projectService: true,\n tsconfigRootDir: rootDirectory,\n },\n },\n });\n\n return tseslint.config(\n ...configs,\n ...newConfig,\n ...defaultOverrides,\n ...overrides,\n );\n};\n","import jsxA11y from \"eslint-plugin-jsx-a11y\";\nimport globals from \"globals\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function a11y(): ConfigWithExtends[] {\n return [\n {\n files: [\"**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}\"],\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ...jsxA11y.flatConfigs.recommended,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n languageOptions: {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ...jsxA11y.flatConfigs.recommended.languageOptions,\n globals: {\n ...globals.serviceworker,\n ...globals.browser,\n },\n },\n settings: {\n \"jsx-a11y\": {\n components: {\n Input: \"input\",\n Button: \"button\",\n Link: \"a\",\n Label: \"label\",\n Select: \"select\",\n Textarea: \"textarea\",\n },\n attributes: {\n for: [\"htmlFor\", \"for\"],\n },\n },\n },\n },\n ];\n}\n","//@ts-expect-error not working\nexport { default as pluginComments } from \"@eslint-community/eslint-plugin-eslint-comments\";\nexport { default as pluginAntfu } from \"eslint-plugin-antfu\";\n//@ts-expect-error not working too\nexport { default as pluginImport } from \"eslint-plugin-import\";\nexport { default as pluginNode } from \"eslint-plugin-n\";\nexport { default as pluginUnicorn } from \"eslint-plugin-unicorn\";\nexport { default as pluginUnusedImports } from \"eslint-plugin-unused-imports\";\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginComments } from \"../plugins\";\n\nexport function comments(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/eslint-comments/rules\",\n plugins: {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n \"eslint-comments\": pluginComments,\n },\n rules: {\n \"eslint-comments/no-aggregating-enable\": \"error\",\n \"eslint-comments/no-duplicate-disable\": \"error\",\n \"eslint-comments/no-unlimited-disable\": \"error\",\n \"eslint-comments/no-unused-enable\": \"error\",\n },\n },\n ];\n}\n","import tseslint, { type ConfigWithExtends } from \"typescript-eslint\";\n\nimport { GLOB_SRC, GLOB_SRC_EXT } from \"../globs\";\n\nexport function disables(): ConfigWithExtends[] {\n return [\n {\n files: [`**/scripts/${GLOB_SRC}`],\n name: \"solvro/disables/scripts\",\n rules: {\n \"antfu/no-top-level-await\": \"off\",\n \"no-console\": \"off\",\n \"@typescript-eslint/explicit-function-return-type\": \"off\",\n },\n },\n {\n rules: {\n \"prettier/prettier\": \"off\",\n },\n },\n {\n files: [`**/cli/${GLOB_SRC}`, `**/cli.${GLOB_SRC_EXT}`],\n name: \"solvro/disables/cli\",\n rules: {\n \"antfu/no-top-level-await\": \"off\",\n \"no-console\": \"off\",\n },\n },\n {\n files: [\"**/bin/**/*\", `**/bin.${GLOB_SRC_EXT}`],\n name: \"solvro/disables/bin\",\n rules: {\n \"antfu/no-import-dist\": \"off\",\n \"antfu/no-import-node-modules-by-path\": \"off\",\n },\n },\n {\n files: [\"**/*.d.?([cm])ts\"],\n name: \"solvro/disables/dts\",\n rules: {\n \"eslint-comments/no-unlimited-disable\": \"off\",\n \"import-x/no-duplicates\": \"off\",\n \"no-restricted-syntax\": \"off\",\n \"unused-imports/no-unused-vars\": \"off\",\n },\n },\n {\n files: [\"**/*.js\", \"**/*.cjs\"],\n name: \"solvro/disables/cjs\",\n rules: {\n \"@typescript-eslint/no-require-imports\": \"off\",\n },\n },\n {\n files: [`**/*.config.${GLOB_SRC_EXT}`, `**/*.config.*.${GLOB_SRC_EXT}`],\n name: \"solvro/disables/config-files\",\n rules: {\n \"antfu/no-top-level-await\": \"off\",\n \"no-console\": \"off\",\n \"@typescript-eslint/explicit-function-return-type\": \"off\",\n },\n },\n {\n files: [\"**/*.js\"],\n extends: [tseslint.configs.disableTypeChecked],\n },\n ];\n}\n","export const GLOB_SRC_EXT = \"?([cm])[jt]s?(x)\";\nexport const GLOB_SRC = \"**/*.?([cm])[jt]s?(x)\";\n\nexport const GLOB_JS = \"**/*.?([cm])js\";\nexport const GLOB_JSX = \"**/*.?([cm])jsx\";\n\nexport const GLOB_TS = \"**/*.?([cm])ts\";\nexport const GLOB_TSX = \"**/*.?([cm])tsx\";\n\nexport const GLOB_EXCLUDE = [\n \"**/node_modules\",\n \"**/dist\",\n \"**/package-lock.json\",\n \"**/yarn.lock\",\n \"**/pnpm-lock.yaml\",\n \"**/bun.lockb\",\n \"**/build\",\n \"**/output\",\n \"**/coverage\",\n \"**/temp\",\n \"**/.temp\",\n \"**/tmp\",\n \"**/.tmp\",\n \"**/.history\",\n \"**/.vitepress/cache\",\n \"**/.nuxt\",\n \"**/.next\",\n \"**/.svelte-kit\",\n \"**/.vercel\",\n \"**/.changeset\",\n \"**/.idea\",\n \"**/.cache\",\n \"**/.output\",\n \"**/.vite-inspect\",\n \"**/.yarn\",\n \"**/vite.config.*.timestamp-*\",\n\n \"**/CHANGELOG*.md\",\n \"**/*.min.*\",\n \"**/LICENSE*\",\n \"**/__snapshots__\",\n \"**/auto-import?(s).d.ts\",\n \"**/components.d.ts\",\n];\n","import prettierConfig from \"eslint-config-prettier\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function formatters(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/prettier\",\n rules: {\n ...prettierConfig.rules,\n curly: \"error\",\n },\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { GLOB_EXCLUDE } from \"../globs\";\n\nexport function ignores(): ConfigWithExtends[] {\n return [\n {\n ignores: [...GLOB_EXCLUDE],\n name: \"solvro/ignores\",\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu, pluginImport } from \"../plugins\";\n\nexport function imports(\n options: { forbidDefaultExport: boolean } = { forbidDefaultExport: false },\n): ConfigWithExtends[] {\n const config = [\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n pluginImport.flatConfigs.typescript,\n {\n name: \"solvro/imports/rules\",\n plugins: {\n antfu: pluginAntfu,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n import: pluginImport,\n },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n rules: {\n \"antfu/import-dedupe\": \"error\",\n \"antfu/no-import-dist\": \"error\",\n \"antfu/no-import-node-modules-by-path\": \"error\",\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n ...pluginImport.flatConfigs.recommended.rules,\n \"import/no-dynamic-require\": \"warn\",\n \"import/no-unresolved\": \"off\",\n \"import/consistent-type-specifier-style\": \"warn\",\n \"@typescript-eslint/no-restricted-imports\": [\n \"error\",\n {\n paths: [\n {\n name: \"axios\",\n message: \"Please use fetch instead\",\n },\n ],\n },\n ],\n },\n },\n ];\n\n if (options.forbidDefaultExport) {\n config.push(\n {\n rules: { \"import/no-default-export\": \"error\" },\n },\n {\n files: [\n \"tsup.config.*\",\n \"eslint.config.*\",\n \".commitlintrc.*\",\n \"knip.*\",\n \"next.config.*\",\n \"commitlint.config.*\",\n \".releaserc.*\",\n \"vitest.config.*\",\n \"playwright.config.*\",\n ],\n rules: {\n \"import/no-default-export\": \"off\",\n },\n },\n );\n }\n\n return config;\n}\n","import eslint from \"@eslint/js\";\nimport globals from \"globals\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu, pluginUnusedImports } from \"../plugins\";\n\nexport function javascript(): ConfigWithExtends[] {\n return [\n {\n languageOptions: {\n ecmaVersion: 2022,\n globals: {\n ...globals.browser,\n ...globals.es2021,\n ...globals.node,\n document: \"readonly\",\n navigator: \"readonly\",\n window: \"readonly\",\n },\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n ecmaVersion: 2022,\n sourceType: \"module\",\n },\n sourceType: \"module\",\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n name: \"solvro/javascript/setup\",\n },\n {\n name: \"solvro/javascript/rules\",\n plugins: {\n antfu: pluginAntfu,\n \"unused-imports\": pluginUnusedImports,\n },\n rules: {\n ...eslint.configs.recommended.rules,\n \"accessor-pairs\": [\n \"error\",\n { enforceForClassMembers: true, setWithoutGet: true },\n ],\n curly: \"error\",\n \"array-callback-return\": \"error\",\n \"block-scoped-var\": \"error\",\n \"constructor-super\": \"error\",\n \"default-case-last\": \"error\",\n \"dot-notation\": [\"error\", { allowKeywords: true }],\n eqeqeq: [\"error\", \"smart\"],\n \"new-cap\": [\n \"error\",\n { capIsNew: false, newIsCap: true, properties: true },\n ],\n \"no-alert\": \"error\",\n \"no-array-constructor\": \"error\",\n \"no-async-promise-executor\": \"error\",\n \"no-caller\": \"error\",\n \"no-case-declarations\": \"error\",\n \"no-class-assign\": \"error\",\n \"no-compare-neg-zero\": \"error\",\n \"no-cond-assign\": [\"error\", \"always\"],\n \"no-console\": [\"error\", { allow: [\"warn\", \"error\"] }],\n \"no-const-assign\": \"error\",\n \"no-control-regex\": \"error\",\n \"no-debugger\": \"error\",\n \"no-delete-var\": \"error\",\n \"no-dupe-args\": \"error\",\n \"no-dupe-class-members\": \"error\",\n \"no-dupe-keys\": \"error\",\n \"no-duplicate-case\": \"error\",\n \"no-empty\": [\"error\", { allowEmptyCatch: true }],\n \"no-empty-character-class\": \"error\",\n \"no-empty-pattern\": \"error\",\n \"no-eval\": \"error\",\n \"no-ex-assign\": \"error\",\n \"no-extend-native\": \"error\",\n \"no-extra-bind\": \"error\",\n \"no-extra-boolean-cast\": \"error\",\n \"no-fallthrough\": \"error\",\n \"no-func-assign\": \"error\",\n \"no-global-assign\": \"error\",\n \"no-implied-eval\": \"error\",\n \"no-import-assign\": \"error\",\n \"no-invalid-regexp\": \"error\",\n \"no-irregular-whitespace\": \"error\",\n \"no-iterator\": \"error\",\n \"no-labels\": [\"error\", { allowLoop: false, allowSwitch: false }],\n \"no-lone-blocks\": \"error\",\n \"no-loss-of-precision\": \"error\",\n \"no-misleading-character-class\": \"error\",\n \"no-multi-str\": \"error\",\n \"no-new\": \"error\",\n \"no-new-func\": \"error\",\n \"no-new-native-nonconstructor\": \"error\",\n \"no-new-wrappers\": \"error\",\n \"no-obj-calls\": \"error\",\n \"no-octal\": \"error\",\n \"no-octal-escape\": \"error\",\n \"no-proto\": \"error\",\n \"no-prototype-builtins\": \"error\",\n \"no-redeclare\": [\"error\", { builtinGlobals: false }],\n \"no-regex-spaces\": \"error\",\n \"no-restricted-globals\": [\n \"error\",\n { message: \"Use `globalThis` instead.\", name: \"global\" },\n { message: \"Use `globalThis` instead.\", name: \"self\" },\n ],\n \"no-restricted-properties\": [\n \"error\",\n {\n message:\n \"Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.\",\n property: \"__proto__\",\n },\n {\n message: \"Use `Object.defineProperty` instead.\",\n property: \"__defineGetter__\",\n },\n {\n message: \"Use `Object.defineProperty` instead.\",\n property: \"__defineSetter__\",\n },\n {\n message: \"Use `Object.getOwnPropertyDescriptor` instead.\",\n property: \"__lookupGetter__\",\n },\n {\n message: \"Use `Object.getOwnPropertyDescriptor` instead.\",\n property: \"__lookupSetter__\",\n },\n ],\n \"no-restricted-syntax\": [\n \"error\",\n \"TSEnumDeclaration[const=true]\",\n \"TSExportAssignment\",\n ],\n \"no-self-assign\": [\"error\", { props: true }],\n \"no-self-compare\": \"error\",\n \"no-sequences\": \"error\",\n \"no-shadow-restricted-names\": \"error\",\n \"no-sparse-arrays\": \"error\",\n \"no-template-curly-in-string\": \"error\",\n \"no-this-before-super\": \"error\",\n \"no-throw-literal\": \"error\",\n \"no-undef-init\": \"error\",\n \"no-unexpected-multiline\": \"error\",\n \"no-unmodified-loop-condition\": \"error\",\n \"no-unneeded-ternary\": [\"error\", { defaultAssignment: false }],\n \"no-unreachable\": \"error\",\n \"no-unreachable-loop\": \"error\",\n \"no-unsafe-finally\": \"error\",\n \"no-unsafe-negation\": \"error\",\n \"no-unused-expressions\": [\n \"error\",\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n\n \"no-useless-backreference\": \"error\",\n \"no-useless-call\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-useless-computed-key\": \"error\",\n \"no-useless-constructor\": \"error\",\n \"no-useless-rename\": \"error\",\n \"no-useless-return\": \"error\",\n \"no-var\": \"error\",\n \"no-with\": \"error\",\n \"object-shorthand\": [\n \"error\",\n \"always\",\n {\n avoidQuotes: true,\n ignoreConstructors: false,\n },\n ],\n \"one-var\": [\"error\", { initialized: \"never\" }],\n \"prefer-arrow-callback\": [\n \"error\",\n {\n allowNamedFunctions: false,\n allowUnboundThis: true,\n },\n ],\n \"prefer-const\": [\n \"error\",\n {\n destructuring: \"all\",\n ignoreReadBeforeAssign: true,\n },\n ],\n \"prefer-exponentiation-operator\": \"error\",\n \"prefer-promise-reject-errors\": \"error\",\n \"prefer-regex-literals\": [\"error\", { disallowRedundantWrapping: true }],\n \"prefer-rest-params\": \"error\",\n \"prefer-spread\": \"error\",\n \"prefer-template\": \"error\",\n \"symbol-description\": \"error\",\n \"unicode-bom\": [\"error\", \"never\"],\n \"unused-imports/no-unused-imports\": \"error\",\n \"unused-imports/no-unused-vars\": [\n \"error\",\n {\n args: \"after-used\",\n argsIgnorePattern: \"^_\",\n ignoreRestSiblings: true,\n vars: \"all\",\n varsIgnorePattern: \"^_\",\n },\n ],\n \"use-isnan\": [\n \"error\",\n { enforceForIndexOf: true, enforceForSwitchCase: true },\n ],\n \"valid-typeof\": [\"error\", { requireStringLiterals: true }],\n \"vars-on-top\": \"error\",\n yoda: [\"error\", \"never\"],\n },\n },\n ];\n}\n","import jsdocPlugin from \"eslint-plugin-jsdoc\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function jsdoc(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/jsdoc/rules\",\n plugins: {\n jsdoc: jsdocPlugin,\n },\n rules: {\n \"jsdoc/check-access\": \"warn\",\n \"jsdoc/check-param-names\": \"warn\",\n \"jsdoc/check-property-names\": \"warn\",\n \"jsdoc/check-types\": \"warn\",\n \"jsdoc/empty-tags\": \"warn\",\n \"jsdoc/implements-on-classes\": \"warn\",\n \"jsdoc/no-defaults\": \"warn\",\n \"jsdoc/no-multi-asterisks\": \"warn\",\n \"jsdoc/require-param-name\": \"warn\",\n \"jsdoc/require-property\": \"warn\",\n \"jsdoc/require-property-description\": \"warn\",\n \"jsdoc/require-property-name\": \"warn\",\n \"jsdoc/require-returns-check\": \"warn\",\n \"jsdoc/require-returns-description\": \"warn\",\n \"jsdoc/require-yields-check\": \"warn\",\n },\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginNode } from \"../plugins\";\n\nexport function node(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/node/rules\",\n plugins: {\n node: pluginNode,\n },\n rules: {\n \"node/handle-callback-err\": [\"error\", \"^(err|error)$\"],\n \"node/no-deprecated-api\": \"error\",\n \"node/no-exports-assign\": \"error\",\n \"node/no-new-require\": \"error\",\n \"node/no-path-concat\": \"error\",\n \"node/prefer-global/buffer\": [\"error\"],\n \"node/prefer-global/process\": [\"error\"],\n \"node/process-exit-as-throw\": \"error\",\n },\n },\n ];\n}\n","import pluginQuery from \"@tanstack/eslint-plugin-query\";\nimport pluginReact from \"eslint-plugin-react\";\nimport pluginReactHooks from \"eslint-plugin-react-hooks\";\nimport { isPackageExists } from \"local-pkg\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nconst nextJsPackages = [\"next\"];\n\nconst forbiddenLibraries = [\n \"@headlessui/react\",\n \"@mui/material\",\n \"@chakra-ui/react\",\n \"@chakra-ui/core\",\n \"@nextui-org/react\",\n \"react-bootstrap\",\n \"antd\",\n];\n\nexport async function react(): Promise<ConfigWithExtends[]> {\n const isUsingNext = nextJsPackages.some((index) => isPackageExists(index));\n\n const nextjsConfig: ConfigWithExtends[] = [];\n\n if (isUsingNext) {\n // @ts-expect-error ???\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const nextPlugin = await import(\"@next/eslint-plugin-next\").then(\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (d) => d.default,\n );\n\n nextjsConfig.push(\n {\n name: \"solvro/next/setup\",\n plugins: {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n \"@next/next\": nextPlugin,\n },\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access\n rules: nextPlugin.configs.recommended.rules,\n },\n {\n files: [\n \"**/app/**/{page,loading,layout,template,error,not-found,unauthorized,forbidden,default}.{js,jsx,ts,tsx}\",\n \"**/pages/**/*.{js,jsx,ts,tsx}\",\n ],\n name: \"solvro/next/pages\",\n rules: {\n \"import/no-default-export\": \"off\",\n },\n },\n );\n }\n\n return [\n {\n name: \"solvro/react/setup\",\n plugins: {\n react: pluginReact,\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n \"react-hooks\": pluginReactHooks,\n },\n },\n ...nextjsConfig,\n {\n files: [\"**/*.{js,jsx,mjs,cjs,ts,tsx}\"],\n languageOptions: {\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n },\n sourceType: \"module\",\n },\n settings: {\n react: {\n version: \"detect\",\n },\n },\n name: \"solvro/react/rules\",\n rules: {\n ...pluginReact.configs.flat.recommended.rules,\n ...pluginReact.configs.flat[\"jsx-runtime\"].rules,\n \"react/no-danger\": \"warn\",\n \"react/jsx-no-leaked-render\": \"warn\",\n // recommended rules react-hooks\n \"react-hooks/exhaustive-deps\": \"warn\",\n \"react-hooks/rules-of-hooks\": \"error\",\n \"react/jsx-no-useless-fragment\": \"error\",\n \"react/function-component-definition\": [\n \"error\",\n {\n unnamedComponents: \"arrow-function\",\n namedComponents: \"function-declaration\",\n },\n ],\n \"react/hook-use-state\": [\n \"error\",\n {\n allowDestructuredState: true,\n },\n ],\n \"react/no-array-index-key\": \"warn\",\n \"@typescript-eslint/no-restricted-imports\": [\n \"error\",\n {\n paths: forbiddenLibraries.map((library) => ({\n name: library,\n message: `Please use ui.shadcn.com components instead.`,\n })),\n },\n ],\n },\n },\n ...pluginQuery.configs[\"flat/recommended\"],\n {\n name: \"solvro/react/disables\",\n files: [\"**/components/ui/*.{jsx,tsx}\"],\n rules: {\n \"react/prop-types\": \"off\",\n \"no-shadow\": \"off\",\n \"@typescript-eslint/no-shadow\": \"off\",\n \"@typescript-eslint/restrict-template-expressions\": \"off\",\n \"unicorn/no-document-cookie\": \"off\",\n \"@typescript-eslint/no-redeclare\": \"off\",\n \"@typescript-eslint/no-deprecated\": \"off\",\n },\n },\n ];\n}\n","import tseslint from \"typescript-eslint\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function typescriptRelaxed(): ConfigWithExtends[] {\n return [\n ...tseslint.configs.recommendedTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n {\n name: \"solvro/typescript-relaxed/rules\",\n rules: {\n \"@typescript-eslint/no-unsafe-return\": \"off\",\n \"@typescript-eslint/require-await\": \"off\",\n \"@typescript-eslint/no-misused-promises\": [\n \"error\",\n {\n checksVoidReturn: false,\n },\n ],\n \"unused-imports/no-unused-vars\": \"off\",\n \"@typescript-eslint/no-unused-vars\": [\n \"error\",\n {\n args: \"all\",\n argsIgnorePattern: \"^_\",\n destructuredArrayIgnorePattern: \"^_\",\n varsIgnorePattern: \"^_\",\n ignoreRestSiblings: true,\n },\n ],\n \"@typescript-eslint/no-empty-object-type\": \"off\",\n \"@typescript-eslint/no-unnecessary-condition\": \"warn\",\n \"@typescript-eslint/no-non-null-assertion\": \"error\",\n \"@typescript-eslint/no-unnecessary-template-expression\": \"error\",\n \"@typescript-eslint/strict-boolean-expressions\": [\n \"error\",\n {\n allowNullableObject: false,\n },\n ],\n },\n },\n ];\n}\n","import tseslint from \"typescript-eslint\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu } from \"../plugins\";\n\nexport function typescriptStrict(): ConfigWithExtends[] {\n return [\n ...tseslint.configs.strictTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n {\n name: \"solvro/typescript-strict/setup\",\n plugins: {\n antfu: pluginAntfu,\n },\n },\n {\n files: [\"**/*.{ts,tsx}\"],\n name: \"solvro/typescript-strict/rules\",\n rules: {\n \"@typescript-eslint/ban-ts-comment\": [\n \"error\",\n { \"ts-expect-error\": \"allow-with-description\" },\n ],\n \"@typescript-eslint/consistent-type-definitions\": [\n \"error\",\n \"interface\",\n ],\n \"@typescript-eslint/consistent-type-imports\": [\n \"error\",\n {\n disallowTypeAnnotations: false,\n prefer: \"type-imports\",\n },\n ],\n \"@typescript-eslint/method-signature-style\": [\"error\", \"property\"], // https://www.totaltypescript.com/method-shorthand-syntax-considered-harmful\n \"@typescript-eslint/no-dupe-class-members\": \"error\",\n \"@typescript-eslint/no-empty-object-type\": [\n \"error\",\n { allowInterfaces: \"always\" },\n ],\n \"@typescript-eslint/no-import-type-side-effects\": \"error\",\n \"@typescript-eslint/no-redeclare\": [\"error\", { builtinGlobals: false }],\n \"@typescript-eslint/no-require-imports\": \"error\",\n \"@typescript-eslint/no-unused-expressions\": [\n \"error\",\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n \"@typescript-eslint/no-use-before-define\": [\n \"error\",\n { classes: false, functions: false, variables: true },\n ],\n \"@typescript-eslint/no-wrapper-object-types\": \"error\",\n // prevent unnecessary use of void operator\n \"@typescript-eslint/no-meaningless-void-operator\": \"error\",\n // \"using non-null assertions cancels the benefits of the strict\n // null-checking mode.\"\n // warn when one of the types in union / intersection overrides others\n \"@typescript-eslint/no-redundant-type-constituents\": \"warn\",\n // prevent variables shadowing\n \"no-shadow\": \"error\",\n \"@typescript-eslint/no-shadow\": \"error\",\n // prevent assignment of this, signals a wrong usage of it\n \"@typescript-eslint/no-this-alias\": \"error\",\n // prevent throwing non-error\n \"no-throw-literal\": \"off\",\n\n // prevent unnecessary explicitly adding a default type argument\n \"@typescript-eslint/no-unnecessary-type-arguments\": \"error\",\n // prevent unnecessary assertions that won't change the outcome\n \"@typescript-eslint/no-unnecessary-type-assertion\": \"error\",\n // prevent extending default types\n \"@typescript-eslint/no-unnecessary-type-constraint\": \"error\",\n // force typing out function arguments\n \"@typescript-eslint/no-unsafe-argument\": \"error\",\n // prevent usage of any via reassigning\n \"@typescript-eslint/no-unsafe-assignment\": \"error\",\n // prevent usage of any via calling it\n \"@typescript-eslint/no-unsafe-call\": \"error\",\n // prevent usage of any via using it's members\n \"@typescript-eslint/no-unsafe-member-access\": \"error\",\n // prevent reverting any from functions\n \"@typescript-eslint/no-unsafe-return\": \"error\",\n // prevent unused expressions\n \"no-unused-expressions\": \"off\",\n // var<'string'> = 'string' -> var = 'string' as const\n \"@typescript-eslint/prefer-as-const\": \"error\",\n // force initializing enums\n \"@typescript-eslint/prefer-enum-initializers\": \"error\",\n // prefer for x of obj to for let i = 0...\n \"@typescript-eslint/prefer-for-of\": \"error\",\n // prefer includes() to indexOf()\n \"@typescript-eslint/prefer-includes\": \"error\",\n // use literals for enum initialization\n \"@typescript-eslint/prefer-literal-enum-member\": \"error\",\n // prefer safe cascade of a value when dealing with undefined or null\n \"@typescript-eslint/prefer-nullish-coalescing\": \"error\",\n // prefer optional chaining (a?.b)\n \"@typescript-eslint/prefer-optional-chain\": \"error\",\n // prefer using type parameter for Array.reduce\n \"@typescript-eslint/prefer-reduce-type-parameter\": \"error\",\n // prefer RegExp#exec when no /g flag in regex\n \"@typescript-eslint/prefer-regexp-exec\": \"error\",\n // enforce `this` as a type when stating type for a method\n \"@typescript-eslint/prefer-return-this-type\": \"error\",\n // enforce startsWith to indexOf === 0\n \"@typescript-eslint/prefer-string-starts-ends-with\": \"error\",\n // prevents default behavior of .sort() - which is confusing\n \"@typescript-eslint/require-array-sort-compare\": \"error\",\n // no async functions without awaits in body\n \"require-await\": \"off\",\n \"@typescript-eslint/require-await\": \"error\",\n // prevent number + string\n \"@typescript-eslint/restrict-plus-operands\": \"error\",\n // only allow string in templates\n \"@typescript-eslint/restrict-template-expressions\": \"error\",\n // prevent returning await\n \"no-return-await\": \"off\",\n \"@typescript-eslint/return-await\": \"error\",\n // only booleans in ifs and whiles\n \"@typescript-eslint/strict-boolean-expressions\": \"error\",\n // check if all paths are followed in code\n \"@typescript-eslint/switch-exhaustiveness-check\": \"error\",\n \"dot-notation\": \"off\",\n \"no-implied-eval\": \"off\",\n \"@typescript-eslint/await-thenable\": \"error\",\n \"@typescript-eslint/dot-notation\": [\"error\", { allowKeywords: true }],\n \"@typescript-eslint/no-floating-promises\": \"error\",\n \"@typescript-eslint/no-for-in-array\": \"error\",\n \"@typescript-eslint/no-implied-eval\": \"error\",\n \"@typescript-eslint/no-misused-promises\": \"error\",\n \"@typescript-eslint/promise-function-async\": \"error\",\n \"@typescript-eslint/unbound-method\": \"error\",\n \"no-restricted-imports\": \"off\",\n },\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginUnicorn } from \"../plugins\";\n\nexport function unicorn(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/unicorn/rules\",\n plugins: {\n unicorn: pluginUnicorn,\n },\n rules: {\n ...pluginUnicorn.configs[\"flat/recommended\"].rules,\n \"unicorn/no-array-reduce\": \"off\",\n \"unicorn/no-null\": \"off\",\n \"unicorn/no-useless-switch-case\": \"off\",\n \"unicorn/prefer-global-this\": \"off\",\n \"unicorn/prevent-abbreviations\": [\n \"error\",\n {\n replacements: {\n env: false,\n envs: false,\n props: false,\n prop: false,\n ref: false,\n },\n },\n ],\n },\n },\n ];\n}\n"],"mappings":"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","names":["fs","path","process","process","path","fs","ignores","findUpSync","path","tseslint","default","default","default","globals","globals","default","default","nextjsConfig","tseslint","tseslint","tseslint","default","default","findUpSync","path","tseslint"]}
1
+ {"version":3,"sources":["../../node_modules/eslint-config-flat-gitignore/dist/index.mjs","../../node_modules/@eslint/compat/dist/esm/index.js","../../src/eslint/index.ts","../../src/eslint/configs/a11y.ts","../../src/eslint/plugins.ts","../../src/eslint/configs/comments.ts","../../src/eslint/configs/disables.ts","../../src/eslint/globs.ts","../../src/eslint/configs/formatters.ts","../../src/eslint/configs/ignores.ts","../../src/eslint/configs/imports.ts","../../src/eslint/configs/javascript.ts","../../src/eslint/configs/jsdoc.ts","../../src/eslint/configs/node.ts","../../src/eslint/configs/react.ts","../../src/eslint/configs/typescript-relaxed.ts","../../src/eslint/configs/typescript-strict.ts","../../src/eslint/configs/unicorn.ts"],"sourcesContent":["import fs from 'node:fs';\nimport path, { join, resolve, relative, dirname } from 'node:path';\nimport process from 'node:process';\nimport { convertIgnorePatternToMinimatch } from '@eslint/compat';\nimport 'node:fs/promises';\nimport { fileURLToPath } from 'node:url';\n\nfunction toArray(array) {\n array = array ?? [];\n return Array.isArray(array) ? array : [array];\n}\n\nconst toPath = urlOrPath => urlOrPath instanceof URL ? fileURLToPath(urlOrPath) : urlOrPath;\n\nfunction findUpSync(name, {\n\tcwd = process.cwd(),\n\ttype = 'file',\n\tstopAt,\n} = {}) {\n\tlet directory = path.resolve(toPath(cwd) ?? '');\n\tconst {root} = path.parse(directory);\n\tstopAt = path.resolve(directory, toPath(stopAt) ?? root);\n\n\twhile (directory && directory !== stopAt && directory !== root) {\n\t\tconst filePath = path.isAbsolute(name) ? name : path.join(directory, name);\n\n\t\ttry {\n\t\t\tconst stats = fs.statSync(filePath, {throwIfNoEntry: false});\n\t\t\tif ((type === 'file' && stats?.isFile()) || (type === 'directory' && stats?.isDirectory())) {\n\t\t\t\treturn filePath;\n\t\t\t}\n\t\t} catch {}\n\n\t\tdirectory = path.dirname(directory);\n\t}\n}\n\nconst GITIGNORE = \".gitignore\";\nconst GITMODULES = \".gitmodules\";\nfunction ignore(options = {}) {\n const ignores = [];\n const {\n cwd = process.cwd(),\n root = false,\n files: _files = root ? GITIGNORE : findUpSync(GITIGNORE, { cwd }) || [],\n filesGitModules: _filesGitModules = root ? fs.existsSync(join(cwd, GITMODULES)) ? GITMODULES : [] : findUpSync(GITMODULES, { cwd }) || [],\n strict = true\n } = options;\n const files = toArray(_files).map((file) => resolve(cwd, file));\n const filesGitModules = toArray(_filesGitModules).map((file) => resolve(cwd, file));\n for (const file of files) {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf8\");\n } catch (error) {\n if (strict)\n throw error;\n continue;\n }\n const relativePath = relative(cwd, dirname(file)).replaceAll(\"\\\\\", \"/\");\n const globs = content.split(/\\r?\\n/u).filter((line) => line && !line.startsWith(\"#\")).map((line) => convertIgnorePatternToMinimatch(line)).map((glob) => relativeMinimatch(glob, relativePath, cwd)).filter((glob) => glob !== null);\n ignores.push(...globs);\n }\n for (const file of filesGitModules) {\n let content = \"\";\n try {\n content = fs.readFileSync(file, \"utf8\");\n } catch (error) {\n if (strict)\n throw error;\n continue;\n }\n const dirs = parseGitSubmodules(content);\n ignores.push(...dirs.map((dir) => `${dir}/**`));\n }\n if (strict && files.length === 0)\n throw new Error(\"No .gitignore file found\");\n return {\n name: options.name || \"gitignore\",\n ignores\n };\n}\nfunction relativeMinimatch(pattern, relativePath, cwd) {\n if ([\"\", \".\", \"/\"].includes(relativePath))\n return pattern;\n const negated = pattern.startsWith(\"!\") ? \"!\" : \"\";\n let cleanPattern = negated ? pattern.slice(1) : pattern;\n if (!relativePath.endsWith(\"/\"))\n relativePath = `${relativePath}/`;\n const isParent = relativePath.startsWith(\"..\");\n if (!isParent)\n return `${negated}${relativePath}${cleanPattern}`;\n if (!relativePath.match(/^(\\.\\.\\/)+$/))\n throw new Error(\"The ignore file location should be either a parent or child directory\");\n if (cleanPattern.startsWith(\"**\"))\n return pattern;\n const parents = relative(resolve(cwd, relativePath), cwd).split(/[/\\\\]/);\n while (parents.length && cleanPattern.startsWith(`${parents[0]}/`)) {\n cleanPattern = cleanPattern.slice(parents[0].length + 1);\n parents.shift();\n }\n if (cleanPattern.startsWith(\"**\"))\n return `${negated}${cleanPattern}`;\n if (parents.length === 0)\n return `${negated}${cleanPattern}`;\n return null;\n}\nfunction parseGitSubmodules(content) {\n return content.split(/\\r?\\n/u).map((line) => line.match(/path\\s*=\\s*(.+)/u)).filter((match) => match !== null).map((match) => match[1].trim());\n}\n\nexport { ignore as default };\n","// @ts-self-types=\"./index.d.ts\"\nimport fs from 'node:fs';\nimport path from 'node:path';\n\n/**\n * @filedescription Functions to fix up rules to provide missing methods on the `context` object.\n * @author Nicholas C. Zakas\n */\n\n//-----------------------------------------------------------------------------\n// Types\n//-----------------------------------------------------------------------------\n\n/** @typedef {import(\"eslint\").ESLint.Plugin} FixupPluginDefinition */\n/** @typedef {import(\"eslint\").Rule.RuleModule} FixupRuleDefinition */\n/** @typedef {FixupRuleDefinition[\"create\"]} FixupLegacyRuleDefinition */\n/** @typedef {import(\"eslint\").Linter.Config} FixupConfig */\n/** @typedef {Array<FixupConfig>} FixupConfigArray */\n\n//-----------------------------------------------------------------------------\n// Data\n//-----------------------------------------------------------------------------\n\n/**\n * The removed methods from the `context` object that need to be added back.\n * The keys are the name of the method on the `context` object and the values\n * are the name of the method on the `sourceCode` object.\n * @type {Map<string, string>}\n */\nconst removedMethodNames = new Map([\n\t[\"getSource\", \"getText\"],\n\t[\"getSourceLines\", \"getLines\"],\n\t[\"getAllComments\", \"getAllComments\"],\n\t[\"getDeclaredVariables\", \"getDeclaredVariables\"],\n\t[\"getNodeByRangeIndex\", \"getNodeByRangeIndex\"],\n\t[\"getCommentsBefore\", \"getCommentsBefore\"],\n\t[\"getCommentsAfter\", \"getCommentsAfter\"],\n\t[\"getCommentsInside\", \"getCommentsInside\"],\n\t[\"getJSDocComment\", \"getJSDocComment\"],\n\t[\"getFirstToken\", \"getFirstToken\"],\n\t[\"getFirstTokens\", \"getFirstTokens\"],\n\t[\"getLastToken\", \"getLastToken\"],\n\t[\"getLastTokens\", \"getLastTokens\"],\n\t[\"getTokenAfter\", \"getTokenAfter\"],\n\t[\"getTokenBefore\", \"getTokenBefore\"],\n\t[\"getTokenByRangeStart\", \"getTokenByRangeStart\"],\n\t[\"getTokens\", \"getTokens\"],\n\t[\"getTokensAfter\", \"getTokensAfter\"],\n\t[\"getTokensBefore\", \"getTokensBefore\"],\n\t[\"getTokensBetween\", \"getTokensBetween\"],\n]);\n\n/**\n * Tracks the original rule definition and the fixed-up rule definition.\n * @type {WeakMap<FixupRuleDefinition|FixupLegacyRuleDefinition,FixupRuleDefinition>}\n */\nconst fixedUpRuleReplacements = new WeakMap();\n\n/**\n * Tracks all of the fixed up rule definitions so we don't duplicate effort.\n * @type {WeakSet<FixupRuleDefinition>}\n */\nconst fixedUpRules = new WeakSet();\n\n/**\n * Tracks the original plugin definition and the fixed-up plugin definition.\n * @type {WeakMap<FixupPluginDefinition,FixupPluginDefinition>}\n */\nconst fixedUpPluginReplacements = new WeakMap();\n\n/**\n * Tracks all of the fixed up plugin definitions so we don't duplicate effort.\n * @type {WeakSet<FixupPluginDefinition>}\n */\nconst fixedUpPlugins = new WeakSet();\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\n/**\n * Takes the given rule and creates a new rule with the `create()` method wrapped\n * to provide the missing methods on the `context` object.\n * @param {FixupRuleDefinition|FixupLegacyRuleDefinition} ruleDefinition The rule to fix up.\n * @returns {FixupRuleDefinition} The fixed-up rule.\n */\nfunction fixupRule(ruleDefinition) {\n\t// first check if we've already fixed up this rule\n\tif (fixedUpRuleReplacements.has(ruleDefinition)) {\n\t\treturn fixedUpRuleReplacements.get(ruleDefinition);\n\t}\n\n\tconst isLegacyRule = typeof ruleDefinition === \"function\";\n\n\t// check to see if this rule definition has already been fixed up\n\tif (!isLegacyRule && fixedUpRules.has(ruleDefinition)) {\n\t\treturn ruleDefinition;\n\t}\n\n\tconst originalCreate = isLegacyRule\n\t\t? ruleDefinition\n\t\t: ruleDefinition.create.bind(ruleDefinition);\n\n\tfunction ruleCreate(context) {\n\t\t// if getScope is already there then no need to create old methods\n\t\tif (\"getScope\" in context) {\n\t\t\treturn originalCreate(context);\n\t\t}\n\n\t\tconst sourceCode = context.sourceCode;\n\t\tlet currentNode = sourceCode.ast;\n\n\t\tconst newContext = Object.assign(Object.create(context), {\n\t\t\tparserServices: sourceCode.parserServices,\n\n\t\t\t/*\n\t\t\t * The following methods rely on the current node in the traversal,\n\t\t\t * so we need to add them manually.\n\t\t\t */\n\t\t\tgetScope() {\n\t\t\t\treturn sourceCode.getScope(currentNode);\n\t\t\t},\n\n\t\t\tgetAncestors() {\n\t\t\t\treturn sourceCode.getAncestors(currentNode);\n\t\t\t},\n\n\t\t\tmarkVariableAsUsed(variable) {\n\t\t\t\tsourceCode.markVariableAsUsed(variable, currentNode);\n\t\t\t},\n\t\t});\n\n\t\t// add passthrough methods\n\t\tfor (const [\n\t\t\tcontextMethodName,\n\t\t\tsourceCodeMethodName,\n\t\t] of removedMethodNames) {\n\t\t\tnewContext[contextMethodName] =\n\t\t\t\tsourceCode[sourceCodeMethodName].bind(sourceCode);\n\t\t}\n\n\t\t// freeze just like the original context\n\t\tObject.freeze(newContext);\n\n\t\t/*\n\t\t * Create the visitor object using the original create() method.\n\t\t * This is necessary to ensure that the visitor object is created\n\t\t * with the correct context.\n\t\t */\n\t\tconst visitor = originalCreate(newContext);\n\n\t\t/*\n\t\t * Wrap each method in the visitor object to update the currentNode\n\t\t * before calling the original method. This is necessary because the\n\t\t * methods like `getScope()` need to know the current node.\n\t\t */\n\t\tfor (const [methodName, method] of Object.entries(visitor)) {\n\t\t\t/*\n\t\t\t * Node is the second argument to most code path methods,\n\t\t\t * and the third argument for onCodePathSegmentLoop.\n\t\t\t */\n\t\t\tif (methodName.startsWith(\"on\")) {\n\t\t\t\t// eslint-disable-next-line no-loop-func -- intentionally updating shared `currentNode` variable\n\t\t\t\tvisitor[methodName] = (...args) => {\n\t\t\t\t\tcurrentNode =\n\t\t\t\t\t\targs[methodName === \"onCodePathSegmentLoop\" ? 2 : 1];\n\n\t\t\t\t\treturn method.call(visitor, ...args);\n\t\t\t\t};\n\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// eslint-disable-next-line no-loop-func -- intentionally updating shared `currentNode` variable\n\t\t\tvisitor[methodName] = (...args) => {\n\t\t\t\tcurrentNode = args[0];\n\n\t\t\t\treturn method.call(visitor, ...args);\n\t\t\t};\n\t\t}\n\n\t\treturn visitor;\n\t}\n\n\tconst newRuleDefinition = {\n\t\t...(isLegacyRule ? undefined : ruleDefinition),\n\t\tcreate: ruleCreate,\n\t};\n\n\t// copy `schema` property of function-style rule or top-level `schema` property of object-style rule into `meta` object\n\t// @ts-ignore -- top-level `schema` property was not offically supported for object-style rules so it doesn't exist in types\n\tconst { schema } = ruleDefinition;\n\tif (schema) {\n\t\tif (!newRuleDefinition.meta) {\n\t\t\tnewRuleDefinition.meta = { schema };\n\t\t} else {\n\t\t\tnewRuleDefinition.meta = {\n\t\t\t\t...newRuleDefinition.meta,\n\t\t\t\t// top-level `schema` had precedence over `meta.schema` so it's okay to overwrite `meta.schema` if it exists\n\t\t\t\tschema,\n\t\t\t};\n\t\t}\n\t}\n\n\t// cache the fixed up rule\n\tfixedUpRuleReplacements.set(ruleDefinition, newRuleDefinition);\n\tfixedUpRules.add(newRuleDefinition);\n\n\treturn newRuleDefinition;\n}\n\n/**\n * Takes the given plugin and creates a new plugin with all of the rules wrapped\n * to provide the missing methods on the `context` object.\n * @param {FixupPluginDefinition} plugin The plugin to fix up.\n * @returns {FixupPluginDefinition} The fixed-up plugin.\n */\nfunction fixupPluginRules(plugin) {\n\t// first check if we've already fixed up this plugin\n\tif (fixedUpPluginReplacements.has(plugin)) {\n\t\treturn fixedUpPluginReplacements.get(plugin);\n\t}\n\n\t/*\n\t * If the plugin has already been fixed up, or if the plugin\n\t * doesn't have any rules, we can just return it.\n\t */\n\tif (fixedUpPlugins.has(plugin) || !plugin.rules) {\n\t\treturn plugin;\n\t}\n\n\tconst newPlugin = {\n\t\t...plugin,\n\t\trules: Object.fromEntries(\n\t\t\tObject.entries(plugin.rules).map(([ruleId, ruleDefinition]) => [\n\t\t\t\truleId,\n\t\t\t\tfixupRule(ruleDefinition),\n\t\t\t]),\n\t\t),\n\t};\n\n\t// cache the fixed up plugin\n\tfixedUpPluginReplacements.set(plugin, newPlugin);\n\tfixedUpPlugins.add(newPlugin);\n\n\treturn newPlugin;\n}\n\n/**\n * Takes the given configuration and creates a new configuration with all of the\n * rules wrapped to provide the missing methods on the `context` object.\n * @param {FixupConfigArray|FixupConfig} config The configuration to fix up.\n * @returns {FixupConfigArray} The fixed-up configuration.\n */\nfunction fixupConfigRules(config) {\n\tconst configs = Array.isArray(config) ? config : [config];\n\n\treturn configs.map(configItem => {\n\t\tif (!configItem.plugins) {\n\t\t\treturn configItem;\n\t\t}\n\n\t\tconst newPlugins = Object.fromEntries(\n\t\t\tObject.entries(configItem.plugins).map(([pluginName, plugin]) => [\n\t\t\t\tpluginName,\n\t\t\t\tfixupPluginRules(plugin),\n\t\t\t]),\n\t\t);\n\n\t\treturn {\n\t\t\t...configItem,\n\t\t\tplugins: newPlugins,\n\t\t};\n\t});\n}\n\n/**\n * @fileoverview Ignore file utilities for the compat package.\n * @author Nicholas C. Zakas\n */\n\n\n//-----------------------------------------------------------------------------\n// Types\n//-----------------------------------------------------------------------------\n\n/** @typedef {import(\"eslint\").Linter.Config} FlatConfig */\n\n//-----------------------------------------------------------------------------\n// Exports\n//-----------------------------------------------------------------------------\n\n/**\n * Converts an ESLint ignore pattern to a minimatch pattern.\n * @param {string} pattern The .eslintignore or .gitignore pattern to convert.\n * @returns {string} The converted pattern.\n */\nfunction convertIgnorePatternToMinimatch(pattern) {\n\tconst isNegated = pattern.startsWith(\"!\");\n\tconst negatedPrefix = isNegated ? \"!\" : \"\";\n\tconst patternToTest = (isNegated ? pattern.slice(1) : pattern).trimEnd();\n\n\t// special cases\n\tif ([\"\", \"**\", \"/**\", \"**/\"].includes(patternToTest)) {\n\t\treturn `${negatedPrefix}${patternToTest}`;\n\t}\n\n\tconst firstIndexOfSlash = patternToTest.indexOf(\"/\");\n\n\tconst matchEverywherePrefix =\n\t\tfirstIndexOfSlash < 0 || firstIndexOfSlash === patternToTest.length - 1\n\t\t\t? \"**/\"\n\t\t\t: \"\";\n\n\tconst patternWithoutLeadingSlash =\n\t\tfirstIndexOfSlash === 0 ? patternToTest.slice(1) : patternToTest;\n\n\t/*\n\t * Escape `{` and `(` because in gitignore patterns they are just\n\t * literal characters without any specific syntactic meaning,\n\t * while in minimatch patterns they can form brace expansion or extglob syntax.\n\t *\n\t * For example, gitignore pattern `src/{a,b}.js` ignores file `src/{a,b}.js`.\n\t * But, the same minimatch pattern `src/{a,b}.js` ignores files `src/a.js` and `src/b.js`.\n\t * Minimatch pattern `src/\\{a,b}.js` is equivalent to gitignore pattern `src/{a,b}.js`.\n\t */\n\tconst escapedPatternWithoutLeadingSlash =\n\t\tpatternWithoutLeadingSlash.replaceAll(\n\t\t\t/(?=((?:\\\\.|[^{(])*))\\1([{(])/guy,\n\t\t\t\"$1\\\\$2\",\n\t\t);\n\n\tconst matchInsideSuffix = patternToTest.endsWith(\"/**\") ? \"/*\" : \"\";\n\n\treturn `${negatedPrefix}${matchEverywherePrefix}${escapedPatternWithoutLeadingSlash}${matchInsideSuffix}`;\n}\n\n/**\n * Reads an ignore file and returns an object with the ignore patterns.\n * @param {string} ignoreFilePath The absolute path to the ignore file.\n * @returns {FlatConfig} An object with an `ignores` property that is an array of ignore patterns.\n * @throws {Error} If the ignore file path is not an absolute path.\n */\nfunction includeIgnoreFile(ignoreFilePath) {\n\tif (!path.isAbsolute(ignoreFilePath)) {\n\t\tthrow new Error(\"The ignore file location must be an absolute path.\");\n\t}\n\n\tconst ignoreFile = fs.readFileSync(ignoreFilePath, \"utf8\");\n\tconst lines = ignoreFile.split(/\\r?\\n/u);\n\n\treturn {\n\t\tname: \"Imported .gitignore patterns\",\n\t\tignores: lines\n\t\t\t.map(line => line.trim())\n\t\t\t.filter(line => line && !line.startsWith(\"#\"))\n\t\t\t.map(convertIgnorePatternToMinimatch),\n\t};\n}\n\nexport { convertIgnorePatternToMinimatch, fixupConfigRules, fixupPluginRules, fixupRule, includeIgnoreFile };\n","import gitignore from \"eslint-config-flat-gitignore\";\nimport { findUpSync } from \"find-up-simple\";\nimport { isPackageListed } from \"local-pkg\";\nimport path from \"node:path\";\nimport tseslint from \"typescript-eslint\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { configApp } from \"@adonisjs/eslint-config\";\n\nimport { a11y } from \"./configs/a11y\";\nimport { comments } from \"./configs/comments\";\nimport { disables } from \"./configs/disables\";\nimport { formatters } from \"./configs/formatters\";\nimport { ignores } from \"./configs/ignores\";\nimport { imports } from \"./configs/imports\";\nimport { javascript } from \"./configs/javascript\";\nimport { jsdoc } from \"./configs/jsdoc\";\nimport { node } from \"./configs/node\";\nimport { react } from \"./configs/react\";\nimport { typescriptRelaxed } from \"./configs/typescript-relaxed\";\nimport { typescriptStrict } from \"./configs/typescript-strict\";\nimport { unicorn } from \"./configs/unicorn\";\n\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-call\nconst builtinAdonisConfig: ConfigWithExtends[] = configApp();\n\nconst adonisConfig: ConfigWithExtends[] = [\n ...builtinAdonisConfig,\n ...node(),\n ...imports(),\n {\n rules: {\n \"@typescript-eslint/naming-convention\": [\n \"error\",\n {\n selector: [\"enum\", \"enumMember\", \"class\", \"interface\", \"typeLike\"],\n format: [\"PascalCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n {\n selector: [\"classProperty\", \"classMethod\", \"method\", \"variableLike\"],\n format: [\"camelCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n {\n selector: \"variable\",\n format: [\"camelCase\", \"UPPER_CASE\", \"PascalCase\"],\n leadingUnderscore: \"allow\",\n trailingUnderscore: \"allow\",\n },\n ],\n },\n },\n];\n\nconst nestjsConfig: ConfigWithExtends[] = [\n ...node(),\n ...unicorn(),\n ...typescriptStrict(),\n ...imports({ forbidDefaultExport: true }),\n {\n rules: {\n \"no-implicit-coercion\": [\n \"error\",\n {\n allow: [\"+\"],\n },\n ],\n \"unicorn/prefer-top-level-await\": \"off\",\n },\n },\n {\n rules: {\n \"@typescript-eslint/no-extraneous-class\": [\n \"error\",\n {\n allowEmpty: true,\n },\n ],\n },\n files: [\"**/*.module.ts\"],\n },\n];\n\nconst reactConfig = async (): Promise<ConfigWithExtends[]> => [\n ...a11y(),\n ...unicorn(),\n ...typescriptStrict(),\n ...imports({ forbidDefaultExport: true }),\n ...(await react()),\n];\n\nconst configs: ConfigWithExtends[] = [\n gitignore(),\n ...javascript(),\n ...jsdoc(),\n ...comments(),\n ...typescriptRelaxed(),\n];\n\nconst defaultOverrides = [...ignores(), ...formatters(), ...disables()];\n\nexport const solvro = async (...overrides: ConfigWithExtends[]) => {\n const isAdonis = await isPackageListed(\"@adonisjs/core\");\n const isReact = await isPackageListed(\"react\");\n const isNestJs = await isPackageListed(\"@nestjs/core\");\n if (isReact && isAdonis) {\n throw new Error(\"You can't use both Adonis and React in the same project\");\n }\n\n const newConfig: ConfigWithExtends[] = [];\n\n if (isAdonis) {\n newConfig.push(...adonisConfig);\n }\n\n if (isNestJs) {\n newConfig.push(...nestjsConfig);\n }\n\n if (isReact) {\n newConfig.push(...(await reactConfig()));\n }\n\n const tsConfigPath = findUpSync(\"tsconfig.json\", {\n cwd: process.cwd(),\n });\n\n if (tsConfigPath == null) {\n throw new Error(\"No tsconfig.json found\");\n }\n\n const rootDirectory = path.dirname(tsConfigPath);\n\n configs.push({\n languageOptions: {\n parserOptions: {\n projectService: true,\n tsconfigRootDir: rootDirectory,\n },\n },\n });\n\n return tseslint.config(\n ...configs,\n ...newConfig,\n ...defaultOverrides,\n ...overrides,\n );\n};\n","import jsxA11y from \"eslint-plugin-jsx-a11y\";\nimport globals from \"globals\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function a11y(): ConfigWithExtends[] {\n return [\n {\n files: [\"**/*.{js,mjs,cjs,jsx,mjsx,ts,tsx,mtsx}\"],\n ...jsxA11y.flatConfigs.recommended,\n languageOptions: {\n ...jsxA11y.flatConfigs.recommended.languageOptions,\n globals: {\n ...globals.serviceworker,\n ...globals.browser,\n },\n },\n settings: {\n \"jsx-a11y\": {\n components: {\n Input: \"input\",\n Button: \"button\",\n Link: \"a\",\n Label: \"label\",\n Select: \"select\",\n Textarea: \"textarea\",\n },\n attributes: {\n for: [\"htmlFor\", \"for\"],\n },\n },\n },\n },\n ];\n}\n","//@ts-expect-error not working\nexport { default as pluginComments } from \"@eslint-community/eslint-plugin-eslint-comments\";\nexport { default as pluginAntfu } from \"eslint-plugin-antfu\";\nexport { default as pluginImport } from \"eslint-plugin-import\";\nexport { default as pluginNode } from \"eslint-plugin-n\";\nexport { default as pluginUnicorn } from \"eslint-plugin-unicorn\";\nexport { default as pluginUnusedImports } from \"eslint-plugin-unused-imports\";\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginComments } from \"../plugins\";\n\nexport function comments(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/eslint-comments/rules\",\n plugins: {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n \"eslint-comments\": pluginComments,\n },\n rules: {\n \"eslint-comments/no-aggregating-enable\": \"error\",\n \"eslint-comments/no-duplicate-disable\": \"error\",\n \"eslint-comments/no-unlimited-disable\": \"error\",\n \"eslint-comments/no-unused-enable\": \"error\",\n },\n },\n ];\n}\n","import tseslint, { type ConfigWithExtends } from \"typescript-eslint\";\n\nimport { GLOB_SRC, GLOB_SRC_EXT } from \"../globs\";\n\nexport function disables(): ConfigWithExtends[] {\n return [\n {\n files: [`**/scripts/${GLOB_SRC}`],\n name: \"solvro/disables/scripts\",\n rules: {\n \"antfu/no-top-level-await\": \"off\",\n \"no-console\": \"off\",\n \"@typescript-eslint/explicit-function-return-type\": \"off\",\n },\n },\n {\n rules: {\n \"prettier/prettier\": \"off\",\n },\n },\n {\n files: [`**/cli/${GLOB_SRC}`, `**/cli.${GLOB_SRC_EXT}`],\n name: \"solvro/disables/cli\",\n rules: {\n \"antfu/no-top-level-await\": \"off\",\n \"no-console\": \"off\",\n },\n },\n {\n files: [\"**/bin/**/*\", `**/bin.${GLOB_SRC_EXT}`],\n name: \"solvro/disables/bin\",\n rules: {\n \"antfu/no-import-dist\": \"off\",\n \"antfu/no-import-node-modules-by-path\": \"off\",\n },\n },\n {\n files: [\"**/*.d.?([cm])ts\"],\n name: \"solvro/disables/dts\",\n rules: {\n \"eslint-comments/no-unlimited-disable\": \"off\",\n \"import-x/no-duplicates\": \"off\",\n \"no-restricted-syntax\": \"off\",\n \"unused-imports/no-unused-vars\": \"off\",\n },\n },\n {\n files: [\"**/*.js\", \"**/*.cjs\"],\n name: \"solvro/disables/cjs\",\n rules: {\n \"@typescript-eslint/no-require-imports\": \"off\",\n },\n },\n {\n files: [`**/*.config.${GLOB_SRC_EXT}`, `**/*.config.*.${GLOB_SRC_EXT}`],\n name: \"solvro/disables/config-files\",\n rules: {\n \"antfu/no-top-level-await\": \"off\",\n \"no-console\": \"off\",\n \"@typescript-eslint/explicit-function-return-type\": \"off\",\n },\n },\n {\n files: [\"**/*.js\"],\n extends: [tseslint.configs.disableTypeChecked],\n },\n ];\n}\n","export const GLOB_SRC_EXT = \"?([cm])[jt]s?(x)\";\nexport const GLOB_SRC = \"**/*.?([cm])[jt]s?(x)\";\n\nexport const GLOB_JS = \"**/*.?([cm])js\";\nexport const GLOB_JSX = \"**/*.?([cm])jsx\";\n\nexport const GLOB_TS = \"**/*.?([cm])ts\";\nexport const GLOB_TSX = \"**/*.?([cm])tsx\";\n\nexport const GLOB_EXCLUDE = [\n \"**/node_modules\",\n \"**/dist\",\n \"**/package-lock.json\",\n \"**/yarn.lock\",\n \"**/pnpm-lock.yaml\",\n \"**/bun.lockb\",\n \"**/build\",\n \"**/output\",\n \"**/coverage\",\n \"**/temp\",\n \"**/.temp\",\n \"**/tmp\",\n \"**/.tmp\",\n \"**/.history\",\n \"**/.vitepress/cache\",\n \"**/.nuxt\",\n \"**/.next\",\n \"**/.svelte-kit\",\n \"**/.vercel\",\n \"**/.changeset\",\n \"**/.idea\",\n \"**/.cache\",\n \"**/.output\",\n \"**/.vite-inspect\",\n \"**/.yarn\",\n \"**/vite.config.*.timestamp-*\",\n\n \"**/CHANGELOG*.md\",\n \"**/*.min.*\",\n \"**/LICENSE*\",\n \"**/__snapshots__\",\n \"**/auto-import?(s).d.ts\",\n \"**/components.d.ts\",\n];\n","import prettierConfig from \"eslint-config-prettier\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function formatters(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/prettier\",\n rules: {\n ...prettierConfig.rules,\n curly: \"error\",\n },\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { GLOB_EXCLUDE } from \"../globs\";\n\nexport function ignores(): ConfigWithExtends[] {\n return [\n {\n ignores: [...GLOB_EXCLUDE],\n name: \"solvro/ignores\",\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu, pluginImport } from \"../plugins\";\n\nconst forbiddenUiLibraries = [\n \"@headlessui/react\",\n \"@mui/material\",\n \"@chakra-ui/react\",\n \"@chakra-ui/core\",\n \"@nextui-org/react\",\n \"react-bootstrap\",\n \"antd\",\n];\n\nexport function imports({\n forbidDefaultExport = true,\n} = {}): ConfigWithExtends[] {\n const config = [\n pluginImport.flatConfigs.typescript,\n {\n name: \"solvro/imports/rules\",\n plugins: {\n antfu: pluginAntfu,\n },\n\n rules: {\n \"antfu/import-dedupe\": \"error\",\n \"antfu/no-import-dist\": \"error\",\n \"antfu/no-import-node-modules-by-path\": \"error\",\n\n ...(pluginImport.flatConfigs.recommended\n .rules as ConfigWithExtends[\"rules\"]),\n \"import/no-dynamic-require\": \"warn\",\n \"import/no-unresolved\": \"off\",\n \"import/consistent-type-specifier-style\": \"warn\",\n \"@typescript-eslint/no-restricted-imports\": [\n \"error\",\n {\n paths: [\n {\n name: \"axios\",\n message: \"Please use fetch instead\",\n },\n ...forbiddenUiLibraries.map((library) => ({\n name: library,\n message: `Please use ui.shadcn.com components instead.`,\n })),\n ],\n },\n ],\n },\n },\n ] satisfies ConfigWithExtends[];\n\n if (forbidDefaultExport) {\n config.push(\n {\n rules: { \"import/no-default-export\": \"error\" },\n },\n {\n files: [\n \"tsup.config.*\",\n \"eslint.config.*\",\n \".commitlintrc.*\",\n \"knip.*\",\n \"next.config.*\",\n \"commitlint.config.*\",\n \".releaserc.*\",\n \"vitest.config.*\",\n \"playwright.config.*\",\n ],\n rules: {\n \"import/no-default-export\": \"off\",\n },\n },\n );\n }\n\n return config;\n}\n","import eslint from \"@eslint/js\";\nimport globals from \"globals\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu, pluginUnusedImports } from \"../plugins\";\n\nexport function javascript(): ConfigWithExtends[] {\n return [\n {\n languageOptions: {\n ecmaVersion: 2022,\n globals: {\n ...globals.browser,\n ...globals.es2021,\n ...globals.node,\n document: \"readonly\",\n navigator: \"readonly\",\n window: \"readonly\",\n },\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n ecmaVersion: 2022,\n sourceType: \"module\",\n },\n sourceType: \"module\",\n },\n linterOptions: {\n reportUnusedDisableDirectives: true,\n },\n name: \"solvro/javascript/setup\",\n },\n {\n name: \"solvro/javascript/rules\",\n plugins: {\n antfu: pluginAntfu,\n \"unused-imports\": pluginUnusedImports,\n },\n rules: {\n ...eslint.configs.recommended.rules,\n \"accessor-pairs\": [\n \"error\",\n { enforceForClassMembers: true, setWithoutGet: true },\n ],\n curly: \"error\",\n \"array-callback-return\": \"error\",\n \"block-scoped-var\": \"error\",\n \"constructor-super\": \"error\",\n \"default-case-last\": \"error\",\n \"dot-notation\": [\"error\", { allowKeywords: true }],\n eqeqeq: [\"error\", \"smart\"],\n \"new-cap\": [\n \"error\",\n { capIsNew: false, newIsCap: true, properties: true },\n ],\n \"no-alert\": \"error\",\n \"no-array-constructor\": \"error\",\n \"no-async-promise-executor\": \"error\",\n \"no-caller\": \"error\",\n \"no-case-declarations\": \"error\",\n \"no-class-assign\": \"error\",\n \"no-compare-neg-zero\": \"error\",\n \"no-cond-assign\": [\"error\", \"always\"],\n \"no-console\": [\"error\", { allow: [\"warn\", \"error\"] }],\n \"no-const-assign\": \"error\",\n \"no-control-regex\": \"error\",\n \"no-debugger\": \"error\",\n \"no-delete-var\": \"error\",\n \"no-dupe-args\": \"error\",\n \"no-dupe-class-members\": \"error\",\n \"no-dupe-keys\": \"error\",\n \"no-duplicate-case\": \"error\",\n \"no-empty\": [\"error\", { allowEmptyCatch: true }],\n \"no-empty-character-class\": \"error\",\n \"no-empty-pattern\": \"error\",\n \"no-eval\": \"error\",\n \"no-ex-assign\": \"error\",\n \"no-extend-native\": \"error\",\n \"no-extra-bind\": \"error\",\n \"no-extra-boolean-cast\": \"error\",\n \"no-fallthrough\": \"error\",\n \"no-func-assign\": \"error\",\n \"no-global-assign\": \"error\",\n \"no-implied-eval\": \"error\",\n \"no-implicit-coercion\": \"error\",\n \"no-import-assign\": \"error\",\n \"no-invalid-regexp\": \"error\",\n \"no-irregular-whitespace\": \"error\",\n \"no-iterator\": \"error\",\n \"no-labels\": [\"error\", { allowLoop: false, allowSwitch: false }],\n \"no-lone-blocks\": \"error\",\n \"no-loss-of-precision\": \"error\",\n \"no-misleading-character-class\": \"error\",\n \"no-multi-str\": \"error\",\n \"no-new\": \"error\",\n \"no-new-func\": \"error\",\n \"no-new-native-nonconstructor\": \"error\",\n \"no-new-wrappers\": \"error\",\n \"no-obj-calls\": \"error\",\n \"no-octal\": \"error\",\n \"no-octal-escape\": \"error\",\n \"no-proto\": \"error\",\n \"no-prototype-builtins\": \"error\",\n \"no-redeclare\": [\"error\", { builtinGlobals: false }],\n \"no-regex-spaces\": \"error\",\n \"no-restricted-globals\": [\n \"error\",\n { message: \"Use `globalThis` instead.\", name: \"global\" },\n { message: \"Use `globalThis` instead.\", name: \"self\" },\n ],\n \"no-restricted-properties\": [\n \"error\",\n {\n message:\n \"Use `Object.getPrototypeOf` or `Object.setPrototypeOf` instead.\",\n property: \"__proto__\",\n },\n {\n message: \"Use `Object.defineProperty` instead.\",\n property: \"__defineGetter__\",\n },\n {\n message: \"Use `Object.defineProperty` instead.\",\n property: \"__defineSetter__\",\n },\n {\n message: \"Use `Object.getOwnPropertyDescriptor` instead.\",\n property: \"__lookupGetter__\",\n },\n {\n message: \"Use `Object.getOwnPropertyDescriptor` instead.\",\n property: \"__lookupSetter__\",\n },\n ],\n \"no-restricted-syntax\": [\n \"error\",\n \"TSEnumDeclaration[const=true]\",\n \"TSExportAssignment\",\n ],\n \"no-self-assign\": [\"error\", { props: true }],\n \"no-self-compare\": \"error\",\n \"no-sequences\": \"error\",\n \"no-shadow-restricted-names\": \"error\",\n \"no-sparse-arrays\": \"error\",\n \"no-template-curly-in-string\": \"error\",\n \"no-this-before-super\": \"error\",\n \"no-throw-literal\": \"error\",\n \"no-undef-init\": \"error\",\n \"no-unexpected-multiline\": \"error\",\n \"no-unmodified-loop-condition\": \"error\",\n \"no-unneeded-ternary\": [\"error\", { defaultAssignment: false }],\n \"no-unreachable\": \"error\",\n \"no-unreachable-loop\": \"error\",\n \"no-unsafe-finally\": \"error\",\n \"no-unsafe-negation\": \"error\",\n \"no-unused-expressions\": [\n \"error\",\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n\n \"no-useless-backreference\": \"error\",\n \"no-useless-call\": \"error\",\n \"no-useless-catch\": \"error\",\n \"no-useless-computed-key\": \"error\",\n \"no-useless-constructor\": \"error\",\n \"no-useless-rename\": \"error\",\n \"no-useless-return\": \"error\",\n \"no-var\": \"error\",\n \"no-with\": \"error\",\n \"object-shorthand\": [\n \"error\",\n \"always\",\n {\n avoidQuotes: true,\n ignoreConstructors: false,\n },\n ],\n \"one-var\": [\"error\", { initialized: \"never\" }],\n \"prefer-arrow-callback\": [\n \"error\",\n {\n allowNamedFunctions: false,\n allowUnboundThis: true,\n },\n ],\n \"prefer-const\": [\n \"error\",\n {\n destructuring: \"all\",\n ignoreReadBeforeAssign: true,\n },\n ],\n \"prefer-exponentiation-operator\": \"error\",\n \"prefer-promise-reject-errors\": \"error\",\n \"prefer-regex-literals\": [\"error\", { disallowRedundantWrapping: true }],\n \"prefer-rest-params\": \"error\",\n \"prefer-spread\": \"error\",\n \"prefer-template\": \"error\",\n \"symbol-description\": \"error\",\n \"unicode-bom\": [\"error\", \"never\"],\n \"unused-imports/no-unused-imports\": \"error\",\n \"unused-imports/no-unused-vars\": [\n \"error\",\n {\n args: \"after-used\",\n argsIgnorePattern: \"^_\",\n ignoreRestSiblings: true,\n vars: \"all\",\n varsIgnorePattern: \"^_\",\n },\n ],\n \"use-isnan\": [\n \"error\",\n { enforceForIndexOf: true, enforceForSwitchCase: true },\n ],\n \"valid-typeof\": [\"error\", { requireStringLiterals: true }],\n \"vars-on-top\": \"error\",\n yoda: [\"error\", \"never\"],\n },\n },\n ];\n}\n","import jsdocPlugin from \"eslint-plugin-jsdoc\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function jsdoc(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/jsdoc/rules\",\n plugins: {\n jsdoc: jsdocPlugin,\n },\n rules: {\n \"jsdoc/check-access\": \"warn\",\n \"jsdoc/check-param-names\": \"warn\",\n \"jsdoc/check-property-names\": \"warn\",\n \"jsdoc/check-types\": \"warn\",\n \"jsdoc/empty-tags\": \"warn\",\n \"jsdoc/implements-on-classes\": \"warn\",\n \"jsdoc/no-defaults\": \"warn\",\n \"jsdoc/no-multi-asterisks\": \"warn\",\n \"jsdoc/require-param-name\": \"warn\",\n \"jsdoc/require-property\": \"warn\",\n \"jsdoc/require-property-description\": \"warn\",\n \"jsdoc/require-property-name\": \"warn\",\n \"jsdoc/require-returns-check\": \"warn\",\n \"jsdoc/require-returns-description\": \"warn\",\n \"jsdoc/require-yields-check\": \"warn\",\n },\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginNode } from \"../plugins\";\n\nexport function node(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/node/rules\",\n plugins: {\n node: pluginNode,\n },\n rules: {\n \"node/handle-callback-err\": [\"error\", \"^(err|error)$\"],\n \"node/no-deprecated-api\": \"error\",\n \"node/no-exports-assign\": \"error\",\n \"node/no-new-require\": \"error\",\n \"node/no-path-concat\": \"error\",\n \"node/prefer-global/buffer\": [\"error\"],\n \"node/prefer-global/process\": [\"error\"],\n \"node/process-exit-as-throw\": \"error\",\n },\n },\n ];\n}\n","import pluginQuery from \"@tanstack/eslint-plugin-query\";\nimport pluginReact from \"eslint-plugin-react\";\nimport pluginReactHooks from \"eslint-plugin-react-hooks\";\nimport { isPackageExists } from \"local-pkg\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nconst nextJsPackages = [\"next\"];\n\nexport async function react(): Promise<ConfigWithExtends[]> {\n const isUsingNext = nextJsPackages.some((index) => isPackageExists(index));\n\n const nextjsConfig: ConfigWithExtends[] = [];\n\n if (isUsingNext) {\n const nextPlugin = await import(\"@next/eslint-plugin-next\").then(\n (d) => d.default,\n );\n\n nextjsConfig.push(\n {\n name: \"solvro/next/setup\",\n plugins: {\n \"@next/next\": nextPlugin,\n },\n\n rules: nextPlugin.configs.recommended.rules,\n },\n {\n files: [\n \"**/app/**/{page,loading,layout,template,error,not-found,unauthorized,forbidden,default,robots,sitemap}.{js,jsx,ts,tsx}\",\n \"**/pages/**/*.{js,jsx,ts,tsx}\",\n ],\n name: \"solvro/next/pages\",\n rules: {\n \"import/no-default-export\": \"off\",\n },\n },\n );\n }\n\n return [\n {\n name: \"solvro/react/setup\",\n plugins: {\n react: pluginReact,\n\n \"react-hooks\": pluginReactHooks,\n },\n },\n ...nextjsConfig,\n {\n files: [\"**/*.{js,jsx,mjs,cjs,ts,tsx}\"],\n languageOptions: {\n parserOptions: {\n ecmaFeatures: {\n jsx: true,\n },\n },\n sourceType: \"module\",\n },\n settings: {\n react: {\n version: \"detect\",\n },\n },\n name: \"solvro/react/rules\",\n rules: {\n ...pluginReact.configs.flat.recommended.rules,\n ...pluginReact.configs.flat[\"jsx-runtime\"].rules,\n \"react/no-danger\": \"warn\",\n \"react/jsx-no-leaked-render\": \"warn\",\n // recommended rules react-hooks\n \"react-hooks/exhaustive-deps\": \"warn\",\n \"react-hooks/rules-of-hooks\": \"error\",\n \"react/jsx-no-useless-fragment\": \"error\",\n \"react/function-component-definition\": [\n \"error\",\n {\n unnamedComponents: \"arrow-function\",\n namedComponents: \"function-declaration\",\n },\n ],\n \"react/hook-use-state\": [\n \"error\",\n {\n allowDestructuredState: true,\n },\n ],\n \"react/no-array-index-key\": \"warn\",\n },\n },\n ...pluginQuery.configs[\"flat/recommended\"],\n {\n name: \"solvro/react/disables\",\n files: [\"**/components/ui/*.{jsx,tsx}\"],\n rules: {\n \"react/prop-types\": \"off\",\n \"no-shadow\": \"off\",\n \"@typescript-eslint/no-shadow\": \"off\",\n \"@typescript-eslint/restrict-template-expressions\": \"off\",\n \"unicorn/no-document-cookie\": \"off\",\n \"@typescript-eslint/no-redeclare\": \"off\",\n \"@typescript-eslint/no-deprecated\": \"off\",\n },\n },\n ];\n}\n","import tseslint from \"typescript-eslint\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nexport function typescriptRelaxed(): ConfigWithExtends[] {\n return [\n ...tseslint.configs.recommendedTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n {\n name: \"solvro/typescript-relaxed/rules\",\n rules: {\n \"@typescript-eslint/no-unsafe-return\": \"off\",\n \"@typescript-eslint/require-await\": \"off\",\n \"@typescript-eslint/no-misused-promises\": [\n \"error\",\n {\n checksVoidReturn: false,\n },\n ],\n \"no-useless-constructor\": \"off\",\n \"@typescript-eslint/no-useless-constructor\": \"error\",\n \"unused-imports/no-unused-vars\": \"off\",\n \"@typescript-eslint/no-unused-vars\": [\n \"error\",\n {\n args: \"all\",\n argsIgnorePattern: \"^_\",\n destructuredArrayIgnorePattern: \"^_\",\n varsIgnorePattern: \"^_\",\n ignoreRestSiblings: true,\n },\n ],\n \"@typescript-eslint/no-empty-object-type\": \"off\",\n \"@typescript-eslint/no-unnecessary-condition\": \"warn\",\n \"@typescript-eslint/no-non-null-assertion\": \"error\",\n \"@typescript-eslint/no-unnecessary-template-expression\": \"error\",\n \"@typescript-eslint/strict-boolean-expressions\": [\n \"error\",\n {\n allowNullableObject: false,\n },\n ],\n },\n },\n ];\n}\n","import tseslint from \"typescript-eslint\";\nimport type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginAntfu } from \"../plugins\";\n\nexport function typescriptStrict(): ConfigWithExtends[] {\n return [\n ...tseslint.configs.strictTypeChecked,\n ...tseslint.configs.stylisticTypeChecked,\n {\n name: \"solvro/typescript-strict/setup\",\n plugins: {\n antfu: pluginAntfu,\n },\n },\n {\n files: [\"**/*.{ts,tsx}\"],\n name: \"solvro/typescript-strict/rules\",\n rules: {\n \"@typescript-eslint/ban-ts-comment\": [\n \"error\",\n { \"ts-expect-error\": \"allow-with-description\" },\n ],\n \"@typescript-eslint/consistent-type-definitions\": [\n \"error\",\n \"interface\",\n ],\n \"@typescript-eslint/consistent-type-imports\": [\n \"error\",\n {\n disallowTypeAnnotations: false,\n prefer: \"type-imports\",\n },\n ],\n \"@typescript-eslint/method-signature-style\": [\"error\", \"property\"], // https://www.totaltypescript.com/method-shorthand-syntax-considered-harmful\n \"@typescript-eslint/no-dupe-class-members\": \"error\",\n \"@typescript-eslint/no-empty-object-type\": [\n \"error\",\n { allowInterfaces: \"always\" },\n ],\n \"@typescript-eslint/no-import-type-side-effects\": \"error\",\n \"@typescript-eslint/no-redeclare\": [\"error\", { builtinGlobals: false }],\n \"@typescript-eslint/no-require-imports\": \"error\",\n \"@typescript-eslint/no-unused-expressions\": [\n \"error\",\n {\n allowShortCircuit: true,\n allowTaggedTemplates: true,\n allowTernary: true,\n },\n ],\n \"@typescript-eslint/no-use-before-define\": [\n \"error\",\n { classes: false, functions: false, variables: true },\n ],\n \"@typescript-eslint/no-wrapper-object-types\": \"error\",\n // prevent unnecessary use of void operator\n \"@typescript-eslint/no-meaningless-void-operator\": \"error\",\n // \"using non-null assertions cancels the benefits of the strict\n // null-checking mode.\"\n // warn when one of the types in union / intersection overrides others\n \"@typescript-eslint/no-redundant-type-constituents\": \"warn\",\n // prevent variables shadowing\n \"no-shadow\": \"error\",\n \"@typescript-eslint/no-shadow\": \"error\",\n // prevent assignment of this, signals a wrong usage of it\n \"@typescript-eslint/no-this-alias\": \"error\",\n // prevent throwing non-error\n \"no-throw-literal\": \"off\",\n\n // prevent unnecessary explicitly adding a default type argument\n \"@typescript-eslint/no-unnecessary-type-arguments\": \"error\",\n // prevent unnecessary assertions that won't change the outcome\n \"@typescript-eslint/no-unnecessary-type-assertion\": \"error\",\n // prevent extending default types\n \"@typescript-eslint/no-unnecessary-type-constraint\": \"error\",\n // force typing out function arguments\n \"@typescript-eslint/no-unsafe-argument\": \"error\",\n // prevent usage of any via reassigning\n \"@typescript-eslint/no-unsafe-assignment\": \"error\",\n // prevent usage of any via calling it\n \"@typescript-eslint/no-unsafe-call\": \"error\",\n // prevent usage of any via using it's members\n \"@typescript-eslint/no-unsafe-member-access\": \"error\",\n // prevent reverting any from functions\n \"@typescript-eslint/no-unsafe-return\": \"error\",\n // prevent unused expressions\n \"no-unused-expressions\": \"off\",\n // var<'string'> = 'string' -> var = 'string' as const\n \"@typescript-eslint/prefer-as-const\": \"error\",\n // force initializing enums\n \"@typescript-eslint/prefer-enum-initializers\": \"error\",\n // prefer for x of obj to for let i = 0...\n \"@typescript-eslint/prefer-for-of\": \"error\",\n // prefer includes() to indexOf()\n \"@typescript-eslint/prefer-includes\": \"error\",\n // use literals for enum initialization\n \"@typescript-eslint/prefer-literal-enum-member\": \"error\",\n // prefer safe cascade of a value when dealing with undefined or null\n \"@typescript-eslint/prefer-nullish-coalescing\": \"error\",\n // prefer optional chaining (a?.b)\n \"@typescript-eslint/prefer-optional-chain\": \"error\",\n // prefer using type parameter for Array.reduce\n \"@typescript-eslint/prefer-reduce-type-parameter\": \"error\",\n // prefer RegExp#exec when no /g flag in regex\n \"@typescript-eslint/prefer-regexp-exec\": \"error\",\n // enforce `this` as a type when stating type for a method\n \"@typescript-eslint/prefer-return-this-type\": \"error\",\n // enforce startsWith to indexOf === 0\n \"@typescript-eslint/prefer-string-starts-ends-with\": \"error\",\n // prevents default behavior of .sort() - which is confusing\n \"@typescript-eslint/require-array-sort-compare\": \"error\",\n // no async functions without awaits in body\n \"require-await\": \"off\",\n \"@typescript-eslint/require-await\": \"error\",\n // prevent number + string\n \"@typescript-eslint/restrict-plus-operands\": \"error\",\n // only allow string in templates\n \"@typescript-eslint/restrict-template-expressions\": \"error\",\n // prevent returning await\n \"no-return-await\": \"off\",\n \"@typescript-eslint/return-await\": \"error\",\n // only booleans in ifs and whiles\n \"@typescript-eslint/strict-boolean-expressions\": \"error\",\n // check if all paths are followed in code\n \"@typescript-eslint/switch-exhaustiveness-check\": \"error\",\n \"dot-notation\": \"off\",\n \"no-implied-eval\": \"off\",\n \"@typescript-eslint/await-thenable\": \"error\",\n \"@typescript-eslint/dot-notation\": [\"error\", { allowKeywords: true }],\n \"@typescript-eslint/no-floating-promises\": \"error\",\n \"@typescript-eslint/no-for-in-array\": \"error\",\n \"@typescript-eslint/no-implied-eval\": \"error\",\n \"@typescript-eslint/no-misused-promises\": \"error\",\n \"@typescript-eslint/promise-function-async\": \"error\",\n \"@typescript-eslint/unbound-method\": \"error\",\n \"no-restricted-imports\": \"off\",\n },\n },\n ];\n}\n","import type { ConfigWithExtends } from \"typescript-eslint\";\n\nimport { pluginUnicorn } from \"../plugins\";\n\nexport function unicorn(): ConfigWithExtends[] {\n return [\n {\n name: \"solvro/unicorn/rules\",\n plugins: {\n unicorn: pluginUnicorn,\n },\n rules: {\n ...pluginUnicorn.configs[\"flat/recommended\"].rules,\n \"unicorn/no-array-reduce\": \"off\",\n \"unicorn/no-null\": \"off\",\n \"unicorn/no-useless-switch-case\": \"off\",\n \"unicorn/prefer-global-this\": \"off\",\n \"unicorn/prevent-abbreviations\": [\n \"error\",\n {\n replacements: {\n env: false,\n envs: false,\n props: false,\n prop: false,\n ref: false,\n },\n allowList: {\n e2e: true,\n },\n ignore: [String.raw`e2e`],\n },\n ],\n },\n },\n ];\n}\n"],"mappings":"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","names":["fs","path","process","process","path","fs","ignores","findUpSync","path","tseslint","default","default","default","globals","globals","default","default","tseslint","tseslint","tseslint","default","default","findUpSync","path","tseslint"]}
@@ -1,5 +1,5 @@
1
1
  declare const _default: {
2
- readonly importOrder: readonly ["^@assets/(.*)$", "<THIRD_PARTY_MODULES>", "^@japa/(.*)$", "^@adonisjs/(.*)$", "^@/(.*)$", "^#(.*)$", "^[./]"];
2
+ readonly importOrder: readonly ["^@assets/(.*)$", "<THIRD_PARTY_MODULES>", "^@japa/(.*)$", "^@adonisjs/(.*)$", "^@nestjs/(.*)$", "^@/(.*)$", "^#(.*)$", "^[./]"];
3
3
  readonly importOrderSeparation: true;
4
4
  readonly importOrderSortSpecifiers: true;
5
5
  readonly importOrderParserPlugins: readonly ["typescript", "jsx", "decorators-legacy"];
@@ -16,6 +16,7 @@ var prettier_default = {
16
16
  "<THIRD_PARTY_MODULES>",
17
17
  "^@japa/(.*)$",
18
18
  "^@adonisjs/(.*)$",
19
+ "^@nestjs/(.*)$",
19
20
  "^@/(.*)$",
20
21
  "^#(.*)$",
21
22
  "^[./]"
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/prettier/index.ts"],"sourcesContent":["import type { Options } from \"prettier\";\n\n/**\n * Some of Prettier's defaults can be overridden by an EditorConfig file. We\n * define those here to ensure that doesn't happen.\n *\n * See: https://github.com/prettier/prettier/blob/main/docs/configuration.md#editorconfig\n */\n\nconst overridableDefaults = {\n arrowParens: \"always\",\n endOfLine: \"lf\",\n printWidth: 80,\n quoteProps: \"as-needed\",\n semi: true,\n tabWidth: 2,\n trailingComma: \"all\",\n useTabs: false,\n} as const;\n\nexport default {\n ...overridableDefaults,\n importOrder: [\n \"^@assets/(.*)$\",\n \"<THIRD_PARTY_MODULES>\",\n \"^@japa/(.*)$\",\n \"^@adonisjs/(.*)$\",\n \"^@/(.*)$\",\n \"^#(.*)$\",\n \"^[./]\",\n ],\n importOrderSeparation: true,\n importOrderSortSpecifiers: true,\n importOrderParserPlugins: [\"typescript\", \"jsx\", \"decorators-legacy\"],\n plugins: [\n \"prettier-plugin-packagejson\",\n \"@trivago/prettier-plugin-sort-imports\",\n \"prettier-plugin-tailwindcss\",\n ],\n singleQuote: false,\n} as const satisfies Options;\n"],"mappings":";AASA,IAAM,sBAAsB;AAAA,EAC1B,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,UAAU;AAAA,EACV,eAAe;AAAA,EACf,SAAS;AACX;AAEA,IAAO,mBAAQ;AAAA,EACb,GAAG;AAAA,EACH,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,uBAAuB;AAAA,EACvB,2BAA2B;AAAA,EAC3B,0BAA0B,CAAC,cAAc,OAAO,mBAAmB;AAAA,EACnE,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AACf;","names":[]}
1
+ {"version":3,"sources":["../../src/prettier/index.ts"],"sourcesContent":["import type { Options } from \"prettier\";\n\n/**\n * Some of Prettier's defaults can be overridden by an EditorConfig file. We\n * define those here to ensure that doesn't happen.\n *\n * See: https://github.com/prettier/prettier/blob/main/docs/configuration.md#editorconfig\n */\n\nconst overridableDefaults = {\n arrowParens: \"always\",\n endOfLine: \"lf\",\n printWidth: 80,\n quoteProps: \"as-needed\",\n semi: true,\n tabWidth: 2,\n trailingComma: \"all\",\n useTabs: false,\n} as const;\n\nexport default {\n ...overridableDefaults,\n importOrder: [\n \"^@assets/(.*)$\",\n \"<THIRD_PARTY_MODULES>\",\n \"^@japa/(.*)$\",\n \"^@adonisjs/(.*)$\",\n \"^@nestjs/(.*)$\",\n \"^@/(.*)$\",\n \"^#(.*)$\",\n \"^[./]\",\n ],\n importOrderSeparation: true,\n importOrderSortSpecifiers: true,\n importOrderParserPlugins: [\"typescript\", \"jsx\", \"decorators-legacy\"],\n plugins: [\n \"prettier-plugin-packagejson\",\n \"@trivago/prettier-plugin-sort-imports\",\n \"prettier-plugin-tailwindcss\",\n ],\n singleQuote: false,\n} as const satisfies Options;\n"],"mappings":";AASA,IAAM,sBAAsB;AAAA,EAC1B,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,UAAU;AAAA,EACV,eAAe;AAAA,EACf,SAAS;AACX;AAEA,IAAO,mBAAQ;AAAA,EACb,GAAG;AAAA,EACH,aAAa;AAAA,IACX;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,uBAAuB;AAAA,EACvB,2BAA2B;AAAA,EAC3B,0BAA0B,CAAC,cAAc,OAAO,mBAAmB;AAAA,EACnE,SAAS;AAAA,IACP;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,aAAa;AACf;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solvro/config",
3
- "version": "1.13.6",
3
+ "version": "1.13.7-beta.1",
4
4
  "description": "Solvro's engineering style guide",
5
5
  "keywords": [
6
6
  "eslint",