@tianyio/quality-helper
Version:
A comprehensive quality helper tool for project scaffolding and management
3 lines (2 loc) • 3.87 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("fs/promises"),e=require("child_process");class n{static execCommand(t){try{return{success:!0,output:e.execSync(t,{stdio:"pipe",encoding:"utf8",timeout:5e3}).toString().trim()}}catch(n){return{success:!1,output:"",error:n instanceof Error?n.message:"Unknown error"}}}static getAllGitInfo(){return Object.entries({commitHash:"git rev-parse HEAD",commitShort:"git rev-parse --short HEAD",branch:"git rev-parse --abbrev-ref HEAD",tag:'git describe --tags --exact-match 2>/dev/null || echo ""',commitCount:"git rev-list --count HEAD",commitDate:"git log -1 --format=%ci",commitMessage:"git log -1 --format=%s",author:"git log -1 --format=%an",email:"git log -1 --format=%ae",dirty:"git diff --quiet; echo $?"}).reduce((t,[e,n])=>{const i=this.execCommand(n);return t[e]=i.success?i.output:"",t},{})}}const i=(t,e)=>String(t).padStart(e,"0"),o=t=>`${t.getFullYear()}-${i(t.getMonth()+1,2)}-${i(t.getDate(),2)} ${i(t.getHours(),2)}:${i(t.getMinutes(),2)}:${i(t.getSeconds(),2)}.${i(t.getMilliseconds(),3)}`;class r{static async generateVersionInfo(t={}){const{includeGitInfo:e=!0,includeBuildTime:i=!0,timeFormatter:r=o}=t,s={};if(i){const t=new Date;s.buildTime=r(t),s.buildTimestamp=t.getTime()}return e&&Object.assign(s,n.getAllGitInfo()),s}static async getPackageInfo(e){try{const n=`${e}/package.json`,i=await t.readFile(n,"utf-8"),o=JSON.parse(i);return{name:o.name,version:o.version}}catch(n){const t=n instanceof Error?n.message:"Unknown error";throw new Error(`无法读取 package.json: ${t}`)}}}class s{needPrint;constructor(t){this.needPrint=t}info(t){this.needPrint&&console.log(t)}warn(t){this.needPrint&&console.warn(t)}error(t){this.needPrint&&console.error(t)}}exports.versionInfoPlugin=function(t={}){const e="virtual:version-info",n=new s("development"===process.env.NODE_ENV);let i={};const o=`\0${e}`;return{name:"version-info",async configResolved(e){try{try{await r.getPackageInfo(e.root)}catch(o){const t=o instanceof Error?o.message:"Unknown error";n.warn(`⚠️ ${t}`)}i={...await r.generateVersionInfo(t)},n.info("\n📦 版本信息:"),n.info(` 项目名称: ${i.name??"未知"}`),n.info(` 版本号: ${i.version??"未知"}`),n.info(` 构建时间: ${i.buildTime}`),n.info(` Git 分支: ${i.gitBranch}`),n.info(` Git 提交: ${i.gitCommitShort}`),n.info(` Git 标签: ${i.gitTag}`),n.info("")}catch(o){const t=o instanceof Error?o.message:"Unknown error";n.error(`⚠️ 版本信息生成失败: ${t}`),i={}}},resolveId:t=>t===e?o:null,load:t=>t===o?`\n // 版本信息虚拟模块\n // 由 @tcsl/quality-helper 自动生成\n\n export const versionInfo = ${JSON.stringify(i,null,2)}\n\n // 导出各个字段以便按需使用\n export const name = ${JSON.stringify(i.name)}\n export const version = ${JSON.stringify(i.version)}\n export const buildTime = ${JSON.stringify(i.buildTime)}\n export const buildTimestamp = ${JSON.stringify(i.buildTimestamp)}\n export const gitCommitHash = ${JSON.stringify(i.gitCommitHash)}\n export const gitCommitShort = ${JSON.stringify(i.gitCommitShort)}\n export const gitBranch = ${JSON.stringify(i.gitBranch)}\n export const gitTag = ${JSON.stringify(i.gitTag)}\n export const gitCommitCount = ${JSON.stringify(i.gitCommitCount)}\n export const gitCommitDate = ${JSON.stringify(i.gitCommitDate)}\n export const gitCommitMessage = ${JSON.stringify(i.gitCommitMessage)}\n export const gitAuthor = ${JSON.stringify(i.gitAuthor)}\n export const gitEmail = ${JSON.stringify(i.gitEmail)}\n export const gitDirty = ${JSON.stringify(i.gitDirty)}\n\n // 默认导出完整的版本信息\n export default versionInfo\n `:null}};
//# sourceMappingURL=version-plugin.js.map