zeed 0.7.147 → 0.7.151

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- export { d1 as ArgumentsType, c4 as AsyncMutex, P as BinInput, cC as Channel, cB as ChannelMessageEvent, cQ as CryptoEncoder, al as Currency, aj as CurrencyInput, am as DAY_MS, aJ as Day, ao as DayInput, aI as DayInputLegacy, an as DayValue, aP as DecimalInput, aO as DecimalValue, cI as DefaultListener, bW as Disposable, bV as Disposer, bU as DisposerFunction, cJ as Emitter, cG as EmitterAllHandler, cF as EmitterHandler, cN as Encoder, dq as Json, cP as JsonEncoder, cH as ListenerSignature, cD as LocalChannel, cw as LoggerConsoleHandler, cA as LoggerMemoryHandler, dl as MemStorage, dk as MemStorageOptions, cT as Message, cR as MessageAction, cX as MessageDefinitions, cY as MessageHub, cS as MessageResult, cV as MessagesDefaultMethods, cW as MessagesMethods, cU as MessagesOptions, c3 as Mutex, ds as NestedArray, cO as NoopEncoder, dr as ObjectStorage, cd as Pool, c9 as PoolTask, cb as PoolTaskEvents, c7 as PoolTaskFn, ca as PoolTaskIdConflictResolution, c8 as PoolTaskState, aY as Primitive, c$ as PubSub, d4 as RPCFn, d3 as RPCOptions, d5 as RPCReturn, af as RenderMessagesOptions, d2 as ReturnType, bo as RoundingMode, cr as SerialQueue, bz as SortableItem, cq as TaskEvents, cp as TaskFn, $ as Uint8ArrayToJson, U as Uint8ArrayToString, b$ as UseDefer, bY as UseDispose, bT as XRX, Q as _decodeUtf8Polyfill, _ as _encodeUtf8Polyfill, B as arrayAvg, C as arrayBatches, p as arrayEmptyInPlace, n as arrayFilterInPlace, i as arrayFlatten, j as arrayIntersection, t as arrayIsEqual, y as arrayMax, z as arrayMin, g as arrayMinus, x as arrayRandomElement, l as arrayRemoveElement, m as arraySetElement, v as arrayShuffle, w as arrayShuffleForce, u as arrayShuffleInPlace, q as arraySorted, s as arraySortedNumbers, A as arraySum, k as arraySymmetricDifference, o as arrayToggleInPlace, h as arrayUnion, f as arrayUnique, bf as avg, bd as between, bO as cloneJsonObject, bN as cloneObject, bk as cmp, bj as composeOrderby, D as createArray, ce as createPromise, cZ as createPromiseProxy, c as csv, ak as currency, aN as dateStringToDays, aM as day, ar as dayDay, aH as dayDiff, av as dayFromAny, ax as dayFromDate, ay as dayFromDateGMT, aC as dayFromParts, aD as dayFromString, aA as dayFromTimestamp, au as dayFromToday, aq as dayMonth, aE as dayMonthStart, aG as dayOffset, at as dayToDate, aw as dayToDateGMT, as as dayToParts, aB as dayToString, az as dayToTimestamp, ap as dayYear, aF as dayYearStart, ct as debounce, aQ as decimal, aT as decimalCentsPart, aR as decimalFromCents, aS as decimalToCents, G as decodeBase16, I as decodeBase32, K as decodeBase58, M as decodeBase62, O as decodeBase64, b as decrypt, aU as deepEqual, aV as deepMerge, a as deriveKeyPbkdf2, dg as detect, d as digest, bM as empty, F as encodeBase16, H as encodeBase32, J as encodeBase58, L as encodeBase62, N as encodeBase64, bG as encodeQuery, e as encrypt, bB as endSortWeight, bI as ensureKey, bJ as ensureKeyAsync, Y as equalBinary, aW as escapeHTML, bn as escapeRegExp, cE as fakeWorkerPair, d8 as fetchBasic, d9 as fetchJson, da as fetchOptionsFormURLEncoded, db as fetchOptionsJson, dc as fetchText, ai as fixBrokenUth8String, aK as forEachDay, bQ as forTimes, ag as formatMessages, dn as formatMilliseconds, X as fromBase64, a3 as fromCamelCase, df as getGlobal, cu as getGlobalContext, cK as getGlobalEmitter, cx as getNamespaceFilterString, de as getNavigator, b8 as getSecureRandom, b9 as getSecureRandomIfPossible, dm as getTimestamp, dd as getWindow, d7 as httpMethod, cg as immediate, a$ as isArray, b5 as isBoolean, dh as isBrowser, bq as isEven, bp as isHalf, b3 as isInteger, cv as isLocalHost, b6 as isNullOrUndefined, b2 as isNumber, aZ as isObject, bh as isPrime, bg as isPrimeRX, a_ as isPrimitive, cn as isPromise, b0 as isRecord, b4 as isSafeInteger, b1 as isString, ck as isTimeout, b7 as jsonStringify, Z as jsonToUint8Array, bL as last, cM as lazyListener, bE as linkifyPlainText, bP as memoize, cL as messages, bC as moveSortWeight, dp as parseDate, bi as parseOrderby, bH as parseQuery, di as platform, co as promisify, dC as qid, ba as randomBoolean, bc as randomFloat, bb as randomInt, r as randomUint8Array, bS as regExpEscape, bR as regExpString, ah as renderMessages, bs as roundDown, bv as roundHalfAwayFromZero, bw as roundHalfDown, bx as roundHalfEven, bu as roundHalfOdd, by as roundHalfTowardsZero, bt as roundHalfUp, br as roundUp, bK as size, cf as sleep, bD as sortedItems, bl as sortedOrderby, bA as startSortWeight, a4 as stringToBoolean, a6 as stringToFloat, a5 as stringToInteger, R as stringToUInt8Array, dF as suid, dE as suidBytes, dH as suidBytesDate, dG as suidDate, be as sum, cs as throttle, ci as timeout, ch as timeoutReached, cj as timoutError, V as toBase64, W as toBase64Url, ae as toBool, a0 as toCamelCase, a1 as toCapitalize, a2 as toCapitalizeWords, ab as toFloat, T as toHex, bF as toHumanReadableUrl, ac as toInt, ad as toString, S as toUint8Array, bm as toValidFilename, aL as today, cl as tryTimeout, dB as uname, aX as unescapeHTML, c6 as useAsyncMutex, E as useBase, b_ as useDefer, bX as useDispose, bZ as useDisposer, c2 as useEventListener, dj as useExitHandler, c1 as useInterval, cz as useLevelFilter, c_ as useMessageHub, c5 as useMutex, cy as useNamespaceFilter, cc as usePool, d0 as usePubSub, d6 as useRPC, c0 as useTimeout, dv as uuid, dA as uuid32Decode, dz as uuid32Encode, du as uuid32bit, dy as uuidB32, dt as uuidBytes, dx as uuidDecode, dw as uuidEncode, dD as uuidv4, a7 as valueToBoolean, a9 as valueToFloat, a8 as valueToInteger, aa as valueToString, cm as waitOn } from './uuid-19af3724.js';
1
+ export { d1 as ArgumentsType, c4 as AsyncMutex, P as BinInput, cC as Channel, cB as ChannelMessageEvent, cQ as CryptoEncoder, al as Currency, aj as CurrencyInput, am as DAY_MS, aJ as Day, ao as DayInput, aI as DayInputLegacy, an as DayValue, aP as DecimalInput, aO as DecimalValue, cI as DefaultListener, bW as Disposable, bV as Disposer, bU as DisposerFunction, cJ as Emitter, cG as EmitterAllHandler, cF as EmitterHandler, cN as Encoder, dq as Json, cP as JsonEncoder, cH as ListenerSignature, cD as LocalChannel, cw as LoggerConsoleHandler, cA as LoggerMemoryHandler, dl as MemStorage, dk as MemStorageOptions, cT as Message, cR as MessageAction, cX as MessageDefinitions, cY as MessageHub, cS as MessageResult, cV as MessagesDefaultMethods, cW as MessagesMethods, cU as MessagesOptions, c3 as Mutex, ds as NestedArray, cO as NoopEncoder, dr as ObjectStorage, cd as Pool, c9 as PoolTask, cb as PoolTaskEvents, c7 as PoolTaskFn, ca as PoolTaskIdConflictResolution, c8 as PoolTaskState, aY as Primitive, c$ as PubSub, d4 as RPCFn, d3 as RPCOptions, d5 as RPCReturn, af as RenderMessagesOptions, d2 as ReturnType, bo as RoundingMode, cr as SerialQueue, bz as SortableItem, cq as TaskEvents, cp as TaskFn, $ as Uint8ArrayToJson, U as Uint8ArrayToString, b$ as UseDefer, bY as UseDispose, bT as XRX, Q as _decodeUtf8Polyfill, _ as _encodeUtf8Polyfill, B as arrayAvg, C as arrayBatches, p as arrayEmptyInPlace, n as arrayFilterInPlace, i as arrayFlatten, j as arrayIntersection, t as arrayIsEqual, y as arrayMax, z as arrayMin, g as arrayMinus, x as arrayRandomElement, l as arrayRemoveElement, m as arraySetElement, v as arrayShuffle, w as arrayShuffleForce, u as arrayShuffleInPlace, q as arraySorted, s as arraySortedNumbers, A as arraySum, k as arraySymmetricDifference, o as arrayToggleInPlace, h as arrayUnion, f as arrayUnique, bf as avg, bd as between, bO as cloneJsonObject, bN as cloneObject, bk as cmp, bj as composeOrderby, D as createArray, ce as createPromise, cZ as createPromiseProxy, c as csv, ak as currency, aN as dateStringToDays, aM as day, ar as dayDay, aH as dayDiff, av as dayFromAny, ax as dayFromDate, ay as dayFromDateGMT, aC as dayFromParts, aD as dayFromString, aA as dayFromTimestamp, au as dayFromToday, aq as dayMonth, aE as dayMonthStart, aG as dayOffset, at as dayToDate, aw as dayToDateGMT, as as dayToParts, aB as dayToString, az as dayToTimestamp, ap as dayYear, aF as dayYearStart, ct as debounce, aQ as decimal, aT as decimalCentsPart, aR as decimalFromCents, aS as decimalToCents, G as decodeBase16, I as decodeBase32, K as decodeBase58, M as decodeBase62, O as decodeBase64, b as decrypt, aU as deepEqual, aV as deepMerge, a as deriveKeyPbkdf2, dg as detect, d as digest, bM as empty, F as encodeBase16, H as encodeBase32, J as encodeBase58, L as encodeBase62, N as encodeBase64, bG as encodeQuery, e as encrypt, bB as endSortWeight, bI as ensureKey, bJ as ensureKeyAsync, Y as equalBinary, aW as escapeHTML, bn as escapeRegExp, cE as fakeWorkerPair, d8 as fetchBasic, d9 as fetchJson, da as fetchOptionsFormURLEncoded, db as fetchOptionsJson, dc as fetchText, ai as fixBrokenUth8String, aK as forEachDay, bQ as forTimes, ag as formatMessages, dn as formatMilliseconds, X as fromBase64, a3 as fromCamelCase, df as getGlobal, cu as getGlobalContext, cK as getGlobalEmitter, cx as getNamespaceFilterString, de as getNavigator, b8 as getSecureRandom, b9 as getSecureRandomIfPossible, dm as getTimestamp, dd as getWindow, d7 as httpMethod, cg as immediate, a$ as isArray, b5 as isBoolean, dh as isBrowser, bq as isEven, bp as isHalf, b3 as isInteger, cv as isLocalHost, b6 as isNullOrUndefined, b2 as isNumber, aZ as isObject, bh as isPrime, bg as isPrimeRX, a_ as isPrimitive, cn as isPromise, b0 as isRecord, b4 as isSafeInteger, b1 as isString, ck as isTimeout, b7 as jsonStringify, Z as jsonToUint8Array, bL as last, cM as lazyListener, bE as linkifyPlainText, bP as memoize, cL as messages, bC as moveSortWeight, dp as parseDate, bi as parseOrderby, bH as parseQuery, di as platform, co as promisify, dC as qid, ba as randomBoolean, bc as randomFloat, bb as randomInt, r as randomUint8Array, bS as regExpEscape, bR as regExpString, ah as renderMessages, bs as roundDown, bv as roundHalfAwayFromZero, bw as roundHalfDown, bx as roundHalfEven, bu as roundHalfOdd, by as roundHalfTowardsZero, bt as roundHalfUp, br as roundUp, bK as size, cf as sleep, bD as sortedItems, bl as sortedOrderby, bA as startSortWeight, a4 as stringToBoolean, a6 as stringToFloat, a5 as stringToInteger, R as stringToUInt8Array, dF as suid, dE as suidBytes, dH as suidBytesDate, dG as suidDate, be as sum, cs as throttle, ci as timeout, ch as timeoutReached, cj as timoutError, V as toBase64, W as toBase64Url, ae as toBool, a0 as toCamelCase, a1 as toCapitalize, a2 as toCapitalizeWords, ab as toFloat, T as toHex, bF as toHumanReadableUrl, ac as toInt, ad as toString, S as toUint8Array, bm as toValidFilename, aL as today, cl as tryTimeout, dB as uname, aX as unescapeHTML, c6 as useAsyncMutex, E as useBase, b_ as useDefer, bX as useDispose, bZ as useDisposer, c2 as useEventListener, dj as useExitHandler, c1 as useInterval, cz as useLevelFilter, c_ as useMessageHub, c5 as useMutex, cy as useNamespaceFilter, cc as usePool, d0 as usePubSub, d6 as useRPC, c0 as useTimeout, dv as uuid, dA as uuid32Decode, dz as uuid32Encode, du as uuid32bit, dy as uuidB32, dt as uuidBytes, dx as uuidDecode, dw as uuidEncode, dD as uuidv4, a7 as valueToBoolean, a9 as valueToFloat, a8 as valueToInteger, aa as valueToString, cm as waitOn } from './uuid-ab0c5451.js';
2
2
  export { d as LogHandler, g as LogHandlerOptions, a as LogLevel, b as LogLevelAlias, c as LogMessage, L as Logger, h as LoggerContext, f as LoggerContextInterface, e as LoggerInterface } from './log-b80164f3.js';
