@solvro/config 2.0.5 → 2.0.6

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.
@@ -31,7 +31,7 @@ var import_picocolors = __toESM(require("picocolors"), 1);
31
31
  // package.json
32
32
  var package_default = {
33
33
  name: "@solvro/config",
34
- version: "2.0.4",
34
+ version: "2.0.5",
35
35
  description: "Solvro's engineering style guide",
36
36
  keywords: [
37
37
  "eslint",
@@ -90,67 +90,67 @@ var package_default = {
90
90
  },
91
91
  prettier: "./dist/prettier/index.js",
92
92
  dependencies: {
93
- "@adonisjs/eslint-config": "^2.1.0",
93
+ "@adonisjs/eslint-config": "^2.1.2",
94
94
  "@clack/prompts": "^0.11.0",
95
95
  "@commitlint/config-conventional": "^19.8.1",
96
- "@darraghor/eslint-plugin-nestjs-typed": "^6.7.0",
96
+ "@darraghor/eslint-plugin-nestjs-typed": "^6.7.1",
97
97
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
98
- "@eslint/js": "^9.30.1",
99
- "@tanstack/eslint-plugin-query": "^5.81.2",
98
+ "@eslint/js": "^9.34.0",
99
+ "@tanstack/eslint-plugin-query": "^5.83.1",
100
100
  "@trivago/prettier-plugin-sort-imports": "^5.2.2",
101
- "@typescript-eslint/eslint-plugin": "^8.35.1",
101
+ "@typescript-eslint/eslint-plugin": "^8.41.0",
102
102
  commander: "^14.0.0",
103
103
  "eslint-config-flat-gitignore": "^2.1.0",
104
- "eslint-config-prettier": "^10.1.5",
104
+ "eslint-config-prettier": "^10.1.8",
105
105
  "eslint-plugin-antfu": "^3.1.1",
106
106
  "eslint-plugin-import": "^2.32.0",
107
- "eslint-plugin-jsdoc": "^51.3.3",
107
+ "eslint-plugin-jsdoc": "^54.1.1",
108
108
  "eslint-plugin-jsx-a11y": "^6.10.2",
109
- "eslint-plugin-n": "^17.21.0",
109
+ "eslint-plugin-n": "^17.21.3",
110
110
  "eslint-plugin-react": "^7.37.5",
111
111
  "eslint-plugin-react-hooks": "^5.2.0",
112
- "eslint-plugin-react-refresh": "^0.4.16",
113
- "eslint-plugin-react-you-might-not-need-an-effect": "^0.4.1",
114
- "eslint-plugin-unicorn": "^59.0.1",
115
- "eslint-plugin-unused-imports": "^4.1.4",
112
+ "eslint-plugin-react-refresh": "^0.4.20",
113
+ "eslint-plugin-react-you-might-not-need-an-effect": "^0.4.4",
114
+ "eslint-plugin-unicorn": "^60.0.0",
115
+ "eslint-plugin-unused-imports": "^4.2.0",
116
116
  execa: "^9.6.0",
117
117
  "find-up-simple": "^1.0.1",
118
118
  globals: "^16.3.0",
119
119
  "is-interactive": "^2.0.0",
120
- "local-pkg": "^1.1.1",
120
+ "local-pkg": "^1.1.2",
121
121
  "package-manager-detector": "^1.3.0",
122
122
  picocolors: "^1.1.1",
123
- "prettier-plugin-packagejson": "^2.5.18",
124
- "prettier-plugin-tailwindcss": "^0.6.13",
123
+ "prettier-plugin-packagejson": "^2.5.19",
124
+ "prettier-plugin-tailwindcss": "^0.6.14",
125
125
  semver: "^7.7.2",
126
- "typescript-eslint": "^8.35.1"
126
+ "typescript-eslint": "^8.41.0"
127
127
  },
128
128
  devDependencies: {
129
129
  "@commitlint/cli": "^19.8.1",
130
- "@eslint/config-inspector": "^1.1.0",
131
- "@next/eslint-plugin-next": "^15.3.5",
130
+ "@eslint/config-inspector": "^1.2.0",
131
+ "@next/eslint-plugin-next": "^15.5.2",
132
132
  "@semantic-release/git": "^10.0.1",
133
- "@types/node": "^24.0.10",
133
+ "@types/node": "^24.3.0",
134
134
  "@types/semver": "^7.7.0",
135
135
  "@vitest/coverage-v8": "^3.2.4",
136
136
  "@vitest/ui": "^3.2.4",
137
- eslint: "^9.30.1",
137
+ eslint: "^9.34.0",
138
138
  husky: "^9.1.7",
139
- knip: "^5.61.3",
140
- "lint-staged": "^16.1.2",
139
+ knip: "^5.63.0",
140
+ "lint-staged": "^16.1.5",
141
141
  "pkg-pr-new": "^0.0.58",
142
142
  prettier: "^3.6.2",
143
- "semantic-release": "^24.2.6",
143
+ "semantic-release": "^24.2.7",
144
144
  tsup: "^8.5.0",
145
- tsx: "^4.20.3",
146
- typescript: "^5.8.3",
145
+ tsx: "^4.20.5",
146
+ typescript: "^5.9.2",
147
147
  vitest: "^3.2.4"
148
148
  },
149
149
  peerDependencies: {
150
150
  "@next/eslint-plugin-next": ">=12.3.0 <16.0.0-0",
151
151
  eslint: ">=9.0.0 <10.0.0"
152
152
  },
153
- packageManager: "npm@11.4.2",
153
+ packageManager: "npm@11.5.2",
154
154
  engines: {
155
155
  node: "^20.19.0 || >=22.12.0"
156
156
  },
@@ -205,7 +205,7 @@ var gitRoot = () => {
205
205
 
206
206
  // src/utils/$$.ts
207
207
  var cachedExeca = null;
208
- var $$ = async (...arguments_) => {
208
+ var $$ = (async (...arguments_) => {
209
209
  if (cachedExeca === null) {
210
210
  const { $ } = await import("execa");
211
211
  cachedExeca = $({
@@ -213,7 +213,7 @@ var $$ = async (...arguments_) => {
213
213
  });
214
214
  }
215
215
  return cachedExeca(...arguments_);
216
- };
216
+ });
217
217
 
218
218
  // src/utils/run-if-interactive.ts
219
219
  var import_is_interactive = __toESM(require("is-interactive"), 1);
@@ -240,6 +240,9 @@ var PackageJson = class {
240
240
  hasPackage(package_) {
241
241
  return (0, import_local_pkg.isPackageListed)(package_);
242
242
  }
243
+ async isNextJs() {
244
+ return this.hasPackage("next");
245
+ }
243
246
  async doesSatisfies(package_, version) {
244
247
  await this.load();
245
248
  import_node_assert.default.ok(this.json !== null);
@@ -407,7 +410,7 @@ var installEslint = async (isNonInteractive2 = false) => {
407
410
  await packageJson3.load();
408
411
  await packageJson3.install("eslint", { dev: true, minVersion: ">=9" });
409
412
  const type = await packageJson3.getProjectType();
410
- if (type === "react" && await packageJson3.hasPackage("next")) {
413
+ if (type === "react" && await packageJson3.isNextJs()) {
411
414
  const is15 = await packageJson3.doesSatisfies("next", ">=15");
412
415
  if (!is15) {
413
416
  p3.cancel(
@@ -637,10 +640,22 @@ ${withCommitlint ? commitLintCi() : ""}
637
640
  run: npm run build
638
641
  if: always()`;
639
642
 
643
+ // src/cli/templates/nextjs-ci.ts
644
+ var nextJsCi = () => `
645
+ - name: Setup build cache
646
+ uses: actions/cache@v4
647
+ with:
648
+ path: \${{ github.workspace }}/.next/cache
649
+ key: \${{ runner.os }}-nextjs-\${{ hashFiles('**/package-lock.json') }}-\${{ hashFiles('**/*.ts', '**/*.tsx') }}
650
+ restore-keys: |
651
+ \${{ runner.os }}-nextjs-\${{ hashFiles('**/package-lock.json') }}-
652
+ `;
653
+
640
654
  // src/cli/templates/react-ci.ts
641
655
  var reactCi = ({
642
656
  nodeVersion,
643
- withCommitlint
657
+ withCommitlint,
658
+ usingNextJs
644
659
  }) => `name: CI
645
660
 
646
661
  on:
@@ -662,7 +677,7 @@ jobs:
662
677
  with:
663
678
  node-version: ${nodeVersion}
664
679
  cache: 'npm'
665
-
680
+ ${usingNextJs ? nextJsCi() : ""}
666
681
  - name: Install dependencies
667
682
  run: npm ci
668
683
  ${withCommitlint ? commitLintCi() : ""}
@@ -704,11 +719,13 @@ var installGithubActions = async () => {
704
719
  );
705
720
  }
706
721
  if (type === "react") {
722
+ const usingNextJs = await packageJson4.isNextJs();
707
723
  await fs2.writeFile(
708
724
  import_node_path5.default.join(ghWorkflowsDirectory, "ci.yml"),
709
725
  reactCi({
710
726
  nodeVersion: "22",
711
- withCommitlint
727
+ withCommitlint,
728
+ usingNextJs
712
729
  })
713
730
  );
714
731
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../package.json","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/run-if-interactive.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/nestjs-ci.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 { Command } from \"commander\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\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\n// Types\ninterface CliOptions {\n force?: boolean;\n eslint?: boolean;\n prettier?: boolean;\n ghAction?: boolean;\n commitlint?: boolean;\n all?: boolean;\n}\n\n// CLI setup\nconst program = new Command();\nprogram\n .name(\"@solvro/config\")\n .description(\"Solvro's engineering style guide setup\")\n .version(packageJsonData.version)\n .option(\"-f, --force\", \"Skip git clean check\", false)\n .option(\"--eslint\", \"Install ESLint configuration\", false)\n .option(\"--prettier\", \"Install Prettier configuration\", false)\n .option(\"--gh-action\", \"Install GitHub Actions\", false)\n .option(\"--commitlint\", \"Install Commitlint configuration\", false)\n .option(\"-a, --all\", \"Install all tools\", false);\n\nprogram.parse();\nconst options: CliOptions = program.opts();\n\n// Check if running in non-interactive mode (any CLI flags provided)\nconst isNonInteractive = process.argv.length > 2;\n\nasync function main() {\n if (!isNonInteractive) {\n p.intro(c.bold(c.bgBlue(\" @solvro/config \")));\n }\n\n const userAgent = getUserAgent();\n\n if (userAgent !== \"npm\") {\n const packageManager = userAgent ?? \"unknown\";\n const warningMessage = `\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt z ${c.yellow(packageManager)}'em, ale @solvro/config działa tylko z ${c.yellow(\"npm'em\")}. \n\nSupport dla innych menedżerów pakietów nie jest planowany - chcemy jednolitego stacku technologicznego dla projektów w naszym kochanym kole Solvro.\n\nUżyj zamiast tego npm'a:\n${c.cyan(\"npx @solvro/config\")}`;\n\n if (isNonInteractive) {\n console.error(warningMessage);\n } else {\n p.cancel(warningMessage);\n }\n process.exit(1);\n }\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n console.error(\n \"Repozytorium Git ma niezatwierdzone zmiany. Użyj --force, aby pominąć to sprawdzenie.\",\n );\n process.exit(1);\n }\n\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\n const packageJson = new PackageJson();\n\n // Determine project type automatically\n const projectType = await packageJson.getProjectType();\n\n // Project type confirmation (interactive mode only)\n if (!isNonInteractive) {\n if (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\n if (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\n if (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\n if (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 }\n if (projectType === \"adonis\" || projectType === \"react\") {\n if (isNonInteractive) {\n await packageJson.ensureESM();\n } else {\n if (!(await packageJson.isESM())) {\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 await packageJson.ensureESM();\n }\n }\n }\n\n // Determine which tools to install\n let toolsToInstall: string[] = [];\n\n if (options.all === true) {\n toolsToInstall = [\"eslint\", \"prettier\", \"gh-action\", \"commitlint\"];\n } else if (isNonInteractive) {\n // In non-interactive mode, only install explicitly requested tools\n if (options.eslint === true) {\n toolsToInstall.push(\"eslint\");\n }\n if (options.prettier === true) {\n toolsToInstall.push(\"prettier\");\n }\n if (options.ghAction === true) {\n toolsToInstall.push(\"gh-action\");\n }\n if (options.commitlint === true) {\n toolsToInstall.push(\"commitlint\");\n }\n\n if (toolsToInstall.length === 0) {\n console.error(\n \"Nie wybrano żadnych narzędzi. Użyj --eslint, --prettier, --gh-action, --commitlint, lub --all\",\n );\n process.exit(1);\n }\n } else {\n // Interactive mode\n const 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\n if (p.isCancel(additionalTools) || additionalTools.length === 0) {\n p.cancel(\"Nie wybrano żadnych narzędzi.\");\n process.exit(1);\n }\n\n toolsToInstall = additionalTools;\n }\n\n // Install the base package\n await packageJson.install(\"@solvro/config\", {\n dev: true,\n alwaysUpdate: !isNonInteractive,\n });\n\n // Install selected tools\n if (toolsToInstall.includes(\"eslint\")) {\n await installEslint(isNonInteractive);\n }\n\n if (toolsToInstall.includes(\"prettier\")) {\n await installPrettier(isNonInteractive);\n await installLintStaged();\n }\n\n if (toolsToInstall.includes(\"commitlint\")) {\n await installCommitLint();\n }\n\n if (toolsToInstall.includes(\"gh-action\")) {\n await installGithubActions();\n }\n\n await packageJson.clearInstall();\n\n if (isNonInteractive) {\n console.log(\"✅ Konfiguracja zakończona pomyślnie!\");\n } else {\n p.outro(\"✅ Konfiguracja zakończona pomyślnie!\");\n }\n}\n\n// Run the main function\ntry {\n // eslint-disable-next-line unicorn/prefer-top-level-await\n void main();\n} catch (error: unknown) {\n console.error(\"Wystąpił błąd:\", error);\n process.exit(1);\n}\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"2.0.4\",\n \"description\": \"Solvro's engineering style guide\",\n \"keywords\": [\n \"eslint\",\n \"prettier\",\n \"solvro\"\n ],\n \"homepage\": \"https://github.com/Solvro/lib-web-solvro-config#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/Solvro/lib-web-solvro-config/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Solvro/lib-web-solvro-config.git\"\n },\n \"license\": \"MPL-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \"./eslint\": {\n \"types\": \"./dist/eslint/index.d.ts\",\n \"import\": \"./dist/eslint/index.js\",\n \"require\": \"./dist/eslint/index.cjs\"\n },\n \"./prettier\": {\n \"types\": \"./dist/prettier/index.d.ts\",\n \"import\": \"./dist/prettier/index.js\",\n \"require\": \"./dist/prettier/index.cjs\"\n },\n \"./commitlint\": {\n \"types\": \"./dist/commitlint/index.d.ts\",\n \"import\": \"./dist/commitlint/index.js\",\n \"require\": \"./dist/commitlint/index.cjs\"\n }\n },\n \"bin\": \"./bin/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"cli\": \"tsx ./src/cli/index.ts\",\n \"dev\": \"npx @eslint/config-inspector\",\n \"format\": \"prettier --check .\",\n \"knip\": \"knip\",\n \"lint\": \"eslint .\",\n \"prepare\": \"husky || true\",\n \"prepublish\": \"npm run build\",\n \"release\": \"semantic-release\",\n \"test\": \"vitest run\",\n \"test:ui\": \"vitest --ui\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^2.1.0\",\n \"@clack/prompts\": \"^0.11.0\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^6.7.0\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.5.0\",\n \"@eslint/js\": \"^9.30.1\",\n \"@tanstack/eslint-plugin-query\": \"^5.81.2\",\n \"@trivago/prettier-plugin-sort-imports\": \"^5.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.35.1\",\n \"commander\": \"^14.0.0\",\n \"eslint-config-flat-gitignore\": \"^2.1.0\",\n \"eslint-config-prettier\": \"^10.1.5\",\n \"eslint-plugin-antfu\": \"^3.1.1\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jsdoc\": \"^51.3.3\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^17.21.0\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^5.2.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.16\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.4.1\",\n \"eslint-plugin-unicorn\": \"^59.0.1\",\n \"eslint-plugin-unused-imports\": \"^4.1.4\",\n \"execa\": \"^9.6.0\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^16.3.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.1\",\n \"package-manager-detector\": \"^1.3.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^2.5.18\",\n \"prettier-plugin-tailwindcss\": \"^0.6.13\",\n \"semver\": \"^7.7.2\",\n \"typescript-eslint\": \"^8.35.1\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^19.8.1\",\n \"@eslint/config-inspector\": \"^1.1.0\",\n \"@next/eslint-plugin-next\": \"^15.3.5\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^24.0.10\",\n \"@types/semver\": \"^7.7.0\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^9.30.1\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^5.61.3\",\n \"lint-staged\": \"^16.1.2\",\n \"pkg-pr-new\": \"^0.0.58\",\n \"prettier\": \"^3.6.2\",\n \"semantic-release\": \"^24.2.6\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.3\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0 <16.0.0-0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.4.2\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\"\n },\n \"volta\": {\n \"node\": \"22.17.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\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 { projectRoot } from \"./git-root\";\nimport { runIfInteractive } from \"./run-if-interactive\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\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.ok(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 isESM() {\n await this.load();\n\n assert.ok(this.json !== null);\n\n return this.json.type === \"module\";\n }\n\n async ensureESM() {\n if (await this.isESM()) {\n return;\n }\n\n assert.ok(this.json !== null);\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(projectRoot(), \"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.ok(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 runIfInteractive(() => {\n spinner.start(`Instalowanie ${package_}`);\n });\n\n await $$`npm i ${options?.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zainstalowany 😍`);\n });\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 runIfInteractive(() => {\n spinner.start(`Aktualizowanie ${package_}`);\n });\n await $$`npm i ${options.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zaktualizowany 😍`);\n });\n\n await this.load();\n }\n }\n\n async clearInstall() {\n await $$`npm ci`;\n }\n}\n","import { findUpSync } from \"find-up-simple\";\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\n\nexport const projectRoot = () => {\n const packageJsonPath = findUpSync(\"package.json\");\n\n if (packageJsonPath !== undefined) {\n return path.dirname(packageJsonPath);\n }\n\n return process.cwd();\n};\n\nexport const gitRoot = () => {\n try {\n const rootDirectory = execSync(\"git rev-parse --show-toplevel\", {\n cwd: projectRoot(),\n });\n return rootDirectory.toString().trim();\n } catch {\n return projectRoot();\n }\n};\n","import type { ExecaScriptMethod } from \"execa\";\n\nimport { projectRoot } from \"./git-root\";\n\nlet cachedExeca: ExecaScriptMethod | null = null;\n\nexport const $$ = (async (...arguments_: Parameters<ExecaScriptMethod>) => {\n if (cachedExeca === null) {\n const { $ } = await import(\"execa\");\n cachedExeca = $({\n cwd: projectRoot(),\n });\n }\n return cachedExeca(...arguments_);\n}) as ExecaScriptMethod;\n","import isInteractive from \"is-interactive\";\n\nexport const runIfInteractive = <T>(function_: () => T): T | undefined => {\n if (isInteractive()) {\n return function_();\n }\n\n return undefined;\n};\n","import * as p from \"@clack/prompts\";\nimport isInteractive from \"is-interactive\";\n\nexport const polishConfirm = async (props: p.ConfirmOptions) => {\n if (!isInteractive()) {\n return true;\n }\n\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 { projectRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\nimport { commitlint } from \"./templates/commitlint\";\n\nconst root = projectRoot();\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 \"node: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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n await fs.rm(path.join(root, eslintConfig));\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\n const isESM = await packageJson.isESM();\n\n const eslintFilename = isESM ? \"eslint.config.js\" : \"eslint.config.mjs\";\n\n await fs.writeFile(\n path.join(root, eslintFilename),\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, projectRoot } 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 { nestjsCi } from \"./templates/nestjs-ci\";\nimport { reactCi } from \"./templates/react-ci\";\n\nconst packageJson = new PackageJson();\n\nexport const installGithubActions = async () => {\n const gitDirectory = gitRoot();\n const projectDirectory = projectRoot();\n await packageJson.load();\n\n const ghWorkflowsDirectory = path.join(gitDirectory, \".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(projectDirectory, \".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 (type === \"nestjs\") {\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n nestjsCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n }\n\n if (!existsSync(path.join(gitDirectory, \".github/dependabot.yml\"))) {\n await fs.writeFile(\n path.join(gitDirectory, \".github/dependabot.yml\"),\n dependabot(),\n );\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 nestjsCi = ({\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: 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: Run e2e tests\n run: npm run test:e2e\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\n\n await packageJson.load();\n assert.ok(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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n for (const configName of prettierConfigNames) {\n await fs.rm(path.join(root, configName)).catch(() => null);\n }\n } else {\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\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","import_node_path","import_node_child_process","path","isInteractive","assert","semver","path","options","spinner","p","import_is_interactive","isInteractive","import_promises","import_node_path","import_node_assert","assert","packageJson","path","p","import_node_path","packageJson","isNonInteractive","root","path","p","import_node_fs","fs","import_node_path","packageJson","path","import_node_assert","import_promises","packageJson","assert","p","import_node_assert","import_node_fs","fs","import_node_path","packageJson","isNonInteractive","root","assert","path","c","packageJson"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../package.json","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/run-if-interactive.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/nestjs-ci.ts","../../src/cli/templates/nextjs-ci.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 { Command } from \"commander\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\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\n// Types\ninterface CliOptions {\n force?: boolean;\n eslint?: boolean;\n prettier?: boolean;\n ghAction?: boolean;\n commitlint?: boolean;\n all?: boolean;\n}\n\n// CLI setup\nconst program = new Command();\nprogram\n .name(\"@solvro/config\")\n .description(\"Solvro's engineering style guide setup\")\n .version(packageJsonData.version)\n .option(\"-f, --force\", \"Skip git clean check\", false)\n .option(\"--eslint\", \"Install ESLint configuration\", false)\n .option(\"--prettier\", \"Install Prettier configuration\", false)\n .option(\"--gh-action\", \"Install GitHub Actions\", false)\n .option(\"--commitlint\", \"Install Commitlint configuration\", false)\n .option(\"-a, --all\", \"Install all tools\", false);\n\nprogram.parse();\nconst options: CliOptions = program.opts();\n\n// Check if running in non-interactive mode (any CLI flags provided)\nconst isNonInteractive = process.argv.length > 2;\n\nasync function main() {\n if (!isNonInteractive) {\n p.intro(c.bold(c.bgBlue(\" @solvro/config \")));\n }\n\n const userAgent = getUserAgent();\n\n if (userAgent !== \"npm\") {\n const packageManager = userAgent ?? \"unknown\";\n const warningMessage = `\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt z ${c.yellow(packageManager)}'em, ale @solvro/config działa tylko z ${c.yellow(\"npm'em\")}. \n\nSupport dla innych menedżerów pakietów nie jest planowany - chcemy jednolitego stacku technologicznego dla projektów w naszym kochanym kole Solvro.\n\nUżyj zamiast tego npm'a:\n${c.cyan(\"npx @solvro/config\")}`;\n\n if (isNonInteractive) {\n console.error(warningMessage);\n } else {\n p.cancel(warningMessage);\n }\n process.exit(1);\n }\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n console.error(\n \"Repozytorium Git ma niezatwierdzone zmiany. Użyj --force, aby pominąć to sprawdzenie.\",\n );\n process.exit(1);\n }\n\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\n const packageJson = new PackageJson();\n\n // Determine project type automatically\n const projectType = await packageJson.getProjectType();\n\n // Project type confirmation (interactive mode only)\n if (!isNonInteractive) {\n if (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\n if (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\n if (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\n if (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 }\n if (projectType === \"adonis\" || projectType === \"react\") {\n if (isNonInteractive) {\n await packageJson.ensureESM();\n } else {\n if (!(await packageJson.isESM())) {\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 await packageJson.ensureESM();\n }\n }\n }\n\n // Determine which tools to install\n let toolsToInstall: string[] = [];\n\n if (options.all === true) {\n toolsToInstall = [\"eslint\", \"prettier\", \"gh-action\", \"commitlint\"];\n } else if (isNonInteractive) {\n // In non-interactive mode, only install explicitly requested tools\n if (options.eslint === true) {\n toolsToInstall.push(\"eslint\");\n }\n if (options.prettier === true) {\n toolsToInstall.push(\"prettier\");\n }\n if (options.ghAction === true) {\n toolsToInstall.push(\"gh-action\");\n }\n if (options.commitlint === true) {\n toolsToInstall.push(\"commitlint\");\n }\n\n if (toolsToInstall.length === 0) {\n console.error(\n \"Nie wybrano żadnych narzędzi. Użyj --eslint, --prettier, --gh-action, --commitlint, lub --all\",\n );\n process.exit(1);\n }\n } else {\n // Interactive mode\n const 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\n if (p.isCancel(additionalTools) || additionalTools.length === 0) {\n p.cancel(\"Nie wybrano żadnych narzędzi.\");\n process.exit(1);\n }\n\n toolsToInstall = additionalTools;\n }\n\n // Install the base package\n await packageJson.install(\"@solvro/config\", {\n dev: true,\n alwaysUpdate: !isNonInteractive,\n });\n\n // Install selected tools\n if (toolsToInstall.includes(\"eslint\")) {\n await installEslint(isNonInteractive);\n }\n\n if (toolsToInstall.includes(\"prettier\")) {\n await installPrettier(isNonInteractive);\n await installLintStaged();\n }\n\n if (toolsToInstall.includes(\"commitlint\")) {\n await installCommitLint();\n }\n\n if (toolsToInstall.includes(\"gh-action\")) {\n await installGithubActions();\n }\n\n await packageJson.clearInstall();\n\n if (isNonInteractive) {\n console.log(\"✅ Konfiguracja zakończona pomyślnie!\");\n } else {\n p.outro(\"✅ Konfiguracja zakończona pomyślnie!\");\n }\n}\n\n// Run the main function\ntry {\n // eslint-disable-next-line unicorn/prefer-top-level-await\n void main();\n} catch (error: unknown) {\n console.error(\"Wystąpił błąd:\", error);\n process.exit(1);\n}\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"2.0.5\",\n \"description\": \"Solvro's engineering style guide\",\n \"keywords\": [\n \"eslint\",\n \"prettier\",\n \"solvro\"\n ],\n \"homepage\": \"https://github.com/Solvro/lib-web-solvro-config#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/Solvro/lib-web-solvro-config/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Solvro/lib-web-solvro-config.git\"\n },\n \"license\": \"MPL-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \"./eslint\": {\n \"types\": \"./dist/eslint/index.d.ts\",\n \"import\": \"./dist/eslint/index.js\",\n \"require\": \"./dist/eslint/index.cjs\"\n },\n \"./prettier\": {\n \"types\": \"./dist/prettier/index.d.ts\",\n \"import\": \"./dist/prettier/index.js\",\n \"require\": \"./dist/prettier/index.cjs\"\n },\n \"./commitlint\": {\n \"types\": \"./dist/commitlint/index.d.ts\",\n \"import\": \"./dist/commitlint/index.js\",\n \"require\": \"./dist/commitlint/index.cjs\"\n }\n },\n \"bin\": \"./bin/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"cli\": \"tsx ./src/cli/index.ts\",\n \"dev\": \"npx @eslint/config-inspector\",\n \"format\": \"prettier --check .\",\n \"knip\": \"knip\",\n \"lint\": \"eslint .\",\n \"prepare\": \"husky || true\",\n \"prepublish\": \"npm run build\",\n \"release\": \"semantic-release\",\n \"test\": \"vitest run\",\n \"test:ui\": \"vitest --ui\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^2.1.2\",\n \"@clack/prompts\": \"^0.11.0\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^6.7.1\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.5.0\",\n \"@eslint/js\": \"^9.34.0\",\n \"@tanstack/eslint-plugin-query\": \"^5.83.1\",\n \"@trivago/prettier-plugin-sort-imports\": \"^5.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.41.0\",\n \"commander\": \"^14.0.0\",\n \"eslint-config-flat-gitignore\": \"^2.1.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-antfu\": \"^3.1.1\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jsdoc\": \"^54.1.1\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^17.21.3\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^5.2.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.20\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.4.4\",\n \"eslint-plugin-unicorn\": \"^60.0.0\",\n \"eslint-plugin-unused-imports\": \"^4.2.0\",\n \"execa\": \"^9.6.0\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^16.3.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.2\",\n \"package-manager-detector\": \"^1.3.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^2.5.19\",\n \"prettier-plugin-tailwindcss\": \"^0.6.14\",\n \"semver\": \"^7.7.2\",\n \"typescript-eslint\": \"^8.41.0\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^19.8.1\",\n \"@eslint/config-inspector\": \"^1.2.0\",\n \"@next/eslint-plugin-next\": \"^15.5.2\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^24.3.0\",\n \"@types/semver\": \"^7.7.0\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^9.34.0\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^5.63.0\",\n \"lint-staged\": \"^16.1.5\",\n \"pkg-pr-new\": \"^0.0.58\",\n \"prettier\": \"^3.6.2\",\n \"semantic-release\": \"^24.2.7\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.5\",\n \"typescript\": \"^5.9.2\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0 <16.0.0-0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.5.2\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\"\n },\n \"volta\": {\n \"node\": \"22.17.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\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 { projectRoot } from \"./git-root\";\nimport { runIfInteractive } from \"./run-if-interactive\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\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 isNextJs() {\n return this.hasPackage(\"next\");\n }\n\n async doesSatisfies(package_: string, version: string) {\n await this.load();\n\n assert.ok(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 isESM() {\n await this.load();\n\n assert.ok(this.json !== null);\n\n return this.json.type === \"module\";\n }\n\n async ensureESM() {\n if (await this.isESM()) {\n return;\n }\n\n assert.ok(this.json !== null);\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(projectRoot(), \"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.ok(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 runIfInteractive(() => {\n spinner.start(`Instalowanie ${package_}`);\n });\n\n await $$`npm i ${options?.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zainstalowany 😍`);\n });\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 runIfInteractive(() => {\n spinner.start(`Aktualizowanie ${package_}`);\n });\n await $$`npm i ${options.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zaktualizowany 😍`);\n });\n\n await this.load();\n }\n }\n\n async clearInstall() {\n await $$`npm ci`;\n }\n}\n","import { findUpSync } from \"find-up-simple\";\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\n\nexport const projectRoot = () => {\n const packageJsonPath = findUpSync(\"package.json\");\n\n if (packageJsonPath !== undefined) {\n return path.dirname(packageJsonPath);\n }\n\n return process.cwd();\n};\n\nexport const gitRoot = () => {\n try {\n const rootDirectory = execSync(\"git rev-parse --show-toplevel\", {\n cwd: projectRoot(),\n });\n return rootDirectory.toString().trim();\n } catch {\n return projectRoot();\n }\n};\n","import type { ExecaScriptMethod } from \"execa\";\n\nimport { projectRoot } from \"./git-root\";\n\nlet cachedExeca: ExecaScriptMethod | null = null;\n\nexport const $$ = (async (...arguments_: Parameters<ExecaScriptMethod>) => {\n if (cachedExeca === null) {\n const { $ } = await import(\"execa\");\n cachedExeca = $({\n cwd: projectRoot(),\n });\n }\n return cachedExeca(...arguments_);\n}) as ExecaScriptMethod;\n","import isInteractive from \"is-interactive\";\n\nexport const runIfInteractive = <T>(function_: () => T): T | undefined => {\n if (isInteractive()) {\n return function_();\n }\n\n return undefined;\n};\n","import * as p from \"@clack/prompts\";\nimport isInteractive from \"is-interactive\";\n\nexport const polishConfirm = async (props: p.ConfirmOptions) => {\n if (!isInteractive()) {\n return true;\n }\n\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 { projectRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\nimport { commitlint } from \"./templates/commitlint\";\n\nconst root = projectRoot();\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 \"node: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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\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.isNextJs())) {\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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n await fs.rm(path.join(root, eslintConfig));\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\n const isESM = await packageJson.isESM();\n\n const eslintFilename = isESM ? \"eslint.config.js\" : \"eslint.config.mjs\";\n\n await fs.writeFile(\n path.join(root, eslintFilename),\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, projectRoot } 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 { nestjsCi } from \"./templates/nestjs-ci\";\nimport { reactCi } from \"./templates/react-ci\";\n\nconst packageJson = new PackageJson();\n\nexport const installGithubActions = async () => {\n const gitDirectory = gitRoot();\n const projectDirectory = projectRoot();\n await packageJson.load();\n\n const ghWorkflowsDirectory = path.join(gitDirectory, \".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(projectDirectory, \".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 const usingNextJs = await packageJson.isNextJs();\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n reactCi({\n nodeVersion: \"22\",\n withCommitlint,\n usingNextJs,\n }),\n );\n }\n\n if (type === \"nestjs\") {\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n nestjsCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n }\n\n if (!existsSync(path.join(gitDirectory, \".github/dependabot.yml\"))) {\n await fs.writeFile(\n path.join(gitDirectory, \".github/dependabot.yml\"),\n dependabot(),\n );\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 nestjsCi = ({\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: 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: Run e2e tests\n run: npm run test:e2e\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\n","export const nextJsCi = () => `\n - name: Setup build cache\n uses: actions/cache@v4\n with:\n path: \\${{ github.workspace }}/.next/cache\n key: \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/package-lock.json') }}-\\${{ hashFiles('**/*.ts', '**/*.tsx') }}\n restore-keys: |\n \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/package-lock.json') }}- \n`;\n","import { commitLintCi } from \"./commit-lint-ci\";\nimport { nextJsCi } from \"./nextjs-ci\";\n\nexport const reactCi = ({\n nodeVersion,\n withCommitlint,\n usingNextJs,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n usingNextJs: 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${usingNextJs ? nextJsCi() : \"\"}\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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\n\n await packageJson.load();\n assert.ok(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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n for (const configName of prettierConfigNames) {\n await fs.rm(path.join(root, configName)).catch(() => null);\n }\n } else {\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\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","import_node_path","import_node_child_process","path","isInteractive","assert","semver","path","options","spinner","p","import_is_interactive","isInteractive","import_promises","import_node_path","import_node_assert","assert","packageJson","path","p","import_node_path","packageJson","isNonInteractive","root","path","p","import_node_fs","fs","import_node_path","packageJson","path","import_node_assert","import_promises","packageJson","assert","p","import_node_assert","import_node_fs","fs","import_node_path","packageJson","isNonInteractive","root","assert","path","c","packageJson"]}
package/dist/cli/index.js CHANGED
@@ -7,7 +7,7 @@ import c from "picocolors";
7
7
  // package.json
8
8
  var package_default = {
9
9
  name: "@solvro/config",
10
- version: "2.0.4",
10
+ version: "2.0.5",
11
11
  description: "Solvro's engineering style guide",
12
12
  keywords: [
13
13
  "eslint",
@@ -66,67 +66,67 @@ var package_default = {
66
66
  },
67
67
  prettier: "./dist/prettier/index.js",
68
68
  dependencies: {
69
- "@adonisjs/eslint-config": "^2.1.0",
69
+ "@adonisjs/eslint-config": "^2.1.2",
70
70
  "@clack/prompts": "^0.11.0",
71
71
  "@commitlint/config-conventional": "^19.8.1",
72
- "@darraghor/eslint-plugin-nestjs-typed": "^6.7.0",
72
+ "@darraghor/eslint-plugin-nestjs-typed": "^6.7.1",
73
73
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
74
- "@eslint/js": "^9.30.1",
75
- "@tanstack/eslint-plugin-query": "^5.81.2",
74
+ "@eslint/js": "^9.34.0",
75
+ "@tanstack/eslint-plugin-query": "^5.83.1",
76
76
  "@trivago/prettier-plugin-sort-imports": "^5.2.2",
77
- "@typescript-eslint/eslint-plugin": "^8.35.1",
77
+ "@typescript-eslint/eslint-plugin": "^8.41.0",
78
78
  commander: "^14.0.0",
79
79
  "eslint-config-flat-gitignore": "^2.1.0",
80
- "eslint-config-prettier": "^10.1.5",
80
+ "eslint-config-prettier": "^10.1.8",
81
81
  "eslint-plugin-antfu": "^3.1.1",
82
82
  "eslint-plugin-import": "^2.32.0",
83
- "eslint-plugin-jsdoc": "^51.3.3",
83
+ "eslint-plugin-jsdoc": "^54.1.1",
84
84
  "eslint-plugin-jsx-a11y": "^6.10.2",
85
- "eslint-plugin-n": "^17.21.0",
85
+ "eslint-plugin-n": "^17.21.3",
86
86
  "eslint-plugin-react": "^7.37.5",
87
87
  "eslint-plugin-react-hooks": "^5.2.0",
88
- "eslint-plugin-react-refresh": "^0.4.16",
89
- "eslint-plugin-react-you-might-not-need-an-effect": "^0.4.1",
90
- "eslint-plugin-unicorn": "^59.0.1",
91
- "eslint-plugin-unused-imports": "^4.1.4",
88
+ "eslint-plugin-react-refresh": "^0.4.20",
89
+ "eslint-plugin-react-you-might-not-need-an-effect": "^0.4.4",
90
+ "eslint-plugin-unicorn": "^60.0.0",
91
+ "eslint-plugin-unused-imports": "^4.2.0",
92
92
  execa: "^9.6.0",
93
93
  "find-up-simple": "^1.0.1",
94
94
  globals: "^16.3.0",
95
95
  "is-interactive": "^2.0.0",
96
- "local-pkg": "^1.1.1",
96
+ "local-pkg": "^1.1.2",
97
97
  "package-manager-detector": "^1.3.0",
98
98
  picocolors: "^1.1.1",
99
- "prettier-plugin-packagejson": "^2.5.18",
100
- "prettier-plugin-tailwindcss": "^0.6.13",
99
+ "prettier-plugin-packagejson": "^2.5.19",
100
+ "prettier-plugin-tailwindcss": "^0.6.14",
101
101
  semver: "^7.7.2",
102
- "typescript-eslint": "^8.35.1"
102
+ "typescript-eslint": "^8.41.0"
103
103
  },
104
104
  devDependencies: {
105
105
  "@commitlint/cli": "^19.8.1",
106
- "@eslint/config-inspector": "^1.1.0",
107
- "@next/eslint-plugin-next": "^15.3.5",
106
+ "@eslint/config-inspector": "^1.2.0",
107
+ "@next/eslint-plugin-next": "^15.5.2",
108
108
  "@semantic-release/git": "^10.0.1",
109
- "@types/node": "^24.0.10",
109
+ "@types/node": "^24.3.0",
110
110
  "@types/semver": "^7.7.0",
111
111
  "@vitest/coverage-v8": "^3.2.4",
112
112
  "@vitest/ui": "^3.2.4",
113
- eslint: "^9.30.1",
113
+ eslint: "^9.34.0",
114
114
  husky: "^9.1.7",
115
- knip: "^5.61.3",
116
- "lint-staged": "^16.1.2",
115
+ knip: "^5.63.0",
116
+ "lint-staged": "^16.1.5",
117
117
  "pkg-pr-new": "^0.0.58",
118
118
  prettier: "^3.6.2",
119
- "semantic-release": "^24.2.6",
119
+ "semantic-release": "^24.2.7",
120
120
  tsup: "^8.5.0",
121
- tsx: "^4.20.3",
122
- typescript: "^5.8.3",
121
+ tsx: "^4.20.5",
122
+ typescript: "^5.9.2",
123
123
  vitest: "^3.2.4"
124
124
  },
125
125
  peerDependencies: {
126
126
  "@next/eslint-plugin-next": ">=12.3.0 <16.0.0-0",
127
127
  eslint: ">=9.0.0 <10.0.0"
128
128
  },
129
- packageManager: "npm@11.4.2",
129
+ packageManager: "npm@11.5.2",
130
130
  engines: {
131
131
  node: "^20.19.0 || >=22.12.0"
132
132
  },
@@ -181,7 +181,7 @@ var gitRoot = () => {
181
181
 
182
182
  // src/utils/$$.ts
183
183
  var cachedExeca = null;
184
- var $$ = async (...arguments_) => {
184
+ var $$ = (async (...arguments_) => {
185
185
  if (cachedExeca === null) {
186
186
  const { $ } = await import("execa");
187
187
  cachedExeca = $({
@@ -189,7 +189,7 @@ var $$ = async (...arguments_) => {
189
189
  });
190
190
  }
191
191
  return cachedExeca(...arguments_);
192
- };
192
+ });
193
193
 
194
194
  // src/utils/run-if-interactive.ts
195
195
  import isInteractive from "is-interactive";
@@ -216,6 +216,9 @@ var PackageJson = class {
216
216
  hasPackage(package_) {
217
217
  return isPackageListed(package_);
218
218
  }
219
+ async isNextJs() {
220
+ return this.hasPackage("next");
221
+ }
219
222
  async doesSatisfies(package_, version) {
220
223
  await this.load();
221
224
  assert.ok(this.json !== null);
@@ -383,7 +386,7 @@ var installEslint = async (isNonInteractive2 = false) => {
383
386
  await packageJson3.load();
384
387
  await packageJson3.install("eslint", { dev: true, minVersion: ">=9" });
385
388
  const type = await packageJson3.getProjectType();
386
- if (type === "react" && await packageJson3.hasPackage("next")) {
389
+ if (type === "react" && await packageJson3.isNextJs()) {
387
390
  const is15 = await packageJson3.doesSatisfies("next", ">=15");
388
391
  if (!is15) {
389
392
  p3.cancel(
@@ -613,10 +616,22 @@ ${withCommitlint ? commitLintCi() : ""}
613
616
  run: npm run build
614
617
  if: always()`;
615
618
 
619
+ // src/cli/templates/nextjs-ci.ts
620
+ var nextJsCi = () => `
621
+ - name: Setup build cache
622
+ uses: actions/cache@v4
623
+ with:
624
+ path: \${{ github.workspace }}/.next/cache
625
+ key: \${{ runner.os }}-nextjs-\${{ hashFiles('**/package-lock.json') }}-\${{ hashFiles('**/*.ts', '**/*.tsx') }}
626
+ restore-keys: |
627
+ \${{ runner.os }}-nextjs-\${{ hashFiles('**/package-lock.json') }}-
628
+ `;
629
+
616
630
  // src/cli/templates/react-ci.ts
617
631
  var reactCi = ({
618
632
  nodeVersion,
619
- withCommitlint
633
+ withCommitlint,
634
+ usingNextJs
620
635
  }) => `name: CI
621
636
 
622
637
  on:
@@ -638,7 +653,7 @@ jobs:
638
653
  with:
639
654
  node-version: ${nodeVersion}
640
655
  cache: 'npm'
641
-
656
+ ${usingNextJs ? nextJsCi() : ""}
642
657
  - name: Install dependencies
643
658
  run: npm ci
644
659
  ${withCommitlint ? commitLintCi() : ""}
@@ -680,11 +695,13 @@ var installGithubActions = async () => {
680
695
  );
681
696
  }
682
697
  if (type === "react") {
698
+ const usingNextJs = await packageJson4.isNextJs();
683
699
  await fs2.writeFile(
684
700
  path5.join(ghWorkflowsDirectory, "ci.yml"),
685
701
  reactCi({
686
702
  nodeVersion: "22",
687
- withCommitlint
703
+ withCommitlint,
704
+ usingNextJs
688
705
  })
689
706
  );
690
707
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../package.json","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/run-if-interactive.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/nestjs-ci.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 { Command } from \"commander\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\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\n// Types\ninterface CliOptions {\n force?: boolean;\n eslint?: boolean;\n prettier?: boolean;\n ghAction?: boolean;\n commitlint?: boolean;\n all?: boolean;\n}\n\n// CLI setup\nconst program = new Command();\nprogram\n .name(\"@solvro/config\")\n .description(\"Solvro's engineering style guide setup\")\n .version(packageJsonData.version)\n .option(\"-f, --force\", \"Skip git clean check\", false)\n .option(\"--eslint\", \"Install ESLint configuration\", false)\n .option(\"--prettier\", \"Install Prettier configuration\", false)\n .option(\"--gh-action\", \"Install GitHub Actions\", false)\n .option(\"--commitlint\", \"Install Commitlint configuration\", false)\n .option(\"-a, --all\", \"Install all tools\", false);\n\nprogram.parse();\nconst options: CliOptions = program.opts();\n\n// Check if running in non-interactive mode (any CLI flags provided)\nconst isNonInteractive = process.argv.length > 2;\n\nasync function main() {\n if (!isNonInteractive) {\n p.intro(c.bold(c.bgBlue(\" @solvro/config \")));\n }\n\n const userAgent = getUserAgent();\n\n if (userAgent !== \"npm\") {\n const packageManager = userAgent ?? \"unknown\";\n const warningMessage = `\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt z ${c.yellow(packageManager)}'em, ale @solvro/config działa tylko z ${c.yellow(\"npm'em\")}. \n\nSupport dla innych menedżerów pakietów nie jest planowany - chcemy jednolitego stacku technologicznego dla projektów w naszym kochanym kole Solvro.\n\nUżyj zamiast tego npm'a:\n${c.cyan(\"npx @solvro/config\")}`;\n\n if (isNonInteractive) {\n console.error(warningMessage);\n } else {\n p.cancel(warningMessage);\n }\n process.exit(1);\n }\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n console.error(\n \"Repozytorium Git ma niezatwierdzone zmiany. Użyj --force, aby pominąć to sprawdzenie.\",\n );\n process.exit(1);\n }\n\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\n const packageJson = new PackageJson();\n\n // Determine project type automatically\n const projectType = await packageJson.getProjectType();\n\n // Project type confirmation (interactive mode only)\n if (!isNonInteractive) {\n if (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\n if (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\n if (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\n if (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 }\n if (projectType === \"adonis\" || projectType === \"react\") {\n if (isNonInteractive) {\n await packageJson.ensureESM();\n } else {\n if (!(await packageJson.isESM())) {\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 await packageJson.ensureESM();\n }\n }\n }\n\n // Determine which tools to install\n let toolsToInstall: string[] = [];\n\n if (options.all === true) {\n toolsToInstall = [\"eslint\", \"prettier\", \"gh-action\", \"commitlint\"];\n } else if (isNonInteractive) {\n // In non-interactive mode, only install explicitly requested tools\n if (options.eslint === true) {\n toolsToInstall.push(\"eslint\");\n }\n if (options.prettier === true) {\n toolsToInstall.push(\"prettier\");\n }\n if (options.ghAction === true) {\n toolsToInstall.push(\"gh-action\");\n }\n if (options.commitlint === true) {\n toolsToInstall.push(\"commitlint\");\n }\n\n if (toolsToInstall.length === 0) {\n console.error(\n \"Nie wybrano żadnych narzędzi. Użyj --eslint, --prettier, --gh-action, --commitlint, lub --all\",\n );\n process.exit(1);\n }\n } else {\n // Interactive mode\n const 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\n if (p.isCancel(additionalTools) || additionalTools.length === 0) {\n p.cancel(\"Nie wybrano żadnych narzędzi.\");\n process.exit(1);\n }\n\n toolsToInstall = additionalTools;\n }\n\n // Install the base package\n await packageJson.install(\"@solvro/config\", {\n dev: true,\n alwaysUpdate: !isNonInteractive,\n });\n\n // Install selected tools\n if (toolsToInstall.includes(\"eslint\")) {\n await installEslint(isNonInteractive);\n }\n\n if (toolsToInstall.includes(\"prettier\")) {\n await installPrettier(isNonInteractive);\n await installLintStaged();\n }\n\n if (toolsToInstall.includes(\"commitlint\")) {\n await installCommitLint();\n }\n\n if (toolsToInstall.includes(\"gh-action\")) {\n await installGithubActions();\n }\n\n await packageJson.clearInstall();\n\n if (isNonInteractive) {\n console.log(\"✅ Konfiguracja zakończona pomyślnie!\");\n } else {\n p.outro(\"✅ Konfiguracja zakończona pomyślnie!\");\n }\n}\n\n// Run the main function\ntry {\n // eslint-disable-next-line unicorn/prefer-top-level-await\n void main();\n} catch (error: unknown) {\n console.error(\"Wystąpił błąd:\", error);\n process.exit(1);\n}\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"2.0.4\",\n \"description\": \"Solvro's engineering style guide\",\n \"keywords\": [\n \"eslint\",\n \"prettier\",\n \"solvro\"\n ],\n \"homepage\": \"https://github.com/Solvro/lib-web-solvro-config#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/Solvro/lib-web-solvro-config/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Solvro/lib-web-solvro-config.git\"\n },\n \"license\": \"MPL-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \"./eslint\": {\n \"types\": \"./dist/eslint/index.d.ts\",\n \"import\": \"./dist/eslint/index.js\",\n \"require\": \"./dist/eslint/index.cjs\"\n },\n \"./prettier\": {\n \"types\": \"./dist/prettier/index.d.ts\",\n \"import\": \"./dist/prettier/index.js\",\n \"require\": \"./dist/prettier/index.cjs\"\n },\n \"./commitlint\": {\n \"types\": \"./dist/commitlint/index.d.ts\",\n \"import\": \"./dist/commitlint/index.js\",\n \"require\": \"./dist/commitlint/index.cjs\"\n }\n },\n \"bin\": \"./bin/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"cli\": \"tsx ./src/cli/index.ts\",\n \"dev\": \"npx @eslint/config-inspector\",\n \"format\": \"prettier --check .\",\n \"knip\": \"knip\",\n \"lint\": \"eslint .\",\n \"prepare\": \"husky || true\",\n \"prepublish\": \"npm run build\",\n \"release\": \"semantic-release\",\n \"test\": \"vitest run\",\n \"test:ui\": \"vitest --ui\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^2.1.0\",\n \"@clack/prompts\": \"^0.11.0\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^6.7.0\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.5.0\",\n \"@eslint/js\": \"^9.30.1\",\n \"@tanstack/eslint-plugin-query\": \"^5.81.2\",\n \"@trivago/prettier-plugin-sort-imports\": \"^5.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.35.1\",\n \"commander\": \"^14.0.0\",\n \"eslint-config-flat-gitignore\": \"^2.1.0\",\n \"eslint-config-prettier\": \"^10.1.5\",\n \"eslint-plugin-antfu\": \"^3.1.1\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jsdoc\": \"^51.3.3\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^17.21.0\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^5.2.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.16\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.4.1\",\n \"eslint-plugin-unicorn\": \"^59.0.1\",\n \"eslint-plugin-unused-imports\": \"^4.1.4\",\n \"execa\": \"^9.6.0\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^16.3.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.1\",\n \"package-manager-detector\": \"^1.3.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^2.5.18\",\n \"prettier-plugin-tailwindcss\": \"^0.6.13\",\n \"semver\": \"^7.7.2\",\n \"typescript-eslint\": \"^8.35.1\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^19.8.1\",\n \"@eslint/config-inspector\": \"^1.1.0\",\n \"@next/eslint-plugin-next\": \"^15.3.5\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^24.0.10\",\n \"@types/semver\": \"^7.7.0\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^9.30.1\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^5.61.3\",\n \"lint-staged\": \"^16.1.2\",\n \"pkg-pr-new\": \"^0.0.58\",\n \"prettier\": \"^3.6.2\",\n \"semantic-release\": \"^24.2.6\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.3\",\n \"typescript\": \"^5.8.3\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0 <16.0.0-0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.4.2\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\"\n },\n \"volta\": {\n \"node\": \"22.17.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\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 { projectRoot } from \"./git-root\";\nimport { runIfInteractive } from \"./run-if-interactive\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\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.ok(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 isESM() {\n await this.load();\n\n assert.ok(this.json !== null);\n\n return this.json.type === \"module\";\n }\n\n async ensureESM() {\n if (await this.isESM()) {\n return;\n }\n\n assert.ok(this.json !== null);\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(projectRoot(), \"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.ok(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 runIfInteractive(() => {\n spinner.start(`Instalowanie ${package_}`);\n });\n\n await $$`npm i ${options?.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zainstalowany 😍`);\n });\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 runIfInteractive(() => {\n spinner.start(`Aktualizowanie ${package_}`);\n });\n await $$`npm i ${options.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zaktualizowany 😍`);\n });\n\n await this.load();\n }\n }\n\n async clearInstall() {\n await $$`npm ci`;\n }\n}\n","import { findUpSync } from \"find-up-simple\";\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\n\nexport const projectRoot = () => {\n const packageJsonPath = findUpSync(\"package.json\");\n\n if (packageJsonPath !== undefined) {\n return path.dirname(packageJsonPath);\n }\n\n return process.cwd();\n};\n\nexport const gitRoot = () => {\n try {\n const rootDirectory = execSync(\"git rev-parse --show-toplevel\", {\n cwd: projectRoot(),\n });\n return rootDirectory.toString().trim();\n } catch {\n return projectRoot();\n }\n};\n","import type { ExecaScriptMethod } from \"execa\";\n\nimport { projectRoot } from \"./git-root\";\n\nlet cachedExeca: ExecaScriptMethod | null = null;\n\nexport const $$ = (async (...arguments_: Parameters<ExecaScriptMethod>) => {\n if (cachedExeca === null) {\n const { $ } = await import(\"execa\");\n cachedExeca = $({\n cwd: projectRoot(),\n });\n }\n return cachedExeca(...arguments_);\n}) as ExecaScriptMethod;\n","import isInteractive from \"is-interactive\";\n\nexport const runIfInteractive = <T>(function_: () => T): T | undefined => {\n if (isInteractive()) {\n return function_();\n }\n\n return undefined;\n};\n","import * as p from \"@clack/prompts\";\nimport isInteractive from \"is-interactive\";\n\nexport const polishConfirm = async (props: p.ConfirmOptions) => {\n if (!isInteractive()) {\n return true;\n }\n\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 { projectRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\nimport { commitlint } from \"./templates/commitlint\";\n\nconst root = projectRoot();\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 \"node: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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n await fs.rm(path.join(root, eslintConfig));\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\n const isESM = await packageJson.isESM();\n\n const eslintFilename = isESM ? \"eslint.config.js\" : \"eslint.config.mjs\";\n\n await fs.writeFile(\n path.join(root, eslintFilename),\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, projectRoot } 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 { nestjsCi } from \"./templates/nestjs-ci\";\nimport { reactCi } from \"./templates/react-ci\";\n\nconst packageJson = new PackageJson();\n\nexport const installGithubActions = async () => {\n const gitDirectory = gitRoot();\n const projectDirectory = projectRoot();\n await packageJson.load();\n\n const ghWorkflowsDirectory = path.join(gitDirectory, \".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(projectDirectory, \".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 (type === \"nestjs\") {\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n nestjsCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n }\n\n if (!existsSync(path.join(gitDirectory, \".github/dependabot.yml\"))) {\n await fs.writeFile(\n path.join(gitDirectory, \".github/dependabot.yml\"),\n dependabot(),\n );\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 nestjsCi = ({\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: 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: Run e2e tests\n run: npm run test:e2e\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\n\n await packageJson.load();\n assert.ok(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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n for (const configName of prettierConfigNames) {\n await fs.rm(path.join(root, configName)).catch(() => null);\n }\n } else {\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\n packageJson.json.prettier = solvroPrettierPath;\n\n await packageJson.save();\n\n p.note(\"Konfiguracja Prettiera została dodana.\");\n};\n"],"mappings":";AAAA,YAAYA,QAAO;AACnB,SAAS,eAAe;AACxB,SAAS,oBAAoB;AAC7B,OAAO,OAAO;;;ACHd;AAAA,EACE,MAAQ;AAAA,EACR,SAAW;AAAA,EACX,aAAe;AAAA,EACf,UAAY;AAAA,IACV;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA,UAAY;AAAA,EACZ,MAAQ;AAAA,IACN,KAAO;AAAA,EACT;AAAA,EACA,YAAc;AAAA,IACZ,MAAQ;AAAA,IACR,KAAO;AAAA,EACT;AAAA,EACA,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,SAAW;AAAA,IACT,YAAY;AAAA,MACV,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,cAAc;AAAA,MACZ,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,IACA,gBAAgB;AAAA,MACd,OAAS;AAAA,MACT,QAAU;AAAA,MACV,SAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,KAAO;AAAA,EACP,OAAS;AAAA,IACP;AAAA,EACF;AAAA,EACA,SAAW;AAAA,IACT,OAAS;AAAA,IACT,eAAe;AAAA,IACf,KAAO;AAAA,IACP,KAAO;AAAA,IACP,QAAU;AAAA,IACV,MAAQ;AAAA,IACR,MAAQ;AAAA,IACR,SAAW;AAAA,IACX,YAAc;AAAA,IACd,SAAW;AAAA,IACX,MAAQ;AAAA,IACR,WAAW;AAAA,IACX,cAAc;AAAA,IACd,WAAa;AAAA,EACf;AAAA,EACA,eAAe;AAAA,IACb,KAAK;AAAA,EACP;AAAA,EACA,UAAY;AAAA,EACZ,cAAgB;AAAA,IACd,2BAA2B;AAAA,IAC3B,kBAAkB;AAAA,IAClB,mCAAmC;AAAA,IACnC,yCAAyC;AAAA,IACzC,mDAAmD;AAAA,IACnD,cAAc;AAAA,IACd,iCAAiC;AAAA,IACjC,yCAAyC;AAAA,IACzC,oCAAoC;AAAA,IACpC,WAAa;AAAA,IACb,gCAAgC;AAAA,IAChC,0BAA0B;AAAA,IAC1B,uBAAuB;AAAA,IACvB,wBAAwB;AAAA,IACxB,uBAAuB;AAAA,IACvB,0BAA0B;AAAA,IAC1B,mBAAmB;AAAA,IACnB,uBAAuB;AAAA,IACvB,6BAA6B;AAAA,IAC7B,+BAA+B;AAAA,IAC/B,oDAAoD;AAAA,IACpD,yBAAyB;AAAA,IACzB,gCAAgC;AAAA,IAChC,OAAS;AAAA,IACT,kBAAkB;AAAA,IAClB,SAAW;AAAA,IACX,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,4BAA4B;AAAA,IAC5B,YAAc;AAAA,IACd,+BAA+B;AAAA,IAC/B,+BAA+B;AAAA,IAC/B,QAAU;AAAA,IACV,qBAAqB;AAAA,EACvB;AAAA,EACA,iBAAmB;AAAA,IACjB,mBAAmB;AAAA,IACnB,4BAA4B;AAAA,IAC5B,4BAA4B;AAAA,IAC5B,yBAAyB;AAAA,IACzB,eAAe;AAAA,IACf,iBAAiB;AAAA,IACjB,uBAAuB;AAAA,IACvB,cAAc;AAAA,IACd,QAAU;AAAA,IACV,OAAS;AAAA,IACT,MAAQ;AAAA,IACR,eAAe;AAAA,IACf,cAAc;AAAA,IACd,UAAY;AAAA,IACZ,oBAAoB;AAAA,IACpB,MAAQ;AAAA,IACR,KAAO;AAAA,IACP,YAAc;AAAA,IACd,QAAU;AAAA,EACZ;AAAA,EACA,kBAAoB;AAAA,IAClB,4BAA4B;AAAA,IAC5B,QAAU;AAAA,EACZ;AAAA,EACA,gBAAkB;AAAA,EAClB,SAAW;AAAA,IACT,MAAQ;AAAA,EACV;AAAA,EACA,OAAS;AAAA,IACP,MAAQ;AAAA,EACV;AAAA,EACA,eAAiB;AAAA,IACf,QAAU;AAAA,EACZ;AACF;;;ACnIA,SAAS,gBAAgB;AAElB,SAAS,aAAsB;AACpC,MAAI;AACF,aAAS,gCAAgC;AACzC,WAAO;AAAA,EACT,QAAQ;AACN,WAAO;AAAA,EACT;AACF;;;ACTA,YAAY,OAAO;AACnB,SAAS,gBAAgB,iBAAiB,uBAAuB;AACjE,OAAO,YAAY;AACnB,SAAS,iBAAiB;AAC1B,OAAOC,WAAU;AACjB,OAAO,YAAY;;;ACLnB,SAAS,kBAAkB;AAC3B,SAAS,YAAAC,iBAAgB;AACzB,OAAO,UAAU;AAEV,IAAM,cAAc,MAAM;AAC/B,QAAM,kBAAkB,WAAW,cAAc;AAEjD,MAAI,oBAAoB,QAAW;AACjC,WAAO,KAAK,QAAQ,eAAe;AAAA,EACrC;AAEA,SAAO,QAAQ,IAAI;AACrB;AAEO,IAAM,UAAU,MAAM;AAC3B,MAAI;AACF,UAAM,gBAAgBA,UAAS,iCAAiC;AAAA,MAC9D,KAAK,YAAY;AAAA,IACnB,CAAC;AACD,WAAO,cAAc,SAAS,EAAE,KAAK;AAAA,EACvC,QAAQ;AACN,WAAO,YAAY;AAAA,EACrB;AACF;;;ACnBA,IAAI,cAAwC;AAErC,IAAM,KAAM,UAAU,eAA8C;AACzE,MAAI,gBAAgB,MAAM;AACxB,UAAM,EAAE,EAAE,IAAI,MAAM,OAAO,OAAO;AAClC,kBAAc,EAAE;AAAA,MACd,KAAK,YAAY;AAAA,IACnB,CAAC;AAAA,EACH;AACA,SAAO,YAAY,GAAG,UAAU;AAClC;;;ACdA,OAAO,mBAAmB;AAEnB,IAAM,mBAAmB,CAAI,cAAsC;AACxE,MAAI,cAAc,GAAG;AACnB,WAAO,UAAU;AAAA,EACnB;AAEA,SAAO;AACT;;;AHGO,IAAM,cAAN,MAAkB;AAAA,EAChB,OAAoD;AAAA,EAE3D,MAAM,OAAO;AACX,UAAM,OAAO,MAAM,gBAAgB,YAAY,CAAC;AAEhD,QAAI,SAAS,MAAM;AACjB,MAAE;AAAA,QACA;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,SAAK,OAAO;AAAA,EACd;AAAA,EAEA,WAAW,UAAkB;AAC3B,WAAO,gBAAgB,QAAQ;AAAA,EACjC;AAAA,EAEA,MAAM,cAAc,UAAkB,SAAiB;AACrD,UAAM,KAAK,KAAK;AAEhB,WAAO,GAAG,KAAK,SAAS,IAAI;AAE5B,UAAM,cAAc,MAAM,eAAe,QAAQ;AAEjD,QAAI,aAAa,YAAY,QAAW;AACtC,aAAO;AAAA,IACT;AAEA,WAAO,OAAO,UAAU,YAAY,SAAS,OAAO;AAAA,EACtD;AAAA,EAEA,MAAM,QAAQ;AACZ,UAAM,KAAK,KAAK;AAEhB,WAAO,GAAG,KAAK,SAAS,IAAI;AAE5B,WAAO,KAAK,KAAK,SAAS;AAAA,EAC5B;AAAA,EAEA,MAAM,YAAY;AAChB,QAAI,MAAM,KAAK,MAAM,GAAG;AACtB;AAAA,IACF;AAEA,WAAO,GAAG,KAAK,SAAS,IAAI;AAE5B,SAAK,KAAK,OAAO;AAEjB,UAAM,KAAK,KAAK;AAAA,EAClB;AAAA,EAEA,MAAM,iBAAiB;AACrB,UAAM,WAAW,MAAM,gBAAgB,gBAAgB;AACvD,UAAM,UAAU,MAAM,gBAAgB,OAAO;AAC7C,UAAM,WAAW,MAAM,gBAAgB,cAAc;AACrD,QAAI,WAAW,UAAU;AACvB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAEA,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAEA,QAAI,UAAU;AACZ,aAAO;AAAA,IACT;AAEA,QAAI,SAAS;AACX,aAAO;AAAA,IACT;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,OAAO;AACX,UAAM;AAAA,MACJC,MAAK,KAAK,YAAY,GAAG,cAAc;AAAA,MACvC,KAAK,UAAU,KAAK,MAAM,MAAM,CAAC;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,MAAM,qBAAqB,MAAc,QAAgB;AACvD,UAAM,KAAK,KAAK;AAEhB,WAAO,GAAG,KAAK,SAAS,IAAI;AAE5B,QAAI,KAAK,KAAK,UAAU,IAAI,MAAM,QAAW;AAC3C;AAAA,IACF;AAEA,SAAK,KAAK,UAAU,KAAK,KAAK,WAAW,CAAC;AAC1C,SAAK,KAAK,QAAQ,IAAI,IAAI;AAE1B,UAAM,KAAK,KAAK;AAAA,EAClB;AAAA,EAEA,MAAM,QACJ,UACAC,UACA;AACA,UAAM,cAAc,MAAM,KAAK,WAAW,QAAQ;AAElD,QAAI,CAAC,aAAa;AAChB,YAAMC,WAAY,UAAQ;AAC1B,uBAAiB,MAAM;AACrB,QAAAA,SAAQ,MAAM,gBAAgB,QAAQ,EAAE;AAAA,MAC1C,CAAC;AAED,YAAM,WAAWD,UAAS,QAAQ,OAAO,OAAO,EAAE,IAAI,QAAQ;AAC9D,uBAAiB,MAAM;AACrB,QAAAC,SAAQ,KAAK,GAAG,QAAQ,0BAAmB;AAAA,MAC7C,CAAC;AAED,YAAM,KAAK,KAAK;AAEhB;AAAA,IACF;AAEA,UAAM,OAAO,MAAM,eAAe,QAAQ;AAE1C,QACG,MAAM,YAAY,UACjBD,UAAS,eAAe,UACxB,CAAC,OAAO,UAAU,KAAK,SAASA,SAAQ,UAAU,KACpDA,UAAS,iBAAiB,MAC1B;AACA,YAAMC,WAAY,UAAQ;AAC1B,uBAAiB,MAAM;AACrB,QAAAA,SAAQ,MAAM,kBAAkB,QAAQ,EAAE;AAAA,MAC5C,CAAC;AACD,YAAM,WAAWD,SAAQ,QAAQ,OAAO,OAAO,EAAE,IAAI,QAAQ;AAC7D,uBAAiB,MAAM;AACrB,QAAAC,SAAQ,KAAK,GAAG,QAAQ,2BAAoB;AAAA,MAC9C,CAAC;AAED,YAAM,KAAK,KAAK;AAAA,IAClB;AAAA,EACF;AAAA,EAEA,MAAM,eAAe;AACnB,UAAM;AAAA,EACR;AACF;;;AI9JA,YAAYC,QAAO;AACnB,OAAOC,oBAAmB;AAEnB,IAAM,gBAAgB,OAAO,UAA4B;AAC9D,MAAI,CAACA,eAAc,GAAG;AACpB,WAAO;AAAA,EACT;AAEA,SAAS,WAAQ;AAAA,IACf,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,GAAG;AAAA,EACL,CAAC;AACH;;;ACbA,SAAS,aAAAC,kBAAiB;AAC1B,OAAOC,WAAU;;;ACDjB,OAAOC,aAAY;AAKnB,IAAM,cAAc,IAAI,YAAY;AAE7B,IAAM,eAAe,YAAY;AACtC,MAAI,CAAE,MAAM,YAAY,WAAW,OAAO,GAAI;AAC5C,UAAM,YAAY,QAAQ,SAAS,EAAE,KAAK,KAAK,CAAC;AAChD,UAAM;AAAA,EACR;AAEA,QAAM,YAAY,KAAK;AAEvB,EAAAC,QAAO,GAAG,YAAY,SAAS,IAAI;AAEnC,cAAY,KAAK,UAAU,YAAY,KAAK,WAAW,CAAC;AACxD,cAAY,KAAK,QAAQ,UAAU;AAEnC,QAAM,YAAY,KAAK;AACzB;;;ACrBO,IAAM,aAAa,MAAM;AAAA;AAAA;AAAA;;;AFQhC,IAAM,OAAO,YAAY;AAEzB,IAAMC,eAAc,IAAI,YAAY;AAE7B,IAAM,oBAAoB,YAAY;AAC3C,QAAM,aAAa;AAEnB,QAAMA,aAAY,QAAQ,mBAAmB,EAAE,KAAK,KAAK,CAAC;AAE1D,QAAMC;AAAA,IACJC,MAAK,KAAK,MAAM,mBAAmB;AAAA,IACnC;AAAA,EACF;AAEA,QAAMD,WAAUC,MAAK,KAAK,MAAM,kBAAkB,GAAG,WAAW,CAAC;AACnE;;;AGvBA,YAAYC,QAAO;AACnB,SAAS,kBAAkB;AAC3B,YAAY,QAAQ;AACpB,OAAOC,WAAU;AAMjB,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAMC,eAAc,IAAI,YAAY;AAE7B,IAAM,gBAAgB,OAAOC,oBAAmB,UAAU;AAC/D,QAAMC,QAAO,YAAY;AAEzB,QAAMF,aAAY,KAAK;AAEvB,QAAMA,aAAY,QAAQ,UAAU,EAAE,KAAK,MAAM,YAAY,MAAM,CAAC;AAEpE,QAAM,OAAO,MAAMA,aAAY,eAAe;AAE9C,MAAI,SAAS,WAAY,MAAMA,aAAY,WAAW,MAAM,GAAI;AAC9D,UAAM,OAAO,MAAMA,aAAY,cAAc,QAAQ,MAAM;AAE3D,QAAI,CAAC,MAAM;AACT,MAAE;AAAA,QACA;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAMA,aAAY,QAAQ,4BAA4B,EAAE,KAAK,KAAK,CAAC;AAAA,EACrE;AAEA,QAAM,eAAe,kBAAkB;AAAA,IAAK,CAAC,eAC3C,WAAWG,MAAK,KAAKD,OAAM,UAAU,CAAC;AAAA,EACxC;AAEA,MAAI,iBAAiB,QAAW;AAC9B,UAAM,gBAAgB,MAAS;AAAA,MAC7BC,MAAK,KAAKD,OAAM,YAAY;AAAA,MAC5B;AAAA,IACF;AAEA,QAAI,cAAc,SAAS,wBAAwB,GAAG;AACpD,MAAE,QAAK,+CAA0C;AAEjD;AAAA,IACF,OAAO;AACL,UAAID,mBAAkB;AAEpB,cAAS,MAAGE,MAAK,KAAKD,OAAM,YAAY,CAAC;AAAA,MAC3C,OAAO;AACL,cAAM,cAAc,MAAM,cAAc;AAAA,UACtC,SAAS;AAAA,QACX,CAAC;AAED,YAAM,YAAS,WAAW,KAAK,CAAC,aAAa;AAC3C,UAAE,UAAO,2DAAwD;AACjE,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAEA,cAAS,MAAGC,MAAK,KAAKD,OAAM,YAAY,CAAC;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AAEA,QAAM,QAAQ,MAAMF,aAAY,MAAM;AAEtC,QAAM,iBAAiB,QAAQ,qBAAqB;AAEpD,QAAS;AAAA,IACPG,MAAK,KAAKD,OAAM,cAAc;AAAA,IAC9B;AAAA;AAAA;AAAA;AAAA,EAIF;AAEA,EAAE,QAAK,mDAA8C;AACvD;;;AC9FA,YAAYE,QAAO;AACnB,SAAS,cAAAC,mBAAkB;AAC3B,YAAYC,SAAQ;AACpB,OAAOC,WAAU;;;ACHV,IAAM,eAAe,MAAM;AAAA;AAAA;AAAA;AAAA;;;ACE3B,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAmBoB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUnC,iBAAiB,aAAa,IAAI,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACrC/B,IAAM,qBAAqB,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAjC,IAAM,aAAa,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEzB,IAAM,WAAW,CAAC;AAAA,EACvB;AAAA,EACA;AACF,MAGM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAmBoB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnC,iBAAiB,aAAa,IAAI,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;AC9B/B,IAAM,UAAU,CAAC;AAAA,EACtB;AAAA,EACA;AACF,MAGM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAmBoB,WAAW;AAAA;AAAA;AAAA;AAAA;AAAA,EAKnC,iBAAiB,aAAa,IAAI,EAAE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ANnBtC,IAAMC,eAAc,IAAI,YAAY;AAE7B,IAAM,uBAAuB,YAAY;AAC9C,QAAM,eAAe,QAAQ;AAC7B,QAAM,mBAAmB,YAAY;AACrC,QAAMA,aAAY,KAAK;AAEvB,QAAM,uBAAuBC,MAAK,KAAK,cAAc,mBAAmB;AACxE,QAAS,UAAM,sBAAsB,EAAE,WAAW,KAAK,CAAC;AAExD,QAAM,OAAO,MAAMD,aAAY,eAAe;AAE9C,QAAM,iBAAiB,MAAMA,aAAY,WAAW,iBAAiB;AAErE,MAAI,SAAS,UAAU;AACrB,QAAI,CAACE,YAAWD,MAAK,KAAK,kBAAkB,cAAc,CAAC,GAAG;AAC5D,MAAE;AAAA,QACA;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAS;AAAA,MACPA,MAAK,KAAK,sBAAsB,QAAQ;AAAA,MACxC,SAAS;AAAA,QACP,aAAa;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAEA,UAAS;AAAA,MACPA,MAAK,KAAK,sBAAsB,QAAQ;AAAA,MACxC,mBAAmB;AAAA,IACrB;AAAA,EACF;AAEA,MAAI,SAAS,SAAS;AACpB,UAAS;AAAA,MACPA,MAAK,KAAK,sBAAsB,QAAQ;AAAA,MACxC,QAAQ;AAAA,QACN,aAAa;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,SAAS,UAAU;AACrB,UAAS;AAAA,MACPA,MAAK,KAAK,sBAAsB,QAAQ;AAAA,MACxC,SAAS;AAAA,QACP,aAAa;AAAA,QACb;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AAEA,MAAI,CAACC,YAAWD,MAAK,KAAK,cAAc,wBAAwB,CAAC,GAAG;AAClE,UAAS;AAAA,MACPA,MAAK,KAAK,cAAc,wBAAwB;AAAA,MAChD,WAAW;AAAA,IACb;AAAA,EACF;AAEA,QAAMD,aAAY,qBAAqB,gBAAgB,oBAAoB;AAC3E,QAAMA,aAAY,qBAAqB,QAAQ,2BAA2B;AAC1E,QAAMA,aAAY,qBAAqB,UAAU,oBAAoB;AACrE,QAAMA,aAAY,qBAAqB,aAAa,cAAc;AAElE,EAAE,QAAK,wCAAmC;AAC5C;;;AOlFA,OAAOG,aAAY;AACnB,SAAS,aAAAC,kBAAiB;AAK1B,IAAMC,eAAc,IAAI,YAAY;AAE7B,IAAM,oBAAoB,YAAY;AAC3C,QAAMA,aAAY,KAAK;AAEvB,EAAAC,QAAO,GAAGD,aAAY,SAAS,IAAI;AAEnC,QAAM,aAAa;AAEnB,QAAMA,aAAY,QAAQ,eAAe,EAAE,KAAK,KAAK,CAAC;AAEtD,QAAME,WAAU,qBAAqB,mBAAmB;AAExD,EAAAF,aAAY,KAAK,aAAa,IAAI;AAAA,IAChC,KAAK;AAAA,EACP;AAEA,QAAMA,aAAY,KAAK;AACzB;;;ACxBA,YAAYG,QAAO;AACnB,OAAOC,aAAY;AACnB,SAAS,cAAAC,mBAAkB;AAC3B,YAAYC,SAAQ;AACpB,OAAOC,WAAU;AAMjB,IAAM,sBAAsB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEA,IAAMC,eAAc,IAAI,YAAY;AAE7B,IAAM,kBAAkB,OAAOC,oBAAmB,UAAU;AACjE,QAAMC,QAAO,YAAY;AAEzB,QAAMF,aAAY,KAAK;AACvB,EAAAG,QAAO,GAAGH,aAAY,SAAS,IAAI;AAEnC,QAAMA,aAAY,QAAQ,YAAY,EAAE,KAAK,MAAM,YAAY,MAAM,CAAC;AAEtE,QAAM,iBAAiB,oBAAoB;AAAA,IAAK,CAAC,eAC/CI,YAAWC,MAAK,KAAKH,OAAM,UAAU,CAAC;AAAA,EACxC;AAEA,QAAM,qBAAqB;AAE3B,MAAI,mBAAmB,UAAaF,aAAY,KAAK,aAAa,QAAW;AAC3E,QAAIA,aAAY,KAAK,aAAa,oBAAoB;AACpD,MAAE,QAAK,0DAAqD;AAC5D;AAAA,IACF;AAEA,QAAIC,mBAAkB;AAEpB,iBAAW,cAAc,qBAAqB;AAC5C,cAAS,OAAGI,MAAK,KAAKH,OAAM,UAAU,CAAC,EAAE,MAAM,MAAM,IAAI;AAAA,MAC3D;AAAA,IACF,OAAO;AACL,YAAM,cAAc,MAAM,cAAc;AAAA,QACtC,SAAS;AAAA,MACX,CAAC;AAED,UAAM,YAAS,WAAW,KAAK,CAAC,aAAa;AAC3C,QAAE,UAAO,yDAAiD;AAC1D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,iBAAW,cAAc,qBAAqB;AAC5C,cAAS,OAAGG,MAAK,KAAKH,OAAM,UAAU,CAAC,EAAE,MAAM,MAAM,IAAI;AAAA,MAC3D;AAAA,IACF;AAAA,EACF;AAEA,EAAAF,aAAY,KAAK,WAAW;AAE5B,QAAMA,aAAY,KAAK;AAEvB,EAAE,QAAK,6CAAwC;AACjD;;;ApB/CA,IAAM,UAAU,IAAI,QAAQ;AAC5B,QACG,KAAK,gBAAgB,EACrB,YAAY,wCAAwC,EACpD,QAAQ,gBAAgB,OAAO,EAC/B,OAAO,eAAe,wBAAwB,KAAK,EACnD,OAAO,YAAY,gCAAgC,KAAK,EACxD,OAAO,cAAc,kCAAkC,KAAK,EAC5D,OAAO,eAAe,0BAA0B,KAAK,EACrD,OAAO,gBAAgB,oCAAoC,KAAK,EAChE,OAAO,aAAa,qBAAqB,KAAK;AAEjD,QAAQ,MAAM;AACd,IAAM,UAAsB,QAAQ,KAAK;AAGzC,IAAM,mBAAmB,QAAQ,KAAK,SAAS;AAE/C,eAAe,OAAO;AACpB,MAAI,CAAC,kBAAkB;AACrB,IAAE,SAAM,EAAE,KAAK,EAAE,OAAO,oBAAoB,CAAC,CAAC;AAAA,EAChD;AAEA,QAAM,YAAY,aAAa;AAE/B,MAAI,cAAc,OAAO;AACvB,UAAM,iBAAiB,aAAa;AACpC,UAAM,iBAAiB;AAAA,EACzB,EAAE,IAAI,EAAE,KAAK,mCAAoB,cAAc,yCAA0B,CAAC,CAAC;AAAA;AAAA,2CAE1C,EAAE,OAAO,cAAc,CAAC,+CAA0C,EAAE,OAAO,QAAQ,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrH,EAAE,KAAK,oBAAoB,CAAC;AAE1B,QAAI,kBAAkB;AACpB,cAAQ,MAAM,cAAc;AAAA,IAC9B,OAAO;AACL,MAAE,UAAO,cAAc;AAAA,IACzB;AACA,YAAQ,KAAK,CAAC;AAAA,EAChB;AAGA,MAAI,QAAQ,UAAU,QAAQ,CAAC,WAAW,GAAG;AAC3C,QAAI,kBAAkB;AACpB,cAAQ;AAAA,QACN;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,UAAM,cAAc,MAAM,cAAc;AAAA,MACtC,SAAS;AAAA,IACX,CAAC;AAED,QAAM,YAAS,WAAW,KAAK,CAAC,aAAa;AAC3C,MAAE,UAAO,4CAAyC;AAClD,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AAEA,QAAMM,eAAc,IAAI,YAAY;AAGpC,QAAM,cAAc,MAAMA,aAAY,eAAe;AAGrD,MAAI,CAAC,kBAAkB;AACrB,QAAI,gBAAgB,UAAU;AAC5B,YAAM,cAAc,MAAM,cAAc;AAAA,QACtC,SAAS;AAAA,MACX,CAAC;AAED,UAAM,YAAS,WAAW,KAAK,CAAC,aAAa;AAC3C,QAAE,UAAO,6EAAmD;AAC5D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,gBAAgB,SAAS;AAC3B,YAAM,cAAc,MAAM,cAAc;AAAA,QACtC,SAAS;AAAA,MACX,CAAC;AAED,UAAM,YAAS,WAAW,GAAG;AAC3B,QAAE,UAAO,WAAI;AACb,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAEA,UAAI,CAAC,aAAa;AAChB,QAAE,UAAO,6EAAmD;AAC5D,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,gBAAgB,UAAU;AAC5B,YAAM,cAAc,MAAM,cAAc;AAAA,QACtC,SAAS;AAAA,MACX,CAAC;AAED,UAAM,YAAS,WAAW,GAAG;AAC3B,QAAE,UAAO,WAAI;AACb,gBAAQ,KAAK,CAAC;AAAA,MAChB;AAAA,IACF;AAEA,QAAI,gBAAgB,QAAQ;AAC1B,MAAE;AAAA,QACA;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF;AACA,MAAI,gBAAgB,YAAY,gBAAgB,SAAS;AACvD,QAAI,kBAAkB;AACpB,YAAMA,aAAY,UAAU;AAAA,IAC9B,OAAO;AACL,UAAI,CAAE,MAAMA,aAAY,MAAM,GAAI;AAChC,cAAM,cAAc,MAAM,cAAc;AAAA,UACtC,SAAS;AAAA,QACX,CAAC;AAED,YAAM,YAAS,WAAW,KAAK,CAAC,aAAa;AAC3C,UAAE,UAAO,kDAA0C;AACnD,kBAAQ,KAAK,CAAC;AAAA,QAChB;AAEA,cAAMA,aAAY,UAAU;AAAA,MAC9B;AAAA,IACF;AAAA,EACF;AAGA,MAAI,iBAA2B,CAAC;AAEhC,MAAI,QAAQ,QAAQ,MAAM;AACxB,qBAAiB,CAAC,UAAU,YAAY,aAAa,YAAY;AAAA,EACnE,WAAW,kBAAkB;AAE3B,QAAI,QAAQ,WAAW,MAAM;AAC3B,qBAAe,KAAK,QAAQ;AAAA,IAC9B;AACA,QAAI,QAAQ,aAAa,MAAM;AAC7B,qBAAe,KAAK,UAAU;AAAA,IAChC;AACA,QAAI,QAAQ,aAAa,MAAM;AAC7B,qBAAe,KAAK,WAAW;AAAA,IACjC;AACA,QAAI,QAAQ,eAAe,MAAM;AAC/B,qBAAe,KAAK,YAAY;AAAA,IAClC;AAEA,QAAI,eAAe,WAAW,GAAG;AAC/B,cAAQ;AAAA,QACN;AAAA,MACF;AACA,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,OAAO;AAEL,UAAM,kBAAkB,MAAQ,eAAY;AAAA,MAC1C,SAAS,6CAAgC,EAAE,KAAK,6CAAmC,CAAC;AAAA,MACpF,eAAe,CAAC,UAAU,YAAY,aAAa,YAAY;AAAA,MAC/D,SAAS;AAAA,QACP;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,KAAK,EAAE,WAAW,QAAQ,CAAC;AAAA,UACpC,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,KAAK,EAAE,aAAa,UAAU,CAAC;AAAA,UACxC,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,KAAK,gBAAgB;AAAA,UAC9B,MAAM;AAAA,QACR;AAAA,QACA;AAAA,UACE,OAAO;AAAA,UACP,OAAO,EAAE,KAAK,YAAY;AAAA,UAC1B,MAAM;AAAA,QACR;AAAA,MACF;AAAA,MACA,UAAU;AAAA,IACZ,CAAC;AAED,QAAM,YAAS,eAAe,KAAK,gBAAgB,WAAW,GAAG;AAC/D,MAAE,UAAO,yCAA+B;AACxC,cAAQ,KAAK,CAAC;AAAA,IAChB;AAEA,qBAAiB;AAAA,EACnB;AAGA,QAAMA,aAAY,QAAQ,kBAAkB;AAAA,IAC1C,KAAK;AAAA,IACL,cAAc,CAAC;AAAA,EACjB,CAAC;AAGD,MAAI,eAAe,SAAS,QAAQ,GAAG;AACrC,UAAM,cAAc,gBAAgB;AAAA,EACtC;AAEA,MAAI,eAAe,SAAS,UAAU,GAAG;AACvC,UAAM,gBAAgB,gBAAgB;AACtC,UAAM,kBAAkB;AAAA,EAC1B;AAEA,MAAI,eAAe,SAAS,YAAY,GAAG;AACzC,UAAM,kBAAkB;AAAA,EAC1B;AAEA,MAAI,eAAe,SAAS,WAAW,GAAG;AACxC,UAAM,qBAAqB;AAAA,EAC7B;AAEA,QAAMA,aAAY,aAAa;AAE/B,MAAI,kBAAkB;AACpB,YAAQ,IAAI,qDAAsC;AAAA,EACpD,OAAO;AACL,IAAE,SAAM,qDAAsC;AAAA,EAChD;AACF;AAGA,IAAI;AAEF,OAAK,KAAK;AACZ,SAAS,OAAgB;AACvB,UAAQ,MAAM,sCAAkB,KAAK;AACrC,UAAQ,KAAK,CAAC;AAChB;","names":["p","path","execSync","path","options","spinner","p","isInteractive","writeFile","path","assert","assert","packageJson","writeFile","path","p","path","packageJson","isNonInteractive","root","path","p","existsSync","fs","path","packageJson","path","existsSync","assert","writeFile","packageJson","assert","writeFile","p","assert","existsSync","fs","path","packageJson","isNonInteractive","root","assert","existsSync","path","packageJson"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../package.json","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/run-if-interactive.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/nestjs-ci.ts","../../src/cli/templates/nextjs-ci.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 { Command } from \"commander\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\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\n// Types\ninterface CliOptions {\n force?: boolean;\n eslint?: boolean;\n prettier?: boolean;\n ghAction?: boolean;\n commitlint?: boolean;\n all?: boolean;\n}\n\n// CLI setup\nconst program = new Command();\nprogram\n .name(\"@solvro/config\")\n .description(\"Solvro's engineering style guide setup\")\n .version(packageJsonData.version)\n .option(\"-f, --force\", \"Skip git clean check\", false)\n .option(\"--eslint\", \"Install ESLint configuration\", false)\n .option(\"--prettier\", \"Install Prettier configuration\", false)\n .option(\"--gh-action\", \"Install GitHub Actions\", false)\n .option(\"--commitlint\", \"Install Commitlint configuration\", false)\n .option(\"-a, --all\", \"Install all tools\", false);\n\nprogram.parse();\nconst options: CliOptions = program.opts();\n\n// Check if running in non-interactive mode (any CLI flags provided)\nconst isNonInteractive = process.argv.length > 2;\n\nasync function main() {\n if (!isNonInteractive) {\n p.intro(c.bold(c.bgBlue(\" @solvro/config \")));\n }\n\n const userAgent = getUserAgent();\n\n if (userAgent !== \"npm\") {\n const packageManager = userAgent ?? \"unknown\";\n const warningMessage = `\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt z ${c.yellow(packageManager)}'em, ale @solvro/config działa tylko z ${c.yellow(\"npm'em\")}. \n\nSupport dla innych menedżerów pakietów nie jest planowany - chcemy jednolitego stacku technologicznego dla projektów w naszym kochanym kole Solvro.\n\nUżyj zamiast tego npm'a:\n${c.cyan(\"npx @solvro/config\")}`;\n\n if (isNonInteractive) {\n console.error(warningMessage);\n } else {\n p.cancel(warningMessage);\n }\n process.exit(1);\n }\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n console.error(\n \"Repozytorium Git ma niezatwierdzone zmiany. Użyj --force, aby pominąć to sprawdzenie.\",\n );\n process.exit(1);\n }\n\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\n const packageJson = new PackageJson();\n\n // Determine project type automatically\n const projectType = await packageJson.getProjectType();\n\n // Project type confirmation (interactive mode only)\n if (!isNonInteractive) {\n if (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\n if (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\n if (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\n if (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 }\n if (projectType === \"adonis\" || projectType === \"react\") {\n if (isNonInteractive) {\n await packageJson.ensureESM();\n } else {\n if (!(await packageJson.isESM())) {\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 await packageJson.ensureESM();\n }\n }\n }\n\n // Determine which tools to install\n let toolsToInstall: string[] = [];\n\n if (options.all === true) {\n toolsToInstall = [\"eslint\", \"prettier\", \"gh-action\", \"commitlint\"];\n } else if (isNonInteractive) {\n // In non-interactive mode, only install explicitly requested tools\n if (options.eslint === true) {\n toolsToInstall.push(\"eslint\");\n }\n if (options.prettier === true) {\n toolsToInstall.push(\"prettier\");\n }\n if (options.ghAction === true) {\n toolsToInstall.push(\"gh-action\");\n }\n if (options.commitlint === true) {\n toolsToInstall.push(\"commitlint\");\n }\n\n if (toolsToInstall.length === 0) {\n console.error(\n \"Nie wybrano żadnych narzędzi. Użyj --eslint, --prettier, --gh-action, --commitlint, lub --all\",\n );\n process.exit(1);\n }\n } else {\n // Interactive mode\n const 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\n if (p.isCancel(additionalTools) || additionalTools.length === 0) {\n p.cancel(\"Nie wybrano żadnych narzędzi.\");\n process.exit(1);\n }\n\n toolsToInstall = additionalTools;\n }\n\n // Install the base package\n await packageJson.install(\"@solvro/config\", {\n dev: true,\n alwaysUpdate: !isNonInteractive,\n });\n\n // Install selected tools\n if (toolsToInstall.includes(\"eslint\")) {\n await installEslint(isNonInteractive);\n }\n\n if (toolsToInstall.includes(\"prettier\")) {\n await installPrettier(isNonInteractive);\n await installLintStaged();\n }\n\n if (toolsToInstall.includes(\"commitlint\")) {\n await installCommitLint();\n }\n\n if (toolsToInstall.includes(\"gh-action\")) {\n await installGithubActions();\n }\n\n await packageJson.clearInstall();\n\n if (isNonInteractive) {\n console.log(\"✅ Konfiguracja zakończona pomyślnie!\");\n } else {\n p.outro(\"✅ Konfiguracja zakończona pomyślnie!\");\n }\n}\n\n// Run the main function\ntry {\n // eslint-disable-next-line unicorn/prefer-top-level-await\n void main();\n} catch (error: unknown) {\n console.error(\"Wystąpił błąd:\", error);\n process.exit(1);\n}\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"2.0.5\",\n \"description\": \"Solvro's engineering style guide\",\n \"keywords\": [\n \"eslint\",\n \"prettier\",\n \"solvro\"\n ],\n \"homepage\": \"https://github.com/Solvro/lib-web-solvro-config#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/Solvro/lib-web-solvro-config/issues\"\n },\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/Solvro/lib-web-solvro-config.git\"\n },\n \"license\": \"MPL-2.0\",\n \"type\": \"module\",\n \"exports\": {\n \"./eslint\": {\n \"types\": \"./dist/eslint/index.d.ts\",\n \"import\": \"./dist/eslint/index.js\",\n \"require\": \"./dist/eslint/index.cjs\"\n },\n \"./prettier\": {\n \"types\": \"./dist/prettier/index.d.ts\",\n \"import\": \"./dist/prettier/index.js\",\n \"require\": \"./dist/prettier/index.cjs\"\n },\n \"./commitlint\": {\n \"types\": \"./dist/commitlint/index.d.ts\",\n \"import\": \"./dist/commitlint/index.js\",\n \"require\": \"./dist/commitlint/index.cjs\"\n }\n },\n \"bin\": \"./bin/index.js\",\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"tsup\",\n \"build:watch\": \"tsup --watch\",\n \"cli\": \"tsx ./src/cli/index.ts\",\n \"dev\": \"npx @eslint/config-inspector\",\n \"format\": \"prettier --check .\",\n \"knip\": \"knip\",\n \"lint\": \"eslint .\",\n \"prepare\": \"husky || true\",\n \"prepublish\": \"npm run build\",\n \"release\": \"semantic-release\",\n \"test\": \"vitest run\",\n \"test:ui\": \"vitest --ui\",\n \"test:watch\": \"vitest\",\n \"typecheck\": \"tsc --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^2.1.2\",\n \"@clack/prompts\": \"^0.11.0\",\n \"@commitlint/config-conventional\": \"^19.8.1\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^6.7.1\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.5.0\",\n \"@eslint/js\": \"^9.34.0\",\n \"@tanstack/eslint-plugin-query\": \"^5.83.1\",\n \"@trivago/prettier-plugin-sort-imports\": \"^5.2.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.41.0\",\n \"commander\": \"^14.0.0\",\n \"eslint-config-flat-gitignore\": \"^2.1.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-antfu\": \"^3.1.1\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jsdoc\": \"^54.1.1\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^17.21.3\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^5.2.0\",\n \"eslint-plugin-react-refresh\": \"^0.4.20\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.4.4\",\n \"eslint-plugin-unicorn\": \"^60.0.0\",\n \"eslint-plugin-unused-imports\": \"^4.2.0\",\n \"execa\": \"^9.6.0\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^16.3.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.2\",\n \"package-manager-detector\": \"^1.3.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^2.5.19\",\n \"prettier-plugin-tailwindcss\": \"^0.6.14\",\n \"semver\": \"^7.7.2\",\n \"typescript-eslint\": \"^8.41.0\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^19.8.1\",\n \"@eslint/config-inspector\": \"^1.2.0\",\n \"@next/eslint-plugin-next\": \"^15.5.2\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^24.3.0\",\n \"@types/semver\": \"^7.7.0\",\n \"@vitest/coverage-v8\": \"^3.2.4\",\n \"@vitest/ui\": \"^3.2.4\",\n \"eslint\": \"^9.34.0\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^5.63.0\",\n \"lint-staged\": \"^16.1.5\",\n \"pkg-pr-new\": \"^0.0.58\",\n \"prettier\": \"^3.6.2\",\n \"semantic-release\": \"^24.2.7\",\n \"tsup\": \"^8.5.0\",\n \"tsx\": \"^4.20.5\",\n \"typescript\": \"^5.9.2\",\n \"vitest\": \"^3.2.4\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0 <16.0.0-0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.5.2\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\"\n },\n \"volta\": {\n \"node\": \"22.17.0\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\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 { projectRoot } from \"./git-root\";\nimport { runIfInteractive } from \"./run-if-interactive\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\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 isNextJs() {\n return this.hasPackage(\"next\");\n }\n\n async doesSatisfies(package_: string, version: string) {\n await this.load();\n\n assert.ok(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 isESM() {\n await this.load();\n\n assert.ok(this.json !== null);\n\n return this.json.type === \"module\";\n }\n\n async ensureESM() {\n if (await this.isESM()) {\n return;\n }\n\n assert.ok(this.json !== null);\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(projectRoot(), \"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.ok(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 runIfInteractive(() => {\n spinner.start(`Instalowanie ${package_}`);\n });\n\n await $$`npm i ${options?.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zainstalowany 😍`);\n });\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 runIfInteractive(() => {\n spinner.start(`Aktualizowanie ${package_}`);\n });\n await $$`npm i ${options.dev === true ? \"-D\" : \"\"} ${package_}@latest`;\n runIfInteractive(() => {\n spinner.stop(`${package_} zaktualizowany 😍`);\n });\n\n await this.load();\n }\n }\n\n async clearInstall() {\n await $$`npm ci`;\n }\n}\n","import { findUpSync } from \"find-up-simple\";\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\n\nexport const projectRoot = () => {\n const packageJsonPath = findUpSync(\"package.json\");\n\n if (packageJsonPath !== undefined) {\n return path.dirname(packageJsonPath);\n }\n\n return process.cwd();\n};\n\nexport const gitRoot = () => {\n try {\n const rootDirectory = execSync(\"git rev-parse --show-toplevel\", {\n cwd: projectRoot(),\n });\n return rootDirectory.toString().trim();\n } catch {\n return projectRoot();\n }\n};\n","import type { ExecaScriptMethod } from \"execa\";\n\nimport { projectRoot } from \"./git-root\";\n\nlet cachedExeca: ExecaScriptMethod | null = null;\n\nexport const $$ = (async (...arguments_: Parameters<ExecaScriptMethod>) => {\n if (cachedExeca === null) {\n const { $ } = await import(\"execa\");\n cachedExeca = $({\n cwd: projectRoot(),\n });\n }\n return cachedExeca(...arguments_);\n}) as ExecaScriptMethod;\n","import isInteractive from \"is-interactive\";\n\nexport const runIfInteractive = <T>(function_: () => T): T | undefined => {\n if (isInteractive()) {\n return function_();\n }\n\n return undefined;\n};\n","import * as p from \"@clack/prompts\";\nimport isInteractive from \"is-interactive\";\n\nexport const polishConfirm = async (props: p.ConfirmOptions) => {\n if (!isInteractive()) {\n return true;\n }\n\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 { projectRoot } from \"../utils/git-root\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { installHusky } from \"./install-husky\";\nimport { commitlint } from \"./templates/commitlint\";\n\nconst root = projectRoot();\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 \"node: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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\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.isNextJs())) {\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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n await fs.rm(path.join(root, eslintConfig));\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\n const isESM = await packageJson.isESM();\n\n const eslintFilename = isESM ? \"eslint.config.js\" : \"eslint.config.mjs\";\n\n await fs.writeFile(\n path.join(root, eslintFilename),\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, projectRoot } 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 { nestjsCi } from \"./templates/nestjs-ci\";\nimport { reactCi } from \"./templates/react-ci\";\n\nconst packageJson = new PackageJson();\n\nexport const installGithubActions = async () => {\n const gitDirectory = gitRoot();\n const projectDirectory = projectRoot();\n await packageJson.load();\n\n const ghWorkflowsDirectory = path.join(gitDirectory, \".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(projectDirectory, \".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 const usingNextJs = await packageJson.isNextJs();\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n reactCi({\n nodeVersion: \"22\",\n withCommitlint,\n usingNextJs,\n }),\n );\n }\n\n if (type === \"nestjs\") {\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"ci.yml\"),\n nestjsCi({\n nodeVersion: \"22\",\n withCommitlint,\n }),\n );\n }\n\n if (!existsSync(path.join(gitDirectory, \".github/dependabot.yml\"))) {\n await fs.writeFile(\n path.join(gitDirectory, \".github/dependabot.yml\"),\n dependabot(),\n );\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 nestjsCi = ({\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: 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: Run e2e tests\n run: npm run test:e2e\n if: always()\n\n - name: Build\n run: npm run build\n if: always()`;\n","export const nextJsCi = () => `\n - name: Setup build cache\n uses: actions/cache@v4\n with:\n path: \\${{ github.workspace }}/.next/cache\n key: \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/package-lock.json') }}-\\${{ hashFiles('**/*.ts', '**/*.tsx') }}\n restore-keys: |\n \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/package-lock.json') }}- \n`;\n","import { commitLintCi } from \"./commit-lint-ci\";\nimport { nextJsCi } from \"./nextjs-ci\";\n\nexport const reactCi = ({\n nodeVersion,\n withCommitlint,\n usingNextJs,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n usingNextJs: 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${usingNextJs ? nextJsCi() : \"\"}\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.ok(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 { projectRoot } 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 (isNonInteractive = false) => {\n const root = projectRoot();\n\n await packageJson.load();\n assert.ok(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 if (isNonInteractive) {\n // In non-interactive mode, automatically overwrite existing config\n for (const configName of prettierConfigNames) {\n await fs.rm(path.join(root, configName)).catch(() => null);\n }\n } else {\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\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","path","execSync","path","options","spinner","p","isInteractive","writeFile","path","assert","assert","packageJson","writeFile","path","p","path","packageJson","isNonInteractive","root","path","p","existsSync","fs","path","packageJson","path","existsSync","assert","writeFile","packageJson","assert","writeFile","p","assert","existsSync","fs","path","packageJson","isNonInteractive","root","assert","existsSync","path","packageJson"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solvro/config",
3
- "version": "2.0.5",
3
+ "version": "2.0.6",
4
4
  "description": "Solvro's engineering style guide",
5
5
  "keywords": [
6
6
  "eslint",
@@ -59,67 +59,67 @@
59
59
  },
60
60
  "prettier": "./dist/prettier/index.js",
61
61
  "dependencies": {
62
- "@adonisjs/eslint-config": "^2.1.0",
62
+ "@adonisjs/eslint-config": "^2.1.2",
63
63
  "@clack/prompts": "^0.11.0",
64
64
  "@commitlint/config-conventional": "^19.8.1",
65
- "@darraghor/eslint-plugin-nestjs-typed": "^6.7.0",
65
+ "@darraghor/eslint-plugin-nestjs-typed": "^6.7.1",
66
66
  "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0",
67
- "@eslint/js": "^9.30.1",
68
- "@tanstack/eslint-plugin-query": "^5.81.2",
67
+ "@eslint/js": "^9.34.0",
68
+ "@tanstack/eslint-plugin-query": "^5.83.1",
69
69
  "@trivago/prettier-plugin-sort-imports": "^5.2.2",
70
- "@typescript-eslint/eslint-plugin": "^8.35.1",
70
+ "@typescript-eslint/eslint-plugin": "^8.41.0",
71
71
  "commander": "^14.0.0",
72
72
  "eslint-config-flat-gitignore": "^2.1.0",
73
- "eslint-config-prettier": "^10.1.5",
73
+ "eslint-config-prettier": "^10.1.8",
74
74
  "eslint-plugin-antfu": "^3.1.1",
75
75
  "eslint-plugin-import": "^2.32.0",
76
- "eslint-plugin-jsdoc": "^51.3.3",
76
+ "eslint-plugin-jsdoc": "^54.1.1",
77
77
  "eslint-plugin-jsx-a11y": "^6.10.2",
78
- "eslint-plugin-n": "^17.21.0",
78
+ "eslint-plugin-n": "^17.21.3",
79
79
  "eslint-plugin-react": "^7.37.5",
80
80
  "eslint-plugin-react-hooks": "^5.2.0",
81
- "eslint-plugin-react-refresh": "^0.4.16",
82
- "eslint-plugin-react-you-might-not-need-an-effect": "^0.4.1",
83
- "eslint-plugin-unicorn": "^59.0.1",
84
- "eslint-plugin-unused-imports": "^4.1.4",
81
+ "eslint-plugin-react-refresh": "^0.4.20",
82
+ "eslint-plugin-react-you-might-not-need-an-effect": "^0.4.4",
83
+ "eslint-plugin-unicorn": "^60.0.0",
84
+ "eslint-plugin-unused-imports": "^4.2.0",
85
85
  "execa": "^9.6.0",
86
86
  "find-up-simple": "^1.0.1",
87
87
  "globals": "^16.3.0",
88
88
  "is-interactive": "^2.0.0",
89
- "local-pkg": "^1.1.1",
89
+ "local-pkg": "^1.1.2",
90
90
  "package-manager-detector": "^1.3.0",
91
91
  "picocolors": "^1.1.1",
92
- "prettier-plugin-packagejson": "^2.5.18",
93
- "prettier-plugin-tailwindcss": "^0.6.13",
92
+ "prettier-plugin-packagejson": "^2.5.19",
93
+ "prettier-plugin-tailwindcss": "^0.6.14",
94
94
  "semver": "^7.7.2",
95
- "typescript-eslint": "^8.35.1"
95
+ "typescript-eslint": "^8.41.0"
96
96
  },
97
97
  "devDependencies": {
98
98
  "@commitlint/cli": "^19.8.1",
99
- "@eslint/config-inspector": "^1.1.0",
100
- "@next/eslint-plugin-next": "^15.3.5",
99
+ "@eslint/config-inspector": "^1.2.0",
100
+ "@next/eslint-plugin-next": "^15.5.2",
101
101
  "@semantic-release/git": "^10.0.1",
102
- "@types/node": "^24.0.10",
102
+ "@types/node": "^24.3.0",
103
103
  "@types/semver": "^7.7.0",
104
104
  "@vitest/coverage-v8": "^3.2.4",
105
105
  "@vitest/ui": "^3.2.4",
106
- "eslint": "^9.30.1",
106
+ "eslint": "^9.34.0",
107
107
  "husky": "^9.1.7",
108
- "knip": "^5.61.3",
109
- "lint-staged": "^16.1.2",
108
+ "knip": "^5.63.0",
109
+ "lint-staged": "^16.1.5",
110
110
  "pkg-pr-new": "^0.0.58",
111
111
  "prettier": "^3.6.2",
112
- "semantic-release": "^24.2.6",
112
+ "semantic-release": "^24.2.7",
113
113
  "tsup": "^8.5.0",
114
- "tsx": "^4.20.3",
115
- "typescript": "^5.8.3",
114
+ "tsx": "^4.20.5",
115
+ "typescript": "^5.9.2",
116
116
  "vitest": "^3.2.4"
117
117
  },
118
118
  "peerDependencies": {
119
119
  "@next/eslint-plugin-next": ">=12.3.0 <16.0.0-0",
120
120
  "eslint": ">=9.0.0 <10.0.0"
121
121
  },
122
- "packageManager": "npm@11.4.2",
122
+ "packageManager": "npm@11.5.2",
123
123
  "engines": {
124
124
  "node": "^20.19.0 || >=22.12.0"
125
125
  },