UNPKG

@legislato/legislato-conventions

Version:

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

5 lines 6.01 kB
#!/usr/bin/env node "use strict";var H=Object.create;var u=Object.defineProperty;var M=Object.getOwnPropertyDescriptor;var W=Object.getOwnPropertyNames;var B=Object.getPrototypeOf,K=Object.prototype.hasOwnProperty;var U=(e,n)=>{for(var o in n)u(e,o,{get:n[o],enumerable:!0})},S=(e,n,o,r)=>{if(n&&typeof n=="object"||typeof n=="function")for(let p of W(n))!K.call(e,p)&&p!==o&&u(e,p,{get:()=>n[p],enumerable:!(r=M(n,p))||r.enumerable});return e};var i=(e,n,o)=>(o=e!=null?H(B(e)):{},S(n||!e||!e.__esModule?u(o,"default",{value:e,enumerable:!0}):o,e)),Y=e=>S(u({},"__esModule",{value:!0}),e);var Z={};U(Z,{main:()=>q});module.exports=Y(Z);var c=i(require("chalk")),$=require("child_process"),z=require("commander"),O=i(require("fs")),T=i(require("ora")),I=i(require("path")),R=require("util");var f=i(require("chalk")),t=i(require("fs")),P=i(require("inquirer")),_=i(require("ora")),l=i(require("path"));async function C(){let e=(0,_.default)("Copying configuration files...").start(),n=l.join(__dirname,"../configs"),o=process.cwd(),r=async(a,s)=>{if(t.existsSync(a))if(t.statSync(a).isDirectory()){t.existsSync(s)||t.mkdirSync(s);let g=t.readdirSync(a);for(let x of g)await r(l.join(a,x),l.join(s,x))}else try{t.existsSync(s)?(await P.default.prompt([{type:"confirm",name:"overwrite",message:f.default.yellow(`File ${s} already exists. Overwrite?`),default:!1}])).overwrite?(t.copyFileSync(a,s),e.info(f.default.gray(`File ${s} overwritten successfully!`))):e.warn(f.default.yellow(`File ${s} skipped.`)):(t.copyFileSync(a,s),e.info(f.default.gray(`File ${s} copied successfully!`)))}catch(g){throw e.fail(f.default.red(`Error copying file ${s}:`)),console.error(g),g}},p=t.readdirSync(n),G={".commitlintrc.template.json":".commitlintrc.json",".lintstagedrc.template.json":".lintstagedrc.json",".lintstagedrc.template.cjs":".lintstagedrc.cjs",".release-it.template.ts":".release-it.ts","changelog.config.template.cjs":"changelog.config.cjs","getAllContributors.template.cjs":"getAllContributors.cjs"};try{let a=t.existsSync(l.join(o,"next.config.js"))||t.existsSync(l.join(o,"next.config.ts"));for(let s of p){let j=l.join(n,s),w=G[s]||s,k=l.join(o,w);await r(j,k)}if(a){let s=l.join(o,".lintstagedrc.json");t.existsSync(s)&&t.unlinkSync(s)}else{let s=l.join(o,".lintstagedrc.cjs");t.existsSync(s)&&t.unlinkSync(s)}e.succeed(f.default.green("Configuration files copied successfully!"))}catch(a){throw e.fail(f.default.red("Error copying configuration files:")),console.error(a),a}}var d=i(require("chalk")),F=require("child_process"),b=i(require("ora")),J=require("util"),L=(0,J.promisify)(F.exec);async function D(){let e=(0,b.default)("Installing dependencies...").start(),n=["@commitlint/cli@^19.0.0","@commitlint/config-conventional@^19.0.0","@release-it/conventional-changelog@^10.0.0","commitizen@^4.0.0","conventional-changelog-conventionalcommits@^8.0.0","dotenv-cli@^8.0.0","git-cz@^4.0.0","husky@^9.0.0","inquirer@^9.0.0","lint-staged@^15.0.0","release-it@^18.0.0","typescript@^5.0.0"];try{let{stdout:o,stderr:r}=await L(`npm install --save-dev ${n.join(" ")}`);o&&console.log(d.default.gray(o)),r&&console.error(d.default.gray(r)),e.succeed(d.default.green("Dependencies installed successfully!"))}catch(o){if(e.fail(d.default.red("Error installing dependencies:")),o instanceof Error){let r=o;r.stderr?console.error(r.stderr):r.stdout?console.error(r.stdout):console.error(o.message)}else console.error(o);throw o}}var y=i(require("chalk")),m=i(require("fs")),N=i(require("ora")),A=i(require("path"));function E(e){let n=(0,N.default)("Modifying package.json...").start(),o=A.join(process.cwd(),"package.json");if(!m.existsSync(o)){n.fail(y.default.red("package.json file not found."));return}try{let r=JSON.parse(m.readFileSync(o,"utf-8")),p=e(r);m.writeFileSync(o,JSON.stringify(p,null,2)),n.succeed(y.default.green("package.json modified successfully!"))}catch(r){throw n.fail(y.default.red("Error modifying package.json:")),console.error(r),r}}var Q=(0,R.promisify)($.exec),v=new z.Command,V=I.join(__dirname,"../package.json"),X=JSON.parse(O.readFileSync(V,"utf-8"));v.version(X.version).description("Automatically configures conventional commits and changelogs.");async function q(){let e=(0,T.default)("Setting up conventions...").start();try{let n=process.env.npm_config_user_agent;(!n||!n.startsWith("npm"))&&(e.fail(c.default.red("This package only supports npm. Please use npm to install dependencies.")),process.exit(1)),await D(),await C(),E(o=>(o.scripts={...o.scripts??{},prepare:"husky",release:"dotenv release-it -- --verbose","release:only-version":"dotenv release-it -- --verbose --only-version","release:no-npm":"dotenv release-it -- --no-npm.publish","release:changelog":"dotenv release-it -- --changelog","release:version":"dotenv release-it -- --release-version"},o.config={commitizen:{path:"./node_modules/git-cz"}},o)),e.start("Running npm run prepare..."),await Q("npm run prepare"),e.succeed(c.default.green("npm run prepare executed successfully!")),e.succeed(c.default.green("Configuration completed successfully!")),console.log(c.default.bold(` Next steps:`)),console.log(c.default.white("1. Create a .env file in your project root.")),console.log(c.default.white("2. Add the following line to the .env file:")),console.log(c.default.cyan(" GITHUB_TOKEN=your_github_personal_access_token")),console.log(c.default.gray(" (Replace your_github_personal_access_token with your actual token)")),console.log(c.default.white("3. This will allow release-it to automate releases on GitHub.")),console.log(c.default.white("4. If you want to run lint, test or build before running release, please update the release scripts in your package.json accordingly.")),console.log(c.default.green(` \u{1F389} Congratulations! Your project is now ready for organized commits and automated releases!`))}catch(n){e.fail(c.default.red("Configuration failed")),console.error(n),process.exit(1)}}v.action(q);v.parse(process.argv);0&&(module.exports={main}); //# sourceMappingURL=index.js.map