zeed 0.7.113 → 0.7.117

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 +1 @@
1
- {"version":3,"sources":["../src/common/data/is.ts","../src/common/data/deep.ts","../src/common/log-console.ts","../src/common/log-base.ts","../src/common/log-filter.ts","../src/common/global.ts","../src/common/log.ts","../src/common/time.ts"],"sourcesContent":["// 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 { 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","// (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 { 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","// 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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAcO,kBAAkB,KAA6B;AACpD,SAAO,OAAO,QAAQ,OAAO,QAAQ;AAAA;AADvB;AAIT,qBAAqB,KAAgC;AAC1D,SAAO,OAAO,SAAS;AAAA;AADT;AAIT,iBAAiB,KAAiC;AACvD,SAAO,MAAM,QAAQ;AAAA;AADP;AAIT,kBAAkB,KAA0C;AACjE,SAAO,SAAS,QAAQ,CAAC,QAAQ;AAAA;AADnB;AAIT,kBAAkB,KAA6B;AACpD,SAAO,OAAO,QAAQ;AAAA;AADR;AAIT,kBAAkB,KAA6B;AACpD,SAAO,OAAO,QAAQ;AAAA;AADR;AAIT,mBAAmB,KAA6B;AACrD,SAAO,OAAO,QAAQ,YAAY,OAAO,UAAU;AAAA;AADrC;AAIT,uBAAuB,KAA6B;AACzD,SAAO,OAAO,QAAQ,YAAY,OAAO,cAAc;AAAA;AADzC;AAIT,mBAAmB,KAA8B;AACtD,SAAO,OAAO,QAAQ;AAAA;AADR;AAIT,2BAA2B,KAAuC;AACvE,SAAO,OAAO;AAAA;AADA;;;ACaT,mBAAmB,GAAQ,GAAQ,OAAO,oBAAI,WAAW;AAE9D,MAAI,MAAM,GAAG;AACX,WAAO;AAAA;AAIT,MAAI,KAAK,IAAI,IAAI;AAEf,WAAO;AAAA;AAGT,MAAI,CAAC,YAAY,IAAI;AACnB,SAAK,IAAI;AAAA;AAIX,MAAI,CAAE,cAAa,WAAW,CAAE,cAAa,SAAS;AACpD,WAAO;AAAA;AAKT,MAAI,EAAE,gBAAgB,EAAE,aAAa;AACnC,WAAO;AAAA;AAIT,MAAI,EAAE,WAAW,EAAE,QAAQ;AACzB,WAAO;AAAA;AAGT,WAAS,KAAK,GAAG;AAEf,QAAI,CAAC,EAAE,eAAe,IAAI;AACxB;AAAA;AAIF,QAAI,CAAC,EAAE,eAAe,IAAI;AACxB,aAAO;AAAA;AAGT,QAAI,KAAK,EAAE;AACX,QAAI,KAAK,EAAE;AAeX,QAAI,CAAC,UAAU,IAAI,IAAI,OAAO;AAC5B,aAAO;AAAA;AAAA;AAKX,WAAS,KAAK,GAAG;AACf,QAAI,EAAE,eAAe,MAAM,CAAC,EAAE,eAAe,IAAI;AAC/C,aAAO;AAAA;AAAA;AAIX,SAAO;AAAA;AAvEO;AA0ET,mBAAmB,WAAgB,SAAgB;AACxD,WAAS,UAAU,SAAS;AAC1B,QAAI,CAAC,SAAS,SAAS;AACrB,eAAS;AAAA;AAGX,QAAI,UAAU;AAAM;AAEpB,WAAO,KAAK,QAAQ,QAAQ,CAAC,QAAQ;AACnC,YAAM,cAAc,OAAO;AAC3B,YAAM,cAAc,OAAO;AAE3B,UAAI,MAAM,QAAQ,gBAAgB,MAAM,QAAQ,cAAc;AAC5D,eAAO,OAAO,YAAY,OAAO;AAAA,iBACxB,SAAS,gBAAgB,SAAS,cAAc;AACzD,eAAO,OAAO,UAAU,OAAO,OAAO,IAAI,cAAc;AAAA,aACnD;AACL,eAAO,OAAO;AAAA;AAAA;AAAA;AAKpB,SAAO;AAAA;AAtBO;;;AC7HT,8BAA8B,MAAyB,IAAgB;AAC5E,QAAM;AAAA,IACJ,QAAQ;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,cAAc;AAAA,IACd,eAAe;AAAA,IACf,UAAU;AAAA,MACR;AACJ,QAAM,mBAAmB,mBAAmB;AAC5C,QAAM,eAAe,eAAe;AACpC,SAAO,CAAC,QAAoB;AAC1B,QAAI,CAAC,aAAa,IAAI;AAAQ;AAC9B,QAAI,CAAC,iBAAiB,IAAI;AAAO;AACjC,QAAI,OAAO,IAAI,OAAO,IAAI,IAAI,UAAU;AACxC,YAAQ,IAAI;AAAA,WACL;AACH,gBAAQ,KAAK,SAAS,QAAQ,GAAG,IAAI;AACrC;AAAA,WACG;AACH,gBAAQ,KAAK,SAAS,QAAQ,GAAG,IAAI;AACrC;AAAA,WACG;AACH,gBAAQ,MAAM,SAAS,QAAQ,GAAG,IAAI;AACtC;AAAA;AAEA,gBAAQ,MAAM,SAAS,QAAQ,GAAG,IAAI;AACtC;AAAA;AAAA;AAAA;AA3BQ;;;ACNT,IAAK,WAAL,kBAAK,cAAL;AACL,+BAAM,MAAN;AACA,iCAAQ,KAAR;AACA;AACA;AACA;AACA;AACA,+BAAM,YAAN;AAPU;AAAA;AAUL,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;AAAA;AAkEA,uBAAuB,SAAiB,IAA4B;AACzE,MAAI,cAA4B,CAAC;AACjC,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;AAAA;AAGjD,UAAM,OAAO,wBAAC,QAAoB;AAChC,UAAI,IAAI,WAAW,MAAM;AACvB,YAAI,IAAI,SAAS,QAAO,SAAS,IAAI,SAAS,IAAI,OAAO;AACvD,cAAI,kBAAkB,OAAO;AAC3B,qBAAS,WAAW,aAAa;AAC/B,kBAAI;AAAS,wBAAQ;AAAA;AAAA;AAAA;AAAA;AAAA,OALlB;AAYb,oBAAgB,UAAiB;AAC/B,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA;AAAA;AAJF;AAQT,QAAI,QAAQ;AACZ,QAAI,SAAS;AACb,QAAI,QAAQ;AAEZ,QAAI,QAAQ,YAAa,UAAiB;AACxC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA;AAAA;AAIX,QAAI,OAAO,YAAa,UAAiB;AACvC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA;AAAA;AAIX,QAAI,OAAO,YAAa,UAAiB;AACvC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA;AAAA;AAIX,QAAI,QAAQ,YAAa,UAAiB;AACxC,WAAK;AAAA,QACH;AAAA,QACA;AAAA,QACA,OAAO;AAAA;AAAA;AASX,QAAI,SAAS,SAAU,SAAc,UAA+B;AAClE,UAAI,CAAC,MAAM;AACT,YAAI,OAAO,YAAY,QAAW;AAChC,cAAI,QAAQ,QAAQ;AAElB,oBAAQ,OAAO,MAAM,GAAG;AAAA,iBACnB;AACL,oBAAQ,MAAM,yBAAyB,QAAQ,GAAG;AAAA;AAAA;AAGtD,aAAK;AAAA,UACH;AAAA,UACA,UAAU,YAAY,CAAC,yBAAyB;AAAA,UAChD,OAAO;AAAA;AAAA;AAAA;AAYb,QAAI,cAAc,SAAU,OAAY,aAAkB,MAAa;AACrE,UAAI,QAAQ,UAAU,OAAO;AAC7B,UAAI,CAAC,OAAO;AACV,YAAI,OACF,OACA,6BAA6B,gBAAgB,SAC7C,UACA,OACA,GAAG;AAAA;AAAA;AAOT,QAAI,iBAAiB,SAAU,OAAY,aAAkB,MAAa;AACxE,UAAI,QAAQ,UAAU,OAAO;AAC7B,UAAI,OAAO;AACT,YAAI,OACF,OACA,6BAA6B,iCAAiC,SAC9D,UACA,OACA,GAAG;AAAA;AAAA;AAOT,WAAO;AAAA;AAzHA;AA4HT,mBAAgB,OAAe,IAAqB;AAClD,WAAO,WAAW;AAAA;AADX;AAIT,UAAO,kBAAkB,SAAU,SAAqB;AACtD,gBAAY,KAAK;AAAA;AAGnB,UAAO,YAAY,SAAU,YAAoB;AAC/C,wBAAoB,mBAAmB;AAAA;AAGzC,UAAO,UAAU,CAAC,OAAgB,SAAU,UAAU;AAEtD,UAAO,cAAc,SAAU,WAAyB,IAAI;AAC1D,QAAI,eAAe,mBAAmB;AACpC,mBAAa;AAAA;AAEf,QAAI;AAAS;AACb,kBAAc,CAAC,GAAG,UAAU,OAAO,CAAC,MAAM,OAAO,MAAM;AAAA;AAGzD,UAAO,QAAQ;AAGf,UAAO,cAAc,SAAU,QAAkB,cAAc;AAC7D,QAAI;AAAS;AACb,YAAO,QAAQ;AAAA;AAGjB,UAAO,aAAa,SAClB,SACM;AACN,QAAI;AAAS;AACb,iBAAa;AAAA;AAGf,SAAO;AAAA;AAxKO;;;ACzFT,kCAAkC,yBAAqC;AAC5E,MACE,4BAA2B,QAC3B,4BAA2B,UAC3B,4BAA2B,OAC1B,OAAO,4BAA2B,YAAY,4BAA2B,GAC1E;AACA,8BAAyB;AAAA,aAEzB,4BAA2B,SAC3B,4BAA2B,WAC3B,4BAA2B,KAC3B,4BAA2B,OAC3B,2BAA0B,QAC1B,4BAA2B,UAC3B,4BAA2B,aAC3B;AACA,8BAAyB;AAAA,SACpB;AACL,8BAAyB,OAAO;AAAA;AAElC,SAAO;AAAA;AArBO;AAXhB;AAmCA,IAAM,yBAAiC,yBACrC,OAAO,YAAY,cACf,cAAQ,IAAI,SAAZ,YAAoB,QAAQ,IAAI,QAChC,OAAO,iBAAiB,cACxB,mBAAa,SAAb,YAAqB,aAAa,QAClC;AASC,4BACL,SAAiB,wBACA;AACjB,MAAI;AACJ,MAAI,SAAS;AACb,MAAI,SAAS;AAEb,MAAI,CAAC,QAAQ;AACX,SAAK,gCAAU,MAAc;AAC3B,aAAO;AAAA,OADJ;AAAA,aAGI,WAAW,KAAK;AACzB,SAAK,gCAAU,MAAc;AAC3B,aAAO;AAAA,OADJ;AAAA,SAGA;AACL,QAAI;AACJ,UAAM,QAAQ,OAAO,MAAM;AAC3B,UAAM,MAAM,MAAM;AAClB,SAAK,IAAI,GAAG,IAAI,KAAK,KAAK;AACxB,UAAI,CAAC,MAAM,IAAI;AAEb;AAAA;AAEF,UAAI,WAAW,MAAM,GAAG,QAAQ,OAAO;AACvC,UAAI,SAAS,OAAO,KAAK;AACvB,eAAO,KAAK,IAAI,OAAO,MAAM,SAAS,OAAO,KAAK;AAAA,aAC7C;AACL,eAAO,KAAK,IAAI,OAAO,MAAM,WAAW;AAAA;AAAA;AAI5C,SAAK,gCAAU,MAAc;AAC3B,UAAI,OAAO,WAAW,KAAK,OAAO,WAAW,GAAG;AAC9C,eAAO;AAAA;AAET,UAAI,IAAG;AACP,WAAK,KAAI,GAAG,OAAM,OAAO,QAAQ,KAAI,MAAK,MAAK;AAC7C,YAAI,OAAO,IAAG,KAAK,OAAO;AACxB,iBAAO;AAAA;AAAA;AAGX,WAAK,KAAI,GAAG,OAAM,OAAO,QAAQ,KAAI,MAAK,MAAK;AAC7C,YAAI,OAAO,IAAG,KAAK,OAAO;AACxB,iBAAO;AAAA;AAAA;AAGX,aAAO;AAAA,OAfJ;AAAA;AAkBP,KAAG,SAAS;AACZ,KAAG,SAAS;AACZ,KAAG,SAAS;AACZ,SAAO;AAAA;AArDO;AAjDhB;AAyGA,IAAM,qBACJ,OAAO,YAAY,cACf,sBAAQ,IAAI,eAAZ,aAA0B,QAAQ,IAAI,UAAtC,aAA+C,QAAQ,IAAI,cAC3D,OAAO,iBAAiB,cACxB,yBAAa,eAAb,YAA2B,aAAa,UAAxC,YAAiD,aAAa,cAC9D;AAEC,wBACL,SAA0B,oBACI;AAC9B,MAAI,cAAwB;AAC5B,MAAI,OAAO,WAAW,UAAU;AAC9B,UAAM,IAAI,cAAc,OAAO,oBAAoB;AACnD,QAAI,KAAK;AAAM,oBAAc;AAAA,aACpB,OAAO,WAAW,UAAU;AACrC,kBAAc;AAAA;AAEhB,SAAO,CAAC,UAAU,SAAS;AAAA;AAVb;;;ACtGhB,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;AAAA;AANT;AASF,4BAA+C;AACpD,MAAI,WAAW;AACf,MAAI,SAAS,eAAe,MAAM;AAChC,aAAS,cAAc;AAAA;AAEzB,SAAO,SAAS;AAAA;AALF;;;ACXhB,IAAI;AAQJ,4BAA4B;AAC1B,MAAI,SAAS;AACb,SAAO,YAAY,CAAC;AACpB,SAAO;AAAA;AAHA;AAMT,IAAI;AACF,MAAI,WAAU;AACd,MAAI,YAAW,MAAM;AACnB,QAAI,sCAAS,WAAU,MAAM;AAC3B,qBAAe;AACf,eAAQ,SAAS;AAAA,WACZ;AACL,qBAAe,SAAQ;AAAA;AAAA,SAEpB;AACL,mBAAe;AAAA;AAAA,SAEV,GAAP;AACA,iBAAe;AAAA;AAMV,IAAM,SAAS;;;ACpCf,IAAM,eAAe,6BAAc,KAAK,OAAnB;AAIrB,4BAA4B,IAAoB;AACrD,SAAO,KAAK,MAAO,MAAK,KAAM,QAAQ,KAAK,MAAM,GAAG,QAAQ,KAAK;AAAA;AADnD;AAIT,sBACF,gBACe;AAClB,WAAS,iBAAiB,gBAAgB;AACxC,QAAI,yBAAyB,MAAM;AACjC,aAAO;AAAA;AAET,QAAI,OAAO,kBAAkB,UAAU;AACrC,UAAI,OAAO;AACX,UAAI,cAAc,SAAS,MAAM;AAC/B,YAAI;AACF,iBAAO,IAAI,KAAK;AAAA,iBACT,KAAP;AAAA;AAAA;AAEJ,UAAI,CAAE,iBAAgB,OAAO;AAC3B,YAAI,IAAI,2BAA2B,KAAK;AACxC,YAAI,GAAG;AACL,iBAAO,IAAI,KAAK,CAAC,EAAE,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,IAAI,IAAI;AAAA;AAAA;AAGjD,UAAI,gBAAgB,MAAM;AACxB,eAAO;AAAA;AAAA;AAAA;AAAA;AArBC;","names":[]}
1
+ {"version":3,"sources":["../src/common/data/is.ts","../src/common/data/deep.ts","../src/common/log-console.ts","../src/common/log-base.ts","../src/common/log-filter.ts","../src/common/global.ts","../src/common/log.ts","../src/common/time.ts"],"sourcesContent":["// 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 { 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","// (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 { 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","// 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"],"mappings":"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","names":[]}
@@ -5,7 +5,7 @@ import {
5
5
  getTimestamp,
6
6
  useLevelFilter,
7
7
  useNamespaceFilter
8
- } from "./chunk-DUGVRMRT.js";
8
+ } from "./chunk-G3LBBVZT.js";
9
9
 
