@solvro/config 3.0.0-beta.7 → 3.0.0-beta.8

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.
@@ -34,7 +34,7 @@ var import_picocolors8 = __toESM(require("picocolors"), 1);
34
34
  // package.json
35
35
  var package_default = {
36
36
  name: "@solvro/config",
37
- version: "3.0.0-beta.6",
37
+ version: "3.0.0-beta.7",
38
38
  description: "Solvro's engineering style guide",
39
39
  keywords: [
40
40
  "eslint",
@@ -249,8 +249,8 @@ var confirmProjectType = async (projectType) => {
249
249
  var import_node_child_process = require("child_process");
250
250
  function isGitClean(options2) {
251
251
  try {
252
- (0, import_node_child_process.execSync)("git diff-index --quiet HEAD --", { stdio: "ignore", ...options2 });
253
- return true;
252
+ const diff = (0, import_node_child_process.execSync)("git status --porcelain", options2);
253
+ return diff.toString().trim() === "";
254
254
  } catch {
255
255
  return false;
256
256
  }
@@ -625,29 +625,34 @@ var p8 = __toESM(require("@clack/prompts"), 1);
625
625
  var import_node_fs = require("fs");
626
626
  var import_picocolors6 = __toESM(require("picocolors"), 1);
627
627
 
628
- // src/utils/is-in-git-repo.ts
628
+ // src/utils/get-git-branch.ts
629
629
  var import_node_child_process3 = require("child_process");
630
- var isInGitRepo = (options2) => {
630
+ function getGitBranch(options2) {
631
631
  try {
632
- (0, import_node_child_process3.execSync)("git rev-parse --is-inside-work-tree ", {
633
- stdio: "ignore",
634
- ...options2
635
- });
636
- return true;
632
+ const result = (0, import_node_child_process3.execSync)(
633
+ "git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD",
634
+ {
635
+ encoding: "utf8",
636
+ stdio: ["ignore", "pipe", "ignore"],
637
+ ...options2
638
+ }
639
+ );
640
+ const branch = result.toString().trim();
641
+ return branch === "" ? null : branch;
637
642
  } catch {
638
- return false;
643
+ return null;
639
644
  }
640
- };
645
+ }
641
646
 
642
647
  // src/utils/print-intro.ts
643
648
  var printIntro = () => {
644
649
  const packageJsonUrl = new URL("../../package.json", importMetaUrl);
645
650
  const packageJson7 = JSON.parse((0, import_node_fs.readFileSync)(packageJsonUrl, "utf8"));
646
- const packageRoot = new URL("../", packageJsonUrl);
651
+ const packageRoot = new URL("./", packageJsonUrl);
647
652
  const execOptions = { cwd: packageRoot };
648
- const clean = !isInGitRepo(execOptions) || isGitClean(execOptions);
649
653
  const version = packageJson7.version == null || packageJson7.version.trim() === "" ? import_picocolors6.default.red("(unknown version)") : import_picocolors6.default.green(import_picocolors6.default.bold(`v${packageJson7.version}`));
650
- const dirtyStatus = clean ? "" : import_picocolors6.default.white(" (dirty)");
654
+ const branchName = getGitBranch(execOptions);
655
+ const dirtyStatus = branchName == null ? "" : import_picocolors6.default.white(` (${isGitClean(execOptions) ? branchName : "dirty"})`);
651
656
  p8.intro(
652
657
  ` ${import_picocolors6.default.blueBright(import_picocolors6.default.bold("@solvro/config"))} ${version}${dirtyStatus} `
653
658
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../node_modules/tsup/assets/cjs_shims.js","../../src/cli/index.ts","../../package.json","../../src/constants/github.ts","../../src/constants/package-managers.ts","../../src/utils/check-is-non-interactive.ts","../../src/utils/confirm-project-type.ts","../../src/utils/polish-confirm.ts","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/is-supported-package-manager.ts","../../src/utils/run-with-spinner.ts","../../src/utils/run-if-interactive.ts","../../src/utils/warn-inconsistent-user-agent.ts","../../src/utils/warn-missing-lockfile.ts","../../src/utils/warn-unsupported-package-manager.ts","../../src/utils/format-link.ts","../../src/utils/print-intro.ts","../../src/utils/is-in-git-repo.ts","../../src/utils/print-outro.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/pnpm-setup-ci.ts","../../src/cli/templates/node-setup-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":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import * as p from \"@clack/prompts\";\nimport { Command } from \"commander\";\nimport c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { checkIsNonInteractive } from \"../utils/check-is-non-interactive\";\nimport { confirmProjectType } from \"../utils/confirm-project-type\";\nimport { isGitClean } from \"../utils/is-git-clean\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\nimport { printIntro } from \"../utils/print-intro\";\nimport { printOutro } from \"../utils/print-outro\";\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\nconst isNonInteractive = checkIsNonInteractive();\n\nasync function main() {\n printIntro();\n\n const packageJson = new PackageJson();\n packageJson.verifyPackageManager();\n await packageJson.load(); // Project directory check\n await packageJson.validateUserAgentConsistency();\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n p.log.error(\"Repozytorium Git ma niezatwierdzone zmiany.\");\n p.cancel(\"Użyj --force, aby pominąć to sprawdzenie.\");\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 // Peer dependencies check\n if (\n (await packageJson.hasPackage(\"eslint\")) &&\n !(await packageJson.doesSatisfy(\"eslint\", \"<10\"))\n ) {\n const eslint = await packageJson.getPackageInfo(\"eslint\");\n const versionInfo =\n eslint?.version == null\n ? \"\"\n : ` Obecnie zainstalowana jest wersja ${c.yellow(eslint.version)}.`;\n const errorMessage = `ESLint w wersji powyżej 9 nie jest jeszcze wspierany.${versionInfo}`;\n const errorRetry = \"Proszę zainstalować wersję 9 i spróbować ponownie.\";\n if (isNonInteractive) {\n p.log.error(errorMessage);\n p.cancel(errorRetry);\n process.exit(1);\n }\n const isConfirmed = await polishConfirm({\n message: `${errorMessage} Zainstalować starszą wersję ${c.magenta(\"ESLint\")}'a? (Wymagane by kontynuować)`,\n });\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(errorRetry);\n process.exit(1);\n }\n await packageJson.install(\"eslint\", { dev: true, version: \"^9\" });\n }\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 await confirmProjectType(c.magenta(\"Adonis\"));\n }\n\n if (projectType === \"react\") {\n await confirmProjectType(c.cyan(\"React\"));\n }\n\n if (projectType === \"nestjs\") {\n await confirmProjectType(c.red(\"NestJS\"));\n }\n\n if (projectType === \"node\") {\n p.cancel(\n `Nie znaleziono ani ${c.magenta(\"Adonis\")}-a, ${c.cyan(\"React\")}-a, ani ${c.white(\"NestJS\")}-a. 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 p.log.error(\"Nie wybrano żadnych narzędzi.\");\n p.cancel(\n \"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 if (toolsToInstall.includes(\"prettier\")) {\n await packageJson.localExecute(\"prettier\", \"--write\", \"package.json\");\n }\n\n printOutro();\n}\n\nasync function mainWrapper() {\n try {\n await main();\n } catch (error: unknown) {\n if (process.env.NODE_ENV === \"development\") {\n p.cancel(\"Unhandled error in main:\");\n console.error(error instanceof Error ? error.message : error);\n } else {\n p.log.error(\"Wystąpił nieoczekiwany błąd :(\");\n p.cancel(`Proszę zgłosić go twórcom: ${BUG_TRACKER_URL}`);\n }\n process.exit(1);\n }\n}\n\n// eslint-disable-next-line unicorn/prefer-top-level-await\nvoid mainWrapper();\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"3.0.0-beta.6\",\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\": \"tsgo --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^3.0.0\",\n \"@clack/prompts\": \"^1.3.0\",\n \"@commitlint/config-conventional\": \"^21.0.0\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^7.1.32\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.7.1\",\n \"@eslint/config-helpers\": \"^0.4.2\",\n \"@eslint/js\": \"^9.39.4\",\n \"@solvro/utils\": \"^1.6.0\",\n \"@tanstack/eslint-plugin-query\": \"^5.100.9\",\n \"@trivago/prettier-plugin-sort-imports\": \"^6.0.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.58.2\",\n \"@vitest/eslint-plugin\": \"^1.6.18\",\n \"commander\": \"^14.0.3\",\n \"eslint-config-flat-gitignore\": \"^2.3.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-antfu\": \"^3.2.2\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jest\": \"^29.15.2\",\n \"eslint-plugin-jsdoc\": \"^63.0.0\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^18.0.1\",\n \"eslint-plugin-playwright\": \"^2.10.4\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-react-refresh\": \"^0.5.2\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.10.1\",\n \"eslint-plugin-regexp\": \"^3.1.0\",\n \"eslint-plugin-unicorn\": \"^64.0.0\",\n \"eslint-plugin-unused-imports\": \"^4.4.1\",\n \"eslint-plugin-zod\": \"^4.5.1\",\n \"execa\": \"^9.6.1\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^17.6.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.2\",\n \"package-manager-detector\": \"^1.6.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^3.0.2\",\n \"prettier-plugin-tailwindcss\": \"^0.8.0\",\n \"semver\": \"^7.7.4\",\n \"typescript-eslint\": \"^8.58.2\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^21.0.0\",\n \"@commitlint/types\": \"^21.0.0\",\n \"@eslint/config-inspector\": \"^3.0.1\",\n \"@next/eslint-plugin-next\": \"^16.2.5\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^25.6.0\",\n \"@types/semver\": \"^7.7.1\",\n \"@typescript-eslint/utils\": \"^8.58.2\",\n \"@typescript/native-preview\": \"^7.0.0-dev.20260507.1\",\n \"@vitest/coverage-v8\": \"^4.1.5\",\n \"@vitest/ui\": \"^4.1.5\",\n \"eslint\": \"^9.39.4\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^6.12.0\",\n \"lint-staged\": \"^17.0.2\",\n \"pkg-pr-new\": \"^0.0.75\",\n \"prettier\": \"^3.8.3\",\n \"semantic-release\": \"^25.0.3\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.14.0\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\",\n \"npm\": \"^11.11.1\"\n },\n \"volta\": {\n \"node\": \"22.22.1\",\n \"npm\": \"11.11.1\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const REPO_URL = \"https://github.com/Solvro/lib-web-solvro-config\";\nexport const BUG_TRACKER_URL = `${REPO_URL}/issues/new`;\n","export type PackageManager = \"npm\" | \"pnpm\";\n\nexport interface PackageManagerConfig {\n name: PackageManager;\n lockfile: string;\n installPackage: string;\n installDependencies: string;\n cleanInstall: string;\n downloadExecute: string;\n localExecute: string;\n runScript: string;\n create: string;\n}\n\nexport const PACKAGE_MANAGER_CONFIGS = {\n npm: {\n name: \"npm\",\n lockfile: \"package-lock.json\",\n installPackage: \"npm install\",\n installDependencies: \"npm install\",\n cleanInstall: \"npm ci\",\n downloadExecute: \"npx\",\n localExecute: \"npx\",\n runScript: \"npm run\",\n create: \"npm create\",\n },\n pnpm: {\n name: \"pnpm\",\n lockfile: \"pnpm-lock.yaml\",\n installPackage: \"pnpm add\",\n installDependencies: \"pnpm install\",\n cleanInstall: \"pnpm install --frozen-lockfile\",\n downloadExecute: \"pnpm dlx\",\n localExecute: \"pnpm exec\",\n runScript: \"pnpm run\",\n create: \"pnpm create\",\n },\n} satisfies Record<PackageManager, PackageManagerConfig>;\n\nexport const SUPPORTED_PACKAGE_MANAGERS = Object.keys(PACKAGE_MANAGER_CONFIGS);\n","/** Check if running in non-interactive mode (any CLI flags provided) */\nexport const checkIsNonInteractive = () => process.argv.length > 2;\n","import * as p from \"@clack/prompts\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { polishConfirm } from \"./polish-confirm\";\n\nexport const confirmProjectType = async (projectType: string) => {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał ${projectType}'a. 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(\n `:( Zgłoś błąd na GitHubie, a my spróbujemy pomóc: ${BUG_TRACKER_URL}`,\n );\n process.exit(1);\n }\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 { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport function isGitClean(options?: ExecSyncOptions): boolean {\n try {\n execSync(\"git diff-index --quiet HEAD --\", { stdio: \"ignore\", ...options });\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 { stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\nimport semver from \"semver\";\n\nimport type { PackageManager, PackageManagerConfig } from \"../constants\";\nimport { PACKAGE_MANAGER_CONFIGS } from \"../constants\";\nimport { $$ } from \"./$$\";\nimport { projectRoot } from \"./git-root\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\nimport { runWithSpinner } from \"./run-with-spinner\";\nimport { warnInconsistentUserAgent } from \"./warn-inconsistent-user-agent\";\nimport { warnMissingLockfile } from \"./warn-missing-lockfile\";\nimport { warnUnsupportedPackageManager } from \"./warn-unsupported-package-manager\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n private _manager: PackageManagerConfig | null = null;\n\n /** Checks if the process is run from a supported package manager */\n public verifyPackageManager(): PackageManager {\n const userAgent = getUserAgent();\n if (!isSupportedPackageManager(userAgent)) {\n warnUnsupportedPackageManager({ userAgent });\n process.exit(1);\n }\n return userAgent;\n }\n\n /** Checks if the user agent is consistent with the project's package manager */\n public async validateUserAgentConsistency() {\n if (this.json?.packageManager != null) {\n const [detectedPackageManager] = this.json.packageManager.split(\"@\");\n if (detectedPackageManager !== this.manager.name) {\n warnInconsistentUserAgent({\n userAgent: this.manager,\n detectedPackageManager,\n });\n process.exit(1);\n }\n }\n const lockfilePath = path.join(projectRoot(), this.manager.lockfile);\n try {\n await stat(lockfilePath);\n } catch {\n warnMissingLockfile({ manager: this.manager });\n process.exit(1);\n }\n }\n\n // use a cached getter to avoid premature exits on importing a file with a toplevel construction\n public get manager(): PackageManagerConfig {\n if (this._manager == null) {\n const userAgent = this.verifyPackageManager();\n this._manager = PACKAGE_MANAGER_CONFIGS[userAgent];\n }\n return this._manager;\n }\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\n\n if (json === null) {\n p.cancel(\n `Nie znaleziono pliku ${c.cyan(\"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 getPackageInfo(package_: string) {\n return getPackageInfo(package_);\n }\n\n async doesSatisfy(package_: string, version: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n const packageInfo = await this.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 p.cancel(\n `Projekty korzystające zarówno z ${c.magenta(\"Adonis\")}a jak i ${c.cyan(\"React\")}a nie są wspierane.`,\n );\n process.exit(1);\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\n private async writeScript(name: string, script: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n this.json.scripts = this.json.scripts ?? {};\n this.json.scripts[name] = script;\n\n await this.save();\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 await this.writeScript(name, script);\n }\n\n /** Replaces the existing script if it matches the expected value exactly. Prevents overwriting custom scripts that may have diverged from the original.\n *\n * @returns `true` if the script was updated, `false` if it was not updated because the existing script did not exist or it did not match the expected value.\n */\n async updateScriptIfExists(\n name: string,\n script: string,\n expectedScript: string,\n ): Promise<boolean> {\n await this.load();\n\n assert.ok(this.json !== null);\n\n if (this.json.scripts?.[name] !== expectedScript) {\n return false;\n }\n\n await this.writeScript(name, script);\n return true;\n }\n\n async install(\n package_: string,\n options: {\n version?: string;\n dev?: boolean;\n alwaysUpdate?: boolean;\n } = {},\n ) {\n const isInstalled = await this.hasPackage(package_);\n const installVersion = options.version ?? \"latest\";\n const [installCommand, ...commandOptions] =\n this.manager.installPackage.split(\" \");\n if (options.dev === true) {\n commandOptions.push(\"-D\");\n }\n if (!isInstalled) {\n await runWithSpinner({\n start: `Instalowanie pakietu ${package_}`,\n stop: `${package_} zainstalowany 😍`,\n error: `Instalacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n\n return;\n }\n\n if (\n options.alwaysUpdate === true ||\n (options.version != null &&\n !(await this.doesSatisfy(package_, options.version)))\n ) {\n await runWithSpinner({\n start: `Aktualizowanie pakietu ${package_}`,\n stop: `${package_} zaktualizowany 😍`,\n error: `Aktualizacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n }\n }\n\n async localExecute(...commandArguments: string[]) {\n const [command, ...commandOptions] = this.manager.localExecute.split(\" \");\n const options = [...commandOptions, ...commandArguments];\n await $$(command, options);\n }\n\n async clearInstall() {\n const [command, ...options] = this.manager.cleanInstall.split(\" \");\n await runWithSpinner({\n start: \"Instalowanie pakietów na świeżo\",\n stop: \"Wszystkie pakiety zainstalowane 😍\",\n error: \"Instalacja pakietów na świeżo nie powiodła się 🥶\",\n callback: async () => {\n await $$(command, options);\n },\n });\n }\n\n /**\n * Gets the pnpm major version from package.json packageManager field or user agent.\n * Falls back to version \"10\" if neither source is available.\n * Returns only the major version for CI stability.\n */\n async getPnpmVersion(): Promise<string> {\n await this.load();\n\n if (this.json?.packageManager?.startsWith(\"pnpm@\") === true) {\n const version = this.json.packageManager.split(\"@\")[1];\n const majorVersion = version.split(\".\")[0];\n if (/^\\d+$/.test(majorVersion)) {\n return majorVersion;\n }\n }\n\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent != null) {\n const match = /pnpm\\/(\\d+)(?:\\.\\d+)*/.exec(userAgent);\n if (match?.[1] != null) {\n return match[1];\n }\n }\n\n return \"10\";\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 type { PackageManager } from \"../constants\";\nimport { SUPPORTED_PACKAGE_MANAGERS } from \"../constants\";\n\nexport const isSupportedPackageManager = (\n userAgent: string | null | undefined,\n): userAgent is PackageManager =>\n userAgent != null && SUPPORTED_PACKAGE_MANAGERS.includes(userAgent);\n","import * as p from \"@clack/prompts\";\n\nimport { runIfInteractive } from \"./run-if-interactive\";\n\n/** Executes a callback using a clack spinner, printing the provided messages, with error handling. */\nexport const runWithSpinner = async (options: {\n start: string;\n stop: string;\n error: string;\n callback: () => void | Promise<void>;\n}) => {\n const spinner = p.spinner();\n runIfInteractive(() => {\n spinner.start(options.start);\n });\n try {\n await options.callback();\n } catch (error) {\n runIfInteractive(() => {\n spinner.error(options.error);\n });\n throw error;\n }\n runIfInteractive(() => {\n spinner.stop(options.stop);\n });\n};\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 c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\n\nconst hintInstallWithDetected = (manager: PackageManagerConfig) => `\n${c.white(`Upewnij się, że używasz właściwej komendy. Spróbuj jeszcze raz za pomocą ${c.yellow(manager.name)}-a:`)}\n\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\nconst warnUnsupported = (manager: string) => `\n${c.white(\"@solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\")}\n\n${SUPPORTED_PACKAGE_MANAGERS.map((supportedManager) => c.white(`- ${c.cyan(supportedManager)}`)).join(\"\\n\")}\n\nNiestety, ${c.yellow(manager)} nie jest wspierany.`;\n\nexport const warnInconsistentUserAgent = ({\n userAgent,\n detectedPackageManager,\n}: {\n userAgent: PackageManagerConfig;\n detectedPackageManager: string;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: niespójny menedżer pakietów ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(userAgent.name)}-em, ale w tym projekcie wykryto menedżer pakietów ${c.yellow(detectedPackageManager)}.\n${\n isSupportedPackageManager(detectedPackageManager)\n ? hintInstallWithDetected(PACKAGE_MANAGER_CONFIGS[detectedPackageManager])\n : warnUnsupported(detectedPackageManager)\n}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\n\nexport const warnMissingLockfile = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: brak pliku blokady ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(manager.name)}-em, ale nie wykryto pliku ${c.yellow(manager.lockfile)}.\n\n${c.white(`Sprawdź, czy ten projekt na pewno korzysta z menedżera pakietów ${c.yellow(manager.name)}.`)}\n${c.white(\"Jeśli to się zgadza, zainstaluj najpierw zależności projektu i spróbuj ponownie:\")}\n\n${c.cyan(manager.installDependencies)}\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants/package-managers\";\nimport { formatLink } from \"./format-link\";\n\nexport const warnUnsupportedPackageManager = ({\n userAgent,\n}: {\n userAgent: string | null;\n}) => {\n const packageManager = userAgent ?? \"<nieznany>\";\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(packageManager)}-em, ale @solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\n\n${SUPPORTED_PACKAGE_MANAGERS.map((manager) => c.white(`- ${c.cyan(manager)}`)).join(\"\\n\")}\n\n${c.white(`Chcesz, aby dodano wsparcie dla ${c.yellow(packageManager)}-a? Daj nam znać!`)}\n${formatLink(BUG_TRACKER_URL)}\n\n${c.white(`W międzyczasie użyj innego menedżera:`)}\n\n${Object.values(PACKAGE_MANAGER_CONFIGS)\n .map((config) => c.cyan(`${config.downloadExecute} @solvro/config`))\n .join(c.white(\"\\nlub\\n\"))}`;\n\n p.cancel(warningMessage);\n};\n","import c from \"picocolors\";\n\nexport const formatLink = (link: string) => c.white(c.underline(link));\n","import * as p from \"@clack/prompts\";\nimport { readFileSync } from \"node:fs\";\nimport c from \"picocolors\";\n\nimport { isGitClean } from \"./is-git-clean\";\nimport { isInGitRepo } from \"./is-in-git-repo\";\n\nexport const printIntro = () => {\n const packageJsonUrl = new URL(\"../../package.json\", import.meta.url);\n const packageJson = JSON.parse(readFileSync(packageJsonUrl, \"utf8\")) as {\n version?: string;\n };\n const packageRoot = new URL(\"../\", packageJsonUrl);\n const execOptions = { cwd: packageRoot };\n const clean = !isInGitRepo(execOptions) || isGitClean(execOptions);\n const version =\n packageJson.version == null || packageJson.version.trim() === \"\"\n ? c.red(\"(unknown version)\")\n : c.green(c.bold(`v${packageJson.version}`));\n const dirtyStatus = clean ? \"\" : c.white(\" (dirty)\");\n p.intro(\n ` ${c.blueBright(c.bold(\"@solvro/config\"))} ${version}${dirtyStatus} `,\n );\n};\n","import { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport const isInGitRepo = (options: ExecSyncOptions) => {\n try {\n execSync(\"git rev-parse --is-inside-work-tree \", {\n stdio: \"ignore\",\n ...options,\n });\n return true;\n } catch {\n return false;\n }\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { REPO_URL } from \"../constants\";\nimport { formatLink } from \"./format-link\";\n\nconst PROJECT_DOCS_URL =\n \"https://docs.solvro.pl/projects/creating#konfiguracja-repozytorium\";\n\nexport const printOutro = () => {\n p.log.success(\"Konfiguracja zakończona pomyślnie!\");\n p.note(\n `\\\n1. ${c.white(`${c.bold(\"Obowiązkowo\")} zapoznaj się z ${c.cyan(\"dokumentacją tworzenia projektów\")}:`)}\n ${formatLink(PROJECT_DOCS_URL)}\n2. ${c.white(`Pamiętaj o zostawianiu nam ${c.yellow(\"gwiazdek na GitHubie\")}! ⭐`)}\n ${formatLink(REPO_URL)}`,\n \"Kolejne kroki\",\n );\n p.outro(\"Miłego dnia! 👋\");\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\", { version: \"^20\", dev: true });\n\n await writeFile(\n path.join(root, \".husky/commit-msg\"),\n `${packageJson.manager.localExecute} commitlint --edit \"$1\"\\n`,\n );\n\n await writeFile(path.join(root, \".commitlintrc.js\"), commitlint());\n};\n","import assert from \"node:assert\";\n\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 packageJson.localExecute(\"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\", {\n dev: true,\n version: \"^9\",\n });\n\n const type = await packageJson.getProjectType();\n\n if (type === \"react\" && (await packageJson.isNextJs())) {\n const is15 = await packageJson.doesSatisfy(\"next\", \">=15\");\n\n if (!is15) {\n p.cancel(\n \"Next.js musi być w co najmniej 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.log.warning(\"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.log.step(\"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 const manager = packageJson.manager;\n\n // Get pnpm version dynamically when using pnpm\n const pnpmVersion =\n manager.name === \"pnpm\" ? await packageJson.getPnpmVersion() : undefined;\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 manager,\n pnpmVersion,\n }),\n );\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"db.yml\"),\n adonisMigrationsCi({ nodeVersion: \"22\", manager, pnpmVersion }),\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 manager,\n pnpmVersion,\n }),\n );\n\n if (usingNextJs) {\n await packageJson.addScriptIfNotExists(\"types:generate\", \"next typegen\");\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 manager,\n pnpmVersion,\n }),\n );\n // https://github.com/Solvro/lib-web-solvro-config/issues/431\n const formatScriptUpdated = await packageJson.updateScriptIfExists(\n \"format\",\n \"prettier --write .\",\n 'prettier --write \"src/**/*.ts\" \"test/**/*.ts\"',\n );\n if (!formatScriptUpdated) {\n p.log.warning(\n \"Aktualizacja skryptu format została pominięta, ponieważ został on zmieniony lub nie istnieje. Ręcznie zaktualizuj skrypt format w package.json, aby formatował wszystkie pliki projektu, a nie tylko te w katalogach src i test.\",\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\", \"prettier --write .\");\n await packageJson.addScriptIfNotExists(\"format:check\", \"prettier --check .\");\n await packageJson.addScriptIfNotExists(\"lint\", \"eslint . --max-warnings=0\");\n await packageJson.addScriptIfNotExists(\"types:check\", \"tsc --noEmit\");\n\n p.log.step(\"Dodano konfigurację CI i skrypty.\");\n};\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const commitLintCi = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => `\n - name: Check commit name\n if: github.event_name == 'pull_request'\n run: ${manager.localExecute} commitlint --from \\${{ github.event.pull_request.base.sha }} --to \\${{ github.event.pull_request.head.sha }} --verbose\n`;\n","export const pnpmSetupCi = ({\n pnpmVersion = \"10\",\n}: { pnpmVersion?: string } = {}) => `\n - name: Setup pnpm\n uses: pnpm/action-setup@v4\n with:\n version: ${pnpmVersion}\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { pnpmSetupCi } from \"./pnpm-setup-ci\";\n\nexport const nodeSetupCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `\\\n - name: Checkout\n uses: actions/checkout@v6\n with:\n fetch-depth: 0\n${manager.name === \"pnpm\" ? pnpmSetupCi({ pnpmVersion }) : \"\"}\n - name: Setup node\n uses: actions/setup-node@v6\n with:\n node-version: ${nodeVersion}\n cache: \"${manager.name}\"`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisMigrationsCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\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 type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const nestjsCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Run e2e tests\n run: ${manager.runScript} test:e2e\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const nextJsCi = ({ manager }: { manager: PackageManagerConfig }) => `\n - name: Setup build cache\n uses: actions/cache@v5\n with:\n path: \\${{ github.workspace }}/.next/cache\n key: \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\\${{ hashFiles('**/*.ts', '**/*.tsx') }}\n restore-keys: |\n \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nextJsCi } from \"./nextjs-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const reactCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n usingNextJs,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n usingNextJs: boolean;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n${usingNextJs ? nextJsCi({ manager }) : \"\"}\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import assert from \"node:assert\";\nimport { 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\";\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(\n path.join(projectRoot(), \".husky/pre-commit\"),\n `${packageJson.manager.localExecute} lint-staged\\n`,\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\", {\n dev: true,\n version: \">=3\",\n });\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.log.warning(\"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.log.step(\"Konfiguracja Prettiera została dodana.\");\n};\n"],"mappings":"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","names":["p","import_picocolors","p","isInteractive","options","p","import_node_path","import_picocolors","import_node_child_process","path","p","import_is_interactive","isInteractive","options","spinner","p","c","p","import_picocolors","c","p","import_picocolors","import_picocolors","c","c","path","c","assert","semver","options","p","import_picocolors","import_node_child_process","options","packageJson","c","p","import_picocolors","c","import_promises","import_node_path","import_node_assert","assert","packageJson","path","p","import_node_fs","import_node_path","packageJson","isNonInteractive","root","path","p","import_node_fs","fs","import_node_path","packageJson","path","import_node_assert","import_promises","import_node_path","packageJson","assert","path","p","import_node_assert","import_node_fs","fs","import_node_path","packageJson","isNonInteractive","root","assert","path","packageJson","c"]}
1
+ {"version":3,"sources":["../../node_modules/tsup/assets/cjs_shims.js","../../src/cli/index.ts","../../package.json","../../src/constants/github.ts","../../src/constants/package-managers.ts","../../src/utils/check-is-non-interactive.ts","../../src/utils/confirm-project-type.ts","../../src/utils/polish-confirm.ts","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/is-supported-package-manager.ts","../../src/utils/run-with-spinner.ts","../../src/utils/run-if-interactive.ts","../../src/utils/warn-inconsistent-user-agent.ts","../../src/utils/warn-missing-lockfile.ts","../../src/utils/warn-unsupported-package-manager.ts","../../src/utils/format-link.ts","../../src/utils/print-intro.ts","../../src/utils/get-git-branch.ts","../../src/utils/print-outro.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/pnpm-setup-ci.ts","../../src/cli/templates/node-setup-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":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","import * as p from \"@clack/prompts\";\nimport { Command } from \"commander\";\nimport c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { checkIsNonInteractive } from \"../utils/check-is-non-interactive\";\nimport { confirmProjectType } from \"../utils/confirm-project-type\";\nimport { isGitClean } from \"../utils/is-git-clean\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\nimport { printIntro } from \"../utils/print-intro\";\nimport { printOutro } from \"../utils/print-outro\";\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\nconst isNonInteractive = checkIsNonInteractive();\n\nasync function main() {\n printIntro();\n\n const packageJson = new PackageJson();\n packageJson.verifyPackageManager();\n await packageJson.load(); // Project directory check\n await packageJson.validateUserAgentConsistency();\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n p.log.error(\"Repozytorium Git ma niezatwierdzone zmiany.\");\n p.cancel(\"Użyj --force, aby pominąć to sprawdzenie.\");\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 // Peer dependencies check\n if (\n (await packageJson.hasPackage(\"eslint\")) &&\n !(await packageJson.doesSatisfy(\"eslint\", \"<10\"))\n ) {\n const eslint = await packageJson.getPackageInfo(\"eslint\");\n const versionInfo =\n eslint?.version == null\n ? \"\"\n : ` Obecnie zainstalowana jest wersja ${c.yellow(eslint.version)}.`;\n const errorMessage = `ESLint w wersji powyżej 9 nie jest jeszcze wspierany.${versionInfo}`;\n const errorRetry = \"Proszę zainstalować wersję 9 i spróbować ponownie.\";\n if (isNonInteractive) {\n p.log.error(errorMessage);\n p.cancel(errorRetry);\n process.exit(1);\n }\n const isConfirmed = await polishConfirm({\n message: `${errorMessage} Zainstalować starszą wersję ${c.magenta(\"ESLint\")}'a? (Wymagane by kontynuować)`,\n });\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(errorRetry);\n process.exit(1);\n }\n await packageJson.install(\"eslint\", { dev: true, version: \"^9\" });\n }\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 await confirmProjectType(c.magenta(\"Adonis\"));\n }\n\n if (projectType === \"react\") {\n await confirmProjectType(c.cyan(\"React\"));\n }\n\n if (projectType === \"nestjs\") {\n await confirmProjectType(c.red(\"NestJS\"));\n }\n\n if (projectType === \"node\") {\n p.cancel(\n `Nie znaleziono ani ${c.magenta(\"Adonis\")}-a, ${c.cyan(\"React\")}-a, ani ${c.white(\"NestJS\")}-a. 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 p.log.error(\"Nie wybrano żadnych narzędzi.\");\n p.cancel(\n \"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 if (toolsToInstall.includes(\"prettier\")) {\n await packageJson.localExecute(\"prettier\", \"--write\", \"package.json\");\n }\n\n printOutro();\n}\n\nasync function mainWrapper() {\n try {\n await main();\n } catch (error: unknown) {\n if (process.env.NODE_ENV === \"development\") {\n p.cancel(\"Unhandled error in main:\");\n console.error(error instanceof Error ? error.message : error);\n } else {\n p.log.error(\"Wystąpił nieoczekiwany błąd :(\");\n p.cancel(`Proszę zgłosić go twórcom: ${BUG_TRACKER_URL}`);\n }\n process.exit(1);\n }\n}\n\n// eslint-disable-next-line unicorn/prefer-top-level-await\nvoid mainWrapper();\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"3.0.0-beta.7\",\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\": \"tsgo --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^3.0.0\",\n \"@clack/prompts\": \"^1.3.0\",\n \"@commitlint/config-conventional\": \"^21.0.0\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^7.1.32\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.7.1\",\n \"@eslint/config-helpers\": \"^0.4.2\",\n \"@eslint/js\": \"^9.39.4\",\n \"@solvro/utils\": \"^1.6.0\",\n \"@tanstack/eslint-plugin-query\": \"^5.100.9\",\n \"@trivago/prettier-plugin-sort-imports\": \"^6.0.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.58.2\",\n \"@vitest/eslint-plugin\": \"^1.6.18\",\n \"commander\": \"^14.0.3\",\n \"eslint-config-flat-gitignore\": \"^2.3.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-antfu\": \"^3.2.2\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jest\": \"^29.15.2\",\n \"eslint-plugin-jsdoc\": \"^63.0.0\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^18.0.1\",\n \"eslint-plugin-playwright\": \"^2.10.4\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-react-refresh\": \"^0.5.2\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.10.1\",\n \"eslint-plugin-regexp\": \"^3.1.0\",\n \"eslint-plugin-unicorn\": \"^64.0.0\",\n \"eslint-plugin-unused-imports\": \"^4.4.1\",\n \"eslint-plugin-zod\": \"^4.5.1\",\n \"execa\": \"^9.6.1\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^17.6.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.2\",\n \"package-manager-detector\": \"^1.6.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^3.0.2\",\n \"prettier-plugin-tailwindcss\": \"^0.8.0\",\n \"semver\": \"^7.7.4\",\n \"typescript-eslint\": \"^8.58.2\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^21.0.0\",\n \"@commitlint/types\": \"^21.0.0\",\n \"@eslint/config-inspector\": \"^3.0.1\",\n \"@next/eslint-plugin-next\": \"^16.2.5\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^25.6.0\",\n \"@types/semver\": \"^7.7.1\",\n \"@typescript-eslint/utils\": \"^8.58.2\",\n \"@typescript/native-preview\": \"^7.0.0-dev.20260507.1\",\n \"@vitest/coverage-v8\": \"^4.1.5\",\n \"@vitest/ui\": \"^4.1.5\",\n \"eslint\": \"^9.39.4\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^6.12.0\",\n \"lint-staged\": \"^17.0.2\",\n \"pkg-pr-new\": \"^0.0.75\",\n \"prettier\": \"^3.8.3\",\n \"semantic-release\": \"^25.0.3\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.14.0\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\",\n \"npm\": \"^11.11.1\"\n },\n \"volta\": {\n \"node\": \"22.22.1\",\n \"npm\": \"11.11.1\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const REPO_URL = \"https://github.com/Solvro/lib-web-solvro-config\";\nexport const BUG_TRACKER_URL = `${REPO_URL}/issues/new`;\n","export type PackageManager = \"npm\" | \"pnpm\";\n\nexport interface PackageManagerConfig {\n name: PackageManager;\n lockfile: string;\n installPackage: string;\n installDependencies: string;\n cleanInstall: string;\n downloadExecute: string;\n localExecute: string;\n runScript: string;\n create: string;\n}\n\nexport const PACKAGE_MANAGER_CONFIGS = {\n npm: {\n name: \"npm\",\n lockfile: \"package-lock.json\",\n installPackage: \"npm install\",\n installDependencies: \"npm install\",\n cleanInstall: \"npm ci\",\n downloadExecute: \"npx\",\n localExecute: \"npx\",\n runScript: \"npm run\",\n create: \"npm create\",\n },\n pnpm: {\n name: \"pnpm\",\n lockfile: \"pnpm-lock.yaml\",\n installPackage: \"pnpm add\",\n installDependencies: \"pnpm install\",\n cleanInstall: \"pnpm install --frozen-lockfile\",\n downloadExecute: \"pnpm dlx\",\n localExecute: \"pnpm exec\",\n runScript: \"pnpm run\",\n create: \"pnpm create\",\n },\n} satisfies Record<PackageManager, PackageManagerConfig>;\n\nexport const SUPPORTED_PACKAGE_MANAGERS = Object.keys(PACKAGE_MANAGER_CONFIGS);\n","/** Check if running in non-interactive mode (any CLI flags provided) */\nexport const checkIsNonInteractive = () => process.argv.length > 2;\n","import * as p from \"@clack/prompts\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { polishConfirm } from \"./polish-confirm\";\n\nexport const confirmProjectType = async (projectType: string) => {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał ${projectType}'a. 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(\n `:( Zgłoś błąd na GitHubie, a my spróbujemy pomóc: ${BUG_TRACKER_URL}`,\n );\n process.exit(1);\n }\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 { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport function isGitClean(options?: ExecSyncOptions): boolean {\n try {\n const diff = execSync(\"git status --porcelain\", options);\n return diff.toString().trim() === \"\";\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 { stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\nimport semver from \"semver\";\n\nimport type { PackageManager, PackageManagerConfig } from \"../constants\";\nimport { PACKAGE_MANAGER_CONFIGS } from \"../constants\";\nimport { $$ } from \"./$$\";\nimport { projectRoot } from \"./git-root\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\nimport { runWithSpinner } from \"./run-with-spinner\";\nimport { warnInconsistentUserAgent } from \"./warn-inconsistent-user-agent\";\nimport { warnMissingLockfile } from \"./warn-missing-lockfile\";\nimport { warnUnsupportedPackageManager } from \"./warn-unsupported-package-manager\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n private _manager: PackageManagerConfig | null = null;\n\n /** Checks if the process is run from a supported package manager */\n public verifyPackageManager(): PackageManager {\n const userAgent = getUserAgent();\n if (!isSupportedPackageManager(userAgent)) {\n warnUnsupportedPackageManager({ userAgent });\n process.exit(1);\n }\n return userAgent;\n }\n\n /** Checks if the user agent is consistent with the project's package manager */\n public async validateUserAgentConsistency() {\n if (this.json?.packageManager != null) {\n const [detectedPackageManager] = this.json.packageManager.split(\"@\");\n if (detectedPackageManager !== this.manager.name) {\n warnInconsistentUserAgent({\n userAgent: this.manager,\n detectedPackageManager,\n });\n process.exit(1);\n }\n }\n const lockfilePath = path.join(projectRoot(), this.manager.lockfile);\n try {\n await stat(lockfilePath);\n } catch {\n warnMissingLockfile({ manager: this.manager });\n process.exit(1);\n }\n }\n\n // use a cached getter to avoid premature exits on importing a file with a toplevel construction\n public get manager(): PackageManagerConfig {\n if (this._manager == null) {\n const userAgent = this.verifyPackageManager();\n this._manager = PACKAGE_MANAGER_CONFIGS[userAgent];\n }\n return this._manager;\n }\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\n\n if (json === null) {\n p.cancel(\n `Nie znaleziono pliku ${c.cyan(\"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 getPackageInfo(package_: string) {\n return getPackageInfo(package_);\n }\n\n async doesSatisfy(package_: string, version: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n const packageInfo = await this.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 p.cancel(\n `Projekty korzystające zarówno z ${c.magenta(\"Adonis\")}a jak i ${c.cyan(\"React\")}a nie są wspierane.`,\n );\n process.exit(1);\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\n private async writeScript(name: string, script: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n this.json.scripts = this.json.scripts ?? {};\n this.json.scripts[name] = script;\n\n await this.save();\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 await this.writeScript(name, script);\n }\n\n /** Replaces the existing script if it matches the expected value exactly. Prevents overwriting custom scripts that may have diverged from the original.\n *\n * @returns `true` if the script was updated, `false` if it was not updated because the existing script did not exist or it did not match the expected value.\n */\n async updateScriptIfExists(\n name: string,\n script: string,\n expectedScript: string,\n ): Promise<boolean> {\n await this.load();\n\n assert.ok(this.json !== null);\n\n if (this.json.scripts?.[name] !== expectedScript) {\n return false;\n }\n\n await this.writeScript(name, script);\n return true;\n }\n\n async install(\n package_: string,\n options: {\n version?: string;\n dev?: boolean;\n alwaysUpdate?: boolean;\n } = {},\n ) {\n const isInstalled = await this.hasPackage(package_);\n const installVersion = options.version ?? \"latest\";\n const [installCommand, ...commandOptions] =\n this.manager.installPackage.split(\" \");\n if (options.dev === true) {\n commandOptions.push(\"-D\");\n }\n if (!isInstalled) {\n await runWithSpinner({\n start: `Instalowanie pakietu ${package_}`,\n stop: `${package_} zainstalowany 😍`,\n error: `Instalacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n\n return;\n }\n\n if (\n options.alwaysUpdate === true ||\n (options.version != null &&\n !(await this.doesSatisfy(package_, options.version)))\n ) {\n await runWithSpinner({\n start: `Aktualizowanie pakietu ${package_}`,\n stop: `${package_} zaktualizowany 😍`,\n error: `Aktualizacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n }\n }\n\n async localExecute(...commandArguments: string[]) {\n const [command, ...commandOptions] = this.manager.localExecute.split(\" \");\n const options = [...commandOptions, ...commandArguments];\n await $$(command, options);\n }\n\n async clearInstall() {\n const [command, ...options] = this.manager.cleanInstall.split(\" \");\n await runWithSpinner({\n start: \"Instalowanie pakietów na świeżo\",\n stop: \"Wszystkie pakiety zainstalowane 😍\",\n error: \"Instalacja pakietów na świeżo nie powiodła się 🥶\",\n callback: async () => {\n await $$(command, options);\n },\n });\n }\n\n /**\n * Gets the pnpm major version from package.json packageManager field or user agent.\n * Falls back to version \"10\" if neither source is available.\n * Returns only the major version for CI stability.\n */\n async getPnpmVersion(): Promise<string> {\n await this.load();\n\n if (this.json?.packageManager?.startsWith(\"pnpm@\") === true) {\n const version = this.json.packageManager.split(\"@\")[1];\n const majorVersion = version.split(\".\")[0];\n if (/^\\d+$/.test(majorVersion)) {\n return majorVersion;\n }\n }\n\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent != null) {\n const match = /pnpm\\/(\\d+)(?:\\.\\d+)*/.exec(userAgent);\n if (match?.[1] != null) {\n return match[1];\n }\n }\n\n return \"10\";\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 type { PackageManager } from \"../constants\";\nimport { SUPPORTED_PACKAGE_MANAGERS } from \"../constants\";\n\nexport const isSupportedPackageManager = (\n userAgent: string | null | undefined,\n): userAgent is PackageManager =>\n userAgent != null && SUPPORTED_PACKAGE_MANAGERS.includes(userAgent);\n","import * as p from \"@clack/prompts\";\n\nimport { runIfInteractive } from \"./run-if-interactive\";\n\n/** Executes a callback using a clack spinner, printing the provided messages, with error handling. */\nexport const runWithSpinner = async (options: {\n start: string;\n stop: string;\n error: string;\n callback: () => void | Promise<void>;\n}) => {\n const spinner = p.spinner();\n runIfInteractive(() => {\n spinner.start(options.start);\n });\n try {\n await options.callback();\n } catch (error) {\n runIfInteractive(() => {\n spinner.error(options.error);\n });\n throw error;\n }\n runIfInteractive(() => {\n spinner.stop(options.stop);\n });\n};\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 c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\n\nconst hintInstallWithDetected = (manager: PackageManagerConfig) => `\n${c.white(`Upewnij się, że używasz właściwej komendy. Spróbuj jeszcze raz za pomocą ${c.yellow(manager.name)}-a:`)}\n\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\nconst warnUnsupported = (manager: string) => `\n${c.white(\"@solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\")}\n\n${SUPPORTED_PACKAGE_MANAGERS.map((supportedManager) => c.white(`- ${c.cyan(supportedManager)}`)).join(\"\\n\")}\n\nNiestety, ${c.yellow(manager)} nie jest wspierany.`;\n\nexport const warnInconsistentUserAgent = ({\n userAgent,\n detectedPackageManager,\n}: {\n userAgent: PackageManagerConfig;\n detectedPackageManager: string;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: niespójny menedżer pakietów ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(userAgent.name)}-em, ale w tym projekcie wykryto menedżer pakietów ${c.yellow(detectedPackageManager)}.\n${\n isSupportedPackageManager(detectedPackageManager)\n ? hintInstallWithDetected(PACKAGE_MANAGER_CONFIGS[detectedPackageManager])\n : warnUnsupported(detectedPackageManager)\n}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\n\nexport const warnMissingLockfile = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: brak pliku blokady ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(manager.name)}-em, ale nie wykryto pliku ${c.yellow(manager.lockfile)}.\n\n${c.white(`Sprawdź, czy ten projekt na pewno korzysta z menedżera pakietów ${c.yellow(manager.name)}.`)}\n${c.white(\"Jeśli to się zgadza, zainstaluj najpierw zależności projektu i spróbuj ponownie:\")}\n\n${c.cyan(manager.installDependencies)}\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants/package-managers\";\nimport { formatLink } from \"./format-link\";\n\nexport const warnUnsupportedPackageManager = ({\n userAgent,\n}: {\n userAgent: string | null;\n}) => {\n const packageManager = userAgent ?? \"<nieznany>\";\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(packageManager)}-em, ale @solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\n\n${SUPPORTED_PACKAGE_MANAGERS.map((manager) => c.white(`- ${c.cyan(manager)}`)).join(\"\\n\")}\n\n${c.white(`Chcesz, aby dodano wsparcie dla ${c.yellow(packageManager)}-a? Daj nam znać!`)}\n${formatLink(BUG_TRACKER_URL)}\n\n${c.white(`W międzyczasie użyj innego menedżera:`)}\n\n${Object.values(PACKAGE_MANAGER_CONFIGS)\n .map((config) => c.cyan(`${config.downloadExecute} @solvro/config`))\n .join(c.white(\"\\nlub\\n\"))}`;\n\n p.cancel(warningMessage);\n};\n","import c from \"picocolors\";\n\nexport const formatLink = (link: string) => c.white(c.underline(link));\n","import * as p from \"@clack/prompts\";\nimport { readFileSync } from \"node:fs\";\nimport c from \"picocolors\";\n\nimport { getGitBranch } from \"./get-git-branch\";\nimport { isGitClean } from \"./is-git-clean\";\n\nexport const printIntro = () => {\n const packageJsonUrl = new URL(\"../../package.json\", import.meta.url);\n const packageJson = JSON.parse(readFileSync(packageJsonUrl, \"utf8\")) as {\n version?: string;\n };\n const packageRoot = new URL(\"./\", packageJsonUrl);\n const execOptions = { cwd: packageRoot };\n const version =\n packageJson.version == null || packageJson.version.trim() === \"\"\n ? c.red(\"(unknown version)\")\n : c.green(c.bold(`v${packageJson.version}`));\n const branchName = getGitBranch(execOptions);\n const dirtyStatus =\n branchName == null\n ? \"\"\n : c.white(` (${isGitClean(execOptions) ? branchName : \"dirty\"})`);\n p.intro(\n ` ${c.blueBright(c.bold(\"@solvro/config\"))} ${version}${dirtyStatus} `,\n );\n};\n","import { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport function getGitBranch(options?: ExecSyncOptions): string | null {\n try {\n const result = execSync(\n \"git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD\",\n {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n ...options,\n },\n );\n\n const branch = result.toString().trim();\n return branch === \"\" ? null : branch;\n } catch {\n return null;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { REPO_URL } from \"../constants\";\nimport { formatLink } from \"./format-link\";\n\nconst PROJECT_DOCS_URL =\n \"https://docs.solvro.pl/projects/creating#konfiguracja-repozytorium\";\n\nexport const printOutro = () => {\n p.log.success(\"Konfiguracja zakończona pomyślnie!\");\n p.note(\n `\\\n1. ${c.white(`${c.bold(\"Obowiązkowo\")} zapoznaj się z ${c.cyan(\"dokumentacją tworzenia projektów\")}:`)}\n ${formatLink(PROJECT_DOCS_URL)}\n2. ${c.white(`Pamiętaj o zostawianiu nam ${c.yellow(\"gwiazdek na GitHubie\")}! ⭐`)}\n ${formatLink(REPO_URL)}`,\n \"Kolejne kroki\",\n );\n p.outro(\"Miłego dnia! 👋\");\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\", { version: \"^20\", dev: true });\n\n await writeFile(\n path.join(root, \".husky/commit-msg\"),\n `${packageJson.manager.localExecute} commitlint --edit \"$1\"\\n`,\n );\n\n await writeFile(path.join(root, \".commitlintrc.js\"), commitlint());\n};\n","import assert from \"node:assert\";\n\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 packageJson.localExecute(\"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\", {\n dev: true,\n version: \"^9\",\n });\n\n const type = await packageJson.getProjectType();\n\n if (type === \"react\" && (await packageJson.isNextJs())) {\n const is15 = await packageJson.doesSatisfy(\"next\", \">=15\");\n\n if (!is15) {\n p.cancel(\n \"Next.js musi być w co najmniej 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.log.warning(\"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.log.step(\"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 const manager = packageJson.manager;\n\n // Get pnpm version dynamically when using pnpm\n const pnpmVersion =\n manager.name === \"pnpm\" ? await packageJson.getPnpmVersion() : undefined;\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 manager,\n pnpmVersion,\n }),\n );\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"db.yml\"),\n adonisMigrationsCi({ nodeVersion: \"22\", manager, pnpmVersion }),\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 manager,\n pnpmVersion,\n }),\n );\n\n if (usingNextJs) {\n await packageJson.addScriptIfNotExists(\"types:generate\", \"next typegen\");\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 manager,\n pnpmVersion,\n }),\n );\n // https://github.com/Solvro/lib-web-solvro-config/issues/431\n const formatScriptUpdated = await packageJson.updateScriptIfExists(\n \"format\",\n \"prettier --write .\",\n 'prettier --write \"src/**/*.ts\" \"test/**/*.ts\"',\n );\n if (!formatScriptUpdated) {\n p.log.warning(\n \"Aktualizacja skryptu format została pominięta, ponieważ został on zmieniony lub nie istnieje. Ręcznie zaktualizuj skrypt format w package.json, aby formatował wszystkie pliki projektu, a nie tylko te w katalogach src i test.\",\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\", \"prettier --write .\");\n await packageJson.addScriptIfNotExists(\"format:check\", \"prettier --check .\");\n await packageJson.addScriptIfNotExists(\"lint\", \"eslint . --max-warnings=0\");\n await packageJson.addScriptIfNotExists(\"types:check\", \"tsc --noEmit\");\n\n p.log.step(\"Dodano konfigurację CI i skrypty.\");\n};\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const commitLintCi = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => `\n - name: Check commit name\n if: github.event_name == 'pull_request'\n run: ${manager.localExecute} commitlint --from \\${{ github.event.pull_request.base.sha }} --to \\${{ github.event.pull_request.head.sha }} --verbose\n`;\n","export const pnpmSetupCi = ({\n pnpmVersion = \"10\",\n}: { pnpmVersion?: string } = {}) => `\n - name: Setup pnpm\n uses: pnpm/action-setup@v4\n with:\n version: ${pnpmVersion}\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { pnpmSetupCi } from \"./pnpm-setup-ci\";\n\nexport const nodeSetupCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `\\\n - name: Checkout\n uses: actions/checkout@v6\n with:\n fetch-depth: 0\n${manager.name === \"pnpm\" ? pnpmSetupCi({ pnpmVersion }) : \"\"}\n - name: Setup node\n uses: actions/setup-node@v6\n with:\n node-version: ${nodeVersion}\n cache: \"${manager.name}\"`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisMigrationsCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\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 type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const nestjsCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Run e2e tests\n run: ${manager.runScript} test:e2e\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const nextJsCi = ({ manager }: { manager: PackageManagerConfig }) => `\n - name: Setup build cache\n uses: actions/cache@v5\n with:\n path: \\${{ github.workspace }}/.next/cache\n key: \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\\${{ hashFiles('**/*.ts', '**/*.tsx') }}\n restore-keys: |\n \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nextJsCi } from \"./nextjs-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const reactCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n usingNextJs,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n usingNextJs: boolean;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n${usingNextJs ? nextJsCi({ manager }) : \"\"}\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import assert from \"node:assert\";\nimport { 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\";\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(\n path.join(projectRoot(), \".husky/pre-commit\"),\n `${packageJson.manager.localExecute} lint-staged\\n`,\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\", {\n dev: true,\n version: \">=3\",\n });\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.log.warning(\"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.log.step(\"Konfiguracja Prettiera została dodana.\");\n};\n"],"mappings":"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","names":["p","import_picocolors","p","isInteractive","options","p","import_node_path","import_picocolors","import_node_child_process","path","p","import_is_interactive","isInteractive","options","spinner","p","c","p","import_picocolors","c","p","import_picocolors","import_picocolors","c","c","path","c","assert","semver","options","p","import_picocolors","import_node_child_process","options","packageJson","c","p","import_picocolors","c","import_promises","import_node_path","import_node_assert","assert","packageJson","path","p","import_node_fs","import_node_path","packageJson","isNonInteractive","root","path","p","import_node_fs","fs","import_node_path","packageJson","path","import_node_assert","import_promises","import_node_path","packageJson","assert","path","p","import_node_assert","import_node_fs","fs","import_node_path","packageJson","isNonInteractive","root","assert","path","packageJson","c"]}
package/dist/cli/index.js CHANGED
@@ -6,7 +6,7 @@ import c8 from "picocolors";
6
6
  // package.json
7
7
  var package_default = {
8
8
  name: "@solvro/config",
9
- version: "3.0.0-beta.6",
9
+ version: "3.0.0-beta.7",
10
10
  description: "Solvro's engineering style guide",
11
11
  keywords: [
12
12
  "eslint",
@@ -221,8 +221,8 @@ var confirmProjectType = async (projectType) => {
221
221
  import { execSync } from "child_process";
222
222
  function isGitClean(options2) {
223
223
  try {
224
- execSync("git diff-index --quiet HEAD --", { stdio: "ignore", ...options2 });
225
- return true;
224
+ const diff = execSync("git status --porcelain", options2);
225
+ return diff.toString().trim() === "";
226
226
  } catch {
227
227
  return false;
228
228
  }
@@ -597,29 +597,34 @@ import * as p8 from "@clack/prompts";
597
597
  import { readFileSync } from "fs";
598
598
  import c6 from "picocolors";
599
599
 
600
- // src/utils/is-in-git-repo.ts
600
+ // src/utils/get-git-branch.ts
601
601
  import { execSync as execSync3 } from "child_process";
602
- var isInGitRepo = (options2) => {
602
+ function getGitBranch(options2) {
603
603
  try {
604
- execSync3("git rev-parse --is-inside-work-tree ", {
605
- stdio: "ignore",
606
- ...options2
607
- });
608
- return true;
604
+ const result = execSync3(
605
+ "git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD",
606
+ {
607
+ encoding: "utf8",
608
+ stdio: ["ignore", "pipe", "ignore"],
609
+ ...options2
610
+ }
611
+ );
612
+ const branch = result.toString().trim();
613
+ return branch === "" ? null : branch;
609
614
  } catch {
610
- return false;
615
+ return null;
611
616
  }
612
- };
617
+ }
613
618
 
614
619
  // src/utils/print-intro.ts
615
620
  var printIntro = () => {
616
621
  const packageJsonUrl = new URL("../../package.json", import.meta.url);
617
622
  const packageJson7 = JSON.parse(readFileSync(packageJsonUrl, "utf8"));
618
- const packageRoot = new URL("../", packageJsonUrl);
623
+ const packageRoot = new URL("./", packageJsonUrl);
619
624
  const execOptions = { cwd: packageRoot };
620
- const clean = !isInGitRepo(execOptions) || isGitClean(execOptions);
621
625
  const version = packageJson7.version == null || packageJson7.version.trim() === "" ? c6.red("(unknown version)") : c6.green(c6.bold(`v${packageJson7.version}`));
622
- const dirtyStatus = clean ? "" : c6.white(" (dirty)");
626
+ const branchName = getGitBranch(execOptions);
627
+ const dirtyStatus = branchName == null ? "" : c6.white(` (${isGitClean(execOptions) ? branchName : "dirty"})`);
623
628
  p8.intro(
624
629
  ` ${c6.blueBright(c6.bold("@solvro/config"))} ${version}${dirtyStatus} `
625
630
  );
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../package.json","../../src/constants/github.ts","../../src/constants/package-managers.ts","../../src/utils/check-is-non-interactive.ts","../../src/utils/confirm-project-type.ts","../../src/utils/polish-confirm.ts","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/is-supported-package-manager.ts","../../src/utils/run-with-spinner.ts","../../src/utils/run-if-interactive.ts","../../src/utils/warn-inconsistent-user-agent.ts","../../src/utils/warn-missing-lockfile.ts","../../src/utils/warn-unsupported-package-manager.ts","../../src/utils/format-link.ts","../../src/utils/print-intro.ts","../../src/utils/is-in-git-repo.ts","../../src/utils/print-outro.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/pnpm-setup-ci.ts","../../src/cli/templates/node-setup-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 c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { checkIsNonInteractive } from \"../utils/check-is-non-interactive\";\nimport { confirmProjectType } from \"../utils/confirm-project-type\";\nimport { isGitClean } from \"../utils/is-git-clean\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\nimport { printIntro } from \"../utils/print-intro\";\nimport { printOutro } from \"../utils/print-outro\";\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\nconst isNonInteractive = checkIsNonInteractive();\n\nasync function main() {\n printIntro();\n\n const packageJson = new PackageJson();\n packageJson.verifyPackageManager();\n await packageJson.load(); // Project directory check\n await packageJson.validateUserAgentConsistency();\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n p.log.error(\"Repozytorium Git ma niezatwierdzone zmiany.\");\n p.cancel(\"Użyj --force, aby pominąć to sprawdzenie.\");\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 // Peer dependencies check\n if (\n (await packageJson.hasPackage(\"eslint\")) &&\n !(await packageJson.doesSatisfy(\"eslint\", \"<10\"))\n ) {\n const eslint = await packageJson.getPackageInfo(\"eslint\");\n const versionInfo =\n eslint?.version == null\n ? \"\"\n : ` Obecnie zainstalowana jest wersja ${c.yellow(eslint.version)}.`;\n const errorMessage = `ESLint w wersji powyżej 9 nie jest jeszcze wspierany.${versionInfo}`;\n const errorRetry = \"Proszę zainstalować wersję 9 i spróbować ponownie.\";\n if (isNonInteractive) {\n p.log.error(errorMessage);\n p.cancel(errorRetry);\n process.exit(1);\n }\n const isConfirmed = await polishConfirm({\n message: `${errorMessage} Zainstalować starszą wersję ${c.magenta(\"ESLint\")}'a? (Wymagane by kontynuować)`,\n });\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(errorRetry);\n process.exit(1);\n }\n await packageJson.install(\"eslint\", { dev: true, version: \"^9\" });\n }\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 await confirmProjectType(c.magenta(\"Adonis\"));\n }\n\n if (projectType === \"react\") {\n await confirmProjectType(c.cyan(\"React\"));\n }\n\n if (projectType === \"nestjs\") {\n await confirmProjectType(c.red(\"NestJS\"));\n }\n\n if (projectType === \"node\") {\n p.cancel(\n `Nie znaleziono ani ${c.magenta(\"Adonis\")}-a, ${c.cyan(\"React\")}-a, ani ${c.white(\"NestJS\")}-a. 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 p.log.error(\"Nie wybrano żadnych narzędzi.\");\n p.cancel(\n \"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 if (toolsToInstall.includes(\"prettier\")) {\n await packageJson.localExecute(\"prettier\", \"--write\", \"package.json\");\n }\n\n printOutro();\n}\n\nasync function mainWrapper() {\n try {\n await main();\n } catch (error: unknown) {\n if (process.env.NODE_ENV === \"development\") {\n p.cancel(\"Unhandled error in main:\");\n console.error(error instanceof Error ? error.message : error);\n } else {\n p.log.error(\"Wystąpił nieoczekiwany błąd :(\");\n p.cancel(`Proszę zgłosić go twórcom: ${BUG_TRACKER_URL}`);\n }\n process.exit(1);\n }\n}\n\n// eslint-disable-next-line unicorn/prefer-top-level-await\nvoid mainWrapper();\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"3.0.0-beta.6\",\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\": \"tsgo --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^3.0.0\",\n \"@clack/prompts\": \"^1.3.0\",\n \"@commitlint/config-conventional\": \"^21.0.0\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^7.1.32\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.7.1\",\n \"@eslint/config-helpers\": \"^0.4.2\",\n \"@eslint/js\": \"^9.39.4\",\n \"@solvro/utils\": \"^1.6.0\",\n \"@tanstack/eslint-plugin-query\": \"^5.100.9\",\n \"@trivago/prettier-plugin-sort-imports\": \"^6.0.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.58.2\",\n \"@vitest/eslint-plugin\": \"^1.6.18\",\n \"commander\": \"^14.0.3\",\n \"eslint-config-flat-gitignore\": \"^2.3.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-antfu\": \"^3.2.2\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jest\": \"^29.15.2\",\n \"eslint-plugin-jsdoc\": \"^63.0.0\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^18.0.1\",\n \"eslint-plugin-playwright\": \"^2.10.4\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-react-refresh\": \"^0.5.2\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.10.1\",\n \"eslint-plugin-regexp\": \"^3.1.0\",\n \"eslint-plugin-unicorn\": \"^64.0.0\",\n \"eslint-plugin-unused-imports\": \"^4.4.1\",\n \"eslint-plugin-zod\": \"^4.5.1\",\n \"execa\": \"^9.6.1\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^17.6.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.2\",\n \"package-manager-detector\": \"^1.6.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^3.0.2\",\n \"prettier-plugin-tailwindcss\": \"^0.8.0\",\n \"semver\": \"^7.7.4\",\n \"typescript-eslint\": \"^8.58.2\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^21.0.0\",\n \"@commitlint/types\": \"^21.0.0\",\n \"@eslint/config-inspector\": \"^3.0.1\",\n \"@next/eslint-plugin-next\": \"^16.2.5\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^25.6.0\",\n \"@types/semver\": \"^7.7.1\",\n \"@typescript-eslint/utils\": \"^8.58.2\",\n \"@typescript/native-preview\": \"^7.0.0-dev.20260507.1\",\n \"@vitest/coverage-v8\": \"^4.1.5\",\n \"@vitest/ui\": \"^4.1.5\",\n \"eslint\": \"^9.39.4\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^6.12.0\",\n \"lint-staged\": \"^17.0.2\",\n \"pkg-pr-new\": \"^0.0.75\",\n \"prettier\": \"^3.8.3\",\n \"semantic-release\": \"^25.0.3\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.14.0\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\",\n \"npm\": \"^11.11.1\"\n },\n \"volta\": {\n \"node\": \"22.22.1\",\n \"npm\": \"11.11.1\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const REPO_URL = \"https://github.com/Solvro/lib-web-solvro-config\";\nexport const BUG_TRACKER_URL = `${REPO_URL}/issues/new`;\n","export type PackageManager = \"npm\" | \"pnpm\";\n\nexport interface PackageManagerConfig {\n name: PackageManager;\n lockfile: string;\n installPackage: string;\n installDependencies: string;\n cleanInstall: string;\n downloadExecute: string;\n localExecute: string;\n runScript: string;\n create: string;\n}\n\nexport const PACKAGE_MANAGER_CONFIGS = {\n npm: {\n name: \"npm\",\n lockfile: \"package-lock.json\",\n installPackage: \"npm install\",\n installDependencies: \"npm install\",\n cleanInstall: \"npm ci\",\n downloadExecute: \"npx\",\n localExecute: \"npx\",\n runScript: \"npm run\",\n create: \"npm create\",\n },\n pnpm: {\n name: \"pnpm\",\n lockfile: \"pnpm-lock.yaml\",\n installPackage: \"pnpm add\",\n installDependencies: \"pnpm install\",\n cleanInstall: \"pnpm install --frozen-lockfile\",\n downloadExecute: \"pnpm dlx\",\n localExecute: \"pnpm exec\",\n runScript: \"pnpm run\",\n create: \"pnpm create\",\n },\n} satisfies Record<PackageManager, PackageManagerConfig>;\n\nexport const SUPPORTED_PACKAGE_MANAGERS = Object.keys(PACKAGE_MANAGER_CONFIGS);\n","/** Check if running in non-interactive mode (any CLI flags provided) */\nexport const checkIsNonInteractive = () => process.argv.length > 2;\n","import * as p from \"@clack/prompts\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { polishConfirm } from \"./polish-confirm\";\n\nexport const confirmProjectType = async (projectType: string) => {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał ${projectType}'a. 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(\n `:( Zgłoś błąd na GitHubie, a my spróbujemy pomóc: ${BUG_TRACKER_URL}`,\n );\n process.exit(1);\n }\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 { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport function isGitClean(options?: ExecSyncOptions): boolean {\n try {\n execSync(\"git diff-index --quiet HEAD --\", { stdio: \"ignore\", ...options });\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 { stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\nimport semver from \"semver\";\n\nimport type { PackageManager, PackageManagerConfig } from \"../constants\";\nimport { PACKAGE_MANAGER_CONFIGS } from \"../constants\";\nimport { $$ } from \"./$$\";\nimport { projectRoot } from \"./git-root\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\nimport { runWithSpinner } from \"./run-with-spinner\";\nimport { warnInconsistentUserAgent } from \"./warn-inconsistent-user-agent\";\nimport { warnMissingLockfile } from \"./warn-missing-lockfile\";\nimport { warnUnsupportedPackageManager } from \"./warn-unsupported-package-manager\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n private _manager: PackageManagerConfig | null = null;\n\n /** Checks if the process is run from a supported package manager */\n public verifyPackageManager(): PackageManager {\n const userAgent = getUserAgent();\n if (!isSupportedPackageManager(userAgent)) {\n warnUnsupportedPackageManager({ userAgent });\n process.exit(1);\n }\n return userAgent;\n }\n\n /** Checks if the user agent is consistent with the project's package manager */\n public async validateUserAgentConsistency() {\n if (this.json?.packageManager != null) {\n const [detectedPackageManager] = this.json.packageManager.split(\"@\");\n if (detectedPackageManager !== this.manager.name) {\n warnInconsistentUserAgent({\n userAgent: this.manager,\n detectedPackageManager,\n });\n process.exit(1);\n }\n }\n const lockfilePath = path.join(projectRoot(), this.manager.lockfile);\n try {\n await stat(lockfilePath);\n } catch {\n warnMissingLockfile({ manager: this.manager });\n process.exit(1);\n }\n }\n\n // use a cached getter to avoid premature exits on importing a file with a toplevel construction\n public get manager(): PackageManagerConfig {\n if (this._manager == null) {\n const userAgent = this.verifyPackageManager();\n this._manager = PACKAGE_MANAGER_CONFIGS[userAgent];\n }\n return this._manager;\n }\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\n\n if (json === null) {\n p.cancel(\n `Nie znaleziono pliku ${c.cyan(\"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 getPackageInfo(package_: string) {\n return getPackageInfo(package_);\n }\n\n async doesSatisfy(package_: string, version: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n const packageInfo = await this.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 p.cancel(\n `Projekty korzystające zarówno z ${c.magenta(\"Adonis\")}a jak i ${c.cyan(\"React\")}a nie są wspierane.`,\n );\n process.exit(1);\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\n private async writeScript(name: string, script: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n this.json.scripts = this.json.scripts ?? {};\n this.json.scripts[name] = script;\n\n await this.save();\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 await this.writeScript(name, script);\n }\n\n /** Replaces the existing script if it matches the expected value exactly. Prevents overwriting custom scripts that may have diverged from the original.\n *\n * @returns `true` if the script was updated, `false` if it was not updated because the existing script did not exist or it did not match the expected value.\n */\n async updateScriptIfExists(\n name: string,\n script: string,\n expectedScript: string,\n ): Promise<boolean> {\n await this.load();\n\n assert.ok(this.json !== null);\n\n if (this.json.scripts?.[name] !== expectedScript) {\n return false;\n }\n\n await this.writeScript(name, script);\n return true;\n }\n\n async install(\n package_: string,\n options: {\n version?: string;\n dev?: boolean;\n alwaysUpdate?: boolean;\n } = {},\n ) {\n const isInstalled = await this.hasPackage(package_);\n const installVersion = options.version ?? \"latest\";\n const [installCommand, ...commandOptions] =\n this.manager.installPackage.split(\" \");\n if (options.dev === true) {\n commandOptions.push(\"-D\");\n }\n if (!isInstalled) {\n await runWithSpinner({\n start: `Instalowanie pakietu ${package_}`,\n stop: `${package_} zainstalowany 😍`,\n error: `Instalacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n\n return;\n }\n\n if (\n options.alwaysUpdate === true ||\n (options.version != null &&\n !(await this.doesSatisfy(package_, options.version)))\n ) {\n await runWithSpinner({\n start: `Aktualizowanie pakietu ${package_}`,\n stop: `${package_} zaktualizowany 😍`,\n error: `Aktualizacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n }\n }\n\n async localExecute(...commandArguments: string[]) {\n const [command, ...commandOptions] = this.manager.localExecute.split(\" \");\n const options = [...commandOptions, ...commandArguments];\n await $$(command, options);\n }\n\n async clearInstall() {\n const [command, ...options] = this.manager.cleanInstall.split(\" \");\n await runWithSpinner({\n start: \"Instalowanie pakietów na świeżo\",\n stop: \"Wszystkie pakiety zainstalowane 😍\",\n error: \"Instalacja pakietów na świeżo nie powiodła się 🥶\",\n callback: async () => {\n await $$(command, options);\n },\n });\n }\n\n /**\n * Gets the pnpm major version from package.json packageManager field or user agent.\n * Falls back to version \"10\" if neither source is available.\n * Returns only the major version for CI stability.\n */\n async getPnpmVersion(): Promise<string> {\n await this.load();\n\n if (this.json?.packageManager?.startsWith(\"pnpm@\") === true) {\n const version = this.json.packageManager.split(\"@\")[1];\n const majorVersion = version.split(\".\")[0];\n if (/^\\d+$/.test(majorVersion)) {\n return majorVersion;\n }\n }\n\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent != null) {\n const match = /pnpm\\/(\\d+)(?:\\.\\d+)*/.exec(userAgent);\n if (match?.[1] != null) {\n return match[1];\n }\n }\n\n return \"10\";\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 type { PackageManager } from \"../constants\";\nimport { SUPPORTED_PACKAGE_MANAGERS } from \"../constants\";\n\nexport const isSupportedPackageManager = (\n userAgent: string | null | undefined,\n): userAgent is PackageManager =>\n userAgent != null && SUPPORTED_PACKAGE_MANAGERS.includes(userAgent);\n","import * as p from \"@clack/prompts\";\n\nimport { runIfInteractive } from \"./run-if-interactive\";\n\n/** Executes a callback using a clack spinner, printing the provided messages, with error handling. */\nexport const runWithSpinner = async (options: {\n start: string;\n stop: string;\n error: string;\n callback: () => void | Promise<void>;\n}) => {\n const spinner = p.spinner();\n runIfInteractive(() => {\n spinner.start(options.start);\n });\n try {\n await options.callback();\n } catch (error) {\n runIfInteractive(() => {\n spinner.error(options.error);\n });\n throw error;\n }\n runIfInteractive(() => {\n spinner.stop(options.stop);\n });\n};\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 c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\n\nconst hintInstallWithDetected = (manager: PackageManagerConfig) => `\n${c.white(`Upewnij się, że używasz właściwej komendy. Spróbuj jeszcze raz za pomocą ${c.yellow(manager.name)}-a:`)}\n\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\nconst warnUnsupported = (manager: string) => `\n${c.white(\"@solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\")}\n\n${SUPPORTED_PACKAGE_MANAGERS.map((supportedManager) => c.white(`- ${c.cyan(supportedManager)}`)).join(\"\\n\")}\n\nNiestety, ${c.yellow(manager)} nie jest wspierany.`;\n\nexport const warnInconsistentUserAgent = ({\n userAgent,\n detectedPackageManager,\n}: {\n userAgent: PackageManagerConfig;\n detectedPackageManager: string;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: niespójny menedżer pakietów ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(userAgent.name)}-em, ale w tym projekcie wykryto menedżer pakietów ${c.yellow(detectedPackageManager)}.\n${\n isSupportedPackageManager(detectedPackageManager)\n ? hintInstallWithDetected(PACKAGE_MANAGER_CONFIGS[detectedPackageManager])\n : warnUnsupported(detectedPackageManager)\n}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\n\nexport const warnMissingLockfile = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: brak pliku blokady ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(manager.name)}-em, ale nie wykryto pliku ${c.yellow(manager.lockfile)}.\n\n${c.white(`Sprawdź, czy ten projekt na pewno korzysta z menedżera pakietów ${c.yellow(manager.name)}.`)}\n${c.white(\"Jeśli to się zgadza, zainstaluj najpierw zależności projektu i spróbuj ponownie:\")}\n\n${c.cyan(manager.installDependencies)}\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants/package-managers\";\nimport { formatLink } from \"./format-link\";\n\nexport const warnUnsupportedPackageManager = ({\n userAgent,\n}: {\n userAgent: string | null;\n}) => {\n const packageManager = userAgent ?? \"<nieznany>\";\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(packageManager)}-em, ale @solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\n\n${SUPPORTED_PACKAGE_MANAGERS.map((manager) => c.white(`- ${c.cyan(manager)}`)).join(\"\\n\")}\n\n${c.white(`Chcesz, aby dodano wsparcie dla ${c.yellow(packageManager)}-a? Daj nam znać!`)}\n${formatLink(BUG_TRACKER_URL)}\n\n${c.white(`W międzyczasie użyj innego menedżera:`)}\n\n${Object.values(PACKAGE_MANAGER_CONFIGS)\n .map((config) => c.cyan(`${config.downloadExecute} @solvro/config`))\n .join(c.white(\"\\nlub\\n\"))}`;\n\n p.cancel(warningMessage);\n};\n","import c from \"picocolors\";\n\nexport const formatLink = (link: string) => c.white(c.underline(link));\n","import * as p from \"@clack/prompts\";\nimport { readFileSync } from \"node:fs\";\nimport c from \"picocolors\";\n\nimport { isGitClean } from \"./is-git-clean\";\nimport { isInGitRepo } from \"./is-in-git-repo\";\n\nexport const printIntro = () => {\n const packageJsonUrl = new URL(\"../../package.json\", import.meta.url);\n const packageJson = JSON.parse(readFileSync(packageJsonUrl, \"utf8\")) as {\n version?: string;\n };\n const packageRoot = new URL(\"../\", packageJsonUrl);\n const execOptions = { cwd: packageRoot };\n const clean = !isInGitRepo(execOptions) || isGitClean(execOptions);\n const version =\n packageJson.version == null || packageJson.version.trim() === \"\"\n ? c.red(\"(unknown version)\")\n : c.green(c.bold(`v${packageJson.version}`));\n const dirtyStatus = clean ? \"\" : c.white(\" (dirty)\");\n p.intro(\n ` ${c.blueBright(c.bold(\"@solvro/config\"))} ${version}${dirtyStatus} `,\n );\n};\n","import { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport const isInGitRepo = (options: ExecSyncOptions) => {\n try {\n execSync(\"git rev-parse --is-inside-work-tree \", {\n stdio: \"ignore\",\n ...options,\n });\n return true;\n } catch {\n return false;\n }\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { REPO_URL } from \"../constants\";\nimport { formatLink } from \"./format-link\";\n\nconst PROJECT_DOCS_URL =\n \"https://docs.solvro.pl/projects/creating#konfiguracja-repozytorium\";\n\nexport const printOutro = () => {\n p.log.success(\"Konfiguracja zakończona pomyślnie!\");\n p.note(\n `\\\n1. ${c.white(`${c.bold(\"Obowiązkowo\")} zapoznaj się z ${c.cyan(\"dokumentacją tworzenia projektów\")}:`)}\n ${formatLink(PROJECT_DOCS_URL)}\n2. ${c.white(`Pamiętaj o zostawianiu nam ${c.yellow(\"gwiazdek na GitHubie\")}! ⭐`)}\n ${formatLink(REPO_URL)}`,\n \"Kolejne kroki\",\n );\n p.outro(\"Miłego dnia! 👋\");\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\", { version: \"^20\", dev: true });\n\n await writeFile(\n path.join(root, \".husky/commit-msg\"),\n `${packageJson.manager.localExecute} commitlint --edit \"$1\"\\n`,\n );\n\n await writeFile(path.join(root, \".commitlintrc.js\"), commitlint());\n};\n","import assert from \"node:assert\";\n\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 packageJson.localExecute(\"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\", {\n dev: true,\n version: \"^9\",\n });\n\n const type = await packageJson.getProjectType();\n\n if (type === \"react\" && (await packageJson.isNextJs())) {\n const is15 = await packageJson.doesSatisfy(\"next\", \">=15\");\n\n if (!is15) {\n p.cancel(\n \"Next.js musi być w co najmniej 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.log.warning(\"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.log.step(\"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 const manager = packageJson.manager;\n\n // Get pnpm version dynamically when using pnpm\n const pnpmVersion =\n manager.name === \"pnpm\" ? await packageJson.getPnpmVersion() : undefined;\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 manager,\n pnpmVersion,\n }),\n );\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"db.yml\"),\n adonisMigrationsCi({ nodeVersion: \"22\", manager, pnpmVersion }),\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 manager,\n pnpmVersion,\n }),\n );\n\n if (usingNextJs) {\n await packageJson.addScriptIfNotExists(\"types:generate\", \"next typegen\");\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 manager,\n pnpmVersion,\n }),\n );\n // https://github.com/Solvro/lib-web-solvro-config/issues/431\n const formatScriptUpdated = await packageJson.updateScriptIfExists(\n \"format\",\n \"prettier --write .\",\n 'prettier --write \"src/**/*.ts\" \"test/**/*.ts\"',\n );\n if (!formatScriptUpdated) {\n p.log.warning(\n \"Aktualizacja skryptu format została pominięta, ponieważ został on zmieniony lub nie istnieje. Ręcznie zaktualizuj skrypt format w package.json, aby formatował wszystkie pliki projektu, a nie tylko te w katalogach src i test.\",\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\", \"prettier --write .\");\n await packageJson.addScriptIfNotExists(\"format:check\", \"prettier --check .\");\n await packageJson.addScriptIfNotExists(\"lint\", \"eslint . --max-warnings=0\");\n await packageJson.addScriptIfNotExists(\"types:check\", \"tsc --noEmit\");\n\n p.log.step(\"Dodano konfigurację CI i skrypty.\");\n};\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const commitLintCi = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => `\n - name: Check commit name\n if: github.event_name == 'pull_request'\n run: ${manager.localExecute} commitlint --from \\${{ github.event.pull_request.base.sha }} --to \\${{ github.event.pull_request.head.sha }} --verbose\n`;\n","export const pnpmSetupCi = ({\n pnpmVersion = \"10\",\n}: { pnpmVersion?: string } = {}) => `\n - name: Setup pnpm\n uses: pnpm/action-setup@v4\n with:\n version: ${pnpmVersion}\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { pnpmSetupCi } from \"./pnpm-setup-ci\";\n\nexport const nodeSetupCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `\\\n - name: Checkout\n uses: actions/checkout@v6\n with:\n fetch-depth: 0\n${manager.name === \"pnpm\" ? pnpmSetupCi({ pnpmVersion }) : \"\"}\n - name: Setup node\n uses: actions/setup-node@v6\n with:\n node-version: ${nodeVersion}\n cache: \"${manager.name}\"`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisMigrationsCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\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 type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const nestjsCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Run e2e tests\n run: ${manager.runScript} test:e2e\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const nextJsCi = ({ manager }: { manager: PackageManagerConfig }) => `\n - name: Setup build cache\n uses: actions/cache@v5\n with:\n path: \\${{ github.workspace }}/.next/cache\n key: \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\\${{ hashFiles('**/*.ts', '**/*.tsx') }}\n restore-keys: |\n \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nextJsCi } from \"./nextjs-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const reactCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n usingNextJs,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n usingNextJs: boolean;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n${usingNextJs ? nextJsCi({ manager }) : \"\"}\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import assert from \"node:assert\";\nimport { 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\";\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(\n path.join(projectRoot(), \".husky/pre-commit\"),\n `${packageJson.manager.localExecute} lint-staged\\n`,\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\", {\n dev: true,\n version: \">=3\",\n });\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.log.warning(\"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.log.step(\"Konfiguracja Prettiera została dodana.\");\n};\n"],"mappings":"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","names":["p","c","p","options","p","path","c","execSync","p","isInteractive","options","spinner","p","p","c","p","c","c","c","path","c","options","p","c","execSync","options","packageJson","c","p","c","c","writeFile","path","assert","assert","packageJson","writeFile","path","p","path","packageJson","isNonInteractive","root","path","p","existsSync","fs","path","packageJson","path","existsSync","assert","writeFile","path","packageJson","assert","writeFile","path","p","assert","existsSync","fs","path","packageJson","isNonInteractive","root","assert","existsSync","path","packageJson","c"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../package.json","../../src/constants/github.ts","../../src/constants/package-managers.ts","../../src/utils/check-is-non-interactive.ts","../../src/utils/confirm-project-type.ts","../../src/utils/polish-confirm.ts","../../src/utils/is-git-clean.ts","../../src/utils/package-json.ts","../../src/utils/git-root.ts","../../src/utils/$$.ts","../../src/utils/is-supported-package-manager.ts","../../src/utils/run-with-spinner.ts","../../src/utils/run-if-interactive.ts","../../src/utils/warn-inconsistent-user-agent.ts","../../src/utils/warn-missing-lockfile.ts","../../src/utils/warn-unsupported-package-manager.ts","../../src/utils/format-link.ts","../../src/utils/print-intro.ts","../../src/utils/get-git-branch.ts","../../src/utils/print-outro.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/pnpm-setup-ci.ts","../../src/cli/templates/node-setup-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 c from \"picocolors\";\n\nimport packageJsonData from \"../../package.json\";\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { checkIsNonInteractive } from \"../utils/check-is-non-interactive\";\nimport { confirmProjectType } from \"../utils/confirm-project-type\";\nimport { isGitClean } from \"../utils/is-git-clean\";\nimport { PackageJson } from \"../utils/package-json\";\nimport { polishConfirm } from \"../utils/polish-confirm\";\nimport { printIntro } from \"../utils/print-intro\";\nimport { printOutro } from \"../utils/print-outro\";\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\nconst isNonInteractive = checkIsNonInteractive();\n\nasync function main() {\n printIntro();\n\n const packageJson = new PackageJson();\n packageJson.verifyPackageManager();\n await packageJson.load(); // Project directory check\n await packageJson.validateUserAgentConsistency();\n\n // Git clean check\n if (options.force !== true && !isGitClean()) {\n if (isNonInteractive) {\n p.log.error(\"Repozytorium Git ma niezatwierdzone zmiany.\");\n p.cancel(\"Użyj --force, aby pominąć to sprawdzenie.\");\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 // Peer dependencies check\n if (\n (await packageJson.hasPackage(\"eslint\")) &&\n !(await packageJson.doesSatisfy(\"eslint\", \"<10\"))\n ) {\n const eslint = await packageJson.getPackageInfo(\"eslint\");\n const versionInfo =\n eslint?.version == null\n ? \"\"\n : ` Obecnie zainstalowana jest wersja ${c.yellow(eslint.version)}.`;\n const errorMessage = `ESLint w wersji powyżej 9 nie jest jeszcze wspierany.${versionInfo}`;\n const errorRetry = \"Proszę zainstalować wersję 9 i spróbować ponownie.\";\n if (isNonInteractive) {\n p.log.error(errorMessage);\n p.cancel(errorRetry);\n process.exit(1);\n }\n const isConfirmed = await polishConfirm({\n message: `${errorMessage} Zainstalować starszą wersję ${c.magenta(\"ESLint\")}'a? (Wymagane by kontynuować)`,\n });\n if (p.isCancel(isConfirmed) || !isConfirmed) {\n p.cancel(errorRetry);\n process.exit(1);\n }\n await packageJson.install(\"eslint\", { dev: true, version: \"^9\" });\n }\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 await confirmProjectType(c.magenta(\"Adonis\"));\n }\n\n if (projectType === \"react\") {\n await confirmProjectType(c.cyan(\"React\"));\n }\n\n if (projectType === \"nestjs\") {\n await confirmProjectType(c.red(\"NestJS\"));\n }\n\n if (projectType === \"node\") {\n p.cancel(\n `Nie znaleziono ani ${c.magenta(\"Adonis\")}-a, ${c.cyan(\"React\")}-a, ani ${c.white(\"NestJS\")}-a. 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 p.log.error(\"Nie wybrano żadnych narzędzi.\");\n p.cancel(\n \"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 if (toolsToInstall.includes(\"prettier\")) {\n await packageJson.localExecute(\"prettier\", \"--write\", \"package.json\");\n }\n\n printOutro();\n}\n\nasync function mainWrapper() {\n try {\n await main();\n } catch (error: unknown) {\n if (process.env.NODE_ENV === \"development\") {\n p.cancel(\"Unhandled error in main:\");\n console.error(error instanceof Error ? error.message : error);\n } else {\n p.log.error(\"Wystąpił nieoczekiwany błąd :(\");\n p.cancel(`Proszę zgłosić go twórcom: ${BUG_TRACKER_URL}`);\n }\n process.exit(1);\n }\n}\n\n// eslint-disable-next-line unicorn/prefer-top-level-await\nvoid mainWrapper();\n","{\n \"name\": \"@solvro/config\",\n \"version\": \"3.0.0-beta.7\",\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\": \"tsgo --noEmit\"\n },\n \"lint-staged\": {\n \"*\": \"prettier -w --ignore-unknown\"\n },\n \"prettier\": \"./dist/prettier/index.js\",\n \"dependencies\": {\n \"@adonisjs/eslint-config\": \"^3.0.0\",\n \"@clack/prompts\": \"^1.3.0\",\n \"@commitlint/config-conventional\": \"^21.0.0\",\n \"@darraghor/eslint-plugin-nestjs-typed\": \"^7.1.32\",\n \"@eslint-community/eslint-plugin-eslint-comments\": \"^4.7.1\",\n \"@eslint/config-helpers\": \"^0.4.2\",\n \"@eslint/js\": \"^9.39.4\",\n \"@solvro/utils\": \"^1.6.0\",\n \"@tanstack/eslint-plugin-query\": \"^5.100.9\",\n \"@trivago/prettier-plugin-sort-imports\": \"^6.0.2\",\n \"@typescript-eslint/eslint-plugin\": \"^8.58.2\",\n \"@vitest/eslint-plugin\": \"^1.6.18\",\n \"commander\": \"^14.0.3\",\n \"eslint-config-flat-gitignore\": \"^2.3.0\",\n \"eslint-config-prettier\": \"^10.1.8\",\n \"eslint-plugin-antfu\": \"^3.2.2\",\n \"eslint-plugin-import\": \"^2.32.0\",\n \"eslint-plugin-jest\": \"^29.15.2\",\n \"eslint-plugin-jsdoc\": \"^63.0.0\",\n \"eslint-plugin-jsx-a11y\": \"^6.10.2\",\n \"eslint-plugin-n\": \"^18.0.1\",\n \"eslint-plugin-playwright\": \"^2.10.4\",\n \"eslint-plugin-react\": \"^7.37.5\",\n \"eslint-plugin-react-hooks\": \"^7.1.1\",\n \"eslint-plugin-react-refresh\": \"^0.5.2\",\n \"eslint-plugin-react-you-might-not-need-an-effect\": \"^0.10.1\",\n \"eslint-plugin-regexp\": \"^3.1.0\",\n \"eslint-plugin-unicorn\": \"^64.0.0\",\n \"eslint-plugin-unused-imports\": \"^4.4.1\",\n \"eslint-plugin-zod\": \"^4.5.1\",\n \"execa\": \"^9.6.1\",\n \"find-up-simple\": \"^1.0.1\",\n \"globals\": \"^17.6.0\",\n \"is-interactive\": \"^2.0.0\",\n \"local-pkg\": \"^1.1.2\",\n \"package-manager-detector\": \"^1.6.0\",\n \"picocolors\": \"^1.1.1\",\n \"prettier-plugin-packagejson\": \"^3.0.2\",\n \"prettier-plugin-tailwindcss\": \"^0.8.0\",\n \"semver\": \"^7.7.4\",\n \"typescript-eslint\": \"^8.58.2\"\n },\n \"devDependencies\": {\n \"@commitlint/cli\": \"^21.0.0\",\n \"@commitlint/types\": \"^21.0.0\",\n \"@eslint/config-inspector\": \"^3.0.1\",\n \"@next/eslint-plugin-next\": \"^16.2.5\",\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/node\": \"^25.6.0\",\n \"@types/semver\": \"^7.7.1\",\n \"@typescript-eslint/utils\": \"^8.58.2\",\n \"@typescript/native-preview\": \"^7.0.0-dev.20260507.1\",\n \"@vitest/coverage-v8\": \"^4.1.5\",\n \"@vitest/ui\": \"^4.1.5\",\n \"eslint\": \"^9.39.4\",\n \"husky\": \"^9.1.7\",\n \"knip\": \"^6.12.0\",\n \"lint-staged\": \"^17.0.2\",\n \"pkg-pr-new\": \"^0.0.75\",\n \"prettier\": \"^3.8.3\",\n \"semantic-release\": \"^25.0.3\",\n \"tsup\": \"^8.5.1\",\n \"tsx\": \"^4.21.0\",\n \"typescript\": \"^6.0.3\",\n \"vitest\": \"^4.1.5\"\n },\n \"peerDependencies\": {\n \"@next/eslint-plugin-next\": \">=12.3.0\",\n \"eslint\": \">=9.0.0 <10.0.0\"\n },\n \"packageManager\": \"npm@11.14.0\",\n \"engines\": {\n \"node\": \"^20.19.0 || >=22.12.0\",\n \"npm\": \"^11.11.1\"\n },\n \"volta\": {\n \"node\": \"22.22.1\",\n \"npm\": \"11.11.1\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n }\n}\n","export const REPO_URL = \"https://github.com/Solvro/lib-web-solvro-config\";\nexport const BUG_TRACKER_URL = `${REPO_URL}/issues/new`;\n","export type PackageManager = \"npm\" | \"pnpm\";\n\nexport interface PackageManagerConfig {\n name: PackageManager;\n lockfile: string;\n installPackage: string;\n installDependencies: string;\n cleanInstall: string;\n downloadExecute: string;\n localExecute: string;\n runScript: string;\n create: string;\n}\n\nexport const PACKAGE_MANAGER_CONFIGS = {\n npm: {\n name: \"npm\",\n lockfile: \"package-lock.json\",\n installPackage: \"npm install\",\n installDependencies: \"npm install\",\n cleanInstall: \"npm ci\",\n downloadExecute: \"npx\",\n localExecute: \"npx\",\n runScript: \"npm run\",\n create: \"npm create\",\n },\n pnpm: {\n name: \"pnpm\",\n lockfile: \"pnpm-lock.yaml\",\n installPackage: \"pnpm add\",\n installDependencies: \"pnpm install\",\n cleanInstall: \"pnpm install --frozen-lockfile\",\n downloadExecute: \"pnpm dlx\",\n localExecute: \"pnpm exec\",\n runScript: \"pnpm run\",\n create: \"pnpm create\",\n },\n} satisfies Record<PackageManager, PackageManagerConfig>;\n\nexport const SUPPORTED_PACKAGE_MANAGERS = Object.keys(PACKAGE_MANAGER_CONFIGS);\n","/** Check if running in non-interactive mode (any CLI flags provided) */\nexport const checkIsNonInteractive = () => process.argv.length > 2;\n","import * as p from \"@clack/prompts\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport { polishConfirm } from \"./polish-confirm\";\n\nexport const confirmProjectType = async (projectType: string) => {\n const isConfirmed = await polishConfirm({\n message: `Wygląda jakbyś używał ${projectType}'a. 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(\n `:( Zgłoś błąd na GitHubie, a my spróbujemy pomóc: ${BUG_TRACKER_URL}`,\n );\n process.exit(1);\n }\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 { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport function isGitClean(options?: ExecSyncOptions): boolean {\n try {\n const diff = execSync(\"git status --porcelain\", options);\n return diff.toString().trim() === \"\";\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 { stat, writeFile } from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { getUserAgent } from \"package-manager-detector/detect\";\nimport c from \"picocolors\";\nimport semver from \"semver\";\n\nimport type { PackageManager, PackageManagerConfig } from \"../constants\";\nimport { PACKAGE_MANAGER_CONFIGS } from \"../constants\";\nimport { $$ } from \"./$$\";\nimport { projectRoot } from \"./git-root\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\nimport { runWithSpinner } from \"./run-with-spinner\";\nimport { warnInconsistentUserAgent } from \"./warn-inconsistent-user-agent\";\nimport { warnMissingLockfile } from \"./warn-missing-lockfile\";\nimport { warnUnsupportedPackageManager } from \"./warn-unsupported-package-manager\";\n\nexport class PackageJson {\n public json: Awaited<ReturnType<typeof loadPackageJSON>> = null;\n private _manager: PackageManagerConfig | null = null;\n\n /** Checks if the process is run from a supported package manager */\n public verifyPackageManager(): PackageManager {\n const userAgent = getUserAgent();\n if (!isSupportedPackageManager(userAgent)) {\n warnUnsupportedPackageManager({ userAgent });\n process.exit(1);\n }\n return userAgent;\n }\n\n /** Checks if the user agent is consistent with the project's package manager */\n public async validateUserAgentConsistency() {\n if (this.json?.packageManager != null) {\n const [detectedPackageManager] = this.json.packageManager.split(\"@\");\n if (detectedPackageManager !== this.manager.name) {\n warnInconsistentUserAgent({\n userAgent: this.manager,\n detectedPackageManager,\n });\n process.exit(1);\n }\n }\n const lockfilePath = path.join(projectRoot(), this.manager.lockfile);\n try {\n await stat(lockfilePath);\n } catch {\n warnMissingLockfile({ manager: this.manager });\n process.exit(1);\n }\n }\n\n // use a cached getter to avoid premature exits on importing a file with a toplevel construction\n public get manager(): PackageManagerConfig {\n if (this._manager == null) {\n const userAgent = this.verifyPackageManager();\n this._manager = PACKAGE_MANAGER_CONFIGS[userAgent];\n }\n return this._manager;\n }\n\n async load() {\n const json = await loadPackageJSON(projectRoot());\n\n if (json === null) {\n p.cancel(\n `Nie znaleziono pliku ${c.cyan(\"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 getPackageInfo(package_: string) {\n return getPackageInfo(package_);\n }\n\n async doesSatisfy(package_: string, version: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n const packageInfo = await this.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 p.cancel(\n `Projekty korzystające zarówno z ${c.magenta(\"Adonis\")}a jak i ${c.cyan(\"React\")}a nie są wspierane.`,\n );\n process.exit(1);\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\n private async writeScript(name: string, script: string) {\n await this.load();\n\n assert.ok(this.json !== null);\n\n this.json.scripts = this.json.scripts ?? {};\n this.json.scripts[name] = script;\n\n await this.save();\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 await this.writeScript(name, script);\n }\n\n /** Replaces the existing script if it matches the expected value exactly. Prevents overwriting custom scripts that may have diverged from the original.\n *\n * @returns `true` if the script was updated, `false` if it was not updated because the existing script did not exist or it did not match the expected value.\n */\n async updateScriptIfExists(\n name: string,\n script: string,\n expectedScript: string,\n ): Promise<boolean> {\n await this.load();\n\n assert.ok(this.json !== null);\n\n if (this.json.scripts?.[name] !== expectedScript) {\n return false;\n }\n\n await this.writeScript(name, script);\n return true;\n }\n\n async install(\n package_: string,\n options: {\n version?: string;\n dev?: boolean;\n alwaysUpdate?: boolean;\n } = {},\n ) {\n const isInstalled = await this.hasPackage(package_);\n const installVersion = options.version ?? \"latest\";\n const [installCommand, ...commandOptions] =\n this.manager.installPackage.split(\" \");\n if (options.dev === true) {\n commandOptions.push(\"-D\");\n }\n if (!isInstalled) {\n await runWithSpinner({\n start: `Instalowanie pakietu ${package_}`,\n stop: `${package_} zainstalowany 😍`,\n error: `Instalacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n\n return;\n }\n\n if (\n options.alwaysUpdate === true ||\n (options.version != null &&\n !(await this.doesSatisfy(package_, options.version)))\n ) {\n await runWithSpinner({\n start: `Aktualizowanie pakietu ${package_}`,\n stop: `${package_} zaktualizowany 😍`,\n error: `Aktualizacja pakietu ${package_} nie powiodła się 🥶`,\n callback: async () => {\n await $$(installCommand, [\n ...commandOptions,\n `${package_}@${installVersion}`,\n ]);\n },\n });\n\n await this.load();\n }\n }\n\n async localExecute(...commandArguments: string[]) {\n const [command, ...commandOptions] = this.manager.localExecute.split(\" \");\n const options = [...commandOptions, ...commandArguments];\n await $$(command, options);\n }\n\n async clearInstall() {\n const [command, ...options] = this.manager.cleanInstall.split(\" \");\n await runWithSpinner({\n start: \"Instalowanie pakietów na świeżo\",\n stop: \"Wszystkie pakiety zainstalowane 😍\",\n error: \"Instalacja pakietów na świeżo nie powiodła się 🥶\",\n callback: async () => {\n await $$(command, options);\n },\n });\n }\n\n /**\n * Gets the pnpm major version from package.json packageManager field or user agent.\n * Falls back to version \"10\" if neither source is available.\n * Returns only the major version for CI stability.\n */\n async getPnpmVersion(): Promise<string> {\n await this.load();\n\n if (this.json?.packageManager?.startsWith(\"pnpm@\") === true) {\n const version = this.json.packageManager.split(\"@\")[1];\n const majorVersion = version.split(\".\")[0];\n if (/^\\d+$/.test(majorVersion)) {\n return majorVersion;\n }\n }\n\n const userAgent = process.env.npm_config_user_agent;\n if (userAgent != null) {\n const match = /pnpm\\/(\\d+)(?:\\.\\d+)*/.exec(userAgent);\n if (match?.[1] != null) {\n return match[1];\n }\n }\n\n return \"10\";\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 type { PackageManager } from \"../constants\";\nimport { SUPPORTED_PACKAGE_MANAGERS } from \"../constants\";\n\nexport const isSupportedPackageManager = (\n userAgent: string | null | undefined,\n): userAgent is PackageManager =>\n userAgent != null && SUPPORTED_PACKAGE_MANAGERS.includes(userAgent);\n","import * as p from \"@clack/prompts\";\n\nimport { runIfInteractive } from \"./run-if-interactive\";\n\n/** Executes a callback using a clack spinner, printing the provided messages, with error handling. */\nexport const runWithSpinner = async (options: {\n start: string;\n stop: string;\n error: string;\n callback: () => void | Promise<void>;\n}) => {\n const spinner = p.spinner();\n runIfInteractive(() => {\n spinner.start(options.start);\n });\n try {\n await options.callback();\n } catch (error) {\n runIfInteractive(() => {\n spinner.error(options.error);\n });\n throw error;\n }\n runIfInteractive(() => {\n spinner.stop(options.stop);\n });\n};\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 c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants\";\nimport { isSupportedPackageManager } from \"./is-supported-package-manager\";\n\nconst hintInstallWithDetected = (manager: PackageManagerConfig) => `\n${c.white(`Upewnij się, że używasz właściwej komendy. Spróbuj jeszcze raz za pomocą ${c.yellow(manager.name)}-a:`)}\n\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\nconst warnUnsupported = (manager: string) => `\n${c.white(\"@solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\")}\n\n${SUPPORTED_PACKAGE_MANAGERS.map((supportedManager) => c.white(`- ${c.cyan(supportedManager)}`)).join(\"\\n\")}\n\nNiestety, ${c.yellow(manager)} nie jest wspierany.`;\n\nexport const warnInconsistentUserAgent = ({\n userAgent,\n detectedPackageManager,\n}: {\n userAgent: PackageManagerConfig;\n detectedPackageManager: string;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: niespójny menedżer pakietów ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(userAgent.name)}-em, ale w tym projekcie wykryto menedżer pakietów ${c.yellow(detectedPackageManager)}.\n${\n isSupportedPackageManager(detectedPackageManager)\n ? hintInstallWithDetected(PACKAGE_MANAGER_CONFIGS[detectedPackageManager])\n : warnUnsupported(detectedPackageManager)\n}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport type { PackageManagerConfig } from \"../constants\";\n\nexport const warnMissingLockfile = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => {\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: brak pliku blokady ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(manager.name)}-em, ale nie wykryto pliku ${c.yellow(manager.lockfile)}.\n\n${c.white(`Sprawdź, czy ten projekt na pewno korzysta z menedżera pakietów ${c.yellow(manager.name)}.`)}\n${c.white(\"Jeśli to się zgadza, zainstaluj najpierw zależności projektu i spróbuj ponownie:\")}\n\n${c.cyan(manager.installDependencies)}\n${c.cyan(`${manager.downloadExecute} @solvro/config@latest`)}`;\n\n p.cancel(warningMessage);\n};\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { BUG_TRACKER_URL } from \"../constants\";\nimport {\n PACKAGE_MANAGER_CONFIGS,\n SUPPORTED_PACKAGE_MANAGERS,\n} from \"../constants/package-managers\";\nimport { formatLink } from \"./format-link\";\n\nexport const warnUnsupportedPackageManager = ({\n userAgent,\n}: {\n userAgent: string | null;\n}) => {\n const packageManager = userAgent ?? \"<nieznany>\";\n const warningMessage = `\\\n${c.red(c.bold(`⚠️ OSTRZEŻENIE: ${packageManager} nie jest obsługiwany ⚠️`))}\n\nPróbujesz uruchomić ten skrypt ${c.yellow(packageManager)}-em, ale @solvro/config obecnie działa tylko z następującymi menedżerami pakietów:\n\n${SUPPORTED_PACKAGE_MANAGERS.map((manager) => c.white(`- ${c.cyan(manager)}`)).join(\"\\n\")}\n\n${c.white(`Chcesz, aby dodano wsparcie dla ${c.yellow(packageManager)}-a? Daj nam znać!`)}\n${formatLink(BUG_TRACKER_URL)}\n\n${c.white(`W międzyczasie użyj innego menedżera:`)}\n\n${Object.values(PACKAGE_MANAGER_CONFIGS)\n .map((config) => c.cyan(`${config.downloadExecute} @solvro/config`))\n .join(c.white(\"\\nlub\\n\"))}`;\n\n p.cancel(warningMessage);\n};\n","import c from \"picocolors\";\n\nexport const formatLink = (link: string) => c.white(c.underline(link));\n","import * as p from \"@clack/prompts\";\nimport { readFileSync } from \"node:fs\";\nimport c from \"picocolors\";\n\nimport { getGitBranch } from \"./get-git-branch\";\nimport { isGitClean } from \"./is-git-clean\";\n\nexport const printIntro = () => {\n const packageJsonUrl = new URL(\"../../package.json\", import.meta.url);\n const packageJson = JSON.parse(readFileSync(packageJsonUrl, \"utf8\")) as {\n version?: string;\n };\n const packageRoot = new URL(\"./\", packageJsonUrl);\n const execOptions = { cwd: packageRoot };\n const version =\n packageJson.version == null || packageJson.version.trim() === \"\"\n ? c.red(\"(unknown version)\")\n : c.green(c.bold(`v${packageJson.version}`));\n const branchName = getGitBranch(execOptions);\n const dirtyStatus =\n branchName == null\n ? \"\"\n : c.white(` (${isGitClean(execOptions) ? branchName : \"dirty\"})`);\n p.intro(\n ` ${c.blueBright(c.bold(\"@solvro/config\"))} ${version}${dirtyStatus} `,\n );\n};\n","import { execSync } from \"node:child_process\";\nimport type { ExecSyncOptions } from \"node:child_process\";\n\nexport function getGitBranch(options?: ExecSyncOptions): string | null {\n try {\n const result = execSync(\n \"git symbolic-ref --quiet --short HEAD || git rev-parse --short HEAD\",\n {\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n ...options,\n },\n );\n\n const branch = result.toString().trim();\n return branch === \"\" ? null : branch;\n } catch {\n return null;\n }\n}\n","import * as p from \"@clack/prompts\";\nimport c from \"picocolors\";\n\nimport { REPO_URL } from \"../constants\";\nimport { formatLink } from \"./format-link\";\n\nconst PROJECT_DOCS_URL =\n \"https://docs.solvro.pl/projects/creating#konfiguracja-repozytorium\";\n\nexport const printOutro = () => {\n p.log.success(\"Konfiguracja zakończona pomyślnie!\");\n p.note(\n `\\\n1. ${c.white(`${c.bold(\"Obowiązkowo\")} zapoznaj się z ${c.cyan(\"dokumentacją tworzenia projektów\")}:`)}\n ${formatLink(PROJECT_DOCS_URL)}\n2. ${c.white(`Pamiętaj o zostawianiu nam ${c.yellow(\"gwiazdek na GitHubie\")}! ⭐`)}\n ${formatLink(REPO_URL)}`,\n \"Kolejne kroki\",\n );\n p.outro(\"Miłego dnia! 👋\");\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\", { version: \"^20\", dev: true });\n\n await writeFile(\n path.join(root, \".husky/commit-msg\"),\n `${packageJson.manager.localExecute} commitlint --edit \"$1\"\\n`,\n );\n\n await writeFile(path.join(root, \".commitlintrc.js\"), commitlint());\n};\n","import assert from \"node:assert\";\n\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 packageJson.localExecute(\"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\", {\n dev: true,\n version: \"^9\",\n });\n\n const type = await packageJson.getProjectType();\n\n if (type === \"react\" && (await packageJson.isNextJs())) {\n const is15 = await packageJson.doesSatisfy(\"next\", \">=15\");\n\n if (!is15) {\n p.cancel(\n \"Next.js musi być w co najmniej 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.log.warning(\"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.log.step(\"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 const manager = packageJson.manager;\n\n // Get pnpm version dynamically when using pnpm\n const pnpmVersion =\n manager.name === \"pnpm\" ? await packageJson.getPnpmVersion() : undefined;\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 manager,\n pnpmVersion,\n }),\n );\n\n await fs.writeFile(\n path.join(ghWorkflowsDirectory, \"db.yml\"),\n adonisMigrationsCi({ nodeVersion: \"22\", manager, pnpmVersion }),\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 manager,\n pnpmVersion,\n }),\n );\n\n if (usingNextJs) {\n await packageJson.addScriptIfNotExists(\"types:generate\", \"next typegen\");\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 manager,\n pnpmVersion,\n }),\n );\n // https://github.com/Solvro/lib-web-solvro-config/issues/431\n const formatScriptUpdated = await packageJson.updateScriptIfExists(\n \"format\",\n \"prettier --write .\",\n 'prettier --write \"src/**/*.ts\" \"test/**/*.ts\"',\n );\n if (!formatScriptUpdated) {\n p.log.warning(\n \"Aktualizacja skryptu format została pominięta, ponieważ został on zmieniony lub nie istnieje. Ręcznie zaktualizuj skrypt format w package.json, aby formatował wszystkie pliki projektu, a nie tylko te w katalogach src i test.\",\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\", \"prettier --write .\");\n await packageJson.addScriptIfNotExists(\"format:check\", \"prettier --check .\");\n await packageJson.addScriptIfNotExists(\"lint\", \"eslint . --max-warnings=0\");\n await packageJson.addScriptIfNotExists(\"types:check\", \"tsc --noEmit\");\n\n p.log.step(\"Dodano konfigurację CI i skrypty.\");\n};\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const commitLintCi = ({\n manager,\n}: {\n manager: PackageManagerConfig;\n}) => `\n - name: Check commit name\n if: github.event_name == 'pull_request'\n run: ${manager.localExecute} commitlint --from \\${{ github.event.pull_request.base.sha }} --to \\${{ github.event.pull_request.head.sha }} --verbose\n`;\n","export const pnpmSetupCi = ({\n pnpmVersion = \"10\",\n}: { pnpmVersion?: string } = {}) => `\n - name: Setup pnpm\n uses: pnpm/action-setup@v4\n with:\n version: ${pnpmVersion}\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { pnpmSetupCi } from \"./pnpm-setup-ci\";\n\nexport const nodeSetupCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `\\\n - name: Checkout\n uses: actions/checkout@v6\n with:\n fetch-depth: 0\n${manager.name === \"pnpm\" ? pnpmSetupCi({ pnpmVersion }) : \"\"}\n - name: Setup node\n uses: actions/setup-node@v6\n with:\n node-version: ${nodeVersion}\n cache: \"${manager.name}\"`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n\n - name: Set up AdonisJS environment\n run: |\n cp .env.example .env\n node ace generate:key\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const adonisMigrationsCi = ({\n nodeVersion,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\n}) => `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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\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 type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const nestjsCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Run tests\n run: ${manager.name} test\n if: always()\n\n - name: Run e2e tests\n run: ${manager.runScript} test:e2e\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\n\nexport const nextJsCi = ({ manager }: { manager: PackageManagerConfig }) => `\n - name: Setup build cache\n uses: actions/cache@v5\n with:\n path: \\${{ github.workspace }}/.next/cache\n key: \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\\${{ hashFiles('**/*.ts', '**/*.tsx') }}\n restore-keys: |\n \\${{ runner.os }}-nextjs-\\${{ hashFiles('**/${manager.lockfile}') }}-\n`;\n","import type { PackageManagerConfig } from \"../../constants\";\nimport { commitLintCi } from \"./commit-lint-ci\";\nimport { nextJsCi } from \"./nextjs-ci\";\nimport { nodeSetupCi } from \"./node-setup-ci\";\n\nexport const reactCi = ({\n nodeVersion,\n withCommitlint,\n manager,\n usingNextJs,\n pnpmVersion,\n}: {\n nodeVersion: string;\n withCommitlint: boolean;\n manager: PackageManagerConfig;\n usingNextJs: boolean;\n pnpmVersion?: string;\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${nodeSetupCi({ nodeVersion, manager, pnpmVersion })}\n${usingNextJs ? nextJsCi({ manager }) : \"\"}\n - name: Install dependencies\n run: ${manager.cleanInstall}\n${withCommitlint ? commitLintCi({ manager }) : \"\"}\n - name: Check formatting\n run: ${manager.runScript} format:check\n if: always()\n\n - name: Lint code\n run: ${manager.runScript} lint\n if: always()\n\n - name: Check types\n run: ${manager.runScript} types:check\n if: always()\n\n - name: Build\n run: ${manager.runScript} build\n if: always()\n`;\n","import assert from \"node:assert\";\nimport { 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\";\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(\n path.join(projectRoot(), \".husky/pre-commit\"),\n `${packageJson.manager.localExecute} lint-staged\\n`,\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\", {\n dev: true,\n version: \">=3\",\n });\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.log.warning(\"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.log.step(\"Konfiguracja Prettiera została dodana.\");\n};\n"],"mappings":"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","names":["p","c","p","options","p","path","c","execSync","p","isInteractive","options","spinner","p","p","c","p","c","c","c","path","c","options","p","c","execSync","options","packageJson","c","p","c","c","writeFile","path","assert","assert","packageJson","writeFile","path","p","path","packageJson","isNonInteractive","root","path","p","existsSync","fs","path","packageJson","path","existsSync","assert","writeFile","path","packageJson","assert","writeFile","path","p","assert","existsSync","fs","path","packageJson","isNonInteractive","root","assert","existsSync","path","packageJson","c"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solvro/config",
3
- "version": "3.0.0-beta.7",
3
+ "version": "3.0.0-beta.8",
4
4
  "description": "Solvro's engineering style guide",
5
5
  "keywords": [
6
6
  "eslint",