3
- export { a as LocalStorage, L as LocalStorageOptions, b as LoggerBrowserClassicHandler, g as gravatarURLByEmail, c as selectColor, s as supportsColors, u as urlBase64ToUint8Array } from './log-colors-7dcdbd62.js';
3
+ export { a as LocalStorage, L as LocalStorageOptions, b as LoggerBrowserClassicHandler, g as gravatarURLByEmail, c as selectColor, s as supportsColors, u as urlBase64ToUint8Array } from './log-colors-5aa66e3b.js';
4
4
  export { L as LoggerBrowserHandler, a as LoggerBrowserSetupDebugFactory, b as activateConsoleDebug } from './log-browser-d263ebe0.js';
@@ -3,14 +3,14 @@ import {
3
3
  LoggerBrowserClassicHandler,
4
4
  gravatarURLByEmail,
5
5
  urlBase64ToUint8Array
6
- } from "./chunk-WG7HOP7M.js";
6
+ } from "./chunk-BPJRSPRG.js";
7
7
  import {
8
8
  LoggerBrowserHandler,
9
9
  LoggerBrowserSetupDebugFactory,
10
10
  activateConsoleDebug,
11
11
  selectColor,
12
12
  supportsColors
13
- } from "./chunk-2KDHZAAM.js";
13
+ } from "./chunk-T5YP6WMZ.js";
14
14
  import {
15
15
  Channel,
16
16
  CryptoEncoder,
@@ -233,7 +233,7 @@ import {
233
233
  valueToInteger,
234
234
  valueToString,
235
235
  waitOn
236
- } from "./chunk-Z7MQRVMT.js";
236
+ } from "./chunk-XX52WKOZ.js";
237
237
  import {
238
238
  LogLevel,
239
239
  LogLevelAlias,
@@ -259,7 +259,7 @@ import {
259
259
  parseDate,
260
260
  useLevelFilter,
261
261
  useNamespaceFilter
262
- } from "./chunk-XWMV2GEI.js";
262
+ } from "./chunk-LMZGFDSJ.js";
263
263
  export {
264
264
  Channel,
265
265
  CryptoEncoder,
@@ -87,8 +87,7 @@ function getNamespaceFilterString(defaultNamespaceFilter2) {
87
87
  return defaultNamespaceFilter2;
88
88
  }
89
89
  __name(getNamespaceFilterString, "getNamespaceFilterString");
90
- var _a, _b;
91
- var defaultNamespaceFilter = getNamespaceFilterString(typeof process !== "undefined" ? (_a = process.env.ZEED) != null ? _a : process.env.DEBUG : typeof localStorage !== "undefined" ? (_b = localStorage.zeed) != null ? _b : localStorage.debug : "*");
90
+ var defaultNamespaceFilter = getNamespaceFilterString(typeof process !== "undefined" ? process.env.ZEED ?? process.env.DEBUG : typeof localStorage !== "undefined" ? localStorage.zeed ?? localStorage.debug : "*");
92
91
  function useNamespaceFilter(filter = defaultNamespaceFilter) {
93
92
  let fn;
94
93
  let reject = [];
@@ -140,8 +139,7 @@ function useNamespaceFilter(filter = defaultNamespaceFilter) {
140
139
  return fn;
141
140
  }
142
141
  __name(useNamespaceFilter, "useNamespaceFilter");
143
- var _a2, _b2, _c, _d;
144
- var defaultLevelFilter = typeof process !== "undefined" ? (_b2 = (_a2 = process.env.ZEED_LEVEL) != null ? _a2 : process.env.LEVEL) != null ? _b2 : process.env.DEBUG_LEVEL : typeof localStorage !== "undefined" ? (_d = (_c = localStorage.zeed_level) != null ? _c : localStorage.level) != null ? _d : localStorage.debug_level : void 0;
142
+ var defaultLevelFilter = typeof process !== "undefined" ? process.env.ZEED_LEVEL ?? process.env.LEVEL ?? process.env.DEBUG_LEVEL : typeof localStorage !== "undefined" ? localStorage.zeed_level ?? localStorage.level ?? localStorage.debug_level : void 0;
145
143
  function useLevelFilter(filter = defaultLevelFilter) {
146
144
  let filterLevel = -1 /* all */;
147
145
  if (typeof filter === "string") {
@@ -510,7 +508,7 @@ function LoggerBrowserHandler(opt = {}) {
510
508
  const matchesNamespace = useNamespaceFilter(filter);
511
509
  const matchesLevel = useLevelFilter(level);
512
510
  return (msg) => {
513
- var _a3, _b3;
511
+ var _a;
514
512
  if (!matchesLevel(msg.level))
515
513
  return;
516
514
  if (!matchesNamespace(msg.name))
@@ -533,7 +531,7 @@ function LoggerBrowserHandler(opt = {}) {
533
531
  args = [`%c${name}%c %s %c+${diff}`];
534
532
  args.push(`color:${ninfo.color}; ${styleBold}`);
535
533
  args.push(styleDefault);
536
- args.push((_b3 = (_a3 = msg.messages) == null ? void 0 : _a3[0]) != null ? _b3 : "");
534
+ args.push(((_a = msg.messages) == null ? void 0 : _a[0]) ?? "");
537
535
  args.push(`color:${ninfo.color};`);
538
536
  args.push(...msg.messages.slice(1));
539
537
  } else {
@@ -565,8 +563,7 @@ function LoggerBrowserHandler(opt = {}) {
565
563
  }
566
564
  __name(LoggerBrowserHandler, "LoggerBrowserHandler");
567
565
  function LoggerBrowserSetupDebugFactory(opt = {}) {
568
- var _a3, _b3;
569
- const filter = (_b3 = (_a3 = opt.filter) != null ? _a3 : localStorage.zeed) != null ? _b3 : localStorage.debug;
566
+ const filter = opt.filter ?? localStorage.zeed ?? localStorage.debug;
570
567
  return /* @__PURE__ */ __name(function LoggerBrowserDebugFactory(name = "") {
571
568
  let log;
572
569
  const matches = useNamespaceFilter(filter);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.log.ts","../src/common/data/is.ts","../src/common/data/deep.ts","../src/common/log-filter.ts","../src/common/log-base.ts","../src/common/log-console.ts","../src/common/global.ts","../src/common/log.ts","../src/common/time.ts","../src/browser/log-colors.ts","../src/browser/log-browser.ts"],"sourcesContent":["// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport * from \"./common/log\"\nexport * from \"./browser/log-browser\"\n","// https://github.com/sindresorhus/is/ MIT\n// https://github.com/sindresorhus/ts-extras\n// https://github.com/sindresorhus/type-fest\n// https://github.com/antfu/utils\n\nexport type Primitive =\n | null\n | undefined\n | string\n | number\n | boolean\n | symbol\n | bigint\n\nexport function isObject(obj: unknown): obj is object {\n return obj != null && typeof obj === \"object\"\n}\n\nexport function isPrimitive(obj: unknown): obj is Primitive {\n return Object(obj) !== obj\n}\n\nexport function isArray(obj: unknown): obj is Array<any> {\n return Array.isArray(obj)\n}\n\nexport function isRecord(obj: unknown): obj is Record<string, any> {\n return isObject(obj) && !isArray(obj)\n}\n\nexport function isString(obj: unknown): obj is string {\n return typeof obj === \"string\"\n}\n\nexport function isNumber(obj: unknown): obj is number {\n return typeof obj === \"number\"\n}\n\nexport function isInteger(obj: unknown): obj is number {\n return typeof obj === \"number\" && Number.isInteger(obj)\n}\n\nexport function isSafeInteger(obj: unknown): obj is number {\n return typeof obj === \"number\" && Number.isSafeInteger(obj)\n}\n\nexport function isBoolean(obj: unknown): obj is boolean {\n return typeof obj === \"boolean\"\n}\n\nexport function isNullOrUndefined(obj: unknown): obj is null | undefined {\n return obj == null\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { isObject, isPrimitive } from \"./is\"\n\n// // https://stackoverflow.com/a/40294058/140927\n// // Handles cyclic references\n// export function deepClonePrimitives(obj, hash = new WeakMap()) {\n//\n// // primitives\n// if (Object(obj) !== obj) {\n// // log('Primitive', obj)\n// return obj\n// }\n//\n// // cyclic reference\n// if (hash.has(obj)) {\n// return hash.get(obj)\n// }\n//\n// let result\n//\n// // primitives as objects like new String(), new Number()\n// if (\n// obj instanceof String ||\n// obj instanceof Number ||\n// obj instanceof BigInt ||\n// obj instanceof Boolean ||\n// obj instanceof Symbol\n// ) {\n// result = new obj.constructor(obj.valueOf())\n// // hash.set(obj, result)\n// return result\n// }\n//\n// // log('Obj', obj)\n//\n// if (obj instanceof Set) {\n// result = new Set(obj)\n// } else if (obj instanceof Map) {\n// result = new Map(Array.from(obj, ([key, val]) => [key, deepClonePrimitives(val, hash)]))\n// } else if (obj instanceof Date) {\n// result = new Date(obj)\n// } else if (obj instanceof RegExp) {\n// result = new RegExp(obj.source, obj.flags)\n// } else if (Array.isArray(obj)) {\n// result = Array.from(obj, val => deepClonePrimitives(val, hash))\n// } else if (obj.constructor) {\n// result = new obj.constructor()\n// log('bj object', result)\n// } else if (obj instanceof Function || typeof obj === 'function') {\n// log('Keep object', obj, Object.getPrototypeOf(obj))\n// result = obj\n// } else {\n// result = Object.create(null)\n// }\n//\n// hash.set(obj, result)\n//\n// return Object.assign(result, ...Object.keys(obj).map(key => ({\n// [key]: deepClonePrimitives(obj[key], hash),\n// })))\n// }\n\nexport function deepEqual(a: any, b: any, hash = new WeakSet()) {\n // if both x and y are null or undefined and exactly the same\n if (a === b) {\n return true\n }\n\n // Cyclic\n if (hash.has(b)) {\n // console.log('cyclic')\n return true\n }\n\n if (!isPrimitive(b)) {\n hash.add(b)\n }\n\n // if they are not strictly equal, they both need to be Objects\n if (!(a instanceof Object) || !(b instanceof Object)) {\n return false\n }\n\n // they must have the exact same prototype chain, the closest we can do is\n // test there constructor.\n if (a.constructor !== b.constructor) {\n return false\n }\n\n // Shortcut to avoid to many loops\n if (a.length !== b.length) {\n return false\n }\n\n for (let p in a) {\n // other properties were tested using x.constructor === y.constructor\n if (!a.hasOwnProperty(p)) {\n continue\n }\n\n // allows to compare x[ p ] and y[ p ] when set to undefined\n if (!b.hasOwnProperty(p)) {\n return false\n }\n\n let aa = a[p]\n let bb = b[p]\n\n // if they have the same strict value or identity then they are equal\n // if (aa === bb) {\n // console.log('eq', typeof bb)\n // if (bb != null) hash.set(bb, true)\n // continue\n // }\n //\n // // Numbers, Strings, Functions, Booleans must be strictly equal\n // if (typeof (aa) !== 'object') {\n // return false\n // }\n\n // Objects and Arrays must be tested recursively\n if (!deepEqual(aa, bb, hash)) {\n return false\n }\n }\n\n // allows x[ p ] to be set to undefined\n for (let p in b) {\n if (b.hasOwnProperty(p) && !a.hasOwnProperty(p)) {\n return false\n }\n }\n\n return true\n}\n\nexport function deepMerge(target: any, ...sources: any[]) {\n for (let source of sources) {\n if (!isObject(target)) {\n target = {}\n }\n\n if (source == null) continue\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n }\n\n return target\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LogLevel, LogLevelAlias } from \"./log-base\"\n\ninterface NamespaceFilter {\n (name: string): boolean\n accept: RegExp[]\n reject: RegExp[]\n filter: string\n}\n\nexport function getNamespaceFilterString(defaultNamespaceFilter: any): string {\n if (\n defaultNamespaceFilter === true ||\n defaultNamespaceFilter === \"true\" ||\n defaultNamespaceFilter === \"1\" ||\n (typeof defaultNamespaceFilter === \"number\" && defaultNamespaceFilter !== 0)\n ) {\n defaultNamespaceFilter = \"*\"\n } else if (\n defaultNamespaceFilter === false ||\n defaultNamespaceFilter === \"false\" ||\n defaultNamespaceFilter === 0 ||\n defaultNamespaceFilter === \"0\" ||\n defaultNamespaceFilter == null ||\n defaultNamespaceFilter === \"null\" ||\n defaultNamespaceFilter === \"undefined\"\n ) {\n defaultNamespaceFilter = \"\"\n } else {\n defaultNamespaceFilter = String(defaultNamespaceFilter)\n }\n return defaultNamespaceFilter\n}\n\nconst defaultNamespaceFilter: string = getNamespaceFilterString(\n typeof process !== \"undefined\"\n ? process.env.ZEED ?? process.env.DEBUG\n : typeof localStorage !== \"undefined\"\n ? localStorage.zeed ?? localStorage.debug\n : \"*\"\n)\n\n/**\n * Filter as described here https://github.com/visionmedia/debug#wildcards\n *\n * @param filter Namespace filter\n * @returns Function to check if filter applies\n */\nexport function useNamespaceFilter(\n filter: string = defaultNamespaceFilter\n): NamespaceFilter {\n let fn: any // (name: string) => boolean\n let reject = [] as RegExp[]\n let accept = [] as RegExp[]\n\n if (!filter) {\n fn = function (name: string) {\n return false\n }\n } else if (filter === \"*\") {\n fn = function (name: string) {\n return true\n }\n } else {\n let i\n const split = filter.split(/[\\s,]+/)\n const len = split.length\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue\n }\n let template = split[i].replace(/\\*/g, \".*?\")\n if (template[0] === \"-\") {\n reject.push(new RegExp(\"^\" + template.substr(1) + \"$\"))\n } else {\n accept.push(new RegExp(\"^\" + template + \"$\"))\n }\n }\n\n fn = function (name: string) {\n if (reject.length === 0 && accept.length === 0) {\n return true\n }\n let i, len\n for (i = 0, len = reject.length; i < len; i++) {\n if (reject[i].test(name)) {\n return false\n }\n }\n for (i = 0, len = accept.length; i < len; i++) {\n if (accept[i].test(name)) {\n return true\n }\n }\n return false\n }\n }\n fn.accept = accept\n fn.reject = reject\n fn.filter = filter\n return fn as NamespaceFilter\n}\n\nconst defaultLevelFilter: any =\n typeof process !== \"undefined\"\n ? process.env.ZEED_LEVEL ?? process.env.LEVEL ?? process.env.DEBUG_LEVEL\n : typeof localStorage !== \"undefined\"\n ? localStorage.zeed_level ?? localStorage.level ?? localStorage.debug_level\n : undefined\n\nexport function useLevelFilter(\n filter: string | number = defaultLevelFilter\n): (level: LogLevel) => boolean {\n let filterLevel: LogLevel = LogLevel.all\n if (typeof filter === \"string\") {\n const l = LogLevelAlias[filter.toLocaleLowerCase().trim()]\n if (l != null) filterLevel = l\n } else if (typeof filter === \"number\") {\n filterLevel = filter as number\n }\n return (level) => level >= filterLevel\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { deepEqual } from \"./data/deep\"\nimport { LoggerConsoleHandler } from \"./log-console\"\nimport { useNamespaceFilter } from \"./log-filter\"\n\nexport enum LogLevel {\n all = -1,\n debug = 0,\n info,\n warn,\n error,\n fatal,\n off = Infinity,\n}\n\nexport const LogLevelAlias: Record<string, LogLevel> = {\n \"*\": LogLevel.all,\n a: LogLevel.all,\n all: LogLevel.all,\n d: LogLevel.debug,\n dbg: LogLevel.debug,\n debug: LogLevel.debug,\n i: LogLevel.info,\n inf: LogLevel.info,\n info: LogLevel.info,\n w: LogLevel.warn,\n warn: LogLevel.warn,\n warning: LogLevel.warn,\n e: LogLevel.error,\n err: LogLevel.error,\n error: LogLevel.error,\n fatal: LogLevel.fatal,\n off: LogLevel.off,\n \"-\": LogLevel.off,\n}\n\nexport interface LogMessage {\n level: LogLevel\n name: string\n messages: any[]\n line?: number\n file?: string\n timestamp?: number\n}\n\nexport type LogHandler = (msg: LogMessage) => void\n\nexport interface LoggerInterface {\n (...messages: any[]): void\n\n /** @deprecated use .level = LogLevel.off or LogLevel.all */\n active: boolean\n\n level: LogLevel\n\n debug(...messages: any[]): void\n\n info(...messages: any[]): void\n\n warn(...messages: any[]): void\n\n error(...messages: any[]): void\n\n assert(cond: any, ...messages: any[]): void\n\n /** @deprecated use .assert */\n assertEqual(value: any, expected: any, ...args: any[]): void\n\n /** @deprecated use .assert */\n assertNotEqual(value: any, expected: any, ...args: any[]): void\n\n extend(prefix: string): LoggerInterface\n\n factory?: LoggerContextInterface\n\n label: string\n}\n\nexport interface LoggerContextInterface {\n (name?: string): LoggerInterface\n registerHandler(handler: LogHandler): void\n setFilter(namespaces: string): void\n setHandlers(handlers?: (LogHandler | undefined | null)[]): void\n setLock(lock: boolean): void\n setLogLevel(level?: LogLevel): void\n setFactory(factory: (name?: string) => LoggerInterface): void\n}\n\nexport interface LogHandlerOptions {\n level?: LogLevel\n filter?: string\n colors?: boolean\n levelHelper?: boolean\n nameBrackets?: boolean\n padding?: number\n fill?: number\n stack?: boolean | number\n}\n\nexport function LoggerContext(prefix: string = \"\"): LoggerContextInterface {\n let logHandlers: LogHandler[] = [LoggerConsoleHandler()]\n let logAssertLevel: LogLevel = LogLevel.warn\n let logCheckNamespace = (name: string) => true\n let logLock = false\n let logFactory = LoggerBaseFactory\n\n function LoggerBaseFactory(name: string = \"\"): LoggerInterface {\n log.extend = function (prefix: string): LoggerInterface {\n return logFactory(name ? `${name}:${prefix}` : prefix)\n }\n\n const emit = (msg: LogMessage) => {\n if (log.active === true) {\n if (msg.level >= Logger.level && msg.level >= log.level) {\n if (logCheckNamespace(name)) {\n for (let handler of logHandlers) {\n if (handler) handler(msg)\n }\n }\n }\n }\n }\n\n function log(...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.label = name\n log.active = true\n log.level = LogLevel.all\n\n log.debug = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.info = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.info,\n })\n }\n\n log.warn = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.warn,\n })\n }\n\n log.error = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.error,\n })\n }\n\n // fatal(...args: any[]) {\n // console.error(...args)\n // },\n\n // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions\n log.assert = function (cond: any, ...messages: any[]): asserts cond {\n if (!cond) {\n if (typeof console !== undefined) {\n if (console.assert) {\n // https://developer.mozilla.org/de/docs/Web/API/Console/assert\n console.assert(cond, ...messages)\n } else {\n console.error(`Assert did fail with: ${cond}`, ...messages)\n }\n }\n emit({\n name,\n messages: messages || [`Assert did fail with: ${cond}`],\n level: logAssertLevel,\n })\n // try {\n // if (typeof expect !== undefined) {\n // expect(cond).toBeTruthy()\n // }\n // } catch (err) {\n // methods.warn(...args)\n // }\n }\n }\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed equal`)\n }\n }\n\n log.assertNotEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed not equal check`)\n }\n }\n\n return log\n }\n\n function Logger(name: string = \"\"): LoggerInterface {\n return logFactory(name)\n }\n\n Logger.registerHandler = function (handler: LogHandler) {\n logHandlers.push(handler)\n }\n\n Logger.setFilter = function (namespaces: string) {\n logCheckNamespace = useNamespaceFilter(namespaces)\n }\n\n Logger.setLock = (lock: boolean = true) => (logLock = lock)\n\n Logger.setHandlers = function (handlers: LogHandler[] = []) {\n if (logFactory !== LoggerBaseFactory) {\n logFactory = LoggerBaseFactory\n }\n if (logLock) return\n logHandlers = [...handlers].filter((h) => typeof h === \"function\")\n }\n\n Logger.level = LogLevel.all\n\n /** @deprecated */\n Logger.setLogLevel = function (level: LogLevel = LogLevel.all) {\n if (logLock) return\n Logger.level = level\n }\n\n Logger.setFactory = function (\n factory: (name?: string) => LoggerInterface\n ): void {\n if (logLock) return\n logFactory = factory\n }\n\n return Logger\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LogHandler, LogHandlerOptions, LogLevel, LogMessage } from \"./log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"./log-filter\"\n\n/**\n * Very basic logger. Please take a look at the browser and node\n * optimized loggers. This one is just the absolute fallback option.\n *\n * @param level Log level\n * @returns Logger\n */\nexport function LoggerConsoleHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = undefined,\n filter = undefined,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n let name = msg.name ? `[${msg.name}]` : \"\"\n switch (msg.level) {\n case LogLevel.info:\n console.info(`I|* ${name}`, ...msg.messages)\n break\n case LogLevel.warn:\n console.warn(`W|** ${name}`, ...msg.messages)\n break\n case LogLevel.error:\n console.error(`E|*** ${name}`, ...msg.messages)\n break\n default:\n console.debug(`D| ${name}`, ...msg.messages)\n break\n }\n }\n}\n","// Global context across build systems etc.\n\ndeclare global {\n interface ZeedGlobalContext {}\n}\n\ninterface ZeedGlobalIntegration {\n _zeedGlobal?: ZeedGlobalContext\n}\n\nfunction _global(): ZeedGlobalIntegration {\n if (typeof self !== \"undefined\") return self as ZeedGlobalIntegration\n if (typeof window !== \"undefined\") return window as ZeedGlobalIntegration\n if (typeof global !== \"undefined\") return global as ZeedGlobalIntegration\n if (typeof globalThis !== \"undefined\")\n return globalThis as ZeedGlobalIntegration\n throw new Error(\"unable to locate global object\")\n}\n\nexport function getGlobalContext(): ZeedGlobalContext {\n let gcontext = _global()\n if (gcontext._zeedGlobal == null) {\n gcontext._zeedGlobal = {}\n }\n return gcontext._zeedGlobal\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LoggerConsoleHandler } from \"./log-console\"\nimport { getGlobalContext } from \"./global\"\nimport { LoggerContext, LoggerContextInterface } from \"./log-base\"\n\n// Global logger to guarantee all submodules use the same logger instance\n\nlet globalLogger: LoggerContextInterface\n\ndeclare global {\n interface ZeedGlobalContext {\n logger?: any // Should be LoggerContextInterface, but avoid compiler issues this way\n }\n}\n\nfunction getLoggerContext() {\n let logger = LoggerContext()\n logger.setHandlers([LoggerConsoleHandler()])\n return logger\n}\n\ntry {\n let _global = getGlobalContext()\n if (_global != null) {\n if (_global?.logger == null) {\n globalLogger = getLoggerContext()\n _global.logger = globalLogger\n } else {\n globalLogger = _global.logger\n }\n } else {\n globalLogger = getLoggerContext()\n }\n} catch (e) {\n globalLogger = getLoggerContext()\n}\n\n// /** @deprecated Use `Logger` instead, it is global as well */\n// export const GlobalLogger = globalLogger\n\nexport const Logger = globalLogger\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n/**\n * @returns Timestamp in miliseconds\n */\nexport const getTimestamp = (): number => Date.now()\n// @ts-ignore\n// typeof performance !== \"undefined\" ? performance.now() : new Date().getTime()\n\nexport function formatMilliseconds(ms: number): string {\n return ms > 999 ? (ms / 1000).toFixed(1) + \"s\" : ms.toFixed(2) + \"ms\"\n}\n\nexport function parseDate(\n ...dateCandidates: (string | Date)[]\n): Date | undefined {\n for (let dateCandidate of dateCandidates) {\n if (dateCandidate instanceof Date) {\n return dateCandidate\n }\n if (typeof dateCandidate === \"string\") {\n let date = null\n if (dateCandidate.includes(\":\")) {\n try {\n date = new Date(dateCandidate)\n } catch (err) {}\n }\n if (!(date instanceof Date)) {\n let m = /(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)/.exec(dateCandidate)\n if (m) {\n date = new Date(+m[1], +m[2] - 1, +m[3], 12, 0)\n }\n }\n if (date instanceof Date) {\n return date\n }\n }\n }\n}\n","// Taken from https://github.com/visionmedia/debug/blob/master/src/browser.js#L27\n\nconst colors = [\n \"#0000CC\",\n \"#0000FF\",\n \"#0033CC\",\n \"#0033FF\",\n \"#0066CC\",\n \"#0066FF\",\n \"#0099CC\",\n \"#0099FF\",\n \"#00CC00\",\n \"#00CC33\",\n \"#00CC66\",\n \"#00CC99\",\n \"#00CCCC\",\n \"#00CCFF\",\n \"#3300CC\",\n \"#3300FF\",\n \"#3333CC\",\n \"#3333FF\",\n \"#3366CC\",\n \"#3366FF\",\n \"#3399CC\",\n \"#3399FF\",\n \"#33CC00\",\n \"#33CC33\",\n \"#33CC66\",\n \"#33CC99\",\n \"#33CCCC\",\n \"#33CCFF\",\n \"#6600CC\",\n \"#6600FF\",\n \"#6633CC\",\n \"#6633FF\",\n \"#66CC00\",\n \"#66CC33\",\n \"#9900CC\",\n \"#9900FF\",\n \"#9933CC\",\n \"#9933FF\",\n \"#99CC00\",\n \"#99CC33\",\n \"#CC0000\",\n \"#CC0033\",\n \"#CC0066\",\n \"#CC0099\",\n \"#CC00CC\",\n \"#CC00FF\",\n \"#CC3300\",\n \"#CC3333\",\n \"#CC3366\",\n \"#CC3399\",\n \"#CC33CC\",\n \"#CC33FF\",\n \"#CC6600\",\n \"#CC6633\",\n \"#CC9900\",\n \"#CC9933\",\n \"#CCCC00\",\n \"#CCCC33\",\n \"#FF0000\",\n \"#FF0033\",\n \"#FF0066\",\n \"#FF0099\",\n \"#FF00CC\",\n \"#FF00FF\",\n \"#FF3300\",\n \"#FF3333\",\n \"#FF3366\",\n \"#FF3399\",\n \"#FF33CC\",\n \"#FF33FF\",\n \"#FF6600\",\n \"#FF6633\",\n \"#FF9900\",\n \"#FF9933\",\n \"#FFCC00\",\n \"#FFCC33\",\n]\n\nexport function supportsColors(): boolean {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (\n typeof window !== \"undefined\" &&\n window.process &&\n // @ts-ignore\n (window.process.type === \"renderer\" || window.process.__nwjs)\n ) {\n return true\n }\n\n // Internet Explorer and Edge do not support colors.\n if (\n typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)\n ) {\n return false\n }\n\n // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (\n (typeof document !== \"undefined\" &&\n document.documentElement &&\n document.documentElement.style &&\n // @ts-ignore\n document.documentElement.style.WebkitAppearance) ||\n // Is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== \"undefined\" &&\n window.console &&\n // @ts-ignore\n (window.console.firebug ||\n // @ts-ignore\n (window.console.exception && window.console.table))) ||\n // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) &&\n parseInt(RegExp.$1, 10) >= 31) ||\n // Double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))\n )\n}\n\nexport function selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { deepEqual } from \"../common/data/deep\"\nimport {\n LoggerInterface,\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\nimport { selectColor, supportsColors } from \"./log-colors\"\n\nconst styleFont = `font-family: \"JetBrains Mono\", Menlo; font-size: 11px;`\nconst styleDefault = `${styleFont}`\nconst styleBold = `font-weight: 600; ${styleFont}`\nconst useColors = supportsColors()\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nexport function LoggerBrowserHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n filter = undefined,\n level = undefined,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n\n const timeNow = getTimestamp()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const diff = formatMilliseconds(timeNow - time)\n let args: string[]\n\n if (padding > 0) {\n name = name.padEnd(16, \" \")\n }\n\n if (colors && useColors) {\n args = [`%c${name}%c \\t%s %c+${diff}`]\n args.push(`color:${ninfo.color}; ${styleBold}`)\n args.push(styleDefault)\n args.push(msg.messages?.[0] ?? \"\")\n args.push(`color:${ninfo.color};`)\n args.push(...msg.messages.slice(1))\n } else {\n args = [name, ...msg.messages, `+${diff}`]\n }\n\n // function consoleArgs(args: any[] = []): any[] {\n // return [\n // args\n // .filter((a) => typeof a === \"string\")\n // .map((a) => String(a))\n // .join(\" \"),\n // ...styles,\n // ...args.filter((a) => typeof a !== \"string\"),\n // ]\n // }\n\n switch (msg.level) {\n case LogLevel.info:\n if (opt.levelHelper) args[0] = `I|* ` + args[0]\n console.info(...args)\n break\n case LogLevel.warn:\n if (opt.levelHelper) args[0] = `W|** ` + args[0]\n console.warn(...args)\n break\n case LogLevel.error:\n if (opt.levelHelper) args[0] = `E|*** ` + args[0]\n console.error(...args)\n break\n default:\n if (opt.levelHelper) args[0] = `D| ` + args[0]\n console.debug(...args)\n break\n }\n }\n}\n\nexport function LoggerBrowserSetupDebugFactory(opt: LogHandlerOptions = {}) {\n const filter = opt.filter ?? localStorage.zeed ?? localStorage.debug\n\n /// The trick is, that console called directly provides a reference to the source code.\n /// For the regular implementation this information is lost. But this approach has other\n /// drawbacks, therefore only use it in the Browser when actively debugging.\n return function LoggerBrowserDebugFactory(\n name: string = \"\"\n ): LoggerInterface {\n let log: LoggerInterface\n\n const matches = useNamespaceFilter(filter)\n\n if (matches(name)) {\n let fixedArgs = []\n if (useColors) {\n const color = selectColor(name)\n fixedArgs.push(`%c${name.padEnd(16, \" \")}%c \\t%s`)\n fixedArgs.push(`color:${color}; ${styleBold}`)\n fixedArgs.push(styleDefault)\n } else {\n fixedArgs.push(`[${name}] \\t%s`)\n }\n\n // @ts-ignore\n // console.previous = {\n // debug: console.debug,\n // info: console.info,\n // warn: console.warn,\n // error: console.error,\n // assert: console.assert,\n // }\n\n log = console.debug.bind(console, ...fixedArgs) as LoggerInterface\n log.debug = console.debug.bind(console, ...fixedArgs)\n log.info = console.info.bind(console, ...fixedArgs)\n log.warn = console.warn.bind(console, ...fixedArgs)\n log.error = console.error.bind(console, ...fixedArgs)\n\n log.assert = console.assert.bind(console)\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n\n log.assertNotEqual = function (\n value: any,\n expected: any,\n ...args: any[]\n ) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n } else {\n const noop = () => {}\n log = noop as LoggerInterface\n log.debug = noop\n log.info = noop\n log.warn = noop\n log.error = noop\n\n log.assert = noop\n log.assertEqual = noop\n log.assertNotEqual = noop\n }\n\n log.extend = (subName: string) => {\n return LoggerBrowserDebugFactory(name ? `${name}:${subName}` : subName)\n }\n\n log.label = name\n\n return log\n }\n}\n\n/** @deprecated This output is default for initial use of Logger in browser environments. */\nexport function activateConsoleDebug(opt: LogHandlerOptions = {}) {\n console.info(\"activateConsoleDebug is activated by default in browsers\")\n // Logger.setHandlers([LoggerBrowserHandler(opt)]) // Fallback for previously registered Loggers\n // Logger.setFactory(LoggerBrowserSetupDebugFactory(opt))\n}\n\n// let klass = console\n// let debug = console.debug.bind(window.console, klass.toString() + \": \")\n\n// debug(\"test\")\n// console.debug(\"test2\")\n\n// let dd\n// if (Function.prototype.bind) {\n// dd = Function.prototype.bind.call(console.log, console)\n// } else {\n// dd = function () {\n// Function.prototype.apply.call(console.log, console, arguments)\n// }\n// }\n\n// dd(\"dd\")\n\n// let c = 1\n// Object.defineProperty(window, \"log2\", {\n// get: () => {\n// return console.log.bind(\n// window.console,\n// \"%c[log]%c %s\" + c++,\n// \"color:red\",\n// \"\"\n// )\n// },\n// })\n\n// // usage:\n// log2(\"Back to the future\")\n// log2(\"Back to the future\")\n\n// let plog = new Proxy(console.debug, {\n// apply: function (target, that, args) {\n// target.apply(that, args)\n// // base.apply(that, args);\n// },\n// })\n\n// let cons = console.debug\n// let plog = (...args) => {\n// cons.apply(window.console, [\"|\", ...args])\n// }\n\n// plog(\"xxx\")\n\n// function a() {\n// var err = new Error()\n// var caller_line = err.stack.split(\"\\n\")[2]\n// var index = caller_line.indexOf(\"at \")\n// var clean = caller_line.slice(index + 2, caller_line.length)\n// clean = clean.replace(/\\?t=\\d+/, \"\").replace(\"@fs/\", \"\")\n// console.log(clean)\n// console.log(\n// \"http://localhost:8080/Users/dirk/work/viidoo/lib/src/browser/log-browser.ts:188:1 log-browser.ts:291:10\"\n// )\n// }\n// function b() {\n// a()\n// }\n// b()\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/index.log.ts","../src/common/data/is.ts","../src/common/data/deep.ts","../src/common/log-filter.ts","../src/common/log-base.ts","../src/common/log-console.ts","../src/common/global.ts","../src/common/log.ts","../src/common/time.ts","../src/browser/log-colors.ts","../src/browser/log-browser.ts"],"sourcesContent":["// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport * from \"./common/log\"\nexport * from \"./browser/log-browser\"\n","// https://github.com/sindresorhus/is/ MIT\n// https://github.com/sindresorhus/ts-extras\n// https://github.com/sindresorhus/type-fest\n// https://github.com/antfu/utils\n\nexport type Primitive =\n | null\n | undefined\n | string\n | number\n | boolean\n | symbol\n | bigint\n\nexport function isObject(obj: unknown): obj is object {\n return obj != null && typeof obj === \"object\"\n}\n\nexport function isPrimitive(obj: unknown): obj is Primitive {\n return Object(obj) !== obj\n}\n\nexport function isArray(obj: unknown): obj is Array<any> {\n return Array.isArray(obj)\n}\n\nexport function isRecord(obj: unknown): obj is Record<string, any> {\n return isObject(obj) && !isArray(obj)\n}\n\nexport function isString(obj: unknown): obj is string {\n return typeof obj === \"string\"\n}\n\nexport function isNumber(obj: unknown): obj is number {\n return typeof obj === \"number\"\n}\n\nexport function isInteger(obj: unknown): obj is number {\n return typeof obj === \"number\" && Number.isInteger(obj)\n}\n\nexport function isSafeInteger(obj: unknown): obj is number {\n return typeof obj === \"number\" && Number.isSafeInteger(obj)\n}\n\nexport function isBoolean(obj: unknown): obj is boolean {\n return typeof obj === \"boolean\"\n}\n\nexport function isNullOrUndefined(obj: unknown): obj is null | undefined {\n return obj == null\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { isObject, isPrimitive } from \"./is\"\n\n// // https://stackoverflow.com/a/40294058/140927\n// // Handles cyclic references\n// export function deepClonePrimitives(obj, hash = new WeakMap()) {\n//\n// // primitives\n// if (Object(obj) !== obj) {\n// // log('Primitive', obj)\n// return obj\n// }\n//\n// // cyclic reference\n// if (hash.has(obj)) {\n// return hash.get(obj)\n// }\n//\n// let result\n//\n// // primitives as objects like new String(), new Number()\n// if (\n// obj instanceof String ||\n// obj instanceof Number ||\n// obj instanceof BigInt ||\n// obj instanceof Boolean ||\n// obj instanceof Symbol\n// ) {\n// result = new obj.constructor(obj.valueOf())\n// // hash.set(obj, result)\n// return result\n// }\n//\n// // log('Obj', obj)\n//\n// if (obj instanceof Set) {\n// result = new Set(obj)\n// } else if (obj instanceof Map) {\n// result = new Map(Array.from(obj, ([key, val]) => [key, deepClonePrimitives(val, hash)]))\n// } else if (obj instanceof Date) {\n// result = new Date(obj)\n// } else if (obj instanceof RegExp) {\n// result = new RegExp(obj.source, obj.flags)\n// } else if (Array.isArray(obj)) {\n// result = Array.from(obj, val => deepClonePrimitives(val, hash))\n// } else if (obj.constructor) {\n// result = new obj.constructor()\n// log('bj object', result)\n// } else if (obj instanceof Function || typeof obj === 'function') {\n// log('Keep object', obj, Object.getPrototypeOf(obj))\n// result = obj\n// } else {\n// result = Object.create(null)\n// }\n//\n// hash.set(obj, result)\n//\n// return Object.assign(result, ...Object.keys(obj).map(key => ({\n// [key]: deepClonePrimitives(obj[key], hash),\n// })))\n// }\n\nexport function deepEqual(a: any, b: any, hash = new WeakSet()) {\n // if both x and y are null or undefined and exactly the same\n if (a === b) {\n return true\n }\n\n // Cyclic\n if (hash.has(b)) {\n // console.log('cyclic')\n return true\n }\n\n if (!isPrimitive(b)) {\n hash.add(b)\n }\n\n // if they are not strictly equal, they both need to be Objects\n if (!(a instanceof Object) || !(b instanceof Object)) {\n return false\n }\n\n // they must have the exact same prototype chain, the closest we can do is\n // test there constructor.\n if (a.constructor !== b.constructor) {\n return false\n }\n\n // Shortcut to avoid to many loops\n if (a.length !== b.length) {\n return false\n }\n\n for (let p in a) {\n // other properties were tested using x.constructor === y.constructor\n if (!a.hasOwnProperty(p)) {\n continue\n }\n\n // allows to compare x[ p ] and y[ p ] when set to undefined\n if (!b.hasOwnProperty(p)) {\n return false\n }\n\n let aa = a[p]\n let bb = b[p]\n\n // if they have the same strict value or identity then they are equal\n // if (aa === bb) {\n // console.log('eq', typeof bb)\n // if (bb != null) hash.set(bb, true)\n // continue\n // }\n //\n // // Numbers, Strings, Functions, Booleans must be strictly equal\n // if (typeof (aa) !== 'object') {\n // return false\n // }\n\n // Objects and Arrays must be tested recursively\n if (!deepEqual(aa, bb, hash)) {\n return false\n }\n }\n\n // allows x[ p ] to be set to undefined\n for (let p in b) {\n if (b.hasOwnProperty(p) && !a.hasOwnProperty(p)) {\n return false\n }\n }\n\n return true\n}\n\nexport function deepMerge(target: any, ...sources: any[]) {\n for (let source of sources) {\n if (!isObject(target)) {\n target = {}\n }\n\n if (source == null) continue\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n }\n\n return target\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LogLevel, LogLevelAlias } from \"./log-base\"\n\ninterface NamespaceFilter {\n (name: string): boolean\n accept: RegExp[]\n reject: RegExp[]\n filter: string\n}\n\nexport function getNamespaceFilterString(defaultNamespaceFilter: any): string {\n if (\n defaultNamespaceFilter === true ||\n defaultNamespaceFilter === \"true\" ||\n defaultNamespaceFilter === \"1\" ||\n (typeof defaultNamespaceFilter === \"number\" && defaultNamespaceFilter !== 0)\n ) {\n defaultNamespaceFilter = \"*\"\n } else if (\n defaultNamespaceFilter === false ||\n defaultNamespaceFilter === \"false\" ||\n defaultNamespaceFilter === 0 ||\n defaultNamespaceFilter === \"0\" ||\n defaultNamespaceFilter == null ||\n defaultNamespaceFilter === \"null\" ||\n defaultNamespaceFilter === \"undefined\"\n ) {\n defaultNamespaceFilter = \"\"\n } else {\n defaultNamespaceFilter = String(defaultNamespaceFilter)\n }\n return defaultNamespaceFilter\n}\n\nconst defaultNamespaceFilter: string = getNamespaceFilterString(\n typeof process !== \"undefined\"\n ? process.env.ZEED ?? process.env.DEBUG\n : typeof localStorage !== \"undefined\"\n ? localStorage.zeed ?? localStorage.debug\n : \"*\"\n)\n\n/**\n * Filter as described here https://github.com/visionmedia/debug#wildcards\n *\n * @param filter Namespace filter\n * @returns Function to check if filter applies\n */\nexport function useNamespaceFilter(\n filter: string = defaultNamespaceFilter\n): NamespaceFilter {\n let fn: any // (name: string) => boolean\n let reject = [] as RegExp[]\n let accept = [] as RegExp[]\n\n if (!filter) {\n fn = function (name: string) {\n return false\n }\n } else if (filter === \"*\") {\n fn = function (name: string) {\n return true\n }\n } else {\n let i\n const split = filter.split(/[\\s,]+/)\n const len = split.length\n for (i = 0; i < len; i++) {\n if (!split[i]) {\n // ignore empty strings\n continue\n }\n let template = split[i].replace(/\\*/g, \".*?\")\n if (template[0] === \"-\") {\n reject.push(new RegExp(\"^\" + template.substr(1) + \"$\"))\n } else {\n accept.push(new RegExp(\"^\" + template + \"$\"))\n }\n }\n\n fn = function (name: string) {\n if (reject.length === 0 && accept.length === 0) {\n return true\n }\n let i, len\n for (i = 0, len = reject.length; i < len; i++) {\n if (reject[i].test(name)) {\n return false\n }\n }\n for (i = 0, len = accept.length; i < len; i++) {\n if (accept[i].test(name)) {\n return true\n }\n }\n return false\n }\n }\n fn.accept = accept\n fn.reject = reject\n fn.filter = filter\n return fn as NamespaceFilter\n}\n\nconst defaultLevelFilter: any =\n typeof process !== \"undefined\"\n ? process.env.ZEED_LEVEL ?? process.env.LEVEL ?? process.env.DEBUG_LEVEL\n : typeof localStorage !== \"undefined\"\n ? localStorage.zeed_level ?? localStorage.level ?? localStorage.debug_level\n : undefined\n\nexport function useLevelFilter(\n filter: string | number = defaultLevelFilter\n): (level: LogLevel) => boolean {\n let filterLevel: LogLevel = LogLevel.all\n if (typeof filter === \"string\") {\n const l = LogLevelAlias[filter.toLocaleLowerCase().trim()]\n if (l != null) filterLevel = l\n } else if (typeof filter === \"number\") {\n filterLevel = filter as number\n }\n return (level) => level >= filterLevel\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { deepEqual } from \"./data/deep\"\nimport { LoggerConsoleHandler } from \"./log-console\"\nimport { useNamespaceFilter } from \"./log-filter\"\n\nexport enum LogLevel {\n all = -1,\n debug = 0,\n info,\n warn,\n error,\n fatal,\n off = Infinity,\n}\n\nexport const LogLevelAlias: Record<string, LogLevel> = {\n \"*\": LogLevel.all,\n a: LogLevel.all,\n all: LogLevel.all,\n d: LogLevel.debug,\n dbg: LogLevel.debug,\n debug: LogLevel.debug,\n i: LogLevel.info,\n inf: LogLevel.info,\n info: LogLevel.info,\n w: LogLevel.warn,\n warn: LogLevel.warn,\n warning: LogLevel.warn,\n e: LogLevel.error,\n err: LogLevel.error,\n error: LogLevel.error,\n fatal: LogLevel.fatal,\n off: LogLevel.off,\n \"-\": LogLevel.off,\n}\n\nexport interface LogMessage {\n level: LogLevel\n name: string\n messages: any[]\n line?: number\n file?: string\n timestamp?: number\n}\n\nexport type LogHandler = (msg: LogMessage) => void\n\nexport interface LoggerInterface {\n (...messages: any[]): void\n\n /** @deprecated use .level = LogLevel.off or LogLevel.all */\n active: boolean\n\n level: LogLevel\n\n debug(...messages: any[]): void\n\n info(...messages: any[]): void\n\n warn(...messages: any[]): void\n\n error(...messages: any[]): void\n\n assert(cond: any, ...messages: any[]): void\n\n /** @deprecated use .assert */\n assertEqual(value: any, expected: any, ...args: any[]): void\n\n /** @deprecated use .assert */\n assertNotEqual(value: any, expected: any, ...args: any[]): void\n\n extend(prefix: string): LoggerInterface\n\n factory?: LoggerContextInterface\n\n label: string\n}\n\nexport interface LoggerContextInterface {\n (name?: string): LoggerInterface\n registerHandler(handler: LogHandler): void\n setFilter(namespaces: string): void\n setHandlers(handlers?: (LogHandler | undefined | null)[]): void\n setLock(lock: boolean): void\n setLogLevel(level?: LogLevel): void\n setFactory(factory: (name?: string) => LoggerInterface): void\n}\n\nexport interface LogHandlerOptions {\n level?: LogLevel\n filter?: string\n colors?: boolean\n levelHelper?: boolean\n nameBrackets?: boolean\n padding?: number\n fill?: number\n stack?: boolean | number\n}\n\nexport function LoggerContext(prefix: string = \"\"): LoggerContextInterface {\n let logHandlers: LogHandler[] = [LoggerConsoleHandler()]\n let logAssertLevel: LogLevel = LogLevel.warn\n let logCheckNamespace = (name: string) => true\n let logLock = false\n let logFactory = LoggerBaseFactory\n\n function LoggerBaseFactory(name: string = \"\"): LoggerInterface {\n log.extend = function (prefix: string): LoggerInterface {\n return logFactory(name ? `${name}:${prefix}` : prefix)\n }\n\n const emit = (msg: LogMessage) => {\n if (log.active === true) {\n if (msg.level >= Logger.level && msg.level >= log.level) {\n if (logCheckNamespace(name)) {\n for (let handler of logHandlers) {\n if (handler) handler(msg)\n }\n }\n }\n }\n }\n\n function log(...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.label = name\n log.active = true\n log.level = LogLevel.all\n\n log.debug = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.info = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.info,\n })\n }\n\n log.warn = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.warn,\n })\n }\n\n log.error = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.error,\n })\n }\n\n // fatal(...args: any[]) {\n // console.error(...args)\n // },\n\n // https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-7.html#assertion-functions\n log.assert = function (cond: any, ...messages: any[]): asserts cond {\n if (!cond) {\n if (typeof console !== undefined) {\n if (console.assert) {\n // https://developer.mozilla.org/de/docs/Web/API/Console/assert\n console.assert(cond, ...messages)\n } else {\n console.error(`Assert did fail with: ${cond}`, ...messages)\n }\n }\n emit({\n name,\n messages: messages || [`Assert did fail with: ${cond}`],\n level: logAssertLevel,\n })\n // try {\n // if (typeof expect !== undefined) {\n // expect(cond).toBeTruthy()\n // }\n // } catch (err) {\n // methods.warn(...args)\n // }\n }\n }\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed equal`)\n }\n }\n\n log.assertNotEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed not equal check`)\n }\n }\n\n return log\n }\n\n function Logger(name: string = \"\"): LoggerInterface {\n return logFactory(name)\n }\n\n Logger.registerHandler = function (handler: LogHandler) {\n logHandlers.push(handler)\n }\n\n Logger.setFilter = function (namespaces: string) {\n logCheckNamespace = useNamespaceFilter(namespaces)\n }\n\n Logger.setLock = (lock: boolean = true) => (logLock = lock)\n\n Logger.setHandlers = function (handlers: LogHandler[] = []) {\n if (logFactory !== LoggerBaseFactory) {\n logFactory = LoggerBaseFactory\n }\n if (logLock) return\n logHandlers = [...handlers].filter((h) => typeof h === \"function\")\n }\n\n Logger.level = LogLevel.all\n\n /** @deprecated */\n Logger.setLogLevel = function (level: LogLevel = LogLevel.all) {\n if (logLock) return\n Logger.level = level\n }\n\n Logger.setFactory = function (\n factory: (name?: string) => LoggerInterface\n ): void {\n if (logLock) return\n logFactory = factory\n }\n\n return Logger\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LogHandler, LogHandlerOptions, LogLevel, LogMessage } from \"./log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"./log-filter\"\n\n/**\n * Very basic logger. Please take a look at the browser and node\n * optimized loggers. This one is just the absolute fallback option.\n *\n * @param level Log level\n * @returns Logger\n */\nexport function LoggerConsoleHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = undefined,\n filter = undefined,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n let name = msg.name ? `[${msg.name}]` : \"\"\n switch (msg.level) {\n case LogLevel.info:\n console.info(`I|* ${name}`, ...msg.messages)\n break\n case LogLevel.warn:\n console.warn(`W|** ${name}`, ...msg.messages)\n break\n case LogLevel.error:\n console.error(`E|*** ${name}`, ...msg.messages)\n break\n default:\n console.debug(`D| ${name}`, ...msg.messages)\n break\n }\n }\n}\n","// Global context across build systems etc.\n\ndeclare global {\n interface ZeedGlobalContext {}\n}\n\ninterface ZeedGlobalIntegration {\n _zeedGlobal?: ZeedGlobalContext\n}\n\nfunction _global(): ZeedGlobalIntegration {\n if (typeof self !== \"undefined\") return self as ZeedGlobalIntegration\n if (typeof window !== \"undefined\") return window as ZeedGlobalIntegration\n if (typeof global !== \"undefined\") return global as ZeedGlobalIntegration\n if (typeof globalThis !== \"undefined\")\n return globalThis as ZeedGlobalIntegration\n throw new Error(\"unable to locate global object\")\n}\n\nexport function getGlobalContext(): ZeedGlobalContext {\n let gcontext = _global()\n if (gcontext._zeedGlobal == null) {\n gcontext._zeedGlobal = {}\n }\n return gcontext._zeedGlobal\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LoggerConsoleHandler } from \"./log-console\"\nimport { getGlobalContext } from \"./global\"\nimport { LoggerContext, LoggerContextInterface } from \"./log-base\"\n\n// Global logger to guarantee all submodules use the same logger instance\n\nlet globalLogger: LoggerContextInterface\n\ndeclare global {\n interface ZeedGlobalContext {\n logger?: any // Should be LoggerContextInterface, but avoid compiler issues this way\n }\n}\n\nfunction getLoggerContext() {\n let logger = LoggerContext()\n logger.setHandlers([LoggerConsoleHandler()])\n return logger\n}\n\ntry {\n let _global = getGlobalContext()\n if (_global != null) {\n if (_global?.logger == null) {\n globalLogger = getLoggerContext()\n _global.logger = globalLogger\n } else {\n globalLogger = _global.logger\n }\n } else {\n globalLogger = getLoggerContext()\n }\n} catch (e) {\n globalLogger = getLoggerContext()\n}\n\n// /** @deprecated Use `Logger` instead, it is global as well */\n// export const GlobalLogger = globalLogger\n\nexport const Logger = globalLogger\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n/**\n * @returns Timestamp in miliseconds\n */\nexport const getTimestamp = (): number => Date.now()\n// @ts-ignore\n// typeof performance !== \"undefined\" ? performance.now() : new Date().getTime()\n\nexport function formatMilliseconds(ms: number): string {\n return ms > 999 ? (ms / 1000).toFixed(1) + \"s\" : ms.toFixed(2) + \"ms\"\n}\n\nexport function parseDate(\n ...dateCandidates: (string | Date)[]\n): Date | undefined {\n for (let dateCandidate of dateCandidates) {\n if (dateCandidate instanceof Date) {\n return dateCandidate\n }\n if (typeof dateCandidate === \"string\") {\n let date = null\n if (dateCandidate.includes(\":\")) {\n try {\n date = new Date(dateCandidate)\n } catch (err) {}\n }\n if (!(date instanceof Date)) {\n let m = /(\\d\\d\\d\\d)-(\\d\\d)-(\\d\\d)/.exec(dateCandidate)\n if (m) {\n date = new Date(+m[1], +m[2] - 1, +m[3], 12, 0)\n }\n }\n if (date instanceof Date) {\n return date\n }\n }\n }\n}\n","// Taken from https://github.com/visionmedia/debug/blob/master/src/browser.js#L27\n\nconst colors = [\n \"#0000CC\",\n \"#0000FF\",\n \"#0033CC\",\n \"#0033FF\",\n \"#0066CC\",\n \"#0066FF\",\n \"#0099CC\",\n \"#0099FF\",\n \"#00CC00\",\n \"#00CC33\",\n \"#00CC66\",\n \"#00CC99\",\n \"#00CCCC\",\n \"#00CCFF\",\n \"#3300CC\",\n \"#3300FF\",\n \"#3333CC\",\n \"#3333FF\",\n \"#3366CC\",\n \"#3366FF\",\n \"#3399CC\",\n \"#3399FF\",\n \"#33CC00\",\n \"#33CC33\",\n \"#33CC66\",\n \"#33CC99\",\n \"#33CCCC\",\n \"#33CCFF\",\n \"#6600CC\",\n \"#6600FF\",\n \"#6633CC\",\n \"#6633FF\",\n \"#66CC00\",\n \"#66CC33\",\n \"#9900CC\",\n \"#9900FF\",\n \"#9933CC\",\n \"#9933FF\",\n \"#99CC00\",\n \"#99CC33\",\n \"#CC0000\",\n \"#CC0033\",\n \"#CC0066\",\n \"#CC0099\",\n \"#CC00CC\",\n \"#CC00FF\",\n \"#CC3300\",\n \"#CC3333\",\n \"#CC3366\",\n \"#CC3399\",\n \"#CC33CC\",\n \"#CC33FF\",\n \"#CC6600\",\n \"#CC6633\",\n \"#CC9900\",\n \"#CC9933\",\n \"#CCCC00\",\n \"#CCCC33\",\n \"#FF0000\",\n \"#FF0033\",\n \"#FF0066\",\n \"#FF0099\",\n \"#FF00CC\",\n \"#FF00FF\",\n \"#FF3300\",\n \"#FF3333\",\n \"#FF3366\",\n \"#FF3399\",\n \"#FF33CC\",\n \"#FF33FF\",\n \"#FF6600\",\n \"#FF6633\",\n \"#FF9900\",\n \"#FF9933\",\n \"#FFCC00\",\n \"#FFCC33\",\n]\n\nexport function supportsColors(): boolean {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (\n typeof window !== \"undefined\" &&\n window.process &&\n // @ts-ignore\n (window.process.type === \"renderer\" || window.process.__nwjs)\n ) {\n return true\n }\n\n // Internet Explorer and Edge do not support colors.\n if (\n typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)\n ) {\n return false\n }\n\n // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (\n (typeof document !== \"undefined\" &&\n document.documentElement &&\n document.documentElement.style &&\n // @ts-ignore\n document.documentElement.style.WebkitAppearance) ||\n // Is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== \"undefined\" &&\n window.console &&\n // @ts-ignore\n (window.console.firebug ||\n // @ts-ignore\n (window.console.exception && window.console.table))) ||\n // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) &&\n parseInt(RegExp.$1, 10) >= 31) ||\n // Double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))\n )\n}\n\nexport function selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { deepEqual } from \"../common/data/deep\"\nimport {\n LoggerInterface,\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\nimport { selectColor, supportsColors } from \"./log-colors\"\n\nconst styleFont = `font-family: \"JetBrains Mono\", Menlo; font-size: 11px;`\nconst styleDefault = `${styleFont}`\nconst styleBold = `font-weight: 600; ${styleFont}`\nconst useColors = supportsColors()\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nexport function LoggerBrowserHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n filter = undefined,\n level = undefined,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n } = opt\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level)) return\n if (!matchesNamespace(msg.name)) return\n\n const timeNow = getTimestamp()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const diff = formatMilliseconds(timeNow - time)\n let args: string[]\n\n if (padding > 0) {\n name = name.padEnd(16, \" \")\n }\n\n if (colors && useColors) {\n args = [`%c${name}%c \\t%s %c+${diff}`]\n args.push(`color:${ninfo.color}; ${styleBold}`)\n args.push(styleDefault)\n args.push(msg.messages?.[0] ?? \"\")\n args.push(`color:${ninfo.color};`)\n args.push(...msg.messages.slice(1))\n } else {\n args = [name, ...msg.messages, `+${diff}`]\n }\n\n // function consoleArgs(args: any[] = []): any[] {\n // return [\n // args\n // .filter((a) => typeof a === \"string\")\n // .map((a) => String(a))\n // .join(\" \"),\n // ...styles,\n // ...args.filter((a) => typeof a !== \"string\"),\n // ]\n // }\n\n switch (msg.level) {\n case LogLevel.info:\n if (opt.levelHelper) args[0] = `I|* ` + args[0]\n console.info(...args)\n break\n case LogLevel.warn:\n if (opt.levelHelper) args[0] = `W|** ` + args[0]\n console.warn(...args)\n break\n case LogLevel.error:\n if (opt.levelHelper) args[0] = `E|*** ` + args[0]\n console.error(...args)\n break\n default:\n if (opt.levelHelper) args[0] = `D| ` + args[0]\n console.debug(...args)\n break\n }\n }\n}\n\nexport function LoggerBrowserSetupDebugFactory(opt: LogHandlerOptions = {}) {\n const filter = opt.filter ?? localStorage.zeed ?? localStorage.debug\n\n /// The trick is, that console called directly provides a reference to the source code.\n /// For the regular implementation this information is lost. But this approach has other\n /// drawbacks, therefore only use it in the Browser when actively debugging.\n return function LoggerBrowserDebugFactory(\n name: string = \"\"\n ): LoggerInterface {\n let log: LoggerInterface\n\n const matches = useNamespaceFilter(filter)\n\n if (matches(name)) {\n let fixedArgs = []\n if (useColors) {\n const color = selectColor(name)\n fixedArgs.push(`%c${name.padEnd(16, \" \")}%c \\t%s`)\n fixedArgs.push(`color:${color}; ${styleBold}`)\n fixedArgs.push(styleDefault)\n } else {\n fixedArgs.push(`[${name}] \\t%s`)\n }\n\n // @ts-ignore\n // console.previous = {\n // debug: console.debug,\n // info: console.info,\n // warn: console.warn,\n // error: console.error,\n // assert: console.assert,\n // }\n\n log = console.debug.bind(console, ...fixedArgs) as LoggerInterface\n log.debug = console.debug.bind(console, ...fixedArgs)\n log.info = console.info.bind(console, ...fixedArgs)\n log.warn = console.warn.bind(console, ...fixedArgs)\n log.error = console.error.bind(console, ...fixedArgs)\n\n log.assert = console.assert.bind(console)\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n\n log.assertNotEqual = function (\n value: any,\n expected: any,\n ...args: any[]\n ) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n } else {\n const noop = () => {}\n log = noop as LoggerInterface\n log.debug = noop\n log.info = noop\n log.warn = noop\n log.error = noop\n\n log.assert = noop\n log.assertEqual = noop\n log.assertNotEqual = noop\n }\n\n log.extend = (subName: string) => {\n return LoggerBrowserDebugFactory(name ? `${name}:${subName}` : subName)\n }\n\n log.label = name\n\n return log\n }\n}\n\n/** @deprecated This output is default for initial use of Logger in browser environments. */\nexport function activateConsoleDebug(opt: LogHandlerOptions = {}) {\n console.info(\"activateConsoleDebug is activated by default in browsers\")\n // Logger.setHandlers([LoggerBrowserHandler(opt)]) // Fallback for previously registered Loggers\n // Logger.setFactory(LoggerBrowserSetupDebugFactory(opt))\n}\n\n// let klass = console\n// let debug = console.debug.bind(window.console, klass.toString() + \": \")\n\n// debug(\"test\")\n// console.debug(\"test2\")\n\n// let dd\n// if (Function.prototype.bind) {\n// dd = Function.prototype.bind.call(console.log, console)\n// } else {\n// dd = function () {\n// Function.prototype.apply.call(console.log, console, arguments)\n// }\n// }\n\n// dd(\"dd\")\n\n// let c = 1\n// Object.defineProperty(window, \"log2\", {\n// get: () => {\n// return console.log.bind(\n// window.console,\n// \"%c[log]%c %s\" + c++,\n// \"color:red\",\n// \"\"\n// )\n// },\n// })\n\n// // usage:\n// log2(\"Back to the future\")\n// log2(\"Back to the future\")\n\n// let plog = new Proxy(console.debug, {\n// apply: function (target, that, args) {\n// target.apply(that, args)\n// // base.apply(that, args);\n// },\n// })\n\n// let cons = console.debug\n// let plog = (...args) => {\n// cons.apply(window.console, [\"|\", ...args])\n// }\n\n// plog(\"xxx\")\n\n// function a() {\n// var err = new Error()\n// var caller_line = err.stack.split(\"\\n\")[2]\n// var index = caller_line.indexOf(\"at \")\n// var clean = caller_line.slice(index + 2, caller_line.length)\n// clean = clean.replace(/\\?t=\\d+/, \"\").replace(\"@fs/\", \"\")\n// console.log(clean)\n// console.log(\n// \"http://localhost:8080/Users/dirk/work/viidoo/lib/src/browser/log-browser.ts:188:1 log-browser.ts:291:10\"\n// )\n// }\n// function b() {\n// a()\n// }\n// b()\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACkBO,qBAAqB,KAAgC;AAC1D,SAAO,OAAO,GAAG,MAAM;AACzB;AAFgB;;;AC6CT,mBAAmB,GAAQ,GAAQ,OAAO,oBAAI,QAAQ,GAAG;AAE9D,MAAI,MAAM,GAAG;AACX,WAAO;AAAA,EACT;AAGA,MAAI,KAAK,IAAI,CAAC,GAAG;AAEf,WAAO;AAAA,EACT;AAEA,MAAI,CAAC,YAAY,CAAC,GAAG;AACnB,SAAK,IAAI,CAAC;AAAA,EACZ;AAGA,MAAI,CAAE,cAAa,WAAW,CAAE,cAAa,SAAS;AACpD,WAAO;AAAA,EACT;AAIA,MAAI,EAAE,gBAAgB,EAAE,aAAa;AACnC,WAAO;AAAA,EACT;AAGA,MAAI,EAAE,WAAW,EAAE,QAAQ;AACzB,WAAO;AAAA,EACT;AAEA,WAAS,KAAK,GAAG;AAEf,QAAI,CAAC,EAAE,eAAe,CAAC,GAAG;AACxB;AAAA,IACF;AAGA,QAAI,CAAC,EAAE,eAAe,CAAC,GAAG;AACxB,aAAO;AAAA,IACT;AAEA,QAAI,KAAK,EAAE;AACX,QAAI,KAAK,EAAE;AAeX,QAAI,CAAC,UAAU,IAAI,IAAI,IAAI,GAAG;AAC5B,aAAO;AAAA,IACT;AAAA,EACF;AAGA,WAAS,KAAK,GAAG;AACf,QAAI,EAAE,eAAe,CAAC,KAAK,CAAC,EAAE,eAAe,CAAC,GAAG;AAC/C,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAxEgB;;;ACpDT,kCAAkC,yBAAqC;AAC5E,MACE,4BAA2B,QAC3B,4BAA2B,UAC3B,4BAA2B,OAC1B,OAAO,4BAA2B,YAAY,4BAA2B,GAC1E;AACA,8BAAyB;AAAA,EAC3B,WACE,4BAA2B,SAC3B,4BAA2B,WAC3B,4BAA2B,KAC3B,4BAA2B,OAC3B,2BAA0B,QAC1B,4BAA2B,UAC3B,4BAA2B,aAC3B;AACA,8BAAyB;AAAA,EAC3B,OAAO;AACL,8BAAyB,OAAO,uBAAsB;AAAA,EACxD;AACA,SAAO;AACT;AAtBgB;AAwBhB,IAAM,yBAAiC,yBACrC,OAAO,YAAY,cACf,QAAQ,IAAI,QAAQ,QAAQ,IAAI,QAChC,OAAO,iBAAiB,cACxB,aAAa,QAAQ,aAAa,QAClC,GACN;AAQO,4BACL,SAAiB,wBACA;AACjB,MAAI;AACJ,MAAI,SAAS,CAAC;AACd,MAAI,SAAS,CAAC;AAEd,MAAI,CAAC,QAAQ;AACX,SAAK,gCAAU,MAAc;AAC3B,aAAO;AAAA,IACT,GAFK;AAAA,EAGP,WAAW,WAAW,KAAK;AACzB,SAAK,gCAAU,MAAc;AAC3B,aAAO;AAAA,IACT,GAFK;AAAA,EAGP,OAAO;AACL,QAAI;AACJ,UAAM,QAAQ,OAAO,MAAM,QAAQ;AACnC,UAAM,MAAM,MAAM;AAClB,SAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,UAAI,CAAC,MAAM,IAAI;AAEb;AAAA,MACF;AACA,UAAI,WAAW,MAAM,GAAG,QAAQ,OAAO,KAAK;AAC5C,UAAI,SAAS,OAAO,KAAK;AACvB,eAAO,KAAK,IAAI,OAAO,MAAM,SAAS,OAAO,CAAC,IAAI,GAAG,CAAC;AAAA,MACxD,OAAO;AACL,eAAO,KAAK,IAAI,OAAO,MAAM,WAAW,GAAG,CAAC;AAAA,MAC9C;AAAA,IACF;AAEA,SAAK,gCAAU,MAAc;AAC3B,UAAI,OAAO,WAAW,KAAK,OAAO,WAAW,GAAG;AAC9C,eAAO;AAAA,MACT;AACA,UAAI,IAAG;AACP,WAAK,KAAI,GAAG,OAAM,OAAO,QAAQ,KAAI,MAAK,MAAK;AAC7C,YAAI,OAAO,IAAG,KAAK,IAAI,GAAG;AACxB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,WAAK,KAAI,GAAG,OAAM,OAAO,QAAQ,KAAI,MAAK,MAAK;AAC7C,YAAI,OAAO,IAAG,KAAK,IAAI,GAAG;AACxB,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT,GAhBK;AAAA,EAiBP;AACA,KAAG,SAAS;AACZ,KAAG,SAAS;AACZ,KAAG,SAAS;AACZ,SAAO;AACT;AAtDgB;AAwDhB,IAAM,qBACJ,OAAO,YAAY,cACf,QAAQ,IAAI,cAAc,QAAQ,IAAI,SAAS,QAAQ,IAAI,cAC3D,OAAO,iBAAiB,cACxB,aAAa,cAAc,aAAa,SAAS,aAAa,cAC9D;AAEC,wBACL,SAA0B,oBACI;AAC9B,MAAI,cAAwB;AAC5B,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,cAAc,OAAO,kBAAkB,EAAE,KAAK;AACxD,QAAI,KAAK;AAAM,oBAAc;AAAA,EAC/B,WAAW,OAAO,WAAW,UAAU;AACrC,kBAAc;AAAA,EAChB;AACA,SAAO,CAAC,UAAU,SAAS;AAC7B;AAXgB;;;AChGT,IAAM,gBAA0C;AAAA,EACrD,KAAK;AAAA,EACL,GAAG;AAAA,EACH,KAAK;AAAA,EACL,GAAG;AAAA,EACH,KAAK;AAAA,EACL,OAAO;AAAA,EACP,GAAG;AAAA,EACH,KAAK;AAAA,EACL,MAAM;AAAA,EACN,GAAG;AAAA,EACH,MAAM;AAAA,EACN,SAAS;AAAA,EACT,GAAG;AAAA,EACH,KAAK;AAAA,EACL,OAAO;AAAA,EACP,OAAO;AAAA,EACP,KAAK;AAAA,EACL,KAAK;AACP;AAiEO,uBAAuB,SAAiB,IAA4B;AACzE,MAAI,cAA4B,CAAC,qBAAqB,CAAC;AACvD,MAAI,iBAA2B;AAC/B,MAAI,oBAAoB,wBAAC,SAAiB,MAAlB;AACxB,MAAI,UAAU;AACd,MAAI,aAAa;AAEjB,6BAA2B,OAAe,IAAqB;AAC7D,QAAI,SAAS,SAAU,SAAiC;AACtD,aAAO,WAAW,OAAO,GAAG,QAAQ,YAAW,OAAM;AAAA,IACvD;AAEA,UAAM,OAAO,wBAAC,QAAoB;AAChC,UAAI,IAAI,WAAW,MAAM;AACvB,YAAI,IAAI,SAAS,QAAO,SAAS,IAAI,SAAS,IAAI,OAAO;AACvD,cAAI,kBAAkB,IAAI,GAAG;AAC3B,qBAAS,WAAW,aAAa;AAC/B,kBAAI;AAAS,wBAAQ,GAAG;AAAA,YAC1B;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,GAVa;AAYb,oBAAgB,UAAiB;AAC/B,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AANS;AAQT,QAAI,QAAQ;AACZ,QAAI,SAAS;AACb,QAAI,QAAQ;AAEZ,QAAI,QAAQ,YAAa,UAAiB;AACxC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,QAAI,OAAO,YAAa,UAAiB;AACvC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,QAAI,OAAO,YAAa,UAAiB;AACvC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,QAAI,QAAQ,YAAa,UAAiB;AACxC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA,MACT,CAAC;AAAA,IACH;AAOA,QAAI,SAAS,SAAU,SAAc,UAA+B;AAClE,UAAI,CAAC,MAAM;AACT,YAAI,OAAO,YAAY,QAAW;AAChC,cAAI,QAAQ,QAAQ;AAElB,oBAAQ,OAAO,MAAM,GAAG,QAAQ;AAAA,UAClC,OAAO;AACL,oBAAQ,MAAM,yBAAyB,QAAQ,GAAG,QAAQ;AAAA,UAC5D;AAAA,QACF;AACA,aAAK;AAAA,UACH;AAAA,UACA,UAAU,YAAY,CAAC,yBAAyB,MAAM;AAAA,UACtD,OAAO;AAAA,QACT,CAAC;AAAA,MAQH;AAAA,IACF;AAEA,QAAI,cAAc,SAAU,OAAY,aAAkB,MAAa;AACrE,UAAI,QAAQ,UAAU,OAAO,QAAQ;AACrC,UAAI,CAAC,OAAO;AACV,YAAI,OACF,OACA,6BAA6B,gBAAgB,SAC7C,UACA,OACA,GAAG,IACL;AAAA,MAGF;AAAA,IACF;AAEA,QAAI,iBAAiB,SAAU,OAAY,aAAkB,MAAa;AACxE,UAAI,QAAQ,UAAU,OAAO,QAAQ;AACrC,UAAI,OAAO;AACT,YAAI,OACF,OACA,6BAA6B,iCAAiC,SAC9D,UACA,OACA,GAAG,IACL;AAAA,MAGF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AA1HS;AA4HT,mBAAgB,OAAe,IAAqB;AAClD,WAAO,WAAW,IAAI;AAAA,EACxB;AAFS;AAIT,UAAO,kBAAkB,SAAU,SAAqB;AACtD,gBAAY,KAAK,OAAO;AAAA,EAC1B;AAEA,UAAO,YAAY,SAAU,aAAoB;AAC/C,wBAAoB,mBAAmB,WAAU;AAAA,EACnD;AAEA,UAAO,UAAU,CAAC,OAAgB,SAAU,UAAU;AAEtD,UAAO,cAAc,SAAU,WAAyB,CAAC,GAAG;AAC1D,QAAI,eAAe,mBAAmB;AACpC,mBAAa;AAAA,IACf;AACA,QAAI;AAAS;AACb,kBAAc,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,MAAM,OAAO,MAAM,UAAU;AAAA,EACnE;AAEA,UAAO,QAAQ;AAGf,UAAO,cAAc,SAAU,QAAkB,cAAc;AAC7D,QAAI;AAAS;AACb,YAAO,QAAQ;AAAA,EACjB;AAEA,UAAO,aAAa,SAClB,SACM;AACN,QAAI;AAAS;AACb,iBAAa;AAAA,EACf;AAEA,SAAO;AACT;AAzKgB;;;ACxFT,8BAA8B,MAAyB,CAAC,GAAe;AAC5E,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,kBAAS;AAAA,IACT,cAAc;AAAA,IACd,eAAe;AAAA,IACf,UAAU;AAAA,MACR;AACJ,QAAM,mBAAmB,mBAAmB,MAAM;AAClD,QAAM,eAAe,eAAe,KAAK;AACzC,SAAO,CAAC,QAAoB;AAC1B,QAAI,CAAC,aAAa,IAAI,KAAK;AAAG;AAC9B,QAAI,CAAC,iBAAiB,IAAI,IAAI;AAAG;AACjC,QAAI,OAAO,IAAI,OAAO,IAAI,IAAI,UAAU;AACxC,YAAQ,IAAI;AAAA,WACL;AACH,gBAAQ,KAAK,SAAS,QAAQ,GAAG,IAAI,QAAQ;AAC7C;AAAA,WACG;AACH,gBAAQ,KAAK,SAAS,QAAQ,GAAG,IAAI,QAAQ;AAC7C;AAAA,WACG;AACH,gBAAQ,MAAM,SAAS,QAAQ,GAAG,IAAI,QAAQ;AAC9C;AAAA;AAEA,gBAAQ,MAAM,SAAS,QAAQ,GAAG,IAAI,QAAQ;AAC9C;AAAA;AAAA,EAEN;AACF;AA9BgB;;;ACFhB,mBAA0C;AACxC,MAAI,OAAO,SAAS;AAAa,WAAO;AACxC,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,MAAI,OAAO,WAAW;AAAa,WAAO;AAC1C,MAAI,OAAO,eAAe;AACxB,WAAO;AACT,QAAM,IAAI,MAAM,gCAAgC;AAClD;AAPS;AASF,4BAA+C;AACpD,MAAI,WAAW,QAAQ;AACvB,MAAI,SAAS,eAAe,MAAM;AAChC,aAAS,cAAc,CAAC;AAAA,EAC1B;AACA,SAAO,SAAS;AAClB;AANgB;;;ACXhB,IAAI;AAQJ,4BAA4B;AAC1B,MAAI,SAAS,cAAc;AAC3B,SAAO,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAC3C,SAAO;AACT;AAJS;AAMT,IAAI;AACF,MAAI,WAAU,iBAAiB;AAC/B,MAAI,YAAW,MAAM;AACnB,QAAI,sCAAS,WAAU,MAAM;AAC3B,qBAAe,iBAAiB;AAChC,eAAQ,SAAS;AAAA,IACnB,OAAO;AACL,qBAAe,SAAQ;AAAA,IACzB;AAAA,EACF,OAAO;AACL,mBAAe,iBAAiB;AAAA,EAClC;AACF,SAAS,GAAP;AACA,iBAAe,iBAAiB;AAClC;AAKO,IAAM,SAAS;;;ACpCf,IAAM,eAAe,6BAAc,KAAK,IAAI,GAAvB;AAIrB,4BAA4B,IAAoB;AACrD,SAAO,KAAK,MAAO,MAAK,KAAM,QAAQ,CAAC,IAAI,MAAM,GAAG,QAAQ,CAAC,IAAI;AACnE;AAFgB;;;ACPhB,IAAM,SAAS;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,0BAAmC;AAIxC,MACE,OAAO,WAAW,eAClB,OAAO,WAEN,QAAO,QAAQ,SAAS,cAAc,OAAO,QAAQ,SACtD;AACA,WAAO;AAAA,EACT;AAGA,MACE,OAAO,cAAc,eACrB,UAAU,aACV,UAAU,UAAU,YAAY,EAAE,MAAM,uBAAuB,GAC/D;AACA,WAAO;AAAA,EACT;AAIA,SACG,OAAO,aAAa,eACnB,SAAS,mBACT,SAAS,gBAAgB,SAEzB,SAAS,gBAAgB,MAAM,oBAEhC,OAAO,WAAW,eACjB,OAAO,WAEN,QAAO,QAAQ,WAEb,OAAO,QAAQ,aAAa,OAAO,QAAQ,UAG/C,OAAO,cAAc,eACpB,UAAU,aACV,UAAU,UAAU,YAAY,EAAE,MAAM,gBAAgB,KACxD,SAAS,OAAO,IAAI,EAAE,KAAK,MAE5B,OAAO,cAAc,eACpB,UAAU,aACV,UAAU,UAAU,YAAY,EAAE,MAAM,oBAAoB;AAElE;AAhDgB;AAkDT,qBAAqB,WAAmB;AAC7C,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;AACzC,WAAQ,SAAQ,KAAK,OAAO,UAAU,WAAW,CAAC;AAClD,YAAQ;AAAA,EACV;AACA,SAAO,OAAO,KAAK,IAAI,IAAI,IAAI,OAAO;AACxC;AAPgB;;;ACrHhB,IAAM,YAAY;AAClB,IAAM,eAAe,GAAG;AACxB,IAAM,YAAY,qBAAqB;AACvC,IAAM,YAAY,eAAe;AAEjC,IAAI,aAAkC,CAAC;AAEvC,IAAI,OAAO,aAAa;AAEjB,8BAA8B,MAAyB,CAAC,GAAe;AAC5E,QAAM;AAAA,IACJ,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,kBAAS;AAAA,IACT,cAAc;AAAA,IACd,eAAe;AAAA,IACf,UAAU;AAAA,MACR;AACJ,QAAM,mBAAmB,mBAAmB,MAAM;AAClD,QAAM,eAAe,eAAe,KAAK;AACzC,SAAO,CAAC,QAAoB;AAlC9B;AAmCI,QAAI,CAAC,aAAa,IAAI,KAAK;AAAG;AAC9B,QAAI,CAAC,iBAAiB,IAAI,IAAI;AAAG;AAEjC,UAAM,UAAU,aAAa;AAC7B,QAAI,OAAO,IAAI,QAAQ;AACvB,QAAI,QAAQ,WAAW,QAAQ;AAC/B,QAAI,SAAS,MAAM;AACjB,cAAQ;AAAA,QACN,OAAO,YAAY,IAAI;AAAA,MAEzB;AACA,iBAAW,QAAQ;AAAA,IACrB;AACA,UAAM,OAAO,mBAAmB,UAAU,IAAI;AAC9C,QAAI;AAEJ,QAAI,UAAU,GAAG;AACf,aAAO,KAAK,OAAO,IAAI,GAAG;AAAA,IAC5B;AAEA,QAAI,WAAU,WAAW;AACvB,aAAO,CAAC,KAAK,iBAAkB,MAAM;AACrC,WAAK,KAAK,SAAS,MAAM,UAAU,WAAW;AAC9C,WAAK,KAAK,YAAY;AACtB,WAAK,KAAK,WAAI,aAAJ,mBAAe,OAAM,EAAE;AACjC,WAAK,KAAK,SAAS,MAAM,QAAQ;AACjC,WAAK,KAAK,GAAG,IAAI,SAAS,MAAM,CAAC,CAAC;AAAA,IACpC,OAAO;AACL,aAAO,CAAC,MAAM,GAAG,IAAI,UAAU,IAAI,MAAM;AAAA,IAC3C;AAaA,YAAQ,IAAI;AAAA,WACL;AACH,YAAI,IAAI;AAAa,eAAK,KAAK,WAAW,KAAK;AAC/C,gBAAQ,KAAK,GAAG,IAAI;AACpB;AAAA,WACG;AACH,YAAI,IAAI;AAAa,eAAK,KAAK,WAAW,KAAK;AAC/C,gBAAQ,KAAK,GAAG,IAAI;AACpB;AAAA,WACG;AACH,YAAI,IAAI;AAAa,eAAK,KAAK,WAAW,KAAK;AAC/C,gBAAQ,MAAM,GAAG,IAAI;AACrB;AAAA;AAEA,YAAI,IAAI;AAAa,eAAK,KAAK,WAAW,KAAK;AAC/C,gBAAQ,MAAM,GAAG,IAAI;AACrB;AAAA;AAAA,EAEN;AACF;AAzEgB;AA2ET,wCAAwC,MAAyB,CAAC,GAAG;AAC1E,QAAM,SAAS,IAAI,UAAU,aAAa,QAAQ,aAAa;AAK/D,SAAO,0DACL,OAAe,IACE;AACjB,QAAI;AAEJ,UAAM,UAAU,mBAAmB,MAAM;AAEzC,QAAI,QAAQ,IAAI,GAAG;AACjB,UAAI,YAAY,CAAC;AACjB,UAAI,WAAW;AACb,cAAM,QAAQ,YAAY,IAAI;AAC9B,kBAAU,KAAK,KAAK,KAAK,OAAO,IAAI,GAAG,SAAU;AACjD,kBAAU,KAAK,SAAS,UAAU,WAAW;AAC7C,kBAAU,KAAK,YAAY;AAAA,MAC7B,OAAO;AACL,kBAAU,KAAK,IAAI,WAAY;AAAA,MACjC;AAWA,YAAM,QAAQ,MAAM,KAAK,SAAS,GAAG,SAAS;AAC9C,UAAI,QAAQ,QAAQ,MAAM,KAAK,SAAS,GAAG,SAAS;AACpD,UAAI,OAAO,QAAQ,KAAK,KAAK,SAAS,GAAG,SAAS;AAClD,UAAI,OAAO,QAAQ,KAAK,KAAK,SAAS,GAAG,SAAS;AAClD,UAAI,QAAQ,QAAQ,MAAM,KAAK,SAAS,GAAG,SAAS;AAEpD,UAAI,SAAS,QAAQ,OAAO,KAAK,OAAO;AAExC,UAAI,cAAc,SAAU,OAAY,aAAkB,MAAa;AACrE,YAAI,QAAQ,UAAU,OAAO,QAAQ;AACrC,YAAI,CAAC,OAAO;AACV,cAAI,OACF,OACA,6BAA6B,gBAAgB,SAC7C,UACA,OACA,GAAG,IACL;AAAA,QACF;AAAA,MACF;AAEA,UAAI,iBAAiB,SACnB,OACA,aACG,MACH;AACA,YAAI,QAAQ,UAAU,OAAO,QAAQ;AACrC,YAAI,OAAO;AACT,cAAI,OACF,OACA,6BAA6B,iCAAiC,SAC9D,UACA,OACA,GAAG,IACL;AAAA,QACF;AAAA,MACF;AAAA,IACF,OAAO;AACL,YAAM,OAAO,6BAAM;AAAA,MAAC,GAAP;AACb,YAAM;AACN,UAAI,QAAQ;AACZ,UAAI,OAAO;AACX,UAAI,OAAO;AACX,UAAI,QAAQ;AAEZ,UAAI,SAAS;AACb,UAAI,cAAc;AAClB,UAAI,iBAAiB;AAAA,IACvB;AAEA,QAAI,SAAS,CAAC,YAAoB;AAChC,aAAO,0BAA0B,OAAO,GAAG,QAAQ,YAAY,OAAO;AAAA,IACxE;AAEA,QAAI,QAAQ;AAEZ,WAAO;AAAA,EACT,GApFO;AAqFT;AA3FgB;AA8FT,8BAA8B,MAAyB,CAAC,GAAG;AAChE,UAAQ,KAAK,0DAA0D;AAGzE;AAJgB;","names":[]}
package/dist/index.log.js CHANGED
@@ -2,10 +2,10 @@ import {
2
2
  LoggerBrowserHandler,
3
3
  LoggerBrowserSetupDebugFactory,
4
4
  activateConsoleDebug
5
- } from "./chunk-2KDHZAAM.js";
5
+ } from "./chunk-T5YP6WMZ.js";
6
6
  import {
7
7
  Logger
8
- } from "./chunk-XWMV2GEI.js";
8
+ } from "./chunk-LMZGFDSJ.js";
9
9
  export {
10
10
  Logger,
11
11
  LoggerBrowserHandler,