UNPKG

@legislato/legislato-conventions

Version:

This package facilitates the configuration of commit conventions and changelog for Next.js and Express projects

1 lines 15 kB
{"version":3,"sources":["../node_modules/tsup/assets/esm_shims.js","../src/index.ts","../src/config.ts","../src/dependencies.ts","../src/utils.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport { fileURLToPath } from 'url'\nimport path from 'path'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","#!/usr/bin/env node\n\nimport chalk from 'chalk'\nimport { exec } from 'child_process'\nimport { Command } from 'commander'\nimport * as fs from 'fs'\nimport ora from 'ora'\nimport * as path from 'path'\nimport { promisify } from 'util'\nimport { copyConfigFiles } from './config'\nimport { installDependencies } from './dependencies'\nimport { modifyPackageJson } from './utils'\n\nconst execAsync = promisify(exec)\nconst program = new Command()\n\nconst packageJsonPath = path.join(__dirname, '../package.json')\nconst packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n\nprogram\n .version(packageJson.version)\n .description('Automatically configures conventional commits and changelogs.')\n\nexport async function main(): Promise<void> {\n const spinner = ora('Setting up conventions...').start()\n\n try {\n // Verify if npm is being used\n const userAgent = process.env.npm_config_user_agent\n if (!userAgent || !userAgent.startsWith('npm')) {\n spinner.fail(\n chalk.red(\n 'This package only supports npm. Please use npm to install dependencies.'\n )\n )\n process.exit(1)\n }\n\n await installDependencies()\n await copyConfigFiles()\n\n modifyPackageJson(packageJson => {\n packageJson.scripts = {\n ...(packageJson.scripts ?? {}),\n 'prepare': 'husky',\n 'release': 'dotenv release-it -- --verbose',\n 'release:only-version': 'dotenv release-it -- --verbose --only-version',\n 'release:no-npm': 'dotenv release-it -- --no-npm.publish',\n 'release:changelog': 'dotenv release-it -- --changelog',\n 'release:version': 'dotenv release-it -- --release-version'\n }\n packageJson.config = {\n commitizen: {\n path: './node_modules/git-cz'\n }\n }\n return packageJson\n })\n\n // Execute husky install\n spinner.start('Running npm run prepare...')\n await execAsync('npm run prepare')\n spinner.succeed(chalk.green('npm run prepare executed successfully!'))\n\n spinner.succeed(chalk.green('Configuration completed successfully!'))\n\n console.log(chalk.bold('\\nNext steps:'))\n console.log(chalk.white('1. Create a .env file in your project root.'))\n console.log(chalk.white('2. Add the following line to the .env file:'))\n console.log(chalk.cyan(' GITHUB_TOKEN=your_github_personal_access_token'))\n console.log(\n chalk.gray(\n ' (Replace your_github_personal_access_token with your actual token)'\n )\n )\n console.log(\n chalk.white(\n '3. This will allow release-it to automate releases on GitHub.'\n )\n )\n console.log(\n chalk.white(\n '4. If you want to run lint, test or build before running release, please update the release scripts in your package.json accordingly.'\n )\n )\n console.log(\n chalk.green(\n '\\n \\u{1F389} Congratulations! Your project is now ready for organized commits and automated releases!'\n )\n )\n } catch (error) {\n spinner.fail(chalk.red('Configuration failed'))\n console.error(error)\n process.exit(1)\n }\n}\n\nprogram.action(main)\nprogram.parse(process.argv)\n","import chalk from 'chalk'\nimport * as fs from 'fs'\nimport inquirer from 'inquirer'\nimport ora from 'ora'\nimport * as path from 'path'\n\nexport async function copyConfigFiles(): Promise<void> {\n const spinner = ora('Copying configuration files...').start()\n const templatesDir = path.join(__dirname, '../configs')\n const destinationDir = process.cwd()\n\n const copyRecursiveSync = async (\n src: string,\n dest: string\n ): Promise<void> => {\n const exists = fs.existsSync(src)\n if (exists) {\n const stats = fs.statSync(src)\n const isDirectory = stats.isDirectory()\n if (isDirectory) {\n if (!fs.existsSync(dest)) {\n fs.mkdirSync(dest)\n }\n const children = fs.readdirSync(src)\n for (const childItemName of children) {\n await copyRecursiveSync(\n path.join(src, childItemName),\n path.join(dest, childItemName)\n )\n }\n } else {\n try {\n if (fs.existsSync(dest)) {\n const answer = await inquirer.prompt([\n {\n type: 'confirm',\n name: 'overwrite',\n message: chalk.yellow(\n `File ${dest} already exists. Overwrite?`\n ),\n default: false\n }\n ])\n if (answer.overwrite) {\n fs.copyFileSync(src, dest)\n spinner.info(chalk.gray(`File ${dest} overwritten successfully!`))\n } else {\n spinner.warn(chalk.yellow(`File ${dest} skipped.`))\n }\n } else {\n fs.copyFileSync(src, dest)\n spinner.info(chalk.gray(`File ${dest} copied successfully!`))\n }\n } catch (error) {\n spinner.fail(chalk.red(`Error copying file ${dest}:`))\n console.error(error)\n throw error\n }\n }\n }\n }\n\n const filesToCopy = fs.readdirSync(templatesDir)\n const renameMap: Record<string, string> = {\n '.commitlintrc.template.json': '.commitlintrc.json',\n '.lintstagedrc.template.json': '.lintstagedrc.json',\n '.lintstagedrc.template.cjs': '.lintstagedrc.cjs',\n '.release-it.template.ts': '.release-it.ts',\n 'changelog.config.template.cjs': 'changelog.config.cjs',\n 'getAllContributors.template.cjs': 'getAllContributors.cjs'\n }\n\n try {\n // Project is Next.js?\n const isNextJsProject =\n fs.existsSync(path.join(destinationDir, 'next.config.js'))\n || fs.existsSync(path.join(destinationDir, 'next.config.ts'))\n\n for (const file of filesToCopy) {\n const sourcePath = path.join(templatesDir, file)\n const targetFileName = renameMap[file] || file\n const destinationPath = path.join(destinationDir, targetFileName)\n\n await copyRecursiveSync(sourcePath, destinationPath)\n }\n if (isNextJsProject) {\n const templateJsonPath = path.join(destinationDir, '.lintstagedrc.json')\n if (fs.existsSync(templateJsonPath)) {\n fs.unlinkSync(templateJsonPath)\n }\n } else {\n const templateCjsPath = path.join(destinationDir, '.lintstagedrc.cjs')\n if (fs.existsSync(templateCjsPath)) {\n fs.unlinkSync(templateCjsPath)\n }\n }\n spinner.succeed(chalk.green('Configuration files copied successfully!'))\n } catch (error) {\n spinner.fail(chalk.red('Error copying configuration files:'))\n console.error(error)\n throw error\n }\n}\n","import chalk from 'chalk'\nimport { exec } from 'child_process'\nimport ora from 'ora'\nimport { promisify } from 'util'\n\nconst execAsync = promisify(exec)\n\nexport async function installDependencies(): Promise<void> {\n const spinner = ora('Installing dependencies...').start()\n const dependencies = [\n '@commitlint/cli@^19.0.0',\n '@commitlint/config-conventional@^19.0.0',\n '@release-it/conventional-changelog@^10.0.0',\n 'commitizen@^4.0.0',\n 'conventional-changelog-conventionalcommits@^8.0.0',\n 'dotenv-cli@^8.0.0',\n 'git-cz@^4.0.0',\n 'husky@^9.0.0',\n 'inquirer@^9.0.0',\n 'lint-staged@^15.0.0',\n 'release-it@^18.0.0',\n 'typescript@^5.0.0'\n ]\n\n try {\n const { stdout, stderr } = await execAsync(\n `npm install --save-dev ${dependencies.join(' ')}`\n )\n if (stdout) {\n console.log(chalk.gray(stdout))\n }\n if (stderr) {\n console.error(chalk.gray(stderr))\n }\n spinner.succeed(chalk.green('Dependencies installed successfully!'))\n } catch (error) {\n spinner.fail(chalk.red('Error installing dependencies:'))\n if (error instanceof Error) {\n const errorWithStd = error as Error & { stderr?: string; stdout?: string }\n if (errorWithStd.stderr) {\n console.error(errorWithStd.stderr)\n } else if (errorWithStd.stdout) {\n console.error(errorWithStd.stdout)\n } else {\n console.error(error.message)\n }\n } else {\n console.error(error)\n }\n throw error\n }\n}\n","import chalk from 'chalk'\nimport * as fs from 'fs'\nimport ora from 'ora'\nimport * as path from 'path'\n\ninterface PackageJson {\n [key: string]: unknown\n}\n\nexport function modifyPackageJson(\n callback: (packageJson: PackageJson) => void\n): void {\n const spinner = ora('Modifying package.json...').start()\n const packageJsonPath = path.join(process.cwd(), 'package.json')\n\n if (!fs.existsSync(packageJsonPath)) {\n spinner.fail(chalk.red('package.json file not found.'))\n return\n }\n\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'))\n const modifiedPackageJson = callback(packageJson)\n fs.writeFileSync(\n packageJsonPath,\n JSON.stringify(modifiedPackageJson, null, 2)\n )\n spinner.succeed(chalk.green('package.json modified successfully!'))\n } catch (error) {\n spinner.fail(chalk.red('Error modifying package.json:'))\n console.error(error)\n throw error\n }\n}\n"],"mappings":"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","names":["fileURLToPath","path","getFilename","getDirname","__dirname","chalk","exec","Command","fs","ora","path","promisify","chalk","fs","inquirer","ora","path","copyConfigFiles","spinner","templatesDir","__dirname","destinationDir","copyRecursiveSync","src","dest","children","childItemName","error","filesToCopy","renameMap","isNextJsProject","file","sourcePath","targetFileName","destinationPath","templateJsonPath","templateCjsPath","chalk","exec","ora","promisify","execAsync","installDependencies","spinner","dependencies","stdout","stderr","error","errorWithStd","chalk","fs","ora","path","modifyPackageJson","callback","spinner","packageJsonPath","packageJson","modifiedPackageJson","error","execAsync","promisify","exec","program","Command","packageJsonPath","__dirname","packageJson","main","spinner","ora","userAgent","chalk","installDependencies","copyConfigFiles","modifyPackageJson","error"]}