@tikkhun/version 2025.7.7 → 2026.4.13

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.
Files changed (54) hide show
  1. package/README.md +179 -5
  2. package/dist/cli/date-version.js +4 -3
  3. package/dist/cli/date-version.mjs +4 -3
  4. package/dist/cli/node-version.js +4 -3
  5. package/dist/cli/node-version.mjs +4 -3
  6. package/dist/cli/semantic-version.js +4 -3
  7. package/dist/cli/semantic-version.mjs +4 -3
  8. package/dist/cli/shared.d.mts +130 -0
  9. package/dist/cli/shared.d.ts +130 -0
  10. package/dist/cli/shared.js +6 -0
  11. package/dist/cli/shared.mjs +6 -0
  12. package/dist/lib/VersionManager.d.mts +49 -14
  13. package/dist/lib/VersionManager.d.ts +49 -14
  14. package/dist/lib/VersionManager.js +4 -3
  15. package/dist/lib/VersionManager.mjs +4 -3
  16. package/dist/lib/VersionUpdateResult.d.mts +36 -24
  17. package/dist/lib/VersionUpdateResult.d.ts +36 -24
  18. package/dist/lib/VersionUpdateResult.js +2 -2
  19. package/dist/lib/VersionUpdateResult.mjs +2 -2
  20. package/dist/lib/getter/NodeVersionGetter.js +1 -1
  21. package/dist/lib/getter/NodeVersionGetter.mjs +1 -1
  22. package/dist/lib/getter/SemanticVersionGetter.js +1 -1
  23. package/dist/lib/getter/SemanticVersionGetter.mjs +1 -1
  24. package/dist/lib/getter/index.js +1 -1
  25. package/dist/lib/getter/index.mjs +1 -1
  26. package/dist/lib/index.d.mts +4 -1
  27. package/dist/lib/index.d.ts +4 -1
  28. package/dist/lib/index.js +4 -3
  29. package/dist/lib/index.mjs +4 -3
  30. package/dist/lib/store/ConfigStore.d.mts +69 -0
  31. package/dist/lib/store/ConfigStore.d.ts +69 -0
  32. package/dist/lib/store/ConfigStore.js +6 -0
  33. package/dist/lib/store/ConfigStore.mjs +6 -0
  34. package/dist/lib/store/JsonStore.d.mts +32 -9
  35. package/dist/lib/store/JsonStore.d.ts +32 -9
  36. package/dist/lib/store/JsonStore.js +4 -3
  37. package/dist/lib/store/JsonStore.mjs +4 -3
  38. package/dist/lib/store/Store.d.mts +182 -4
  39. package/dist/lib/store/Store.d.ts +182 -4
  40. package/dist/lib/store/StoreFactory.d.mts +14 -0
  41. package/dist/lib/store/StoreFactory.d.ts +14 -0
  42. package/dist/lib/store/StoreFactory.js +6 -0
  43. package/dist/lib/store/StoreFactory.mjs +6 -0
  44. package/dist/lib/store/TextStore.d.mts +62 -6
  45. package/dist/lib/store/TextStore.d.ts +62 -6
  46. package/dist/lib/store/TextStore.js +3 -3
  47. package/dist/lib/store/TextStore.mjs +3 -3
  48. package/dist/lib/store/index.d.mts +3 -1
  49. package/dist/lib/store/index.d.ts +3 -1
  50. package/dist/lib/store/index.js +4 -3
  51. package/dist/lib/store/index.mjs +4 -3
  52. package/dist/lib/utils.js +1 -1
  53. package/dist/lib/utils.mjs +1 -1
  54. package/package.json +10 -6
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
- import {readJson,writeJson,pathExists}from'fs-extra';import {Logger}from'@tikkhun/logger';import {getDateVersion}from'@tikkhun/date-version';import {findUp}from'@tikkhun/utils';import {program}from'commander';/**
2
+ import {readJson,pathExists,readFile,ensureFile,writeFile}from'fs-extra';import {XMLParser,XMLBuilder}from'fast-xml-parser';import U from'js-yaml';import {get,set}from'lodash';import {parse,stringify}from'smol-toml';import {Logger}from'@tikkhun/logger';import {getDateVersion}from'@tikkhun/date-version';import {findUp}from'@tikkhun/utils';import G from'path';import {program}from'commander';/**
3
3
  @tikkhun/version
4
- 2025.7.7
4
+ 2026.4.13
5
5
  */
