@qlover/scripts-context 2.3.2 → 2.3.4
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.
- package/dist/index.cjs +2 -2
- package/dist/index.d.ts +1687 -4753
- package/dist/index.js +9 -24
- package/package.json +7 -7
package/dist/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var J=Object.create;var C=Object.defineProperty;var W=Object.getOwnPropertyDescriptor;var Z=Object.getOwnPropertyNames;var Y=Object.getPrototypeOf,Q=Object.prototype.hasOwnProperty;var X=(n,e)=>{for(var t in e)C(n,t,{get:e[t],enumerable:!0})},N=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Z(e))!Q.call(n,o)&&o!==t&&C(n,o,{get:()=>e[o],enumerable:!(r=W(e,o))||r.enumerable});return n};var ee=(n,e,t)=>(t=n!=null?J(Y(n)):{},N(e||!n||!n.__esModule?C(t,"default",{value:n,enumerable:!0}):t,n)),te=n=>N(C({},"__esModule",{value:!0}),n);var he={};X(he,{ColorFormatter:()=>L,ConfigSearch:()=>d,ScriptContext:()=>$,ScriptPlugin:()=>H,Shell:()=>b,TemplateEngine:()=>x,defaultFeConfig:()=>_,interpolatePreset:()=>q});module.exports=te(he);var _={protectedBranches:["master","develop","main"],cleanFiles:["dist","node_modules","yarn.lock","package-lock.json",".eslintcache","*.log"],commitlint:{extends:["@commitlint/config-conventional"]},envOrder:[".env.local",".env.production",".env"]};var m=ee(require("chalk"),1),L=class{constructor(e={fatal:m.default.bgRed.white.bold,error:m.default.red.bold,warn:m.default.yellow.bold,info:m.default.blue,debug:m.default.green,trace:m.default.gray,log:m.default.white}){this.levelColors=e}levelColors;format(e){let{level:t,args:r}=e,o=this.levelColors[t]||m.default.white;return[typeof o=="function"?o(t.toUpperCase()):t.toUpperCase(),...r]}};var j=require("cosmiconfig"),w=require("lodash-es");function re(n){let e=["json","js","ts","cjs","yaml","yml"];return["package.json",...e.map(t=>`${n}.${t}`),...e.map(t=>`.${n}.${t}`)]}var d=class{name;searchPlaces;_config;loaders;searchCache;constructor(e){let{name:t,searchPlaces:r,defaultConfig:o,loaders:i}=e;if(!t&&!r)throw new Error("searchPlaces or name is required");this.name=t,this.searchPlaces=r||re(t),this._config=o||{},this.loaders=i}get config(){return(0,w.defaultsDeep)({},this.search(),this._config)}getSearchPlaces(){return this.searchPlaces}get(e={}){let{file:t,dir:r=process.cwd()}=e,o={};if(t===!1)return o;let i=(0,j.cosmiconfigSync)(this.name,{searchPlaces:this.searchPlaces,loaders:this.loaders}),s=t?i.load(t):i.search(r);if(s&&typeof s.config=="string")throw new Error(`Invalid configuration file at ${s.filepath}`);return s&&(0,w.isPlainObject)(s.config)?s.config:o}search(){return this.searchCache?this.searchCache:this.searchCache=this.get({})}};var R=require("lodash-es");var f=new WeakMap,k=class{_parameters;_error;_returnValue;constructor(e){this._parameters=e,f.set(this,{pluginName:"",pluginIndex:void 0,hookName:"",returnValue:void 0,returnBreakChain:!1,times:0,breakChain:!1})}get parameters(){return this._parameters}get error(){return this._error}get returnValue(){return this._returnValue}get hooksRuntimes(){let e=f.get(this);if(!e)throw new Error("Runtime state not initialized");return Object.freeze({...e})}setError(e){this._error=e}setReturnValue(e){this._returnValue=e}setParameters(e){this._parameters=e}resetHooksRuntimes(e){let t=f.get(this);if(!t)throw new Error("Runtime state not initialized");if(e){f.set(this,{...t,hookName:e,times:0,returnValue:void 0});return}f.set(this,{pluginName:"",pluginIndex:void 0,hookName:"",returnValue:void 0,returnBreakChain:!1,times:0,breakChain:!1})}reset(){this.resetHooksRuntimes(),this._returnValue=void 0,this._error=void 0}shouldSkipPluginHook(e,t){return typeof e[t]!="function"||typeof e.enabled=="function"&&!e.enabled(t,this)}runtimes(e){let t=f.get(this);if(!t)throw new Error("Runtime state not initialized");f.set(this,{...t,...e})}runtimeReturnValue(e){let t=f.get(this);if(!t)throw new Error("Runtime state not initialized");f.set(this,{...t,returnValue:e})}shouldBreakChain(){return!!f.get(this)?.breakChain}shouldBreakChainOnReturn(){return!!f.get(this)?.returnBreakChain}shouldContinueOnError(){return!!f.get(this)?.continueOnError}};var v=require("lodash-es"),D=require("@qlover/env-loader"),ne=[".env.local",".env"];function oe(n,e,t){let r=n.env||D.Env.searchEnv({logger:t,preloadList:e.envOrder||ne}),o=n.rootPath||process.cwd(),i=n.sourceBranch||r?.get("FE_RELEASE_BRANCH")||r?.get("FE_RELEASE_SOURCE_BRANCH")||"master";return{...n,sourceBranch:i,rootPath:o,env:r}}function ie(n,e,t){let r=n?(0,v.get)(e,n):e,o=typeof r=="object"&&r!==null,i=o?r:{};return o||t.warn(`rootProp ${n} is not an object, it will be overwritten by the default options`),i}function B(n,e,t,r){let o=ie(n,e,r),i=(0,v.merge)({},o,t);return oe(i,e,r)}var G=require("child_process");var F=require("lodash-es");var S=class{constructor(e,t,r,o){this.level=e;this.args=t;this.loggerName=r;this.context=o;this.timestamp=Date.now()}level;args;loggerName;context;timestamp};var h=class{constructor(e){this.value=e}value};var se={fatal:0,error:10,warn:20,info:30,debug:40,trace:50,log:60},P=class{constructor(e={}){this.options=e;e.name=e.name||Date.now().toString(),e.levels=e.levels||se,e.handlers=Array.isArray(e.handlers)?e.handlers:e.handlers?[e.handlers]:[]}options;addAppender(e){this.options.handlers.push(e)}context(e){return new h(e)}print(e,t){let{levels:r,level:o,silent:i,handlers:s}=this.options;if(i)return;let c=t.slice(-1)[0],l=t.length>1&&c instanceof h;if(c=l?c:void 0,t=l?t.slice(0,-1):t,e=c?.value?.level??e,o&&r){let p=r[o],g=r[e];if(p!=null&&g!=null&&g>p)return}let a=new S(e,t,this.options.name,c),u=Array.isArray(s)?s:[s];for(let p of u)p&&p.append(a)}log(...e){this.print("info",e)}fatal(...e){this.print("fatal",e)}error(...e){this.print("error",e)}warn(...e){this.print("warn",e)}info(...e){this.print("info",e)}debug(...e){this.print("debug",e)}trace(...e){this.print("trace",e)}};var E=class{constructor(e=null){this.formatter=e}formatter;setFormatter(e){this.formatter=e}append(e){let{level:t,args:r,loggerName:o}=e,i=this.formatter?this.formatter.format(e):[o?`[${o}]`:null,...r].filter(s=>s!=null);(console[t]||console.log)(...Array.isArray(i)?i:[i])}};var ae={hour:"2-digit",minute:"2-digit",second:"2-digit",hour12:!1,timeZone:"UTC"},ce="[{loggerName}] [{formattedTimestamp} {level}]",O=class{constructor(e={}){this.options=e}options;updateOptions(e){this.options={...this.options,...e}}replacePrefix(e,t){return e.replace(/\{([^{}]+)\}/g,(r,o)=>o in t?String(t[o]??""):"")}format({timestamp:e,level:t,args:r,context:o,loggerName:i}){let{locale:s="zh-CN",localeOptions:c,prefixTemplate:l=ce}=this.options,a=o?.formatType??"datetime",u=a==="date"?"toLocaleDateString":a==="time"?"toLocaleTimeString":"toLocaleString",p=new Date(e)[u](s,{...ae,...c});return[this.replacePrefix(l,{...o,timestamp:e.toString(),level:t,loggerName:i,formattedTimestamp:p,locale:s}),...r]}};var q={ES6:/\$\{([\s\S]+?)\}/g,LODASH:/<%=([\s\S]+?)%>/g,MUSTACHE:/\{\{([\s\S]+?)\}\}/g},le=new Set(["__proto__","constructor","prototype","__defineGetter__","__defineSetter__","__lookupGetter__","__lookupSetter__"]),pe=/^[\w.[\]]+$/,ue=/^(\d+|\w+)$/;function M(n){let e=n.flags.includes("g")?n.flags:`${n.flags}g`;return new RegExp(n.source,e)}function fe(n){return n.replace(/\[(\d+)\]/g,".$1")}function ge(n,e){let t=n.trim();if(!t||!pe.test(t))return null;let r=t;if(e){if(r===e)return[];let i=`${e}.`;if(!r.startsWith(i)||(r=r.slice(i.length),!r))return null}let o=fe(r).split(".");return o.length===0||o.some(i=>!i||!ue.test(i))?null:o}function U(n){return n.replace(/[&<>"']/g,e=>{switch(e){case"&":return"&";case"<":return"<";case">":return">";case'"':return""";case"'":return"'";default:return e}})}function z(n,e){return n==null?"":typeof n=="object"&&e?JSON.stringify(n):String(n)}function me(n,e,t){if(e===null)return;if(e.length===0)return n;let r=n;for(let o of e){if(t&&le.has(o)||r===null||typeof r!="object")return;let i=r;if(t){if(!Object.hasOwn(i,o))return}else if(!(o in i))return;r=i[o]}return r}function de(n,e){let t=[],r=M(e),o=0,i;for(;(i=r.exec(n))!==null;){if(i[0].length===0){r.lastIndex+=1;continue}i.index>o&&t.push(n.slice(o,i.index));let s=i[1]?.trim()??"";t.push({type:"variable",path:s,raw:i[0],keys:null}),o=r.lastIndex}return o<n.length&&t.push(n.slice(o)),t}var x=class{options;constructor(e={}){let t={interpolate:q.ES6,variable:"",defaultValue:"",escapeHtml:!1,stringifyObject:!0,keepUnmatched:!1,safePrototype:!0};this.options={...t,...e,interpolate:M(e.interpolate??t.interpolate)}}compile(e){if(typeof e!="string")throw new TypeError("Template must be a string");let{variable:t,defaultValue:r,escapeHtml:o,stringifyObject:i,keepUnmatched:s,safePrototype:c}=this.options,l=de(e,this.options.interpolate).map(a=>typeof a=="string"?a:{...a,keys:ge(a.path,t)});return a=>{let u=a!==null&&typeof a=="object"?a:{},p=[];for(let g of l){if(typeof g=="string"){p.push(g);continue}let I=me(u,g.keys,c);if(I==null){if(s){p.push(g.raw);continue}let A=r;typeof r=="function"&&(A=r(g.path,u));let V=z(A,i);p.push(o?U(V):V);continue}let T=z(I,i);o&&(T=U(T)),p.push(T)}return p.join("")}}render(e,t){return this.compile(e)(t)}};var b=class n{constructor(e,t=new Map){this.config=e;this.cache=t}config;cache;static templateEngine=new x;get logger(){return this.config.logger}static format(e="",t={}){let r=t!==null&&typeof t=="object"?t:{};return n.templateEngine.render(e,r)}format(e="",t={}){try{return n.format(e,t)}catch(r){throw this.logger.error(`Unable to render template with context:
|
|
2
2
|
${e}
|
|
3
|
-
${JSON.stringify(t)}`),this.logger.error(r),r}}exec(e,t={}){let{context:r,...o}=t;return typeof e=="string"?this.execFormattedCommand(this.format(e,r||{}),o):this.execFormattedCommand(e,o)}run(e,t={}){return this.exec(e,{silent:!0,...t})}async execFormattedCommand(e,t={}){let r=this.config.execPromise;if(!r)throw new Error("execPromise is not defined");let{dryRunResult:o,silent:
|
|
3
|
+
${JSON.stringify(t)}`),this.logger.error(r),r}}exec(e,t={}){let{context:r,...o}=t;return typeof e=="string"?this.execFormattedCommand(this.format(e,r||{}),o):this.execFormattedCommand(e,o)}run(e,t={}){return this.exec(e,{silent:!0,...t})}async execFormattedCommand(e,t={}){let r=this.config.execPromise;if(!r)throw new Error("execPromise is not defined");let{dryRunResult:o,silent:i,dryRun:s,isCache:c}=t,l=s!==void 0?s:this.config.dryRun,a=c!==void 0?!!c:!!this.config.isCache,u=typeof e=="string"?e:e.join(" "),p=a&&this.cache.has(u);if(i||this.logger.debug(e),l)return Promise.resolve(o);if(p)return this.cache.get(u);let g=r(e,t);return this.cache.has(u)||this.cache.set(u,g),g}};var y={exec(n,e){let t=Array.isArray(n)?n.join(" "):n;return new Promise((r,o)=>{(0,G.exec)(t,{encoding:"utf-8",...e},(i,s,c)=>{let l;i?i.code===void 0?l=1:l=i.code:l=0,l===0?r(s.trim()):o(new Error(c||s))})})},getConfig(n){return new d({name:"fe-config",defaultConfig:(0,F.merge)({},_,n)})},logger(n,e){return new P({level:e?"debug":"info",name:n,handlers:new E(new O({prefixTemplate:"[{loggerName} {formattedTimestamp} {level}]",localeOptions:{timeZone:"Asia/Shanghai"}}))})},options(n,e){let{logger:t,shell:r,feConfig:o,dryRun:i,verbose:s,options:c}=e,l=c||{},a=t||y.logger(n,!!s),u=r||new b({logger:a,dryRun:i,execPromise:l.execPromise||y.exec}),p=(0,F.merge)({},o,{[n]:e.options});return{options:l,dryRun:!!i,shell:u,logger:a,verbose:!!s,feConfig:y.getConfig(p).config}}};var $=class extends k{constructor(t,r={}){if(!t||typeof t!="string")throw new Error("ScriptContext name is required");let{feConfig:o,logger:i,shell:s,dryRun:c,verbose:l,options:a}=y.options(t,r);super(a);this.name=t;this.feConfig=o,this.logger=i,this.shell=s,this.dryRun=c,this.verbose=l,this.setParameters(B(t,o,a,i))}name;logger;shell;feConfig;dryRun;verbose;get options(){return this.parameters}get env(){if(!this.parameters.env)throw new Error("Environment is not initialized");return this.parameters.env}setParameters(t){super.setParameters((0,R.merge)(this.parameters,t))}getEnv(t,r){return this.env.get(t)??r}getParameters(t,r){return t?(0,R.get)(this.parameters,t,r):this.parameters}};var K=require("lodash-es"),H=class{constructor(e,t,r={}){this.context=e;this.pluginName=t;this.props=r;this.setConfig(this.getInitialProps(r))}context;pluginName;props;onlyOne=!0;getInitialProps(e){if(typeof this.context.options!="object")return{};let t=this.context.options[this.pluginName],r=this.context.getParameters(this.pluginName),o=t||r;return e?(0,K.merge)({},o,e):o||{}}get logger(){return this.context.logger}get shell(){return this.context.shell}get config(){return this.context.getParameters(this.pluginName,{})}enabled(e,t){let r=this.getConfig("skip");return typeof r=="string"&&e===r?(this.logger.debug(`Skip ${this.pluginName}.${e}, ${this.pluginName}.skip is set to '${r}'`),!1):r===!0?(this.logger.debug(`Skip ${this.pluginName}.${e}, ${this.pluginName}.skip is set to true`),!1):!0}getConfig(e,t){return e?this.context.getParameters([this.pluginName,...Array.isArray(e)?e:[e]],t):this.context.getParameters(this.pluginName,t)}setConfig(e){this.context.setParameters({[this.pluginName]:e})}async step(e){let t=this.createStepLabel(e.label);this.logger.info(`${t} - beginning`);try{let r=await e.task();return this.logger.info(`${t} - success`),r}catch(r){throw this.logger.error(`${t} - failed
|
|
4
4
|
`,r),r}}createStepLabel(e){let t=`${this.pluginName}: ${e}`;return this.context.dryRun?`[dry-run] ${t}`:t}};0&&(module.exports={ColorFormatter,ConfigSearch,ScriptContext,ScriptPlugin,Shell,TemplateEngine,defaultFeConfig,interpolatePreset});
|