zeed 0.8.1 → 0.8.2

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.
@@ -482,33 +482,5 @@ function parseDate(...dateCandidates) {
482
482
  }
483
483
  __name(parseDate, "parseDate");
484
484
 
485
- export {
486
- __name,
487
- isObject,
488
- isPrimitive,
489
- isArray,
490
- isRecord,
491
- isString,
492
- isNumber,
493
- isInteger,
494
- isSafeInteger,
495
- isBoolean,
496
- isNullOrUndefined,
497
- isUint8Array,
498
- deepEqual,
499
- deepMerge,
500
- getNamespaceFilterString,
501
- useNamespaceFilter,
502
- parseLogLevel,
503
- useLevelFilter,
504
- LogLevel,
505
- LogLevelAlias,
506
- LoggerContext,
507
- LoggerConsoleHandler,
508
- getGlobalContext,
509
- Logger,
510
- getTimestamp,
511
- formatMilliseconds,
512
- parseDate
513
- };
485
+ export { LogLevel, LogLevelAlias, Logger, LoggerConsoleHandler, LoggerContext, __name, deepEqual, deepMerge, formatMilliseconds, getGlobalContext, getNamespaceFilterString, getTimestamp, isArray, isBoolean, isInteger, isNullOrUndefined, isNumber, isObject, isPrimitive, isRecord, isSafeInteger, isString, isUint8Array, parseDate, parseLogLevel, useLevelFilter, useNamespaceFilter };
514
486
  //# sourceMappingURL=chunk-AM7QCF4I.js.map
@@ -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\nexport function isUint8Array(obj: unknown): obj is Uint8Array {\n return isObject(obj) && obj.constructor.name === \"Uint8Array\"\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { isObject, isPrimitive } from \"./is\"\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\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","// (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 { parseLogLevel, 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 type LogLevelAliasKey = keyof typeof LogLevelAlias\nexport type LogLevelAliasType = LogLevel | boolean | LogLevelAliasKey\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, level?: LogLevelAliasType): 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(\n name: string = \"\",\n level?: LogLevelAliasType\n ): LoggerInterface {\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 = parseLogLevel(level ?? LogLevel.all)\n\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 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(\n name: string = \"\",\n level?: LogLevelAliasType\n ): LoggerInterface {\n return logFactory(name, level)\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, LogLevelAliasType } 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 parseLogLevel(filter: LogLevelAliasType): LogLevel {\n if (filter === false) return LogLevel.off\n if (typeof filter === \"number\") return filter as number\n if (typeof filter === \"string\") {\n const l = LogLevelAlias[filter.toLocaleLowerCase().trim()]\n if (l != null) return l\n }\n return LogLevel.all\n}\n\nexport function useLevelFilter(\n filter: string | number | boolean | LogLevelAliasType = defaultLevelFilter\n): (level: LogLevel) => boolean {\n const filterLevel = parseLogLevel(filter)\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":["LogLevel","prefix","Logger","defaultNamespaceFilter","i","len","_global"]}
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"],"names":["LogLevel","prefix","Logger","defaultNamespaceFilter","i","len","_global"],"mappings":"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","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\nexport function isUint8Array(obj: unknown): obj is Uint8Array {\n return isObject(obj) && obj.constructor.name === \"Uint8Array\"\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { isObject, isPrimitive } from \"./is\"\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\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","// (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 { parseLogLevel, 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 type LogLevelAliasKey = keyof typeof LogLevelAlias\nexport type LogLevelAliasType = LogLevel | boolean | LogLevelAliasKey\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, level?: LogLevelAliasType): 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(\n name: string = \"\",\n level?: LogLevelAliasType\n ): LoggerInterface {\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 = parseLogLevel(level ?? LogLevel.all)\n\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 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(\n name: string = \"\",\n level?: LogLevelAliasType\n ): LoggerInterface {\n return logFactory(name, level)\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, LogLevelAliasType } 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 parseLogLevel(filter: LogLevelAliasType): LogLevel {\n if (filter === false) return LogLevel.off\n if (typeof filter === \"number\") return filter as number\n if (typeof filter === \"string\") {\n const l = LogLevelAlias[filter.toLocaleLowerCase().trim()]\n if (l != null) return l\n }\n return LogLevel.all\n}\n\nexport function useLevelFilter(\n filter: string | number | boolean | LogLevelAliasType = defaultLevelFilter\n): (level: LogLevel) => boolean {\n const filterLevel = parseLogLevel(filter)\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"]}
@@ -1,18 +1,10 @@
1
- import {
2
- cloneObject,
3
- renderMessages,
4
- toCamelCase,
5
- toValidFilename,
6
- valueToBoolean
7
- } from "./chunk-3LN7HI45.js";
8
- import {
9
- Logger,
10
- __name,
11
- formatMilliseconds,
12
- getTimestamp,
13
- useLevelFilter,
14
- useNamespaceFilter
15
- } from "./chunk-AM7QCF4I.js";
1
+ import { toCamelCase, toValidFilename, cloneObject, renderMessages, valueToBoolean } from './chunk-3LN7HI45.js';
2
+ import { __name, Logger, getTimestamp, useNamespaceFilter, useLevelFilter, formatMilliseconds } from './chunk-AM7QCF4I.js';
3
+ import { spawn } from 'child_process';
4
+ import fs, { mkdirSync, writeFileSync, readFileSync, unlinkSync, rmSync, readdirSync, createWriteStream } from 'fs';
5
+ import { resolve, dirname, normalize, join } from 'path';
6
+ import { stat, mkdir, rm, readFile, writeFile } from 'fs/promises';
7
+ import tty from 'tty';
16
8
 
17
9
  // src/node/args.ts