6
- var I=Object.defineProperty,M=Object.defineProperties;var R=Object.getOwnPropertyDescriptors;var x=Object.getOwnPropertySymbols;var L=Object.prototype.hasOwnProperty,D=Object.prototype.propertyIsEnumerable;var d=(r,t,o)=>t in r?I(r,t,{enumerable:true,configurable:true,writable:true,value:o}):r[t]=o,E=(r,t)=>{for(var o in t||(t={}))L.call(t,o)&&d(r,o,t[o]);if(x)for(var o of x(t))D.call(t,o)&&d(r,o,t[o]);return r},T=(r,t)=>M(r,R(t));var s=(r,t)=>()=>(r&&(t=r(r=0)),t);var F=(r,t)=>()=>(t||r((t={exports:{}}).exports,t),t.exports);var n=(r,t,o)=>new Promise((e,i)=>{var A=p=>{try{u(o.next(p));}catch(h){i(h);}},J=p=>{try{u(o.throw(p));}catch(h){i(h);}},u=p=>p.done?e(p.value):Promise.resolve(p.value).then(A,J);u((o=o.apply(r,t)).next());});var $,a,b=s(()=>{$={file:"package.json",key:"version"},a=class{constructor(t){this.opts=Object.assign({},$,t);}update(t){return n(this,null,function*(){try{let o=yield readJson(this.opts.file);return yield writeJson(this.opts.file,T(E({},o),{[this.opts.key]:t}),{spaces:2}),!0}catch(o){return false}})}};});var N=s(()=>{});var O=s(()=>{process.cwd();});var v=s(()=>{O();});var S=s(()=>{b();N();v();});var B,l,_=s(()=>{S();B={getter:{get(){return getDateVersion()}},store:new a},l=class{constructor(t){this.logger=new Logger("VersionManager");this.opts=Object.assign({},B,t);}get(){return this.opts.getter.get()}update(){return n(this,null,function*(){let t=yield this.get();this.logger.log("new version: "+t);let o=Array.isArray(this.opts.store)?this.opts.store:[this.opts.store];try{if((yield Promise.all(o.map(i=>i.update(t)))).filter(i=>!i).length)throw new Error("update, but error");return !0}catch(e){return false}})}};});var j=s(()=>{});var f,c,m,P=s(()=>{f=(e=>(e[e.major=0]="major",e[e.minor=1]="minor",e[e.patch=2]="patch",e))(f||{}),c={file:"package.json",position:2,key:"version"},m=class{constructor(t){this.opts=Object.assign({},c,t);}get(){return n(this,null,function*(){if(!(yield pathExists(this.opts.file)))throw new Error("get new version,but error: the file is not found");let{[this.opts.key]:t}=yield readJson(this.opts.file);if(!t)throw new Error("get new version, but error: the old version is not found");if(typeof t!="string")throw new Error(`get new version, but error: the old version is not string,old version: ${JSON.stringify(t)}`);let[o,e,i]=t.split(".");return this.opts.position===0?[Number(o)+1,e,i].join("."):this.opts.position===1?[o,Number(e)+1,i].join("."):[o,e,Number(i)+1].join(".")})}};});var k=s(()=>{});var V=s(()=>{j();P();k();});var G=s(()=>{_();O();S();V();});var W=F(y=>{G();Logger.log("[\u6B22\u8FCE] semantic-version");program.command("update").description("\u66F4\u65B0").option("-p --position <position>","\u66F4\u65B0\u4F4D\u7F6E<major,minor,patch>",f[c.position]).option("-f --file <fileName>","json\u6587\u4EF6\u540D\u79F0",c.file).action(r=>n(null,null,function*(){let t=f[r.position],o=findUp(r.file,process.cwd());if(!o)throw new Error(`\u66F4\u65B0\u7248\u672C\u53F7\uFF0C\u4F46\u5931\u8D25\uFF0C\u65E0\u6CD5\u83B7\u53D6${r.file}\u6587\u4EF6\u8DEF\u5F84`);Logger.debug("\u66F4\u65B0\u7684\u6587\u4EF6\u8DEF\u5F84: "+o),(yield new l({getter:new m({position:t,file:o}),store:new a({file:o,key:"version"})}).update())&&Logger.debug("package json \u7684\u7248\u672C\u66F4\u65B0\u6210\u529F");}));program.command("get").description("\u83B7\u53D6\u7248\u672C").option("-p --position <position>","\u66F4\u65B0\u4F4D\u7F6E",f[c.position]).action(r=>n(null,null,function*(){let t=f[r.position],o=new m({position:t});Logger.log(yield o.get());}));program.parse(process.argv);});var semanticVersion = W();export{semanticVersion as default};
6
+ var ne=Object.defineProperty,ae=Object.defineProperties;var ce=Object.getOwnPropertyDescriptors;var L=Object.getOwnPropertySymbols;var ge=Object.prototype.hasOwnProperty,pe=Object.prototype.propertyIsEnumerable;var J=(s,e,t)=>e in s?ne(s,e,{enumerable:true,configurable:true,writable:true,value:t}):s[e]=t,u=(s,e)=>{for(var t in e||(e={}))ge.call(e,t)&&J(s,t,e[t]);if(L)for(var t of L(e))pe.call(e,t)&&J(s,t,e[t]);return s},m=(s,e)=>ae(s,ce(e));var c=(s,e)=>()=>(s&&(e=s(s=0)),e);var ue=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports);var n=(s,e,t)=>new Promise((r,o)=>{var i=g=>{try{p(t.next(g));}catch(y){o(y);}},a=g=>{try{p(t.throw(g));}catch(y){o(y);}},p=g=>g.done?r(g.value):Promise.resolve(g.value).then(i,a);p((t=t.apply(s,e)).next());});var V,O=c(()=>{V=class{constructor(e){this.target=e;}get(){return n(this,null,function*(){var e;try{if(!(yield pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let t=yield this.loadStructuredConfig(),r=this.target.path?get(t,this.target.path):t;return r===void 0?this.createGetError(`path is not found: ${(e=this.target.path)!=null?e:"<root>"}`):typeof r!="string"&&typeof r!="number"?this.createGetError(`value is not string or number: ${JSON.stringify(r)}`):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(t){return this.createGetError(this.getErrorMessage(t))}})}set(e){return n(this,null,function*(){try{let t=yield this.get(),r=t.success?t.value:void 0,o=yield pathExists(this.target.file);if(!o){if(!this.target.createIfNotExists)return this.createSetError(e,`file is not found: ${this.target.file}`,r,"set");yield ensureFile(this.target.file);}let i=o?yield this.loadStructuredConfig():{};if(this.target.path)set(i,this.target.path,e),yield this.saveStructuredConfig(i);else {if(typeof i=="object"&&i!==null&&!Array.isArray(i))return this.createSetError(e,"path is required for structured target",r,"set");yield this.saveStructuredConfig(e);}return {action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:e}}catch(t){return this.createSetError(e,this.getErrorMessage(t),void 0,"set")}})}update(e){return n(this,null,function*(){let t=yield this.set(e);return m(u({},t),{action:"update"})})}createGetError(e){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:e}}createSetError(e,t,r,o="set"){return {action:o,success:false,file:this.target.file,type:this.target.type,oldValue:r,newValue:e,message:t}}getErrorMessage(e){return e instanceof Error?e.message:String(e)}loadStructuredConfig(){return n(this,null,function*(){var t;let e=yield readFile(this.target.file,(t=this.target.encoding)!=null?t:"utf8");switch(this.target.type){case "json":return JSON.parse(e);case "yaml":return U.load(e);case "toml":return parse(e);case "xml":return new XMLParser({ignoreAttributes:true}).parse(e);case "env":return this.parseEnvContent(e);default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}saveStructuredConfig(e){return n(this,null,function*(){var r;let t=(r=this.target.encoding)!=null?r:"utf8";switch(this.target.type){case "json":yield writeFile(this.target.file,JSON.stringify(e,null,2),t);return;case "yaml":yield writeFile(this.target.file,U.dump(e),t);return;case "toml":yield writeFile(this.target.file,stringify(e),t);return;case "xml":yield writeFile(this.target.file,new XMLBuilder({format:true,ignoreAttributes:true}).build(e),t);return;case "env":yield writeFile(this.target.file,this.stringifyEnvContent(e),t);return;default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}parseEnvContent(e){let t={},r=e.split(/\r?\n/);for(let o of r){let i=o.trim();if(!i||i.startsWith("#"))continue;let a=i.indexOf("=");if(a<0)continue;let p=i.slice(0,a).trim(),g=i.slice(a+1).trim();set(t,p.replace(/__/g,"."),g);}return t}stringifyEnvContent(e){let t=[],r=(o,i)=>{if(o!==null&&typeof o=="object"&&!Array.isArray(o)){for(let[p,g]of Object.entries(o))r(g,[...i,p]);return}let a=i.join("__").toUpperCase();t.push(`${a}=${o!=null?o:""}`);};for(let[o,i]of Object.entries(e))r(i,[o]);return t.join(`
7
+ `)}};});var we,k,q=c(()=>{O();we={file:"package.json",key:"version"},k=class extends V{constructor(e){var o;let t=Object.assign({},we,e),r={type:"json",file:t.file,path:(o=t.path)!=null?o:t.key,createIfNotExists:t.createIfNotExists};super(r);}};});var X=c(()=>{});var Te,C,N=c(()=>{Te={file:"",mode:"raw",trim:true,replacement:"{{version}}"},C=class{constructor(e){this.target=u(u({type:"text"},Te),e);}get(){return n(this,null,function*(){var e;try{if(!(yield pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let t=yield readFile(this.target.file,(e=this.target.encoding)!=null?e:"utf8"),r=this.resolveValueFromText(t);return r===void 0?this.createGetError("version is not found in text content"):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(t){return this.createGetError(this.getErrorMessage(t))}})}set(e){return n(this,null,function*(){try{let t=yield this.get(),r=t.success?t.value:void 0,o=yield this.createNextText(e);return yield this.writeText(o),{action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:e}}catch(t){return {action:"set",success:false,file:this.target.file,type:this.target.type,newValue:e,message:this.getErrorMessage(t)}}})}update(e){return n(this,null,function*(){let t=yield this.set(e);return m(u({},t),{action:"update"})})}resolveValueFromText(e){var t;if(this.target.mode==="replace"){let o=this.createPattern().exec(e);if(!o)return;let i=(t=o.groups)==null?void 0:t.version;return i!==void 0?i:o[1]!==void 0?o[1]:o[0]}return this.target.trim?e.trim():e}createNextText(e){return n(this,null,function*(){var t,r;if(this.target.mode==="replace"){if(!(yield pathExists(this.target.file)))throw new Error(`file is not found: ${this.target.file}`);let o=yield readFile(this.target.file,(t=this.target.encoding)!=null?t:"utf8");if(!this.createPattern().test(o))throw new Error("pattern is not matched");let a=((r=this.target.replacement)!=null?r:"{{version}}").replaceAll("{{version}}",String(e));return o.replace(this.createPattern(),a)}return String(e)})}writeText(e){return n(this,null,function*(){var t;if(!(yield pathExists(this.target.file))){if(!this.target.createIfNotExists)throw new Error(`file is not found: ${this.target.file}`);yield ensureFile(this.target.file);}yield writeFile(this.target.file,e,(t=this.target.encoding)!=null?t:"utf8");})}createPattern(){if(!this.target.pattern)throw new Error("pattern is required when text mode is replace");return new RegExp(this.target.pattern,this.target.flags)}createGetError(e){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:e}}getErrorMessage(e){return e instanceof Error?e.message:String(e)}};});var P,I,W=c(()=>{O();N();P=class{static create(e){return e.type==="text"?new C(e):e.type==="custom"?new I(e):new V(e)}},I=class{constructor(e){this.target=e;}get(){return n(this,null,function*(){if(!this.target.get)return {action:"get",success:false,file:this.target.file,type:this.target.type,message:"custom get is not implemented"};try{let e=yield this.target.get(this.target.file);return {action:"get",success:!0,file:this.target.file,type:this.target.type,value:e}}catch(e){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:e instanceof Error?e.message:String(e)}}})}set(e){return n(this,null,function*(){try{let t=yield this.get();return this.target.set?(yield this.target.set(e,this.target.file),{action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:t.success?t.value:void 0,newValue:e}):{action:"set",success:!1,file:this.target.file,type:this.target.type,oldValue:t.success?t.value:void 0,newValue:e,message:"custom set is not implemented"}}catch(t){return {action:"set",success:false,file:this.target.file,type:this.target.type,newValue:e,message:t instanceof Error?t.message:String(t)}}})}update(e){return n(this,null,function*(){let t=yield this.set(e);return m(u({},t),{action:"update"})})}};});var j=c(()=>{O();q();X();W();N();});var w,F=c(()=>{w=class{static create(e,t){return {success:e.every(r=>r.success),value:t,results:e}}};});var ve,f,z=c(()=>{j();F();ve={getter:{get(){return getDateVersion()}},store:new k,targets:[]},f=class{constructor(e){this.logger=new Logger("VersionManager");this.opts=Object.assign({},ve,e);}get(){return this.opts.getter.get()}read(){return n(this,null,function*(){let e=this.resolveStores(),t=[];for(let r of e)t.push(yield r.get());return w.create(t)})}set(e){return n(this,null,function*(){this.logger.log("set version: "+e);let t=this.resolveStores(),r=[];for(let o of t)r.push(yield o.set(e));return w.create(r,e)})}update(){return n(this,null,function*(){let e=yield this.get();this.logger.log("new version: "+e);let t=this.resolveStores(),r=[];for(let o of t)r.push(yield o.update(e));return w.create(r,e)})}resolveStores(){var e;return (e=this.opts.targets)!=null&&e.length?this.opts.targets.map(t=>P.create(t)):Array.isArray(this.opts.store)?this.opts.store:[this.opts.store]}};});var H=c(()=>{process.cwd();});var Q=c(()=>{});var d,l,h,Y=c(()=>{d=(r=>(r[r.major=0]="major",r[r.minor=1]="minor",r[r.patch=2]="patch",r))(d||{}),l={file:"package.json",position:2,key:"version"},h=class{constructor(e){this.opts=Object.assign({},l,e);}get(){return n(this,null,function*(){if(!(yield pathExists(this.opts.file)))throw new Error("get new version,but error: the file is not found");let{[this.opts.key]:e}=yield readJson(this.opts.file);if(!e)throw new Error("get new version, but error: the old version is not found");if(typeof e!="string")throw new Error(`get new version, but error: the old version is not string,old version: ${JSON.stringify(e)}`);let[t,r,o]=e.split(".");return this.opts.position===0?[Number(t)+1,r,o].join("."):this.opts.position===1?[t,Number(r)+1,o].join("."):[t,r,Number(o)+1].join(".")})}};});var Z=c(()=>{});var ee=c(()=>{Q();Y();Z();});var A=c(()=>{z();F();H();j();ee();});function x(s,e=process.cwd(),t=true){var r;return G.isAbsolute(s)?s:t?(r=findUp(s,e))!=null?r:G.resolve(e,s):G.resolve(e,s)}function T(s,e=process.cwd(),t=true){var o,i,a,p;let r=x(s.file,e,t);if(s.type==="text")return {type:"text",file:r,mode:(o=s.mode)!=null?o:"raw",pattern:s.pattern,replacement:s.replacement,trim:(i=s.trim)!=null?i:true,createIfNotExists:s.createIfNotExists};if(s.type==="custom")throw new Error("cli does not support custom target directly");return {type:s.type,file:r,path:(p=(a=s.path)!=null?a:s.key)!=null?p:"version",createIfNotExists:s.createIfNotExists}}function E(s,e){return n(this,null,function*(){var g,y,_,$;let t=x(s),r=G.dirname(t),o=yield readJson(t),i=((g=o.targets)!=null?g:[]).map(ie=>T(ie,r,false)),a=(y=o.currentTargetIndex)!=null?y:0;if(!o.getter)return {targets:i,currentTargetIndex:a};if(o.getter.type!=="semantic")throw new Error(`unsupported getter type: ${o.getter.type}`);return {getter:new h({file:x(o.getter.file,r,false),key:(_=o.getter.key)!=null?_:"version",position:d[($=e!=null?e:o.getter.position)!=null?$:"patch"]}),targets:i,currentTargetIndex:a}})}function re(s,e=0){var o;let t=(o=s.results[e])!=null?o:s.results.find(i=>i.success),r=t&&"value"in t?t.value:"";Logger.log(String(r!=null?r:""));}function M(s){Logger.log(JSON.stringify(s,null,2));}var se=c(()=>{A();});var be=ue(v=>{A();se();Logger.log("[\u6B22\u8FCE] semantic-version");program.command("update").description("\u9012\u589E\u8BED\u4E49\u5316\u7248\u672C\u5E76\u5199\u5165\u76EE\u6807\u6587\u4EF6").option("-p --position <position>","\u66F4\u65B0\u4F4D\u7F6E<major,minor,patch>",d[l.position]).option("-c --config <configFile>","\u7248\u672C\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84").option("-F --file <fileName>","\u76EE\u6807\u6587\u4EF6\u540D\u79F0",l.file).option("-t --type <type>","\u76EE\u6807\u6587\u4EF6\u7C7B\u578B","json").option("-k --key <key>","\u517C\u5BB9\u65E7\u7248 key \u53C2\u6570",l.key).option("--path <path>","\u7ED3\u6784\u5316\u8DEF\u5F84").option("--mode <mode>","\u6587\u672C\u6A21\u5F0F. raw \u6216 replace","raw").option("--pattern <pattern>","\u6587\u672C\u66FF\u6362\u6B63\u5219").option("--replacement <replacement>","\u6587\u672C\u66FF\u6362\u6A21\u677F","{{version}}").option("--create-if-not-exists","\u6587\u4EF6\u4E0D\u5B58\u5728\u65F6\u81EA\u52A8\u521B\u5EFA",false).action(s=>n(null,null,function*(){let e=s.position,r=yield (s.config?yield Me(s.config,e):Ge(s,e)).update();M(r);}));program.command("get").description("\u83B7\u53D6\u7248\u672C").option("-p --position <position>","\u66F4\u65B0\u4F4D\u7F6E",d[l.position]).option("-c --config <configFile>","\u7248\u672C\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84").action(s=>n(null,null,function*(){let e=s.position,t=s.config?(yield E(s.config,e)).getter:new h({position:d[e]});if(!t)throw new Error("getter is required when using semantic-version get");Logger.log(yield t.get());}));program.command("read").description("\u8BFB\u53D6\u76EE\u6807\u6587\u4EF6\u4E2D\u7684\u5F53\u524D\u7248\u672C").option("-c --config <configFile>","\u7248\u672C\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84").option("-F --file <fileName>","\u76EE\u6807\u6587\u4EF6\u540D\u79F0",l.file).option("-t --type <type>","\u76EE\u6807\u6587\u4EF6\u7C7B\u578B","json").option("-k --key <key>","\u517C\u5BB9\u65E7\u7248 key \u53C2\u6570",l.key).option("--path <path>","\u7ED3\u6784\u5316\u8DEF\u5F84").option("--mode <mode>","\u6587\u672C\u6A21\u5F0F. raw \u6216 replace","raw").option("--pattern <pattern>","\u6587\u672C\u66FF\u6362\u6B63\u5219").option("--value-only","\u53EA\u8F93\u51FA\u5F53\u524D\u503C",false).action(s=>n(null,null,function*(){let e=s.config?yield E(s.config):void 0,r=yield (e?new f({targets:e.targets}):new f({targets:[T(s)]})).read();if(s.valueOnly){re(r,e==null?void 0:e.currentTargetIndex);return}M(r);}));program.command("set").description("\u628A\u6307\u5B9A\u7248\u672C\u503C\u5199\u5165\u76EE\u6807\u6587\u4EF6").argument("<value>","\u7248\u672C\u503C").option("-c --config <configFile>","\u7248\u672C\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84").option("-F --file <fileName>","\u76EE\u6807\u6587\u4EF6\u540D\u79F0",l.file).option("-t --type <type>","\u76EE\u6807\u6587\u4EF6\u7C7B\u578B","json").option("-k --key <key>","\u517C\u5BB9\u65E7\u7248 key \u53C2\u6570",l.key).option("--path <path>","\u7ED3\u6784\u5316\u8DEF\u5F84").option("--mode <mode>","\u6587\u672C\u6A21\u5F0F. raw \u6216 replace","raw").option("--pattern <pattern>","\u6587\u672C\u66FF\u6362\u6B63\u5219").option("--replacement <replacement>","\u6587\u672C\u66FF\u6362\u6A21\u677F","{{version}}").option("--create-if-not-exists","\u6587\u4EF6\u4E0D\u5B58\u5728\u65F6\u81EA\u52A8\u521B\u5EFA",false).action((s,e)=>n(null,null,function*(){let t=e.config?yield E(e.config):void 0,o=yield (t?new f({targets:t.targets}):new f({targets:[T(e)]})).set(s);M(o);}));program.parse(process.argv);function Ge(s,e){let t=d[e],r=x(s.file);return new f({getter:new h({position:t,file:r}),targets:[T(m(u({},s),{file:r}))]})}function Me(s,e){return n(this,null,function*(){let t=yield E(s,e);if(!t.getter)throw new Error("getter is required when using semantic-version update with config");return new f({getter:t.getter,targets:t.targets})})}});var semanticVersion = be();export{semanticVersion as default};
@@ -0,0 +1,130 @@
1
+ import { Positions, SemanticVersionGetter } from '../lib/getter/SemanticVersionGetter.mjs';
2
+ import { VersionTarget } from '../lib/store/Store.mjs';
3
+ import { VersionManagerResult } from '../lib/VersionUpdateResult.mjs';
4
+ import '../lib/getter/Getter.mjs';
5
+
6
+ /**
7
+ * @description CLI 目标参数.
8
+ */
9
+ interface TargetCommandOptions {
10
+ /**
11
+ * @description 目标文件路径.
12
+ */
13
+ file: string;
14
+ /**
15
+ * @description 目标文件类型.
16
+ */
17
+ type: VersionTarget['type'];
18
+ /**
19
+ * @description 结构化路径.
20
+ */
21
+ path?: string;
22
+ /**
23
+ * @description 兼容旧版 key 参数.
24
+ */
25
+ key?: string;
26
+ /**
27
+ * @description 文本模式.
28
+ */
29
+ mode?: 'raw' | 'replace';
30
+ /**
31
+ * @description 文本替换正则.
32
+ */
33
+ pattern?: string;
34
+ /**
35
+ * @description 文本替换模板.
36
+ */
37
+ replacement?: string;
38
+ /**
39
+ * @description 读取文本时是否 trim.
40
+ */
41
+ trim?: boolean;
42
+ /**
43
+ * @description 文件不存在时是否创建.
44
+ */
45
+ createIfNotExists?: boolean;
46
+ }
47
+ /**
48
+ * @description 语义化版本 getter 配置.
49
+ */
50
+ interface SemanticGetterConfig {
51
+ /**
52
+ * @description getter 类型.
53
+ */
54
+ type: 'semantic';
55
+ /**
56
+ * @description 版本源文件路径.
57
+ */
58
+ file: string;
59
+ /**
60
+ * @description 版本字段 key.
61
+ */
62
+ key?: string;
63
+ /**
64
+ * @description 递增位置.
65
+ */
66
+ position?: keyof typeof Positions;
67
+ }
68
+ /**
69
+ * @description 版本配置文件结构.
70
+ */
71
+ interface VersionCliConfig {
72
+ /**
73
+ * @description getter 配置.
74
+ */
75
+ getter?: SemanticGetterConfig;
76
+ /**
77
+ * @description 版本目标列表.
78
+ */
79
+ targets: TargetCommandOptions[];
80
+ /**
81
+ * @description 读取单值时使用的目标索引.
82
+ */
83
+ currentTargetIndex?: number;
84
+ }
85
+ /**
86
+ * @description 解析后的配置结果.
87
+ */
88
+ interface ResolvedVersionCliConfig {
89
+ /**
90
+ * @description 语义化版本 getter.
91
+ */
92
+ getter?: SemanticVersionGetter;
93
+ /**
94
+ * @description 目标列表.
95
+ */
96
+ targets: VersionTarget[];
97
+ /**
98
+ * @description 当前值目标索引.
99
+ */
100
+ currentTargetIndex: number;
101
+ }
102
+ /**
103
+ * @description 解析 CLI 文件路径.
104
+ * @param file 文件路径.
105
+ */
106
+ declare function resolveTargetFile(file: string, baseDir?: string, enableFindUp?: boolean): string;
107
+ /**
108
+ * @description 把 CLI 参数转换成目标配置.
109
+ * @param options CLI 参数.
110
+ */
111
+ declare function resolveTarget(options: TargetCommandOptions, baseDir?: string, enableFindUp?: boolean): VersionTarget;
112
+ /**
113
+ * @description 加载版本配置文件.
114
+ * @param configFile 配置文件路径.
115
+ * @param positionOverride 可选的位置覆盖.
116
+ */
117
+ declare function loadVersionCliConfig(configFile: string, positionOverride?: keyof typeof Positions): Promise<ResolvedVersionCliConfig>;
118
+ /**
119
+ * @description 打印结果中的单个值.
120
+ * @param result 聚合结果.
121
+ * @param currentTargetIndex 当前目标索引.
122
+ */
123
+ declare function printManagerValue(result: VersionManagerResult, currentTargetIndex?: number): void;
124
+ /**
125
+ * @description 打印版本管理结果.
126
+ * @param result 聚合结果.
127
+ */
128
+ declare function printManagerResult(result: VersionManagerResult): void;
129
+
130
+ export { type ResolvedVersionCliConfig, type SemanticGetterConfig, type TargetCommandOptions, type VersionCliConfig, loadVersionCliConfig, printManagerResult, printManagerValue, resolveTarget, resolveTargetFile };
@@ -0,0 +1,130 @@
1
+ import { Positions, SemanticVersionGetter } from '../lib/getter/SemanticVersionGetter.js';
2
+ import { VersionTarget } from '../lib/store/Store.js';
3
+ import { VersionManagerResult } from '../lib/VersionUpdateResult.js';
4
+ import '../lib/getter/Getter.js';
5
+
6
+ /**
7
+ * @description CLI 目标参数.
8
+ */
9
+ interface TargetCommandOptions {
10
+ /**
11
+ * @description 目标文件路径.
12
+ */
13
+ file: string;
14
+ /**
15
+ * @description 目标文件类型.
16
+ */
17
+ type: VersionTarget['type'];
18
+ /**
19
+ * @description 结构化路径.
20
+ */
21
+ path?: string;
22
+ /**
23
+ * @description 兼容旧版 key 参数.
24
+ */
25
+ key?: string;
26
+ /**
27
+ * @description 文本模式.
28
+ */
29
+ mode?: 'raw' | 'replace';
30
+ /**
31
+ * @description 文本替换正则.
32
+ */
33
+ pattern?: string;
34
+ /**
35
+ * @description 文本替换模板.
36
+ */
37
+ replacement?: string;
38
+ /**
39
+ * @description 读取文本时是否 trim.
40
+ */
41
+ trim?: boolean;
42
+ /**
43
+ * @description 文件不存在时是否创建.
44
+ */
45
+ createIfNotExists?: boolean;
46
+ }
47
+ /**
48
+ * @description 语义化版本 getter 配置.
49
+ */
50
+ interface SemanticGetterConfig {
51
+ /**
52
+ * @description getter 类型.
53
+ */
54
+ type: 'semantic';
55
+ /**
56
+ * @description 版本源文件路径.
57
+ */
58
+ file: string;
59
+ /**
60
+ * @description 版本字段 key.
61
+ */
62
+ key?: string;
63
+ /**
64
+ * @description 递增位置.
65
+ */
66
+ position?: keyof typeof Positions;
67
+ }
68
+ /**
69
+ * @description 版本配置文件结构.
70
+ */
71
+ interface VersionCliConfig {
72
+ /**
73
+ * @description getter 配置.
74
+ */
75
+ getter?: SemanticGetterConfig;
76
+ /**
77
+ * @description 版本目标列表.
78
+ */
79
+ targets: TargetCommandOptions[];
80
+ /**
81
+ * @description 读取单值时使用的目标索引.
82
+ */
83
+ currentTargetIndex?: number;
84
+ }
85
+ /**
86
+ * @description 解析后的配置结果.
87
+ */
88
+ interface ResolvedVersionCliConfig {
89
+ /**
90
+ * @description 语义化版本 getter.
91
+ */
92
+ getter?: SemanticVersionGetter;
93
+ /**
94
+ * @description 目标列表.
95
+ */
96
+ targets: VersionTarget[];
97
+ /**
98
+ * @description 当前值目标索引.
99
+ */
100
+ currentTargetIndex: number;
101
+ }
102
+ /**
103
+ * @description 解析 CLI 文件路径.
104
+ * @param file 文件路径.
105
+ */
106
+ declare function resolveTargetFile(file: string, baseDir?: string, enableFindUp?: boolean): string;
107
+ /**
108
+ * @description 把 CLI 参数转换成目标配置.
109
+ * @param options CLI 参数.
110
+ */
111
+ declare function resolveTarget(options: TargetCommandOptions, baseDir?: string, enableFindUp?: boolean): VersionTarget;
112
+ /**
113
+ * @description 加载版本配置文件.
114
+ * @param configFile 配置文件路径.
115
+ * @param positionOverride 可选的位置覆盖.
116
+ */
117
+ declare function loadVersionCliConfig(configFile: string, positionOverride?: keyof typeof Positions): Promise<ResolvedVersionCliConfig>;
118
+ /**
119
+ * @description 打印结果中的单个值.
120
+ * @param result 聚合结果.
121
+ * @param currentTargetIndex 当前目标索引.
122
+ */
123
+ declare function printManagerValue(result: VersionManagerResult, currentTargetIndex?: number): void;
124
+ /**
125
+ * @description 打印版本管理结果.
126
+ * @param result 聚合结果.
127
+ */
128
+ declare function printManagerResult(result: VersionManagerResult): void;
129
+
130
+ export { type ResolvedVersionCliConfig, type SemanticGetterConfig, type TargetCommandOptions, type VersionCliConfig, loadVersionCliConfig, printManagerResult, printManagerValue, resolveTarget, resolveTargetFile };
@@ -0,0 +1,6 @@
1
+ 'use strict';var logger=require('@tikkhun/logger'),utils=require('@tikkhun/utils'),fsExtra=require('fs-extra'),y=require('path'),fastXmlParser=require('fast-xml-parser'),O=require('js-yaml'),lodash=require('lodash'),smolToml=require('smol-toml');require('@tikkhun/date-version');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var y__default=/*#__PURE__*/_interopDefault(y);var O__default=/*#__PURE__*/_interopDefault(O);/**
2
+ @tikkhun/version
3
+ 2026.4.13
4
+ */
5
+ var N=Object.defineProperty,P=Object.defineProperties;var b=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var k=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable;var T=(i,t,e)=>t in i?N(i,t,{enumerable:true,configurable:true,writable:true,value:e}):i[t]=e,f=(i,t)=>{for(var e in t||(t={}))k.call(t,e)&&T(i,e,t[e]);if(E)for(var e of E(t))M.call(t,e)&&T(i,e,t[e]);return i},m=(i,t)=>P(i,b(t));var c=(i,t,e)=>new Promise((r,s)=>{var o=n=>{try{u(e.next(n));}catch(g){s(g);}},a=n=>{try{u(e.throw(n));}catch(g){s(g);}},u=n=>n.done?r(n.value):Promise.resolve(n.value).then(o,a);u((e=e.apply(i,t)).next());});var l=class{constructor(t){this.target=t;}get(){return c(this,null,function*(){var t;try{if(!(yield fsExtra.pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let e=yield this.loadStructuredConfig(),r=this.target.path?lodash.get(e,this.target.path):e;return r===void 0?this.createGetError(`path is not found: ${(t=this.target.path)!=null?t:"<root>"}`):typeof r!="string"&&typeof r!="number"?this.createGetError(`value is not string or number: ${JSON.stringify(r)}`):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(e){return this.createGetError(this.getErrorMessage(e))}})}set(t){return c(this,null,function*(){try{let e=yield this.get(),r=e.success?e.value:void 0,s=yield fsExtra.pathExists(this.target.file);if(!s){if(!this.target.createIfNotExists)return this.createSetError(t,`file is not found: ${this.target.file}`,r,"set");yield fsExtra.ensureFile(this.target.file);}let o=s?yield this.loadStructuredConfig():{};if(this.target.path)lodash.set(o,this.target.path,t),yield this.saveStructuredConfig(o);else {if(typeof o=="object"&&o!==null&&!Array.isArray(o))return this.createSetError(t,"path is required for structured target",r,"set");yield this.saveStructuredConfig(t);}return {action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:t}}catch(e){return this.createSetError(t,this.getErrorMessage(e),void 0,"set")}})}update(t){return c(this,null,function*(){let e=yield this.set(t);return m(f({},e),{action:"update"})})}createGetError(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t}}createSetError(t,e,r,s="set"){return {action:s,success:false,file:this.target.file,type:this.target.type,oldValue:r,newValue:t,message:e}}getErrorMessage(t){return t instanceof Error?t.message:String(t)}loadStructuredConfig(){return c(this,null,function*(){var e;let t=yield fsExtra.readFile(this.target.file,(e=this.target.encoding)!=null?e:"utf8");switch(this.target.type){case "json":return JSON.parse(t);case "yaml":return O__default.default.load(t);case "toml":return smolToml.parse(t);case "xml":return new fastXmlParser.XMLParser({ignoreAttributes:true}).parse(t);case "env":return this.parseEnvContent(t);default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}saveStructuredConfig(t){return c(this,null,function*(){var r;let e=(r=this.target.encoding)!=null?r:"utf8";switch(this.target.type){case "json":yield fsExtra.writeFile(this.target.file,JSON.stringify(t,null,2),e);return;case "yaml":yield fsExtra.writeFile(this.target.file,O__default.default.dump(t),e);return;case "toml":yield fsExtra.writeFile(this.target.file,smolToml.stringify(t),e);return;case "xml":yield fsExtra.writeFile(this.target.file,new fastXmlParser.XMLBuilder({format:true,ignoreAttributes:true}).build(t),e);return;case "env":yield fsExtra.writeFile(this.target.file,this.stringifyEnvContent(t),e);return;default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}parseEnvContent(t){let e={},r=t.split(/\r?\n/);for(let s of r){let o=s.trim();if(!o||o.startsWith("#"))continue;let a=o.indexOf("=");if(a<0)continue;let u=o.slice(0,a).trim(),n=o.slice(a+1).trim();lodash.set(e,u.replace(/__/g,"."),n);}return e}stringifyEnvContent(t){let e=[],r=(s,o)=>{if(s!==null&&typeof s=="object"&&!Array.isArray(s)){for(let[u,n]of Object.entries(s))r(n,[...o,u]);return}let a=o.join("__").toUpperCase();e.push(`${a}=${s!=null?s:""}`);};for(let[s,o]of Object.entries(t))r(o,[s]);return e.join(`
6
+ `)}};var L={file:"package.json",key:"version"},h=class extends l{constructor(t){var s;let e=Object.assign({},L,t),r={type:"json",file:e.file,path:(s=e.path)!=null?s:e.key,createIfNotExists:e.createIfNotExists};super(r);}};({store:new h});process.cwd();var w=(r=>(r[r.major=0]="major",r[r.minor=1]="minor",r[r.patch=2]="patch",r))(w||{}),X={file:"package.json",position:2,key:"version"},d=class{constructor(t){this.opts=Object.assign({},X,t);}get(){return c(this,null,function*(){if(!(yield fsExtra.pathExists(this.opts.file)))throw new Error("get new version,but error: the file is not found");let{[this.opts.key]:t}=yield fsExtra.readJson(this.opts.file);if(!t)throw new Error("get new version, but error: the old version is not found");if(typeof t!="string")throw new Error(`get new version, but error: the old version is not string,old version: ${JSON.stringify(t)}`);let[e,r,s]=t.split(".");return this.opts.position===0?[Number(e)+1,r,s].join("."):this.opts.position===1?[e,Number(r)+1,s].join("."):[e,r,Number(s)+1].join(".")})}};function x(i,t=process.cwd(),e=true){var r;return y__default.default.isAbsolute(i)?i:e?(r=utils.findUp(i,t))!=null?r:y__default.default.resolve(t,i):y__default.default.resolve(t,i)}function W(i,t=process.cwd(),e=true){var s,o,a,u;let r=x(i.file,t,e);if(i.type==="text")return {type:"text",file:r,mode:(s=i.mode)!=null?s:"raw",pattern:i.pattern,replacement:i.replacement,trim:(o=i.trim)!=null?o:true,createIfNotExists:i.createIfNotExists};if(i.type==="custom")throw new Error("cli does not support custom target directly");return {type:i.type,file:r,path:(u=(a=i.path)!=null?a:i.key)!=null?u:"version",createIfNotExists:i.createIfNotExists}}function ge(i,t){return c(this,null,function*(){var n,g,S,V;let e=x(i),r=y__default.default.dirname(e),s=yield fsExtra.readJson(e),o=((n=s.targets)!=null?n:[]).map(G=>W(G,r,false)),a=(g=s.currentTargetIndex)!=null?g:0;if(!s.getter)return {targets:o,currentTargetIndex:a};if(s.getter.type!=="semantic")throw new Error(`unsupported getter type: ${s.getter.type}`);return {getter:new d({file:x(s.getter.file,r,false),key:(S=s.getter.key)!=null?S:"version",position:w[(V=t!=null?t:s.getter.position)!=null?V:"patch"]}),targets:o,currentTargetIndex:a}})}function pe(i,t=0){var s;let e=(s=i.results[t])!=null?s:i.results.find(o=>o.success),r=e&&"value"in e?e.value:"";logger.Logger.log(String(r!=null?r:""));}function le(i){logger.Logger.log(JSON.stringify(i,null,2));}exports.loadVersionCliConfig=ge;exports.printManagerResult=le;exports.printManagerValue=pe;exports.resolveTarget=W;exports.resolveTargetFile=x;
@@ -0,0 +1,6 @@
1
+ import {Logger}from'@tikkhun/logger';import {findUp}from'@tikkhun/utils';import {pathExists,ensureFile,readFile,writeFile,readJson}from'fs-extra';import y from'path';import {XMLParser,XMLBuilder}from'fast-xml-parser';import O from'js-yaml';import {set,get}from'lodash';import {parse,stringify}from'smol-toml';import'@tikkhun/date-version';/**
2
+ @tikkhun/version
3
+ 2026.4.13
4
+ */
5
+ var N=Object.defineProperty,P=Object.defineProperties;var b=Object.getOwnPropertyDescriptors;var E=Object.getOwnPropertySymbols;var k=Object.prototype.hasOwnProperty,M=Object.prototype.propertyIsEnumerable;var T=(i,t,e)=>t in i?N(i,t,{enumerable:true,configurable:true,writable:true,value:e}):i[t]=e,f=(i,t)=>{for(var e in t||(t={}))k.call(t,e)&&T(i,e,t[e]);if(E)for(var e of E(t))M.call(t,e)&&T(i,e,t[e]);return i},m=(i,t)=>P(i,b(t));var c=(i,t,e)=>new Promise((r,s)=>{var o=n=>{try{u(e.next(n));}catch(g){s(g);}},a=n=>{try{u(e.throw(n));}catch(g){s(g);}},u=n=>n.done?r(n.value):Promise.resolve(n.value).then(o,a);u((e=e.apply(i,t)).next());});var l=class{constructor(t){this.target=t;}get(){return c(this,null,function*(){var t;try{if(!(yield pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let e=yield this.loadStructuredConfig(),r=this.target.path?get(e,this.target.path):e;return r===void 0?this.createGetError(`path is not found: ${(t=this.target.path)!=null?t:"<root>"}`):typeof r!="string"&&typeof r!="number"?this.createGetError(`value is not string or number: ${JSON.stringify(r)}`):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(e){return this.createGetError(this.getErrorMessage(e))}})}set(t){return c(this,null,function*(){try{let e=yield this.get(),r=e.success?e.value:void 0,s=yield pathExists(this.target.file);if(!s){if(!this.target.createIfNotExists)return this.createSetError(t,`file is not found: ${this.target.file}`,r,"set");yield ensureFile(this.target.file);}let o=s?yield this.loadStructuredConfig():{};if(this.target.path)set(o,this.target.path,t),yield this.saveStructuredConfig(o);else {if(typeof o=="object"&&o!==null&&!Array.isArray(o))return this.createSetError(t,"path is required for structured target",r,"set");yield this.saveStructuredConfig(t);}return {action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:t}}catch(e){return this.createSetError(t,this.getErrorMessage(e),void 0,"set")}})}update(t){return c(this,null,function*(){let e=yield this.set(t);return m(f({},e),{action:"update"})})}createGetError(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t}}createSetError(t,e,r,s="set"){return {action:s,success:false,file:this.target.file,type:this.target.type,oldValue:r,newValue:t,message:e}}getErrorMessage(t){return t instanceof Error?t.message:String(t)}loadStructuredConfig(){return c(this,null,function*(){var e;let t=yield readFile(this.target.file,(e=this.target.encoding)!=null?e:"utf8");switch(this.target.type){case "json":return JSON.parse(t);case "yaml":return O.load(t);case "toml":return parse(t);case "xml":return new XMLParser({ignoreAttributes:true}).parse(t);case "env":return this.parseEnvContent(t);default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}saveStructuredConfig(t){return c(this,null,function*(){var r;let e=(r=this.target.encoding)!=null?r:"utf8";switch(this.target.type){case "json":yield writeFile(this.target.file,JSON.stringify(t,null,2),e);return;case "yaml":yield writeFile(this.target.file,O.dump(t),e);return;case "toml":yield writeFile(this.target.file,stringify(t),e);return;case "xml":yield writeFile(this.target.file,new XMLBuilder({format:true,ignoreAttributes:true}).build(t),e);return;case "env":yield writeFile(this.target.file,this.stringifyEnvContent(t),e);return;default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}parseEnvContent(t){let e={},r=t.split(/\r?\n/);for(let s of r){let o=s.trim();if(!o||o.startsWith("#"))continue;let a=o.indexOf("=");if(a<0)continue;let u=o.slice(0,a).trim(),n=o.slice(a+1).trim();set(e,u.replace(/__/g,"."),n);}return e}stringifyEnvContent(t){let e=[],r=(s,o)=>{if(s!==null&&typeof s=="object"&&!Array.isArray(s)){for(let[u,n]of Object.entries(s))r(n,[...o,u]);return}let a=o.join("__").toUpperCase();e.push(`${a}=${s!=null?s:""}`);};for(let[s,o]of Object.entries(t))r(o,[s]);return e.join(`
6
+ `)}};var L={file:"package.json",key:"version"},h=class extends l{constructor(t){var s;let e=Object.assign({},L,t),r={type:"json",file:e.file,path:(s=e.path)!=null?s:e.key,createIfNotExists:e.createIfNotExists};super(r);}};({store:new h});process.cwd();var w=(r=>(r[r.major=0]="major",r[r.minor=1]="minor",r[r.patch=2]="patch",r))(w||{}),X={file:"package.json",position:2,key:"version"},d=class{constructor(t){this.opts=Object.assign({},X,t);}get(){return c(this,null,function*(){if(!(yield pathExists(this.opts.file)))throw new Error("get new version,but error: the file is not found");let{[this.opts.key]:t}=yield readJson(this.opts.file);if(!t)throw new Error("get new version, but error: the old version is not found");if(typeof t!="string")throw new Error(`get new version, but error: the old version is not string,old version: ${JSON.stringify(t)}`);let[e,r,s]=t.split(".");return this.opts.position===0?[Number(e)+1,r,s].join("."):this.opts.position===1?[e,Number(r)+1,s].join("."):[e,r,Number(s)+1].join(".")})}};function x(i,t=process.cwd(),e=true){var r;return y.isAbsolute(i)?i:e?(r=findUp(i,t))!=null?r:y.resolve(t,i):y.resolve(t,i)}function W(i,t=process.cwd(),e=true){var s,o,a,u;let r=x(i.file,t,e);if(i.type==="text")return {type:"text",file:r,mode:(s=i.mode)!=null?s:"raw",pattern:i.pattern,replacement:i.replacement,trim:(o=i.trim)!=null?o:true,createIfNotExists:i.createIfNotExists};if(i.type==="custom")throw new Error("cli does not support custom target directly");return {type:i.type,file:r,path:(u=(a=i.path)!=null?a:i.key)!=null?u:"version",createIfNotExists:i.createIfNotExists}}function ge(i,t){return c(this,null,function*(){var n,g,S,V;let e=x(i),r=y.dirname(e),s=yield readJson(e),o=((n=s.targets)!=null?n:[]).map(G=>W(G,r,false)),a=(g=s.currentTargetIndex)!=null?g:0;if(!s.getter)return {targets:o,currentTargetIndex:a};if(s.getter.type!=="semantic")throw new Error(`unsupported getter type: ${s.getter.type}`);return {getter:new d({file:x(s.getter.file,r,false),key:(S=s.getter.key)!=null?S:"version",position:w[(V=t!=null?t:s.getter.position)!=null?V:"patch"]}),targets:o,currentTargetIndex:a}})}function pe(i,t=0){var s;let e=(s=i.results[t])!=null?s:i.results.find(o=>o.success),r=e&&"value"in e?e.value:"";Logger.log(String(r!=null?r:""));}function le(i){Logger.log(JSON.stringify(i,null,2));}export{ge as loadVersionCliConfig,le as printManagerResult,pe as printManagerValue,W as resolveTarget,x as resolveTargetFile};
@@ -1,32 +1,67 @@
1
1
  import { Logger } from '@tikkhun/logger';
2
2
  import { Getter } from './getter/Getter.mjs';
3
- import { Store } from './store/Store.mjs';
3
+ import { Store, VersionTarget, VersionValue } from './store/Store.mjs';
4
+ import { VersionReadResult, VersionSetResult } from './VersionUpdateResult.mjs';
4
5
 
5
6
  /**
6
- * @author
7
- * @file VersionManager.ts
8
- * @fileBase VersionManager
9
- * @path tools\date-version\lib\VersionManager.ts
10
- * @from
11
- * @desc
12
- * @todo
13
- *
14
- *
15
- * @done
16
- * @example
7
+ * @description 版本管理器配置.
17
8
  */
18
-
19
9
  interface VersionManagerOptions {
10
+ /**
11
+ * @description 版本生成器.
12
+ */
20
13
  getter: Getter;
14
+ /**
15
+ * @description 旧版 store 配置. 为兼容保留.
16
+ */
21
17
  store: Store[] | Store;
18
+ /**
19
+ * @description 新版目标配置.
20
+ */
21
+ targets: VersionTarget[];
22
22
  }
23
+ /**
24
+ * @description 默认配置.
25
+ */
23
26
  declare const DEFAULT_VERSION_MANAGER_OPTIONS: VersionManagerOptions;
27
+ /**
28
+ * @description 版本管理器.
29
+ */
24
30
  declare class VersionManager {
31
+ /**
32
+ * @description 版本管理器配置.
33
+ */
25
34
  opts: VersionManagerOptions;
35
+ /**
36
+ * @description 日志实例.
37
+ */
26
38
  logger: Logger;
39
+ /**
40
+ * @description 初始化版本管理器.
41
+ * @param options 部分配置.
42
+ */
27
43
  constructor(options?: Partial<VersionManagerOptions>);
44
+ /**
45
+ * @description 通过 getter 计算新版本值.
46
+ */
28
47
  get(): string | number | Promise<string | number>;
29
- update(): Promise<boolean>;
48
+ /**
49
+ * @description 从 store 读取当前版本值.
50
+ */
51
+ read(): Promise<VersionReadResult>;
52
+ /**
53
+ * @description 把指定版本值写入所有 store.
54
+ * @param value 版本值.
55
+ */
56
+ set(value: VersionValue): Promise<VersionSetResult>;
57
+ /**
58
+ * @description 先用 getter 获取新版本值, 再写入所有 store.
59
+ */
60
+ update(): Promise<VersionSetResult>;
61
+ /**
62
+ * @description 解析最终生效的 store 列表.
63
+ */
64
+ protected resolveStores(): Store[];
30
65
  }
31
66
 
32
67
  export { DEFAULT_VERSION_MANAGER_OPTIONS, VersionManager, type VersionManagerOptions };
@@ -1,32 +1,67 @@
1
1
  import { Logger } from '@tikkhun/logger';
2
2
  import { Getter } from './getter/Getter.js';
3
- import { Store } from './store/Store.js';
3
+ import { Store, VersionTarget, VersionValue } from './store/Store.js';
4
+ import { VersionReadResult, VersionSetResult } from './VersionUpdateResult.js';
4
5
 
5
6
  /**
6
- * @author
7
- * @file VersionManager.ts
8
- * @fileBase VersionManager
9
- * @path tools\date-version\lib\VersionManager.ts
10
- * @from
11
- * @desc
12
- * @todo
13
- *
14
- *
15
- * @done
16
- * @example
7
+ * @description 版本管理器配置.
17
8
  */
18
-
19
9
  interface VersionManagerOptions {
10
+ /**
11
+ * @description 版本生成器.
12
+ */
20
13
  getter: Getter;
14
+ /**
15
+ * @description 旧版 store 配置. 为兼容保留.
16
+ */
21
17
  store: Store[] | Store;
18
+ /**
19
+ * @description 新版目标配置.
20
+ */
21
+ targets: VersionTarget[];
22
22
  }
23
+ /**
24
+ * @description 默认配置.
25
+ */
23
26
  declare const DEFAULT_VERSION_MANAGER_OPTIONS: VersionManagerOptions;
27
+ /**
28
+ * @description 版本管理器.
29
+ */
24
30
  declare class VersionManager {
31
+ /**
32
+ * @description 版本管理器配置.
33
+ */
25
34
  opts: VersionManagerOptions;
35
+ /**
36
+ * @description 日志实例.
37
+ */
26
38
  logger: Logger;
39
+ /**
40
+ * @description 初始化版本管理器.
41
+ * @param options 部分配置.
42
+ */
27
43
  constructor(options?: Partial<VersionManagerOptions>);
44
+ /**
45
+ * @description 通过 getter 计算新版本值.
46
+ */
28
47
  get(): string | number | Promise<string | number>;
29
- update(): Promise<boolean>;
48
+ /**
49
+ * @description 从 store 读取当前版本值.
50
+ */
51
+ read(): Promise<VersionReadResult>;
52
+ /**
53
+ * @description 把指定版本值写入所有 store.
54
+ * @param value 版本值.
55
+ */
56
+ set(value: VersionValue): Promise<VersionSetResult>;
57
+ /**
58
+ * @description 先用 getter 获取新版本值, 再写入所有 store.
59
+ */
60
+ update(): Promise<VersionSetResult>;
61
+ /**
62
+ * @description 解析最终生效的 store 列表.
63
+ */
64
+ protected resolveStores(): Store[];
30
65
  }
31
66
 
32
67
  export { DEFAULT_VERSION_MANAGER_OPTIONS, VersionManager, type VersionManagerOptions };
@@ -1,5 +1,6 @@
1
- 'use strict';var logger=require('@tikkhun/logger'),fsExtra=require('fs-extra'),dateVersion=require('@tikkhun/date-version');/**
1
+ 'use strict';var logger=require('@tikkhun/logger'),fsExtra=require('fs-extra'),fastXmlParser=require('fast-xml-parser'),T=require('js-yaml'),lodash=require('lodash'),smolToml=require('smol-toml'),dateVersion=require('@tikkhun/date-version');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var T__default=/*#__PURE__*/_interopDefault(T);/**
2
2
  @tikkhun/version
3
- 2025.7.7
3
+ 2026.4.13
4
4
  */
5
- var S=Object.defineProperty,y=Object.defineProperties;var w=Object.getOwnPropertyDescriptors;var f=Object.getOwnPropertySymbols;var x=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var l=(e,t,r)=>t in e?S(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r,g=(e,t)=>{for(var r in t||(t={}))x.call(t,r)&&l(e,r,t[r]);if(f)for(var r of f(t))T.call(t,r)&&l(e,r,t[r]);return e},m=(e,t)=>y(e,w(t));var i=(e,t,r)=>new Promise((p,s)=>{var u=o=>{try{a(r.next(o));}catch(c){s(c);}},O=o=>{try{a(r.throw(o));}catch(c){s(c);}},a=o=>o.done?p(o.value):Promise.resolve(o.value).then(u,O);a((r=r.apply(e,t)).next());});var _={file:"package.json",key:"version"},n=class{constructor(t){this.opts=Object.assign({},_,t);}update(t){return i(this,null,function*(){try{let r=yield fsExtra.readJson(this.opts.file);return yield fsExtra.writeJson(this.opts.file,m(g({},r),{[this.opts.key]:t}),{spaces:2}),!0}catch(r){return false}})}};process.cwd();var N={getter:{get(){return dateVersion.getDateVersion()}},store:new n},h=class{constructor(t){this.logger=new logger.Logger("VersionManager");this.opts=Object.assign({},N,t);}get(){return this.opts.getter.get()}update(){return i(this,null,function*(){let t=yield this.get();this.logger.log("new version: "+t);let r=Array.isArray(this.opts.store)?this.opts.store:[this.opts.store];try{if((yield Promise.all(r.map(s=>s.update(t)))).filter(s=>!s).length)throw new Error("update, but error");return !0}catch(p){return false}})}};exports.DEFAULT_VERSION_MANAGER_OPTIONS=N;exports.VersionManager=h;
5
+ var G=Object.defineProperty,M=Object.defineProperties;var A=Object.getOwnPropertyDescriptors;var x=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable;var E=(n,t,e)=>t in n?G(n,t,{enumerable:true,configurable:true,writable:true,value:e}):n[t]=e,u=(n,t)=>{for(var e in t||(t={}))N.call(t,e)&&E(n,e,t[e]);if(x)for(var e of x(t))b.call(t,e)&&E(n,e,t[e]);return n},l=(n,t)=>M(n,A(t));var o=(n,t,e)=>new Promise((r,s)=>{var i=a=>{try{g(e.next(a));}catch(S){s(S);}},c=a=>{try{g(e.throw(a));}catch(S){s(S);}},g=a=>a.done?r(a.value):Promise.resolve(a.value).then(i,c);g((e=e.apply(n,t)).next());});var f=class{constructor(t){this.target=t;}get(){return o(this,null,function*(){var t;try{if(!(yield fsExtra.pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let e=yield this.loadStructuredConfig(),r=this.target.path?lodash.get(e,this.target.path):e;return r===void 0?this.createGetError(`path is not found: ${(t=this.target.path)!=null?t:"<root>"}`):typeof r!="string"&&typeof r!="number"?this.createGetError(`value is not string or number: ${JSON.stringify(r)}`):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(e){return this.createGetError(this.getErrorMessage(e))}})}set(t){return o(this,null,function*(){try{let e=yield this.get(),r=e.success?e.value:void 0,s=yield fsExtra.pathExists(this.target.file);if(!s){if(!this.target.createIfNotExists)return this.createSetError(t,`file is not found: ${this.target.file}`,r,"set");yield fsExtra.ensureFile(this.target.file);}let i=s?yield this.loadStructuredConfig():{};if(this.target.path)lodash.set(i,this.target.path,t),yield this.saveStructuredConfig(i);else {if(typeof i=="object"&&i!==null&&!Array.isArray(i))return this.createSetError(t,"path is required for structured target",r,"set");yield this.saveStructuredConfig(t);}return {action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:t}}catch(e){return this.createSetError(t,this.getErrorMessage(e),void 0,"set")}})}update(t){return o(this,null,function*(){let e=yield this.set(t);return l(u({},e),{action:"update"})})}createGetError(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t}}createSetError(t,e,r,s="set"){return {action:s,success:false,file:this.target.file,type:this.target.type,oldValue:r,newValue:t,message:e}}getErrorMessage(t){return t instanceof Error?t.message:String(t)}loadStructuredConfig(){return o(this,null,function*(){var e;let t=yield fsExtra.readFile(this.target.file,(e=this.target.encoding)!=null?e:"utf8");switch(this.target.type){case "json":return JSON.parse(t);case "yaml":return T__default.default.load(t);case "toml":return smolToml.parse(t);case "xml":return new fastXmlParser.XMLParser({ignoreAttributes:true}).parse(t);case "env":return this.parseEnvContent(t);default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}saveStructuredConfig(t){return o(this,null,function*(){var r;let e=(r=this.target.encoding)!=null?r:"utf8";switch(this.target.type){case "json":yield fsExtra.writeFile(this.target.file,JSON.stringify(t,null,2),e);return;case "yaml":yield fsExtra.writeFile(this.target.file,T__default.default.dump(t),e);return;case "toml":yield fsExtra.writeFile(this.target.file,smolToml.stringify(t),e);return;case "xml":yield fsExtra.writeFile(this.target.file,new fastXmlParser.XMLBuilder({format:true,ignoreAttributes:true}).build(t),e);return;case "env":yield fsExtra.writeFile(this.target.file,this.stringifyEnvContent(t),e);return;default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}parseEnvContent(t){let e={},r=t.split(/\r?\n/);for(let s of r){let i=s.trim();if(!i||i.startsWith("#"))continue;let c=i.indexOf("=");if(c<0)continue;let g=i.slice(0,c).trim(),a=i.slice(c+1).trim();lodash.set(e,g.replace(/__/g,"."),a);}return e}stringifyEnvContent(t){let e=[],r=(s,i)=>{if(s!==null&&typeof s=="object"&&!Array.isArray(s)){for(let[g,a]of Object.entries(s))r(a,[...i,g]);return}let c=i.join("__").toUpperCase();e.push(`${c}=${s!=null?s:""}`);};for(let[s,i]of Object.entries(t))r(i,[s]);return e.join(`
6
+ `)}};var L={file:"package.json",key:"version"},d=class extends f{constructor(t){var s;let e=Object.assign({},L,t),r={type:"json",file:e.file,path:(s=e.path)!=null?s:e.key,createIfNotExists:e.createIfNotExists};super(r);}};var U={file:"",mode:"raw",trim:true,replacement:"{{version}}"},m=class{constructor(t){this.target=u(u({type:"text"},U),t);}get(){return o(this,null,function*(){var t;try{if(!(yield fsExtra.pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let e=yield fsExtra.readFile(this.target.file,(t=this.target.encoding)!=null?t:"utf8"),r=this.resolveValueFromText(e);return r===void 0?this.createGetError("version is not found in text content"):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(e){return this.createGetError(this.getErrorMessage(e))}})}set(t){return o(this,null,function*(){try{let e=yield this.get(),r=e.success?e.value:void 0,s=yield this.createNextText(t);return yield this.writeText(s),{action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:t}}catch(e){return {action:"set",success:false,file:this.target.file,type:this.target.type,newValue:t,message:this.getErrorMessage(e)}}})}update(t){return o(this,null,function*(){let e=yield this.set(t);return l(u({},e),{action:"update"})})}resolveValueFromText(t){var e;if(this.target.mode==="replace"){let s=this.createPattern().exec(t);if(!s)return;let i=(e=s.groups)==null?void 0:e.version;return i!==void 0?i:s[1]!==void 0?s[1]:s[0]}return this.target.trim?t.trim():t}createNextText(t){return o(this,null,function*(){var e,r;if(this.target.mode==="replace"){if(!(yield fsExtra.pathExists(this.target.file)))throw new Error(`file is not found: ${this.target.file}`);let s=yield fsExtra.readFile(this.target.file,(e=this.target.encoding)!=null?e:"utf8");if(!this.createPattern().test(s))throw new Error("pattern is not matched");let c=((r=this.target.replacement)!=null?r:"{{version}}").replaceAll("{{version}}",String(t));return s.replace(this.createPattern(),c)}return String(t)})}writeText(t){return o(this,null,function*(){var e;if(!(yield fsExtra.pathExists(this.target.file))){if(!this.target.createIfNotExists)throw new Error(`file is not found: ${this.target.file}`);yield fsExtra.ensureFile(this.target.file);}yield fsExtra.writeFile(this.target.file,t,(e=this.target.encoding)!=null?e:"utf8");})}createPattern(){if(!this.target.pattern)throw new Error("pattern is required when text mode is replace");return new RegExp(this.target.pattern,this.target.flags)}createGetError(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t}}getErrorMessage(t){return t instanceof Error?t.message:String(t)}};var y=class{static create(t){return t.type==="text"?new m(t):t.type==="custom"?new V(t):new f(t)}},V=class{constructor(t){this.target=t;}get(){return o(this,null,function*(){if(!this.target.get)return {action:"get",success:false,file:this.target.file,type:this.target.type,message:"custom get is not implemented"};try{let t=yield this.target.get(this.target.file);return {action:"get",success:!0,file:this.target.file,type:this.target.type,value:t}}catch(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t instanceof Error?t.message:String(t)}}})}set(t){return o(this,null,function*(){try{let e=yield this.get();return this.target.set?(yield this.target.set(t,this.target.file),{action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:e.success?e.value:void 0,newValue:t}):{action:"set",success:!1,file:this.target.file,type:this.target.type,oldValue:e.success?e.value:void 0,newValue:t,message:"custom set is not implemented"}}catch(e){return {action:"set",success:false,file:this.target.file,type:this.target.type,newValue:t,message:e instanceof Error?e.message:String(e)}}})}update(t){return o(this,null,function*(){let e=yield this.set(t);return l(u({},e),{action:"update"})})}};var p=class{static create(t,e){return {success:t.every(r=>r.success),value:e,results:t}}};var q={getter:{get(){return dateVersion.getDateVersion()}},store:new d,targets:[]},v=class{constructor(t){this.logger=new logger.Logger("VersionManager");this.opts=Object.assign({},q,t);}get(){return this.opts.getter.get()}read(){return o(this,null,function*(){let t=this.resolveStores(),e=[];for(let r of t)e.push(yield r.get());return p.create(e)})}set(t){return o(this,null,function*(){this.logger.log("set version: "+t);let e=this.resolveStores(),r=[];for(let s of e)r.push(yield s.set(t));return p.create(r,t)})}update(){return o(this,null,function*(){let t=yield this.get();this.logger.log("new version: "+t);let e=this.resolveStores(),r=[];for(let s of e)r.push(yield s.update(t));return p.create(r,t)})}resolveStores(){var t;return (t=this.opts.targets)!=null&&t.length?this.opts.targets.map(e=>y.create(e)):Array.isArray(this.opts.store)?this.opts.store:[this.opts.store]}};exports.DEFAULT_VERSION_MANAGER_OPTIONS=q;exports.VersionManager=v;
@@ -1,5 +1,6 @@
1
- import {Logger}from'@tikkhun/logger';import {readJson,writeJson}from'fs-extra';import {getDateVersion}from'@tikkhun/date-version';/**
1
+ import {Logger}from'@tikkhun/logger';import {pathExists,ensureFile,readFile,writeFile}from'fs-extra';import {XMLParser,XMLBuilder}from'fast-xml-parser';import T from'js-yaml';import {set,get}from'lodash';import {parse,stringify}from'smol-toml';import {getDateVersion}from'@tikkhun/date-version';/**
2
2
  @tikkhun/version
3
- 2025.7.7
3
+ 2026.4.13
4
4
  */
5
- var S=Object.defineProperty,y=Object.defineProperties;var w=Object.getOwnPropertyDescriptors;var f=Object.getOwnPropertySymbols;var x=Object.prototype.hasOwnProperty,T=Object.prototype.propertyIsEnumerable;var l=(e,t,r)=>t in e?S(e,t,{enumerable:true,configurable:true,writable:true,value:r}):e[t]=r,g=(e,t)=>{for(var r in t||(t={}))x.call(t,r)&&l(e,r,t[r]);if(f)for(var r of f(t))T.call(t,r)&&l(e,r,t[r]);return e},m=(e,t)=>y(e,w(t));var i=(e,t,r)=>new Promise((p,s)=>{var u=o=>{try{a(r.next(o));}catch(c){s(c);}},O=o=>{try{a(r.throw(o));}catch(c){s(c);}},a=o=>o.done?p(o.value):Promise.resolve(o.value).then(u,O);a((r=r.apply(e,t)).next());});var _={file:"package.json",key:"version"},n=class{constructor(t){this.opts=Object.assign({},_,t);}update(t){return i(this,null,function*(){try{let r=yield readJson(this.opts.file);return yield writeJson(this.opts.file,m(g({},r),{[this.opts.key]:t}),{spaces:2}),!0}catch(r){return false}})}};process.cwd();var N={getter:{get(){return getDateVersion()}},store:new n},h=class{constructor(t){this.logger=new Logger("VersionManager");this.opts=Object.assign({},N,t);}get(){return this.opts.getter.get()}update(){return i(this,null,function*(){let t=yield this.get();this.logger.log("new version: "+t);let r=Array.isArray(this.opts.store)?this.opts.store:[this.opts.store];try{if((yield Promise.all(r.map(s=>s.update(t)))).filter(s=>!s).length)throw new Error("update, but error");return !0}catch(p){return false}})}};export{N as DEFAULT_VERSION_MANAGER_OPTIONS,h as VersionManager};
5
+ var G=Object.defineProperty,M=Object.defineProperties;var A=Object.getOwnPropertyDescriptors;var x=Object.getOwnPropertySymbols;var N=Object.prototype.hasOwnProperty,b=Object.prototype.propertyIsEnumerable;var E=(n,t,e)=>t in n?G(n,t,{enumerable:true,configurable:true,writable:true,value:e}):n[t]=e,u=(n,t)=>{for(var e in t||(t={}))N.call(t,e)&&E(n,e,t[e]);if(x)for(var e of x(t))b.call(t,e)&&E(n,e,t[e]);return n},l=(n,t)=>M(n,A(t));var o=(n,t,e)=>new Promise((r,s)=>{var i=a=>{try{g(e.next(a));}catch(S){s(S);}},c=a=>{try{g(e.throw(a));}catch(S){s(S);}},g=a=>a.done?r(a.value):Promise.resolve(a.value).then(i,c);g((e=e.apply(n,t)).next());});var f=class{constructor(t){this.target=t;}get(){return o(this,null,function*(){var t;try{if(!(yield pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let e=yield this.loadStructuredConfig(),r=this.target.path?get(e,this.target.path):e;return r===void 0?this.createGetError(`path is not found: ${(t=this.target.path)!=null?t:"<root>"}`):typeof r!="string"&&typeof r!="number"?this.createGetError(`value is not string or number: ${JSON.stringify(r)}`):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(e){return this.createGetError(this.getErrorMessage(e))}})}set(t){return o(this,null,function*(){try{let e=yield this.get(),r=e.success?e.value:void 0,s=yield pathExists(this.target.file);if(!s){if(!this.target.createIfNotExists)return this.createSetError(t,`file is not found: ${this.target.file}`,r,"set");yield ensureFile(this.target.file);}let i=s?yield this.loadStructuredConfig():{};if(this.target.path)set(i,this.target.path,t),yield this.saveStructuredConfig(i);else {if(typeof i=="object"&&i!==null&&!Array.isArray(i))return this.createSetError(t,"path is required for structured target",r,"set");yield this.saveStructuredConfig(t);}return {action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:t}}catch(e){return this.createSetError(t,this.getErrorMessage(e),void 0,"set")}})}update(t){return o(this,null,function*(){let e=yield this.set(t);return l(u({},e),{action:"update"})})}createGetError(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t}}createSetError(t,e,r,s="set"){return {action:s,success:false,file:this.target.file,type:this.target.type,oldValue:r,newValue:t,message:e}}getErrorMessage(t){return t instanceof Error?t.message:String(t)}loadStructuredConfig(){return o(this,null,function*(){var e;let t=yield readFile(this.target.file,(e=this.target.encoding)!=null?e:"utf8");switch(this.target.type){case "json":return JSON.parse(t);case "yaml":return T.load(t);case "toml":return parse(t);case "xml":return new XMLParser({ignoreAttributes:true}).parse(t);case "env":return this.parseEnvContent(t);default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}saveStructuredConfig(t){return o(this,null,function*(){var r;let e=(r=this.target.encoding)!=null?r:"utf8";switch(this.target.type){case "json":yield writeFile(this.target.file,JSON.stringify(t,null,2),e);return;case "yaml":yield writeFile(this.target.file,T.dump(t),e);return;case "toml":yield writeFile(this.target.file,stringify(t),e);return;case "xml":yield writeFile(this.target.file,new XMLBuilder({format:true,ignoreAttributes:true}).build(t),e);return;case "env":yield writeFile(this.target.file,this.stringifyEnvContent(t),e);return;default:throw new Error(`unsupported structured target type: ${this.target.type}`)}})}parseEnvContent(t){let e={},r=t.split(/\r?\n/);for(let s of r){let i=s.trim();if(!i||i.startsWith("#"))continue;let c=i.indexOf("=");if(c<0)continue;let g=i.slice(0,c).trim(),a=i.slice(c+1).trim();set(e,g.replace(/__/g,"."),a);}return e}stringifyEnvContent(t){let e=[],r=(s,i)=>{if(s!==null&&typeof s=="object"&&!Array.isArray(s)){for(let[g,a]of Object.entries(s))r(a,[...i,g]);return}let c=i.join("__").toUpperCase();e.push(`${c}=${s!=null?s:""}`);};for(let[s,i]of Object.entries(t))r(i,[s]);return e.join(`
6
+ `)}};var L={file:"package.json",key:"version"},d=class extends f{constructor(t){var s;let e=Object.assign({},L,t),r={type:"json",file:e.file,path:(s=e.path)!=null?s:e.key,createIfNotExists:e.createIfNotExists};super(r);}};var U={file:"",mode:"raw",trim:true,replacement:"{{version}}"},m=class{constructor(t){this.target=u(u({type:"text"},U),t);}get(){return o(this,null,function*(){var t;try{if(!(yield pathExists(this.target.file)))return this.createGetError(`file is not found: ${this.target.file}`);let e=yield readFile(this.target.file,(t=this.target.encoding)!=null?t:"utf8"),r=this.resolveValueFromText(e);return r===void 0?this.createGetError("version is not found in text content"):{action:"get",success:!0,file:this.target.file,type:this.target.type,value:r}}catch(e){return this.createGetError(this.getErrorMessage(e))}})}set(t){return o(this,null,function*(){try{let e=yield this.get(),r=e.success?e.value:void 0,s=yield this.createNextText(t);return yield this.writeText(s),{action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:r,newValue:t}}catch(e){return {action:"set",success:false,file:this.target.file,type:this.target.type,newValue:t,message:this.getErrorMessage(e)}}})}update(t){return o(this,null,function*(){let e=yield this.set(t);return l(u({},e),{action:"update"})})}resolveValueFromText(t){var e;if(this.target.mode==="replace"){let s=this.createPattern().exec(t);if(!s)return;let i=(e=s.groups)==null?void 0:e.version;return i!==void 0?i:s[1]!==void 0?s[1]:s[0]}return this.target.trim?t.trim():t}createNextText(t){return o(this,null,function*(){var e,r;if(this.target.mode==="replace"){if(!(yield pathExists(this.target.file)))throw new Error(`file is not found: ${this.target.file}`);let s=yield readFile(this.target.file,(e=this.target.encoding)!=null?e:"utf8");if(!this.createPattern().test(s))throw new Error("pattern is not matched");let c=((r=this.target.replacement)!=null?r:"{{version}}").replaceAll("{{version}}",String(t));return s.replace(this.createPattern(),c)}return String(t)})}writeText(t){return o(this,null,function*(){var e;if(!(yield pathExists(this.target.file))){if(!this.target.createIfNotExists)throw new Error(`file is not found: ${this.target.file}`);yield ensureFile(this.target.file);}yield writeFile(this.target.file,t,(e=this.target.encoding)!=null?e:"utf8");})}createPattern(){if(!this.target.pattern)throw new Error("pattern is required when text mode is replace");return new RegExp(this.target.pattern,this.target.flags)}createGetError(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t}}getErrorMessage(t){return t instanceof Error?t.message:String(t)}};var y=class{static create(t){return t.type==="text"?new m(t):t.type==="custom"?new V(t):new f(t)}},V=class{constructor(t){this.target=t;}get(){return o(this,null,function*(){if(!this.target.get)return {action:"get",success:false,file:this.target.file,type:this.target.type,message:"custom get is not implemented"};try{let t=yield this.target.get(this.target.file);return {action:"get",success:!0,file:this.target.file,type:this.target.type,value:t}}catch(t){return {action:"get",success:false,file:this.target.file,type:this.target.type,message:t instanceof Error?t.message:String(t)}}})}set(t){return o(this,null,function*(){try{let e=yield this.get();return this.target.set?(yield this.target.set(t,this.target.file),{action:"set",success:!0,file:this.target.file,type:this.target.type,oldValue:e.success?e.value:void 0,newValue:t}):{action:"set",success:!1,file:this.target.file,type:this.target.type,oldValue:e.success?e.value:void 0,newValue:t,message:"custom set is not implemented"}}catch(e){return {action:"set",success:false,file:this.target.file,type:this.target.type,newValue:t,message:e instanceof Error?e.message:String(e)}}})}update(t){return o(this,null,function*(){let e=yield this.set(t);return l(u({},e),{action:"update"})})}};var p=class{static create(t,e){return {success:t.every(r=>r.success),value:e,results:t}}};var q={getter:{get(){return getDateVersion()}},store:new d,targets:[]},v=class{constructor(t){this.logger=new Logger("VersionManager");this.opts=Object.assign({},q,t);}get(){return this.opts.getter.get()}read(){return o(this,null,function*(){let t=this.resolveStores(),e=[];for(let r of t)e.push(yield r.get());return p.create(e)})}set(t){return o(this,null,function*(){this.logger.log("set version: "+t);let e=this.resolveStores(),r=[];for(let s of e)r.push(yield s.set(t));return p.create(r,t)})}update(){return o(this,null,function*(){let t=yield this.get();this.logger.log("new version: "+t);let e=this.resolveStores(),r=[];for(let s of e)r.push(yield s.update(t));return p.create(r,t)})}resolveStores(){var t;return (t=this.opts.targets)!=null&&t.length?this.opts.targets.map(e=>y.create(e)):Array.isArray(this.opts.store)?this.opts.store:[this.opts.store]}};export{q as DEFAULT_VERSION_MANAGER_OPTIONS,v as VersionManager};