@qlover/scripts-context 2.3.3 → 2.3.6
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.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});
|
package/dist/index.js
CHANGED
|
@@ -481,10 +481,7 @@ var ConfigSearch = class {
|
|
|
481
481
|
};
|
|
482
482
|
|
|
483
483
|
// src/implement/ScriptContext.ts
|
|
484
|
-
import { merge as
|
|
485
|
-
|
|
486
|
-
// ../fe-corekit/src/aborter/Aborter.ts
|
|
487
|
-
import { isString } from "lodash-es";
|
|
484
|
+
import { merge as merge3, get as get2 } from "lodash-es";
|
|
488
485
|
|
|
489
486
|
// ../fe-corekit/src/executor/impl/ExecutorContextImpl.ts
|
|
490
487
|
var runtimesStorage = /* @__PURE__ */ new WeakMap();
|
|
@@ -856,20 +853,8 @@ var ExecutorContextImpl = class {
|
|
|
856
853
|
}
|
|
857
854
|
};
|
|
858
855
|
|
|
859
|
-
// ../fe-corekit/src/request/adapter/RequestAdapterFetch.ts
|
|
860
|
-
import { merge, pick } from "lodash-es";
|
|
861
|
-
|
|
862
|
-
// ../fe-corekit/src/request/impl/RequestExecutor.ts
|
|
863
|
-
import { clone } from "lodash-es";
|
|
864
|
-
|
|
865
|
-
// ../fe-corekit/src/request/impl/RequestPlugin.ts
|
|
866
|
-
import { clone as clone2 } from "lodash-es";
|
|
867
|
-
|
|
868
|
-
// ../fe-corekit/src/request/impl/ResponsePlugin.ts
|
|
869
|
-
import { isFunction } from "lodash-es";
|
|
870
|
-
|
|
871
856
|
// src/utils/initializeOptions.ts
|
|
872
|
-
import { merge
|
|
857
|
+
import { merge, get } from "lodash-es";
|
|
873
858
|
import { Env } from "@qlover/env-loader";
|
|
874
859
|
var DEFAULT_ENV_ORDER = [".env.local", ".env"];
|
|
875
860
|
function getDefaultOptions(options, feConfig, logger) {
|
|
@@ -900,7 +885,7 @@ function getDefaultStore(scriptName, sources, logger) {
|
|
|
900
885
|
}
|
|
901
886
|
function initializeOptions(scriptName, feConfig, options, logger) {
|
|
902
887
|
const store = getDefaultStore(scriptName, feConfig, logger);
|
|
903
|
-
const mergedOptions =
|
|
888
|
+
const mergedOptions = merge({}, store, options);
|
|
904
889
|
const defaultOptions = getDefaultOptions(
|
|
905
890
|
mergedOptions,
|
|
906
891
|
feConfig,
|
|
@@ -911,7 +896,7 @@ function initializeOptions(scriptName, feConfig, options, logger) {
|
|
|
911
896
|
|
|
912
897
|
// src/utils/contextDefaults.ts
|
|
913
898
|
import { exec } from "child_process";
|
|
914
|
-
import { merge as
|
|
899
|
+
import { merge as merge2 } from "lodash-es";
|
|
915
900
|
|
|
916
901
|
// ../logger/src/interface/LogEvent.ts
|
|
917
902
|
var LogEvent = class {
|
|
@@ -2427,7 +2412,7 @@ var contextDefaults = {
|
|
|
2427
2412
|
getConfig(feConfig) {
|
|
2428
2413
|
return new ConfigSearch({
|
|
2429
2414
|
name: "fe-config",
|
|
2430
|
-
defaultConfig:
|
|
2415
|
+
defaultConfig: merge2({}, defaultFeConfig, feConfig)
|
|
2431
2416
|
});
|
|
2432
2417
|
},
|
|
2433
2418
|
/**
|
|
@@ -2546,7 +2531,7 @@ var contextDefaults = {
|
|
|
2546
2531
|
dryRun,
|
|
2547
2532
|
execPromise: _options.execPromise || contextDefaults.exec
|
|
2548
2533
|
});
|
|
2549
|
-
const _feConfig =
|
|
2534
|
+
const _feConfig = merge2({}, feConfig, { [name]: ctxOpts.options });
|
|
2550
2535
|
return {
|
|
2551
2536
|
options: _options,
|
|
2552
2537
|
dryRun: !!dryRun,
|
|
@@ -2770,7 +2755,7 @@ var ScriptContext = class extends ExecutorContextImpl {
|
|
|
2770
2755
|
*
|
|
2771
2756
|
*/
|
|
2772
2757
|
setParameters(params) {
|
|
2773
|
-
super.setParameters(
|
|
2758
|
+
super.setParameters(merge3(this.parameters, params));
|
|
2774
2759
|
}
|
|
2775
2760
|
/**
|
|
2776
2761
|
* Retrieves environment variable with optional default value
|
|
@@ -2882,7 +2867,7 @@ var ScriptContext = class extends ExecutorContextImpl {
|
|
|
2882
2867
|
};
|
|
2883
2868
|
|
|
2884
2869
|
// src/implement/ScriptPlugin.ts
|
|
2885
|
-
import { merge as
|
|
2870
|
+
import { merge as merge4 } from "lodash-es";
|
|
2886
2871
|
var ScriptPlugin = class {
|
|
2887
2872
|
/**
|
|
2888
2873
|
* Creates a new script plugin instance
|
|
@@ -2946,7 +2931,7 @@ var ScriptPlugin = class {
|
|
|
2946
2931
|
const pluginConfig = this.context.options[this.pluginName];
|
|
2947
2932
|
const fileConfig = this.context.getParameters(this.pluginName);
|
|
2948
2933
|
const baseConfig = pluginConfig || fileConfig;
|
|
2949
|
-
return props ?
|
|
2934
|
+
return props ? merge4({}, baseConfig, props) : baseConfig || {};
|
|
2950
2935
|
}
|
|
2951
2936
|
/**
|
|
2952
2937
|
* Logger instance for structured logging
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qlover/scripts-context",
|
|
3
3
|
"description": "A scripts context for frontwork",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.6",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"private": false,
|
|
7
7
|
"homepage": "https://github.com/qlover/fe-base/tree/master/packages/scripts-context#readme",
|
|
@@ -43,14 +43,14 @@
|
|
|
43
43
|
"@commitlint/types": "^19.8.0",
|
|
44
44
|
"@types/lodash-es": "^4.17.12",
|
|
45
45
|
"@types/shelljs": "^0.8.15",
|
|
46
|
-
"@qlover/fe-corekit": "3.
|
|
47
|
-
"@qlover/logger": "1.2.
|
|
46
|
+
"@qlover/fe-corekit": "3.4.9",
|
|
47
|
+
"@qlover/logger": "1.2.3"
|
|
48
48
|
},
|
|
49
49
|
"dependencies": {
|
|
50
|
-
"chalk": "^5.
|
|
51
|
-
"cosmiconfig": "^9.0.
|
|
52
|
-
"lodash-es": "^4.
|
|
53
|
-
"@qlover/env-loader": "1.
|
|
50
|
+
"chalk": "^5.6.2",
|
|
51
|
+
"cosmiconfig": "^9.0.2",
|
|
52
|
+
"lodash-es": "^4.18.1",
|
|
53
|
+
"@qlover/env-loader": "1.1.3"
|
|
54
54
|
},
|
|
55
55
|
"scripts": {
|
|
56
56
|
"lint": "eslint src --fix",
|