18
10
  function parseArgs(config = {}) {
@@ -85,9 +77,6 @@ function parseArgs(config = {}) {
85
77
  return opts;
86
78
  }
87
79
  __name(parseArgs, "parseArgs");
88
-
89
- // src/node/clipboard.ts
90
- import { spawn } from "child_process";
91
80
  function pbcopy(data) {
92
81
  return new Promise(async (resolve6, reject) => {
93
82
  const proc = spawn("pbcopy");
@@ -98,10 +87,6 @@ function pbcopy(data) {
98
87
  });
99
88
  }
100
89
  __name(pbcopy, "pbcopy");
101
-
102
- // src/node/env.ts
103
- import fs from "fs";
104
- import { resolve } from "path";
105
90
  var log = Logger("zeed:env");
106
91
  var NEWLINE = "\n";
107
92
  var RE_INI_KEY_VAL = /^\s*([\w_.-]+)\s*=\s*(.*)?\s*$/;
@@ -181,24 +166,13 @@ function setupEnv(options = {}) {
181
166
  }
182
167
  }
183
168
  __name(setupEnv, "setupEnv");
184
-
185
- // src/node/filestorage.ts
186
- import {
187
- mkdirSync,
188
- readdirSync,
189
- readFileSync,
190
- rmSync,
191
- unlinkSync,
192
- writeFileSync
193
- } from "fs";
194
- import { dirname, resolve as resolve2 } from "path";
195
169
  var log2 = Logger("zeed:filestorage");
196
170
  var FileStorage = class {
197
171
  constructor(opt = {}) {
198
172
  this.store = {};
199
173
  this.fileKeys = void 0;
200
174
  this.pretty = false;
201
- this.dirname = resolve2(process.cwd(), opt.path || ".fileStorage");
175
+ this.dirname = resolve(process.cwd(), opt.path || ".fileStorage");
202
176
  this.pretty = !!opt.pretty;
203
177
  this.extension = opt.extension ?? ".json";
204
178
  if (opt.extension && !this.extension.startsWith(".")) {
@@ -229,7 +203,7 @@ var FileStorage = class {
229
203
  }
230
204
  }
231
205
  getPath(key) {
232
- return resolve2(this.dirname, this.keyToFilename(key) + this.extension);
206
+ return resolve(this.dirname, this.keyToFilename(key) + this.extension);
233
207
  }
234
208
  getBuffer(key) {
235
209
  const path = this.getPath(key);
@@ -294,10 +268,6 @@ var FileStorage = class {
294
268
  }
295
269
  };
296
270
  __name(FileStorage, "FileStorage");
297
-
298
- // src/node/fs.ts
299
- import { mkdir, rm, stat, readFile, writeFile } from "fs/promises";
300
- import { join as joinPath, normalize } from "path";
301
271
  function toHumanReadableFilePath(path) {
302
272
  const p = normalize(path);
303
273
  const h = process.env.HOME;
@@ -317,7 +287,7 @@ async function exists(path) {
317
287
  }
318
288
  __name(exists, "exists");
319
289
  async function ensureFolder(...parts) {
320
- const path = joinPath(...parts);
290
+ const path = join(...parts);
321
291
  if (!await exists(path)) {
322
292
  await mkdir(path, { recursive: true });
323
293
  }
@@ -325,7 +295,7 @@ async function ensureFolder(...parts) {
325
295
  }
326
296
  __name(ensureFolder, "ensureFolder");
327
297
  async function removeFolder(...parts) {
328
- const path = joinPath(...parts);
298
+ const path = join(...parts);
329
299
  if (await exists(path)) {
330
300
  await rm(path, { recursive: true });
331
301
  }
@@ -333,7 +303,7 @@ async function removeFolder(...parts) {
333
303
  }
334
304
  __name(removeFolder, "removeFolder");
335
305
  async function readText(...parts) {
336
- const path = joinPath(...parts);
306
+ const path = join(...parts);
337
307
  if (await exists(path)) {
338
308
  return await readFile(path, "utf-8");
339
309
  }
@@ -343,15 +313,11 @@ async function writeText(path, content) {
343
313
  await writeFile(path, content, "utf-8");
344
314
  }
345
315
  __name(writeText, "writeText");
346
-
347
- // src/node/log-file.ts
348
- import { createWriteStream, mkdirSync as mkdirSync2 } from "fs";
349
- import { dirname as dirname2, resolve as resolve4 } from "path";
350
316
  var namespaces = {};
351
317
  function LoggerFileHandler(path, opt = {}) {
352
318
  const { level = -1 /* all */, filter = "*" } = opt;
353
- path = resolve4(process.cwd(), path);
354
- mkdirSync2(dirname2(path), { recursive: true });
319
+ path = resolve(process.cwd(), path);
320
+ mkdirSync(dirname(path), { recursive: true });
355
321
  var stream = createWriteStream(path, { flags: "a" });
356
322
  const matchesNamespace = useNamespaceFilter(filter);
357
323
  const matchesLevel = useLevelFilter(level);
@@ -391,9 +357,6 @@ function LoggerFileHandler(path, opt = {}) {
391
357
  };
392
358
  }
393
359
  __name(LoggerFileHandler, "LoggerFileHandler");
394
-
395
- // src/node/log-util.ts
396
- import { resolve as resolve5 } from "path";
397
360
  function getStackLlocationList(stack) {
398
361
  var _a2, _b2;
399
362
  if (typeof stack !== "string")
@@ -411,9 +374,9 @@ function getStackLlocationList(stack) {
411
374
  })) == null ? void 0 : _b2.filter((v) => v != null)) || [];
412
375
  }
413
376
  __name(getStackLlocationList, "getStackLlocationList");
414
- var cwd = resolve5(process.cwd());
377
+ var cwd = resolve(process.cwd());
415
378
  var _a, _b;
416
- var home = ((_a = process.env) == null ? void 0 : _a.HOME) ? resolve5((_b = process.env) == null ? void 0 : _b.HOME) : "";
379
+ var home = ((_a = process.env) == null ? void 0 : _a.HOME) ? resolve((_b = process.env) == null ? void 0 : _b.HOME) : "";
417
380
  function pathStripCwd(path) {
418
381
  if (path.includes("/node_modules/")) {
419
382
  return "";
@@ -473,9 +436,6 @@ function getSourceLocationByPrecedingPattern(patterns, stripCwd = true) {
473
436
  return line;
474
437
  }
475
438
  __name(getSourceLocationByPrecedingPattern, "getSourceLocationByPrecedingPattern");
476
-
477
- // src/node/log-node.ts
478
- import tty from "tty";
479
439
  function shouldUseColor() {
480
440
  try {
481
441
  if (process.env.ZEED_COLOR != null) {
@@ -639,28 +599,5 @@ function LoggerNodeHandler(opt = {}) {
639
599
  }
640
600
  __name(LoggerNodeHandler, "LoggerNodeHandler");
641
601
 
642
- export {
643
- parseArgs,
644
- pbcopy,
645
- stringToPath,
646
- valueToPath,
647
- toPath,
648
- setupEnv,
649
- FileStorage,
650
- toHumanReadableFilePath,
651
- exists,
652
- ensureFolder,
653
- removeFolder,
654
- readText,
655
- writeText,
656
- LoggerFileHandler,
657
- getStackLlocationList,
658
- getSourceLocation,
659
- getStack,
660
- getSourceLocationByPrecedingPattern,
661
- colorString,
662
- colorStringList,
663
- loggerStackTraceDebug,
664
- LoggerNodeHandler
665
- };
602
+ export { FileStorage, LoggerFileHandler, LoggerNodeHandler, colorString, colorStringList, ensureFolder, exists, getSourceLocation, getSourceLocationByPrecedingPattern, getStack, getStackLlocationList, loggerStackTraceDebug, parseArgs, pbcopy, readText, removeFolder, setupEnv, stringToPath, toHumanReadableFilePath, toPath, valueToPath, writeText };
666
603
  //# sourceMappingURL=chunk-HI3XD4NV.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/node/args.ts","../src/node/clipboard.ts","../src/node/env.ts","../src/node/filestorage.ts","../src/node/fs.ts","../src/node/log-file.ts","../src/node/log-util.ts","../src/node/log-node.ts"],"sourcesContent":["// Inspired by https://github.com/kof/node-argsparser/blob/master/lib/argsparser.js\n\nimport { toCamelCase } from \"../common/data/camelcase\"\n\ninterface ParseConfig {\n args?: string[]\n alias?: Record<string, string[]>\n normalize?: (value: string) => string\n booleanArgs?: string | string[]\n listArgs?: string | string[]\n numberArgs?: string | string[]\n}\n\nexport function parseArgs(config: ParseConfig = {}) {\n const {\n args = process.argv.slice(1),\n alias = {},\n normalize = toCamelCase,\n booleanArgs = [],\n listArgs = [],\n numberArgs = [],\n } = config\n\n let nameToAlias = Object.entries(alias).reduce((map, curr) => {\n let [name, values] = curr\n if (typeof values === \"string\") values = [values]\n for (let value of values) {\n map[normalize(value)] = normalize(name)\n }\n return map\n }, {} as any)\n\n let opts: Record<string, any> = {\n _: [],\n }\n\n function setOpt(name: string, value: any) {\n if (opts[name] == null) {\n opts[name] = value\n } else if (typeof opts[name] === \"boolean\") {\n opts[name] = value\n } else if (Array.isArray(opts[name])) {\n opts[name].push(value)\n } else {\n opts[name] = [opts[name], value]\n }\n }\n\n let argList = [...args]\n let arg: string | undefined\n while ((arg = argList.shift())) {\n let value: any\n if (/^--?/.test(arg)) {\n let key = arg.replace(/^--?/, \"\")\n if (arg.includes(\"=\")) {\n let [name, valuePart] = key.split(\"=\", 2)\n key = name.trim()\n value = valuePart.trim()\n }\n key = normalize(key)\n key = nameToAlias[key] ?? key\n if (booleanArgs.includes(key)) {\n setOpt(key, true)\n } else {\n value = value ?? argList.shift() ?? \"\"\n if (numberArgs.includes(key)) {\n value = Number(value ?? 0)\n }\n if (listArgs.includes(key)) {\n if (Array.isArray(opts[key])) {\n opts[key].push(value)\n } else {\n opts[key] = [value]\n }\n } else {\n setOpt(key, value)\n }\n }\n } else {\n opts._.push(arg)\n }\n }\n\n return opts\n}\n","import { spawn } from \"child_process\"\n\n/** Copy string to clipboard */\nexport function pbcopy(data: string) {\n return new Promise(async (resolve, reject) => {\n const proc = spawn(\"pbcopy\")\n proc.on(\"error\", (err: any) => reject(err))\n proc.on(\"close\", () => resolve(data))\n proc.stdin.write(data)\n proc.stdin.end()\n })\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport { Logger } from \"../common/log\"\nimport { LogLevel } from \"../common/log-base\"\n\nimport fs from \"fs\"\nimport { resolve } from \"path\"\n\nconst log = Logger(\"zeed:env\")\n\nconst NEWLINE = \"\\n\"\nconst RE_INI_KEY_VAL = /^\\s*([\\w_.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\n|\\r|\\r\\n/\n\ntype csvOptions = {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n}\n\n// Parses src into an Object\nfunction parse(src: string, options: csvOptions = {}) {\n let obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n .forEach(function (line, idx) {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || \"\"\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === \"'\" && val[end] === \"'\"\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted) {\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n } else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n } else {\n log.debug(\n `did not match key and value when parsing line ${idx + 1}: ${line}`\n )\n }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue: string = \".\"\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = \"\"): string {\n if (value == null) value = defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\n// Populates process.env from .env file\nexport function setupEnv(options: csvOptions = {}) {\n const dotenvPath: string =\n options?.path ?? toPath(options?.filename ?? \".env\")\n const encoding: BufferEncoding = options?.encoding ?? \"utf8\"\n const debug = options?.debug || false\n\n if (debug !== true) log.level = LogLevel.off\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsedEnv = fs.existsSync(dotenvPath)\n ? parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n : {}\n const parsedEnvLocal = fs.existsSync(dotenvPath + \".local\")\n ? parse(fs.readFileSync(dotenvPath + \".local\", { encoding }), { debug })\n : {}\n\n const parsed: Record<string, string> = Object.assign(\n {},\n parsedEnv,\n parsedEnvLocal\n )\n let env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === \"string\") {\n key = options?.prefix + key\n }\n if (!Object.prototype.hasOwnProperty.call(env, key)) {\n if (value != null) {\n log.info(`set env.${key} = ${value}`)\n env[key] = value\n }\n } else {\n log.debug(`\"${key}\" is already defined and will not be overwritten`)\n }\n })\n return { parsed }\n } catch (e) {\n log.error(e)\n return { error: e }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport {\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { toValidFilename } from \"../common/data/path\"\nimport { cloneObject } from \"../common/data/utils\"\nimport { Logger } from \"../common/log\"\nimport { Json, ObjectStorage } from \"../common/types\"\n\nconst log = Logger(\"zeed:filestorage\")\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty: boolean = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path || \".fileStorage\")\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? \".json\"\n\n if (opt.extension && !this.extension.startsWith(\".\")) {\n this.extension = \".\" + this.extension\n }\n this.extensionLength = this.extension.length\n\n this.objectToString =\n opt.objectToString ??\n ((data: any): string => {\n return this.pretty\n ? JSON.stringify(data, null, 2)\n : JSON.stringify(data)\n })\n\n this.objectFromString =\n opt.objectFromString ??\n ((data: string) => {\n try {\n return JSON.parse(data)\n } catch (err) {\n log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, \"utf8\")\n } catch (err) {\n log.error(\"setItem error\", err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): Buffer {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n let value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null) return\n\n if (value != null) {\n return cloneObject(value) // this.objectFromString(value)\n }\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, \"utf8\")\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n } catch (err) {\n log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1) {\n this.fileKeys.splice(index, 1)\n }\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n } catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys =\n readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n (item) =>\n !item.isDirectory() && item.name.endsWith(this.extension)\n )\n .map((item) => item.name.slice(0, -this.extensionLength)) || []\n } catch (err) {}\n }\n let keys = [...(this.fileKeys || [])]\n for (let key of Object.keys(this.store)) {\n if (!keys.includes(key)) {\n keys.push(key)\n }\n }\n keys.sort()\n return keys\n }\n}\n","import { mkdir, rm, stat, readFile, writeFile } from \"node:fs/promises\"\nimport { join as joinPath, normalize, resolve } from \"node:path\"\n\nexport function toHumanReadableFilePath(path: string) {\n const p = normalize(path)\n const h = process.env.HOME\n if (h && p.startsWith(h)) {\n return \"~\" + p.slice(h.length)\n }\n return p\n}\n\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n } catch (err) {\n return false\n }\n return true\n}\n\nexport async function ensureFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (!(await exists(path))) {\n await mkdir(path, { recursive: true })\n }\n return path\n}\n\nexport async function removeFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (await exists(path)) {\n await rm(path, { recursive: true })\n }\n return path\n}\n\nexport async function readText(\n ...parts: string[]\n): Promise<string | undefined> {\n const path = joinPath(...parts)\n if (await exists(path)) {\n return await readFile(path, \"utf-8\")\n }\n}\n\nexport async function writeText(path: string, content: string): Promise<void> {\n await writeFile(path, content, \"utf-8\")\n}\n\n// todo: writeBinary, readBinary\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { renderMessages } from \"../common/data/convert\"\nimport { LogHandlerOptions, LogLevel, LogMessage } from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\n\nlet namespaces: Record<string, any> = {}\n\nexport function LoggerFileHandler(path: string, opt: LogHandlerOptions = {}) {\n const { level = LogLevel.all, filter = \"*\" } = opt\n path = resolve(process.cwd(), path)\n mkdirSync(dirname(path), { recursive: true })\n var stream = createWriteStream(path, { flags: \"a\" })\n // stream.end()\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 time = new Date().toISOString()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n namespaces[name] = ninfo\n }\n\n let args: string[] = [\n `[${name || \"*\"}]`,\n renderMessages(msg.messages, { pretty: false }),\n ]\n\n function write(...args: string[]): void {\n stream.write(args.join(\"\\t\") + \"\\n\")\n }\n\n switch (msg.level) {\n case LogLevel.info:\n write(time, `I|* `, ...args)\n break\n case LogLevel.warn:\n write(time, `W|** `, ...args)\n break\n case LogLevel.error:\n write(time, `E|***`, ...args)\n break\n default:\n write(time, `D| `, ...args)\n break\n }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { resolve } from \"path\"\n\nexport function getStackLlocationList(stack: string): any[] {\n if (typeof stack !== \"string\") return []\n // console.log(\"stack\", stack)\n return (\n stack\n ?.split(\"\\n\")\n ?.map((rawLine) => {\n let m = rawLine.match(\n /^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/\n )\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n })\n ?.filter((v) => v != null) || []\n )\n}\n\nconst cwd = resolve(process.cwd())\nconst home = process.env?.HOME ? resolve(process.env?.HOME) : \"\"\n// console.log(`cwd = ${cwd}, home = ${home}}`)\n\nfunction pathStripCwd(path: string) {\n // console.log(\">\", path)\n\n if (path.includes(\"/node_modules/\")) {\n return \"\"\n }\n\n const fileURL = \"file://\"\n if (path.startsWith(fileURL)) {\n return path.substr(fileURL.length)\n }\n\n if (cwd && path.startsWith(cwd)) {\n return path.substr(cwd.length + 1)\n }\n\n if (home && path.startsWith(home)) {\n path = \"~/\" + path.substr(home.length + 1)\n }\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n let m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/)\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n return \"\"\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n * @returns\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n let stack = new Error().stack || \"\"\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n return line || \"\"\n}\n\nexport function getStack(): string {\n return new Error().stack || \"\"\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true\n) {\n let line = \"\"\n let stack = new Error().stack || \"\"\n if (typeof stack === \"string\") {\n const lines = stack.split(\"\\n\").map((l) => l.trim())\n // console.log(lines)\n const index = lines.findIndex((l) => patterns.some((p) => l.startsWith(p)))\n line = lines[index + 1]\n if (line) {\n line = extractFileInfo(line)\n }\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n }\n return line\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport tty from \"tty\"\nimport { renderMessages, valueToBoolean } from \"../common/data/convert\"\nimport {\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\nimport {\n getSourceLocation,\n getSourceLocationByPrecedingPattern,\n getStack,\n} from \"./log-util\"\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\n\nfunction shouldUseColor(): boolean {\n try {\n if (process.env.ZEED_COLOR != null) {\n return valueToBoolean(process.env.ZEED_COLOR, false)\n }\n return tty.isatty(process.stdout.fd)\n } catch (err) {}\n return false\n}\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nfunction log(...args: any[]) {\n process.stdout.write(renderMessages(args) + \"\\n\")\n}\n\n// export const BOLD = Symbol()\n// export const UNBOLD = Symbol()\n// export const BLUE = Symbol()\n// export const GREY = Symbol()\n// export const GREEN = Symbol()\n// export const RED = Symbol()\n// export const PURPLE = Symbol()\n// export const ORANGE = Symbol()\n// export const UNCOLOR = Symbol()\n\n// const _browserStyleMap = {\n// [BOLD]: pair.create(\"font-weight\", \"bold\"),\n// [UNBOLD]: pair.create(\"font-weight\", \"normal\"),\n// [BLUE]: pair.create(\"color\", \"blue\"),\n// [GREEN]: pair.create(\"color\", \"green\"),\n// [GREY]: pair.create(\"color\", \"grey\"),\n// [RED]: pair.create(\"color\", \"red\"),\n// [PURPLE]: pair.create(\"color\", \"purple\"),\n// [ORANGE]: pair.create(\"color\", \"orange\"), // not well supported in chrome when debugging node with inspector - TODO: deprecate\n// [UNCOLOR]: pair.create(\"color\", \"black\"),\n// }\n\nconst TTY_STYLE = {\n BOLD: \"\\u001b[1m\",\n UNBOLD: \"\\u001b[2m\",\n RED: \"\\u001b[31m\",\n GREEN: \"\\u001b[32m\",\n BLUE: \"\\u001b[34m\",\n PURPLE: \"\\u001b[35m\",\n GRAY: \"\\u001b[37m\",\n ORANGE: \"\\u001b[38;5;208m\",\n UNCOLOR: \"\\u001b[0m\",\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = \"\\u001B[0m\"\n\nexport function colorString(value: string, colorCode: number) {\n const colorStart =\n colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : \"\\u001B[3\" + (colorCode < 8 ? colorCode : \"8;5;\" + colorCode) + \"m\"\n return `${colorStart}${value}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold: boolean = true\n) {\n return list.map((value) => {\n if (typeof value !== \"string\") return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nexport const loggerStackTraceDebug =\n \"loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485\"\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = undefined,\n filter = undefined,\n colors = shouldUseColor(),\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = true,\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 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\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0) {\n displayName = displayName.padStart(padding, \" \")\n }\n\n if (fill > 0) {\n displayName = displayName.padEnd(fill, \" \")\n }\n\n if (colors) {\n const c = ninfo.color\n args = [colorString(displayName, c) + ` | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevel.warn) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n } else if (msg.level === LogLevel.error) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n } else {\n args.push(...msg.messages)\n }\n args.push(colorString(`+${diff}`, c))\n } else {\n args = [displayName, ...msg.messages]\n args.push(`+${diff}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n console.log(getStack())\n }\n\n if (stack) {\n let line: string = \"\"\n if (typeof stack === \"boolean\") {\n line = getSourceLocationByPrecedingPattern(\n [\"at Function.\", \"at null.log (\", \"at log (\"],\n true\n )\n if (!line) {\n line = getSourceLocation(0, true)\n }\n } else {\n const depth = typeof stack === \"number\" ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line) {\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n }\n const sep = \"|\"\n const charLevel = \".\"\n\n switch (msg.level) {\n case LogLevel.info:\n if (levelHelper) args[0] = `I${sep}${charLevel} ` + args[0]\n log(...args)\n break\n case LogLevel.warn:\n if (levelHelper)\n args[0] =\n (colors\n ? colorString(`W${sep}${charLevel}${charLevel} `, COLOR.ORANGE)\n : `W${sep}${charLevel}${charLevel} `) + args[0]\n log(...args)\n break\n case LogLevel.error:\n if (levelHelper)\n args[0] =\n (colors\n ? colorString(\n `E${sep}${charLevel}${charLevel}${charLevel} `,\n COLOR.RED\n )\n : `E${sep}${charLevel}${charLevel}${charLevel} `) + args[0]\n log(...args)\n break\n default:\n if (levelHelper) args[0] = `D${sep} ` + args[0]\n log(...args)\n break\n }\n }\n}\n"],"mappings":"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","names":["normalize","resolve","resolve","log","resolve","value","mkdirSync","dirname","resolve","resolve","mkdirSync","dirname","time","args","resolve","_a","_b","namespaces","log","colors","_a","namespaces","log"]}
1
+ {"version":3,"sources":["../src/node/args.ts","../src/node/clipboard.ts","../src/node/env.ts","../src/node/filestorage.ts","../src/node/fs.ts","../src/node/log-file.ts","../src/node/log-util.ts","../src/node/log-node.ts"],"names":["normalize","resolve","log","value","mkdirSync","dirname","time","args","_a","_b","namespaces","colors"],"mappings":"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","sourcesContent":["// Inspired by https://github.com/kof/node-argsparser/blob/master/lib/argsparser.js\n\nimport { toCamelCase } from \"../common/data/camelcase\"\n\ninterface ParseConfig {\n args?: string[]\n alias?: Record<string, string[]>\n normalize?: (value: string) => string\n booleanArgs?: string | string[]\n listArgs?: string | string[]\n numberArgs?: string | string[]\n}\n\nexport function parseArgs(config: ParseConfig = {}) {\n const {\n args = process.argv.slice(1),\n alias = {},\n normalize = toCamelCase,\n booleanArgs = [],\n listArgs = [],\n numberArgs = [],\n } = config\n\n let nameToAlias = Object.entries(alias).reduce((map, curr) => {\n let [name, values] = curr\n if (typeof values === \"string\") values = [values]\n for (let value of values) {\n map[normalize(value)] = normalize(name)\n }\n return map\n }, {} as any)\n\n let opts: Record<string, any> = {\n _: [],\n }\n\n function setOpt(name: string, value: any) {\n if (opts[name] == null) {\n opts[name] = value\n } else if (typeof opts[name] === \"boolean\") {\n opts[name] = value\n } else if (Array.isArray(opts[name])) {\n opts[name].push(value)\n } else {\n opts[name] = [opts[name], value]\n }\n }\n\n let argList = [...args]\n let arg: string | undefined\n while ((arg = argList.shift())) {\n let value: any\n if (/^--?/.test(arg)) {\n let key = arg.replace(/^--?/, \"\")\n if (arg.includes(\"=\")) {\n let [name, valuePart] = key.split(\"=\", 2)\n key = name.trim()\n value = valuePart.trim()\n }\n key = normalize(key)\n key = nameToAlias[key] ?? key\n if (booleanArgs.includes(key)) {\n setOpt(key, true)\n } else {\n value = value ?? argList.shift() ?? \"\"\n if (numberArgs.includes(key)) {\n value = Number(value ?? 0)\n }\n if (listArgs.includes(key)) {\n if (Array.isArray(opts[key])) {\n opts[key].push(value)\n } else {\n opts[key] = [value]\n }\n } else {\n setOpt(key, value)\n }\n }\n } else {\n opts._.push(arg)\n }\n }\n\n return opts\n}\n","import { spawn } from \"child_process\"\n\n/** Copy string to clipboard */\nexport function pbcopy(data: string) {\n return new Promise(async (resolve, reject) => {\n const proc = spawn(\"pbcopy\")\n proc.on(\"error\", (err: any) => reject(err))\n proc.on(\"close\", () => resolve(data))\n proc.stdin.write(data)\n proc.stdin.end()\n })\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Adopted from https://github.com/motdotla/dotenv BSD-2\n\nimport { Logger } from \"../common/log\"\nimport { LogLevel } from \"../common/log-base\"\n\nimport fs from \"fs\"\nimport { resolve } from \"path\"\n\nconst log = Logger(\"zeed:env\")\n\nconst NEWLINE = \"\\n\"\nconst RE_INI_KEY_VAL = /^\\s*([\\w_.-]+)\\s*=\\s*(.*)?\\s*$/\nconst RE_NEWLINES = /\\\\n/g\nconst NEWLINES_MATCH = /\\n|\\r|\\r\\n/\n\ntype csvOptions = {\n /** @deprecated will probably be replaced by logLevel */\n debug?: boolean\n path?: string\n filename?: string\n encoding?: BufferEncoding\n prefix?: string\n env?: Record<string, string>\n}\n\n// Parses src into an Object\nfunction parse(src: string, options: csvOptions = {}) {\n let obj: Record<string, string> = {}\n\n // convert Buffers before splitting into lines and processing\n String(src)\n .split(NEWLINES_MATCH)\n .forEach(function (line, idx) {\n // matching \"KEY' and 'VAL' in 'KEY=VAL'\n const keyValueArr = line.match(RE_INI_KEY_VAL)\n // matched?\n\n // log.debug(\"keyValueArr\", keyValueArr)\n\n if (keyValueArr != null) {\n const key = keyValueArr[1]\n // default undefined or missing values to empty string\n let val = keyValueArr[2] || \"\"\n const end = val.length - 1\n const isDoubleQuoted = val[0] === '\"' && val[end] === '\"'\n const isSingleQuoted = val[0] === \"'\" && val[end] === \"'\"\n\n // if single or double quoted, remove quotes\n if (isSingleQuoted || isDoubleQuoted) {\n val = val.substring(1, end)\n\n // if double quoted, expand newlines\n if (isDoubleQuoted) {\n val = val.replace(RE_NEWLINES, NEWLINE)\n }\n } else {\n // remove surrounding whitespace\n val = val.trim()\n }\n obj[key] = val\n } else {\n log.debug(\n `did not match key and value when parsing line ${idx + 1}: ${line}`\n )\n }\n })\n\n // log.debug(\"obj\", obj)\n return obj\n}\n\n/**\n * Return a path relative to the current working directory\n */\nexport function stringToPath(\n value?: string,\n defaultValue: string = \".\"\n): string {\n return resolve(process.cwd(), value ?? defaultValue)\n}\n\nexport function valueToPath(value?: any, defaultValue = \"\"): string {\n if (value == null) value = defaultValue\n return stringToPath(String(value).trim(), defaultValue)\n}\n\nexport const toPath = valueToPath\n\n// Populates process.env from .env file\nexport function setupEnv(options: csvOptions = {}) {\n const dotenvPath: string =\n options?.path ?? toPath(options?.filename ?? \".env\")\n const encoding: BufferEncoding = options?.encoding ?? \"utf8\"\n const debug = options?.debug || false\n\n if (debug !== true) log.level = LogLevel.off\n\n try {\n // specifying an encoding returns a string instead of a buffer\n const parsedEnv = fs.existsSync(dotenvPath)\n ? parse(fs.readFileSync(dotenvPath, { encoding }), { debug })\n : {}\n const parsedEnvLocal = fs.existsSync(dotenvPath + \".local\")\n ? parse(fs.readFileSync(dotenvPath + \".local\", { encoding }), { debug })\n : {}\n\n const parsed: Record<string, string> = Object.assign(\n {},\n parsedEnv,\n parsedEnvLocal\n )\n let env = options?.env ?? process.env\n\n Object.entries(parsed).forEach(([key, value]) => {\n if (typeof options?.prefix === \"string\") {\n key = options?.prefix + key\n }\n if (!Object.prototype.hasOwnProperty.call(env, key)) {\n if (value != null) {\n log.info(`set env.${key} = ${value}`)\n env[key] = value\n }\n } else {\n log.debug(`\"${key}\" is already defined and will not be overwritten`)\n }\n })\n return { parsed }\n } catch (e) {\n log.error(e)\n return { error: e }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport {\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n unlinkSync,\n writeFileSync,\n} from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { toValidFilename } from \"../common/data/path\"\nimport { cloneObject } from \"../common/data/utils\"\nimport { Logger } from \"../common/log\"\nimport { Json, ObjectStorage } from \"../common/types\"\n\nconst log = Logger(\"zeed:filestorage\")\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty: boolean = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path || \".fileStorage\")\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? \".json\"\n\n if (opt.extension && !this.extension.startsWith(\".\")) {\n this.extension = \".\" + this.extension\n }\n this.extensionLength = this.extension.length\n\n this.objectToString =\n opt.objectToString ??\n ((data: any): string => {\n return this.pretty\n ? JSON.stringify(data, null, 2)\n : JSON.stringify(data)\n })\n\n this.objectFromString =\n opt.objectFromString ??\n ((data: string) => {\n try {\n return JSON.parse(data)\n } catch (err) {\n log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, \"utf8\")\n } catch (err) {\n log.error(\"setItem error\", err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): Buffer {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n let value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null) return\n\n if (value != null) {\n return cloneObject(value) // this.objectFromString(value)\n }\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, \"utf8\")\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n } catch (err) {\n log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1) {\n this.fileKeys.splice(index, 1)\n }\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n } catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys =\n readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n (item) =>\n !item.isDirectory() && item.name.endsWith(this.extension)\n )\n .map((item) => item.name.slice(0, -this.extensionLength)) || []\n } catch (err) {}\n }\n let keys = [...(this.fileKeys || [])]\n for (let key of Object.keys(this.store)) {\n if (!keys.includes(key)) {\n keys.push(key)\n }\n }\n keys.sort()\n return keys\n }\n}\n","import { mkdir, rm, stat, readFile, writeFile } from \"node:fs/promises\"\nimport { join as joinPath, normalize, resolve } from \"node:path\"\n\nexport function toHumanReadableFilePath(path: string) {\n const p = normalize(path)\n const h = process.env.HOME\n if (h && p.startsWith(h)) {\n return \"~\" + p.slice(h.length)\n }\n return p\n}\n\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n } catch (err) {\n return false\n }\n return true\n}\n\nexport async function ensureFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (!(await exists(path))) {\n await mkdir(path, { recursive: true })\n }\n return path\n}\n\nexport async function removeFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (await exists(path)) {\n await rm(path, { recursive: true })\n }\n return path\n}\n\nexport async function readText(\n ...parts: string[]\n): Promise<string | undefined> {\n const path = joinPath(...parts)\n if (await exists(path)) {\n return await readFile(path, \"utf-8\")\n }\n}\n\nexport async function writeText(path: string, content: string): Promise<void> {\n await writeFile(path, content, \"utf-8\")\n}\n\n// todo: writeBinary, readBinary\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { createWriteStream, mkdirSync } from \"fs\"\nimport { dirname, resolve } from \"path\"\nimport { renderMessages } from \"../common/data/convert\"\nimport { LogHandlerOptions, LogLevel, LogMessage } from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\n\nlet namespaces: Record<string, any> = {}\n\nexport function LoggerFileHandler(path: string, opt: LogHandlerOptions = {}) {\n const { level = LogLevel.all, filter = \"*\" } = opt\n path = resolve(process.cwd(), path)\n mkdirSync(dirname(path), { recursive: true })\n var stream = createWriteStream(path, { flags: \"a\" })\n // stream.end()\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 time = new Date().toISOString()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n namespaces[name] = ninfo\n }\n\n let args: string[] = [\n `[${name || \"*\"}]`,\n renderMessages(msg.messages, { pretty: false }),\n ]\n\n function write(...args: string[]): void {\n stream.write(args.join(\"\\t\") + \"\\n\")\n }\n\n switch (msg.level) {\n case LogLevel.info:\n write(time, `I|* `, ...args)\n break\n case LogLevel.warn:\n write(time, `W|** `, ...args)\n break\n case LogLevel.error:\n write(time, `E|***`, ...args)\n break\n default:\n write(time, `D| `, ...args)\n break\n }\n }\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { resolve } from \"path\"\n\nexport function getStackLlocationList(stack: string): any[] {\n if (typeof stack !== \"string\") return []\n // console.log(\"stack\", stack)\n return (\n stack\n ?.split(\"\\n\")\n ?.map((rawLine) => {\n let m = rawLine.match(\n /^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/\n )\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n })\n ?.filter((v) => v != null) || []\n )\n}\n\nconst cwd = resolve(process.cwd())\nconst home = process.env?.HOME ? resolve(process.env?.HOME) : \"\"\n// console.log(`cwd = ${cwd}, home = ${home}}`)\n\nfunction pathStripCwd(path: string) {\n // console.log(\">\", path)\n\n if (path.includes(\"/node_modules/\")) {\n return \"\"\n }\n\n const fileURL = \"file://\"\n if (path.startsWith(fileURL)) {\n return path.substr(fileURL.length)\n }\n\n if (cwd && path.startsWith(cwd)) {\n return path.substr(cwd.length + 1)\n }\n\n if (home && path.startsWith(home)) {\n path = \"~/\" + path.substr(home.length + 1)\n }\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n let m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/)\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n return \"\"\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n * @returns\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n let stack = new Error().stack || \"\"\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n return line || \"\"\n}\n\nexport function getStack(): string {\n return new Error().stack || \"\"\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true\n) {\n let line = \"\"\n let stack = new Error().stack || \"\"\n if (typeof stack === \"string\") {\n const lines = stack.split(\"\\n\").map((l) => l.trim())\n // console.log(lines)\n const index = lines.findIndex((l) => patterns.some((p) => l.startsWith(p)))\n line = lines[index + 1]\n if (line) {\n line = extractFileInfo(line)\n }\n if (line && stripCwd) {\n line = pathStripCwd(line)\n }\n }\n return line\n}\n","// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport tty from \"tty\"\nimport { renderMessages, valueToBoolean } from \"../common/data/convert\"\nimport {\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { useLevelFilter, useNamespaceFilter } from \"../common/log-filter\"\nimport {\n getSourceLocation,\n getSourceLocationByPrecedingPattern,\n getStack,\n} from \"./log-util\"\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\n\nfunction shouldUseColor(): boolean {\n try {\n if (process.env.ZEED_COLOR != null) {\n return valueToBoolean(process.env.ZEED_COLOR, false)\n }\n return tty.isatty(process.stdout.fd)\n } catch (err) {}\n return false\n}\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nfunction log(...args: any[]) {\n process.stdout.write(renderMessages(args) + \"\\n\")\n}\n\n// export const BOLD = Symbol()\n// export const UNBOLD = Symbol()\n// export const BLUE = Symbol()\n// export const GREY = Symbol()\n// export const GREEN = Symbol()\n// export const RED = Symbol()\n// export const PURPLE = Symbol()\n// export const ORANGE = Symbol()\n// export const UNCOLOR = Symbol()\n\n// const _browserStyleMap = {\n// [BOLD]: pair.create(\"font-weight\", \"bold\"),\n// [UNBOLD]: pair.create(\"font-weight\", \"normal\"),\n// [BLUE]: pair.create(\"color\", \"blue\"),\n// [GREEN]: pair.create(\"color\", \"green\"),\n// [GREY]: pair.create(\"color\", \"grey\"),\n// [RED]: pair.create(\"color\", \"red\"),\n// [PURPLE]: pair.create(\"color\", \"purple\"),\n// [ORANGE]: pair.create(\"color\", \"orange\"), // not well supported in chrome when debugging node with inspector - TODO: deprecate\n// [UNCOLOR]: pair.create(\"color\", \"black\"),\n// }\n\nconst TTY_STYLE = {\n BOLD: \"\\u001b[1m\",\n UNBOLD: \"\\u001b[2m\",\n RED: \"\\u001b[31m\",\n GREEN: \"\\u001b[32m\",\n BLUE: \"\\u001b[34m\",\n PURPLE: \"\\u001b[35m\",\n GRAY: \"\\u001b[37m\",\n ORANGE: \"\\u001b[38;5;208m\",\n UNCOLOR: \"\\u001b[0m\",\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = \"\\u001B[0m\"\n\nexport function colorString(value: string, colorCode: number) {\n const colorStart =\n colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : \"\\u001B[3\" + (colorCode < 8 ? colorCode : \"8;5;\" + colorCode) + \"m\"\n return `${colorStart}${value}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold: boolean = true\n) {\n return list.map((value) => {\n if (typeof value !== \"string\") return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nexport const loggerStackTraceDebug =\n \"loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485\"\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = undefined,\n filter = undefined,\n colors = shouldUseColor(),\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = true,\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 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\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0) {\n displayName = displayName.padStart(padding, \" \")\n }\n\n if (fill > 0) {\n displayName = displayName.padEnd(fill, \" \")\n }\n\n if (colors) {\n const c = ninfo.color\n args = [colorString(displayName, c) + ` | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevel.warn) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n } else if (msg.level === LogLevel.error) {\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n } else {\n args.push(...msg.messages)\n }\n args.push(colorString(`+${diff}`, c))\n } else {\n args = [displayName, ...msg.messages]\n args.push(`+${diff}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n console.log(getStack())\n }\n\n if (stack) {\n let line: string = \"\"\n if (typeof stack === \"boolean\") {\n line = getSourceLocationByPrecedingPattern(\n [\"at Function.\", \"at null.log (\", \"at log (\"],\n true\n )\n if (!line) {\n line = getSourceLocation(0, true)\n }\n } else {\n const depth = typeof stack === \"number\" ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line) {\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n }\n const sep = \"|\"\n const charLevel = \".\"\n\n switch (msg.level) {\n case LogLevel.info:\n if (levelHelper) args[0] = `I${sep}${charLevel} ` + args[0]\n log(...args)\n break\n case LogLevel.warn:\n if (levelHelper)\n args[0] =\n (colors\n ? colorString(`W${sep}${charLevel}${charLevel} `, COLOR.ORANGE)\n : `W${sep}${charLevel}${charLevel} `) + args[0]\n log(...args)\n break\n case LogLevel.error:\n if (levelHelper)\n args[0] =\n (colors\n ? colorString(\n `E${sep}${charLevel}${charLevel}${charLevel} `,\n COLOR.RED\n )\n : `E${sep}${charLevel}${charLevel}${charLevel} `) + args[0]\n log(...args)\n break\n default:\n if (levelHelper) args[0] = `D${sep} ` + args[0]\n log(...args)\n break\n }\n }\n}\n"]}
@@ -1,15 +1,5 @@
1
- import {
2
- selectColor,
3
- supportsColors
4
- } from "./chunk-OJCXV4BY.js";
5
- import {
6
- Logger,
7
- __name,
8
- formatMilliseconds,
9
- getTimestamp,
10
- useLevelFilter,
11
- useNamespaceFilter
12
- } from "./chunk-AM7QCF4I.js";
1
+ import { supportsColors, selectColor } from './chunk-OJCXV4BY.js';
2
+ import { Logger, __name, getTimestamp, useNamespaceFilter, useLevelFilter, formatMilliseconds } from './chunk-AM7QCF4I.js';
13
3
 
14
4
  // src/browser/base64.ts
15
5
  var { error } = Logger("zeed:base64");
@@ -312,10 +302,5 @@ function LoggerBrowserClassicHandler(level, opt = {}) {
312
302
  }
313
303
  __name(LoggerBrowserClassicHandler, "LoggerBrowserClassicHandler");
314
304
 
315
- export {
316
- urlBase64ToUint8Array,
317
- gravatarURLByEmail,
318
- LocalStorage,
319
- LoggerBrowserClassicHandler
320
- };
305
+ export { LocalStorage, LoggerBrowserClassicHandler, gravatarURLByEmail, urlBase64ToUint8Array };
321
306
  //# sourceMappingURL=chunk-IFNHRAHG.js.map