10
10
  // src/browser/log-colors.ts
11
11
  var colors = [
@@ -245,4 +245,4 @@ export {
245
245
  LoggerBrowserSetupDebugFactory,
246
246
  activateConsoleDebug
247
247
  };
248
- //# sourceMappingURL=chunk-MYUIYPZU.js.map
248
+ //# sourceMappingURL=chunk-QCK7R55W.js.map
@@ -73,9 +73,12 @@ __export(index_all_exports, {
73
73
  SerialQueue: () => SerialQueue,
74
74
  Uint8ArrayToJson: () => Uint8ArrayToJson,
75
75
  Uint8ArrayToString: () => Uint8ArrayToString,
76
+ XRX: () => XRX,
76
77
  _decodeUtf8Polyfill: () => _decodeUtf8Polyfill,
77
78
  _encodeUtf8Polyfill: () => _encodeUtf8Polyfill,
78
79
  activateConsoleDebug: () => activateConsoleDebug,
80
+ arrayAvg: () => arrayAvg,
81
+ arrayBatches: () => arrayBatches,
79
82
  arrayEmptyInPlace: () => arrayEmptyInPlace,
80
83
  arrayFilterInPlace: () => arrayFilterInPlace,
81
84
  arrayFlatten: () => arrayFlatten,
@@ -92,10 +95,12 @@ __export(index_all_exports, {
92
95
  arrayShuffleInPlace: () => arrayShuffleInPlace,
93
96
  arraySorted: () => arraySorted,
94
97
  arraySortedNumbers: () => arraySortedNumbers,
98
+ arraySum: () => arraySum,
95
99
  arraySymmetricDifference: () => arraySymmetricDifference,
96
100
  arrayToggleInPlace: () => arrayToggleInPlace,
97
101
  arrayUnion: () => arrayUnion,
98
102
  arrayUnique: () => arrayUnique,
103
+ avg: () => avg,
99
104
  between: () => between,
100
105
  cloneJsonObject: () => cloneJsonObject,
101
106
  cloneObject: () => cloneObject,
@@ -184,11 +189,13 @@ __export(index_all_exports, {
184
189
  lazyListener: () => lazyListener,
185
190
  linkifyPlainText: () => linkifyPlainText,
186
191
  loggerStackTraceDebug: () => loggerStackTraceDebug,
192
+ memoize: () => memoize,
187
193
  messages: () => messages,
188
194
  moveSortWeight: () => moveSortWeight,
189
195
  parseDate: () => parseDate,
190
196
  parseOrderby: () => parseOrderby,
191
197
  parseQuery: () => parseQuery,
198
+ pbcopy: () => pbcopy,
192
199
  platform: () => platform,
193
200
  promisify: () => promisify,
194
201
  qid: () => qid,
@@ -196,6 +203,8 @@ __export(index_all_exports, {
196
203
  randomFloat: () => randomFloat,
197
204
  randomInt: () => randomInt,
198
205
  randomUint8Array: () => randomUint8Array,
206
+ regExpEscape: () => regExpEscape,
207
+ regExpString: () => regExpString,
199
208
  renderMessages: () => renderMessages,
200
209
  roundDown: () => roundDown,
201
210
  roundHalfAwayFromZero: () => roundHalfAwayFromZero,
@@ -221,6 +230,7 @@ __export(index_all_exports, {
221
230
  suidBytes: () => suidBytes,
222
231
  suidBytesDate: () => suidBytesDate,
223
232
  suidDate: () => suidDate,
233
+ sum: () => sum,
224
234
  supportsColors: () => supportsColors,
225
235
  throttle: () => throttle,
226
236
  timeout: () => timeout,
@@ -967,6 +977,14 @@ function between(min, value, max) {
967
977
  return Math.max(min, Math.min(max, value));
968
978
  }
969
979
  __name(between, "between");
980
+ function sum(array) {
981
+ return array.reduce((acc, value) => acc + value, 0);
982
+ }
983
+ __name(sum, "sum");
984
+ function avg(array) {
985
+ return sum(array) / array.length;
986
+ }
987
+ __name(avg, "avg");
970
988
 
971
989
  // src/common/data/orderby.ts
972
990
  function parseOrderby(value = "") {
@@ -1112,6 +1130,25 @@ function arrayMin(...array) {
1112
1130
  return arrayFlatten(array).reduce((acc, value) => acc != null ? value < acc ? value : acc : value, void 0);
1113
1131
  }
1114
1132
  __name(arrayMin, "arrayMin");
1133
+ function arraySum(...array) {
1134
+ return arrayFlatten(array).reduce((acc, value) => acc + value, 0);
1135
+ }
1136
+ __name(arraySum, "arraySum");
1137
+ function arrayAvg(...array) {
1138
+ let flatArray = arrayFlatten(array);
1139
+ return flatArray.reduce((acc, value) => acc + value, 0) / flatArray.length;
1140
+ }
1141
+ __name(arrayAvg, "arrayAvg");
1142
+ function arrayBatches(array, chunckLength) {
1143
+ let chunks = [];
1144
+ let i = 0;
1145
+ const n = array.length;
1146
+ while (i < n) {
1147
+ chunks.push(array.slice(i, i += chunckLength));
1148
+ }
1149
+ return chunks;
1150
+ }
1151
+ __name(arrayBatches, "arrayBatches");
1115
1152
  function createArray(size2 = 0, item) {
1116
1153
  if (size2 <= 0)
1117
1154
  return [];
@@ -1503,6 +1540,7 @@ var Currency = _Currency;
1503
1540
  __name(Currency, "Currency");
1504
1541
  Currency.zero = new _Currency(0);
1505
1542
  Currency.one = new _Currency(1);
1543
+ Currency.hundred = new _Currency(100);
1506
1544
  function parse(value, opts, useRounding = true) {
1507
1545
  let v = 0, { decimal, errorOnInvalid, precision: decimals, fromCents } = opts, precision = pow(decimals), isNumber2 = typeof value === "number";
1508
1546
  if (value instanceof Currency && fromCents) {
@@ -1741,7 +1779,6 @@ var Day = class {
1741
1779
  if (mm === 0)
1742
1780
  mm = 12;
1743
1781
  let yy = Math.floor((m - 1) / 12);
1744
- console.log("calc", m, mm, yy, [this.year + yy, mm, this.day]);
1745
1782
  return Day.from([this.year + yy, mm, this.day]);
1746
1783
  }
1747
1784
  daysUntil(otherDay) {
@@ -1977,6 +2014,128 @@ function cloneJsonObject(obj) {
1977
2014
  return JSON.parse(JSON.stringify(obj));
1978
2015
  }
1979
2016
  __name(cloneJsonObject, "cloneJsonObject");
2017
+ function memoize(fn) {
2018
+ let cache = /* @__PURE__ */ new Map();
2019
+ return (n) => {
2020
+ if (cache.has(n)) {
2021
+ return cache.get(n);
2022
+ }
2023
+ let result = fn(n);
2024
+ cache.set(n, result);
2025
+ return result;
2026
+ };
2027
+ }
2028
+ __name(memoize, "memoize");
2029
+
2030
+ // src/common/data/xrx.ts
2031
+ var RX_WHITESPACE = /\\\s|\s+|#[^\n]*\n?/gm;
2032
+ var RX_REAL_GROUPS = /\(\?P?<(\w[\w\d_]+)>|\((?!\?(:|\!|=|<=|<\!))/gm;
2033
+ var RX_LOOK_BEHIND = /^((?:\(\?[\w$]+\))?)\(\?<([=!])([\s\S]*?)\)/gm;
2034
+ function regExpString(rx) {
2035
+ return typeof rx === "string" ? rx : rx.source || "";
2036
+ }
2037
+ __name(regExpString, "regExpString");
2038
+ function regExpEscape(str) {
2039
+ return str.replace(/[-\[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
2040
+ }
2041
+ __name(regExpEscape, "regExpEscape");
2042
+ var XRX = class {
2043
+ constructor(pattern2, flags) {
2044
+ this.namedGroups = {};
2045
+ this.names = [];
2046
+ let _flags = flags != null ? flags : "";
2047
+ let _rx;
2048
+ if (pattern2 instanceof RegExp) {
2049
+ if (flags == null) {
2050
+ _flags = pattern2.flags;
2051
+ }
2052
+ _rx = pattern2.source;
2053
+ } else {
2054
+ _rx = pattern2;
2055
+ }
2056
+ const extended = _flags && _flags.indexOf("x") !== -1;
2057
+ if (extended) {
2058
+ _flags = _flags.replace("x", "");
2059
+ _rx = _rx.replace(RX_WHITESPACE, (r) => {
2060
+ return r[0] === "\\" ? r : "";
2061
+ });
2062
+ }
2063
+ if (!(pattern2 instanceof RegExp)) {
2064
+ let index = 0;
2065
+ _rx = _rx.replace(RX_REAL_GROUPS, (str, name) => {
2066
+ index += 1;
2067
+ if (name) {
2068
+ if (name !== "index" && name !== "length" && !this.namedGroups[name]) {
2069
+ this.namedGroups[name] = index;
2070
+ } else {
2071
+ console.error(`Unallowed or duplicate group name: ${name}`);
2072
+ }
2073
+ return "(";
2074
+ }
2075
+ return str;
2076
+ });
2077
+ this.names = Object.keys(this.namedGroups);
2078
+ }
2079
+ _rx = regExpString(_rx);
2080
+ RX_LOOK_BEHIND.lastIndex = 0;
2081
+ let parts = RX_LOOK_BEHIND.exec(_rx);
2082
+ if (parts) {
2083
+ this.lookBehind = {
2084
+ rx: new RegExp(`${parts[3]}$(?!\\s)`),
2085
+ expect: parts ? parts[2] === "=" : !parts
2086
+ };
2087
+ _rx = _rx.substr(parts[0].length);
2088
+ }
2089
+ this.rx = new RegExp(_rx, _flags);
2090
+ }
2091
+ get lastIndex() {
2092
+ return this.rx.lastIndex;
2093
+ }
2094
+ set lastIndex(index) {
2095
+ this.rx.lastIndex = index;
2096
+ }
2097
+ _handleMatch(m) {
2098
+ if (this.lookBehind) {
2099
+ let leftContext = m.input.slice(0, m.index);
2100
+ if (this.lookBehind.expect !== this.lookBehind.rx.test(leftContext)) {
2101
+ return null;
2102
+ }
2103
+ }
2104
+ for (let name of this.names) {
2105
+ m[name] = m[this.namedGroups[name]];
2106
+ }
2107
+ return m;
2108
+ }
2109
+ exec(str) {
2110
+ let m;
2111
+ while (m = this.rx.exec(str)) {
2112
+ if (this.rx.lastIndex === m.index) {
2113
+ this.rx.lastIndex++;
2114
+ }
2115
+ m = this._handleMatch(m);
2116
+ if (m != null) {
2117
+ return m;
2118
+ }
2119
+ }
2120
+ }
2121
+ execAll(str) {
2122
+ let matches = [];
2123
+ let m;
2124
+ this.rx.lastIndex = 0;
2125
+ while (m = this.exec(str)) {
2126
+ matches.push(m);
2127
+ }
2128
+ this.rx.lastIndex = 0;
2129
+ return matches;
2130
+ }
2131
+ replace(str, replacement) {
2132
+ let fn = typeof replacement === "function" ? replacement : () => replacement;
2133
+ return str.replace(this.rx, (m) => {
2134
+ return fn(m);
2135
+ });
2136
+ }
2137
+ };
2138
+ __name(XRX, "XRX");
1980
2139
 
1981
2140
  // src/common/dispose-defer.ts
1982
2141
  var log3 = Logger("dispose");
@@ -2944,11 +3103,14 @@ __name(usePool, "usePool");
2944
3103
 
2945
3104
  // src/common/queue.ts
2946
3105
  var log6 = Logger("zeed:queue");
2947
- var SerialQueue = class {
3106
+ var SerialQueue = class extends Emitter {
2948
3107
  constructor(opt = {}) {
3108
+ super();
2949
3109
  this.queue = [];
2950
3110
  this.isPaused = false;
2951
3111
  this.waitToFinish = [];
3112
+ this.max = 0;
3113
+ this.resolved = 0;
2952
3114
  const { name = uname("queue"), logLevel } = opt;
2953
3115
  this.name = name;
2954
3116
  this.log = Logger(`zeed:queue:${name}`);
@@ -2970,6 +3132,10 @@ var SerialQueue = class {
2970
3132
  if (info == null) {
2971
3133
  break;
2972
3134
  }
3135
+ if (this.resolved === 0) {
3136
+ this.emit("didStart", this.max);
3137
+ this.emit("didUpdate", this.max, 0);
3138
+ }
2973
3139
  const { name, task, resolve: resolve5 } = info;
2974
3140
  this.currentTask = task();
2975
3141
  let result = void 0;
@@ -2982,6 +3148,13 @@ var SerialQueue = class {
2982
3148
  }
2983
3149
  resolve5(result);
2984
3150
  this.currentTask = void 0;
3151
+ this.resolved += 1;
3152
+ this.emit("didUpdate", this.max, this.resolved);
3153
+ }
3154
+ if (this.queue.length === 0) {
3155
+ this.emit("didFinish", this.max);
3156
+ this.max = 0;
3157
+ this.resolved = 0;
2985
3158
  }
2986
3159
  while (this.waitToFinish.length > 0) {
2987
3160
  this.waitToFinish.shift()();
@@ -2993,6 +3166,7 @@ var SerialQueue = class {
2993
3166
  this.log.info(`immediate execution ${name}`);
2994
3167
  return await task();
2995
3168
  }
3169
+ this.max += 1;
2996
3170
  this.log(`enqueue ${name}`);
2997
3171
  return new Promise((resolve5) => {
2998
3172
  this.queue.push({
@@ -3011,6 +3185,7 @@ var SerialQueue = class {
3011
3185
  }
3012
3186
  async cancelAll(unblock = true) {
3013
3187
  this.log(`cancelAll`);
3188
+ this.emit("didCancel", this.queue.length);
3014
3189
  let resolver = this.queue.map((task) => task.resolve);
3015
3190
  this.queue = [];
3016
3191
  resolver.forEach((r) => r(void 0));
@@ -3154,6 +3329,18 @@ function debounce(callback, opt = {}) {
3154
3329
  }
3155
3330
  __name(debounce, "debounce");
3156
3331
 
3332
+ // src/node/clipboard.ts
3333
+ function pbcopy(data) {
3334
+ return new Promise(function(resolve5, reject) {
3335
+ const proc = require("child_process").spawn("pbcopy");
3336
+ proc.on("error", (err) => reject(err));
3337
+ proc.on("close", (err) => resolve5(data));
3338
+ proc.stdin.write(data);
3339
+ proc.stdin.end();
3340
+ });
3341
+ }
3342
+ __name(pbcopy, "pbcopy");
3343
+
3157
3344
  // src/node/crypto.ts
3158
3345
  var import_crypto3 = __toESM(require("crypto"), 1);
3159
3346
  try {
@@ -4217,9 +4404,12 @@ module.exports = __toCommonJS(index_all_exports);
4217
4404
  SerialQueue,
4218
4405
  Uint8ArrayToJson,
4219
4406
  Uint8ArrayToString,
4407
+ XRX,
4220
4408
  _decodeUtf8Polyfill,
4221
4409
  _encodeUtf8Polyfill,
4222
4410
  activateConsoleDebug,
4411
+ arrayAvg,
4412
+ arrayBatches,
4223
4413
  arrayEmptyInPlace,
4224
4414
  arrayFilterInPlace,
4225
4415
  arrayFlatten,
@@ -4236,10 +4426,12 @@ module.exports = __toCommonJS(index_all_exports);
4236
4426
  arrayShuffleInPlace,
4237
4427
  arraySorted,
4238
4428
  arraySortedNumbers,
4429
+ arraySum,
4239
4430
  arraySymmetricDifference,
4240
4431
  arrayToggleInPlace,
4241
4432
  arrayUnion,
4242
4433
  arrayUnique,
4434
+ avg,
4243
4435
  between,
4244
4436
  cloneJsonObject,
4245
4437
  cloneObject,
@@ -4328,11 +4520,13 @@ module.exports = __toCommonJS(index_all_exports);
4328
4520
  lazyListener,
4329
4521
  linkifyPlainText,
4330
4522
  loggerStackTraceDebug,
4523
+ memoize,
4331
4524
  messages,
4332
4525
  moveSortWeight,
4333
4526
  parseDate,
4334
4527
  parseOrderby,
4335
4528
  parseQuery,
4529
+ pbcopy,
4336
4530
  platform,
4337
4531
  promisify,
4338
4532
  qid,
@@ -4340,6 +4534,8 @@ module.exports = __toCommonJS(index_all_exports);
4340
4534
  randomFloat,
4341
4535
  randomInt,
4342
4536
  randomUint8Array,
4537
+ regExpEscape,
4538
+ regExpString,
4343
4539
  renderMessages,
4344
4540
  roundDown,
4345
4541
  roundHalfAwayFromZero,
@@ -4365,6 +4561,7 @@ module.exports = __toCommonJS(index_all_exports);
4365
4561
  suidBytes,
4366
4562
  suidBytesDate,
4367
4563
  suidDate,
4564
+ sum,
4368
4565
  supportsColors,
4369
4566
  throttle,
4370
4567
  timeout,