zeed 0.10.21 → 0.10.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +4 -2
- package/dist/chunk-FXACG46Y.js +16 -0
- package/dist/chunk-FXACG46Y.js.map +1 -0
- package/dist/index.all.d.ts +17 -13
- package/dist/index.browser.cjs +156 -155
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.d.ts +2 -2
- package/dist/index.browser.js +4 -4
- package/dist/index.browser.js.map +1 -1
- package/dist/index.node.cjs +277 -275
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.d.ts +3 -2
- package/dist/index.node.js +11 -10
- package/dist/index.node.js.map +1 -1
- package/dist/{uuid-a8aab0ad.d.ts → uuid-e68c76fc.d.ts} +16 -13
- package/package.json +7 -7
- package/dist/chunk-ONVG2KLG.js +0 -16
- package/dist/chunk-ONVG2KLG.js.map +0 -1
package/dist/index.node.d.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { J as Json, O as ObjectStorage, L as LogHandlerOptions, dE as LogMessage, a as LogHandler, b as LogLevelAliasType, c as LoggerInterface } from './uuid-
|
|
2
|
-
export { ed as ArgumentsType, c_ as AsyncMutex, di as AsyncReturnType, aa as BinInput, B as BinaryEncoder, n as CRYPTO_DEFAULT_ALG, o as CRYPTO_DEFAULT_DERIVE_ALG, p as CRYPTO_DEFAULT_DERIVE_ITERATIONS, C as CRYPTO_DEFAULT_HASH_ALG, dP as Channel, dO as ChannelMessageEvent, e0 as CryptoEncoder, aP as DAY_MS, bc as Day, aR as DayInput, bb as DayInputLegacy, aQ as DayValue, bi as DecimalInput, bh as DecimalValue, dV as DefaultListener, dt as DefaultLogger, br as Difference, bq as DifferenceType, cQ as Disposable, cP as Disposer, cO as DisposerFunction, dW as Emitter, dT as EmitterAllHandler, dS as EmitterHandler, dZ as Encoder, bR as FilterFunction, d$ as JsonEncoder, dU as ListenerSignature, dQ as LocalChannel, du as LogLevel, dC as LogLevelAlias, dD as LogLevelAliasKey, dv as LogLevelAll, dw as LogLevelDebug, dz as LogLevelError, dA as LogLevelFatal, dx as LogLevelInfo, dB as LogLevelOff, dy as LogLevelWarn, dI as LoggerConsoleHandler, dG as LoggerContext, dF as LoggerContextInterface, dN as LoggerMemoryHandler, bS as MapperFunction,
|
|
1
|
+
import { J as Json, O as ObjectStorage, L as LogHandlerOptions, dE as LogMessage, a as LogHandler, b as LogLevelAliasType, c as LoggerInterface } from './uuid-e68c76fc.js';
|
|
2
|
+
export { ed as ArgumentsType, c_ as AsyncMutex, di as AsyncReturnType, aa as BinInput, B as BinaryEncoder, n as CRYPTO_DEFAULT_ALG, o as CRYPTO_DEFAULT_DERIVE_ALG, p as CRYPTO_DEFAULT_DERIVE_ITERATIONS, C as CRYPTO_DEFAULT_HASH_ALG, dP as Channel, dO as ChannelMessageEvent, e0 as CryptoEncoder, aP as DAY_MS, bc as Day, aR as DayInput, bb as DayInputLegacy, aQ as DayValue, bi as DecimalInput, bh as DecimalValue, dV as DefaultListener, dt as DefaultLogger, br as Difference, bq as DifferenceType, cQ as Disposable, cP as Disposer, cO as DisposerFunction, dW as Emitter, dT as EmitterAllHandler, dS as EmitterHandler, dZ as Encoder, bR as FilterFunction, d$ as JsonEncoder, dU as ListenerSignature, dQ as LocalChannel, du as LogLevel, dC as LogLevelAlias, dD as LogLevelAliasKey, dv as LogLevelAll, dw as LogLevelDebug, dz as LogLevelError, dA as LogLevelFatal, dx as LogLevelInfo, dB as LogLevelOff, dy as LogLevelWarn, dI as LoggerConsoleHandler, dG as LoggerContext, dF as LoggerContextInterface, dN as LoggerMemoryHandler, bS as MapperFunction, eA as MemStorage, ez as MemStorageOptions, e3 as Message, e1 as MessageAction, e7 as MessageDefinitions, e8 as MessageHub, e2 as MessageResult, e5 as MessagesDefaultMethods, e6 as MessagesMethods, e4 as MessagesOptions, cZ as Mutex, eG as NestedArray, d_ as NoopEncoder, d2 as PoolConfig, d5 as PoolTask, d6 as PoolTaskEvents, d3 as PoolTaskFn, d1 as PoolTaskIdConflictResolution, d4 as PoolTaskState, bv as Primitive, d8 as Progress, eb as PubSub, eh as RPCFn, eg as RPCOptions, ef as RPCOptionsBasic, ei as RPCReturn, aG as RenderMessagesOptions, ee as ReturnType, cf as RoundingMode, dl as SerialQueue, cq as SortableItem, dk as TaskEvents, dj as TaskFn, aO as Uint8ArrayToDataUri, aq as Uint8ArrayToHexDump, ap as Uint8ArrayToJson, ae as Uint8ArrayToString, cV as UseDefer, cS as UseDispose, cN as XRX, ac as _decodeUtf8Polyfill, ab as _encodeUtf8Polyfill, $ as _useBase, Y as arrayAvg, Z as arrayBatches, M as arrayEmptyInPlace, I as arrayFilterInPlace, D as arrayFlatten, E as arrayIntersection, Q as arrayIsEqual, V as arrayMax, W as arrayMin, z as arrayMinus, U as arrayRandomElement, G as arrayRemoveElement, H as arraySetElement, S as arrayShuffle, T as arrayShuffleForce, R as arrayShuffleInPlace, N as arraySorted, P as arraySortedNumbers, X as arraySum, F as arraySymmetricDifference, K as arrayToggleInPlace, A as arrayUnion, y as arrayUnique, d as assert, e as assertCondition, c2 as avg, c0 as between, k as bitfield, l as blobToArrayBuffer, aN as blobToDataUri, m as blobToUint8Array, dH as browserSelectColorByName, cH as cloneJsonObject, cG as cloneObject, cb as cmp, ca as composeOrderby, _ as createArray, j as createBinaryStreamDecoder, i as createBinaryStreamEncoder, dR as createLocalChannelPair, d9 as createPromise, e9 as createPromiseProxy, w as csvParse, x as csvParseToObjects, v as csvStringify, aM as dataUriToBlob, aL as dataUriToMimeType, aK as dataUriToUint8Array, bg as dateStringToDays, bf as day, aU as dayDay, b8 as dayDiff, aY as dayFromAny, a_ as dayFromDate, a$ as dayFromDateGMT, b3 as dayFromParts, b4 as dayFromString, b1 as dayFromTimestamp, aX as dayFromToday, ba as dayIterator, aT as dayMonth, b5 as dayMonthStart, b7 as dayOffset, b9 as dayRange, aW as dayToDate, aZ as dayToDateGMT, aV as dayToParts, b2 as dayToString, b0 as dayToTimestamp, aS as dayYear, b6 as dayYearStart, dn as debounce, bj as decimal, bm as decimalCentsPart, bk as decimalFromCents, bl as decimalToCents, a4 as decodeBase16, a2 as decodeBase32, a6 as decodeBase58, a8 as decodeBase62, h as decodeJson, u as decrypt, bn as deepEqual, bp as deepMerge, bo as deepStripUndefinedInPlace, s as deriveKeyPbkdf2, ew as detect, bs as diffObjects, q as digest, eF as duration, cF as empty, a3 as encodeBase16, a1 as encodeBase32, a5 as encodeBase58, a7 as encodeBase62, g as encodeJson, cy as encodeQuery, t as encrypt, cs as endSortWeight, cA as ensureKey, cB as ensureKeyAsync, an as equalBinary, bt as escapeHTML, ce as escapeRegExp, a9 as estimateSizeForBase, f as fatal, en as fetchBasic, eo as fetchJson, es as fetchOptionsBasicAuth, eq as fetchOptionsFormURLEncoded, er as fetchOptionsJson, ep as fetchText, cD as first, aJ as fixBrokenUth8String, bd as forEachDay, cK as forTimes, aH as formatMessages, eC as formatMilliseconds, al as fromBase64, am as fromBase64String, au as fromCamelCase, ai as fromHex, ev as getGlobal, dp as getGlobalContext, dX as getGlobalEmitter, dr as getGlobalLogger, ds as getGlobalLoggerIfExists, dJ as getNamespaceFilterString, eu as getNavigator, eE as getPerformanceTimestamp, bX as getSecureRandom, bY as getSecureRandomIfPossible, eB as getTimestamp, et as getWindow, el as httpMethod, db as immediate, by as isArray, bF as isBoolean, ex as isBrowser, bK as isEmpty, ch as isEven, cg as isHalf, bD as isInteger, dq as isLocalHost, bL as isNotEmpty, bJ as isNotNull, bH as isNull, bG as isNullOrUndefined, bC as isNumber, bw as isObject, c4 as isPrime, c3 as isPrimeRX, bx as isPrimitive, dg as isPromise, bz as isRecord, bA as isRecordPlain, bE as isSafeInteger, bB as isString, dd as isTimeout, bN as isTruthy, bI as isUint8Array, bM as isValue, ag as joinToUint8Array, bQ as jsonStringify, bP as jsonStringifySafe, bO as jsonStringifySorted, ao as jsonToUint8Array, cE as last, dY as lazyListener, cw as linkifyPlainText, bV as listDistinctUnion, bU as listGroupBy, bW as listOfKey, bT as listQuery, cI as memoize, cJ as memoizeAsync, ct as moveSortWeight, eH as noop, c8 as objectIsEmpty, c6 as objectMap, c7 as objectMergeDisposable, em as parseBasicAuth, eD as parseDate, dL as parseLogLevel, c9 as parseOrderby, cz as parseQuery, dh as promisify, f1 as qid, bZ as randomBoolean, b$ as randomFloat, b_ as randomInt, r as randomUint8Array, cM as regExpEscape, cL as regExpString, aI as renderMessages, cj as roundDown, cm as roundHalfAwayFromZero, cn as roundHalfDown, co as roundHalfEven, cl as roundHalfOdd, cp as roundHalfTowardsZero, ck as roundHalfUp, ci as roundUp, c5 as seededRandom, eX as setUuidDefaultEncoding, cC as size, da as sleep, cu as sortedItems, cc as sortedOrderby, cr as startSortWeight, av as stringToBoolean, ax as stringToFloat, aw as stringToInteger, ad as stringToUInt8Array, eT as suid, eS as suidBytes, eV as suidBytesDate, eU as suidDate, c1 as sum, dm as throttle, dc as timeout, aj as toBase64, ak as toBase64Url, aF as toBool, ar as toCamelCase, as as toCapitalize, at as toCapitalizeWords, aC as toFloat, ah as toHex, cx as toHumanReadableUrl, aD as toInt, aE as toString, af as toUint8Array, cd as toValidFilename, be as today, de as tryTimeout, f0 as uname, bu as unescapeHTML, d0 as useAsyncMutex, a0 as useBase, cU as useDefer, cR as useDispose, cT as useDisposer, cY as useEventListener, ey as useExitHandler, cX as useInterval, dM as useLevelFilter, ea as useMessageHub, c$ as useMutex, dK as useNamespaceFilter, d7 as usePool, ec as usePubSub, ej as useRPC, ek as useRPCHub, cv as useSorted, cW as useTimeout, eY as uuid, eW as uuid32bit, eM as uuidB32, eJ as uuidB62, eI as uuidBytes, eZ as uuidDecode, eO as uuidDecodeB32, eL as uuidDecodeB62, eR as uuidDecodeV4, e_ as uuidEncode, eN as uuidEncodeB32, eK as uuidEncodeB62, eQ as uuidEncodeV4, e$ as uuidIsValid, eP as uuidv4, ay as valueToBoolean, aA as valueToFloat, az as valueToInteger, aB as valueToString, df as waitOn } from './uuid-e68c76fc.js';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
|
+
import { Buffer } from 'node:buffer';
|
|
4
5
|
|
|
5
6
|
interface ParseConfig {
|
|
6
7
|
args?: string[];
|
package/dist/index.node.js
CHANGED
|
@@ -1,18 +1,19 @@
|
|
|
1
|
-
import { $a, w as w$1, Zc, oc, c, e, pb, k, j as j$1, i, Gc, Id, Jd, p, gb } from './chunk-
|
|
2
|
-
export { O as BinaryEncoder, Y as CRYPTO_DEFAULT_ALG, Z as CRYPTO_DEFAULT_DERIVE_ALG, _ as CRYPTO_DEFAULT_DERIVE_ITERATIONS, X as CRYPTO_DEFAULT_HASH_ALG, he as Channel, me as CryptoEncoder, wb as DAY_MS, $b as Day, r as DefaultLogger, Fd as Emitter, le as JsonEncoder, ie as LocalChannel, n as LogLevelAlias, g as LogLevelAll, h as LogLevelDebug, k as LogLevelError, l as LogLevelFatal, i as LogLevelInfo, m as LogLevelOff, j as LogLevelWarn, f as LoggerConsoleHandler, o as LoggerContext,
|
|
1
|
+
import { $a, w as w$1, Zc, oc, c, e, pb, k, j as j$1, i, Gc, Id, Jd, p, gb } from './chunk-FXACG46Y.js';
|
|
2
|
+
export { O as BinaryEncoder, Y as CRYPTO_DEFAULT_ALG, Z as CRYPTO_DEFAULT_DERIVE_ALG, _ as CRYPTO_DEFAULT_DERIVE_ITERATIONS, X as CRYPTO_DEFAULT_HASH_ALG, he as Channel, me as CryptoEncoder, wb as DAY_MS, $b as Day, r as DefaultLogger, Fd as Emitter, le as JsonEncoder, ie as LocalChannel, n as LogLevelAlias, g as LogLevelAll, h as LogLevelDebug, k as LogLevelError, l as LogLevelFatal, i as LogLevelInfo, m as LogLevelOff, j as LogLevelWarn, f as LoggerConsoleHandler, o as LoggerContext, Ae as LoggerMemoryHandler, Oe as MemStorage, ke as NoopEncoder, te as Progress, pe as PubSub, ve as SerialQueue, vb as Uint8ArrayToDataUri, N as Uint8ArrayToHexDump, M as Uint8ArrayToJson, B as Uint8ArrayToString, td as XRX, z as _decodeUtf8Polyfill, y as _encodeUtf8Polyfill, Qa as _useBase, Na as arrayAvg, Oa as arrayBatches, Ca as arrayEmptyInPlace, Aa as arrayFilterInPlace, va as arrayFlatten, wa as arrayIntersection, Fa as arrayIsEqual, Ka as arrayMax, La as arrayMin, ta as arrayMinus, Ja as arrayRandomElement, ya as arrayRemoveElement, za as arraySetElement, Ha as arrayShuffle, Ia as arrayShuffleForce, Ga as arrayShuffleInPlace, Da as arraySorted, Ea as arraySortedNumbers, Ma as arraySum, xa as arraySymmetricDifference, Ba as arrayToggleInPlace, ua as arrayUnion, sa as arrayUnique, t as assert, u as assertCondition, ka as avg, ia as between, T as bitfield, U as blobToArrayBuffer, ub as blobToDataUri, V as blobToUint8Array, ze as browserSelectColorByName, pc as cloneJsonObject, oc as cloneObject, qa as cmp, pa as composeOrderby, Pa as createArray, S as createBinaryStreamDecoder, R as createBinaryStreamEncoder, je as createLocalChannelPair, Sb as createPromise, ne as createPromiseProxy, vd as csvParse, wd as csvParseToObjects, ud as csvStringify, tb as dataUriToBlob, sb as dataUriToMimeType, rb as dataUriToUint8Array, dc as dateStringToDays, cc as day, zb as dayDay, Pb as dayDiff, Db as dayFromAny, Fb as dayFromDate, Gb as dayFromDateGMT, Kb as dayFromParts, Lb as dayFromString, Ib as dayFromTimestamp, Cb as dayFromToday, Rb as dayIterator, yb as dayMonth, Mb as dayMonthStart, Ob as dayOffset, Qb as dayRange, Bb as dayToDate, Eb as dayToDateGMT, Ab as dayToParts, Jb as dayToString, Hb as dayToTimestamp, xb as dayYear, Nb as dayYearStart, xe as debounce, ec as decimal, hc as decimalCentsPart, fc as decimalFromCents, gc as decimalToCents, Va as decodeBase16, Ta as decodeBase32, Xa as decodeBase58, Za as decodeBase62, Q as decodeJson, ca as decrypt, Lc as deepEqual, Nc as deepMerge, Mc as deepStripUndefinedInPlace, aa as deriveKeyPbkdf2, Le as detect, Oc as diffObjects, $ as digest, Md as duration, nc as empty, Ua as encodeBase16, Sa as encodeBase32, Wa as encodeBase58, Ya as encodeBase62, P as encodeJson, pd as encodeQuery, ba as encrypt, jd as endSortWeight, ic as ensureKey, jc as ensureKeyAsync, K as equalBinary, Pc as escapeHTML, Yc as escapeRegExp, _a as estimateSizeForBase, s as fatal, Ce as fetchBasic, De as fetchJson, He as fetchOptionsBasicAuth, Fe as fetchOptionsFormURLEncoded, Ge as fetchOptionsJson, Ee as fetchText, lc as first, qb as fixBrokenUth8String, ac as forEachDay, sc as forTimes, ob as formatMessages, Jd as formatMilliseconds, I as fromBase64, J as fromBase64String, cb as fromCamelCase, F as fromHex, Ke as getGlobal, a as getGlobalContext, Gd as getGlobalEmitter, p as getGlobalLogger, q as getGlobalLoggerIfExists, b as getNamespaceFilterString, Je as getNavigator, Ld as getPerformanceTimestamp, da as getSecureRandom, ea as getSecureRandomIfPossible, Id as getTimestamp, Ie as getWindow, Ub as immediate, vc as isArray, Cc as isBoolean, Me as isBrowser, Hc as isEmpty, $c as isEven, _c as isHalf, Ac as isInteger, ye as isLocalHost, Ic as isNotEmpty, Gc as isNotNull, Ec as isNull, Dc as isNullOrUndefined, zc as isNumber, tc as isObject, ma as isPrime, la as isPrimeRX, uc as isPrimitive, Zb as isPromise, wc as isRecord, xc as isRecordPlain, Bc as isSafeInteger, yc as isString, Wb as isTimeout, Kc as isTruthy, Fc as isUint8Array, Jc as isValue, D as joinToUint8Array, x as jsonStringify, w as jsonStringifySafe, v as jsonStringifySorted, L as jsonToUint8Array, mc as last, Hd as lazyListener, nd as linkifyPlainText, Tc as listDistinctUnion, Sc as listGroupBy, Uc as listOfKey, Rc as listQuery, qc as memoize, rc as memoizeAsync, kd as moveSortWeight, Pe as noop, Xc as objectIsEmpty, Vc as objectMap, Wc as objectMergeDisposable, Be as parseBasicAuth, Kd as parseDate, d as parseLogLevel, oa as parseOrderby, qd as parseQuery, _b as promisify, ge as qid, fa as randomBoolean, ha as randomFloat, ga as randomInt, W as randomUint8Array, sd as regExpEscape, rd as regExpString, pb as renderMessages, bd as roundDown, ed as roundHalfAwayFromZero, fd as roundHalfDown, gd as roundHalfEven, dd as roundHalfOdd, hd as roundHalfTowardsZero, cd as roundHalfUp, ad as roundUp, na as seededRandom, ae as setUuidDefaultEncoding, kc as size, Tb as sleep, ld as sortedItems, ra as sortedOrderby, id as startSortWeight, db as stringToBoolean, fb as stringToFloat, eb as stringToInteger, A as stringToUInt8Array, Yd as suid, Xd as suidBytes, _d as suidBytesDate, Zd as suidDate, ja as sum, we as throttle, Vb as timeout, G as toBase64, H as toBase64Url, nb as toBool, $a as toCamelCase, ab as toCapitalize, bb as toCapitalizeWords, kb as toFloat, E as toHex, od as toHumanReadableUrl, lb as toInt, mb as toString, C as toUint8Array, Zc as toValidFilename, bc as today, Xb as tryTimeout, fe as uname, Qc as unescapeHTML, Ed as useAsyncMutex, Ra as useBase, zd as useDefer, xd as useDispose, yd as useDisposer, Cd as useEventListener, Ne as useExitHandler, Bd as useInterval, e as useLevelFilter, oe as useMessageHub, Dd as useMutex, c as useNamespaceFilter, ue as usePool, qe as usePubSub, re as useRPC, se as useRPCHub, md as useSorted, Ad as useTimeout, be as uuid, $d as uuid32bit, Rd as uuidB32, Od as uuidB62, Nd as uuidBytes, ce as uuidDecode, Td as uuidDecodeB32, Qd as uuidDecodeB62, Wd as uuidDecodeV4, de as uuidEncode, Sd as uuidEncodeB32, Pd as uuidEncodeB62, Vd as uuidEncodeV4, ee as uuidIsValid, Ud as uuidv4, gb as valueToBoolean, ib as valueToFloat, hb as valueToInteger, jb as valueToString, Yb as waitOn } from './chunk-FXACG46Y.js';
|
|
3
3
|
import D from 'crypto';
|
|
4
4
|
import F, { statSync, readdirSync, mkdirSync, writeFileSync, readFileSync, unlinkSync, rmSync, createWriteStream } from 'fs';
|
|
5
5
|
import { resolve, normalize, join, dirname } from 'path';
|
|
6
6
|
import { stat, mkdir, rm, readFile, writeFile, readdir } from 'fs/promises';
|
|
7
|
-
import
|
|
7
|
+
import { Buffer } from 'buffer';
|
|
8
|
+
import Je from 'tty';
|
|
8
9
|
|
|
9
|
-
function
|
|
10
|
-
`,xe=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/,ve=/\\n/g,Ee=/\n|\r|\r\n/;function Q(t,e={}){let r={};return String(t).split(Ee).forEach((n,s)=>{let i=n.match(xe);if(i!=null){let c=i[1],o=i[2]||"",l=o.length-1,g=o[0]==='"'&&o[l]==='"';o[0]==="'"&&o[l]==="'"||g?(o=o.substring(1,l),g&&(o=o.replace(ve,be))):o=o.trim(),r[c]=o;}}),r}function $e(t,e="."){return resolve(process.cwd(),t??e)}function Le(t,e=""){return t==null&&(t=e),$e(String(t).trim(),e)}var I=Le;function
|
|
11
|
-
`);}switch(g.level){case i:p(`${h}I|* `,...f);break;case j$1:p(`${h}W|** `,...f);break;case k:p(`${h}E|***`,...f);break;default:p(`${h}D| `,...f);break}}}function
|
|
12
|
-
`).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(Gc)??[]}function le(t){if(t.includes("/node_modules/"))return "";let e="file://";if(t.startsWith(e))return t.substr(e.length);let r=resolve(process.cwd());if(r&&t.startsWith(r))return t.substr(r.length+1);let n=process.env?.HOME?resolve(process.env?.HOME):"";return n&&t.startsWith(n)&&(t=`~/${t.substr(n.length+1)}`),t}function
|
|
13
|
-
`).map(c=>c.trim()),i=s.findIndex(c=>t.some(o=>c.startsWith(o)));r=s[i+1],r&&(r=
|
|
14
|
-
`);}var w={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 de="\x1B[0m";function S(t,e){return `${e===8?w.ORANGE:`\x1B[3${e<8?e:`8;5;${e}`}m`}${t}${de}`}function me(t,e,r=!0){return t.map(n=>{if(typeof n!="string")return n;let s=e,i=de;return r&&(s=`${w.BOLD}${s}`,i=`${i}${w.BOLD}`),`${s}${n}${i}`})}var
|
|
10
|
+
function Fo(t={}){let{args:e=process.argv.slice(1),alias:r={},normalize:n=$a,booleanArgs:s=[],listArgs:i=[],numberArgs:c=[]}=t,o=Object.entries(r).reduce((a,f)=>{let[p,d]=f;typeof d=="string"&&(d=[d]);for(let T of d)a[n(T)]=n(p);return a},{}),l={_:[]};function g(a,f){l[a]==null||typeof l[a]=="boolean"?l[a]=f:Array.isArray(l[a])?l[a].push(f):l[a]=[l[a],f];}let h=[...e],m;for(;m=h.shift();){let a;if(/^--?/.test(m)){let f=m.replace(/^--?/,"");if(m.includes("=")){let[p,d]=f.split("=",2);f=p.trim(),a=d.trim();}f=n(f),f=o[f]??f,s.includes(f)?g(f,!0):(a=a??h.shift()??"",c.includes(f)&&(a=Number(a??0)),i.includes(f)?Array.isArray(l[f])?l[f].push(a):l[f]=[a]:g(f,a));}else l._.push(m);}return l}function Bo(t){return new Promise((e,r)=>{import('child_process').then(({spawn:n})=>{let s=n("pbcopy");s.on("error",i=>r(i)),s.on("close",()=>e(t)),s.stdin.write(t),s.stdin.end();}).catch(()=>{});})}function Ho(){try{typeof globalThis<"u"&&typeof globalThis.crypto>"u"&&D&&D.webcrypto&&(globalThis.crypto=D.webcrypto);}catch(t){console.warn("Failed to polyfill webcrypto",t);}}async function Wo(){if(globalThis.crypto==null)try{if(typeof globalThis<"u"&&typeof globalThis.crypto>"u"){let t=await import('crypto');globalThis.crypto=t.webcrypto;}}catch(t){console.warn("Failed to polyfill webcrypto",t);}return globalThis.crypto}var be=`
|
|
11
|
+
`,xe=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/,ve=/\\n/g,Ee=/\n|\r|\r\n/;function Q(t,e={}){let r={};return String(t).split(Ee).forEach((n,s)=>{let i=n.match(xe);if(i!=null){let c=i[1],o=i[2]||"",l=o.length-1,g=o[0]==='"'&&o[l]==='"';o[0]==="'"&&o[l]==="'"||g?(o=o.substring(1,l),g&&(o=o.replace(ve,be))):o=o.trim(),r[c]=o;}}),r}function $e(t,e="."){return resolve(process.cwd(),t??e)}function Le(t,e=""){return t==null&&(t=e),$e(String(t).trim(),e)}var I=Le;function Mo(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}function _o(t={}){let e=t?.path??I(t?.filename??".env"),r=t?.encoding??"utf8",n=t?.debug||!1;try{let s=F.existsSync(e)?Q(F.readFileSync(e,{encoding:r}),{debug:n}):{},i=F.existsSync(`${e}.local`)?Q(F.readFileSync(`${e}.local`,{encoding:r}),{debug:n}):{},c=Object.assign({},s,i),o=t?.env??process.env;return Object.entries(c).forEach(([l,g])=>{typeof t?.prefix=="string"&&(l=t?.prefix+l),Object.prototype.hasOwnProperty.call(o,l)||g!=null&&(o[l]=g);}),{parsed:c}}catch(s){return {error:s}}}function Yo(t){let e=normalize(t),r=process.env.HOME;return r&&e.startsWith(r)?`~${e.slice(r.length)}`:e}async function M(t){try{await stat(t);}catch{return !1}return !0}function N(t){return t.startsWith(".")||t.includes("/.")}async function zo(...t){let e=join(...t);return await M(e)||await mkdir(e,{recursive:!0}),e}async function Zo(...t){let e=join(...t);return await M(e)&&await rm(e,{recursive:!0}),e}async function Jo(...t){let e=join(...t);if(await M(e))return await readFile(e,"utf-8")}async function Qo(t,e){await writeFile(t,e,"utf-8");}function B(t,e){if(typeof t!="string")throw new TypeError("Expected a string");let r=String(t),n="",s=e?!!e.extended:!1,i=e?!!e.globstar:!1,c=!1,o=e&&typeof e.flags=="string"?e.flags:"",l;for(let g=0,h=r.length;g<h;g++)switch(l=r[g],l){case"/":case"$":case"^":case"+":case".":case"(":case")":case"=":case"!":case"|":n+=`\\${l}`;break;case"?":s&&(n+=".");break;case"[":case"]":s&&(n+=l);break;case"{":s&&(c=!0,n+="(");break;case"}":s&&(c=!1,n+=")");break;case",":c?n+="|":n+=`\\${l}`;break;case"*":{let m=r[g-1],a=1;for(;r[g+1]==="*";)a++,g++;let f=r[g+1];i?a>1&&(m==="/"||m===void 0)&&(f==="/"||f===void 0)?(n+="((?:[^/]*(?:/|$))*)",g++):n+="([^/]*)":n+=".*";}break;default:n+=l;}return (!o||!~o.indexOf("g"))&&(n=`^${n}$`),new RegExp(n,o)}function q(t){try{return statSync(t)}catch{}}function na(t){let{mtimeMs:e,size:r}=q(t)??{};return `${t}|${e}|${r}`}function X(t,e="",r=!0){let n=[],s=readdirSync(resolve(t,e));if(s!=null&&s.length>0)for(let i of s){if(i=join(e,i),r&&N(i))continue;let c=join(t,i),o=q(c);o&&o.isDirectory()?n=n.concat(X(t,i)||[]):n.push(i);}return n}function ia(t={}){let{pattern:e,filter:r,basePath:n=process.cwd(),ignoreHidden:s=!1}=t,i=X(n,"",s);if(i=i.filter(c=>!(s&&(c.startsWith(".")||c.includes("/.")))),e&&(typeof e=="string"&&(e=B(e)),e instanceof RegExp)){let c=e;c.lastIndex=0,i=i.filter(o=>c.test(o));}return r&&(i=i.filter(r)),i}async function te(t){try{return await stat(t)}catch{}}async function fa(t){let{mtimeMs:e,size:r}=await te(t)??{};return `${t}|${e}|${r}`}async function re(t,e="",r=!0){let n=[],s=await readdir(resolve(t,e));if(s!=null&&s.length>0)for(let i of s){if(i=join(e,i),r&&N(i))continue;let c=join(t,i),o=await te(c);o&&o.isDirectory()?n=n.concat(await re(t,i)||[]):n.push(i);}return n}async function ga(t={}){let{pattern:e,filter:r,basePath:n=process.cwd(),ignoreHidden:s=!1}=t,i=await re(n,"",s);if(i=i.filter(c=>!(s&&(c.startsWith(".")||c.includes("/.")))),e&&(typeof e=="string"&&(e=B(e)),e instanceof RegExp)){let c=e;c.lastIndex=0,i=i.filter(o=>c.test(o));}return r&&(i=i.filter(r)),i}var se=class{constructor(e={}){this.store={};this.fileKeys=void 0;this.pretty=!1;this.dirname=resolve(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?w$1(r,null,2):w$1(r)),this.objectFromString=e.objectFromString??(r=>{try{return JSON.parse(r)}catch{}}),this.keyToFilename=e.keyToFilename??Zc;}setItem(e,r){this.store[e]=oc(r);try{let n=this.objectToString(r),s=this.getPath(e);mkdirSync(dirname(s),{recursive:!0}),writeFileSync(s,n,"utf8");}catch{}}getPath(e){return resolve(this.dirname,this.keyToFilename(e)+this.extension)}getBuffer(e){let r=this.getPath(e);return Buffer.from(readFileSync(r))}getItem(e){let r=this.store[e];if(r!==null){if(r!=null)return oc(r);try{let n=this.getPath(e),s=readFileSync(n,"utf8");if(s!=null){let i=this.objectFromString(s);return this.store[e]=i,i}}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);unlinkSync(r);}catch{}}clear(){this.fileKeys=[],this.store={},rmSync(this.dirname,{recursive:!0,force:!0});}allKeys(){if(this.fileKeys==null)try{this.fileKeys=readdirSync(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}};var oe={};function ae(t,e$1={}){let{level:r=void 0,filter:n=void 0,time:s=!0,pretty:i$1=!1}=e$1;t=resolve(process.cwd(),t),mkdirSync(dirname(t),{recursive:!0});let c$1=createWriteStream(t,{flags:"a"}),o=c(n),l=e(r);return g=>{if(!l(g.level)||!o(g.name))return;let h=s?`${new Date().toISOString()} `:"",m=g.name||"",a=oe[m||""];a==null&&(oe[m]=a);let f=[`[${m||"*"}]`,pb(g.messages,{pretty:i$1})];function p(...d){c$1.write(`${d.join(" ")}
|
|
12
|
+
`);}switch(g.level){case i:p(`${h}I|* `,...f);break;case j$1:p(`${h}W|** `,...f);break;case k:p(`${h}E|***`,...f);break;default:p(`${h}D| `,...f);break}}}function ze(t){return typeof t!="string"?[]:t?.split(`
|
|
13
|
+
`).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(Gc)??[]}function le(t){if(t.includes("/node_modules/"))return "";let e="file://";if(t.startsWith(e))return t.substr(e.length);let r=resolve(process.cwd());if(r&&t.startsWith(r))return t.substr(r.length+1);let n=process.env?.HOME?resolve(process.env?.HOME):"";return n&&t.startsWith(n)&&(t=`~/${t.substr(n.length+1)}`),t}function Ze(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 ""}function _(t=2,e=!0){let r=new Error("stack").stack||"",n=ze(r)?.[t];return n&&e&&(n=le(n)),n||""}function fe(){return new Error("stack").stack||""}function ge(t,e=!0){let r="",n=new Error("stack").stack||"";if(typeof n=="string"){let s=n.split(`
|
|
14
|
+
`).map(c=>c.trim()),i=s.findIndex(c=>t.some(o=>c.startsWith(o)));r=s[i+1],r&&(r=Ze(r)),r&&e&&(r=le(r));}return r}function Qe(){try{return gb(process.env.ZEED_COLOR,Je.isatty(process.stdout.fd))}catch{}return !1}var C,ue=[6,2,3,4,5,1];function Ve(t){let e=0;for(let r=0;r<t.length;r++)e=(e<<5)-e+t.charCodeAt(r),e|=0;return ue[Math.abs(e)%ue.length]}var pe={},K;function j(...t){process.stdout.write(`${pb(t)}
|
|
15
|
+
`);}var w={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 de="\x1B[0m";function S(t,e){return `${e===8?w.ORANGE:`\x1B[3${e<8?e:`8;5;${e}`}m`}${t}${de}`}function me(t,e,r=!0){return t.map(n=>{if(typeof n!="string")return n;let s=e,i=de;return r&&(s=`${w.BOLD}${s}`,i=`${i}${w.BOLD}`),`${s}${n}${i}`})}var qe="loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485";function he(t={}){C==null&&(C=Qe()),K==null&&(K=Id());let{level:e$1=void 0,filter:r=void 0,colors:n=C,levelHelper:s=!0,nameBrackets:i$1=!0,padding:c$1=0,fill:o=0,stack:l=!0,time:g=!0}=t,h=c(r),m=e(e$1);return a=>{if(!m(a.level)||!h(a.name))return;let f=Id(),p=a.name||"",d=pe[p||""];d==null&&(d={color:Ve(p)},pe[p]=d);let T=Jd(f-K),u,x=i$1?`[${p}]`:p;if(c$1>0&&(x=x.padStart(c$1," ")),o>0&&(x=x.padEnd(o," ")),n){let b=d.color;u=[`${S(x,b)} | `],a.level===j$1?u.push(...me(a.messages,w.ORANGE)):a.level===k?u.push(...me(a.messages,w.RED)):u.push(...a.messages),g&&u.push(S(`+${T}`,b));}else u=[x,...a.messages],g&&u.push(`+${T}`);if(a.messages?.[0]===qe&&console.log(fe()),l){let b="";typeof l=="boolean"?(b=ge(["at Function.","at null.log (","at log ("],!0),b||(b=_(0,!0))):b=_(typeof l=="number"?l:3,!0),b&&u.push(S(`(${b})`,7));}let v="|",y=".";switch(a.level){case i:s&&(u[0]=`I${v}${y} ${u[0]}`),j(...u);break;case j$1:s&&(u[0]=(n?S(`W${v}${y}${y} `,8):`W${v}${y}${y} `)+u[0]),j(...u);break;case k:s&&(u[0]=(n?S(`E${v}${y}${y}${y} `,1):`E${v}${y}${y}${y} `)+u[0]),j(...u);break;default:s&&(u[0]=`D${v} ${u[0]}`),j(...u);break}}}function Xe(t,e){return p(r=>{let n=[he({padding:32,nameBrackets:!1})],s=process.env.ZEED_LOG??process.env.LOG,i=gb(process.env.ZEED_TIME,!0),c=gb(process.env.ZEED_PRETTY,!1);s&&n.unshift(ae(I(s),{time:i,pretty:c})),r.setHandlers(n);})(t,e)}
|
|
15
16
|
|
|
16
|
-
export { se as FileStorage,
|
|
17
|
+
export { se as FileStorage, Xe as Logger, ae as LoggerFileHandler, he as LoggerNodeHandler, S as colorString, me as colorStringList, zo as ensureFolder, M as exists, ia as files, ga as filesAsync, Mo as getEnvVariableRelaxed, na as getFingerprint, fa as getFingerprintAsync, _ as getSourceLocation, ge as getSourceLocationByPrecedingPattern, fe as getStack, ze as getStackLlocationList, q as getStat, te as getStatAsync, Wo as getWebCrypto, B as globToRegExp, N as isHiddenPath, qe as loggerStackTraceDebug, Fo as parseArgs, Bo as pbcopy, Jo as readText, Zo as removeFolder, _o as setupEnv, Ho as setupWebCrypto, $e as stringToPath, Yo as toHumanReadableFilePath, I as toPath, Le as valueToPath, X as walkSync, re as walkSyncAsync, Qo as writeText };
|
|
17
18
|
//# sourceMappingURL=out.js.map
|
|
18
19
|
//# sourceMappingURL=index.node.js.map
|
package/dist/index.node.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/node/args.ts","../src/node/clipboard.ts","../src/node/crypto.ts","../src/node/env.ts","../src/node/files.ts","../src/node/fs.ts","../src/node/glob.ts","../src/node/files-async.ts","../src/node/filestorage.ts","../src/node/log-file.ts","../src/node/log-node.ts","../src/node/log-util.ts","../src/node/log-context-node.ts"],"names":["parseArgs","config","args","alias","normalize","toCamelCase","booleanArgs","listArgs","numberArgs","nameToAlias","map","curr","name","values","value","opts","setOpt","argList","arg","key","valuePart","pbcopy","data","resolve","reject","spawn","proc","err","nodeCrypto","setupWebCrypto","getWebCrypto","fs","NEWLINE","RE_INI_KEY_VAL","RE_NEWLINES","NEWLINES_MATCH","parse","src","_options","obj","line","idx","keyValueArr","val","end","isDoubleQuoted","stringToPath","defaultValue","valueToPath","toPath","getEnvVariableRelaxed","env","k","v","setupEnv","options","dotenvPath","encoding","debug","parsedEnv","parsedEnvLocal","parsed","e","readdirSync","statSync","join","mkdir","readFile","rm","stat","writeFile","joinPath","toHumanReadableFilePath","path","p","h","exists","isHiddenPath","ensureFolder","parts","removeFolder","readText","writeText","content","globToRegExp","glob","str","reStr","extended","globstar","inGroup","flags","c","i","len","prevChar","starCount","nextChar","getStat","getFingerprint","mtimeMs","size","walkSync","rootFolder","subFolder","ignoreHidden","resultPaths","paths","file","realFile","files","opt","pattern","filter","basePath","rx","readdir","getStatAsync","getFingerprintAsync","walkSyncAsync","filesAsync","mkdirSync","readFileSync","rmSync","unlinkSync","writeFileSync","dirname","FileStorage","jsonStringifySafe","toValidFilename","cloneObject","index","item","keys","createWriteStream","namespaces","LoggerFileHandler","level","time","pretty","stream","matchesNamespace","useNamespaceFilter","matchesLevel","useLevelFilter","msg","timeNow","ninfo","renderMessages","write","LogLevelInfo","LogLevelWarn","LogLevelError","tty","getStackLlocationList","stack","rawLine","m","isNotNull","pathStripCwd","fileURL","cwd","home","extractFileInfo","stackLine","getSourceLocation","stripCwd","getStack","getSourceLocationByPrecedingPattern","patterns","lines","l","shouldUseColor","valueToBoolean","defaultUseColor","colors","nodeSelectColorByName","namespace","hash","startTime","log","TTY_STYLE","colorEnd","colorString","text","colorCode","colorStringList","list","style","bold","start","loggerStackTraceDebug","LoggerNodeHandler","getTimestamp","levelHelper","nameBrackets","padding","fill","timeDiffString","formatMilliseconds","displayName","sep","charLevel","Logger","getGlobalLogger","context","handlers","logFilePath"],"mappings":"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","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('node: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 'node:crypto'\n\nexport function setupWebCrypto() {\n try {\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 }\n catch (err) {\n console.warn('Failed to polyfill webcrypto', err)\n }\n}\n\nexport async function getWebCrypto() {\n if (globalThis.crypto == null) {\n try {\n if (typeof globalThis !== 'undefined' && typeof globalThis.crypto === 'undefined') {\n // https://nodejs.org/api/webcrypto.html\n const nodeCrypto = await import('node:crypto')\n // @ts-expect-error this is a workaround for node environment\n globalThis.crypto = nodeCrypto.webcrypto\n }\n }\n catch (err) {\n console.warn('Failed to polyfill webcrypto', err)\n }\n }\n return globalThis.crypto\n}\n\n// declare namespace NodeJS {\n// interface Global {\n// crypto: Crypto\n// }\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 'node:fs'\nimport { resolve } from 'node:path'\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 // eslint-disable-next-line unused-imports/no-unused-vars\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(`did not match key and value when parsing line ${idx + 1}: ${line}`)\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 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 env[key] = value\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 return { error: e }\n }\n}\n","import { readdirSync, statSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport function getStat(path: string) {\n try {\n return statSync(path)\n }\n catch (err) { }\n}\n\nexport function getFingerprint(path: string) {\n const { mtimeMs, size } = getStat(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport function walkSync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = readdirSync(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = getStat(realFile)\n if (stat && stat.isDirectory())\n resultPaths = resultPaths.concat(walkSync(rootFolder, file) || [])\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport function files(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = walkSync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\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 function isHiddenPath(path: string): boolean {\n return path.startsWith('.') || path.includes('/.')\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","// Original at https://github.com/fitzgen/glob-to-regexp\n\n/*\nCopyright (c) 2013, Nick Fitzgerald\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nexport function globToRegExp(glob: string, opts?: any) {\n if (typeof glob !== 'string')\n throw new TypeError('Expected a string')\n\n const str = String(glob)\n\n // The regexp we are building, as a string.\n let reStr = ''\n\n // Whether we are matching so called \"extended\" globs (like bash) and should\n // support single character matching, matching ranges of characters, group\n // matching, etc.\n const extended = opts ? !!opts.extended : false\n\n // When globstar is _false_ (default), '/foo/*' is translated a regexp like\n // '^\\/foo\\/.*$' which will match any string beginning with '/foo/'\n // When globstar is _true_, '/foo/*' is translated to regexp like\n // '^\\/foo\\/[^/]*$' which will match any string beginning with '/foo/' BUT\n // which does not have a '/' to the right of it.\n // E.g. with '/foo/*' these will match: '/foo/bar', '/foo/bar.txt' but\n // these will not '/foo/bar/baz', '/foo/bar/baz.txt'\n // Lastely, when globstar is _true_, '/foo/**' is equivelant to '/foo/*' when\n // globstar is _false_\n const globstar = opts ? !!opts.globstar : false\n\n // If we are doing extended matching, this boolean is true when we are inside\n // a group (eg {*.html,*.js}), and false otherwise.\n let inGroup = false\n\n // RegExp flags (eg \"i\" ) to pass in to RegExp constructor.\n const flags = (opts && typeof (opts.flags) === 'string') ? opts.flags : ''\n\n let c\n for (let i = 0, len = str.length; i < len; i++) {\n c = str[i]\n\n switch (c) {\n case '/':\n case '$':\n case '^':\n case '+':\n case '.':\n case '(':\n case ')':\n case '=':\n case '!':\n case '|':\n reStr += `\\\\${c}`\n break\n\n case '?':\n if (extended)\n reStr += '.'\n break\n\n case '[':\n case ']':\n if (extended)\n reStr += c\n\n break\n\n case '{':\n if (extended) {\n inGroup = true\n reStr += '('\n }\n break\n\n case '}':\n if (extended) {\n inGroup = false\n reStr += ')'\n }\n break\n\n case ',':\n if (inGroup)\n reStr += '|'\n else\n reStr += `\\\\${c}`\n break\n\n case '*':\n {\n // Move over all consecutive \"*\"'s.\n // Also store the previous and next characters\n const prevChar = str[i - 1]\n let starCount = 1\n while (str[i + 1] === '*') {\n starCount++\n i++\n }\n const nextChar = str[i + 1]\n\n if (!globstar) {\n // globstar is disabled, so treat any number of \"*\" as one\n reStr += '.*'\n }\n else {\n // globstar is enabled, so determine if this is a globstar segment\n const isGlobstar = starCount > 1 // multiple \"*\"'s\n && (prevChar === '/' || prevChar === undefined) // from the start of the segment\n && (nextChar === '/' || nextChar === undefined) // to the end of the segment\n\n if (isGlobstar) {\n // it's a globstar, so match zero or more path segments\n reStr += '((?:[^/]*(?:\\/|$))*)'\n i++ // move over the \"/\"\n }\n else {\n // it's not a globstar, so only match one path segment\n reStr += '([^/]*)'\n }\n }\n }\n break\n\n default:\n reStr += c\n }\n }\n\n // When regexp 'g' flag is specified don't\n // constrain the regular expression with ^ & $\n if (!flags || !~flags.indexOf('g'))\n reStr = `^${reStr}$`\n\n return new RegExp(reStr, flags)\n}\n","import { readdir, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport async function getStatAsync(path: string) {\n try {\n return await stat(path)\n }\n catch (err) { }\n}\n\nexport async function getFingerprintAsync(path: string) {\n const { mtimeMs, size } = await getStatAsync(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport async function walkSyncAsync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = await readdir(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = await getStatAsync(realFile)\n if (stat && stat.isDirectory())\n resultPaths = resultPaths.concat(await walkSyncAsync(rootFolder, file) || [])\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport async function filesAsync(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = await walkSyncAsync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\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 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\nimport type { Json, ObjectStorage } from '../common/types'\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 = opt.objectFromString ?? ((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","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { renderMessages } from '../common/data/convert'\nimport type { LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } 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 LogLevelInfo:\n write(`${timeNow}I|* `, ...args)\n break\n case LogLevelWarn:\n write(`${timeNow}W|** `, ...args)\n break\n case LogLevelError:\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 'node:tty'\nimport { renderMessages, valueToBoolean } from '../common/data/convert'\nimport type { LogHandler, LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } 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 nodeSelectColorByName(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: nodeSelectColorByName(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 === LogLevelWarn)\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n else if (msg.level === LogLevelError)\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 LogLevelInfo:\n if (levelHelper)\n args[0] = `I${sep}${charLevel} ${args[0]}`\n log(...args)\n break\n case LogLevelWarn:\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 LogLevelError:\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 'node: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\nfunction pathStripCwd(path: string) {\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 const cwd = resolve(process.cwd())\n if (cwd && path.startsWith(cwd))\n return path.substr(cwd.length + 1)\n\n const home = process.env?.HOME ? resolve(process.env?.HOME) : ''\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 type { LogLevelAliasType, LoggerInterface } from '../common'\nimport { valueToBoolean } from '../common'\nimport { getGlobalLogger } from '../common/log'\nimport { toPath } from './env'\nimport { LoggerFileHandler } from './log-file'\nimport { LoggerNodeHandler } from './log-node'\n\nexport function Logger(name?: string, level?: LogLevelAliasType): LoggerInterface {\n return getGlobalLogger((context) => {\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 context.setHandlers(handlers)\n })(name, level)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/node/args.ts","../src/node/clipboard.ts","../src/node/crypto.ts","../src/node/env.ts","../src/node/files.ts","../src/node/fs.ts","../src/node/glob.ts","../src/node/files-async.ts","../src/node/filestorage.ts","../src/node/log-file.ts","../src/node/log-node.ts","../src/node/log-util.ts","../src/node/log-context-node.ts"],"names":["parseArgs","config","args","alias","normalize","toCamelCase","booleanArgs","listArgs","numberArgs","nameToAlias","map","curr","name","values","value","opts","setOpt","argList","arg","key","valuePart","pbcopy","data","resolve","reject","spawn","proc","err","nodeCrypto","setupWebCrypto","getWebCrypto","fs","NEWLINE","RE_INI_KEY_VAL","RE_NEWLINES","NEWLINES_MATCH","parse","src","_options","obj","line","idx","keyValueArr","val","end","isDoubleQuoted","stringToPath","defaultValue","valueToPath","toPath","getEnvVariableRelaxed","env","k","v","setupEnv","options","dotenvPath","encoding","debug","parsedEnv","parsedEnvLocal","parsed","e","readdirSync","statSync","join","mkdir","readFile","rm","stat","writeFile","joinPath","toHumanReadableFilePath","path","p","h","exists","isHiddenPath","ensureFolder","parts","removeFolder","readText","writeText","content","globToRegExp","glob","str","reStr","extended","globstar","inGroup","flags","c","i","len","prevChar","starCount","nextChar","getStat","getFingerprint","mtimeMs","size","walkSync","rootFolder","subFolder","ignoreHidden","resultPaths","paths","file","realFile","files","opt","pattern","filter","basePath","rx","readdir","getStatAsync","getFingerprintAsync","walkSyncAsync","filesAsync","mkdirSync","readFileSync","rmSync","unlinkSync","writeFileSync","dirname","Buffer","FileStorage","jsonStringifySafe","toValidFilename","cloneObject","index","item","keys","createWriteStream","namespaces","LoggerFileHandler","level","time","pretty","stream","matchesNamespace","useNamespaceFilter","matchesLevel","useLevelFilter","msg","timeNow","ninfo","renderMessages","write","LogLevelInfo","LogLevelWarn","LogLevelError","tty","getStackLlocationList","stack","rawLine","m","isNotNull","pathStripCwd","fileURL","cwd","home","extractFileInfo","stackLine","getSourceLocation","stripCwd","getStack","getSourceLocationByPrecedingPattern","patterns","lines","l","shouldUseColor","valueToBoolean","defaultUseColor","colors","nodeSelectColorByName","namespace","hash","startTime","log","TTY_STYLE","colorEnd","colorString","text","colorCode","colorStringList","list","style","bold","start","loggerStackTraceDebug","LoggerNodeHandler","getTimestamp","levelHelper","nameBrackets","padding","fill","timeDiffString","formatMilliseconds","displayName","sep","charLevel","Logger","getGlobalLogger","context","handlers","logFilePath"],"mappings":"otFAaO,SAASA,GAAUC,EAAsB,CAAC,EAAG,CAClD,GAAM,CACJ,KAAAC,EAAO,QAAQ,KAAK,MAAM,CAAC,EAC3B,MAAAC,EAAQ,CAAC,EACT,UAAAC,EAAYC,EACZ,YAAAC,EAAc,CAAC,EACf,SAAAC,EAAW,CAAC,EACZ,WAAAC,EAAa,CAAC,CAChB,EAAIP,EAEEQ,EAAc,OAAO,QAAQN,CAAK,EAAE,OAAO,CAACO,EAAKC,IAAS,CAC9D,GAAI,CAACC,EAAMC,CAAM,EAAIF,EACjB,OAAOE,GAAW,WACpBA,EAAS,CAACA,CAAM,GAClB,QAAWC,KAASD,EAClBH,EAAIN,EAAUU,CAAK,CAAC,EAAIV,EAAUQ,CAAI,EAExC,OAAOF,CACT,EAAG,CAAC,CAAQ,EAENK,EAA4B,CAChC,EAAG,CAAC,CACN,EAEA,SAASC,EAAOJ,EAAcE,EAAY,CACpCC,EAAKH,CAAI,GAAK,MAGT,OAAOG,EAAKH,CAAI,GAAM,UAF7BG,EAAKH,CAAI,EAAIE,EAKN,MAAM,QAAQC,EAAKH,CAAI,CAAC,EAC/BG,EAAKH,CAAI,EAAE,KAAKE,CAAK,EAGrBC,EAAKH,CAAI,EAAI,CAACG,EAAKH,CAAI,EAAGE,CAAK,CACnC,CAEA,IAAMG,EAAU,CAAC,GAAGf,CAAI,EACpBgB,EAGJ,KAAQA,EAAMD,EAAQ,MAAM,GAAI,CAC9B,IAAIH,EACJ,GAAI,OAAO,KAAKI,CAAG,EAAG,CACpB,IAAIC,EAAMD,EAAI,QAAQ,OAAQ,EAAE,EAChC,GAAIA,EAAI,SAAS,GAAG,EAAG,CACrB,GAAM,CAACN,EAAMQ,CAAS,EAAID,EAAI,MAAM,IAAK,CAAC,EAC1CA,EAAMP,EAAK,KAAK,EAChBE,EAAQM,EAAU,KAAK,EAEzBD,EAAMf,EAAUe,CAAG,EACnBA,EAAMV,EAAYU,CAAG,GAAKA,EACtBb,EAAY,SAASa,CAAG,EAC1BH,EAAOG,EAAK,EAAI,GAGhBL,EAAQA,GAASG,EAAQ,MAAM,GAAK,GAChCT,EAAW,SAASW,CAAG,IACzBL,EAAQ,OAAOA,GAAS,CAAC,GAEvBP,EAAS,SAASY,CAAG,EACnB,MAAM,QAAQJ,EAAKI,CAAG,CAAC,EACzBJ,EAAKI,CAAG,EAAE,KAAKL,CAAK,EAGpBC,EAAKI,CAAG,EAAI,CAACL,CAAK,EAGpBE,EAAOG,EAAKL,CAAK,QAKrBC,EAAK,EAAE,KAAKG,CAAG,EAInB,OAAOH,CACT,CC3FO,SAASM,GAAOC,EAAc,CACnC,OAAO,IAAI,QACT,CAACC,EAASC,IAAW,CACnB,OAAO,eAAoB,EAAE,KAAK,CAAC,CAAE,MAAAC,CAAM,IAAM,CAC/C,IAAMC,EAAOD,EAAM,QAAQ,EAC3BC,EAAK,GAAG,QAAUC,GAAaH,EAAOG,CAAG,CAAC,EAC1CD,EAAK,GAAG,QAAS,IAAMH,EAAQD,CAAI,CAAC,EACpCI,EAAK,MAAM,MAAMJ,CAAI,EACrBI,EAAK,MAAM,IAAI,CACjB,CAAC,EAAE,MAAM,IAAM,CAAC,CAAC,CACnB,CAAC,CACL,CCXA,OAAOE,MAAgB,SAEhB,SAASC,IAAiB,CAC/B,GAAI,CAEA,OAAO,WAAe,KACnB,OAAO,WAAW,OAAW,KAC7BD,GACAA,EAAW,YAGd,WAAW,OAASA,EAAW,UAEnC,OACOD,EAAP,CACE,QAAQ,KAAK,+BAAgCA,CAAG,CAClD,CACF,CAEA,eAAsBG,IAAe,CACnC,GAAI,WAAW,QAAU,KACvB,GAAI,CACF,GAAI,OAAO,WAAe,KAAe,OAAO,WAAW,OAAW,IAAa,CAEjF,IAAMF,EAAa,KAAM,QAAO,QAAa,EAE7C,WAAW,OAASA,EAAW,UAEnC,OACOD,EAAP,CACE,QAAQ,KAAK,+BAAgCA,CAAG,CAClD,CAEF,OAAO,WAAW,MACpB,CC/BA,OAAOI,MAAQ,KACf,OAAS,WAAAR,OAAe,OAExB,IAAMS,GAAU;AAAA,EACVC,GAAiB,iCACjBC,GAAc,OACdC,GAAiB,aAavB,SAASC,EAAMC,EAAaC,EAAuB,CAAC,EAAG,CACrD,IAAMC,EAA8B,CAAC,EAGrC,cAAOF,CAAG,EACP,MAAMF,EAAc,EAEpB,QAAQ,CAACK,EAAMC,IAAQ,CAEtB,IAAMC,EAAcF,EAAK,MAAMP,EAAc,EAK7C,GAAIS,GAAe,KAAM,CACvB,IAAMvB,EAAMuB,EAAY,CAAC,EAErBC,EAAMD,EAAY,CAAC,GAAK,GACtBE,EAAMD,EAAI,OAAS,EACnBE,EAAiBF,EAAI,CAAC,IAAM,KAAOA,EAAIC,CAAG,IAAM,IAC/BD,EAAI,CAAC,IAAM,KAAQA,EAAIC,CAAG,IAAM,KAGjCC,GACpBF,EAAMA,EAAI,UAAU,EAAGC,CAAG,EAGtBC,IACFF,EAAMA,EAAI,QAAQT,GAAaF,EAAO,IAIxCW,EAAMA,EAAI,KAAK,EAEjBJ,EAAIpB,CAAG,EAAIwB,EAKf,CAAC,EAGIJ,CACT,CAKO,SAASO,GACdhC,EACAiC,EAAe,IACP,CACR,OAAOxB,GAAQ,QAAQ,IAAI,EAAGT,GAASiC,CAAY,CACrD,CAEO,SAASC,GAAYlC,EAAaiC,EAAe,GAAY,CAClE,OAAIjC,GAAS,OACXA,EAAQiC,GACHD,GAAa,OAAOhC,CAAK,EAAE,KAAK,EAAGiC,CAAY,CACxD,CAEO,IAAME,EAASD,GAEf,SAASE,GACdtC,EACAuC,EAAM,QAAQ,IACM,CACpB,GAAIA,EAAIvC,CAAI,GAAK,KACf,OAAOuC,EAAIvC,CAAI,EACjBA,EAAOA,EAAK,YAAY,EACxB,OAAW,CAACwC,EAAGC,CAAC,IAAK,OAAO,QAAQF,CAAG,EACrC,GAAIC,EAAE,YAAY,IAAMxC,EACtB,OAAOyC,CAEb,CAGO,SAASC,GAASC,EAAsB,CAAC,EAAG,CACjD,IAAMC,EACFD,GAAS,MAAQN,EAAOM,GAAS,UAAY,MAAM,EACjDE,EAA2BF,GAAS,UAAY,OAChDG,EAAQH,GAAS,OAAS,GAEhC,GAAI,CAEF,IAAMI,EAAY5B,EAAG,WAAWyB,CAAU,EACtCpB,EAAML,EAAG,aAAayB,EAAY,CAAE,SAAAC,CAAS,CAAC,EAAG,CAAE,MAAAC,CAAM,CAAC,EAC1D,CAAC,EACCE,EAAiB7B,EAAG,WAAW,GAAGyB,SAAkB,EACtDpB,EAAML,EAAG,aAAa,GAAGyB,UAAoB,CAAE,SAAAC,CAAS,CAAC,EAAG,CAAE,MAAAC,CAAM,CAAC,EACrE,CAAC,EAECG,EAAiC,OAAO,OAC5C,CAAC,EACDF,EACAC,CACF,EACMT,EAAMI,GAAS,KAAO,QAAQ,IAEpC,cAAO,QAAQM,CAAM,EAAE,QAAQ,CAAC,CAAC1C,EAAKL,CAAK,IAAM,CAC3C,OAAOyC,GAAS,QAAW,WAC7BpC,EAAMoC,GAAS,OAASpC,GAErB,OAAO,UAAU,eAAe,KAAKgC,EAAKhC,CAAG,GAC5CL,GAAS,OACXqC,EAAIhC,CAAG,EAAIL,EAKjB,CAAC,EACM,CAAE,OAAA+C,CAAO,CAClB,OACOC,EAAP,CACE,MAAO,CAAE,MAAOA,CAAE,CACpB,CACF,CC3IA,OAAS,eAAAC,GAAa,YAAAC,OAAgB,KACtC,OAAS,QAAAC,EAAM,WAAA1C,OAAe,OCD9B,OAAS,SAAA2C,GAAO,YAAAC,GAAU,MAAAC,GAAI,QAAAC,GAAM,aAAAC,OAAiB,cACrD,OAAS,QAAQC,EAAU,aAAAnE,OAAiB,OAErC,SAASoE,GAAwBC,EAAc,CACpD,IAAMC,EAAItE,GAAUqE,CAAI,EAClBE,EAAI,QAAQ,IAAI,KACtB,OAAIA,GAAKD,EAAE,WAAWC,CAAC,EACd,IAAID,EAAE,MAAMC,EAAE,MAAM,IAEtBD,CACT,CAEA,eAAsBE,EAAOH,EAAgC,CAC3D,GAAI,CACF,MAAMJ,GAAKI,CAAI,CACjB,MACA,CACE,MAAO,EACT,CACA,MAAO,EACT,CAEO,SAASI,EAAaJ,EAAuB,CAClD,OAAOA,EAAK,WAAW,GAAG,GAAKA,EAAK,SAAS,IAAI,CACnD,CAEA,eAAsBK,MAAgBC,EAAkC,CACtE,IAAMN,EAAOF,EAAS,GAAGQ,CAAK,EAC9B,OAAM,MAAMH,EAAOH,CAAI,GACrB,MAAMP,GAAMO,EAAM,CAAE,UAAW,EAAK,CAAC,EAEhCA,CACT,CAEA,eAAsBO,MAAgBD,EAAkC,CACtE,IAAMN,EAAOF,EAAS,GAAGQ,CAAK,EAC9B,OAAI,MAAMH,EAAOH,CAAI,GACnB,MAAML,GAAGK,EAAM,CAAE,UAAW,EAAK,CAAC,EAE7BA,CACT,CAEA,eAAsBQ,MACjBF,EAC0B,CAC7B,IAAMN,EAAOF,EAAS,GAAGQ,CAAK,EAC9B,GAAI,MAAMH,EAAOH,CAAI,EACnB,OAAO,MAAMN,GAASM,EAAM,OAAO,CACvC,CAEA,eAAsBS,GAAUT,EAAcU,EAAgC,CAC5E,MAAMb,GAAUG,EAAMU,EAAS,OAAO,CACxC,CCpCO,SAASC,EAAaC,EAActE,EAAY,CACrD,GAAI,OAAOsE,GAAS,SAClB,MAAM,IAAI,UAAU,mBAAmB,EAEzC,IAAMC,EAAM,OAAOD,CAAI,EAGnBE,EAAQ,GAKNC,EAAWzE,EAAO,CAAC,CAACA,EAAK,SAAW,GAWpC0E,EAAW1E,EAAO,CAAC,CAACA,EAAK,SAAW,GAItC2E,EAAU,GAGRC,EAAS5E,GAAQ,OAAQA,EAAK,OAAW,SAAYA,EAAK,MAAQ,GAEpE6E,EACJ,QAASC,EAAI,EAAGC,EAAMR,EAAI,OAAQO,EAAIC,EAAKD,IAGzC,OAFAD,EAAIN,EAAIO,CAAC,EAEDD,EAAG,CACT,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACHL,GAAS,KAAKK,IACd,MAEF,IAAK,IACCJ,IACFD,GAAS,KACX,MAEF,IAAK,IACL,IAAK,IACCC,IACFD,GAASK,GAEX,MAEF,IAAK,IACCJ,IACFE,EAAU,GACVH,GAAS,KAEX,MAEF,IAAK,IACCC,IACFE,EAAU,GACVH,GAAS,KAEX,MAEF,IAAK,IACCG,EACFH,GAAS,IAETA,GAAS,KAAKK,IAChB,MAEF,IAAK,IACH,CAGE,IAAMG,EAAWT,EAAIO,EAAI,CAAC,EACtBG,EAAY,EAChB,KAAOV,EAAIO,EAAI,CAAC,IAAM,KACpBG,IACAH,IAEF,IAAMI,EAAWX,EAAIO,EAAI,CAAC,EAErBJ,EAMgBO,EAAY,IAC7BD,IAAa,KAAOA,IAAa,UACjCE,IAAa,KAAOA,IAAa,SAIjCV,GAAS,sBACTM,KAIAN,GAAS,UAfXA,GAAS,IAkBb,CACA,MAEF,QACEA,GAASK,CACb,CAKF,OAAI,CAACD,GAAS,CAAC,CAACA,EAAM,QAAQ,GAAG,KAC/BJ,EAAQ,IAAIA,MAEP,IAAI,OAAOA,EAAOI,CAAK,CAChC,CF5IO,SAASO,EAAQzB,EAAc,CACpC,GAAI,CACF,OAAOT,GAASS,CAAI,CACtB,MACA,CAAc,CAChB,CAEO,SAAS0B,GAAe1B,EAAc,CAC3C,GAAM,CAAE,QAAA2B,EAAS,KAAAC,CAAK,EAAIH,EAAQzB,CAAI,GAAK,CAAC,EAC5C,MAAO,GAAGA,KAAQ2B,KAAWC,GAC/B,CAEO,SAASC,EAASC,EAAoBC,EAAY,GAAIC,EAAe,GAAM,CAChF,IAAIC,EAAwB,CAAC,EACvBC,EAAQ5C,GAAYxC,GAAQgF,EAAYC,CAAS,CAAC,EACxD,GAAIG,GAAS,MAAQA,EAAM,OAAS,EAClC,QAASC,KAAQD,EAAO,CAEtB,GADAC,EAAO3C,EAAKuC,EAAWI,CAAI,EACvBH,GAAgB5B,EAAa+B,CAAI,EACnC,SACF,IAAMC,EAAW5C,EAAKsC,EAAYK,CAAI,EAChCvC,EAAO6B,EAAQW,CAAQ,EACzBxC,GAAQA,EAAK,YAAY,EAC3BqC,EAAcA,EAAY,OAAOJ,EAASC,EAAYK,CAAI,GAAK,CAAC,CAAC,EAEjEF,EAAY,KAAKE,CAAI,EAG3B,OAAOF,CACT,CAEO,SAASI,GAAMC,EAKlB,CAAC,EAAG,CACN,GAAI,CACF,QAAAC,EACA,OAAAC,EACA,SAAAC,EAAW,QAAQ,IAAI,EACvB,aAAAT,EAAe,EACjB,EAAIM,EAEAJ,EAAQL,EAASY,EAAU,GAAIT,CAAY,EAO/C,GALAE,EAAQA,EAAM,OACZlC,GACE,EAAEgC,IAAiBhC,EAAK,WAAW,GAAG,GAAKA,EAAK,SAAS,IAAI,GACjE,EAEIuC,IACE,OAAOA,GAAY,WACrBA,EAAU5B,EAAa4B,CAAO,GAC5BA,aAAmB,QAAQ,CAC7B,IAAMG,EAAKH,EACXG,EAAG,UAAY,EACfR,EAAQA,EAAM,OAAOlC,GAAQ0C,EAAG,KAAK1C,CAAI,CAAC,EAI9C,OAAIwC,IACFN,EAAQA,EAAM,OAAOM,CAAM,GAEtBN,CACT,CGtEA,OAAS,WAAAS,GAAS,QAAA/C,OAAY,cAC9B,OAAS,QAAAJ,GAAM,WAAA1C,OAAe,OAI9B,eAAsB8F,GAAa5C,EAAc,CAC/C,GAAI,CACF,OAAO,MAAMJ,GAAKI,CAAI,CACxB,MACA,CAAc,CAChB,CAEA,eAAsB6C,GAAoB7C,EAAc,CACtD,GAAM,CAAE,QAAA2B,EAAS,KAAAC,CAAK,EAAI,MAAMgB,GAAa5C,CAAI,GAAK,CAAC,EACvD,MAAO,GAAGA,KAAQ2B,KAAWC,GAC/B,CAEA,eAAsBkB,GAAchB,EAAoBC,EAAY,GAAIC,EAAe,GAAM,CAC3F,IAAIC,EAAwB,CAAC,EACvBC,EAAQ,MAAMS,GAAQ7F,GAAQgF,EAAYC,CAAS,CAAC,EAC1D,GAAIG,GAAS,MAAQA,EAAM,OAAS,EAClC,QAASC,KAAQD,EAAO,CAEtB,GADAC,EAAO3C,GAAKuC,EAAWI,CAAI,EACvBH,GAAgB5B,EAAa+B,CAAI,EACnC,SACF,IAAMC,EAAW5C,GAAKsC,EAAYK,CAAI,EAChCvC,EAAO,MAAMgD,GAAaR,CAAQ,EACpCxC,GAAQA,EAAK,YAAY,EAC3BqC,EAAcA,EAAY,OAAO,MAAMa,GAAchB,EAAYK,CAAI,GAAK,CAAC,CAAC,EAE5EF,EAAY,KAAKE,CAAI,EAG3B,OAAOF,CACT,CAEA,eAAsBc,GAAWT,EAK7B,CAAC,EAAG,CACN,GAAI,CACF,QAAAC,EACA,OAAAC,EACA,SAAAC,EAAW,QAAQ,IAAI,EACvB,aAAAT,EAAe,EACjB,EAAIM,EAEAJ,EAAQ,MAAMY,GAAcL,EAAU,GAAIT,CAAY,EAO1D,GALAE,EAAQA,EAAM,OACZlC,GACE,EAAEgC,IAAiBhC,EAAK,WAAW,GAAG,GAAKA,EAAK,SAAS,IAAI,GACjE,EAEIuC,IACE,OAAOA,GAAY,WACrBA,EAAU5B,EAAa4B,CAAO,GAC5BA,aAAmB,QAAQ,CAC7B,IAAMG,EAAKH,EACXG,EAAG,UAAY,EACfR,EAAQA,EAAM,OAAOlC,GAAQ0C,EAAG,KAAK1C,CAAI,CAAC,EAI9C,OAAIwC,IACFN,EAAQA,EAAM,OAAOM,CAAM,GAEtBN,CACT,CCpEA,OACE,aAAAc,GACA,gBAAAC,GACA,eAAA3D,GACA,UAAA4D,GACA,cAAAC,GACA,iBAAAC,OACK,KACP,OAAS,WAAAC,GAAS,WAAAvG,OAAe,OACjC,OAAS,UAAAwG,OAAc,SAehB,IAAMC,GAAN,KAAwD,CAW7D,YAAYjB,EAA0B,CAAC,EAAG,CAV1C,KAAQ,MAAkC,CAAC,EAE3C,KAAQ,SAAsB,OAC9B,KAAQ,OAAS,GAQf,KAAK,QAAUxF,GAAQ,QAAQ,IAAI,EAAGwF,EAAI,MAAQ,cAAc,EAChE,KAAK,OAAS,CAAC,CAACA,EAAI,OACpB,KAAK,UAAYA,EAAI,WAAa,QAE9BA,EAAI,WAAa,CAAC,KAAK,UAAU,WAAW,GAAG,IACjD,KAAK,UAAY,IAAI,KAAK,aAE5B,KAAK,gBAAkB,KAAK,UAAU,OAEtC,KAAK,eACDA,EAAI,iBACDzF,GACI,KAAK,OACR2G,EAAkB3G,EAAM,KAAM,CAAC,EAC/B2G,EAAkB3G,CAAI,GAG9B,KAAK,iBAAmByF,EAAI,mBAAsBzF,GAAiB,CACjE,GAAI,CACF,OAAO,KAAK,MAAMA,CAAI,CACxB,MACA,CAEA,CACF,GAEA,KAAK,cAAgByF,EAAI,eAAiBmB,CAC5C,CAEA,QAAQ/G,EAAaL,EAAgB,CACnC,KAAK,MAAMK,CAAG,EAAIgH,EAAYrH,CAAK,EACnC,GAAI,CACF,IAAMQ,EAAO,KAAK,eAAeR,CAAK,EAChC2D,EAAO,KAAK,QAAQtD,CAAG,EAC7BsG,GAAUK,GAAQrD,CAAI,EAAG,CAAE,UAAW,EAAK,CAAC,EAC5CoD,GAAcpD,EAAMnD,EAAM,MAAM,CAClC,MACA,CAEA,CACF,CAEA,QAAQH,EAAqB,CAC3B,OAAOI,GAAQ,KAAK,QAAS,KAAK,cAAcJ,CAAG,EAAI,KAAK,SAAS,CACvE,CAEA,UAAUA,EAAqB,CAC7B,IAAMsD,EAAO,KAAK,QAAQtD,CAAG,EAC7B,OAAO4G,GAAO,KAAKL,GAAajD,CAAI,CAAC,CACvC,CAEA,QAAQtD,EAA4B,CAClC,IAAML,EAAQ,KAAK,MAAMK,CAAG,EAG5B,GAAIL,IAAU,KAGd,IAAIA,GAAS,KACX,OAAOqH,EAAYrH,CAAK,EAE1B,GAAI,CACF,IAAM2D,EAAO,KAAK,QAAQtD,CAAG,EACvBG,EAAOoG,GAAajD,EAAM,MAAM,EACtC,GAAInD,GAAQ,KAAM,CAChB,IAAMR,EAAQ,KAAK,iBAAiBQ,CAAI,EACxC,YAAK,MAAMH,CAAG,EAAIL,EACXA,EAEX,MACA,CAEE,KAAK,MAAMK,CAAG,EAAI,IACpB,EACF,CAEA,WAAWA,EAAmB,CAE5B,GADA,OAAO,KAAK,MAAMA,CAAG,EACjB,KAAK,UAAY,KAAM,CACzB,IAAMiH,EAAgB,KAAK,SAAS,QAAQjH,CAAG,EAC3CiH,IAAU,IACZ,KAAK,SAAS,OAAOA,EAAO,CAAC,EAEjC,GAAI,CACF,IAAM3D,EAAO,KAAK,QAAQtD,CAAG,EAC7ByG,GAAWnD,CAAI,CACjB,MACA,CAAa,CACf,CAEA,OAAc,CACZ,KAAK,SAAW,CAAC,EACjB,KAAK,MAAQ,CAAC,EACdkD,GAAO,KAAK,QAAS,CAAE,UAAW,GAAM,MAAO,EAAK,CAAC,CACvD,CAEA,SAAoB,CAClB,GAAI,KAAK,UAAY,KACnB,GAAI,CACF,KAAK,SACD5D,GAAY,KAAK,QAAS,CAAE,cAAe,EAAK,CAAC,EAChD,OACCsE,GACE,CAACA,EAAK,YAAY,GAAKA,EAAK,KAAK,SAAS,KAAK,SAAS,CAC5D,EACC,IAAIA,GAAQA,EAAK,KAAK,MAAM,EAAG,CAAC,KAAK,eAAe,CAAC,GAAK,CAAC,CAClE,MACA,CAAa,CAEf,IAAMC,EAAO,CAAC,GAAI,KAAK,UAAY,CAAC,CAAE,EACtC,QAAWnH,KAAO,OAAO,KAAK,KAAK,KAAK,EACjCmH,EAAK,SAASnH,CAAG,GACpBmH,EAAK,KAAKnH,CAAG,EAEjB,OAAAmH,EAAK,KAAK,EACHA,CACT,CACF,ECzJA,OAAS,qBAAAC,GAAmB,aAAAd,OAAiB,KAC7C,OAAS,WAAAK,GAAS,WAAAvG,OAAe,OAMjC,IAAMiH,GAAkC,CAAC,EAElC,SAASC,GAAkBhE,EAAcsC,EAAyB,CAAC,EAAG,CAC3E,GAAM,CACJ,MAAA2B,EAAQ,OACR,OAAAzB,EAAS,OACT,KAAA0B,EAAO,GACP,OAAAC,EAAS,EACX,EAAI7B,EACJtC,EAAOlD,GAAQ,QAAQ,IAAI,EAAGkD,CAAI,EAClCgD,GAAUK,GAAQrD,CAAI,EAAG,CAAE,UAAW,EAAK,CAAC,EAC5C,IAAMoE,EAASN,GAAkB9D,EAAM,CAAE,MAAO,GAAI,CAAC,EAC/CqE,EAAmBC,EAAmB9B,CAAM,EAC5C+B,EAAeC,EAAeP,CAAK,EACzC,OAAQQ,GAAoB,CAG1B,GAFI,CAACF,EAAaE,EAAI,KAAK,GAEvB,CAACJ,EAAiBI,EAAI,IAAI,EAC5B,OAEF,IAAMC,EAAUR,EAAO,GAAG,IAAI,KAAK,EAAE,YAAY,KAAO,GAClD/H,EAAOsI,EAAI,MAAQ,GACnBE,EAAQZ,GAAW5H,GAAQ,EAAE,EAC/BwI,GAAS,OACXZ,GAAW5H,CAAI,EAAIwI,GAErB,IAAMlJ,EAAiB,CACrB,IAAIU,GAAQ,OACZyI,EAAeH,EAAI,SAAU,CAAE,OAAAN,CAAO,CAAC,CACzC,EAEA,SAASU,KAASpJ,EAAsB,CACtC2I,EAAO,MAAM,GAAG3I,EAAK,KAAK,GAAI;AAAA,CAAK,CACrC,CAEA,OAAQgJ,EAAI,MAAO,CACjB,KAAKK,EACHD,EAAM,GAAGH,SAAgB,GAAGjJ,CAAI,EAChC,MACF,KAAKsJ,EACHF,EAAM,GAAGH,SAAgB,GAAGjJ,CAAI,EAChC,MACF,KAAKuJ,EACHH,EAAM,GAAGH,SAAgB,GAAGjJ,CAAI,EAChC,MACF,QACEoJ,EAAM,GAAGH,SAAgB,GAAGjJ,CAAI,EAChC,KACJ,CACF,CACF,CCzDA,OAAOwJ,OAAS,MCAhB,OAAS,WAAAnI,OAAe,OAGjB,SAASoI,GAAsBC,EAAyB,CAC7D,OAAI,OAAOA,GAAU,SACZ,CAAC,EAGRA,GAAO,MAAM;AAAA,CAAI,EAAE,IAAKC,GAAY,CAClC,IAAMC,EAAID,EAAQ,MAChB,kDACF,EACA,GAAIC,EAAG,CACL,IAAItH,EAAOsH,EAAE,CAAC,GAAKA,EAAE,CAAC,GAAKA,EAAE,CAAC,EAC9B,OAAItH,EAAK,SAAS,GAAG,IACnBA,EAAOA,EAAK,MAAM,EAAG,EAAE,GAClBA,EAGX,CAAC,GAAG,OAAOuH,CAAS,GAAK,CAAC,CAE9B,CAEA,SAASC,GAAavF,EAAc,CAClC,GAAIA,EAAK,SAAS,gBAAgB,EAChC,MAAO,GAET,IAAMwF,EAAU,UAChB,GAAIxF,EAAK,WAAWwF,CAAO,EACzB,OAAOxF,EAAK,OAAOwF,EAAQ,MAAM,EAEnC,IAAMC,EAAM3I,GAAQ,QAAQ,IAAI,CAAC,EACjC,GAAI2I,GAAOzF,EAAK,WAAWyF,CAAG,EAC5B,OAAOzF,EAAK,OAAOyF,EAAI,OAAS,CAAC,EAEnC,IAAMC,EAAO,QAAQ,KAAK,KAAO5I,GAAQ,QAAQ,KAAK,IAAI,EAAI,GAC9D,OAAI4I,GAAQ1F,EAAK,WAAW0F,CAAI,IAC9B1F,EAAO,KAAKA,EAAK,OAAO0F,EAAK,OAAS,CAAC,KAElC1F,CACT,CAEA,SAAS2F,GAAgBC,EAA2B,CAClD,IAAMP,EAAIO,EAAU,MAAM,kDAAkD,EAC5E,GAAIP,EAAG,CACL,IAAItH,EAAOsH,EAAE,CAAC,GAAKA,EAAE,CAAC,GAAKA,EAAE,CAAC,EAC9B,OAAItH,EAAK,SAAS,GAAG,IACnBA,EAAOA,EAAK,MAAM,EAAG,EAAE,GAClBA,EAET,MAAO,EACT,CAUO,SAAS8H,EAAkB5B,EAAQ,EAAG6B,EAAW,GAAc,CACpE,IAAMX,EAAQ,IAAI,MAAM,OAAO,EAAE,OAAS,GACtCpH,EAA2BmH,GAAsBC,CAAK,IAAIlB,CAAK,EACnE,OAAIlG,GAAQ+H,IACV/H,EAAOwH,GAAaxH,CAAI,GAEnBA,GAAQ,EACjB,CAEO,SAASgI,IAAmB,CACjC,OAAO,IAAI,MAAM,OAAO,EAAE,OAAS,EACrC,CAEO,SAASC,GACdC,EACAH,EAAW,GACX,CACA,IAAI/H,EAAO,GACLoH,EAAQ,IAAI,MAAM,OAAO,EAAE,OAAS,GAC1C,GAAI,OAAOA,GAAU,SAAU,CAC7B,IAAMe,EAAQf,EAAM,MAAM;AAAA,CAAI,EAAE,IAAIgB,GAAKA,EAAE,KAAK,CAAC,EAE3CxC,EAAQuC,EAAM,UAAUC,GAAKF,EAAS,KAAKhG,GAAKkG,EAAE,WAAWlG,CAAC,CAAC,CAAC,EACtElC,EAAOmI,EAAMvC,EAAQ,CAAC,EAClB5F,IACFA,EAAO4H,GAAgB5H,CAAI,GAEzBA,GAAQ+H,IACV/H,EAAOwH,GAAaxH,CAAI,GAE5B,OAAOA,CACT,CDpFA,SAASqI,IAA0B,CACjC,GAAI,CACF,OAAOC,EAAe,QAAQ,IAAI,WAAYpB,GAAI,OAAO,QAAQ,OAAO,EAAE,CAAC,CAC7E,MACA,CAAa,CACb,MAAO,EACT,CAEA,IAAIqB,EAEEC,GAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,CAAC,EAEhC,SAASC,GAAsBC,EAAmB,CAChD,IAAIC,EAAO,EACX,QAAStF,EAAI,EAAGA,EAAIqF,EAAU,OAAQrF,IACpCsF,GAAQA,GAAQ,GAAKA,EAAOD,EAAU,WAAWrF,CAAC,EAClDsF,GAAQ,EAEV,OAAOH,GAAO,KAAK,IAAIG,CAAI,EAAIH,GAAO,MAAM,CAC9C,CAEA,IAAMxC,GAAkC,CAAC,EAErC4C,EAEJ,SAASC,KAAOnL,EAAa,CAC3B,QAAQ,OAAO,MAAM,GAAGmJ,EAAenJ,CAAI;AAAA,CAAK,CAClD,CAcA,IAAMoL,EAAY,CAChB,KAAM,UACN,OAAQ,UACR,IAAK,WACL,MAAO,WACP,KAAM,WACN,OAAQ,WACR,KAAM,WACN,OAAQ,iBACR,QAAS,SACX,EAWA,IAAMC,GAAW,UAEV,SAASC,EAAYC,EAAcC,EAAmB,CAI3D,MAAO,GAHYA,IAAc,EAC7BJ,EAAU,OACV,SAAWI,EAAY,EAAIA,EAAY,OAAOA,SAC3BD,IAAOF,IAChC,CAEO,SAASI,GACdC,EACAC,EACAC,EAAO,GACP,CACA,OAAOF,EAAK,IAAK9K,GAAU,CACzB,GAAI,OAAOA,GAAU,SACnB,OAAOA,EACT,IAAIiL,EAAQF,EACRjJ,EAAM2I,GACV,OAAIO,IACFC,EAAQ,GAAGT,EAAU,OAAOS,IAC5BnJ,EAAM,GAAGA,IAAM0I,EAAU,QAEpB,GAAGS,IAAQjL,IAAQ8B,GAC5B,CAAC,CACH,CAEO,IAAMoJ,GAAwB,iEAE9B,SAASC,GAAkBlF,EAAyB,CAAC,EAAe,CACrEgE,GAAmB,OACrBA,EAAkBF,GAAe,GAE/BO,GAAa,OACfA,EAAYc,EAAa,GAE3B,GAAM,CACJ,MAAAxD,EAAQ,OACR,OAAAzB,EAAS,OACT,OAAA+D,EAASD,EACT,YAAAoB,EAAc,GACd,aAAAC,EAAe,GACf,QAAAC,EAAU,EACV,KAAAC,EAAO,EACP,MAAA1C,EAAQ,GACR,KAAAjB,EAAO,EACT,EAAI5B,EACE+B,EAAmBC,EAAmB9B,CAAM,EAC5C+B,EAAeC,EAAeP,CAAK,EACzC,OAAQQ,GAAoB,CAG1B,GAFI,CAACF,EAAaE,EAAI,KAAK,GAEvB,CAACJ,EAAiBI,EAAI,IAAI,EAC5B,OACF,IAAMC,EAAU+C,EAAa,EACvBtL,EAAOsI,EAAI,MAAQ,GACrBE,EAAQZ,GAAW5H,GAAQ,EAAE,EAC7BwI,GAAS,OACXA,EAAQ,CACN,MAAO6B,GAAsBrK,CAAI,CAEnC,EACA4H,GAAW5H,CAAI,EAAIwI,GAErB,IAAMmD,EAAiBC,EAAmBrD,EAAUiC,CAAU,EAE1DlL,EAEAuM,EAAcL,EAAe,IAAIxL,KAAUA,EAQ/C,GANIyL,EAAU,IACZI,EAAcA,EAAY,SAASJ,EAAS,GAAG,GAE7CC,EAAO,IACTG,EAAcA,EAAY,OAAOH,EAAM,GAAG,GAExCtB,EAAQ,CACV,IAAMpF,EAAIwD,EAAM,MAChBlJ,EAAO,CAAC,GAAGsL,EAAYiB,EAAa7G,CAAC,MAAM,EACvCsD,EAAI,QAAUM,EAChBtJ,EAAK,KAAK,GAAGyL,GAAgBzC,EAAI,SAAUoC,EAAU,MAAM,CAAC,EACrDpC,EAAI,QAAUO,EACrBvJ,EAAK,KAAK,GAAGyL,GAAgBzC,EAAI,SAAUoC,EAAU,GAAG,CAAC,EAEzDpL,EAAK,KAAK,GAAGgJ,EAAI,QAAQ,EACvBP,GACFzI,EAAK,KAAKsL,EAAY,IAAIe,IAAkB3G,CAAC,CAAC,OAGhD1F,EAAO,CAACuM,EAAa,GAAGvD,EAAI,QAAQ,EAChCP,GACFzI,EAAK,KAAK,IAAIqM,GAAgB,EAQlC,GALIrD,EAAI,WAAW,CAAC,IAAM8C,IAExB,QAAQ,IAAIxB,GAAS,CAAC,EAGpBZ,EAAO,CACT,IAAIpH,EAAO,GACP,OAAOoH,GAAU,WACnBpH,EAAOiI,GACL,CAAC,eAAgB,gBAAiB,UAAU,EAC5C,EACF,EACKjI,IACHA,EAAO8H,EAAkB,EAAG,EAAI,IAIlC9H,EAAO8H,EADO,OAAOV,GAAU,SAAWA,EAAQ,EAClB,EAAI,EAElCpH,GACFtC,EAAK,KAAKsL,EAAY,IAAIhJ,KAAS,CAAU,CAAC,EAElD,IAAMkK,EAAM,IACNC,EAAY,IAElB,OAAQzD,EAAI,MAAO,CACjB,KAAKK,EACC4C,IACFjM,EAAK,CAAC,EAAI,IAAIwM,IAAMC,OAAezM,EAAK,CAAC,KAC3CmL,EAAI,GAAGnL,CAAI,EACX,MACF,KAAKsJ,EACC2C,IACFjM,EAAK,CAAC,GAAK8K,EACPQ,EAAY,IAAIkB,IAAMC,IAAYA,MAAe,CAAY,EAC7D,IAAID,IAAMC,IAAYA,OAAiBzM,EAAK,CAAC,GAEnDmL,EAAI,GAAGnL,CAAI,EACX,MACF,KAAKuJ,EACC0C,IACFjM,EAAK,CAAC,GAAK8K,EACPQ,EAAY,IAAIkB,IAAMC,IAAYA,IAAYA,KAAc,CAAS,EACrE,IAAID,IAAMC,IAAYA,IAAYA,MAAgBzM,EAAK,CAAC,GAE9DmL,EAAI,GAAGnL,CAAI,EACX,MACF,QACMiM,IACFjM,EAAK,CAAC,EAAI,IAAIwM,QAAUxM,EAAK,CAAC,KAChCmL,EAAI,GAAGnL,CAAI,EACX,KACJ,CACF,CACF,CErNO,SAAS0M,GAAOhM,EAAe8H,EAA4C,CAChF,OAAOmE,EAAiBC,GAAY,CAClC,IAAMC,EAAW,CACfd,GAAkB,CAChB,QAAS,GACT,aAAc,EAEhB,CAAC,CACH,EAEMe,EAAc,QAAQ,IAAI,UAAY,QAAQ,IAAI,IAClDrE,EAAOmC,EAAe,QAAQ,IAAI,UAAW,EAAI,EACjDlC,EAASkC,EAAe,QAAQ,IAAI,YAAa,EAAK,EACxDkC,GACFD,EAAS,QAAQtE,GAAkBxF,EAAO+J,CAAW,EAAG,CAAE,KAAArE,EAAM,OAAAC,CAAO,CAAC,CAAC,EAE3EkE,EAAQ,YAAYC,CAAQ,CAC9B,CAAC,EAAEnM,EAAM8H,CAAK,CAChB","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('node: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 'node:crypto'\n\nexport function setupWebCrypto() {\n try {\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 }\n catch (err) {\n console.warn('Failed to polyfill webcrypto', err)\n }\n}\n\nexport async function getWebCrypto() {\n if (globalThis.crypto == null) {\n try {\n if (typeof globalThis !== 'undefined' && typeof globalThis.crypto === 'undefined') {\n // https://nodejs.org/api/webcrypto.html\n const nodeCrypto = await import('node:crypto')\n // @ts-expect-error this is a workaround for node environment\n globalThis.crypto = nodeCrypto.webcrypto\n }\n }\n catch (err) {\n console.warn('Failed to polyfill webcrypto', err)\n }\n }\n return globalThis.crypto\n}\n\n// declare namespace NodeJS {\n// interface Global {\n// crypto: Crypto\n// }\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 'node:fs'\nimport { resolve } from 'node:path'\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 // eslint-disable-next-line unused-imports/no-unused-vars\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(`did not match key and value when parsing line ${idx + 1}: ${line}`)\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 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 env[key] = value\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 return { error: e }\n }\n}\n","import { readdirSync, statSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport function getStat(path: string) {\n try {\n return statSync(path)\n }\n catch (err) { }\n}\n\nexport function getFingerprint(path: string) {\n const { mtimeMs, size } = getStat(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport function walkSync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = readdirSync(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = getStat(realFile)\n if (stat && stat.isDirectory())\n resultPaths = resultPaths.concat(walkSync(rootFolder, file) || [])\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport function files(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = walkSync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\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 function isHiddenPath(path: string): boolean {\n return path.startsWith('.') || path.includes('/.')\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","// Original at https://github.com/fitzgen/glob-to-regexp\n\n/*\nCopyright (c) 2013, Nick Fitzgerald\n\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\n Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\n\nexport function globToRegExp(glob: string, opts?: any) {\n if (typeof glob !== 'string')\n throw new TypeError('Expected a string')\n\n const str = String(glob)\n\n // The regexp we are building, as a string.\n let reStr = ''\n\n // Whether we are matching so called \"extended\" globs (like bash) and should\n // support single character matching, matching ranges of characters, group\n // matching, etc.\n const extended = opts ? !!opts.extended : false\n\n // When globstar is _false_ (default), '/foo/*' is translated a regexp like\n // '^\\/foo\\/.*$' which will match any string beginning with '/foo/'\n // When globstar is _true_, '/foo/*' is translated to regexp like\n // '^\\/foo\\/[^/]*$' which will match any string beginning with '/foo/' BUT\n // which does not have a '/' to the right of it.\n // E.g. with '/foo/*' these will match: '/foo/bar', '/foo/bar.txt' but\n // these will not '/foo/bar/baz', '/foo/bar/baz.txt'\n // Lastely, when globstar is _true_, '/foo/**' is equivelant to '/foo/*' when\n // globstar is _false_\n const globstar = opts ? !!opts.globstar : false\n\n // If we are doing extended matching, this boolean is true when we are inside\n // a group (eg {*.html,*.js}), and false otherwise.\n let inGroup = false\n\n // RegExp flags (eg \"i\" ) to pass in to RegExp constructor.\n const flags = (opts && typeof (opts.flags) === 'string') ? opts.flags : ''\n\n let c\n for (let i = 0, len = str.length; i < len; i++) {\n c = str[i]\n\n switch (c) {\n case '/':\n case '$':\n case '^':\n case '+':\n case '.':\n case '(':\n case ')':\n case '=':\n case '!':\n case '|':\n reStr += `\\\\${c}`\n break\n\n case '?':\n if (extended)\n reStr += '.'\n break\n\n case '[':\n case ']':\n if (extended)\n reStr += c\n\n break\n\n case '{':\n if (extended) {\n inGroup = true\n reStr += '('\n }\n break\n\n case '}':\n if (extended) {\n inGroup = false\n reStr += ')'\n }\n break\n\n case ',':\n if (inGroup)\n reStr += '|'\n else\n reStr += `\\\\${c}`\n break\n\n case '*':\n {\n // Move over all consecutive \"*\"'s.\n // Also store the previous and next characters\n const prevChar = str[i - 1]\n let starCount = 1\n while (str[i + 1] === '*') {\n starCount++\n i++\n }\n const nextChar = str[i + 1]\n\n if (!globstar) {\n // globstar is disabled, so treat any number of \"*\" as one\n reStr += '.*'\n }\n else {\n // globstar is enabled, so determine if this is a globstar segment\n const isGlobstar = starCount > 1 // multiple \"*\"'s\n && (prevChar === '/' || prevChar === undefined) // from the start of the segment\n && (nextChar === '/' || nextChar === undefined) // to the end of the segment\n\n if (isGlobstar) {\n // it's a globstar, so match zero or more path segments\n reStr += '((?:[^/]*(?:\\/|$))*)'\n i++ // move over the \"/\"\n }\n else {\n // it's not a globstar, so only match one path segment\n reStr += '([^/]*)'\n }\n }\n }\n break\n\n default:\n reStr += c\n }\n }\n\n // When regexp 'g' flag is specified don't\n // constrain the regular expression with ^ & $\n if (!flags || !~flags.indexOf('g'))\n reStr = `^${reStr}$`\n\n return new RegExp(reStr, flags)\n}\n","import { readdir, stat } from 'node:fs/promises'\nimport { join, resolve } from 'node:path'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport async function getStatAsync(path: string) {\n try {\n return await stat(path)\n }\n catch (err) { }\n}\n\nexport async function getFingerprintAsync(path: string) {\n const { mtimeMs, size } = await getStatAsync(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport async function walkSyncAsync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = await readdir(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = await getStatAsync(realFile)\n if (stat && stat.isDirectory())\n resultPaths = resultPaths.concat(await walkSyncAsync(rootFolder, file) || [])\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport async function filesAsync(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = await walkSyncAsync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\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 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { Buffer } from 'node:buffer'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\nimport type { Json, ObjectStorage } from '../common/types'\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 = opt.objectFromString ?? ((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","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { renderMessages } from '../common/data/convert'\nimport type { LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } 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 LogLevelInfo:\n write(`${timeNow}I|* `, ...args)\n break\n case LogLevelWarn:\n write(`${timeNow}W|** `, ...args)\n break\n case LogLevelError:\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 'node:tty'\nimport { renderMessages, valueToBoolean } from '../common/data/convert'\nimport type { LogHandler, LogHandlerOptions, LogMessage } from '../common/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } 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 nodeSelectColorByName(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: nodeSelectColorByName(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 === LogLevelWarn)\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n else if (msg.level === LogLevelError)\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 LogLevelInfo:\n if (levelHelper)\n args[0] = `I${sep}${charLevel} ${args[0]}`\n log(...args)\n break\n case LogLevelWarn:\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 LogLevelError:\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 'node: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\nfunction pathStripCwd(path: string) {\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 const cwd = resolve(process.cwd())\n if (cwd && path.startsWith(cwd))\n return path.substr(cwd.length + 1)\n\n const home = process.env?.HOME ? resolve(process.env?.HOME) : ''\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 type { LogLevelAliasType, LoggerInterface } from '../common'\nimport { valueToBoolean } from '../common'\nimport { getGlobalLogger } from '../common/log'\nimport { toPath } from './env'\nimport { LoggerFileHandler } from './log-file'\nimport { LoggerNodeHandler } from './log-node'\n\nexport function Logger(name?: string, level?: LogLevelAliasType): LoggerInterface {\n return getGlobalLogger((context) => {\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 context.setHandlers(handlers)\n })(name, level)\n}\n"]}
|
|
@@ -176,7 +176,7 @@ declare function encodeBase62(bin: BinInput, padding?: number): string;
|
|
|
176
176
|
declare function decodeBase62(s: string, padding?: number): Uint8Array;
|
|
177
177
|
declare function estimateSizeForBase(bytes: number, base: number): number;
|
|
178
178
|
|
|
179
|
-
declare
|
|
179
|
+
declare function toCamelCase(s: string): string;
|
|
180
180
|
declare function toCapitalize(s: string): string;
|
|
181
181
|
declare function toCapitalizeWords(s: string): string;
|
|
182
182
|
declare function fromCamelCase(str: string, separator?: string): string;
|
|
@@ -310,8 +310,8 @@ interface Options {
|
|
|
310
310
|
*/
|
|
311
311
|
declare function diffObjects(obj: Record<string, any> | any[], newObj: Record<string, any> | any[], options?: Partial<Options>, _stack?: Record<string, any>[]): Difference[];
|
|
312
312
|
|
|
313
|
-
declare
|
|
314
|
-
declare
|
|
313
|
+
declare function escapeHTML(s: string): string;
|
|
314
|
+
declare function unescapeHTML(s: string): string;
|
|
315
315
|
|
|
316
316
|
type Primitive = null | undefined | string | number | boolean | symbol | bigint;
|
|
317
317
|
declare function isObject(obj: unknown): obj is object;
|
|
@@ -410,8 +410,8 @@ declare function toValidFilename(string: string, replacement?: string): string |
|
|
|
410
410
|
declare function escapeRegExp(value: RegExp | string): string;
|
|
411
411
|
|
|
412
412
|
type RoundingMode = (value: number) => number;
|
|
413
|
-
declare
|
|
414
|
-
declare
|
|
413
|
+
declare function isHalf(value: number): boolean;
|
|
414
|
+
declare function isEven(value: number): boolean;
|
|
415
415
|
declare const roundUp: RoundingMode;
|
|
416
416
|
declare const roundDown: RoundingMode;
|
|
417
417
|
declare const roundHalfUp: RoundingMode;
|
|
@@ -746,7 +746,7 @@ interface MessageHub {
|
|
|
746
746
|
listen<L extends MessageDefinitions>(newHandlers: L): void;
|
|
747
747
|
send<L extends MessageDefinitions>(): MessagesMethods<L>;
|
|
748
748
|
}
|
|
749
|
-
declare
|
|
749
|
+
declare function createPromiseProxy<P extends object>(fn: (name: string, args: any[], opt: any) => Promise<unknown>, opt: MessagesOptions, predefinedMethods?: any): P;
|
|
750
750
|
/**
|
|
751
751
|
* RPC
|
|
752
752
|
*
|
|
@@ -788,11 +788,9 @@ declare function usePubSub<L extends ListenerSignature<L> = DefaultListener>(opt
|
|
|
788
788
|
|
|
789
789
|
type ArgumentsType<T> = T extends (...args: infer A) => any ? A : never;
|
|
790
790
|
type ReturnType$1<T> = T extends (...args: any) => infer R ? R : never;
|
|
791
|
-
interface
|
|
791
|
+
interface RPCOptionsBasic {
|
|
792
792
|
/** No return values expected */
|
|
793
793
|
onlyEvents?: boolean;
|
|
794
|
-
/** Names of remote functions that do not need response. */
|
|
795
|
-
eventNames?: (keyof Remote)[];
|
|
796
794
|
/** Function to post raw message */
|
|
797
795
|
post: (data: any) => void;
|
|
798
796
|
/** Listener to receive raw message */
|
|
@@ -802,6 +800,10 @@ interface RPCOptions<Remote> {
|
|
|
802
800
|
/** Custom function to deserialize data */
|
|
803
801
|
deserialize?: (data: any) => any;
|
|
804
802
|
}
|
|
803
|
+
interface RPCOptions<Remote> extends RPCOptionsBasic {
|
|
804
|
+
/** Names of remote functions that do not need response. */
|
|
805
|
+
eventNames?: (keyof Remote)[];
|
|
806
|
+
}
|
|
805
807
|
interface RPCFn<T> {
|
|
806
808
|
/** Call the remote function and wait for the result. */
|
|
807
809
|
(...args: ArgumentsType<T>): Promise<Awaited<ReturnType$1<T>>>;
|
|
@@ -812,6 +814,7 @@ type RPCReturn<RemoteFunctions> = {
|
|
|
812
814
|
[K in keyof RemoteFunctions]: RPCFn<RemoteFunctions[K]>;
|
|
813
815
|
};
|
|
814
816
|
declare function useRPC<RemoteFunctions = {}, LocalFunctions = {}>(functions: LocalFunctions, options: RPCOptions<RemoteFunctions>): RPCReturn<RemoteFunctions>;
|
|
817
|
+
declare function useRPCHub(options: RPCOptionsBasic): <RemoteFunctions = {}, LocalFunctions = {}>(additionalFunctions?: LocalFunctions | undefined, additionalEventNames?: string[]) => RPCReturn<RemoteFunctions>;
|
|
815
818
|
|
|
816
819
|
interface ProgressOptions {
|
|
817
820
|
totalUnits?: number;
|
|
@@ -1223,16 +1226,16 @@ declare class MemStorage<T = Json> implements ObjectStorage<T> {
|
|
|
1223
1226
|
/**
|
|
1224
1227
|
* @returns Timestamp in miliseconds
|
|
1225
1228
|
*/
|
|
1226
|
-
declare
|
|
1229
|
+
declare function getTimestamp(): number;
|
|
1227
1230
|
declare function formatMilliseconds(ms: number): string;
|
|
1228
1231
|
declare function parseDate(...dateCandidates: (string | Date)[]): Date | undefined;
|
|
1229
1232
|
/**
|
|
1230
1233
|
* @returns Timestamp in miliseconds
|
|
1231
1234
|
*/
|
|
1232
|
-
declare
|
|
1235
|
+
declare function getPerformanceTimestamp(): number;
|
|
1233
1236
|
declare function duration(): () => string;
|
|
1234
1237
|
|
|
1235
|
-
declare
|
|
1238
|
+
declare function noop(): void;
|
|
1236
1239
|
|
|
1237
1240
|
declare function uuidBytes(): Uint8Array;
|
|
1238
1241
|
declare function uuidB62(bytes?: Uint8Array): string;
|
|
@@ -1274,4 +1277,4 @@ declare function uuidIsValid(uuid: string): boolean;
|
|
|
1274
1277
|
declare function uname(name?: string): string;
|
|
1275
1278
|
declare function qid(): string;
|
|
1276
1279
|
|
|
1277
|
-
export { _useBase as $, arrayUnion as A, BinaryEncoder as B, CRYPTO_DEFAULT_HASH_ALG as C, arrayFlatten as D, arrayIntersection as E, arraySymmetricDifference as F, arrayRemoveElement as G, arraySetElement as H, arrayFilterInPlace as I, Json as J, arrayToggleInPlace as K, LogHandlerOptions as L, arrayEmptyInPlace as M, arraySorted as N, ObjectStorage as O, arraySortedNumbers as P, arrayIsEqual as Q, arrayShuffleInPlace as R, arrayShuffle as S, arrayShuffleForce as T, arrayRandomElement as U, arrayMax as V, arrayMin as W, arraySum as X, arrayAvg as Y, arrayBatches as Z, createArray as _, LogHandler as a, dayFromDateGMT as a$, useBase as a0, encodeBase32 as a1, decodeBase32 as a2, encodeBase16 as a3, decodeBase16 as a4, encodeBase58 as a5, decodeBase58 as a6, encodeBase62 as a7, decodeBase62 as a8, estimateSizeForBase as a9, valueToFloat as aA, valueToString as aB, toFloat as aC, toInt as aD, toString as aE, toBool as aF, RenderMessagesOptions as aG, formatMessages as aH, renderMessages as aI, fixBrokenUth8String as aJ, dataUriToUint8Array as aK, dataUriToMimeType as aL, dataUriToBlob as aM, blobToDataUri as aN, Uint8ArrayToDataUri as aO, DAY_MS as aP, DayValue as aQ, DayInput as aR, dayYear as aS, dayMonth as aT, dayDay as aU, dayToParts as aV, dayToDate as aW, dayFromToday as aX, dayFromAny as aY, dayToDateGMT as aZ, dayFromDate as a_, BinInput as aa, _encodeUtf8Polyfill as ab, _decodeUtf8Polyfill as ac, stringToUInt8Array as ad, Uint8ArrayToString as ae, toUint8Array as af, joinToUint8Array as ag, toHex as ah, fromHex as ai, toBase64 as aj, toBase64Url as ak, fromBase64 as al, fromBase64String as am, equalBinary as an, jsonToUint8Array as ao, Uint8ArrayToJson as ap, Uint8ArrayToHexDump as aq, toCamelCase as ar, toCapitalize as as, toCapitalizeWords as at, fromCamelCase as au, stringToBoolean as av, stringToInteger as aw, stringToFloat as ax, valueToBoolean as ay, valueToInteger as az, LogLevelAliasType as b, randomFloat as b$, dayToTimestamp as b0, dayFromTimestamp as b1, dayToString as b2, dayFromParts as b3, dayFromString as b4, dayMonthStart as b5, dayYearStart as b6, dayOffset as b7, dayDiff as b8, dayRange as b9, isRecordPlain as bA, isString as bB, isNumber as bC, isInteger as bD, isSafeInteger as bE, isBoolean as bF, isNullOrUndefined as bG, isNull as bH, isUint8Array as bI, isNotNull as bJ, isEmpty as bK, isNotEmpty as bL, isValue as bM, isTruthy as bN, jsonStringifySorted as bO, jsonStringifySafe as bP, jsonStringify as bQ, FilterFunction as bR, MapperFunction as bS, listQuery as bT, listGroupBy as bU, listDistinctUnion as bV, listOfKey as bW, getSecureRandom as bX, getSecureRandomIfPossible as bY, randomBoolean as bZ, randomInt as b_, dayIterator as ba, DayInputLegacy as bb, Day as bc, forEachDay as bd, today as be, day as bf, dateStringToDays as bg, DecimalValue as bh, DecimalInput as bi, decimal as bj, decimalFromCents as bk, decimalToCents as bl, decimalCentsPart as bm, deepEqual as bn, deepStripUndefinedInPlace as bo, deepMerge as bp, DifferenceType as bq, Difference as br, diffObjects as bs, escapeHTML as bt, unescapeHTML as bu, Primitive as bv, isObject as bw, isPrimitive as bx, isArray as by, isRecord as bz, LoggerInterface as c, useMutex as c$, between as c0, sum as c1, avg as c2, isPrimeRX as c3, isPrime as c4, seededRandom as c5, objectMap as c6, objectMergeDisposable as c7, objectIsEmpty as c8, parseOrderby as c9, ensureKey as cA, ensureKeyAsync as cB, size as cC, first as cD, last as cE, empty as cF, cloneObject as cG, cloneJsonObject as cH, memoize as cI, memoizeAsync as cJ, forTimes as cK, regExpString as cL, regExpEscape as cM, XRX as cN, DisposerFunction as cO, Disposer as cP, Disposable as cQ, useDispose as cR, UseDispose as cS, useDisposer as cT, useDefer as cU, UseDefer as cV, useTimeout as cW, useInterval as cX, useEventListener as cY, Mutex as cZ, AsyncMutex as c_, composeOrderby as ca, cmp as cb, sortedOrderby as cc, toValidFilename as cd, escapeRegExp as ce, RoundingMode as cf, isHalf as cg, isEven as ch, roundUp as ci, roundDown as cj, roundHalfUp as ck, roundHalfOdd as cl, roundHalfAwayFromZero as cm, roundHalfDown as cn, roundHalfEven as co, roundHalfTowardsZero as cp, SortableItem as cq, startSortWeight as cr, endSortWeight as cs, moveSortWeight as ct, sortedItems as cu, useSorted as cv, linkifyPlainText as cw, toHumanReadableUrl as cx, encodeQuery as cy, parseQuery as cz, assert as d, JsonEncoder as d$, useAsyncMutex as d0, PoolTaskIdConflictResolution as d1, PoolConfig as d2, PoolTaskFn as d3, PoolTaskState as d4, PoolTask as d5, PoolTaskEvents as d6, usePool as d7, Progress as d8, createPromise as d9, LogLevelFatal as dA, LogLevelOff as dB, LogLevelAlias as dC, LogLevelAliasKey as dD, LogMessage as dE, LoggerContextInterface as dF, LoggerContext as dG, browserSelectColorByName as dH, LoggerConsoleHandler as dI, getNamespaceFilterString as dJ, useNamespaceFilter as dK, parseLogLevel as dL, useLevelFilter as dM, LoggerMemoryHandler as dN, ChannelMessageEvent as dO, Channel as dP, LocalChannel as dQ, createLocalChannelPair as dR, EmitterHandler as dS, EmitterAllHandler as dT, ListenerSignature as dU, DefaultListener as dV, Emitter as dW, getGlobalEmitter as dX, lazyListener as dY, Encoder as dZ, NoopEncoder as d_, sleep as da, immediate as db, timeout as dc, isTimeout as dd, tryTimeout as de, waitOn as df, isPromise as dg, promisify as dh, AsyncReturnType as di, TaskFn as dj, TaskEvents as dk, SerialQueue as dl, throttle as dm, debounce as dn, getGlobalContext as dp, isLocalHost as dq, getGlobalLogger as dr, getGlobalLoggerIfExists as ds, DefaultLogger as dt, LogLevel as du, LogLevelAll as dv, LogLevelDebug as dw, LogLevelInfo as dx, LogLevelWarn as dy, LogLevelError as dz, assertCondition as e,
|
|
1280
|
+
export { _useBase as $, arrayUnion as A, BinaryEncoder as B, CRYPTO_DEFAULT_HASH_ALG as C, arrayFlatten as D, arrayIntersection as E, arraySymmetricDifference as F, arrayRemoveElement as G, arraySetElement as H, arrayFilterInPlace as I, Json as J, arrayToggleInPlace as K, LogHandlerOptions as L, arrayEmptyInPlace as M, arraySorted as N, ObjectStorage as O, arraySortedNumbers as P, arrayIsEqual as Q, arrayShuffleInPlace as R, arrayShuffle as S, arrayShuffleForce as T, arrayRandomElement as U, arrayMax as V, arrayMin as W, arraySum as X, arrayAvg as Y, arrayBatches as Z, createArray as _, LogHandler as a, dayFromDateGMT as a$, useBase as a0, encodeBase32 as a1, decodeBase32 as a2, encodeBase16 as a3, decodeBase16 as a4, encodeBase58 as a5, decodeBase58 as a6, encodeBase62 as a7, decodeBase62 as a8, estimateSizeForBase as a9, valueToFloat as aA, valueToString as aB, toFloat as aC, toInt as aD, toString as aE, toBool as aF, RenderMessagesOptions as aG, formatMessages as aH, renderMessages as aI, fixBrokenUth8String as aJ, dataUriToUint8Array as aK, dataUriToMimeType as aL, dataUriToBlob as aM, blobToDataUri as aN, Uint8ArrayToDataUri as aO, DAY_MS as aP, DayValue as aQ, DayInput as aR, dayYear as aS, dayMonth as aT, dayDay as aU, dayToParts as aV, dayToDate as aW, dayFromToday as aX, dayFromAny as aY, dayToDateGMT as aZ, dayFromDate as a_, BinInput as aa, _encodeUtf8Polyfill as ab, _decodeUtf8Polyfill as ac, stringToUInt8Array as ad, Uint8ArrayToString as ae, toUint8Array as af, joinToUint8Array as ag, toHex as ah, fromHex as ai, toBase64 as aj, toBase64Url as ak, fromBase64 as al, fromBase64String as am, equalBinary as an, jsonToUint8Array as ao, Uint8ArrayToJson as ap, Uint8ArrayToHexDump as aq, toCamelCase as ar, toCapitalize as as, toCapitalizeWords as at, fromCamelCase as au, stringToBoolean as av, stringToInteger as aw, stringToFloat as ax, valueToBoolean as ay, valueToInteger as az, LogLevelAliasType as b, randomFloat as b$, dayToTimestamp as b0, dayFromTimestamp as b1, dayToString as b2, dayFromParts as b3, dayFromString as b4, dayMonthStart as b5, dayYearStart as b6, dayOffset as b7, dayDiff as b8, dayRange as b9, isRecordPlain as bA, isString as bB, isNumber as bC, isInteger as bD, isSafeInteger as bE, isBoolean as bF, isNullOrUndefined as bG, isNull as bH, isUint8Array as bI, isNotNull as bJ, isEmpty as bK, isNotEmpty as bL, isValue as bM, isTruthy as bN, jsonStringifySorted as bO, jsonStringifySafe as bP, jsonStringify as bQ, FilterFunction as bR, MapperFunction as bS, listQuery as bT, listGroupBy as bU, listDistinctUnion as bV, listOfKey as bW, getSecureRandom as bX, getSecureRandomIfPossible as bY, randomBoolean as bZ, randomInt as b_, dayIterator as ba, DayInputLegacy as bb, Day as bc, forEachDay as bd, today as be, day as bf, dateStringToDays as bg, DecimalValue as bh, DecimalInput as bi, decimal as bj, decimalFromCents as bk, decimalToCents as bl, decimalCentsPart as bm, deepEqual as bn, deepStripUndefinedInPlace as bo, deepMerge as bp, DifferenceType as bq, Difference as br, diffObjects as bs, escapeHTML as bt, unescapeHTML as bu, Primitive as bv, isObject as bw, isPrimitive as bx, isArray as by, isRecord as bz, LoggerInterface as c, useMutex as c$, between as c0, sum as c1, avg as c2, isPrimeRX as c3, isPrime as c4, seededRandom as c5, objectMap as c6, objectMergeDisposable as c7, objectIsEmpty as c8, parseOrderby as c9, ensureKey as cA, ensureKeyAsync as cB, size as cC, first as cD, last as cE, empty as cF, cloneObject as cG, cloneJsonObject as cH, memoize as cI, memoizeAsync as cJ, forTimes as cK, regExpString as cL, regExpEscape as cM, XRX as cN, DisposerFunction as cO, Disposer as cP, Disposable as cQ, useDispose as cR, UseDispose as cS, useDisposer as cT, useDefer as cU, UseDefer as cV, useTimeout as cW, useInterval as cX, useEventListener as cY, Mutex as cZ, AsyncMutex as c_, composeOrderby as ca, cmp as cb, sortedOrderby as cc, toValidFilename as cd, escapeRegExp as ce, RoundingMode as cf, isHalf as cg, isEven as ch, roundUp as ci, roundDown as cj, roundHalfUp as ck, roundHalfOdd as cl, roundHalfAwayFromZero as cm, roundHalfDown as cn, roundHalfEven as co, roundHalfTowardsZero as cp, SortableItem as cq, startSortWeight as cr, endSortWeight as cs, moveSortWeight as ct, sortedItems as cu, useSorted as cv, linkifyPlainText as cw, toHumanReadableUrl as cx, encodeQuery as cy, parseQuery as cz, assert as d, JsonEncoder as d$, useAsyncMutex as d0, PoolTaskIdConflictResolution as d1, PoolConfig as d2, PoolTaskFn as d3, PoolTaskState as d4, PoolTask as d5, PoolTaskEvents as d6, usePool as d7, Progress as d8, createPromise as d9, LogLevelFatal as dA, LogLevelOff as dB, LogLevelAlias as dC, LogLevelAliasKey as dD, LogMessage as dE, LoggerContextInterface as dF, LoggerContext as dG, browserSelectColorByName as dH, LoggerConsoleHandler as dI, getNamespaceFilterString as dJ, useNamespaceFilter as dK, parseLogLevel as dL, useLevelFilter as dM, LoggerMemoryHandler as dN, ChannelMessageEvent as dO, Channel as dP, LocalChannel as dQ, createLocalChannelPair as dR, EmitterHandler as dS, EmitterAllHandler as dT, ListenerSignature as dU, DefaultListener as dV, Emitter as dW, getGlobalEmitter as dX, lazyListener as dY, Encoder as dZ, NoopEncoder as d_, sleep as da, immediate as db, timeout as dc, isTimeout as dd, tryTimeout as de, waitOn as df, isPromise as dg, promisify as dh, AsyncReturnType as di, TaskFn as dj, TaskEvents as dk, SerialQueue as dl, throttle as dm, debounce as dn, getGlobalContext as dp, isLocalHost as dq, getGlobalLogger as dr, getGlobalLoggerIfExists as ds, DefaultLogger as dt, LogLevel as du, LogLevelAll as dv, LogLevelDebug as dw, LogLevelInfo as dx, LogLevelWarn as dy, LogLevelError as dz, assertCondition as e, uuidIsValid as e$, CryptoEncoder as e0, MessageAction as e1, MessageResult as e2, Message as e3, MessagesOptions as e4, MessagesDefaultMethods as e5, MessagesMethods as e6, MessageDefinitions as e7, MessageHub as e8, createPromiseProxy as e9, MemStorage as eA, getTimestamp as eB, formatMilliseconds as eC, parseDate as eD, getPerformanceTimestamp as eE, duration as eF, NestedArray as eG, noop as eH, uuidBytes as eI, uuidB62 as eJ, uuidEncodeB62 as eK, uuidDecodeB62 as eL, uuidB32 as eM, uuidEncodeB32 as eN, uuidDecodeB32 as eO, uuidv4 as eP, uuidEncodeV4 as eQ, uuidDecodeV4 as eR, suidBytes as eS, suid as eT, suidDate as eU, suidBytesDate as eV, uuid32bit as eW, setUuidDefaultEncoding as eX, uuid as eY, uuidDecode as eZ, uuidEncode as e_, useMessageHub as ea, PubSub as eb, usePubSub as ec, ArgumentsType as ed, ReturnType$1 as ee, RPCOptionsBasic as ef, RPCOptions as eg, RPCFn as eh, RPCReturn as ei, useRPC as ej, useRPCHub as ek, httpMethod as el, parseBasicAuth as em, fetchBasic as en, fetchJson as eo, fetchText as ep, fetchOptionsFormURLEncoded as eq, fetchOptionsJson as er, fetchOptionsBasicAuth as es, getWindow as et, getNavigator as eu, getGlobal as ev, detect as ew, isBrowser as ex, useExitHandler as ey, MemStorageOptions as ez, fatal as f, uname as f0, qid as f1, encodeJson as g, decodeJson as h, createBinaryStreamEncoder as i, createBinaryStreamDecoder as j, bitfield as k, blobToArrayBuffer as l, blobToUint8Array as m, CRYPTO_DEFAULT_ALG as n, CRYPTO_DEFAULT_DERIVE_ALG as o, CRYPTO_DEFAULT_DERIVE_ITERATIONS as p, digest as q, randomUint8Array as r, deriveKeyPbkdf2 as s, encrypt as t, decrypt as u, csvStringify as v, csvParse as w, csvParseToObjects as x, arrayUnique as y, arrayMinus as z };
|