zeed 0.9.2 → 0.9.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.
@@ -1,5 +1,5 @@
1
- import { J as Json, O as ObjectStorage, L as LogHandlerOptions, d8 as LogMessage, a as LogHandler } from './uuid-c2cc7aa0.js';
2
- export { dK as ArgumentsType, cC as AsyncMutex, cX as AsyncReturnType, _ as BinInput, d as CRYPTO_DEFAULT_ALG, e as CRYPTO_DEFAULT_DERIVE_ALG, f as CRYPTO_DEFAULT_DERIVE_ITERATIONS, C as CRYPTO_DEFAULT_HASH_ALG, di as Channel, dh as ChannelMessageEvent, dx as CryptoEncoder, ay as DAY_MS, aX as Day, aA as DayInput, aW as DayInputLegacy, az as DayValue, b1 as DecimalInput, b0 as DecimalValue, dp as DefaultListener, cs as Disposable, cr as Disposer, cq as DisposerFunction, dq as Emitter, dm as EmitterAllHandler, dl as EmitterHandler, du as Encoder, bu as FilterFunction, dw as JsonEncoder, dn as ListenerSignature, dj as LocalChannel, d5 as LogLevel, d6 as LogLevelAlias, d7 as LogLevelAliasKey, b as LogLevelAliasType, d4 as Logger, db as LoggerConsoleHandler, da as LoggerContext, d9 as LoggerContextInterface, c as LoggerInterface, dg as LoggerMemoryHandler, bv as MapperFunction, e4 as MemStorage, e3 as MemStorageOptions, dA as Message, dy as MessageAction, dE as MessageDefinitions, dF as MessageHub, dz as MessageResult, dC as MessagesDefaultMethods, dD as MessagesMethods, dB as MessagesOptions, cB as Mutex, e8 as NestedArray, dv as NoopEncoder, cL as Pool, cH as PoolTask, cJ as PoolTaskEvents, cF as PoolTaskFn, cI as PoolTaskIdConflictResolution, cG as PoolTaskState, bb as Primitive, dI as PubSub, dN as RPCFn, dM as RPCOptions, dO as RPCReturn, au as RenderMessagesOptions, dL as ReturnType, bU as RoundingMode, c_ as SerialQueue, c3 as SortableItem, cZ as TaskEvents, cY as TaskFn, ae as Uint8ArrayToHexDump, ad as Uint8ArrayToJson, a2 as Uint8ArrayToString, cx as UseDefer, cu as UseDispose, cp as XRX, a0 as _decodeUtf8Polyfill, $ as _encodeUtf8Polyfill, M as arrayAvg, N as arrayBatches, y as arrayEmptyInPlace, w as arrayFilterInPlace, q as arrayFlatten, s as arrayIntersection, B as arrayIsEqual, H as arrayMax, I as arrayMin, o as arrayMinus, G as arrayRandomElement, u as arrayRemoveElement, v as arraySetElement, E as arrayShuffle, F as arrayShuffleForce, D as arrayShuffleInPlace, z as arraySorted, A as arraySortedNumbers, K as arraySum, t as arraySymmetricDifference, x as arrayToggleInPlace, p as arrayUnion, n as arrayUnique, bH as avg, bF as between, cj as cloneJsonObject, ci as cloneObject, bQ as cmp, bP as composeOrderby, P as createArray, dk as createLocalChannelPair, cM as createPromise, dG as createPromiseProxy, l as csvParse, m as csvParseToObjects, k as csvStringify, a$ as dateStringToDays, a_ as day, aD as dayDay, aT as dayDiff, aH as dayFromAny, aJ as dayFromDate, aK as dayFromDateGMT, aO as dayFromParts, aP as dayFromString, aM as dayFromTimestamp, aG as dayFromToday, aV as dayIterator, aC as dayMonth, aQ as dayMonthStart, aS as dayOffset, aU as dayRange, aF as dayToDate, aI as dayToDateGMT, aE as dayToParts, aN as dayToString, aL as dayToTimestamp, aB as dayYear, aR as dayYearStart, d0 as debounce, b2 as decimal, b5 as decimalCentsPart, b3 as decimalFromCents, b4 as decimalToCents, U as decodeBase16, R as decodeBase32, W as decodeBase58, Y as decodeBase62, j as decrypt, b6 as deepEqual, b8 as deepMerge, b7 as deepStripUndefinedInPlace, h as deriveKeyPbkdf2, d$ as detect, g as digest, ch as empty, T as encodeBase16, Q as encodeBase32, V as encodeBase58, X as encodeBase62, cb as encodeQuery, i as encrypt, c5 as endSortWeight, cd as ensureKey, ce as ensureKeyAsync, ab as equalBinary, b9 as escapeHTML, bT as escapeRegExp, Z as estimateSizeForBase, dS as fetchBasic, dT as fetchJson, dX as fetchOptionsBasicAuth, dV as fetchOptionsFormURLEncoded, dW as fetchOptionsJson, dU as fetchText, ax as fixBrokenUth8String, aY as forEachDay, cm as forTimes, av as formatMessages, e6 as formatMilliseconds, a9 as fromBase64, aa as fromBase64String, ai as fromCamelCase, a6 as fromHex, d_ as getGlobal, d1 as getGlobalContext, dr as getGlobalEmitter, d3 as getGlobalLogger, dc as getNamespaceFilterString, dZ as getNavigator, bA as getSecureRandom, bB as getSecureRandomIfPossible, e5 as getTimestamp, dY as getWindow, dQ as httpMethod, cO as immediate, be as isArray, bl as isBoolean, e0 as isBrowser, bW as isEven, bV as isHalf, bj as isInteger, d2 as isLocalHost, bp as isNotNull, bn as isNull, bm as isNullOrUndefined, bi as isNumber, bc as isObject, bJ as isPrime, bI as isPrimeRX, bd as isPrimitive, cV as isPromise, bf as isRecord, bg as isRecordPlain, bk as isSafeInteger, bh as isString, cS as isTimeout, bo as isUint8Array, bq as isValue, a4 as joinToUint8Array, bt as jsonStringify, bs as jsonStringifySafe, br as jsonStringifySorted, ac as jsonToUint8Array, cg as last, dt as lazyListener, c9 as linkifyPlainText, by as listDistinctUnion, bx as listGroupBy, bz as listOfKey, bw as listQuery, ck as memoize, cl as memoizeAsync, ds as messages, c6 as moveSortWeight, e9 as noop, bN as objectIsEmpty, bL as objectMap, bM as objectMergeDisposable, dR as parseBasicAuth, e7 as parseDate, de as parseLogLevel, bO as parseOrderby, cc as parseQuery, e1 as platform, cW as promisify, ev as qid, bC as randomBoolean, bE as randomFloat, bD as randomInt, r as randomUint8Array, co as regExpEscape, cn as regExpString, aw as renderMessages, bY as roundDown, b$ as roundHalfAwayFromZero, c0 as roundHalfDown, c1 as roundHalfEven, b_ as roundHalfOdd, c2 as roundHalfTowardsZero, bZ as roundHalfUp, bX as roundUp, bK as seededRandom, ep as setUuidDefaultEncoding, cf as size, cN as sleep, c7 as sortedItems, bR as sortedOrderby, c4 as startSortWeight, aj as stringToBoolean, al as stringToFloat, ak as stringToInteger, a1 as stringToUInt8Array, el as suid, ek as suidBytes, en as suidBytesDate, em as suidDate, bG as sum, c$ as throttle, cQ as timeout, cP as timeoutReached, cR as timoutError, a7 as toBase64, a8 as toBase64Url, at as toBool, af as toCamelCase, ag as toCapitalize, ah as toCapitalizeWords, aq as toFloat, a5 as toHex, ca as toHumanReadableUrl, ar as toInt, as as toString, a3 as toUint8Array, bS as toValidFilename, aZ as today, cT as tryTimeout, eu as uname, ba as unescapeHTML, cE as useAsyncMutex, S as useBase, cw as useDefer, ct as useDispose, cv as useDisposer, cA as useEventListener, e2 as useExitHandler, cz as useInterval, df as useLevelFilter, dH as useMessageHub, cD as useMutex, dd as useNamespaceFilter, cK as usePool, dJ as usePubSub, dP as useRPC, c8 as useSorted, cy as useTimeout, eq as uuid, eo as uuid32bit, ee as uuidB32, eb as uuidB62, ea as uuidBytes, er as uuidDecode, eg as uuidDecodeB32, ed as uuidDecodeB62, ej as uuidDecodeV4, es as uuidEncode, ef as uuidEncodeB32, ec as uuidEncodeB62, ei as uuidEncodeV4, et as uuidIsValid, eh as uuidv4, am as valueToBoolean, ao as valueToFloat, an as valueToInteger, ap as valueToString, cU as waitOn } from './uuid-c2cc7aa0.js';
1
+ import { J as Json, O as ObjectStorage, L as LogHandlerOptions, d9 as LogMessage, a as LogHandler } from './uuid-bcd51568.js';
2
+ export { dL as ArgumentsType, cC as AsyncMutex, cY as AsyncReturnType, _ as BinInput, d as CRYPTO_DEFAULT_ALG, e as CRYPTO_DEFAULT_DERIVE_ALG, f as CRYPTO_DEFAULT_DERIVE_ITERATIONS, C as CRYPTO_DEFAULT_HASH_ALG, dj as Channel, di as ChannelMessageEvent, dy as CryptoEncoder, ay as DAY_MS, aX as Day, aA as DayInput, aW as DayInputLegacy, az as DayValue, b1 as DecimalInput, b0 as DecimalValue, dq as DefaultListener, cs as Disposable, cr as Disposer, cq as DisposerFunction, dr as Emitter, dn as EmitterAllHandler, dm as EmitterHandler, dv as Encoder, bu as FilterFunction, dx as JsonEncoder, dp as ListenerSignature, dk as LocalChannel, d6 as LogLevel, d7 as LogLevelAlias, d8 as LogLevelAliasKey, b as LogLevelAliasType, d5 as Logger, dc as LoggerConsoleHandler, db as LoggerContext, da as LoggerContextInterface, c as LoggerInterface, dh as LoggerMemoryHandler, bv as MapperFunction, e5 as MemStorage, e4 as MemStorageOptions, dB as Message, dz as MessageAction, dF as MessageDefinitions, dG as MessageHub, dA as MessageResult, dD as MessagesDefaultMethods, dE as MessagesMethods, dC as MessagesOptions, cB as Mutex, e9 as NestedArray, dw as NoopEncoder, cL as Pool, cH as PoolTask, cJ as PoolTaskEvents, cF as PoolTaskFn, cI as PoolTaskIdConflictResolution, cG as PoolTaskState, bb as Primitive, cM as Progress, dJ as PubSub, dO as RPCFn, dN as RPCOptions, dP as RPCReturn, au as RenderMessagesOptions, dM as ReturnType, bU as RoundingMode, c$ as SerialQueue, c3 as SortableItem, c_ as TaskEvents, cZ as TaskFn, ae as Uint8ArrayToHexDump, ad as Uint8ArrayToJson, a2 as Uint8ArrayToString, cx as UseDefer, cu as UseDispose, cp as XRX, a0 as _decodeUtf8Polyfill, $ as _encodeUtf8Polyfill, M as arrayAvg, N as arrayBatches, y as arrayEmptyInPlace, w as arrayFilterInPlace, q as arrayFlatten, s as arrayIntersection, B as arrayIsEqual, H as arrayMax, I as arrayMin, o as arrayMinus, G as arrayRandomElement, u as arrayRemoveElement, v as arraySetElement, E as arrayShuffle, F as arrayShuffleForce, D as arrayShuffleInPlace, z as arraySorted, A as arraySortedNumbers, K as arraySum, t as arraySymmetricDifference, x as arrayToggleInPlace, p as arrayUnion, n as arrayUnique, bH as avg, bF as between, cj as cloneJsonObject, ci as cloneObject, bQ as cmp, bP as composeOrderby, P as createArray, dl as createLocalChannelPair, cN as createPromise, dH as createPromiseProxy, l as csvParse, m as csvParseToObjects, k as csvStringify, a$ as dateStringToDays, a_ as day, aD as dayDay, aT as dayDiff, aH as dayFromAny, aJ as dayFromDate, aK as dayFromDateGMT, aO as dayFromParts, aP as dayFromString, aM as dayFromTimestamp, aG as dayFromToday, aV as dayIterator, aC as dayMonth, aQ as dayMonthStart, aS as dayOffset, aU as dayRange, aF as dayToDate, aI as dayToDateGMT, aE as dayToParts, aN as dayToString, aL as dayToTimestamp, aB as dayYear, aR as dayYearStart, d1 as debounce, b2 as decimal, b5 as decimalCentsPart, b3 as decimalFromCents, b4 as decimalToCents, U as decodeBase16, R as decodeBase32, W as decodeBase58, Y as decodeBase62, j as decrypt, b6 as deepEqual, b8 as deepMerge, b7 as deepStripUndefinedInPlace, h as deriveKeyPbkdf2, e0 as detect, g as digest, ch as empty, T as encodeBase16, Q as encodeBase32, V as encodeBase58, X as encodeBase62, cb as encodeQuery, i as encrypt, c5 as endSortWeight, cd as ensureKey, ce as ensureKeyAsync, ab as equalBinary, b9 as escapeHTML, bT as escapeRegExp, Z as estimateSizeForBase, dT as fetchBasic, dU as fetchJson, dY as fetchOptionsBasicAuth, dW as fetchOptionsFormURLEncoded, dX as fetchOptionsJson, dV as fetchText, ax as fixBrokenUth8String, aY as forEachDay, cm as forTimes, av as formatMessages, e7 as formatMilliseconds, a9 as fromBase64, aa as fromBase64String, ai as fromCamelCase, a6 as fromHex, d$ as getGlobal, d2 as getGlobalContext, ds as getGlobalEmitter, d4 as getGlobalLogger, dd as getNamespaceFilterString, d_ as getNavigator, bA as getSecureRandom, bB as getSecureRandomIfPossible, e6 as getTimestamp, dZ as getWindow, dR as httpMethod, cP as immediate, be as isArray, bl as isBoolean, e1 as isBrowser, bW as isEven, bV as isHalf, bj as isInteger, d3 as isLocalHost, bp as isNotNull, bn as isNull, bm as isNullOrUndefined, bi as isNumber, bc as isObject, bJ as isPrime, bI as isPrimeRX, bd as isPrimitive, cW as isPromise, bf as isRecord, bg as isRecordPlain, bk as isSafeInteger, bh as isString, cT as isTimeout, bo as isUint8Array, bq as isValue, a4 as joinToUint8Array, bt as jsonStringify, bs as jsonStringifySafe, br as jsonStringifySorted, ac as jsonToUint8Array, cg as last, du as lazyListener, c9 as linkifyPlainText, by as listDistinctUnion, bx as listGroupBy, bz as listOfKey, bw as listQuery, ck as memoize, cl as memoizeAsync, dt as messages, c6 as moveSortWeight, ea as noop, bN as objectIsEmpty, bL as objectMap, bM as objectMergeDisposable, dS as parseBasicAuth, e8 as parseDate, df as parseLogLevel, bO as parseOrderby, cc as parseQuery, e2 as platform, cX as promisify, ew as qid, bC as randomBoolean, bE as randomFloat, bD as randomInt, r as randomUint8Array, co as regExpEscape, cn as regExpString, aw as renderMessages, bY as roundDown, b$ as roundHalfAwayFromZero, c0 as roundHalfDown, c1 as roundHalfEven, b_ as roundHalfOdd, c2 as roundHalfTowardsZero, bZ as roundHalfUp, bX as roundUp, bK as seededRandom, eq as setUuidDefaultEncoding, cf as size, cO as sleep, c7 as sortedItems, bR as sortedOrderby, c4 as startSortWeight, aj as stringToBoolean, al as stringToFloat, ak as stringToInteger, a1 as stringToUInt8Array, em as suid, el as suidBytes, eo as suidBytesDate, en as suidDate, bG as sum, d0 as throttle, cR as timeout, cQ as timeoutReached, cS as timoutError, a7 as toBase64, a8 as toBase64Url, at as toBool, af as toCamelCase, ag as toCapitalize, ah as toCapitalizeWords, aq as toFloat, a5 as toHex, ca as toHumanReadableUrl, ar as toInt, as as toString, a3 as toUint8Array, bS as toValidFilename, aZ as today, cU as tryTimeout, ev as uname, ba as unescapeHTML, cE as useAsyncMutex, S as useBase, cw as useDefer, ct as useDispose, cv as useDisposer, cA as useEventListener, e3 as useExitHandler, cz as useInterval, dg as useLevelFilter, dI as useMessageHub, cD as useMutex, de as useNamespaceFilter, cK as usePool, dK as usePubSub, dQ as useRPC, c8 as useSorted, cy as useTimeout, er as uuid, ep as uuid32bit, ef as uuidB32, ec as uuidB62, eb as uuidBytes, es as uuidDecode, eh as uuidDecodeB32, ee as uuidDecodeB62, ek as uuidDecodeV4, et as uuidEncode, eg as uuidEncodeB32, ed as uuidEncodeB62, ej as uuidEncodeV4, eu as uuidIsValid, ei as uuidv4, am as valueToBoolean, ao as valueToFloat, an as valueToInteger, ap as valueToString, cV as waitOn } from './uuid-bcd51568.js';
3
3
 
