verup
Version:
Increment and update version in all project files (CLI)
6 lines (5 loc) • 2.1 kB
JavaScript
(function(){function p(a,e){process.stderr.write(a+"\n");process.exit(e)}function v(a,e){var b=a||".";do{var c=k.join(b,"package.json");if(l.existsSync(c)){k.isAbsolute(c)||(c=l.realpathSync(c));var f=q(c);if(e){if(f&&f.name==e)return c}else if(f&&(f.extra&&f.extra.verup||f.verup)&&"verup"!=f.name)return c}a=b;b=k.join(b,"..")}while(b!=a&&".."!=a.slice(0,2));return!1}var k=require("path"),l=require("fs"),q=require;try{q=require("require-json5")}catch(a){}var m=[/^((?:\$|(?:\s*\**\s*@)|(?:\s*(?:var|,)?\s+))version[\s:='"]+)([0-9]+(?:\.[0-9]+){2,2})/i,
/^(\s*(?:export\s+)?(?:const|var|let)\s+VERSION[\s='"]+)([0-9]+(?:\.[0-9]+){2,2})/i,/^(\s?\*.*v)([0-9]+(?:\.[0-9]+){2,2})/],w=/^(\s*['"]version['"]\s*:\s*['"])([0-9]+(?:\.[0-9]+){2,2})/i,h="1",r="",t="b";process.argv.forEach(function(a,b){if(!(2>b))if("-"==a.slice(0,1)&&isNaN(parseFloat(a)))t=a.slice(1);else{switch(t){case "b":h=a;break;case "n":r=a}t="b"}});var n=v(process.cwd(),r)||v(__dirname,r);n||p("package.json file not found",1);var x=k.dirname(n),d=q(n);d||p("Can't read package.json file",
2);var g=d.extra&&d.extra.verup||d.verup;g||p("package.json doesn't have a `verup` property defined",3);var A=g.files;g.regs&&(m=g.regs.map(function(a){return new RegExp(a,"i")}));if(g=d.version){h=h.split(".").reverse();for(var b=g.split(".").reverse(),y,u;h.length&&!(y=parseInt(h.pop())););u=h.length;b[u]=+b[u]+y;h.forEach(function(a,e){b[e]=a});b=b.reverse().join(".");d.version=b;console.log("Bumping version: "+g+" -> "+b);(d=JSON.stringify(d,null,2))&&g!=b&&l.writeFileSync(n,d+"\n");var z=function(a,
e){return e+b};A.forEach(function(a){var e=k.join(x,a),d=l.readFileSync(e,"utf8"),c;switch(k.extname(a)){case ".json":try{var f=JSON.parse(d);f.version=b;(c=JSON.stringify(f,null,2))&&(c+="\n")}catch(B){c=d.split("\n").map(function(a){return w.test(a)?a.replace(w,z):a}).join("\n")}break;default:c=d.split("\n").map(function(a){for(var b=m.length;b--;)if(m[b].test(a))return a.replace(m[b],z);return a}).join("\n")}c&&c!=d&&(console.log("\t"+e.replace(x,"").replace(/^[\\/]+/,"")),l.writeFileSync(e,c))})}})();