zeed 0.13.21 → 0.13.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/dist/{chunk-LJ2C27PI.js → chunk-YSSQ27P5.js} +7 -7
- package/dist/chunk-YSSQ27P5.js.map +1 -0
- package/dist/index.all.d.cts +2 -1
- package/dist/index.all.d.ts +2 -1
- package/dist/index.browser.cjs +157 -156
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.d.cts +2 -2
- 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 +162 -161
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.d.cts +2 -2
- package/dist/index.node.d.ts +2 -2
- package/dist/index.node.js +8 -8
- package/dist/index.node.js.map +1 -1
- package/dist/{uuid-c28d44c0.d.ts → uuid-23c16c7c.d.ts} +2 -1
- package/package.json +1 -1
- package/dist/chunk-LJ2C27PI.js.map +0 -1
package/dist/index.node.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as Json, O as ObjectStorage, L as LogHandlerOptions,
|
|
2
|
-
export {
|
|
1
|
+
import { J as Json, O as ObjectStorage, L as LogHandlerOptions, dL as LogMessage, a as LogHandler, b as LogLevelAliasType, c as LoggerInterface } from './uuid-23c16c7c.js';
|
|
2
|
+
export { em as ArgumentsType, d5 as AsyncMutex, dq as AsyncReturnType, ab 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, dX as Channel, dW as ChannelMessageEvent, e9 as CryptoEncoder, aW as DAY_MS, aR as Day, aY as DayInput, aQ as DayInputLegacy, aX as DayValue, bj as DecimalInput, bi as DecimalValue, e1 as DefaultListener, dA as DefaultLogger, bs as Difference, br as DifferenceType, cY as Disposer, cX as DisposerFunction, e3 as Emitter, d$ as EmitterAllHandler, d_ as EmitterHandler, e2 as EmitterSubscriberOptions, e6 as Encoder, bS as FilterFunction, e8 as JsonEncoder, e0 as ListenerSignature, dY as LocalChannel, dB as LogLevel, dJ as LogLevelAlias, dK as LogLevelAliasKey, dC as LogLevelAll, dD as LogLevelDebug, dG as LogLevelError, dH as LogLevelFatal, dE as LogLevelInfo, dI as LogLevelOff, dF as LogLevelWarn, dO as LoggerConsoleHandler, dP as LoggerContext, dM as LoggerContextInterface, dV as LoggerMemoryHandler, bT as MapperFunction, eK as MemStorage, eJ as MemStorageOptions, ec as Message, ea as MessageAction, eg as MessageDefinitions, eh as MessageHub, eb as MessageResult, ee as MessagesDefaultMethods, ef as MessagesMethods, ed as MessagesOptions, d4 as Mutex, eQ as NestedArray, e7 as NoopEncoder, d9 as PoolConfig, dc as PoolTask, dd as PoolTaskEvents, da as PoolTaskFn, d8 as PoolTaskIdConflictResolution, db as PoolTaskState, bw as Primitive, df as Progress, ek as PubSub, eq as RPCFn, ep as RPCOptions, eo as RPCOptionsBasic, er as RPCReturn, aH as RenderMessagesOptions, en as ReturnType, cg as RoundingMode, dt as SerialQueue, cr as SortableItem, ds as TaskEvents, dr as TaskFn, aP as Uint8ArrayToDataUri, ar as Uint8ArrayToHexDump, aq as Uint8ArrayToJson, af as Uint8ArrayToString, cN as Uint8ArrayToWords, cW as UseDefer, cU as UseDispose, cS as UseDisposeConfig, d3 as UseDisposeWithUtils, eu as UseRPCHubType, cR as XRX, ad as _decodeUtf8Polyfill, ac as _encodeUtf8Polyfill, a0 as _useBase, Z as arrayAvg, _ as arrayBatches, M as arrayEmptyInPlace, I as arrayFilterInPlace, D as arrayFlatten, E as arrayIntersection, R as arrayIsEqual, W as arrayMax, X as arrayMin, z as arrayMinus, V as arrayRandomElement, G as arrayRemoveElement, N as arraySetArrayInPlace, H as arraySetElement, T as arrayShuffle, U as arrayShuffleForce, S as arrayShuffleInPlace, P as arraySorted, Q as arraySortedNumbers, Y as arraySum, F as arraySymmetricDifference, K as arrayToggleInPlace, A as arrayUnion, y as arrayUnique, d as assert, e as assertCondition, c3 as avg, c1 as between, k as bitfield, l as blobToArrayBuffer, aO as blobToDataUri, m as blobToUint8Array, dN as browserSelectColorByName, cJ as cloneJsonObject, cI as cloneObject, cc as cmp, cb as composeOrderby, $ as createArray, j as createBinaryStreamDecoder, i as createBinaryStreamEncoder, dZ as createLocalChannelPair, dg as createPromise, ei as createPromiseProxy, w as csvParse, x as csvParseToObjects, v as csvStringify, aN as dataUriToBlob, aM as dataUriToMimeType, aL as dataUriToUint8Array, aV as dateStringToDays, aU as day, a$ as dayDay, bf as dayDiff, b3 as dayFromAny, b5 as dayFromDate, b6 as dayFromDateGMT, ba as dayFromParts, bb as dayFromString, b8 as dayFromTimestamp, b2 as dayFromToday, bh as dayIterator, a_ as dayMonth, bc as dayMonthStart, be as dayOffset, bg as dayRange, b1 as dayToDate, b4 as dayToDateGMT, b0 as dayToParts, b9 as dayToString, b7 as dayToTimestamp, aZ as dayYear, bd as dayYearStart, dv as debounce, cx as deburr, bk as decimal, bn as decimalCentsPart, bl as decimalFromCents, bm as decimalToCents, a5 as decodeBase16, a3 as decodeBase32, a7 as decodeBase58, a9 as decodeBase62, h as decodeJson, u as decrypt, bo as deepEqual, bq as deepMerge, bp as deepStripUndefinedInPlace, s as deriveKeyPbkdf2, eG as detect, bt as diffObjects, q as digest, eP as duration, cH as empty, a4 as encodeBase16, a2 as encodeBase32, a6 as encodeBase58, a8 as encodeBase62, g as encodeJson, cA as encodeQuery, t as encrypt, ct as endSortWeight, cC as ensureKey, cD as ensureKeyAsync, ao as equalBinary, bu as escapeHTML, cf as escapeRegExp, aa as estimateSizeForBase, f as fatal, ex as fetchBasic, ey as fetchJson, eC as fetchOptionsBasicAuth, eA as fetchOptionsFormURLEncoded, eB as fetchOptionsJson, ez as fetchText, cF as first, aK as fixBrokenUth8String, aS as forEachDay, cM as forTimes, aI as formatMessages, eM as formatMilliseconds, am as fromBase64, an as fromBase64String, av as fromCamelCase, aj as fromHex, eF as getGlobal, dw as getGlobalContext, e4 as getGlobalEmitter, dy as getGlobalLogger, dz as getGlobalLoggerIfExists, dQ as getNamespaceFilterString, eE as getNavigator, eO as getPerformanceTimestamp, bY as getSecureRandom, bZ as getSecureRandomIfPossible, eL as getTimestamp, eD as getWindow, ev as httpMethod, di as immediate, bz as isArray, bG as isBoolean, eH as isBrowser, bL as isEmpty, ci as isEven, ch as isHalf, bE as isInteger, dx as isLocalHost, bM as isNotEmpty, bK as isNotNull, bI as isNull, bH as isNullOrUndefined, bD as isNumber, bx as isObject, c5 as isPrime, c4 as isPrimeRX, by as isPrimitive, dn as isPromise, bA as isRecord, bB as isRecordPlain, bF as isSafeInteger, bC as isString, dk as isTimeout, bO as isTruthy, bJ as isUint8Array, bN as isValue, dU as joinLogStrings, ah as joinToUint8Array, bR as jsonStringify, bQ as jsonStringifySafe, bP as jsonStringifySorted, ap as jsonToUint8Array, cG as last, e5 as lazyListener, cy as linkifyPlainText, bW as listDistinctUnion, bV as listGroupBy, bX as listOfKey, bU as listQuery, cK as memoize, cL as memoizeAsync, cu as moveSortWeight, eR as noop, c9 as objectIsEmpty, c7 as objectMap, c8 as objectMergeDisposable, ew as parseBasicAuth, eN as parseDate, dS as parseLogLevel, ca as parseOrderby, cB as parseQuery, dp as promisify, fb as qid, b_ as randomBoolean, c0 as randomFloat, b$ as randomInt, r as randomUint8Array, cQ as regExpEscape, cP as regExpString, aJ as renderMessages, ck as roundDown, cn as roundHalfAwayFromZero, co as roundHalfDown, cp as roundHalfEven, cm as roundHalfOdd, cq as roundHalfTowardsZero, cl as roundHalfUp, cj as roundUp, c6 as seededRandom, f5 as setUuidDefaultEncoding, cE as size, dh as sleep, cv as sortedItems, cd as sortedOrderby, cs as startSortWeight, aw as stringToBoolean, ay as stringToFloat, ax as stringToInteger, ae as stringToUInt8Array, f1 as suid, f0 as suidBytes, f3 as suidBytesDate, f2 as suidDate, c2 as sum, du as throttle, dj as timeout, ak as toBase64, al as toBase64Url, aG as toBool, as as toCamelCase, at as toCapitalize, au as toCapitalizeWords, aD as toFloat, ai as toHex, cz as toHumanReadableUrl, aE as toInt, aF as toString, ag as toUint8Array, ce as toValidFilename, aT as today, dl as tryTimeout, fa as uname, bv as unescapeHTML, d7 as useAsyncMutex, a1 as useBase, cV as useDefer, cT as useDispose, d2 as useDisposeWithUtils, d0 as useEventListener, d1 as useEventListenerOnce, eI as useExitHandler, c_ as useInterval, c$ as useIntervalPause, dT as useLevelFilter, ej as useMessageHub, d6 as useMutex, dR as useNamespaceFilter, de as usePool, el as usePubSub, es as useRPC, et as useRPCHub, cw as useSorted, cZ as useTimeout, f6 as uuid, f4 as uuid32bit, eW as uuidB32, eT as uuidB62, eS as uuidBytes, f7 as uuidDecode, eY as uuidDecodeB32, eV as uuidDecodeB62, e$ as uuidDecodeV4, f8 as uuidEncode, eX as uuidEncodeB32, eU as uuidEncodeB62, e_ as uuidEncodeV4, f9 as uuidIsValid, eZ as uuidv4, az as valueToBoolean, aB as valueToFloat, aA as valueToInteger, aC as valueToString, dm as waitOn, cO as wordsToUint8Array } from './uuid-23c16c7c.js';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { Buffer } from 'node:buffer';
|
|
5
5
|
|
package/dist/index.node.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { J as Json, O as ObjectStorage, L as LogHandlerOptions,
|
|
2
|
-
export {
|
|
1
|
+
import { J as Json, O as ObjectStorage, L as LogHandlerOptions, dL as LogMessage, a as LogHandler, b as LogLevelAliasType, c as LoggerInterface } from './uuid-23c16c7c.js';
|
|
2
|
+
export { em as ArgumentsType, d5 as AsyncMutex, dq as AsyncReturnType, ab 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, dX as Channel, dW as ChannelMessageEvent, e9 as CryptoEncoder, aW as DAY_MS, aR as Day, aY as DayInput, aQ as DayInputLegacy, aX as DayValue, bj as DecimalInput, bi as DecimalValue, e1 as DefaultListener, dA as DefaultLogger, bs as Difference, br as DifferenceType, cY as Disposer, cX as DisposerFunction, e3 as Emitter, d$ as EmitterAllHandler, d_ as EmitterHandler, e2 as EmitterSubscriberOptions, e6 as Encoder, bS as FilterFunction, e8 as JsonEncoder, e0 as ListenerSignature, dY as LocalChannel, dB as LogLevel, dJ as LogLevelAlias, dK as LogLevelAliasKey, dC as LogLevelAll, dD as LogLevelDebug, dG as LogLevelError, dH as LogLevelFatal, dE as LogLevelInfo, dI as LogLevelOff, dF as LogLevelWarn, dO as LoggerConsoleHandler, dP as LoggerContext, dM as LoggerContextInterface, dV as LoggerMemoryHandler, bT as MapperFunction, eK as MemStorage, eJ as MemStorageOptions, ec as Message, ea as MessageAction, eg as MessageDefinitions, eh as MessageHub, eb as MessageResult, ee as MessagesDefaultMethods, ef as MessagesMethods, ed as MessagesOptions, d4 as Mutex, eQ as NestedArray, e7 as NoopEncoder, d9 as PoolConfig, dc as PoolTask, dd as PoolTaskEvents, da as PoolTaskFn, d8 as PoolTaskIdConflictResolution, db as PoolTaskState, bw as Primitive, df as Progress, ek as PubSub, eq as RPCFn, ep as RPCOptions, eo as RPCOptionsBasic, er as RPCReturn, aH as RenderMessagesOptions, en as ReturnType, cg as RoundingMode, dt as SerialQueue, cr as SortableItem, ds as TaskEvents, dr as TaskFn, aP as Uint8ArrayToDataUri, ar as Uint8ArrayToHexDump, aq as Uint8ArrayToJson, af as Uint8ArrayToString, cN as Uint8ArrayToWords, cW as UseDefer, cU as UseDispose, cS as UseDisposeConfig, d3 as UseDisposeWithUtils, eu as UseRPCHubType, cR as XRX, ad as _decodeUtf8Polyfill, ac as _encodeUtf8Polyfill, a0 as _useBase, Z as arrayAvg, _ as arrayBatches, M as arrayEmptyInPlace, I as arrayFilterInPlace, D as arrayFlatten, E as arrayIntersection, R as arrayIsEqual, W as arrayMax, X as arrayMin, z as arrayMinus, V as arrayRandomElement, G as arrayRemoveElement, N as arraySetArrayInPlace, H as arraySetElement, T as arrayShuffle, U as arrayShuffleForce, S as arrayShuffleInPlace, P as arraySorted, Q as arraySortedNumbers, Y as arraySum, F as arraySymmetricDifference, K as arrayToggleInPlace, A as arrayUnion, y as arrayUnique, d as assert, e as assertCondition, c3 as avg, c1 as between, k as bitfield, l as blobToArrayBuffer, aO as blobToDataUri, m as blobToUint8Array, dN as browserSelectColorByName, cJ as cloneJsonObject, cI as cloneObject, cc as cmp, cb as composeOrderby, $ as createArray, j as createBinaryStreamDecoder, i as createBinaryStreamEncoder, dZ as createLocalChannelPair, dg as createPromise, ei as createPromiseProxy, w as csvParse, x as csvParseToObjects, v as csvStringify, aN as dataUriToBlob, aM as dataUriToMimeType, aL as dataUriToUint8Array, aV as dateStringToDays, aU as day, a$ as dayDay, bf as dayDiff, b3 as dayFromAny, b5 as dayFromDate, b6 as dayFromDateGMT, ba as dayFromParts, bb as dayFromString, b8 as dayFromTimestamp, b2 as dayFromToday, bh as dayIterator, a_ as dayMonth, bc as dayMonthStart, be as dayOffset, bg as dayRange, b1 as dayToDate, b4 as dayToDateGMT, b0 as dayToParts, b9 as dayToString, b7 as dayToTimestamp, aZ as dayYear, bd as dayYearStart, dv as debounce, cx as deburr, bk as decimal, bn as decimalCentsPart, bl as decimalFromCents, bm as decimalToCents, a5 as decodeBase16, a3 as decodeBase32, a7 as decodeBase58, a9 as decodeBase62, h as decodeJson, u as decrypt, bo as deepEqual, bq as deepMerge, bp as deepStripUndefinedInPlace, s as deriveKeyPbkdf2, eG as detect, bt as diffObjects, q as digest, eP as duration, cH as empty, a4 as encodeBase16, a2 as encodeBase32, a6 as encodeBase58, a8 as encodeBase62, g as encodeJson, cA as encodeQuery, t as encrypt, ct as endSortWeight, cC as ensureKey, cD as ensureKeyAsync, ao as equalBinary, bu as escapeHTML, cf as escapeRegExp, aa as estimateSizeForBase, f as fatal, ex as fetchBasic, ey as fetchJson, eC as fetchOptionsBasicAuth, eA as fetchOptionsFormURLEncoded, eB as fetchOptionsJson, ez as fetchText, cF as first, aK as fixBrokenUth8String, aS as forEachDay, cM as forTimes, aI as formatMessages, eM as formatMilliseconds, am as fromBase64, an as fromBase64String, av as fromCamelCase, aj as fromHex, eF as getGlobal, dw as getGlobalContext, e4 as getGlobalEmitter, dy as getGlobalLogger, dz as getGlobalLoggerIfExists, dQ as getNamespaceFilterString, eE as getNavigator, eO as getPerformanceTimestamp, bY as getSecureRandom, bZ as getSecureRandomIfPossible, eL as getTimestamp, eD as getWindow, ev as httpMethod, di as immediate, bz as isArray, bG as isBoolean, eH as isBrowser, bL as isEmpty, ci as isEven, ch as isHalf, bE as isInteger, dx as isLocalHost, bM as isNotEmpty, bK as isNotNull, bI as isNull, bH as isNullOrUndefined, bD as isNumber, bx as isObject, c5 as isPrime, c4 as isPrimeRX, by as isPrimitive, dn as isPromise, bA as isRecord, bB as isRecordPlain, bF as isSafeInteger, bC as isString, dk as isTimeout, bO as isTruthy, bJ as isUint8Array, bN as isValue, dU as joinLogStrings, ah as joinToUint8Array, bR as jsonStringify, bQ as jsonStringifySafe, bP as jsonStringifySorted, ap as jsonToUint8Array, cG as last, e5 as lazyListener, cy as linkifyPlainText, bW as listDistinctUnion, bV as listGroupBy, bX as listOfKey, bU as listQuery, cK as memoize, cL as memoizeAsync, cu as moveSortWeight, eR as noop, c9 as objectIsEmpty, c7 as objectMap, c8 as objectMergeDisposable, ew as parseBasicAuth, eN as parseDate, dS as parseLogLevel, ca as parseOrderby, cB as parseQuery, dp as promisify, fb as qid, b_ as randomBoolean, c0 as randomFloat, b$ as randomInt, r as randomUint8Array, cQ as regExpEscape, cP as regExpString, aJ as renderMessages, ck as roundDown, cn as roundHalfAwayFromZero, co as roundHalfDown, cp as roundHalfEven, cm as roundHalfOdd, cq as roundHalfTowardsZero, cl as roundHalfUp, cj as roundUp, c6 as seededRandom, f5 as setUuidDefaultEncoding, cE as size, dh as sleep, cv as sortedItems, cd as sortedOrderby, cs as startSortWeight, aw as stringToBoolean, ay as stringToFloat, ax as stringToInteger, ae as stringToUInt8Array, f1 as suid, f0 as suidBytes, f3 as suidBytesDate, f2 as suidDate, c2 as sum, du as throttle, dj as timeout, ak as toBase64, al as toBase64Url, aG as toBool, as as toCamelCase, at as toCapitalize, au as toCapitalizeWords, aD as toFloat, ai as toHex, cz as toHumanReadableUrl, aE as toInt, aF as toString, ag as toUint8Array, ce as toValidFilename, aT as today, dl as tryTimeout, fa as uname, bv as unescapeHTML, d7 as useAsyncMutex, a1 as useBase, cV as useDefer, cT as useDispose, d2 as useDisposeWithUtils, d0 as useEventListener, d1 as useEventListenerOnce, eI as useExitHandler, c_ as useInterval, c$ as useIntervalPause, dT as useLevelFilter, ej as useMessageHub, d6 as useMutex, dR as useNamespaceFilter, de as usePool, el as usePubSub, es as useRPC, et as useRPCHub, cw as useSorted, cZ as useTimeout, f6 as uuid, f4 as uuid32bit, eW as uuidB32, eT as uuidB62, eS as uuidBytes, f7 as uuidDecode, eY as uuidDecodeB32, eV as uuidDecodeB62, e$ as uuidDecodeV4, f8 as uuidEncode, eX as uuidEncodeB32, eU as uuidEncodeB62, e_ as uuidEncodeV4, f9 as uuidIsValid, eZ as uuidv4, az as valueToBoolean, aB as valueToFloat, aA as valueToInteger, aC as valueToString, dm as waitOn, cO as wordsToUint8Array } from './uuid-23c16c7c.js';
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import { Buffer } from 'node:buffer';
|
|
5
5
|
|
package/dist/index.node.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { za, Y as Y$1, xc, Ob, Yc, _c, Pa, ec, gd, hd, cd, Ga } from './chunk-YSSQ27P5.js';
|
|
2
|
+
export { pd as BinaryEncoder, zd as CRYPTO_DEFAULT_ALG, Ad as CRYPTO_DEFAULT_DERIVE_ALG, Bd as CRYPTO_DEFAULT_DERIVE_ITERATIONS, yd as CRYPTO_DEFAULT_HASH_ALG, ke as Channel, pe as CryptoEncoder, db as DAY_MS, zb as Day, ed as DefaultLogger, Nd as Emitter, oe as JsonEncoder, le as LocalChannel, i as LogLevelAlias, b as LogLevelAll, c as LogLevelDebug, f as LogLevelError, g as LogLevelFatal, d as LogLevelInfo, h as LogLevelOff, e as LogLevelWarn, ad as LoggerConsoleHandler, bd as LoggerContext, ld as LoggerMemoryHandler, Ve as MemStorage, ne as NoopEncoder, we as Progress, se as PubSub, ye as SerialQueue, Va as Uint8ArrayToDataUri, na as Uint8ArrayToHexDump, ma as Uint8ArrayToJson, ba as Uint8ArrayToString, Sc as Uint8ArrayToWords, Wc as XRX, $ as _decodeUtf8Polyfill, _ as _encodeUtf8Polyfill, oa as _useBase, U as arrayAvg, V as arrayBatches, I as arrayEmptyInPlace, G as arrayFilterInPlace, B as arrayFlatten, C as arrayIntersection, M as arrayIsEqual, R as arrayMax, S as arrayMin, z as arrayMinus, Q as arrayRandomElement, E as arrayRemoveElement, J as arraySetArrayInPlace, F as arraySetElement, O as arrayShuffle, P as arrayShuffleForce, N as arrayShuffleInPlace, K as arraySorted, L as arraySortedNumbers, T as arraySum, D as arraySymmetricDifference, H as arrayToggleInPlace, A as arrayUnion, y as arrayUnique, nd as assert, od as assertCondition, q as avg, o as between, ud as bitfield, vd as blobToArrayBuffer, Ua as blobToDataUri, wd as blobToUint8Array, fd as browserSelectColorByName, Pb as cloneJsonObject, Ob as cloneObject, w as cmp, v as composeOrderby, W as createArray, td as createBinaryStreamDecoder, sd as createBinaryStreamEncoder, me as createLocalChannelPair, Wa as createPromise, qe as createPromiseProxy, Hd as csvParse, Id as csvParseToObjects, Gd as csvStringify, Ta as dataUriToBlob, Sa as dataUriToMimeType, Ra as dataUriToUint8Array, Db as dateStringToDays, Cb as day, gb as dayDay, wb as dayDiff, kb as dayFromAny, mb as dayFromDate, nb as dayFromDateGMT, rb as dayFromParts, sb as dayFromString, pb as dayFromTimestamp, jb as dayFromToday, yb as dayIterator, fb as dayMonth, tb as dayMonthStart, vb as dayOffset, xb as dayRange, ib as dayToDate, lb as dayToDateGMT, hb as dayToParts, qb as dayToString, ob as dayToTimestamp, eb as dayYear, ub as dayYearStart, Ae as debounce, Nc as deburr, Eb as decimal, Hb as decimalCentsPart, Fb as decimalFromCents, Gb as decimalToCents, ta as decodeBase16, ra as decodeBase32, va as decodeBase58, xa as decodeBase62, rd as decodeJson, Fd as decrypt, jc as deepEqual, lc as deepMerge, kc as deepStripUndefinedInPlace, Dd as deriveKeyPbkdf2, Se as detect, mc as diffObjects, Cd as digest, kd as duration, Nb as empty, sa as encodeBase16, qa as encodeBase32, ua as encodeBase58, wa as encodeBase62, qd as encodeJson, Qc as encodeQuery, Ed as encrypt, Jc as endSortWeight, Ib as ensureKey, Jb as ensureKeyAsync, ka as equalBinary, nc as escapeHTML, wc as escapeRegExp, ya as estimateSizeForBase, md as fatal, Je as fetchBasic, Ke as fetchJson, Oe as fetchOptionsBasicAuth, Me as fetchOptionsFormURLEncoded, Ne as fetchOptionsJson, Le as fetchText, Lb as first, Qa as fixBrokenUth8String, Ab as forEachDay, Sb as forTimes, Oa as formatMessages, hd as formatMilliseconds, ia as fromBase64, ja as fromBase64String, Ca as fromCamelCase, fa as fromHex, Re as getGlobal, a as getGlobalContext, Od as getGlobalEmitter, cd as getGlobalLogger, dd as getGlobalLoggerIfExists, Xc as getNamespaceFilterString, Qe as getNavigator, jd as getPerformanceTimestamp, j as getSecureRandom, k as getSecureRandomIfPossible, gd as getTimestamp, Pe as getWindow, Ya as immediate, Vb as isArray, ac as isBoolean, Te as isBrowser, fc as isEmpty, zc as isEven, yc as isHalf, _b as isInteger, He as isLocalHost, gc as isNotEmpty, ec as isNotNull, cc as isNull, bc as isNullOrUndefined, Zb as isNumber, Tb as isObject, s as isPrime, r as isPrimeRX, Ub as isPrimitive, bb as isPromise, Wb as isRecord, Xb as isRecordPlain, $b as isSafeInteger, Yb as isString, _a as isTimeout, ic as isTruthy, dc as isUint8Array, hc as isValue, $c as joinLogStrings, da as joinToUint8Array, Z as jsonStringify, Y as jsonStringifySafe, X as jsonStringifySorted, la as jsonToUint8Array, Mb as last, Pd as lazyListener, Oc as linkifyPlainText, rc as listDistinctUnion, qc as listGroupBy, sc as listOfKey, pc as listQuery, Qb as memoize, Rb as memoizeAsync, Kc as moveSortWeight, We as noop, vc as objectIsEmpty, tc as objectMap, uc as objectMergeDisposable, Ie as parseBasicAuth, id as parseDate, Zc as parseLogLevel, u as parseOrderby, Rc as parseQuery, cb as promisify, je as qid, l as randomBoolean, n as randomFloat, m as randomInt, xd as randomUint8Array, Vc as regExpEscape, Uc as regExpString, Pa as renderMessages, Bc as roundDown, Ec as roundHalfAwayFromZero, Fc as roundHalfDown, Gc as roundHalfEven, Dc as roundHalfOdd, Hc as roundHalfTowardsZero, Cc as roundHalfUp, Ac as roundUp, t as seededRandom, de as setUuidDefaultEncoding, Kb as size, Xa as sleep, Lc as sortedItems, x as sortedOrderby, Ic as startSortWeight, Da as stringToBoolean, Fa as stringToFloat, Ea as stringToInteger, aa as stringToUInt8Array, $d as suid, _d as suidBytes, be as suidBytesDate, ae as suidDate, p as sum, ze as throttle, Za as timeout, ga as toBase64, ha as toBase64Url, Na as toBool, za as toCamelCase, Aa as toCapitalize, Ba as toCapitalizeWords, Ka as toFloat, ea as toHex, Pc as toHumanReadableUrl, La as toInt, Ma as toString, ca as toUint8Array, xc as toValidFilename, Bb as today, $a as tryTimeout, ie as uname, oc as unescapeHTML, Md as useAsyncMutex, pa as useBase, Kd as useDefer, Jd as useDispose, Ge as useDisposeWithUtils, Ee as useEventListener, Fe as useEventListenerOnce, Ue as useExitHandler, Ce as useInterval, De as useIntervalPause, _c as useLevelFilter, re as useMessageHub, Ld as useMutex, Yc as useNamespaceFilter, xe as usePool, te as usePubSub, ue as useRPC, ve as useRPCHub, Mc as useSorted, Be as useTimeout, ee as uuid, ce as uuid32bit, Ud as uuidB32, Rd as uuidB62, Qd as uuidBytes, fe as uuidDecode, Wd as uuidDecodeB32, Td as uuidDecodeB62, Zd as uuidDecodeV4, ge as uuidEncode, Vd as uuidEncodeB32, Sd as uuidEncodeB62, Yd as uuidEncodeV4, he as uuidIsValid, Xd as uuidv4, Ga as valueToBoolean, Ia as valueToFloat, Ha as valueToInteger, Ja as valueToString, ab as waitOn, Tc as wordsToUint8Array } from './chunk-YSSQ27P5.js';
|
|
3
3
|
import N from 'process';
|
|
4
4
|
import W from 'crypto';
|
|
5
5
|
import ee, { statSync, readdirSync, mkdirSync, writeFileSync, readFileSync, unlinkSync, rmSync, createWriteStream } from 'fs';
|
|
@@ -8,13 +8,13 @@ import { stat, mkdir, rm, readFile, writeFile, readdir } from 'fs/promises';
|
|
|
8
8
|
import { Buffer } from 'buffer';
|
|
9
9
|
import ot from 'tty';
|
|
10
10
|
|
|
11
|
-
function
|
|
12
|
-
`,Le=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/,we=/\\n/g,Te=/\n|\r|\r\n/;function ke(t,e={}){let r={};return String(t).split(Te).forEach((n,s)=>{let i=n.match(Le);if(i!=null){let o=i[1],c=i[2]||"",a=c.length-1,g=c[0]==='"'&&c[a]==='"';c[0]==="'"&&c[a]==="'"||g?(c=c.substring(1,a),g&&(c=c.replace(we,Se))):c=c.trim(),r[o]=c;}}),r}function Pe(t,e="."){return resolve(N.cwd(),t??e)}function Ae(t,e=""){return t==null&&(t=e),Pe(String(t).trim(),e)}var G=Ae;function
|
|
11
|
+
function Vo(t={}){let{args:e=N.argv.slice(1),alias:r={},normalize:n=za,booleanArgs:s=[],listArgs:i=[],numberArgs:o=[]}=t,c=Object.entries(r).reduce((l,f)=>{let[p,d]=f;typeof d=="string"&&(d=[d]);for(let L of d)l[n(L)]=n(p);return l},{}),a={_:[]};function g(l,f){a[l]==null||typeof a[l]=="boolean"?a[l]=f:Array.isArray(a[l])?a[l].push(f):a[l]=[a[l],f];}let h=[...e],m;for(;m=h.shift();){let l;if(/^--?/.test(m)){let f=m.replace(/^--?/,"");if(m.includes("=")){let[p,d]=f.split("=",2);f=p.trim(),l=d.trim();}f=n(f),f=c[f]??f,s.includes(f)?g(f,!0):(l=l??h.shift()??"",o.includes(f)&&(l=Number(l??0)),i.includes(f)?Array.isArray(a[f])?a[f].push(l):a[f]=[l]:g(f,l));}else a._.push(m);}return a}function Xo(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 ra(){try{typeof globalThis<"u"&&typeof globalThis.crypto>"u"&&W&&W.webcrypto&&(globalThis.crypto=W.webcrypto);}catch(t){console.warn("Failed to polyfill webcrypto",t);}}async function na(){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 Se=`
|
|
12
|
+
`,Le=/^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/,we=/\\n/g,Te=/\n|\r|\r\n/;function ke(t,e={}){let r={};return String(t).split(Te).forEach((n,s)=>{let i=n.match(Le);if(i!=null){let o=i[1],c=i[2]||"",a=c.length-1,g=c[0]==='"'&&c[a]==='"';c[0]==="'"&&c[a]==="'"||g?(c=c.substring(1,a),g&&(c=c.replace(we,Se))):c=c.trim(),r[o]=c;}}),r}function Pe(t,e="."){return resolve(N.cwd(),t??e)}function Ae(t,e=""){return t==null&&(t=e),Pe(String(t).trim(),e)}var G=Ae;function ca(t,e=N.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 la(t={}){let e=t?.path??G(t?.filename??".env"),r=t?.encoding??"utf8",n=t?.debug||!1;try{let o=function(a){return ee.existsSync(a)?ke(ee.readFileSync(a,{encoding:r}),{debug:n}):{}};var s=o;let i={};Object.assign(i,o(e),o(`${e}.local`)),t.mode&&Object.assign(i,o(`${e}.${t.mode}`),o(`${e}.${t.mode}.local`));let c=t?.env??N.env;return Object.entries(i).forEach(([a,g])=>{typeof t?.prefix=="string"&&(a=t?.prefix+a),Object.prototype.hasOwnProperty.call(c,a)||g!=null&&(c[a]=g);}),{parsed:i}}catch(i){return {error:i}}}function ma(t){let e=normalize(t),r=N.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 P(t){return t.startsWith(".")||t.includes("/.")}async function da(...t){let e=join(...t);return await M(e)||await mkdir(e,{recursive:!0}),e}async function ha(...t){let e=join(...t);return await M(e)&&await rm(e,{recursive:!0}),e}async function ya(...t){let e=join(...t);if(await M(e))return await readFile(e,"utf-8")}async function ba(t,e){await writeFile(t,e,"utf-8");}function A(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,o=!1,c=e&&typeof e.flags=="string"?e.flags:"",a;for(let g=0,h=r.length;g<h;g++)switch(a=r[g],a){case"/":case"$":case"^":case"+":case".":case"(":case")":case"=":case"!":case"|":n+=`\\${a}`;break;case"?":s&&(n+=".");break;case"[":case"]":s&&(n+=a);break;case"{":s&&(o=!0,n+="(");break;case"}":s&&(o=!1,n+=")");break;case",":o?n+="|":n+=`\\${a}`;break;case"*":{let m=r[g-1],l=1;for(;r[g+1]==="*";)l++,g++;let f=r[g+1];i?l>1&&(m==="/"||m===void 0)&&(f==="/"||f===void 0)?(n+="((?:[^/]*(?:/|$))*)",g++):n+="([^/]*)":n+=".*";}break;default:n+=a;}return (!c||!~c.indexOf("g"))&&(n=`^${n}$`),new RegExp(n,c)}function re(t){try{return statSync(t)}catch{}}function Ta(t){let{mtimeMs:e,size:r}=re(t)??{};return `${t}|${e}|${r}`}function ne(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&&P(i))continue;let o=join(t,i),c=re(o);c&&c.isDirectory()?n=n.concat(ne(t,i)||[]):n.push(i);}return n}function ka(t={}){let{pattern:e,filter:r,basePath:n=N.cwd(),ignoreHidden:s=!1}=t,i=ne(n,"",s);if(i=i.filter(o=>!(s&&(o.startsWith(".")||o.includes("/.")))),e&&(typeof e=="string"&&(e=A(e)),e instanceof RegExp)){let o=e;o.lastIndex=0,i=i.filter(c=>o.test(c));}return r&&(i=i.filter(r)),i}async function se(t){try{return await stat(t)}catch{}}async function ja(t){let{mtimeMs:e,size:r}=await se(t)??{};return `${t}|${e}|${r}`}async function oe(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&&P(i))continue;let o=join(t,i),c=await se(o);c&&c.isDirectory()?n=n.concat(await oe(t,i)||[]):n.push(i);}return n}async function Oa(t={}){let{pattern:e,filter:r,basePath:n=N.cwd(),ignoreHidden:s=!1}=t,i=await oe(n,"",s);if(i=i.filter(o=>!(s&&(o.startsWith(".")||o.includes("/.")))),e&&(typeof e=="string"&&(e=A(e)),e instanceof RegExp)){let o=e;o.lastIndex=0,i=i.filter(c=>o.test(c));}return r&&(i=i.filter(r)),i}var le=class{constructor(e={}){this.store={};this.fileKeys=void 0;this.pretty=!1;this.dirname=resolve(N.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?Y$1(r,null,2):Y$1(r)),this.objectFromString=e.objectFromString??(r=>{try{return JSON.parse(r)}catch{}}),this.keyToFilename=e.keyToFilename??xc;}setItem(e,r){this.store[e]=Ob(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 Ob(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 fe={};function ge(t,e={}){let{level:r=void 0,filter:n=void 0,time:s=!0,pretty:i=!1}=e;t=resolve(N.cwd(),t),mkdirSync(dirname(t),{recursive:!0});let o=createWriteStream(t,{flags:"a"}),c=Yc(n),a=_c(r);return g=>{if(!a(g.level)||!c(g.name))return;let h=s?`${new Date().toISOString()} `:"",m=g.name||"",l=fe[m||""];l==null&&(fe[m]=l);let f=[`[${m||"*"}]`,Pa(g.messages,{pretty:i})];function p(...d){o.write(`${d.join(" ")}
|
|
13
13
|
`);}switch(g.level){case 1:p(`${h}I|* `,...f);break;case 2:p(`${h}W|** `,...f);break;case 3:p(`${h}E|***`,...f);break;default:p(`${h}D| `,...f);break}}}function it(t){return typeof t!="string"?[]:t?.split(`
|
|
14
|
-
`).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(
|
|
15
|
-
`).map(o=>o.trim()),i=s.findIndex(o=>t.some(c=>o.startsWith(c)));r=s[i+1],r&&(r=st(r)),r&&e&&(r=pe(r));}return r}function at(){try{return
|
|
16
|
-
`);}var S={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 xe="\x1B[0m";function $(t,e){return `${e===8?S.ORANGE:`\x1B[3${e<8?e:`8;5;${e}`}m`}${t}${xe}`}function be(t,e,r=!0){return t.map(n=>{if(typeof n!="string")return n;let s=e,i=xe;return r&&(s=`${S.BOLD}${s}`,i=`${i}${S.BOLD}`),`${s}${n}${i}`})}function lt(){try{return
|
|
14
|
+
`).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(ec)??[]}function pe(t){if(t.includes("/node_modules/"))return "";let e="file://";if(t.startsWith(e))return t.substr(e.length);let r=resolve(N.cwd());if(r&&t.startsWith(r))return t.substr(r.length+1);let n=N.env?.HOME?resolve(N.env?.HOME):"";return n&&t.startsWith(n)&&(t=`~/${t.substr(n.length+1)}`),t}function st(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 K(t=2,e=!0){let r=new Error("stack").stack||"",n=it(r)?.[t];return n&&e&&(n=pe(n)),n||""}function me(){return new Error("stack").stack||""}function de(t,e=!0){let r="",n=new Error("stack").stack||"";if(typeof n=="string"){let s=n.split(`
|
|
15
|
+
`).map(o=>o.trim()),i=s.findIndex(o=>t.some(c=>o.startsWith(c)));r=s[i+1],r&&(r=st(r)),r&&e&&(r=pe(r));}return r}function at(){try{return Ga(N.env.ZEED_COLOR,ot.isatty(N.stdout.fd))}catch{}return !1}var U,he=[6,2,3,4,5,1];function ct(t){let e=0;for(let r=0;r<t.length;r++)e=(e<<5)-e+t.charCodeAt(r),e|=0;return he[Math.abs(e)%he.length]}var ye={},Y;function R(...t){N.stdout.write(`${Pa(t)}
|
|
16
|
+
`);}var S={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 xe="\x1B[0m";function $(t,e){return `${e===8?S.ORANGE:`\x1B[3${e<8?e:`8;5;${e}`}m`}${t}${xe}`}function be(t,e,r=!0){return t.map(n=>{if(typeof n!="string")return n;let s=e,i=xe;return r&&(s=`${S.BOLD}${s}`,i=`${i}${S.BOLD}`),`${s}${n}${i}`})}function lt(){try{return Ga(N.env.ZEED_STACK,!1)}catch{}return !1}var z,ft="loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485";function ve(t={}){U==null&&(U=at()),z==null&&(z=lt()),Y==null&&(Y=gd());let{level:e=void 0,filter:r=void 0,colors:n=U,levelHelper:s=!0,nameBrackets:i=!0,padding:o=0,fill:c=0,stack:a=z,time:g=!0}=t,h=Yc(r),m=_c(e);return l=>{if(!m(l.level)||!h(l.name))return;let f=gd(),p=l.name||"",d=ye[p||""];d==null&&(d={color:ct(p)},ye[p]=d);let L=hd(f-Y),u,x=i?`[${p}]`:p;if(o>0&&(x=x.padStart(o," ")),c>0&&(x=x.padEnd(c," ")),n){let b=d.color;u=[`${$(x,b)} | `],l.level===2?u.push(...be(l.messages,S.ORANGE)):l.level===3?u.push(...be(l.messages,S.RED)):u.push(...l.messages),g&&u.push($(`+${L}`,b));}else u=[x,...l.messages],g&&u.push(`+${L}`);if(l.messages?.[0]===ft&&console.log(me()),a){let b="";typeof a=="boolean"?(b=de(["at Function.","at null.log (","at log ("],!0),b||(b=K(0,!0))):b=K(typeof a=="number"?a:3,!0),b&&u.push($(`(${b})`,7));}let v="|",y=".";switch(l.level){case 1:s&&(u[0]=`I${v}${y} ${u[0]}`),R(...u);break;case 2:s&&(u[0]=(n?$(`W${v}${y}${y} `,8):`W${v}${y}${y} `)+u[0]),R(...u);break;case 3:s&&(u[0]=(n?$(`E${v}${y}${y}${y} `,1):`E${v}${y}${y}${y} `)+u[0]),R(...u);break;default:s&&(u[0]=`D${v} ${u[0]}`),R(...u);break}}}function gt(t,e){return cd(r=>{let n=[ve({padding:32,nameBrackets:!1})],s=N.env.ZEED_LOG??N.env.LOG,i=Ga(N.env.ZEED_TIME,!0),o=Ga(N.env.ZEED_PRETTY,!1);s&&n.unshift(ge(G(s),{time:i,pretty:o})),r.setHandlers(n);})(t,e)}
|
|
17
17
|
|
|
18
|
-
export { le as FileStorage, gt as Logger, ge as LoggerFileHandler, ve as LoggerNodeHandler, $ as colorString, be as colorStringList,
|
|
18
|
+
export { le as FileStorage, gt as Logger, ge as LoggerFileHandler, ve as LoggerNodeHandler, $ as colorString, be as colorStringList, da as ensureFolder, M as exists, ka as files, Oa as filesAsync, ca as getEnvVariableRelaxed, Ta as getFingerprint, ja as getFingerprintAsync, K as getSourceLocation, de as getSourceLocationByPrecedingPattern, me as getStack, it as getStackLlocationList, re as getStat, se as getStatAsync, na as getWebCrypto, A as globToRegExp, P as isHiddenPath, ft as loggerStackTraceDebug, Vo as parseArgs, Xo as pbcopy, ya as readText, ha as removeFolder, la as setupEnv, ra as setupWebCrypto, Pe as stringToPath, ma as toHumanReadableFilePath, G as toPath, Ae as valueToPath, ne as walkSync, oe as walkSyncAsync, ba as writeText };
|
|
19
19
|
//# sourceMappingURL=out.js.map
|
|
20
20
|
//# 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/log-file.ts","../src/node/log/log-node.ts","../src/node/log/log-util.ts","../src/node/log/log-context-node.ts"],"names":["process","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","envOf","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","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","shouldUseStack","defaultUseStack","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 process from 'node:process'\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'\nimport process from 'node:process'\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 EnvOptions {\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 mode?: string\n}\n\n// Parses src into an Object\nfunction parse(src: string, _options: EnvOptions = {}) {\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: EnvOptions = {}) {\n const dotenvPath: string = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n try {\n const parsed: Record<string, string> = {}\n\n function envOf(name: string) {\n return fs.existsSync(name)\n ? parse(fs.readFileSync(name, { encoding }), { debug })\n : {}\n }\n\n Object.assign(\n parsed,\n envOf(dotenvPath),\n envOf(`${dotenvPath}.local`),\n )\n\n if (options.mode) {\n Object.assign(\n parsed,\n envOf(`${dotenvPath}.${options.mode}`),\n envOf(`${dotenvPath}.${options.mode}.local`),\n )\n }\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 process from 'node:process'\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'\nimport process from 'node:process'\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 process from 'node:process'\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\n// export function glob(patterns: string[], opt: {\n// cwd?: string,\n// dot?: boolean\n// })\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { mkdirSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { Buffer } from 'node:buffer'\nimport process from 'node:process'\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 process from 'node:process'\nimport { renderMessages } from '../../common/data/convert'\nimport type { LogHandlerOptions, LogMessage } from '../../common/log/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } from '../../common/log/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../../common/log/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 process from 'node:process'\nimport { renderMessages, valueToBoolean } from '../../common/data/convert'\nimport type { LogHandler, LogHandlerOptions, LogMessage } from '../../common/log/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } from '../../common/log/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../../common/log/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\nfunction shouldUseStack(): boolean {\n try {\n return valueToBoolean(process.env.ZEED_STACK, false)\n }\n catch (err) {}\n return false\n}\n\nlet defaultUseStack: boolean | undefined\n\nexport const loggerStackTraceDebug = 'loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485'\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n if (defaultUseColor == null)\n defaultUseColor = shouldUseColor()\n\n if (defaultUseStack == null)\n defaultUseStack = shouldUseStack()\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 = defaultUseStack,\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 // Probably time consuming\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\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 process from 'node:process'\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 */\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 process from 'node:process'\nimport { valueToBoolean } from '../../common'\nimport { getGlobalLogger } from '../../common/log'\nimport type { LogLevelAliasType, LoggerInterface } from '../../common/log/log-base'\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/log-file.ts","../src/node/log/log-node.ts","../src/node/log/log-util.ts","../src/node/log/log-context-node.ts"],"names":["process","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","envOf","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","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","shouldUseStack","defaultUseStack","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 process from 'node:process'\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'\nimport process from 'node:process'\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 EnvOptions {\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 mode?: string\n}\n\n// Parses src into an Object\nfunction parse(src: string, _options: EnvOptions = {}) {\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: EnvOptions = {}) {\n const dotenvPath: string = options?.path ?? toPath(options?.filename ?? '.env')\n const encoding: BufferEncoding = options?.encoding ?? 'utf8'\n const debug = options?.debug || false\n\n try {\n const parsed: Record<string, string> = {}\n\n function envOf(name: string) {\n return fs.existsSync(name)\n ? parse(fs.readFileSync(name, { encoding }), { debug })\n : {}\n }\n\n Object.assign(\n parsed,\n envOf(dotenvPath),\n envOf(`${dotenvPath}.local`),\n )\n\n if (options.mode) {\n Object.assign(\n parsed,\n envOf(`${dotenvPath}.${options.mode}`),\n envOf(`${dotenvPath}.${options.mode}.local`),\n )\n }\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 process from 'node:process'\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'\nimport process from 'node:process'\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 process from 'node:process'\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\n// export function glob(patterns: string[], opt: {\n// cwd?: string,\n// dot?: boolean\n// })\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { mkdirSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport { Buffer } from 'node:buffer'\nimport process from 'node:process'\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 process from 'node:process'\nimport { renderMessages } from '../../common/data/convert'\nimport type { LogHandlerOptions, LogMessage } from '../../common/log/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } from '../../common/log/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../../common/log/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 process from 'node:process'\nimport { renderMessages, valueToBoolean } from '../../common/data/convert'\nimport type { LogHandler, LogHandlerOptions, LogMessage } from '../../common/log/log-base'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } from '../../common/log/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../../common/log/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\nfunction shouldUseStack(): boolean {\n try {\n return valueToBoolean(process.env.ZEED_STACK, false)\n }\n catch (err) {}\n return false\n}\n\nlet defaultUseStack: boolean | undefined\n\nexport const loggerStackTraceDebug = 'loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485'\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n if (defaultUseColor == null)\n defaultUseColor = shouldUseColor()\n\n if (defaultUseStack == null)\n defaultUseStack = shouldUseStack()\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 = defaultUseStack,\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 // Probably time consuming\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\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 process from 'node:process'\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 */\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 process from 'node:process'\nimport { valueToBoolean } from '../../common'\nimport { getGlobalLogger } from '../../common/log'\nimport type { LogLevelAliasType, LoggerInterface } from '../../common/log/log-base'\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"]}
|