4
4
  interface ParseConfig {
5
5
  args?: string[];
@@ -81,7 +81,7 @@ declare function colorStringList(list: Array<any>, style: string, bold?: boolean
81
81
  declare const loggerStackTraceDebug = "loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485";
82
82
  declare function LoggerNodeHandler(opt?: LogHandlerOptions): LogHandler;
83
83
 
84
- declare function getStackLlocationList(stack: string): any[];
84
+ declare function getStackLlocationList(stack: string): string[];
85
85
  /**
86
86
  * Get the source code location of the caller
87
87
  * https://stackoverflow.com/a/47296370/140927
@@ -1,7 +1,7 @@
1
- import{$ as Rt,$a as Ar,$b as On,$c as Bs,$d as Fi,A as ct,Aa as cr,Ab as on,Ac as is,Ad as ri,B as lt,Ba as lr,Bb as an,Bc as os,Bd as ni,C as ft,Ca as fr,Cb as cn,Cc as as,Cd as si,D as ut,Da as ur,Db as ln,Dc as cs,Dd as ii,E as gt,Ea as gr,Eb as fn,Ec as ls,Ed as oi,F as pt,Fa as pr,Fb as un,Fc as fs,Fd as ai,G as mt,Ga as mr,Gb as gn,Gc as us,Gd as ci,H as dt,Ha as dr,Hb as pn,Hc as gs,Hd as li,I as ht,Ia as hr,Ib as mn,Ic as ps,Id as fi,J as yt,Ja as C,Jb as dn,Jc as ms,Jd as ui,K as bt,Ka as yr,Kb as hn,Kc as ds,Kd as gi,L as vt,La as br,Lb as yn,Lc as hs,Ld as pi,M as xt,Ma as vr,Mb as bn,Mc as ys,Md as mi,N as $t,Na as xr,Nb as vn,Nc as bs,Nd as di,O as Et,Oa as $r,Ob as xn,Oc as R,Od as hi,P as St,Pa as Er,Pb as $n,Pc as vs,Pd as yi,Q as Lt,Qa as S,Qb as En,Qc as xs,Qd as bi,R as wt,Ra as Sr,Rb as Sn,Rc as $s,Rd as vi,S as Tt,Sa as Lr,Sb as Ln,Sc as Es,Sd as xi,T as Pt,Ta as wr,Tb as wn,Tc as Ss,Td as $i,U as kt,Ua as Tr,Ub as Tn,Uc as Ls,Ud as Ei,V as Ft,Va as Pr,Vb as Pn,Vc as ws,Vd as Si,W as Nt,Wa as kr,Wb as kn,Wc as Ts,Wd as Li,X as Bt,Xa as Fr,Xb as Fn,Xc as Ps,Xd as wi,Y as At,Ya as Nr,Yb as Nn,Yc as ks,Yd as Ti,Z as Ot,Za as N,Zb as Bn,Zc as Fs,Zd as Pi,_ as jt,_a as Br,_b as An,_c as Ns,_d as ki,a as s,aa as Dt,ab as Or,ac as jn,ad as As,ae as Ni,b as Me,ba as Ht,bb as jr,bc as Rn,bd as Os,be as Bi,c as Ke,ca as Wt,cb as Rr,cc as Dn,cd as js,ce as Ai,d as k,da as It,db as Dr,dc as Hn,dd as Rs,de as Oi,e as Ue,ea as _t,eb as Hr,ec as Wn,ed as Ds,ee as ji,f as F,fa as Gt,fb as Wr,fc as In,fd as Hs,fe as Ri,g as Ye,ga as Mt,gb as Ir,gc as _n,gd as Ws,ge as Di,h as O,ha as Kt,hb as _r,hc as Gn,hd as Is,he as Hi,i as ze,ia as Ut,ib as Gr,ic as Mn,id as _s,ie as Wi,j as Ce,ja as Yt,jb as Mr,jc as Kn,jd as D,je as Ii,k as Ze,ka as zt,kb as Kr,kc as Un,kd as J,ke as _i,l as E,la as Ct,lb as Ur,lc as Yn,ld as Gs,le as Gi,m as Je,ma as Zt,mb as Yr,mc as zn,md as Ms,me as Mi,n as j,na as Jt,nb as zr,nc as Cn,nd as Ks,ne as Ki,o as Qe,oa as Qt,ob as Cr,oc as Z,od as Us,oe as Ui,p as Ve,pa as Vt,pb as Zr,pc as Zn,pd as Ys,q as qe,qa as qt,qb as Jr,qc as Jn,qd as zs,r as Xe,ra as Xt,rb as Qr,rc as Qn,rd as Cs,s as et,sa as er,sb as Vr,sc as Vn,sd as Zs,t as tt,ta as tr,tb as qr,tc as qn,td as Js,u as rt,ua as rr,ub as Xr,uc as Xn,ud as Qs,v as nt,va as nr,vb as en,vc as es,vd as Vs,w as st,wa as sr,wb as tn,wc as ts,wd as qs,x as it,xa as ir,xb as rn,xc as rs,xd as Xs,y as ot,ya as or,yb as nn,yc as ns,yd as ei,z as at,za as ar,zb as sn,zc as ss,zd as ti}from"./chunk-5KHLXHN6.js";function zi(t={}){let{args:e=process.argv.slice(1),alias:r={},normalize:n=C,booleanArgs:o=[],listArgs:f=[],numberArgs:p=[]}=t,l=Object.entries(r).reduce((i,c)=>{let[m,d]=c;typeof d=="string"&&(d=[d]);for(let P of d)i[n(P)]=n(m);return i},{}),a={_:[]};function g(i,c){a[i]==null||typeof a[i]=="boolean"?a[i]=c:Array.isArray(a[i])?a[i].push(c):a[i]=[a[i],c]}s(g,"setOpt");let b=[...e],h;for(;h=b.shift();){let i;if(/^--?/.test(h)){let c=h.replace(/^--?/,"");if(h.includes("=")){let[m,d]=c.split("=",2);c=m.trim(),i=d.trim()}c=n(c),c=l[c]??c,o.includes(c)?g(c,!0):(i=i??b.shift()??"",p.includes(c)&&(i=Number(i??0)),f.includes(c)?Array.isArray(a[c])?a[c].push(i):a[c]=[i]:g(c,i))}else a._.push(h)}return a}s(zi,"parseArgs");function Ji(t){return new Promise((e,r)=>{import("child_process").then(({spawn:n})=>{let o=n("pbcopy");o.on("error",f=>r(f)),o.on("close",()=>e(t)),o.stdin.write(t),o.stdin.end()}).catch(()=>{})})}s(Ji,"pbcopy");import H from"crypto";try{typeof globalThis<"u"&&typeof globalThis.crypto>"u"&&H&&H.webcrypto&&(globalThis.crypto=H.webcrypto)}catch(t){console.warn("Failed to polyfill webcrypto",t)}import B from"fs";import{resolve as ue}from"path";var L=E("zeed:env","error"),ge=`
2
- `,pe=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/,me=/\\n/g,de=/\n|\r|\r\n/;function Q(t,e={}){let r={};return String(t).split(de).forEach((n,o)=>{let f=n.match(pe);if(f!=null){let p=f[1],l=f[2]||"",a=l.length-1,g=l[0]==='"'&&l[a]==='"';l[0]==="'"&&l[a]==="'"||g?(l=l.substring(1,a),g&&(l=l.replace(me,ge))):l=l.trim(),r[p]=l}else L.debug(`did not match key and value when parsing line ${o+1}: ${n}`)}),r}s(Q,"parse");function he(t,e="."){return ue(process.cwd(),t??e)}s(he,"stringToPath");function ye(t,e=""){return t==null&&(t=e),he(String(t).trim(),e)}s(ye,"valueToPath");var W=ye;function no(t,e=process.env){if(e[t]!=null)return e[t];t=t.toLowerCase();for(let[r,n]of Object.entries(e))if(r.toLowerCase()===t)return n}s(no,"getEnvVariableRelaxed");function so(t={}){let e=t?.path??W(t?.filename??".env"),r=t?.encoding??"utf8",n=t?.debug||!1;n!==!0&&(L.level=1/0);try{let o=B.existsSync(e)?Q(B.readFileSync(e,{encoding:r}),{debug:n}):{},f=B.existsSync(`${e}.local`)?Q(B.readFileSync(`${e}.local`,{encoding:r}),{debug:n}):{},p=Object.assign({},o,f),l=t?.env??process.env;return Object.entries(p).forEach(([a,g])=>{typeof t?.prefix=="string"&&(a=t?.prefix+a),Object.prototype.hasOwnProperty.call(l,a)?L.debug(`"${a}" is already defined and will not be overwritten`):g!=null&&(L.info(`set env.${a} = ${g}`),l[a]=g)}),{parsed:p}}catch(o){return L.error(o),{error:o}}}s(so,"setupEnv");import{mkdirSync as be,readFileSync as V,readdirSync as ve,rmSync as xe,unlinkSync as $e,writeFileSync as Ee}from"fs";import{dirname as Se,resolve as q}from"path";var X=E("zeed:filestorage","error"),I=class{constructor(e={}){this.store={};this.fileKeys=void 0;this.pretty=!1;this.dirname=q(process.cwd(),e.path??".fileStorage"),this.pretty=!!e.pretty,this.extension=e.extension??".json",e.extension&&!this.extension.startsWith(".")&&(this.extension=`.${this.extension}`),this.extensionLength=this.extension.length,this.objectToString=e.objectToString??(r=>this.pretty?j(r,null,2):j(r)),this.objectFromString=e.objectFromString??(r=>{try{return JSON.parse(r)}catch(n){X.warn(`fileStorage parse error '${n}' in`,r)}}),this.keyToFilename=e.keyToFilename??Z}setItem(e,r){this.store[e]=R(r);try{let n=this.objectToString(r),o=this.getPath(e);be(Se(o),{recursive:!0}),Ee(o,n,"utf8")}catch(n){X.error("setItem error",n)}}getPath(e){return q(this.dirname,this.keyToFilename(e)+this.extension)}getBuffer(e){let r=this.getPath(e);return Buffer.from(V(r))}getItem(e){let r=this.store[e];if(r!==null){if(r!=null)return R(r);try{let n=this.getPath(e),o=V(n,"utf8");if(o!=null){let f=this.objectFromString(o);return this.store[e]=f,f}}catch{this.store[e]=null}}}removeItem(e){if(delete this.store[e],this.fileKeys!=null){let r=this.fileKeys.indexOf(e);r!==-1&&this.fileKeys.splice(r,1)}try{let r=this.getPath(e);$e(r)}catch{}}clear(){this.fileKeys=[],this.store={},xe(this.dirname,{recursive:!0,force:!0})}allKeys(){if(this.fileKeys==null)try{this.fileKeys=ve(this.dirname,{withFileTypes:!0}).filter(r=>!r.isDirectory()&&r.name.endsWith(this.extension)).map(r=>r.name.slice(0,-this.extensionLength))||[]}catch{}let e=[...this.fileKeys||[]];for(let r of Object.keys(this.store))e.includes(r)||e.push(r);return e.sort(),e}};s(I,"FileStorage");import{mkdir as Le,readFile as we,rm as Te,stat as Pe,writeFile as ke}from"fs/promises";import{join as _,normalize as Fe}from"path";function bo(t){let e=Fe(t),r=process.env.HOME;return r&&e.startsWith(r)?`~${e.slice(r.length)}`:e}s(bo,"toHumanReadableFilePath");async function G(t){try{await Pe(t)}catch{return!1}return!0}s(G,"exists");async function vo(...t){let e=_(...t);return await G(e)||await Le(e,{recursive:!0}),e}s(vo,"ensureFolder");async function xo(...t){let e=_(...t);return await G(e)&&await Te(e,{recursive:!0}),e}s(xo,"removeFolder");async function $o(...t){let e=_(...t);if(await G(e))return await we(e,"utf-8")}s($o,"readText");async function Eo(t,e){await ke(t,e,"utf-8")}s(Eo,"writeText");import{createWriteStream as Ne,mkdirSync as Be}from"fs";import{dirname as Ae,resolve as Oe}from"path";var ee={};function te(t,e={}){let{level:r=void 0,filter:n=void 0,time:o=!0,pretty:f=!1}=e;t=Oe(process.cwd(),t),Be(Ae(t),{recursive:!0});let p=Ne(t,{flags:"a"}),l=k(n),a=F(r);return g=>{if(!a(g.level)||!l(g.name))return;let b=o?`${new Date().toISOString()} `:"",h=g.name||"",i=ee[h||""];i==null&&(ee[h]=i);let c=[`[${h||"*"}]`,N(g.messages,{pretty:f})];function m(...d){p.write(`${d.join(" ")}
3
- `)}switch(s(m,"write"),g.level){case 1:m(`${b}I|* `,...c);break;case 2:m(`${b}W|** `,...c);break;case 3:m(`${b}E|***`,...c);break;default:m(`${b}D| `,...c);break}}}s(te,"LoggerFileHandler");import De from"tty";import{resolve as re}from"path";function je(t){return typeof t!="string"?[]:t?.split(`
4
- `)?.map(e=>{let r=e.match(/^\s+at.*(\((.*)\)|file:\/\/(.*)$)|\s*at\s(\/.*)$/);if(r){let n=r[3]||r[2]||r[4];return n.endsWith(")")&&(n=n.slice(0,-1)),n}return null})?.filter(e=>e!=null)||[]}s(je,"getStackLlocationList");var M=re(process.cwd()),K=process.env?.HOME?re(process.env?.HOME):"";function ne(t){if(t.includes("/node_modules/"))return"";let e="file://";return t.startsWith(e)?t.substr(e.length):M&&t.startsWith(M)?t.substr(M.length+1):(K&&t.startsWith(K)&&(t=`~/${t.substr(K.length+1)}`),t)}s(ne,"pathStripCwd");function Re(t){let e=t.match(/^\s*at.*(\((.*)\)|file:\/\/(.*)$)|\s*at\s(\/.*)$/);if(e){let r=e[3]||e[2]||e[4];return r.endsWith(")")&&(r=r.slice(0,-1)),r}return""}s(Re,"extractFileInfo");function U(t=2,e=!0){let r=new Error("stack").stack||"",n=je(r)?.[t];return n&&e&&(n=ne(n)),n||""}s(U,"getSourceLocation");function se(){return new Error("stack").stack||""}s(se,"getStack");function ie(t,e=!0){let r="",n=new Error("stack").stack||"";if(typeof n=="string"){let o=n.split(`
5
- `).map(p=>p.trim()),f=o.findIndex(p=>t.some(l=>p.startsWith(l)));r=o[f+1],r&&(r=Re(r)),r&&e&&(r=ne(r))}return r}s(ie,"getSourceLocationByPrecedingPattern");function He(){try{return S(process.env.ZEED_COLOR,De.isatty(process.stdout.fd))}catch{}return!1}s(He,"shouldUseColor");var Y,oe=[6,2,3,4,5,1];function We(t){let e=0;for(let r=0;r<t.length;r++)e=(e<<5)-e+t.charCodeAt(r),e|=0;return oe[Math.abs(e)%oe.length]}s(We,"selectColor");var ae={},z;function A(...t){process.stdout.write(`${N(t)}
6
- `)}s(A,"log");var T={BOLD:"\x1B[1m",UNBOLD:"\x1B[2m",RED:"\x1B[31m",GREEN:"\x1B[32m",BLUE:"\x1B[34m",PURPLE:"\x1B[35m",GRAY:"\x1B[37m",ORANGE:"\x1B[38;5;208m",UNCOLOR:"\x1B[0m"};var le="\x1B[0m";function w(t,e){return`${e===8?T.ORANGE:`\x1B[3${e<8?e:`8;5;${e}`}m`}${t}${le}`}s(w,"colorString");function ce(t,e,r=!0){return t.map(n=>{if(typeof n!="string")return n;let o=e,f=le;return r&&(o=`${T.BOLD}${o}`,f=`${f}${T.BOLD}`),`${o}${n}${f}`})}s(ce,"colorStringList");var Ie="loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485";function fe(t={}){Y==null&&(Y=He()),z==null&&(z=D());let{level:e=void 0,filter:r=void 0,colors:n=Y,levelHelper:o=!0,nameBrackets:f=!0,padding:p=0,fill:l=0,stack:a=!0,time:g=!0}=t,b=k(r),h=F(e);return i=>{if(!h(i.level)||!b(i.name))return;let c=D(),m=i.name||"",d=ae[m||""];d==null&&(d={color:We(m)},ae[m]=d);let P=J(c-z),u,x=f?`[${m}]`:m;if(p>0&&(x=x.padStart(p," ")),l>0&&(x=x.padEnd(l," ")),n){let v=d.color;u=[`${w(x,v)} | `],i.level===2?u.push(...ce(i.messages,T.ORANGE)):i.level===3?u.push(...ce(i.messages,T.RED)):u.push(...i.messages),g&&u.push(w(`+${P}`,v))}else u=[x,...i.messages],g&&u.push(`+${P}`);if(i.messages?.[0]===Ie&&console.log(se()),a){let v="";typeof a=="boolean"?(v=ie(["at Function.","at null.log (","at log ("],!0),v||(v=U(0,!0))):v=U(typeof a=="number"?a:3,!0),v&&u.push(w(`(${v})`,7))}let $="|",y=".";switch(i.level){case 1:o&&(u[0]=`I${$}${y} ${u[0]}`),A(...u);break;case 2:o&&(u[0]=(n?w(`W${$}${y}${y} `,8):`W${$}${y}${y} `)+u[0]),A(...u);break;case 3:o&&(u[0]=(n?w(`E${$}${y}${y}${y} `,1):`E${$}${y}${y}${y} `)+u[0]),A(...u);break;default:o&&(u[0]=`D${$} ${u[0]}`),A(...u);break}}}s(fe,"LoggerNodeHandler");function _e(){let t=[fe({padding:32,nameBrackets:!1})],e=process.env.ZEED_LOG??process.env.LOG,r=S(process.env.ZEED_TIME,!0),n=S(process.env.ZEED_PRETTY,!1);e&&t.unshift(te(W(e),{time:r,pretty:n})),E.setHandlers(t)}s(_e,"setupLogContextNode");_e();export{dt as CRYPTO_DEFAULT_ALG,ht as CRYPTO_DEFAULT_DERIVE_ALG,yt as CRYPTO_DEFAULT_DERIVE_ITERATIONS,mt as CRYPTO_DEFAULT_HASH_ALG,bi as Channel,Si as CryptoEncoder,Ar as DAY_MS,gn as Day,Hs as Emitter,I as FileStorage,Ei as JsonEncoder,vi as LocalChannel,O as LogLevel,ze as LogLevelAlias,E as Logger,Ye as LoggerConsoleHandler,Ce as LoggerContext,te as LoggerFileHandler,yi as LoggerMemoryHandler,fe as LoggerNodeHandler,Ki as MemStorage,$i as NoopEncoder,ui as PoolTaskIdConflictResolution,fi as PoolTaskState,Ti as PubSub,pi as SerialQueue,gt as Uint8ArrayToHexDump,ut as Uint8ArrayToJson,et as Uint8ArrayToString,ws as XRX,qe as _decodeUtf8Polyfill,Ve as _encodeUtf8Polyfill,sr as arrayAvg,ir as arrayBatches,Ct as arrayEmptyInPlace,Yt as arrayFilterInPlace,_t as arrayFlatten,Gt as arrayIntersection,Qt as arrayIsEqual,tr as arrayMax,rr as arrayMin,Wt as arrayMinus,er as arrayRandomElement,Kt as arrayRemoveElement,Ut as arraySetElement,qt as arrayShuffle,Xt as arrayShuffleForce,Vt as arrayShuffleInPlace,Zt as arraySorted,Jt as arraySortedNumbers,nr as arraySum,Mt as arraySymmetricDifference,zt as arrayToggleInPlace,It as arrayUnion,Ht as arrayUnique,Ft as avg,Pt as between,vs as cloneJsonObject,R as cloneObject,Rt as cmp,w as colorString,ce as colorStringList,jt as composeOrderby,or as createArray,xi as createLocalChannelPair,en as createPromise,Li as createPromiseProxy,Ps as csvParse,ks as csvParseToObjects,Ts as csvStringify,hn as dateStringToDays,dn as day,Rr as dayDay,Vr as dayDiff,Ir as dayFromAny,Gr as dayFromDate,Mr as dayFromDateGMT,zr as dayFromParts,Cr as dayFromString,Ur as dayFromTimestamp,Wr as dayFromToday,Xr as dayIterator,jr as dayMonth,Zr as dayMonthStart,Qr as dayOffset,qr as dayRange,Hr as dayToDate,_r as dayToDateGMT,Dr as dayToParts,Yr as dayToString,Kr as dayToTimestamp,Or as dayYear,Jr as dayYearStart,di as debounce,yn as decimal,xn as decimalCentsPart,bn as decimalFromCents,vn as decimalToCents,ur as decodeBase16,lr as decodeBase32,pr as decodeBase58,dr as decodeBase62,$t as decrypt,Dn as deepEqual,Wn as deepMerge,Hn as deepStripUndefinedInPlace,vt as deriveKeyPbkdf2,Ii as detect,bt as digest,bs as empty,fr as encodeBase16,cr as encodeBase32,gr as encodeBase58,mr as encodeBase62,gs as encodeQuery,xt as encrypt,os as endSortWeight,vo as ensureFolder,ms as ensureKey,ds as ensureKeyAsync,lt as equalBinary,In as escapeHTML,Zn as escapeRegExp,hr as estimateSizeForBase,G as exists,Ni as fetchBasic,Bi as fetchJson,Ri as fetchOptionsBasicAuth,Oi as fetchOptionsFormURLEncoded,ji as fetchOptionsJson,Ai as fetchText,Br as fixBrokenUth8String,pn as forEachDay,Es as forTimes,Nr as formatMessages,J as formatMilliseconds,at as fromBase64,ct as fromBase64String,vr as fromCamelCase,st as fromHex,no as getEnvVariableRelaxed,Wi as getGlobal,Me as getGlobalContext,Ws as getGlobalEmitter,Ze as getGlobalLogger,Ke as getNamespaceFilterString,Hi as getNavigator,Et as getSecureRandom,St as getSecureRandomIfPossible,U as getSourceLocation,ie as getSourceLocationByPrecedingPattern,se as getStack,je as getStackLlocationList,D as getTimestamp,Di as getWindow,rn as immediate,Sn as isArray,Nn as isBoolean,_i as isBrowser,Qn as isEven,Jn as isHalf,kn as isInteger,hi as isLocalHost,jn as isNotNull,An as isNull,Bn as isNullOrUndefined,Pn as isNumber,$n as isObject,Bt as isPrime,Nt as isPrimeRX,En as isPrimitive,fn as isPromise,Ln as isRecord,wn as isRecordPlain,Fn as isSafeInteger,Tn as isString,an as isTimeout,On as isUint8Array,Rn as isValue,rt as joinToUint8Array,Qe as jsonStringify,j as jsonStringifySafe,Je as jsonStringifySorted,ft as jsonToUint8Array,ys as last,_s as lazyListener,fs as linkifyPlainText,Kn as listDistinctUnion,Mn as listGroupBy,Un as listOfKey,Gn as listQuery,Ie as loggerStackTraceDebug,xs as memoize,$s as memoizeAsync,Is as messages,as as moveSortWeight,Ui as noop,Cn as objectIsEmpty,Yn as objectMap,zn as objectMergeDisposable,zi as parseArgs,Fi as parseBasicAuth,Gs as parseDate,Ue as parseLogLevel,Ot as parseOrderby,ps as parseQuery,Ji as pbcopy,Gi as platform,un as promisify,li as qid,Lt as randomBoolean,Tt as randomFloat,wt as randomInt,pt as randomUint8Array,$o as readText,Ls as regExpEscape,Ss as regExpString,xo as removeFolder,N as renderMessages,qn as roundDown,ts as roundHalfAwayFromZero,rs as roundHalfDown,ns as roundHalfEven,es as roundHalfOdd,ss as roundHalfTowardsZero,Xn as roundHalfUp,Vn as roundUp,At as seededRandom,ni as setUuidDefaultEncoding,so as setupEnv,hs as size,tn as sleep,cs as sortedItems,Dt as sortedOrderby,is as startSortWeight,xr as stringToBoolean,Er as stringToFloat,$r as stringToInteger,he as stringToPath,Xe as stringToUInt8Array,Xs as suid,qs as suidBytes,ti as suidBytesDate,ei as suidDate,kt as sum,mi as throttle,sn as timeout,nn as timeoutReached,on as timoutError,it as toBase64,ot as toBase64Url,Fr as toBool,C as toCamelCase,yr as toCapitalize,br as toCapitalizeWords,Tr as toFloat,nt as toHex,bo as toHumanReadableFilePath,us as toHumanReadableUrl,Pr as toInt,W as toPath,kr as toString,tt as toUint8Array,Z as toValidFilename,mn as today,cn as tryTimeout,ci as uname,_n as unescapeHTML,Ds as useAsyncMutex,ar as useBase,Bs as useDefer,Fs as useDispose,Ns as useDisposer,js as useEventListener,Mi as useExitHandler,Os as useInterval,F as useLevelFilter,wi as useMessageHub,Rs as useMutex,k as useNamespaceFilter,gi as usePool,Pi as usePubSub,ki as useRPC,ls as useSorted,As as useTimeout,si as uuid,ri as uuid32bit,zs as uuidB32,Ks as uuidB62,Ms as uuidBytes,ii as uuidDecode,Zs as uuidDecodeB32,Ys as uuidDecodeB62,Vs as uuidDecodeV4,oi as uuidEncode,Cs as uuidEncodeB32,Us as uuidEncodeB62,Qs as uuidEncodeV4,ai as uuidIsValid,Js as uuidv4,S as valueToBoolean,Lr as valueToFloat,Sr as valueToInteger,ye as valueToPath,wr as valueToString,ln as waitOn,Eo as writeText};
1
+ import{$ as Dt,$a as Or,$b as jn,$c as Bi,$d as Fs,A as lt,Aa as lr,Ab as an,Ac as si,Ad as rs,B as ft,Ba as fr,Bb as cn,Bc as oi,Bd as ns,C as ut,Ca as ur,Cb as ln,Cc as ai,Cd as is,D as gt,Da as gr,Db as fn,Dc as ci,Dd as ss,E as pt,Ea as pr,Eb as un,Ec as li,Ed as os,F as mt,Fa as mr,Fb as gn,Fc as fi,Fd as as,G as dt,Ga as dr,Gb as pn,Gc as ui,Gd as cs,H as ht,Ha as hr,Hb as mn,Hc as gi,Hd as ls,I as yt,Ia as yr,Ib as dn,Ic as pi,Id as fs,J as bt,Ja as C,Jb as hn,Jc as mi,Jd as us,K as vt,Ka as br,Kb as yn,Kc as di,Kd as gs,L as xt,La as vr,Lb as bn,Lc as hi,Ld as ps,M as $t,Ma as xr,Mb as vn,Mc as yi,Md as ms,N as Et,Na as $r,Nb as xn,Nc as bi,Nd as ds,O as St,Oa as Er,Ob as $n,Oc as R,Od as hs,P as Lt,Pa as Sr,Pb as En,Pc as vi,Pd as ys,Q as wt,Qa as S,Qb as Sn,Qc as xi,Qd as bs,R as Tt,Ra as Lr,Rb as Ln,Rc as $i,Rd as vs,S as Pt,Sa as wr,Sb as wn,Sc as Ei,Sd as xs,T as kt,Ta as Tr,Tb as Tn,Tc as Si,Td as $s,U as Ft,Ua as Pr,Ub as Pn,Uc as Li,Ud as Es,V as Nt,Va as kr,Vb as kn,Vc as wi,Vd as Ss,W as Bt,Wa as Fr,Wb as Fn,Wc as Ti,Wd as Ls,X as At,Xa as Nr,Xb as Nn,Xc as Pi,Xd as ws,Y as Ot,Ya as Br,Yb as Bn,Yc as ki,Yd as Ts,Z as jt,Za as N,Zb as An,Zc as Fi,Zd as Ps,_ as Rt,_a as Ar,_b as On,_c as Ni,_d as ks,a as i,aa as Ht,ab as jr,ac as Z,ad as Ai,ae as Ns,b as Ke,ba as Wt,bb as Rr,bc as Rn,bd as Oi,be as Bs,c as Ue,ca as It,cb as Dr,cc as Dn,cd as ji,ce as As,d as k,da as _t,db as Hr,dc as Hn,dd as Ri,de as Os,e as Ye,ea as Gt,eb as Wr,ec as Wn,ed as Di,ee as js,f as F,fa as Mt,fb as Ir,fc as In,fd as Hi,fe as Rs,g as ze,ga as Kt,gb as _r,gc as _n,gd as Wi,ge as Ds,h as O,ha as Ut,hb as Gr,hc as Gn,hd as Ii,he as Hs,i as Ce,ia as Yt,ib as Mr,ic as Mn,id as _i,ie as Ws,j as Ze,ja as zt,jb as Kr,jc as Kn,jd as D,je as Is,k as Je,ka as Ct,kb as Ur,kc as Un,kd as Q,ke as _s,l as E,la as Zt,lb as Yr,lc as Yn,ld as Gi,le as Gs,m as Qe,ma as Jt,mb as zr,mc as zn,md as Mi,me as Ms,n as j,na as Qt,nb as Cr,nc as Cn,nd as Ki,ne as Ks,o as Ve,oa as Vt,ob as Zr,oc as J,od as Ui,oe as Us,p as qe,pa as qt,pb as Jr,pc as Zn,pd as Yi,pe as Ys,q as Xe,qa as Xt,qb as Qr,qc as Jn,qd as zi,r as et,ra as er,rb as Vr,rc as Qn,rd as Ci,s as tt,sa as tr,sb as qr,sc as Vn,sd as Zi,t as rt,ta as rr,tb as Xr,tc as qn,td as Ji,u as nt,ua as nr,ub as en,uc as Xn,ud as Qi,v as it,va as ir,vb as tn,vc as ei,vd as Vi,w as st,wa as sr,wb as rn,wc as ti,wd as qi,x as ot,xa as or,xb as nn,xc as ri,xd as Xi,y as at,ya as ar,yb as sn,yc as ni,yd as es,z as ct,za as cr,zb as on,zc as ii,zd as ts}from"./chunk-VBENGHAN.js";function Cs(t={}){let{args:e=process.argv.slice(1),alias:r={},normalize:n=C,booleanArgs:o=[],listArgs:f=[],numberArgs:p=[]}=t,l=Object.entries(r).reduce((s,c)=>{let[m,d]=c;typeof d=="string"&&(d=[d]);for(let P of d)s[n(P)]=n(m);return s},{}),a={_:[]};function g(s,c){a[s]==null||typeof a[s]=="boolean"?a[s]=c:Array.isArray(a[s])?a[s].push(c):a[s]=[a[s],c]}i(g,"setOpt");let b=[...e],h;for(;h=b.shift();){let s;if(/^--?/.test(h)){let c=h.replace(/^--?/,"");if(h.includes("=")){let[m,d]=c.split("=",2);c=m.trim(),s=d.trim()}c=n(c),c=l[c]??c,o.includes(c)?g(c,!0):(s=s??b.shift()??"",p.includes(c)&&(s=Number(s??0)),f.includes(c)?Array.isArray(a[c])?a[c].push(s):a[c]=[s]:g(c,s))}else a._.push(h)}return a}i(Cs,"parseArgs");function Qs(t){return new Promise((e,r)=>{import("child_process").then(({spawn:n})=>{let o=n("pbcopy");o.on("error",f=>r(f)),o.on("close",()=>e(t)),o.stdin.write(t),o.stdin.end()}).catch(()=>{})})}i(Qs,"pbcopy");import H from"crypto";try{typeof globalThis<"u"&&typeof globalThis.crypto>"u"&&H&&H.webcrypto&&(globalThis.crypto=H.webcrypto)}catch(t){console.warn("Failed to polyfill webcrypto",t)}import B from"fs";import{resolve as ge}from"path";var L=E("zeed:env","error"),pe=`
2
+ `,me=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/,de=/\\n/g,he=/\n|\r|\r\n/;function V(t,e={}){let r={};return String(t).split(he).forEach((n,o)=>{let f=n.match(me);if(f!=null){let p=f[1],l=f[2]||"",a=l.length-1,g=l[0]==='"'&&l[a]==='"';l[0]==="'"&&l[a]==="'"||g?(l=l.substring(1,a),g&&(l=l.replace(de,pe))):l=l.trim(),r[p]=l}else L.debug(`did not match key and value when parsing line ${o+1}: ${n}`)}),r}i(V,"parse");function ye(t,e="."){return ge(process.cwd(),t??e)}i(ye,"stringToPath");function be(t,e=""){return t==null&&(t=e),ye(String(t).trim(),e)}i(be,"valueToPath");var W=be;function io(t,e=process.env){if(e[t]!=null)return e[t];t=t.toLowerCase();for(let[r,n]of Object.entries(e))if(r.toLowerCase()===t)return n}i(io,"getEnvVariableRelaxed");function so(t={}){let e=t?.path??W(t?.filename??".env"),r=t?.encoding??"utf8",n=t?.debug||!1;n!==!0&&(L.level=1/0);try{let o=B.existsSync(e)?V(B.readFileSync(e,{encoding:r}),{debug:n}):{},f=B.existsSync(`${e}.local`)?V(B.readFileSync(`${e}.local`,{encoding:r}),{debug:n}):{},p=Object.assign({},o,f),l=t?.env??process.env;return Object.entries(p).forEach(([a,g])=>{typeof t?.prefix=="string"&&(a=t?.prefix+a),Object.prototype.hasOwnProperty.call(l,a)?L.debug(`"${a}" is already defined and will not be overwritten`):g!=null&&(L.info(`set env.${a} = ${g}`),l[a]=g)}),{parsed:p}}catch(o){return L.error(o),{error:o}}}i(so,"setupEnv");import{mkdirSync as ve,readFileSync as q,readdirSync as xe,rmSync as $e,unlinkSync as Ee,writeFileSync as Se}from"fs";import{dirname as Le,resolve as X}from"path";var ee=E("zeed:filestorage","error"),I=class{constructor(e={}){this.store={};this.fileKeys=void 0;this.pretty=!1;this.dirname=X(process.cwd(),e.path??".fileStorage"),this.pretty=!!e.pretty,this.extension=e.extension??".json",e.extension&&!this.extension.startsWith(".")&&(this.extension=`.${this.extension}`),this.extensionLength=this.extension.length,this.objectToString=e.objectToString??(r=>this.pretty?j(r,null,2):j(r)),this.objectFromString=e.objectFromString??(r=>{try{return JSON.parse(r)}catch(n){ee.warn(`fileStorage parse error '${n}' in`,r)}}),this.keyToFilename=e.keyToFilename??J}setItem(e,r){this.store[e]=R(r);try{let n=this.objectToString(r),o=this.getPath(e);ve(Le(o),{recursive:!0}),Se(o,n,"utf8")}catch(n){ee.error("setItem error",n)}}getPath(e){return X(this.dirname,this.keyToFilename(e)+this.extension)}getBuffer(e){let r=this.getPath(e);return Buffer.from(q(r))}getItem(e){let r=this.store[e];if(r!==null){if(r!=null)return R(r);try{let n=this.getPath(e),o=q(n,"utf8");if(o!=null){let f=this.objectFromString(o);return this.store[e]=f,f}}catch{this.store[e]=null}}}removeItem(e){if(delete this.store[e],this.fileKeys!=null){let r=this.fileKeys.indexOf(e);r!==-1&&this.fileKeys.splice(r,1)}try{let r=this.getPath(e);Ee(r)}catch{}}clear(){this.fileKeys=[],this.store={},$e(this.dirname,{recursive:!0,force:!0})}allKeys(){if(this.fileKeys==null)try{this.fileKeys=xe(this.dirname,{withFileTypes:!0}).filter(r=>!r.isDirectory()&&r.name.endsWith(this.extension)).map(r=>r.name.slice(0,-this.extensionLength))||[]}catch{}let e=[...this.fileKeys||[]];for(let r of Object.keys(this.store))e.includes(r)||e.push(r);return e.sort(),e}};i(I,"FileStorage");import{mkdir as we,readFile as Te,rm as Pe,stat as ke,writeFile as Fe}from"fs/promises";import{join as _,normalize as Ne}from"path";function vo(t){let e=Ne(t),r=process.env.HOME;return r&&e.startsWith(r)?`~${e.slice(r.length)}`:e}i(vo,"toHumanReadableFilePath");async function G(t){try{await ke(t)}catch{return!1}return!0}i(G,"exists");async function xo(...t){let e=_(...t);return await G(e)||await we(e,{recursive:!0}),e}i(xo,"ensureFolder");async function $o(...t){let e=_(...t);return await G(e)&&await Pe(e,{recursive:!0}),e}i($o,"removeFolder");async function Eo(...t){let e=_(...t);if(await G(e))return await Te(e,"utf-8")}i(Eo,"readText");async function So(t,e){await Fe(t,e,"utf-8")}i(So,"writeText");import{createWriteStream as Be,mkdirSync as Ae}from"fs";import{dirname as Oe,resolve as je}from"path";var te={};function re(t,e={}){let{level:r=void 0,filter:n=void 0,time:o=!0,pretty:f=!1}=e;t=je(process.cwd(),t),Ae(Oe(t),{recursive:!0});let p=Be(t,{flags:"a"}),l=k(n),a=F(r);return g=>{if(!a(g.level)||!l(g.name))return;let b=o?`${new Date().toISOString()} `:"",h=g.name||"",s=te[h||""];s==null&&(te[h]=s);let c=[`[${h||"*"}]`,N(g.messages,{pretty:f})];function m(...d){p.write(`${d.join(" ")}
3
+ `)}switch(i(m,"write"),g.level){case 1:m(`${b}I|* `,...c);break;case 2:m(`${b}W|** `,...c);break;case 3:m(`${b}E|***`,...c);break;default:m(`${b}D| `,...c);break}}}i(re,"LoggerFileHandler");import He from"tty";import{resolve as ne}from"path";function Re(t){return typeof t!="string"?[]:t?.split(`
4
+ `).map(e=>{let r=e.match(/^\s+at.*(\((.*)\)|file:\/\/(.*)$)|\s*at\s(\/.*)$/);if(r){let n=r[3]||r[2]||r[4];return n.endsWith(")")&&(n=n.slice(0,-1)),n}})?.filter(Z)??[]}i(Re,"getStackLlocationList");var M=ne(process.cwd()),K=process.env?.HOME?ne(process.env?.HOME):"";function ie(t){if(t.includes("/node_modules/"))return"";let e="file://";return t.startsWith(e)?t.substr(e.length):M&&t.startsWith(M)?t.substr(M.length+1):(K&&t.startsWith(K)&&(t=`~/${t.substr(K.length+1)}`),t)}i(ie,"pathStripCwd");function De(t){let e=t.match(/^\s*at.*(\((.*)\)|file:\/\/(.*)$)|\s*at\s(\/.*)$/);if(e){let r=e[3]||e[2]||e[4];return r.endsWith(")")&&(r=r.slice(0,-1)),r}return""}i(De,"extractFileInfo");function U(t=2,e=!0){let r=new Error("stack").stack||"",n=Re(r)?.[t];return n&&e&&(n=ie(n)),n||""}i(U,"getSourceLocation");function se(){return new Error("stack").stack||""}i(se,"getStack");function oe(t,e=!0){let r="",n=new Error("stack").stack||"";if(typeof n=="string"){let o=n.split(`
5
+ `).map(p=>p.trim()),f=o.findIndex(p=>t.some(l=>p.startsWith(l)));r=o[f+1],r&&(r=De(r)),r&&e&&(r=ie(r))}return r}i(oe,"getSourceLocationByPrecedingPattern");function We(){try{return S(process.env.ZEED_COLOR,He.isatty(process.stdout.fd))}catch{}return!1}i(We,"shouldUseColor");var Y,ae=[6,2,3,4,5,1];function Ie(t){let e=0;for(let r=0;r<t.length;r++)e=(e<<5)-e+t.charCodeAt(r),e|=0;return ae[Math.abs(e)%ae.length]}i(Ie,"selectColor");var ce={},z;function A(...t){process.stdout.write(`${N(t)}
6
+ `)}i(A,"log");var T={BOLD:"\x1B[1m",UNBOLD:"\x1B[2m",RED:"\x1B[31m",GREEN:"\x1B[32m",BLUE:"\x1B[34m",PURPLE:"\x1B[35m",GRAY:"\x1B[37m",ORANGE:"\x1B[38;5;208m",UNCOLOR:"\x1B[0m"};var fe="\x1B[0m";function w(t,e){return`${e===8?T.ORANGE:`\x1B[3${e<8?e:`8;5;${e}`}m`}${t}${fe}`}i(w,"colorString");function le(t,e,r=!0){return t.map(n=>{if(typeof n!="string")return n;let o=e,f=fe;return r&&(o=`${T.BOLD}${o}`,f=`${f}${T.BOLD}`),`${o}${n}${f}`})}i(le,"colorStringList");var _e="loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485";function ue(t={}){Y==null&&(Y=We()),z==null&&(z=D());let{level:e=void 0,filter:r=void 0,colors:n=Y,levelHelper:o=!0,nameBrackets:f=!0,padding:p=0,fill:l=0,stack:a=!0,time:g=!0}=t,b=k(r),h=F(e);return s=>{if(!h(s.level)||!b(s.name))return;let c=D(),m=s.name||"",d=ce[m||""];d==null&&(d={color:Ie(m)},ce[m]=d);let P=Q(c-z),u,x=f?`[${m}]`:m;if(p>0&&(x=x.padStart(p," ")),l>0&&(x=x.padEnd(l," ")),n){let v=d.color;u=[`${w(x,v)} | `],s.level===2?u.push(...le(s.messages,T.ORANGE)):s.level===3?u.push(...le(s.messages,T.RED)):u.push(...s.messages),g&&u.push(w(`+${P}`,v))}else u=[x,...s.messages],g&&u.push(`+${P}`);if(s.messages?.[0]===_e&&console.log(se()),a){let v="";typeof a=="boolean"?(v=oe(["at Function.","at null.log (","at log ("],!0),v||(v=U(0,!0))):v=U(typeof a=="number"?a:3,!0),v&&u.push(w(`(${v})`,7))}let $="|",y=".";switch(s.level){case 1:o&&(u[0]=`I${$}${y} ${u[0]}`),A(...u);break;case 2:o&&(u[0]=(n?w(`W${$}${y}${y} `,8):`W${$}${y}${y} `)+u[0]),A(...u);break;case 3:o&&(u[0]=(n?w(`E${$}${y}${y}${y} `,1):`E${$}${y}${y}${y} `)+u[0]),A(...u);break;default:o&&(u[0]=`D${$} ${u[0]}`),A(...u);break}}}i(ue,"LoggerNodeHandler");function Ge(){let t=[ue({padding:32,nameBrackets:!1})],e=process.env.ZEED_LOG??process.env.LOG,r=S(process.env.ZEED_TIME,!0),n=S(process.env.ZEED_PRETTY,!1);e&&t.unshift(re(W(e),{time:r,pretty:n})),E.setHandlers(t)}i(Ge,"setupLogContextNode");Ge();export{ht as CRYPTO_DEFAULT_ALG,yt as CRYPTO_DEFAULT_DERIVE_ALG,bt as CRYPTO_DEFAULT_DERIVE_ITERATIONS,dt as CRYPTO_DEFAULT_HASH_ALG,fs as Channel,ds as CryptoEncoder,Or as DAY_MS,pn as Day,Hi as Emitter,I as FileStorage,ms as JsonEncoder,us as LocalChannel,O as LogLevel,Ce as LogLevelAlias,E as Logger,ze as LoggerConsoleHandler,Ze as LoggerContext,re as LoggerFileHandler,Fs as LoggerMemoryHandler,ue as LoggerNodeHandler,Us as MemStorage,ps as NoopEncoder,Ss as PoolTaskIdConflictResolution,Es as PoolTaskState,$s as Progress,bs as PubSub,ws as SerialQueue,pt as Uint8ArrayToHexDump,gt as Uint8ArrayToJson,tt as Uint8ArrayToString,wi as XRX,Xe as _decodeUtf8Polyfill,qe as _encodeUtf8Polyfill,sr as arrayAvg,or as arrayBatches,Zt as arrayEmptyInPlace,zt as arrayFilterInPlace,Gt as arrayFlatten,Mt as arrayIntersection,Vt as arrayIsEqual,rr as arrayMax,nr as arrayMin,It as arrayMinus,tr as arrayRandomElement,Ut as arrayRemoveElement,Yt as arraySetElement,Xt as arrayShuffle,er as arrayShuffleForce,qt as arrayShuffleInPlace,Jt as arraySorted,Qt as arraySortedNumbers,ir as arraySum,Kt as arraySymmetricDifference,Ct as arrayToggleInPlace,_t as arrayUnion,Wt as arrayUnique,Nt as avg,kt as between,vi as cloneJsonObject,R as cloneObject,Dt as cmp,w as colorString,le as colorStringList,Rt as composeOrderby,ar as createArray,gs as createLocalChannelPair,tn as createPromise,hs as createPromiseProxy,Pi as csvParse,ki as csvParseToObjects,Ti as csvStringify,yn as dateStringToDays,hn as day,Dr as dayDay,qr as dayDiff,_r as dayFromAny,Mr as dayFromDate,Kr as dayFromDateGMT,Cr as dayFromParts,Zr as dayFromString,Yr as dayFromTimestamp,Ir as dayFromToday,en as dayIterator,Rr as dayMonth,Jr as dayMonthStart,Vr as dayOffset,Xr as dayRange,Wr as dayToDate,Gr as dayToDateGMT,Hr as dayToParts,zr as dayToString,Ur as dayToTimestamp,jr as dayYear,Qr as dayYearStart,Ps as debounce,bn as decimal,$n as decimalCentsPart,vn as decimalFromCents,xn as decimalToCents,gr as decodeBase16,fr as decodeBase32,mr as decodeBase58,hr as decodeBase62,Et as decrypt,Dn as deepEqual,Wn as deepMerge,Hn as deepStripUndefinedInPlace,xt as deriveKeyPbkdf2,_s as detect,vt as digest,bi as empty,ur as encodeBase16,lr as encodeBase32,pr as encodeBase58,dr as encodeBase62,gi as encodeQuery,$t as encrypt,oi as endSortWeight,xo as ensureFolder,mi as ensureKey,di as ensureKeyAsync,ft as equalBinary,In as escapeHTML,Zn as escapeRegExp,yr as estimateSizeForBase,G as exists,Bs as fetchBasic,As as fetchJson,Ds as fetchOptionsBasicAuth,js as fetchOptionsFormURLEncoded,Rs as fetchOptionsJson,Os as fetchText,Ar as fixBrokenUth8String,mn as forEachDay,Ei as forTimes,Br as formatMessages,Q as formatMilliseconds,ct as fromBase64,lt as fromBase64String,xr as fromCamelCase,st as fromHex,io as getEnvVariableRelaxed,Is as getGlobal,Ke as getGlobalContext,Wi as getGlobalEmitter,Je as getGlobalLogger,Ue as getNamespaceFilterString,Ws as getNavigator,St as getSecureRandom,Lt as getSecureRandomIfPossible,U as getSourceLocation,oe as getSourceLocationByPrecedingPattern,se as getStack,Re as getStackLlocationList,D as getTimestamp,Hs as getWindow,nn as immediate,Ln as isArray,Bn as isBoolean,Gs as isBrowser,Qn as isEven,Jn as isHalf,Fn as isInteger,ks as isLocalHost,Z as isNotNull,On as isNull,An as isNullOrUndefined,kn as isNumber,En as isObject,At as isPrime,Bt as isPrimeRX,Sn as isPrimitive,un as isPromise,wn as isRecord,Tn as isRecordPlain,Nn as isSafeInteger,Pn as isString,cn as isTimeout,jn as isUint8Array,Rn as isValue,nt as joinToUint8Array,Ve as jsonStringify,j as jsonStringifySafe,Qe as jsonStringifySorted,ut as jsonToUint8Array,yi as last,_i as lazyListener,fi as linkifyPlainText,Kn as listDistinctUnion,Mn as listGroupBy,Un as listOfKey,Gn as listQuery,_e as loggerStackTraceDebug,xi as memoize,$i as memoizeAsync,Ii as messages,ai as moveSortWeight,Ys as noop,Cn as objectIsEmpty,Yn as objectMap,zn as objectMergeDisposable,Cs as parseArgs,Ns as parseBasicAuth,Gi as parseDate,Ye as parseLogLevel,jt as parseOrderby,pi as parseQuery,Qs as pbcopy,Ms as platform,gn as promisify,ls as qid,wt as randomBoolean,Pt as randomFloat,Tt as randomInt,mt as randomUint8Array,Eo as readText,Li as regExpEscape,Si as regExpString,$o as removeFolder,N as renderMessages,qn as roundDown,ti as roundHalfAwayFromZero,ri as roundHalfDown,ni as roundHalfEven,ei as roundHalfOdd,ii as roundHalfTowardsZero,Xn as roundHalfUp,Vn as roundUp,Ot as seededRandom,ns as setUuidDefaultEncoding,so as setupEnv,hi as size,rn as sleep,ci as sortedItems,Ht as sortedOrderby,si as startSortWeight,$r as stringToBoolean,Sr as stringToFloat,Er as stringToInteger,ye as stringToPath,et as stringToUInt8Array,Xi as suid,qi as suidBytes,ts as suidBytesDate,es as suidDate,Ft as sum,Ts as throttle,on as timeout,sn as timeoutReached,an as timoutError,ot as toBase64,at as toBase64Url,Nr as toBool,C as toCamelCase,br as toCapitalize,vr as toCapitalizeWords,Pr as toFloat,it as toHex,vo as toHumanReadableFilePath,ui as toHumanReadableUrl,kr as toInt,W as toPath,Fr as toString,rt as toUint8Array,J as toValidFilename,dn as today,ln as tryTimeout,cs as uname,_n as unescapeHTML,Di as useAsyncMutex,cr as useBase,Bi as useDefer,Fi as useDispose,Ni as useDisposer,ji as useEventListener,Ks as useExitHandler,Oi as useInterval,F as useLevelFilter,ys as useMessageHub,Ri as useMutex,k as useNamespaceFilter,Ls as usePool,vs as usePubSub,xs as useRPC,li as useSorted,Ai as useTimeout,is as uuid,rs as uuid32bit,zi as uuidB32,Ki as uuidB62,Mi as uuidBytes,ss as uuidDecode,Zi as uuidDecodeB32,Yi as uuidDecodeB62,Vi as uuidDecodeV4,os as uuidEncode,Ci as uuidEncodeB32,Ui as uuidEncodeB62,Qi as uuidEncodeV4,as as uuidIsValid,Ji as uuidv4,S as valueToBoolean,wr as valueToFloat,Lr as valueToInteger,be as valueToPath,Tr as valueToString,fn as waitOn,So as writeText};
7
7
  //# sourceMappingURL=index.node.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/node/args.ts","../src/node/clipboard.ts","../src/node/crypto.ts","../src/node/env.ts","../src/node/filestorage.ts","../src/node/fs.ts","../src/node/log-file.ts","../src/node/log-node.ts","../src/node/log-util.ts","../src/node/log-context-node.ts"],"sourcesContent":["// Inspired by https://github.com/kof/node-argsparser/blob/master/lib/argsparser.js\n\nimport { toCamelCase } from '../common/data/camelcase'\n\ninterface ParseConfig {\n args?: string[]\n alias?: Record<string, string[]>\n normalize?: (value: string) => string\n booleanArgs?: string | string[]\n listArgs?: string | string[]\n numberArgs?: string | string[]\n}\n\nexport function parseArgs(config: ParseConfig = {}) {\n const {\n args = process.argv.slice(1),\n alias = {},\n normalize = toCamelCase,\n booleanArgs = [],\n listArgs = [],\n numberArgs = [],\n } = config\n\n const nameToAlias = Object.entries(alias).reduce((map, curr) => {\n let [name, values] = curr\n if (typeof values === 'string')\n values = [values]\n for (const value of values)\n map[normalize(value)] = normalize(name)\n\n return map\n }, {} as any)\n\n const opts: Record<string, any> = {\n _: [],\n }\n\n function setOpt(name: string, value: any) {\n if (opts[name] == null)\n opts[name] = value\n\n else if (typeof opts[name] === 'boolean')\n opts[name] = value\n\n else if (Array.isArray(opts[name]))\n opts[name].push(value)\n\n else\n opts[name] = [opts[name], value]\n }\n\n const argList = [...args]\n let arg: string | undefined\n\n // eslint-disable-next-line no-cond-assign\n while ((arg = argList.shift())) {\n let value: any\n if (/^--?/.test(arg)) {\n let key = arg.replace(/^--?/, '')\n if (arg.includes('=')) {\n const [name, valuePart] = key.split('=', 2)\n key = name.trim()\n value = valuePart.trim()\n }\n key = normalize(key)\n key = nameToAlias[key] ?? key\n if (booleanArgs.includes(key)) {\n setOpt(key, true)\n }\n else {\n value = value ?? argList.shift() ?? ''\n if (numberArgs.includes(key))\n value = Number(value ?? 0)\n\n if (listArgs.includes(key)) {\n if (Array.isArray(opts[key]))\n opts[key].push(value)\n\n else\n opts[key] = [value]\n }\n else {\n setOpt(key, value)\n }\n }\n }\n else {\n opts._.push(arg)\n }\n }\n\n return opts\n}\n","/** Copy string to clipboard */\nexport function pbcopy(data: string) {\n return new Promise(\n (resolve, reject) => {\n import('child_process').then(({ spawn }) => {\n const proc = spawn('pbcopy')\n proc.on('error', (err: any) => reject(err))\n proc.on('close', () => resolve(data))\n proc.stdin.write(data)\n proc.stdin.end()\n }).catch(() => {})\n })\n}\n","// https://nodejs.org/api/webcrypto.html\nimport nodeCrypto from 'crypto'\n\nexport {}\n\n// declare namespace NodeJS {\n// interface Global {\n// crypto: Crypto\n// }\n// }\n\n// todo sideffects\ntry {\n if (\n typeof globalThis !== 'undefined'\n && typeof globalThis.crypto === 'undefined'\n && nodeCrypto\n && nodeCrypto.webcrypto\n ) {\n // @ts-expect-error this is a workaround for node environment\n globalThis.crypto = nodeCrypto.webcrypto\n }\n}\ncatch (err) {\n console.warn('Failed to polyfill webcrypto', err)\n}\n\n// // eslint-disable-next-line @typescript-eslint/no-unused-vars\n// declare namespace NodeJS {\n// interface Global {\n// crypto: Crypto\n// }\n// }\n\n// export async function getCrypto() {\n// if (!globalThis.crypto) {\n// try {\n// if (typeof globalThis !== 'undefined' && typeof globalThis.crypto === 'undefined') {\n// // https://nodejs.org/api/webcrypto.html\n// // @ts-expect-error this is a workaround for node environment\n// globalThis.crypto = await import('crypto')\n// }\n// }\n// catch (err) {\n// console.warn('Failed to polyfill webcrypto', err)\n// }\n// }\n// return globalThis.crypto\n// }\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport fs from 'fs'\nimport { resolve } from 'path'\nimport { Logger } from '../common/log'\nimport { LogLevel } from '../common/log-base'\n\nconst log = Logger('zeed:env', 'error')\n\nconst NEWLINE = '\\n'\nconst RE_INI_KEY_VAL = /^\\s*([\\w_.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\n|\\r|\\r\\n/\n\ninterface csvOptions {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n}\n\n// Parses src into an Object\nfunction parse(src: string, _options: csvOptions = {}) {\n const obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n .forEach((line, idx) => {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || ''\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === '\\'' && val[end] === '\\''\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted)\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n }\n else {\n log.debug(\n `did not match key and value when parsing line ${idx + 1}: ${line}`,\n )\n }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue = '.',\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = ''): string {\n if (value == null)\n value = defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\nexport function getEnvVariableRelaxed(\n name: string,\n env = process.env,\n): string | undefined {\n if (env[name] != null)\n return env[name]\n name = name.toLowerCase()\n for (const [k, v] of Object.entries(env)) {\n if (k.toLowerCase() === name)\n return v\n }\n}\n\n/** Populates process.env from .env file. */\nexport function setupEnv(options: csvOptions = {}) {\n const dotenvPath: string\n = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n if (debug !== true)\n log.level = LogLevel.off\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsedEnv = fs.existsSync(dotenvPath)\n ? parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n : {}\n const parsedEnvLocal = fs.existsSync(`${dotenvPath}.local`)\n ? parse(fs.readFileSync(`${dotenvPath}.local`, { encoding }), { debug })\n : {}\n\n const parsed: Record<string, string> = Object.assign(\n {},\n parsedEnv,\n parsedEnvLocal,\n )\n const env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === 'string')\n key = options?.prefix + key\n\n if (!Object.prototype.hasOwnProperty.call(env, key)) {\n if (value != null) {\n log.info(`set env.${key} = ${value}`)\n env[key] = value\n }\n }\n else {\n log.debug(`\"${key}\" is already defined and will not be overwritten`)\n }\n })\n return { parsed }\n }\n catch (e) {\n log.error(e)\n return { error: e }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport {\n mkdirSync,\n readFileSync,\n readdirSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from 'fs'\nimport { dirname, resolve } from 'path'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\nimport { Logger } from '../common/log'\nimport type { Json, ObjectStorage } from '../common/types'\n\nconst log = Logger('zeed:filestorage', 'error')\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path ?? '.fileStorage')\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? '.json'\n\n if (opt.extension && !this.extension.startsWith('.'))\n this.extension = `.${this.extension}`\n\n this.extensionLength = this.extension.length\n\n this.objectToString\n = opt.objectToString\n ?? ((data: any): string => {\n return this.pretty\n ? jsonStringifySafe(data, null, 2)\n : jsonStringifySafe(data)\n })\n\n this.objectFromString\n = opt.objectFromString\n ?? ((data: string) => {\n try {\n return JSON.parse(data)\n }\n catch (err) {\n log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, 'utf8')\n }\n catch (err) {\n log.error('setItem error', err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): Buffer {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n const value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null)\n return\n\n if (value != null)\n return cloneObject(value) // this.objectFromString(value)\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, 'utf8')\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n }\n catch (err) {\n // log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1)\n this.fileKeys.splice(index, 1)\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n }\n catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys\n = readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n item =>\n !item.isDirectory() && item.name.endsWith(this.extension),\n )\n .map(item => item.name.slice(0, -this.extensionLength)) || []\n }\n catch (err) {}\n }\n const keys = [...(this.fileKeys || [])]\n for (const key of Object.keys(this.store)) {\n if (!keys.includes(key))\n keys.push(key)\n }\n keys.sort()\n return keys\n }\n}\n","import { mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { join as joinPath, normalize } from 'node:path'\n\nexport function toHumanReadableFilePath(path: string) {\n const p = normalize(path)\n const h = process.env.HOME\n if (h && p.startsWith(h))\n return `~${p.slice(h.length)}`\n\n return p\n}\n\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n }\n catch (err) {\n return false\n }\n return true\n}\n\nexport async function ensureFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (!(await exists(path)))\n await mkdir(path, { recursive: true })\n\n return path\n}\n\nexport async function removeFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (await exists(path))\n await rm(path, { recursive: true })\n\n return path\n}\n\nexport async function readText(\n ...parts: string[]\n): Promise<string | undefined> {\n const path = joinPath(...parts)\n if (await exists(path))\n return await readFile(path, 'utf-8')\n}\n\nexport async function writeText(path: string, content: string): Promise<void> {\n await writeFile(path, content, 'utf-8')\n}\n\n// todo: writeBinary, readBinary\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from 'fs'\nimport { dirname, resolve } from 'path'\nimport { renderMessages } from '../common/data/convert'\nimport type { LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevel } from '../common/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../common/log-filter'\n\nconst namespaces: Record<string, any> = {}\n\nexport function LoggerFileHandler(path: string, opt: LogHandlerOptions = {}) {\n const {\n level = undefined,\n filter = undefined,\n time = true,\n pretty = false,\n } = opt\n path = resolve(process.cwd(), path)\n mkdirSync(dirname(path), { recursive: true })\n const stream = createWriteStream(path, { flags: 'a' })\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level))\n return\n if (!matchesNamespace(msg.name))\n return\n\n const timeNow = time ? `${new Date().toISOString()} ` : ''\n const name = msg.name || ''\n const ninfo = namespaces[name || '']\n if (ninfo == null)\n namespaces[name] = ninfo\n\n const args: string[] = [\n `[${name || '*'}]`,\n renderMessages(msg.messages, { pretty }),\n ]\n\n function write(...args: string[]): void {\n stream.write(`${args.join('\\t')}\\n`)\n }\n\n switch (msg.level) {\n case LogLevel.info:\n write(`${timeNow}I|* `, ...args)\n break\n case LogLevel.warn:\n write(`${timeNow}W|** `, ...args)\n break\n case LogLevel.error:\n write(`${timeNow}E|***`, ...args)\n break\n default:\n write(`${timeNow}D| `, ...args)\n break\n }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport tty from 'tty'\nimport { renderMessages, valueToBoolean } from '../common/data/convert'\nimport type { LogHandler, LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevel } from '../common/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../common/log-filter'\nimport { formatMilliseconds, getTimestamp } from '../common/time'\nimport { getSourceLocation, getSourceLocationByPrecedingPattern, getStack } from './log-util'\n\nfunction shouldUseColor(): boolean {\n try {\n return valueToBoolean(process.env.ZEED_COLOR, tty.isatty(process.stdout.fd))\n }\n catch (err) {}\n return false\n}\n\nlet defaultUseColor: boolean | undefined\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nconst namespaces: Record<string, any> = {}\n\nlet startTime: number | undefined\n\nfunction log(...args: any[]) {\n process.stdout.write(`${renderMessages(args)}\\n`)\n}\n\n// const _browserStyleMap = {\n// [BOLD]: { \"font-weight\": \"bold\" },\n// [UNBOLD]: { \"font-weight\": \"normal\" },\n// [BLUE]: { color: \"blue\" },\n// [GREEN]: { color: \"green\" },\n// [GREY]: { color: \"grey\" },\n// [RED]: { color: \"red\" },\n// [PURPLE]: { color: \"purple\" },\n// [ORANGE]: { color: \"orange\" },\n// [UNCOLOR]: { color: \"black\" },\n// }\n\nconst TTY_STYLE = {\n BOLD: '\\u001B[1m',\n UNBOLD: '\\u001B[2m',\n RED: '\\u001B[31m',\n GREEN: '\\u001B[32m',\n BLUE: '\\u001B[34m',\n PURPLE: '\\u001B[35m',\n GRAY: '\\u001B[37m',\n ORANGE: '\\u001B[38;5;208m',\n UNCOLOR: '\\u001B[0m',\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = '\\u001B[0m'\n\nexport function colorString(text: string, colorCode: number) {\n const colorStart = colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : `\\u001B[3${colorCode < 8 ? colorCode : `8;5;${colorCode}`}m`\n return `${colorStart}${text}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold = true,\n) {\n return list.map((value) => {\n if (typeof value !== 'string')\n return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nexport const loggerStackTraceDebug = 'loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485'\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n if (defaultUseColor == null)\n defaultUseColor = shouldUseColor()\n\n if (startTime == null)\n startTime = getTimestamp()\n\n const {\n level = undefined,\n filter = undefined,\n colors = defaultUseColor,\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = true,\n time = true,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level))\n return\n if (!matchesNamespace(msg.name))\n return\n const timeNow = getTimestamp()\n const name = msg.name || ''\n let ninfo = namespaces[name || '']\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const timeDiffString = formatMilliseconds(timeNow - startTime!)\n\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0)\n displayName = displayName.padStart(padding, ' ')\n\n if (fill > 0)\n displayName = displayName.padEnd(fill, ' ')\n\n if (colors) {\n const c = ninfo.color\n args = [`${colorString(displayName, c)} | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevel.warn)\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n else if (msg.level === LogLevel.error)\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n else\n args.push(...msg.messages)\n if (time)\n args.push(colorString(`+${timeDiffString}`, c))\n }\n else {\n args = [displayName, ...msg.messages]\n if (time)\n args.push(`+${timeDiffString}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n // eslint-disable-next-line no-console\n console.log(getStack())\n }\n\n if (stack) {\n let line = ''\n if (typeof stack === 'boolean') {\n line = getSourceLocationByPrecedingPattern(\n ['at Function.', 'at null.log (', 'at log ('],\n true,\n )\n if (!line)\n line = getSourceLocation(0, true)\n }\n else {\n const depth = typeof stack === 'number' ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line)\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n const sep = '|'\n const charLevel = '.'\n\n switch (msg.level) {\n case LogLevel.info:\n if (levelHelper)\n args[0] = `I${sep}${charLevel} ${args[0]}`\n log(...args)\n break\n case LogLevel.warn:\n if (levelHelper) {\n args[0] = (colors\n ? colorString(`W${sep}${charLevel}${charLevel} `, COLOR.ORANGE)\n : `W${sep}${charLevel}${charLevel} `) + args[0]\n }\n log(...args)\n break\n case LogLevel.error:\n if (levelHelper) {\n args[0] = (colors\n ? colorString(`E${sep}${charLevel}${charLevel}${charLevel} `, COLOR.RED)\n : `E${sep}${charLevel}${charLevel}${charLevel} `) + args[0]\n }\n log(...args)\n break\n default:\n if (levelHelper)\n args[0] = `D${sep} ${args[0]}`\n log(...args)\n break\n }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { resolve } from 'path'\n\nexport function getStackLlocationList(stack: string): any[] {\n if (typeof stack !== 'string')\n return []\n // console.log(\"stack\", stack)\n return (\n stack\n ?.split('\\n')\n ?.map((rawLine) => {\n const m = rawLine.match(\n /^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/,\n )\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(')'))\n line = line.slice(0, -1)\n return line\n }\n return null\n })\n ?.filter(v => v != null) || []\n )\n}\n\nconst cwd = resolve(process.cwd())\nconst home = process.env?.HOME ? resolve(process.env?.HOME) : ''\n// console.log(`cwd = ${cwd}, home = ${home}}`)\n\nfunction pathStripCwd(path: string) {\n // console.log(\">\", path)\n\n if (path.includes('/node_modules/'))\n return ''\n\n const fileURL = 'file://'\n if (path.startsWith(fileURL))\n return path.substr(fileURL.length)\n\n if (cwd && path.startsWith(cwd))\n return path.substr(cwd.length + 1)\n\n if (home && path.startsWith(home))\n path = `~/${path.substr(home.length + 1)}`\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n const m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/)\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(')'))\n line = line.slice(0, -1)\n return line\n }\n return ''\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n * @returns\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n const stack = new Error('stack').stack || ''\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd)\n line = pathStripCwd(line)\n\n return line || ''\n}\n\nexport function getStack(): string {\n return new Error('stack').stack || ''\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true,\n) {\n let line = ''\n const stack = new Error('stack').stack || ''\n if (typeof stack === 'string') {\n const lines = stack.split('\\n').map(l => l.trim())\n // console.log(lines)\n const index = lines.findIndex(l => patterns.some(p => l.startsWith(p)))\n line = lines[index + 1]\n if (line)\n line = extractFileInfo(line)\n\n if (line && stripCwd)\n line = pathStripCwd(line)\n }\n return line\n}\n","import { valueToBoolean } from '../common'\nimport { Logger } from '../common/log'\nimport { toPath } from './env'\nimport { LoggerFileHandler } from './log-file'\nimport { LoggerNodeHandler } from './log-node'\n\nfunction setupLogContextNode() {\n const handlers = [\n LoggerNodeHandler({\n padding: 32,\n nameBrackets: false,\n // levelHelper: false,\n }),\n ]\n\n const logFilePath = process.env.ZEED_LOG ?? process.env.LOG\n const time = valueToBoolean(process.env.ZEED_TIME, true)\n const pretty = valueToBoolean(process.env.ZEED_PRETTY, false)\n if (logFilePath)\n handlers.unshift(LoggerFileHandler(toPath(logFilePath), { time, pretty }))\n\n Logger.setHandlers(handlers)\n}\n\n// todo sideffects\nsetupLogContextNode()\n"],"mappings":"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","names":["parseArgs","config","args","alias","normalize","toCamelCase","booleanArgs","listArgs","numberArgs","nameToAlias","map","curr","name","values","value","opts","setOpt","__name","argList","arg","key","valuePart","pbcopy","data","resolve","reject","spawn","proc","err","__name","nodeCrypto","nodeCrypto","err","fs","resolve","log","Logger","NEWLINE","RE_INI_KEY_VAL","RE_NEWLINES","NEWLINES_MATCH","parse","src","_options","obj","line","idx","keyValueArr","key","val","end","isDoubleQuoted","__name","stringToPath","value","defaultValue","resolve","valueToPath","toPath","getEnvVariableRelaxed","name","env","k","v","setupEnv","options","dotenvPath","encoding","debug","parsedEnv","fs","parsedEnvLocal","parsed","e","mkdirSync","readFileSync","readdirSync","rmSync","unlinkSync","writeFileSync","dirname","resolve","log","Logger","FileStorage","opt","resolve","data","jsonStringifySafe","err","toValidFilename","key","value","cloneObject","path","mkdirSync","dirname","writeFileSync","readFileSync","index","unlinkSync","rmSync","readdirSync","item","keys","__name","mkdir","readFile","rm","stat","writeFile","joinPath","normalize","toHumanReadableFilePath","path","p","normalize","h","__name","exists","stat","ensureFolder","parts","joinPath","mkdir","removeFolder","rm","readText","readFile","writeText","content","writeFile","createWriteStream","mkdirSync","dirname","resolve","namespaces","LoggerFileHandler","path","opt","level","filter","time","pretty","resolve","mkdirSync","dirname","stream","createWriteStream","matchesNamespace","useNamespaceFilter","matchesLevel","useLevelFilter","msg","timeNow","name","ninfo","args","renderMessages","write","__name","tty","resolve","getStackLlocationList","stack","rawLine","m","line","v","__name","cwd","resolve","home","pathStripCwd","path","fileURL","extractFileInfo","stackLine","getSourceLocation","level","stripCwd","getStack","getSourceLocationByPrecedingPattern","patterns","lines","l","index","p","shouldUseColor","valueToBoolean","tty","__name","defaultUseColor","colors","selectColor","namespace","hash","i","namespaces","startTime","log","args","renderMessages","TTY_STYLE","colorEnd","colorString","text","colorCode","TTY_STYLE","__name","colorStringList","list","style","bold","value","start","end","loggerStackTraceDebug","LoggerNodeHandler","opt","defaultUseColor","shouldUseColor","startTime","getTimestamp","level","filter","colors","levelHelper","nameBrackets","padding","fill","stack","time","matchesNamespace","useNamespaceFilter","matchesLevel","useLevelFilter","msg","timeNow","name","ninfo","namespaces","selectColor","timeDiffString","formatMilliseconds","args","displayName","c","getStack","line","getSourceLocationByPrecedingPattern","getSourceLocation","sep","charLevel","log","setupLogContextNode","handlers","LoggerNodeHandler","logFilePath","time","valueToBoolean","pretty","LoggerFileHandler","toPath","Logger","__name"]}
1
+ {"version":3,"sources":["../src/node/args.ts","../src/node/clipboard.ts","../src/node/crypto.ts","../src/node/env.ts","../src/node/filestorage.ts","../src/node/fs.ts","../src/node/log-file.ts","../src/node/log-node.ts","../src/node/log-util.ts","../src/node/log-context-node.ts"],"sourcesContent":["// Inspired by https://github.com/kof/node-argsparser/blob/master/lib/argsparser.js\n\nimport { toCamelCase } from '../common/data/camelcase'\n\ninterface ParseConfig {\n args?: string[]\n alias?: Record<string, string[]>\n normalize?: (value: string) => string\n booleanArgs?: string | string[]\n listArgs?: string | string[]\n numberArgs?: string | string[]\n}\n\nexport function parseArgs(config: ParseConfig = {}) {\n const {\n args = process.argv.slice(1),\n alias = {},\n normalize = toCamelCase,\n booleanArgs = [],\n listArgs = [],\n numberArgs = [],\n } = config\n\n const nameToAlias = Object.entries(alias).reduce((map, curr) => {\n let [name, values] = curr\n if (typeof values === 'string')\n values = [values]\n for (const value of values)\n map[normalize(value)] = normalize(name)\n\n return map\n }, {} as any)\n\n const opts: Record<string, any> = {\n _: [],\n }\n\n function setOpt(name: string, value: any) {\n if (opts[name] == null)\n opts[name] = value\n\n else if (typeof opts[name] === 'boolean')\n opts[name] = value\n\n else if (Array.isArray(opts[name]))\n opts[name].push(value)\n\n else\n opts[name] = [opts[name], value]\n }\n\n const argList = [...args]\n let arg: string | undefined\n\n // eslint-disable-next-line no-cond-assign\n while ((arg = argList.shift())) {\n let value: any\n if (/^--?/.test(arg)) {\n let key = arg.replace(/^--?/, '')\n if (arg.includes('=')) {\n const [name, valuePart] = key.split('=', 2)\n key = name.trim()\n value = valuePart.trim()\n }\n key = normalize(key)\n key = nameToAlias[key] ?? key\n if (booleanArgs.includes(key)) {\n setOpt(key, true)\n }\n else {\n value = value ?? argList.shift() ?? ''\n if (numberArgs.includes(key))\n value = Number(value ?? 0)\n\n if (listArgs.includes(key)) {\n if (Array.isArray(opts[key]))\n opts[key].push(value)\n\n else\n opts[key] = [value]\n }\n else {\n setOpt(key, value)\n }\n }\n }\n else {\n opts._.push(arg)\n }\n }\n\n return opts\n}\n","/** Copy string to clipboard */\nexport function pbcopy(data: string) {\n return new Promise(\n (resolve, reject) => {\n import('child_process').then(({ spawn }) => {\n const proc = spawn('pbcopy')\n proc.on('error', (err: any) => reject(err))\n proc.on('close', () => resolve(data))\n proc.stdin.write(data)\n proc.stdin.end()\n }).catch(() => {})\n })\n}\n","// https://nodejs.org/api/webcrypto.html\nimport nodeCrypto from 'crypto'\n\nexport {}\n\n// declare namespace NodeJS {\n// interface Global {\n// crypto: Crypto\n// }\n// }\n\n// todo sideffects\ntry {\n if (\n typeof globalThis !== 'undefined'\n && typeof globalThis.crypto === 'undefined'\n && nodeCrypto\n && nodeCrypto.webcrypto\n ) {\n // @ts-expect-error this is a workaround for node environment\n globalThis.crypto = nodeCrypto.webcrypto\n }\n}\ncatch (err) {\n console.warn('Failed to polyfill webcrypto', err)\n}\n\n// // eslint-disable-next-line @typescript-eslint/no-unused-vars\n// declare namespace NodeJS {\n// interface Global {\n// crypto: Crypto\n// }\n// }\n\n// export async function getCrypto() {\n// if (!globalThis.crypto) {\n// try {\n// if (typeof globalThis !== 'undefined' && typeof globalThis.crypto === 'undefined') {\n// // https://nodejs.org/api/webcrypto.html\n// // @ts-expect-error this is a workaround for node environment\n// globalThis.crypto = await import('crypto')\n// }\n// }\n// catch (err) {\n// console.warn('Failed to polyfill webcrypto', err)\n// }\n// }\n// return globalThis.crypto\n// }\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport fs from 'fs'\nimport { resolve } from 'path'\nimport { Logger } from '../common/log'\nimport { LogLevel } from '../common/log-base'\n\nconst log = Logger('zeed:env', 'error')\n\nconst NEWLINE = '\\n'\nconst RE_INI_KEY_VAL = /^\\s*([\\w_.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\n|\\r|\\r\\n/\n\ninterface csvOptions {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n}\n\n// Parses src into an Object\nfunction parse(src: string, _options: csvOptions = {}) {\n const obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n .forEach((line, idx) => {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || ''\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === '\\'' && val[end] === '\\''\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted)\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n }\n else {\n log.debug(\n `did not match key and value when parsing line ${idx + 1}: ${line}`,\n )\n }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue = '.',\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = ''): string {\n if (value == null)\n value = defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\nexport function getEnvVariableRelaxed(\n name: string,\n env = process.env,\n): string | undefined {\n if (env[name] != null)\n return env[name]\n name = name.toLowerCase()\n for (const [k, v] of Object.entries(env)) {\n if (k.toLowerCase() === name)\n return v\n }\n}\n\n/** Populates process.env from .env file. */\nexport function setupEnv(options: csvOptions = {}) {\n const dotenvPath: string\n = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n if (debug !== true)\n log.level = LogLevel.off\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsedEnv = fs.existsSync(dotenvPath)\n ? parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n : {}\n const parsedEnvLocal = fs.existsSync(`${dotenvPath}.local`)\n ? parse(fs.readFileSync(`${dotenvPath}.local`, { encoding }), { debug })\n : {}\n\n const parsed: Record<string, string> = Object.assign(\n {},\n parsedEnv,\n parsedEnvLocal,\n )\n const env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === 'string')\n key = options?.prefix + key\n\n if (!Object.prototype.hasOwnProperty.call(env, key)) {\n if (value != null) {\n log.info(`set env.${key} = ${value}`)\n env[key] = value\n }\n }\n else {\n log.debug(`\"${key}\" is already defined and will not be overwritten`)\n }\n })\n return { parsed }\n }\n catch (e) {\n log.error(e)\n return { error: e }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport {\n mkdirSync,\n readFileSync,\n readdirSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from 'fs'\nimport { dirname, resolve } from 'path'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\nimport { Logger } from '../common/log'\nimport type { Json, ObjectStorage } from '../common/types'\n\nconst log = Logger('zeed:filestorage', 'error')\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path ?? '.fileStorage')\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? '.json'\n\n if (opt.extension && !this.extension.startsWith('.'))\n this.extension = `.${this.extension}`\n\n this.extensionLength = this.extension.length\n\n this.objectToString\n = opt.objectToString\n ?? ((data: any): string => {\n return this.pretty\n ? jsonStringifySafe(data, null, 2)\n : jsonStringifySafe(data)\n })\n\n this.objectFromString\n = opt.objectFromString\n ?? ((data: string) => {\n try {\n return JSON.parse(data)\n }\n catch (err) {\n log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, 'utf8')\n }\n catch (err) {\n log.error('setItem error', err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): Buffer {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n const value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null)\n return\n\n if (value != null)\n return cloneObject(value) // this.objectFromString(value)\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, 'utf8')\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n }\n catch (err) {\n // log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1)\n this.fileKeys.splice(index, 1)\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n }\n catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys\n = readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n item =>\n !item.isDirectory() && item.name.endsWith(this.extension),\n )\n .map(item => item.name.slice(0, -this.extensionLength)) || []\n }\n catch (err) {}\n }\n const keys = [...(this.fileKeys || [])]\n for (const key of Object.keys(this.store)) {\n if (!keys.includes(key))\n keys.push(key)\n }\n keys.sort()\n return keys\n }\n}\n","import { mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { join as joinPath, normalize } from 'node:path'\n\nexport function toHumanReadableFilePath(path: string) {\n const p = normalize(path)\n const h = process.env.HOME\n if (h && p.startsWith(h))\n return `~${p.slice(h.length)}`\n\n return p\n}\n\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n }\n catch (err) {\n return false\n }\n return true\n}\n\nexport async function ensureFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (!(await exists(path)))\n await mkdir(path, { recursive: true })\n\n return path\n}\n\nexport async function removeFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (await exists(path))\n await rm(path, { recursive: true })\n\n return path\n}\n\nexport async function readText(\n ...parts: string[]\n): Promise<string | undefined> {\n const path = joinPath(...parts)\n if (await exists(path))\n return await readFile(path, 'utf-8')\n}\n\nexport async function writeText(path: string, content: string): Promise<void> {\n await writeFile(path, content, 'utf-8')\n}\n\n// todo: writeBinary, readBinary\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from 'fs'\nimport { dirname, resolve } from 'path'\nimport { renderMessages } from '../common/data/convert'\nimport type { LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevel } from '../common/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../common/log-filter'\n\nconst namespaces: Record<string, any> = {}\n\nexport function LoggerFileHandler(path: string, opt: LogHandlerOptions = {}) {\n const {\n level = undefined,\n filter = undefined,\n time = true,\n pretty = false,\n } = opt\n path = resolve(process.cwd(), path)\n mkdirSync(dirname(path), { recursive: true })\n const stream = createWriteStream(path, { flags: 'a' })\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level))\n return\n if (!matchesNamespace(msg.name))\n return\n\n const timeNow = time ? `${new Date().toISOString()} ` : ''\n const name = msg.name || ''\n const ninfo = namespaces[name || '']\n if (ninfo == null)\n namespaces[name] = ninfo\n\n const args: string[] = [\n `[${name || '*'}]`,\n renderMessages(msg.messages, { pretty }),\n ]\n\n function write(...args: string[]): void {\n stream.write(`${args.join('\\t')}\\n`)\n }\n\n switch (msg.level) {\n case LogLevel.info:\n write(`${timeNow}I|* `, ...args)\n break\n case LogLevel.warn:\n write(`${timeNow}W|** `, ...args)\n break\n case LogLevel.error:\n write(`${timeNow}E|***`, ...args)\n break\n default:\n write(`${timeNow}D| `, ...args)\n break\n }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport tty from 'tty'\nimport { renderMessages, valueToBoolean } from '../common/data/convert'\nimport type { LogHandler, LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevel } from '../common/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../common/log-filter'\nimport { formatMilliseconds, getTimestamp } from '../common/time'\nimport { getSourceLocation, getSourceLocationByPrecedingPattern, getStack } from './log-util'\n\nfunction shouldUseColor(): boolean {\n try {\n return valueToBoolean(process.env.ZEED_COLOR, tty.isatty(process.stdout.fd))\n }\n catch (err) {}\n return false\n}\n\nlet defaultUseColor: boolean | undefined\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nconst namespaces: Record<string, any> = {}\n\nlet startTime: number | undefined\n\nfunction log(...args: any[]) {\n process.stdout.write(`${renderMessages(args)}\\n`)\n}\n\n// const _browserStyleMap = {\n// [BOLD]: { \"font-weight\": \"bold\" },\n// [UNBOLD]: { \"font-weight\": \"normal\" },\n// [BLUE]: { color: \"blue\" },\n// [GREEN]: { color: \"green\" },\n// [GREY]: { color: \"grey\" },\n// [RED]: { color: \"red\" },\n// [PURPLE]: { color: \"purple\" },\n// [ORANGE]: { color: \"orange\" },\n// [UNCOLOR]: { color: \"black\" },\n// }\n\nconst TTY_STYLE = {\n BOLD: '\\u001B[1m',\n UNBOLD: '\\u001B[2m',\n RED: '\\u001B[31m',\n GREEN: '\\u001B[32m',\n BLUE: '\\u001B[34m',\n PURPLE: '\\u001B[35m',\n GRAY: '\\u001B[37m',\n ORANGE: '\\u001B[38;5;208m',\n UNCOLOR: '\\u001B[0m',\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = '\\u001B[0m'\n\nexport function colorString(text: string, colorCode: number) {\n const colorStart = colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : `\\u001B[3${colorCode < 8 ? colorCode : `8;5;${colorCode}`}m`\n return `${colorStart}${text}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold = true,\n) {\n return list.map((value) => {\n if (typeof value !== 'string')\n return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nexport const loggerStackTraceDebug = 'loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485'\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n if (defaultUseColor == null)\n defaultUseColor = shouldUseColor()\n\n if (startTime == null)\n startTime = getTimestamp()\n\n const {\n level = undefined,\n filter = undefined,\n colors = defaultUseColor,\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = true,\n time = true,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level))\n return\n if (!matchesNamespace(msg.name))\n return\n const timeNow = getTimestamp()\n const name = msg.name || ''\n let ninfo = namespaces[name || '']\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const timeDiffString = formatMilliseconds(timeNow - startTime!)\n\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0)\n displayName = displayName.padStart(padding, ' ')\n\n if (fill > 0)\n displayName = displayName.padEnd(fill, ' ')\n\n if (colors) {\n const c = ninfo.color\n args = [`${colorString(displayName, c)} | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevel.warn)\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n else if (msg.level === LogLevel.error)\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n else\n args.push(...msg.messages)\n if (time)\n args.push(colorString(`+${timeDiffString}`, c))\n }\n else {\n args = [displayName, ...msg.messages]\n if (time)\n args.push(`+${timeDiffString}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n // eslint-disable-next-line no-console\n console.log(getStack())\n }\n\n if (stack) {\n let line = ''\n if (typeof stack === 'boolean') {\n line = getSourceLocationByPrecedingPattern(\n ['at Function.', 'at null.log (', 'at log ('],\n true,\n )\n if (!line)\n line = getSourceLocation(0, true)\n }\n else {\n const depth = typeof stack === 'number' ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line)\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n const sep = '|'\n const charLevel = '.'\n\n switch (msg.level) {\n case LogLevel.info:\n if (levelHelper)\n args[0] = `I${sep}${charLevel} ${args[0]}`\n log(...args)\n break\n case LogLevel.warn:\n if (levelHelper) {\n args[0] = (colors\n ? colorString(`W${sep}${charLevel}${charLevel} `, COLOR.ORANGE)\n : `W${sep}${charLevel}${charLevel} `) + args[0]\n }\n log(...args)\n break\n case LogLevel.error:\n if (levelHelper) {\n args[0] = (colors\n ? colorString(`E${sep}${charLevel}${charLevel}${charLevel} `, COLOR.RED)\n : `E${sep}${charLevel}${charLevel}${charLevel} `) + args[0]\n }\n log(...args)\n break\n default:\n if (levelHelper)\n args[0] = `D${sep} ${args[0]}`\n log(...args)\n break\n }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { resolve } from 'path'\nimport { isNotNull } from '../common'\n\nexport function getStackLlocationList(stack: string): string[] {\n if (typeof stack !== 'string')\n return []\n // console.log(\"stack\", stack)\n return (\n stack?.split('\\n').map((rawLine) => {\n const m = rawLine.match(\n /^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/,\n )\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(')'))\n line = line.slice(0, -1)\n return line\n }\n return undefined\n })?.filter(isNotNull) ?? []\n )\n}\n\nconst cwd = resolve(process.cwd())\nconst home = process.env?.HOME ? resolve(process.env?.HOME) : ''\n// console.log(`cwd = ${cwd}, home = ${home}}`)\n\nfunction pathStripCwd(path: string) {\n // console.log(\">\", path)\n\n if (path.includes('/node_modules/'))\n return ''\n\n const fileURL = 'file://'\n if (path.startsWith(fileURL))\n return path.substr(fileURL.length)\n\n if (cwd && path.startsWith(cwd))\n return path.substr(cwd.length + 1)\n\n if (home && path.startsWith(home))\n path = `~/${path.substr(home.length + 1)}`\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n const m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/)\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(')'))\n line = line.slice(0, -1)\n return line\n }\n return ''\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n * @returns\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n const stack = new Error('stack').stack || ''\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd)\n line = pathStripCwd(line)\n\n return line || ''\n}\n\nexport function getStack(): string {\n return new Error('stack').stack || ''\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true,\n) {\n let line = ''\n const stack = new Error('stack').stack || ''\n if (typeof stack === 'string') {\n const lines = stack.split('\\n').map(l => l.trim())\n // console.log(lines)\n const index = lines.findIndex(l => patterns.some(p => l.startsWith(p)))\n line = lines[index + 1]\n if (line)\n line = extractFileInfo(line)\n\n if (line && stripCwd)\n line = pathStripCwd(line)\n }\n return line\n}\n","import { valueToBoolean } from '../common'\nimport { Logger } from '../common/log'\nimport { toPath } from './env'\nimport { LoggerFileHandler } from './log-file'\nimport { LoggerNodeHandler } from './log-node'\n\nfunction setupLogContextNode() {\n const handlers = [\n LoggerNodeHandler({\n padding: 32,\n nameBrackets: false,\n // levelHelper: false,\n }),\n ]\n\n const logFilePath = process.env.ZEED_LOG ?? process.env.LOG\n const time = valueToBoolean(process.env.ZEED_TIME, true)\n const pretty = valueToBoolean(process.env.ZEED_PRETTY, false)\n if (logFilePath)\n handlers.unshift(LoggerFileHandler(toPath(logFilePath), { time, pretty }))\n\n Logger.setHandlers(handlers)\n}\n\n// todo sideffects\nsetupLogContextNode()\n"],"mappings":"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","names":["parseArgs","config","args","alias","normalize","toCamelCase","booleanArgs","listArgs","numberArgs","nameToAlias","map","curr","name","values","value","opts","setOpt","__name","argList","arg","key","valuePart","pbcopy","data","resolve","reject","spawn","proc","err","__name","nodeCrypto","nodeCrypto","err","fs","resolve","log","Logger","NEWLINE","RE_INI_KEY_VAL","RE_NEWLINES","NEWLINES_MATCH","parse","src","_options","obj","line","idx","keyValueArr","key","val","end","isDoubleQuoted","__name","stringToPath","value","defaultValue","resolve","valueToPath","toPath","getEnvVariableRelaxed","name","env","k","v","setupEnv","options","dotenvPath","encoding","debug","parsedEnv","fs","parsedEnvLocal","parsed","e","mkdirSync","readFileSync","readdirSync","rmSync","unlinkSync","writeFileSync","dirname","resolve","log","Logger","FileStorage","opt","resolve","data","jsonStringifySafe","err","toValidFilename","key","value","cloneObject","path","mkdirSync","dirname","writeFileSync","readFileSync","index","unlinkSync","rmSync","readdirSync","item","keys","__name","mkdir","readFile","rm","stat","writeFile","joinPath","normalize","toHumanReadableFilePath","path","p","normalize","h","__name","exists","stat","ensureFolder","parts","joinPath","mkdir","removeFolder","rm","readText","readFile","writeText","content","writeFile","createWriteStream","mkdirSync","dirname","resolve","namespaces","LoggerFileHandler","path","opt","level","filter","time","pretty","resolve","mkdirSync","dirname","stream","createWriteStream","matchesNamespace","useNamespaceFilter","matchesLevel","useLevelFilter","msg","timeNow","name","ninfo","args","renderMessages","write","__name","tty","resolve","getStackLlocationList","stack","rawLine","m","line","isNotNull","__name","cwd","resolve","home","pathStripCwd","path","fileURL","extractFileInfo","stackLine","getSourceLocation","level","stripCwd","getStack","getSourceLocationByPrecedingPattern","patterns","lines","l","index","p","shouldUseColor","valueToBoolean","tty","__name","defaultUseColor","colors","selectColor","namespace","hash","i","namespaces","startTime","log","args","renderMessages","TTY_STYLE","colorEnd","colorString","text","colorCode","TTY_STYLE","__name","colorStringList","list","style","bold","value","start","end","loggerStackTraceDebug","LoggerNodeHandler","opt","defaultUseColor","shouldUseColor","startTime","getTimestamp","level","filter","colors","levelHelper","nameBrackets","padding","fill","stack","time","matchesNamespace","useNamespaceFilter","matchesLevel","useLevelFilter","msg","timeNow","name","ninfo","namespaces","selectColor","timeDiffString","formatMilliseconds","args","displayName","c","getStack","line","getSourceLocationByPrecedingPattern","getSourceLocation","sep","charLevel","log","setupLogContextNode","handlers","LoggerNodeHandler","logFilePath","time","valueToBoolean","pretty","LoggerFileHandler","toPath","Logger","__name"]}