zeed 0.6.28 → 0.7.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +30 -3
- package/dist/chunk-2ZP6HP2G.cjs +3 -0
- package/dist/chunk-2ZP6HP2G.cjs.map +7 -0
- package/dist/chunk-4KMSTOUO.js +3 -0
- package/dist/chunk-4KMSTOUO.js.map +7 -0
- package/dist/{chunk-D32E72EF.js → chunk-EUDYJKFY.js} +2 -2
- package/dist/{chunk-D32E72EF.js.map → chunk-EUDYJKFY.js.map} +1 -1
- package/dist/chunk-IW32B3MF.cjs +2 -0
- package/dist/chunk-IW32B3MF.cjs.map +7 -0
- package/dist/{chunk-CNBLWWZD.cjs → chunk-JIUFROKK.cjs} +2 -2
- package/dist/{chunk-CNBLWWZD.cjs.map → chunk-JIUFROKK.cjs.map} +1 -1
- package/dist/chunk-KFSEHZWL.js +2 -0
- package/dist/chunk-KFSEHZWL.js.map +7 -0
- package/dist/{chunk-X7TVSQN5.cjs → chunk-QKAPPWMV.cjs} +2 -2
- package/dist/{chunk-X7TVSQN5.cjs.map → chunk-QKAPPWMV.cjs.map} +0 -0
- package/dist/{chunk-IUKMEU3J.js → chunk-YURQIKN2.js} +2 -2
- package/dist/{chunk-IUKMEU3J.js.map → chunk-YURQIKN2.js.map} +0 -0
- package/dist/index.all.cjs +1 -1
- package/dist/index.all.d.ts +3 -3
- package/dist/index.all.js +1 -1
- package/dist/index.browser.cjs +1 -1
- package/dist/index.browser.d.ts +2 -2
- package/dist/index.browser.js +1 -1
- package/dist/index.log.cjs +1 -1
- package/dist/index.log.js +1 -1
- package/dist/index.node.cjs +1 -1
- package/dist/index.node.d.ts +2 -2
- package/dist/index.node.js +1 -1
- package/dist/{localstorage-78b23ee4.d.ts → localstorage-f78d5c59.d.ts} +1 -1
- package/dist/{path-63f59147.d.ts → path-140ca55b.d.ts} +1 -1
- package/dist/{memstorage-80146c94.d.ts → throttle-e835693f.d.ts} +64 -22
- package/package.json +1 -1
- package/dist/chunk-2BSP22N3.cjs +0 -3
- package/dist/chunk-2BSP22N3.cjs.map +0 -7
- package/dist/chunk-HXRBK433.js +0 -2
- package/dist/chunk-HXRBK433.js.map +0 -7
- package/dist/chunk-N4GS35VA.cjs +0 -2
- package/dist/chunk-N4GS35VA.cjs.map +0 -7
- package/dist/chunk-NHGGF4FJ.js +0 -3
- package/dist/chunk-NHGGF4FJ.js.map +0 -7
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/common/platform.ts", "../src/common/time.ts", "../src/common/data/deep.ts", "../src/common/log-filter.ts", "../src/common/log-base.ts", "../src/common/log-console.ts", "../src/browser/log-colors.ts", "../src/browser/log-browser.ts", "../src/common/global.ts", "../src/common/log.ts"],
|
|
4
|
-
"sourcesContent": ["// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport function getWindow(): any | undefined {\n // @ts-ignore\n if (typeof window !== \"undefined\") return window\n}\n\nexport function getNavigator(): any | undefined {\n // @ts-ignore\n if (typeof navigator !== \"undefined\") return navigator\n}\n\nexport function getGlobal(): any {\n return getWindow() ??\n // @ts-ignore\n typeof WorkerGlobalScope !== \"undefined\"\n ? // @ts-ignore\n self\n : typeof global !== \"undefined\"\n ? global\n : Function(\"return this;\")()\n}\n\nconst _navigator = getNavigator()\nconst _window = getWindow()\n\nexport function detect(\n info = {\n ios: false,\n macos: false,\n windows: false,\n beaker: false,\n electron: false,\n wkwebview: false,\n pwa: false,\n pwaInstalled: false,\n browser: false,\n node: false,\n worker: false,\n jest: false,\n macosNative: false,\n iosNative: false,\n appleNative: false,\n touch: false,\n }\n) {\n info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null\n info.macos = !!_navigator?.platform?.startsWith(\"Mac\")\n info.windows = !!_navigator?.platform?.startsWith(\"Win\")\n\n // @ts-ignore\n info.beaker = _window?.[\"beaker\"] != null // https://github.com/beakerbrowser/beaker\n info.electron =\n (_navigator?.userAgent?.toLowerCase()?.indexOf(\" electron/\") || -1) > -1 &&\n !info.beaker\n // @ts-ignore\n info.wkwebview = _window?.webkit?.[\"messageHandlers\"] != null //Apple embedded\n\n info.pwa = _navigator?.serviceWorker != null\n\n info.pwaInstalled =\n // @ts-ignore\n _navigator?.standalone ||\n _window?.matchMedia(\"(display-mode: standalone)\")?.matches\n\n info.node =\n typeof process !== \"undefined\" && process?.release?.name === \"node\"\n info.browser = !info.electron && !info.wkwebview && !info.node\n\n // info.worker = typeof importScripts === 'function'\n // @ts-ignore\n info.worker =\n // @ts-ignore\n typeof WorkerGlobalScope !== \"undefined\" &&\n // @ts-ignore\n self instanceof WorkerGlobalScope\n // @ts-ignore\n info.jest = typeof jest !== \"undefined\"\n\n info.macosNative = info.wkwebview && info.macos\n info.iosNative = info.wkwebview && info.ios\n info.appleNative = info.wkwebview\n\n // https://github.com/viljamis/feature.js/blob/master/feature.js#L203\n // @ts-ignore\n info.touch =\n (_window && \"ontouchstart\" in _window) ||\n (_navigator?.maxTouchPoints || 0) > 1 ||\n // @ts-ignore\n (_navigator?.msPointerEnabled && _window?.MSGesture) ||\n // @ts-ignore\n (_window?.DocumentTouch && document instanceof DocumentTouch)\n\n return info\n}\n\n// https://stackoverflow.com/a/31090240/140927\n// export const isBrowser = new Function(\n// \"try {return this===window;}catch(e){ return false;}\"\n// )\n\n// export const isNode = new Function(\n// \"try {return this===global;}catch(e){return false;}\"\n// )\n\nexport const isBrowser = () =>\n typeof window !== \"undefined\" && globalThis === window\n\nexport const platform = detect()\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 =>\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", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport const isObject = (obj: any) => obj && typeof obj === \"object\"\nexport const isPrimitive = (obj: any) => Object(obj) !== obj\n\n// export function deepClone(obj) {\n// return cloneDeep(obj)\n// }\n\n// // https://stackoverflow.com/a/40294058/140927\n// // Handles cyclic references\n// export function deepClone(obj, hash = new WeakMap()) {\n// return cloneDeep(obj)\n//\n// // primitives\n// if (Object(obj) !== 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// if (obj instanceof Set) {\n// result = new Set(obj)\n// } else if (obj instanceof Map) {\n// result = new Map(Array.from(obj, ([key, val]) =>\n// [key, deepClone(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 (obj.constructor) {\n// result = new obj.constructor()\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]: deepClone(obj[key], hash),\n// })),\n// )\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\nexport function deepEqual(a: any, b: any, hash = new WeakSet()) {\n // if both x and y are null or undefined and exactly the same\n if (a === b) {\n return true\n }\n\n // Cyclic\n if (hash.has(b)) {\n // console.log('cyclic')\n return true\n }\n\n if (!isPrimitive(b)) {\n hash.add(b)\n }\n\n // if they are not strictly equal, they both need to be Objects\n if (!(a instanceof Object) || !(b instanceof Object)) {\n return false\n }\n\n // they must have the exact same prototype chain, the closest we can do is\n // test there constructor.\n if (a.constructor !== b.constructor) {\n return false\n }\n\n // Shortcut to avoid to many loops\n if (a.length !== b.length) {\n return false\n }\n\n for (let p in a) {\n // other properties were tested using x.constructor === y.constructor\n if (!a.hasOwnProperty(p)) {\n continue\n }\n\n // allows to compare x[ p ] and y[ p ] when set to undefined\n if (!b.hasOwnProperty(p)) {\n return false\n }\n\n let aa = a[p]\n let bb = b[p]\n\n // if they have the same strict value or identity then they are equal\n // if (aa === bb) {\n // console.log('eq', typeof bb)\n // if (bb != null) hash.set(bb, true)\n // continue\n // }\n //\n // // Numbers, Strings, Functions, Booleans must be strictly equal\n // if (typeof (aa) !== 'object') {\n // return false\n // }\n\n // Objects and Arrays must be tested recursively\n if (!deepEqual(aa, bb, hash)) {\n return false\n }\n }\n\n // allows x[ p ] to be set to undefined\n for (let p in b) {\n if (b.hasOwnProperty(p) && !a.hasOwnProperty(p)) {\n return false\n }\n }\n\n return true\n}\n\nexport function deepMerge(target: any, ...sources: any[]) {\n for (let source of sources) {\n if (!isObject(target)) {\n target = {}\n }\n\n if (source == null) continue\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n }\n\n return target\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\ninterface NamespaceFilter {\n (name: string): boolean\n accept: RegExp[]\n reject: RegExp[]\n filter: string\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(filter?: string): 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", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { deepEqual } from \"./data/deep\"\nimport { LoggerConsoleHandler } from \"./log-console\"\nimport { useNamespaceFilter } from \"./log-filter\"\n\nexport enum LogLevel {\n all = -1,\n debug = 0,\n info,\n warn,\n error,\n fatal,\n off = Infinity,\n}\n\nexport 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\nexport interface LoggerContextInterface {\n (name?: string): LoggerInterface\n registerHandler(handler: LogHandler): void\n setFilter(namespaces: string): void\n setHandlers(handlers?: LogHandler[]): void\n setLock(lock: boolean): void\n setLogLevel(level?: LogLevel): void\n setFactory(factory: (name?: string) => LoggerInterface): void\n}\n\nexport interface LogHandlerOptions {\n level?: LogLevel\n filter?: string\n colors?: boolean\n levelHelper?: boolean\n nameBrackets?: boolean\n padding?: number\n fill?: number\n stack?: boolean | number\n}\n\nexport function LoggerContext(prefix: string = \"\"): LoggerContextInterface {\n let logHandlers: LogHandler[] = [LoggerConsoleHandler()]\n let logAssertLevel: LogLevel = LogLevel.warn\n let logCheckNamespace = (name: string) => true\n let logLock = false\n let logFactory = LoggerBaseFactory\n\n function LoggerBaseFactory(name: string = \"\"): LoggerInterface {\n log.extend = function (prefix: string): LoggerInterface {\n return logFactory(name ? `${name}:${prefix}` : prefix)\n }\n\n const emit = (msg: LogMessage) => {\n if (log.active === true) {\n if (msg.level >= Logger.level && msg.level >= log.level) {\n if (logCheckNamespace(name)) {\n for (let handler of logHandlers) {\n if (handler) handler(msg)\n }\n }\n }\n }\n }\n\n function log(...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.active = true\n log.level = LogLevel.all\n\n log.debug = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.info = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.info,\n })\n }\n\n log.warn = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.warn,\n })\n }\n\n log.error = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.error,\n })\n }\n\n // fatal(...args: any[]) {\n // console.error(...args)\n // },\n\n log.assert = function (cond: any, ...messages: any[]) {\n if (!cond) {\n if (typeof console !== undefined) {\n if (console.assert) {\n // https://developer.mozilla.org/de/docs/Web/API/Console/assert\n console.assert(cond, ...messages)\n } else {\n console.error(`Assert did fail with: ${cond}`, ...messages)\n }\n }\n emit({\n name,\n messages: messages || [`Assert did fail with: ${cond}`],\n level: logAssertLevel,\n })\n // try {\n // if (typeof expect !== undefined) {\n // expect(cond).toBeTruthy()\n // }\n // } catch (err) {\n // methods.warn(...args)\n // }\n }\n }\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed equal`)\n }\n }\n\n log.assertNotEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed not equal check`)\n }\n }\n\n return log\n }\n\n function Logger(name: string = \"\"): LoggerInterface {\n return logFactory(name)\n }\n\n Logger.registerHandler = function (handler: LogHandler) {\n logHandlers.push(handler)\n }\n\n Logger.setFilter = function (namespaces: string) {\n logCheckNamespace = useNamespaceFilter(namespaces)\n }\n\n Logger.setLock = (lock: boolean = true) => (logLock = lock)\n\n Logger.setHandlers = function (handlers: LogHandler[] = []) {\n if (logFactory !== LoggerBaseFactory) {\n logFactory = LoggerBaseFactory\n }\n if (logLock) return\n logHandlers = [...handlers].filter((h) => typeof h === \"function\")\n }\n\n Logger.level = LogLevel.all\n\n /** @deprecated */\n Logger.setLogLevel = function (level: LogLevel = LogLevel.all) {\n if (logLock) return\n Logger.level = level\n }\n\n Logger.setFactory = function (\n factory: (name?: string) => LoggerInterface\n ): void {\n if (logLock) return\n logFactory = factory\n }\n\n return Logger\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LogLevel, LogHandler, LogMessage, LogHandlerOptions } from \"./log-base\"\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 = LogLevel.all,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n filter = undefined,\n } = opt\n return (msg: LogMessage) => {\n if (msg.level < level) 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", "// Taken from https://github.com/visionmedia/debug/blob/master/src/browser.js#L27\n\nconst colors = [\n \"#0000CC\",\n \"#0000FF\",\n \"#0033CC\",\n \"#0033FF\",\n \"#0066CC\",\n \"#0066FF\",\n \"#0099CC\",\n \"#0099FF\",\n \"#00CC00\",\n \"#00CC33\",\n \"#00CC66\",\n \"#00CC99\",\n \"#00CCCC\",\n \"#00CCFF\",\n \"#3300CC\",\n \"#3300FF\",\n \"#3333CC\",\n \"#3333FF\",\n \"#3366CC\",\n \"#3366FF\",\n \"#3399CC\",\n \"#3399FF\",\n \"#33CC00\",\n \"#33CC33\",\n \"#33CC66\",\n \"#33CC99\",\n \"#33CCCC\",\n \"#33CCFF\",\n \"#6600CC\",\n \"#6600FF\",\n \"#6633CC\",\n \"#6633FF\",\n \"#66CC00\",\n \"#66CC33\",\n \"#9900CC\",\n \"#9900FF\",\n \"#9933CC\",\n \"#9933FF\",\n \"#99CC00\",\n \"#99CC33\",\n \"#CC0000\",\n \"#CC0033\",\n \"#CC0066\",\n \"#CC0099\",\n \"#CC00CC\",\n \"#CC00FF\",\n \"#CC3300\",\n \"#CC3333\",\n \"#CC3366\",\n \"#CC3399\",\n \"#CC33CC\",\n \"#CC33FF\",\n \"#CC6600\",\n \"#CC6633\",\n \"#CC9900\",\n \"#CC9933\",\n \"#CCCC00\",\n \"#CCCC33\",\n \"#FF0000\",\n \"#FF0033\",\n \"#FF0066\",\n \"#FF0099\",\n \"#FF00CC\",\n \"#FF00FF\",\n \"#FF3300\",\n \"#FF3333\",\n \"#FF3366\",\n \"#FF3399\",\n \"#FF33CC\",\n \"#FF33FF\",\n \"#FF6600\",\n \"#FF6633\",\n \"#FF9900\",\n \"#FF9933\",\n \"#FFCC00\",\n \"#FFCC33\",\n]\n\nexport function supportsColors(): boolean {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (\n typeof window !== \"undefined\" &&\n window.process &&\n // @ts-ignore\n (window.process.type === \"renderer\" || window.process.__nwjs)\n ) {\n return true\n }\n\n // Internet Explorer and Edge do not support colors.\n if (\n typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)\n ) {\n return false\n }\n\n // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (\n (typeof document !== \"undefined\" &&\n document.documentElement &&\n document.documentElement.style &&\n // @ts-ignore\n document.documentElement.style.WebkitAppearance) ||\n // Is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== \"undefined\" &&\n window.console &&\n // @ts-ignore\n (window.console.firebug ||\n // @ts-ignore\n (window.console.exception && window.console.table))) ||\n // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) &&\n parseInt(RegExp.$1, 10) >= 31) ||\n // Double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))\n )\n}\n\nexport function selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\nimport {\n LoggerInterface,\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { selectColor, supportsColors } from \"./log-colors\"\nimport { useNamespaceFilter } from \"../common/log-filter\"\nimport { deepEqual } from \"../common/data/deep\"\n\nconst styleFont = `font-family: \"JetBrains Mono\", Menlo; font-size: 11px;`\nconst styleDefault = `${styleFont}`\nconst styleBold = `font-weight: 600; ${styleFont}`\nconst useColors = supportsColors()\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nexport function LoggerBrowserHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = LogLevel.all,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n } = opt\n const matches = useNamespaceFilter(\n opt.filter ?? localStorage.zeed ?? localStorage.debug\n )\n return (msg: LogMessage) => {\n if (msg.level < level) return\n if (!matches(msg.name)) return\n\n const timeNow = getTimestamp()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const diff = formatMilliseconds(timeNow - time)\n let args: string[]\n\n if (padding > 0) {\n name = name.padEnd(16, \" \")\n }\n\n if (colors && useColors) {\n args = [`%c${name}%c \\t%s %c+${diff}`]\n args.push(`color:${ninfo.color}; ${styleBold}`)\n args.push(styleDefault)\n args.push(msg.messages?.[0] ?? \"\")\n args.push(`color:${ninfo.color};`)\n args.push(...msg.messages.slice(1))\n } else {\n args = [name, ...msg.messages, `+${diff}`]\n }\n\n // function consoleArgs(args: any[] = []): any[] {\n // return [\n // args\n // .filter((a) => typeof a === \"string\")\n // .map((a) => String(a))\n // .join(\" \"),\n // ...styles,\n // ...args.filter((a) => typeof a !== \"string\"),\n // ]\n // }\n\n switch (msg.level) {\n case LogLevel.info:\n if (opt.levelHelper) args[0] = `I|* ` + args[0]\n console.info(...args)\n break\n case LogLevel.warn:\n if (opt.levelHelper) args[0] = `W|** ` + args[0]\n console.warn(...args)\n break\n case LogLevel.error:\n if (opt.levelHelper) args[0] = `E|*** ` + args[0]\n console.error(...args)\n break\n default:\n if (opt.levelHelper) args[0] = `D| ` + args[0]\n console.debug(...args)\n break\n }\n }\n}\n\nexport function LoggerBrowserSetupDebugFactory(opt: LogHandlerOptions = {}) {\n const filter = opt.filter ?? localStorage.zeed ?? localStorage.debug\n\n /// The trick is, that console called directly provides a reference to the source code.\n /// For the regular implementation this information is lost. But this approach has other\n /// drawbacks, therefore only use it in the Browser when actively debugging.\n return function LoggerBrowserDebugFactory(\n name: string = \"\"\n ): LoggerInterface {\n let log: LoggerInterface\n\n const matches = useNamespaceFilter(filter)\n\n if (matches(name)) {\n let fixedArgs = []\n if (useColors) {\n const color = selectColor(name)\n fixedArgs.push(`%c${name.padEnd(16, \" \")}%c \\t%s`)\n fixedArgs.push(`color:${color}; ${styleBold}`)\n fixedArgs.push(styleDefault)\n } else {\n fixedArgs.push(`[${name}] \\t%s`)\n }\n\n // @ts-ignore\n // console.previous = {\n // debug: console.debug,\n // info: console.info,\n // warn: console.warn,\n // error: console.error,\n // assert: console.assert,\n // }\n\n log = console.debug.bind(console, ...fixedArgs) as LoggerInterface\n log.debug = console.debug.bind(console, ...fixedArgs)\n log.info = console.info.bind(console, ...fixedArgs)\n log.warn = console.warn.bind(console, ...fixedArgs)\n log.error = console.error.bind(console, ...fixedArgs)\n\n log.assert = console.assert.bind(console)\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n\n log.assertNotEqual = function (\n value: any,\n expected: any,\n ...args: any[]\n ) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n } else {\n const noop = () => {}\n log = noop as LoggerInterface\n log.debug = noop\n log.info = noop\n log.warn = noop\n log.error = noop\n\n log.assert = noop\n log.assertEqual = noop\n log.assertNotEqual = noop\n }\n\n log.extend = (subName: string) => {\n return LoggerBrowserDebugFactory(name ? `${name}:${subName}` : subName)\n }\n\n return log\n }\n}\n\n/** @deprecated This output is default for initial use of Logger in browser environments. */\nexport function activateConsoleDebug(opt: LogHandlerOptions = {}) {\n console.info(\"activateConsoleDebug is activated by default in browsers\")\n // Logger.setHandlers([LoggerBrowserHandler(opt)]) // Fallback for previously registered Loggers\n // Logger.setFactory(LoggerBrowserSetupDebugFactory(opt))\n}\n\n// let klass = console\n// let debug = console.debug.bind(window.console, klass.toString() + \": \")\n\n// debug(\"test\")\n// console.debug(\"test2\")\n\n// let dd\n// if (Function.prototype.bind) {\n// dd = Function.prototype.bind.call(console.log, console)\n// } else {\n// dd = function () {\n// Function.prototype.apply.call(console.log, console, arguments)\n// }\n// }\n\n// dd(\"dd\")\n\n// let c = 1\n// Object.defineProperty(window, \"log2\", {\n// get: () => {\n// return console.log.bind(\n// window.console,\n// \"%c[log]%c %s\" + c++,\n// \"color:red\",\n// \"\"\n// )\n// },\n// })\n\n// // usage:\n// log2(\"Back to the future\")\n// log2(\"Back to the future\")\n\n// let plog = new Proxy(console.debug, {\n// apply: function (target, that, args) {\n// target.apply(that, args)\n// // base.apply(that, args);\n// },\n// })\n\n// let cons = console.debug\n// let plog = (...args) => {\n// cons.apply(window.console, [\"|\", ...args])\n// }\n\n// plog(\"xxx\")\n\n// function a() {\n// var err = new Error()\n// var caller_line = err.stack.split(\"\\n\")[2]\n// var index = caller_line.indexOf(\"at \")\n// var clean = caller_line.slice(index + 2, caller_line.length)\n// clean = clean.replace(/\\?t=\\d+/, \"\").replace(\"@fs/\", \"\")\n// console.log(clean)\n// console.log(\n// \"http://localhost:8080/Users/dirk/work/viidoo/lib/src/browser/log-browser.ts:188:1 log-browser.ts:291:10\"\n// )\n// }\n// function b() {\n// a()\n// }\n// b()\n", "// 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 { isBrowser } from \"./platform\"\nimport {\n LoggerBrowserHandler,\n LoggerBrowserSetupDebugFactory,\n} from \"../browser/log-browser\"\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?: LoggerContextInterface\n }\n}\n\nfunction getLoggerContext() {\n let logger = LoggerContext()\n if (isBrowser()) {\n logger.setHandlers([LoggerBrowserHandler()]) // Fallback for previously registered Loggers\n logger.setFactory(LoggerBrowserSetupDebugFactory({}))\n }\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"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/chunk-N4GS35VA.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true});var __defProp=Object.defineProperty;var __name=(target,value)=>__defProp(target,"name",{value,configurable:true});var __require=typeof require!=="undefined"?require:x=>{throw new Error('Dynamic require of "'+x+'" is not supported')};function getWindow(){if(typeof window!=="undefined")return window}__name(getWindow,"getWindow");function getNavigator(){if(typeof navigator!=="undefined")return navigator}__name(getNavigator,"getNavigator");function getGlobal(){var _a;return((_a=getWindow())!=null?_a:typeof WorkerGlobalScope!=="undefined")?self:typeof global!=="undefined"?global:Function("return this;")()}__name(getGlobal,"getGlobal");var _navigator=getNavigator();var _window=getWindow();function detect(info={ios:false,macos:false,windows:false,beaker:false,electron:false,wkwebview:false,pwa:false,pwaInstalled:false,browser:false,node:false,worker:false,jest:false,macosNative:false,iosNative:false,appleNative:false,touch:false}){var _a,_b,_c,_d,_e,_f,_g,_h;info.ios=((_a=_navigator==null?void 0:_navigator.platform)==null?void 0:_a.match(/(iPhone|iPod|iPad)/i))!=null;info.macos=!!((_b=_navigator==null?void 0:_navigator.platform)==null?void 0:_b.startsWith("Mac"));info.windows=!!((_c=_navigator==null?void 0:_navigator.platform)==null?void 0:_c.startsWith("Win"));info.beaker=(_window==null?void 0:_window["beaker"])!=null;info.electron=(((_e=(_d=_navigator==null?void 0:_navigator.userAgent)==null?void 0:_d.toLowerCase())==null?void 0:_e.indexOf(" electron/"))||-1)>-1&&!info.beaker;info.wkwebview=((_f=_window==null?void 0:_window.webkit)==null?void 0:_f["messageHandlers"])!=null;info.pwa=(_navigator==null?void 0:_navigator.serviceWorker)!=null;info.pwaInstalled=(_navigator==null?void 0:_navigator.standalone)||((_g=_window==null?void 0:_window.matchMedia("(display-mode: standalone)"))==null?void 0:_g.matches);info.node=typeof process!=="undefined"&&((_h=process==null?void 0:process.release)==null?void 0:_h.name)==="node";info.browser=!info.electron&&!info.wkwebview&&!info.node;info.worker=typeof WorkerGlobalScope!=="undefined"&&self instanceof WorkerGlobalScope;info.jest=typeof jest!=="undefined";info.macosNative=info.wkwebview&&info.macos;info.iosNative=info.wkwebview&&info.ios;info.appleNative=info.wkwebview;info.touch=_window&&"ontouchstart"in _window||((_navigator==null?void 0:_navigator.maxTouchPoints)||0)>1||(_navigator==null?void 0:_navigator.msPointerEnabled)&&(_window==null?void 0:_window.MSGesture)||(_window==null?void 0:_window.DocumentTouch)&&document instanceof DocumentTouch;return info}__name(detect,"detect");var isBrowser=__name(()=>typeof window!=="undefined"&&globalThis===window,"isBrowser");var platform=detect();var getTimestamp=__name(()=>typeof performance!=="undefined"?performance.now():new Date().getTime(),"getTimestamp");function formatMilliseconds(ms){return ms>999?(ms/1e3).toFixed(1)+"s":ms.toFixed(2)+"ms"}__name(formatMilliseconds,"formatMilliseconds");var isObject=__name(obj=>obj&&typeof obj==="object","isObject");var isPrimitive=__name(obj=>Object(obj)!==obj,"isPrimitive");function deepEqual(a,b,hash=new WeakSet){if(a===b){return true}if(hash.has(b)){return true}if(!isPrimitive(b)){hash.add(b)}if(!(a instanceof Object)||!(b instanceof Object)){return false}if(a.constructor!==b.constructor){return false}if(a.length!==b.length){return false}for(let p in a){if(!a.hasOwnProperty(p)){continue}if(!b.hasOwnProperty(p)){return false}let aa=a[p];let bb=b[p];if(!deepEqual(aa,bb,hash)){return false}}for(let p in b){if(b.hasOwnProperty(p)&&!a.hasOwnProperty(p)){return false}}return true}__name(deepEqual,"deepEqual");function deepMerge(target,...sources){for(let source of sources){if(!isObject(target)){target={}}if(source==null)continue;Object.keys(source).forEach(key=>{const targetValue=target[key];const sourceValue=source[key];if(Array.isArray(targetValue)&&Array.isArray(sourceValue)){target[key]=targetValue.concat(sourceValue)}else if(isObject(targetValue)&&isObject(sourceValue)){target[key]=deepMerge(Object.assign({},targetValue),sourceValue)}else{target[key]=sourceValue}})}return target}__name(deepMerge,"deepMerge");function useNamespaceFilter(filter){let fn;let reject=[];let accept=[];if(!filter){fn=__name(function(name){return false},"fn")}else if(filter==="*"){fn=__name(function(name){return true},"fn")}else{let i;const split=filter.split(/[\s,]+/);const len=split.length;for(i=0;i<len;i++){if(!split[i]){continue}let template=split[i].replace(/\*/g,".*?");if(template[0]==="-"){reject.push(new RegExp("^"+template.substr(1)+"$"))}else{accept.push(new RegExp("^"+template+"$"))}}fn=__name(function(name){if(reject.length===0&&accept.length===0){return true}let i2,len2;for(i2=0,len2=reject.length;i2<len2;i2++){if(reject[i2].test(name)){return false}}for(i2=0,len2=accept.length;i2<len2;i2++){if(accept[i2].test(name)){return true}}return false},"fn")}fn.accept=accept;fn.reject=reject;fn.filter=filter;return fn}__name(useNamespaceFilter,"useNamespaceFilter");var LogLevel;(function(LogLevel2){LogLevel2[LogLevel2["all"]=-1]="all";LogLevel2[LogLevel2["debug"]=0]="debug";LogLevel2[LogLevel2["info"]=1]="info";LogLevel2[LogLevel2["warn"]=2]="warn";LogLevel2[LogLevel2["error"]=3]="error";LogLevel2[LogLevel2["fatal"]=4]="fatal";LogLevel2[LogLevel2["off"]=Infinity]="off"})(LogLevel||(LogLevel= exports.LogLevel ={}));function LoggerContext(prefix=""){let logHandlers=[LoggerConsoleHandler()];let logAssertLevel=2;let logCheckNamespace=__name(name=>true,"logCheckNamespace");let logLock=false;let logFactory=LoggerBaseFactory;function LoggerBaseFactory(name=""){log.extend=function(prefix2){return logFactory(name?`${name}:${prefix2}`:prefix2)};const emit=__name(msg=>{if(log.active===true){if(msg.level>=Logger2.level&&msg.level>=log.level){if(logCheckNamespace(name)){for(let handler of logHandlers){if(handler)handler(msg)}}}}},"emit");function log(...messages){emit({name,messages,level:0})}__name(log,"log");log.active=true;log.level=-1;log.debug=function(...messages){emit({name,messages,level:0})};log.info=function(...messages){emit({name,messages,level:1})};log.warn=function(...messages){emit({name,messages,level:2})};log.error=function(...messages){emit({name,messages,level:3})};log.assert=function(cond,...messages){if(!cond){if(typeof console!==void 0){if(console.assert){console.assert(cond,...messages)}else{console.error(`Assert did fail with: ${cond}`,...messages)}}emit({name,messages:messages||[`Assert did fail with: ${cond}`],level:logAssertLevel})}};log.assertEqual=function(value,expected,...args){let equal=deepEqual(value,expected);if(!equal){log.assert(equal,`Assert did fail. Expected ${expected} got ${value}`,expected,value,...args)}};log.assertNotEqual=function(value,expected,...args){let equal=deepEqual(value,expected);if(equal){log.assert(equal,`Assert did fail. Expected ${expected} not to be equal with ${value}`,expected,value,...args)}};return log}__name(LoggerBaseFactory,"LoggerBaseFactory");function Logger2(name=""){return logFactory(name)}__name(Logger2,"Logger");Logger2.registerHandler=function(handler){logHandlers.push(handler)};Logger2.setFilter=function(namespaces2){logCheckNamespace=useNamespaceFilter(namespaces2)};Logger2.setLock=(lock=true)=>logLock=lock;Logger2.setHandlers=function(handlers=[]){if(logFactory!==LoggerBaseFactory){logFactory=LoggerBaseFactory}if(logLock)return;logHandlers=[...handlers].filter(h=>typeof h==="function")};Logger2.level=-1;Logger2.setLogLevel=function(level=-1){if(logLock)return;Logger2.level=level};Logger2.setFactory=function(factory){if(logLock)return;logFactory=factory};return Logger2}__name(LoggerContext,"LoggerContext");function LoggerConsoleHandler(opt={}){const{level=LogLevel.all,colors:colors2=true,levelHelper=false,nameBrackets=true,padding=16,filter=void 0}=opt;return msg=>{if(msg.level<level)return;let name=msg.name?`[${msg.name}]`:"";switch(msg.level){case LogLevel.info:console.info(`I|* ${name}`,...msg.messages);break;case LogLevel.warn:console.warn(`W|** ${name}`,...msg.messages);break;case LogLevel.error:console.error(`E|*** ${name}`,...msg.messages);break;default:console.debug(`D| ${name}`,...msg.messages);break}}}__name(LoggerConsoleHandler,"LoggerConsoleHandler");var colors=["#0000CC","#0000FF","#0033CC","#0033FF","#0066CC","#0066FF","#0099CC","#0099FF","#00CC00","#00CC33","#00CC66","#00CC99","#00CCCC","#00CCFF","#3300CC","#3300FF","#3333CC","#3333FF","#3366CC","#3366FF","#3399CC","#3399FF","#33CC00","#33CC33","#33CC66","#33CC99","#33CCCC","#33CCFF","#6600CC","#6600FF","#6633CC","#6633FF","#66CC00","#66CC33","#9900CC","#9900FF","#9933CC","#9933FF","#99CC00","#99CC33","#CC0000","#CC0033","#CC0066","#CC0099","#CC00CC","#CC00FF","#CC3300","#CC3333","#CC3366","#CC3399","#CC33CC","#CC33FF","#CC6600","#CC6633","#CC9900","#CC9933","#CCCC00","#CCCC33","#FF0000","#FF0033","#FF0066","#FF0099","#FF00CC","#FF00FF","#FF3300","#FF3333","#FF3366","#FF3399","#FF33CC","#FF33FF","#FF6600","#FF6633","#FF9900","#FF9933","#FFCC00","#FFCC33"];function supportsColors(){if(typeof window!=="undefined"&&window.process&&(window.process.type==="renderer"||window.process.__nwjs)){return true}if(typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)){return false}return typeof document!=="undefined"&&document.documentElement&&document.documentElement.style&&document.documentElement.style.WebkitAppearance||typeof window!=="undefined"&&window.console&&(window.console.firebug||window.console.exception&&window.console.table)||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)&&parseInt(RegExp.$1,10)>=31||typeof navigator!=="undefined"&&navigator.userAgent&&navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/)}__name(supportsColors,"supportsColors");function selectColor(namespace){let hash=0;for(let i=0;i<namespace.length;i++){hash=(hash<<5)-hash+namespace.charCodeAt(i);hash|=0}return colors[Math.abs(hash)%colors.length]}__name(selectColor,"selectColor");var styleFont=`font-family: "JetBrains Mono", Menlo; font-size: 11px;`;var styleDefault=`${styleFont}`;var styleBold=`font-weight: 600; ${styleFont}`;var useColors=supportsColors();var namespaces={};var time=getTimestamp();function LoggerBrowserHandler(opt={}){var _a,_b;const{level=LogLevel.all,colors:colors2=true,levelHelper=false,nameBrackets=true,padding=16}=opt;const matches=useNamespaceFilter((_b=(_a=opt.filter)!=null?_a:localStorage.zeed)!=null?_b:localStorage.debug);return msg=>{var _a2,_b2;if(msg.level<level)return;if(!matches(msg.name))return;const timeNow=getTimestamp();let name=msg.name||"";let ninfo=namespaces[name||""];if(ninfo==null){ninfo={color:selectColor(name)};namespaces[name]=ninfo}const diff=formatMilliseconds(timeNow-time);let args;if(padding>0){name=name.padEnd(16," ")}if(colors2&&useColors){args=[`%c${name}%c %s %c+${diff}`];args.push(`color:${ninfo.color}; ${styleBold}`);args.push(styleDefault);args.push((_b2=(_a2=msg.messages)==null?void 0:_a2[0])!=null?_b2:"");args.push(`color:${ninfo.color};`);args.push(...msg.messages.slice(1))}else{args=[name,...msg.messages,`+${diff}`]}switch(msg.level){case LogLevel.info:if(opt.levelHelper)args[0]=`I|* `+args[0];console.info(...args);break;case LogLevel.warn:if(opt.levelHelper)args[0]=`W|** `+args[0];console.warn(...args);break;case LogLevel.error:if(opt.levelHelper)args[0]=`E|*** `+args[0];console.error(...args);break;default:if(opt.levelHelper)args[0]=`D| `+args[0];console.debug(...args);break}}}__name(LoggerBrowserHandler,"LoggerBrowserHandler");function LoggerBrowserSetupDebugFactory(opt={}){var _a,_b;const filter=(_b=(_a=opt.filter)!=null?_a:localStorage.zeed)!=null?_b:localStorage.debug;return __name(function LoggerBrowserDebugFactory(name=""){let log;const matches=useNamespaceFilter(filter);if(matches(name)){let fixedArgs=[];if(useColors){const color=selectColor(name);fixedArgs.push(`%c${name.padEnd(16," ")}%c %s`);fixedArgs.push(`color:${color}; ${styleBold}`);fixedArgs.push(styleDefault)}else{fixedArgs.push(`[${name}] %s`)}log=console.debug.bind(console,...fixedArgs);log.debug=console.debug.bind(console,...fixedArgs);log.info=console.info.bind(console,...fixedArgs);log.warn=console.warn.bind(console,...fixedArgs);log.error=console.error.bind(console,...fixedArgs);log.assert=console.assert.bind(console);log.assertEqual=function(value,expected,...args){let equal=deepEqual(value,expected);if(!equal){log.assert(equal,`Assert did fail. Expected ${expected} got ${value}`,expected,value,...args)}};log.assertNotEqual=function(value,expected,...args){let equal=deepEqual(value,expected);if(equal){log.assert(equal,`Assert did fail. Expected ${expected} not to be equal with ${value}`,expected,value,...args)}}}else{const noop=__name(()=>{},"noop");log=noop;log.debug=noop;log.info=noop;log.warn=noop;log.error=noop;log.assert=noop;log.assertEqual=noop;log.assertNotEqual=noop}log.extend=subName=>{return LoggerBrowserDebugFactory(name?`${name}:${subName}`:subName)};return log},"LoggerBrowserDebugFactory")}__name(LoggerBrowserSetupDebugFactory,"LoggerBrowserSetupDebugFactory");function activateConsoleDebug(opt={}){console.info("activateConsoleDebug is activated by default in browsers")}__name(activateConsoleDebug,"activateConsoleDebug");function _global(){if(typeof self!=="undefined")return self;if(typeof window!=="undefined")return window;if(typeof global!=="undefined")return global;if(typeof globalThis!=="undefined")return globalThis;throw new Error("unable to locate global object")}__name(_global,"_global");function getGlobalContext(){let gcontext=_global();if(gcontext._zeedGlobal==null){gcontext._zeedGlobal={}}return gcontext._zeedGlobal}__name(getGlobalContext,"getGlobalContext");var globalLogger;function getLoggerContext(){let logger=LoggerContext();if(isBrowser()){logger.setHandlers([LoggerBrowserHandler()]);logger.setFactory(LoggerBrowserSetupDebugFactory({}))}return logger}__name(getLoggerContext,"getLoggerContext");try{let _global2=getGlobalContext();if(_global2!=null){if((_global2==null?void 0:_global2.logger)==null){globalLogger=getLoggerContext();_global2.logger=globalLogger}else{globalLogger=_global2.logger}}else{globalLogger=getLoggerContext()}}catch(e){globalLogger=getLoggerContext()}var Logger=globalLogger;exports.__name = __name; exports.getWindow = getWindow; exports.getNavigator = getNavigator; exports.getGlobal = getGlobal; exports.detect = detect; exports.isBrowser = isBrowser; exports.platform = platform; exports.getTimestamp = getTimestamp; exports.formatMilliseconds = formatMilliseconds; exports.isObject = isObject; exports.isPrimitive = isPrimitive; exports.deepEqual = deepEqual; exports.deepMerge = deepMerge; exports.LoggerConsoleHandler = LoggerConsoleHandler; exports.useNamespaceFilter = useNamespaceFilter; exports.LogLevel = LogLevel; exports.LoggerContext = LoggerContext; exports.supportsColors = supportsColors; exports.selectColor = selectColor; exports.LoggerBrowserHandler = LoggerBrowserHandler; exports.LoggerBrowserSetupDebugFactory = LoggerBrowserSetupDebugFactory; exports.activateConsoleDebug = activateConsoleDebug; exports.getGlobalContext = getGlobalContext; exports.Logger = Logger;
|
|
2
|
-
//# sourceMappingURL=chunk-N4GS35VA.cjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/common/platform.ts", "../src/common/time.ts", "../src/common/data/deep.ts", "../src/common/log-filter.ts", "../src/common/log-base.ts", "../src/common/log-console.ts", "../src/browser/log-colors.ts", "../src/browser/log-browser.ts", "../src/common/global.ts", "../src/common/log.ts"],
|
|
4
|
-
"sourcesContent": ["// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport function getWindow(): any | undefined {\n // @ts-ignore\n if (typeof window !== \"undefined\") return window\n}\n\nexport function getNavigator(): any | undefined {\n // @ts-ignore\n if (typeof navigator !== \"undefined\") return navigator\n}\n\nexport function getGlobal(): any {\n return getWindow() ??\n // @ts-ignore\n typeof WorkerGlobalScope !== \"undefined\"\n ? // @ts-ignore\n self\n : typeof global !== \"undefined\"\n ? global\n : Function(\"return this;\")()\n}\n\nconst _navigator = getNavigator()\nconst _window = getWindow()\n\nexport function detect(\n info = {\n ios: false,\n macos: false,\n windows: false,\n beaker: false,\n electron: false,\n wkwebview: false,\n pwa: false,\n pwaInstalled: false,\n browser: false,\n node: false,\n worker: false,\n jest: false,\n macosNative: false,\n iosNative: false,\n appleNative: false,\n touch: false,\n }\n) {\n info.ios = _navigator?.platform?.match(/(iPhone|iPod|iPad)/i) != null\n info.macos = !!_navigator?.platform?.startsWith(\"Mac\")\n info.windows = !!_navigator?.platform?.startsWith(\"Win\")\n\n // @ts-ignore\n info.beaker = _window?.[\"beaker\"] != null // https://github.com/beakerbrowser/beaker\n info.electron =\n (_navigator?.userAgent?.toLowerCase()?.indexOf(\" electron/\") || -1) > -1 &&\n !info.beaker\n // @ts-ignore\n info.wkwebview = _window?.webkit?.[\"messageHandlers\"] != null //Apple embedded\n\n info.pwa = _navigator?.serviceWorker != null\n\n info.pwaInstalled =\n // @ts-ignore\n _navigator?.standalone ||\n _window?.matchMedia(\"(display-mode: standalone)\")?.matches\n\n info.node =\n typeof process !== \"undefined\" && process?.release?.name === \"node\"\n info.browser = !info.electron && !info.wkwebview && !info.node\n\n // info.worker = typeof importScripts === 'function'\n // @ts-ignore\n info.worker =\n // @ts-ignore\n typeof WorkerGlobalScope !== \"undefined\" &&\n // @ts-ignore\n self instanceof WorkerGlobalScope\n // @ts-ignore\n info.jest = typeof jest !== \"undefined\"\n\n info.macosNative = info.wkwebview && info.macos\n info.iosNative = info.wkwebview && info.ios\n info.appleNative = info.wkwebview\n\n // https://github.com/viljamis/feature.js/blob/master/feature.js#L203\n // @ts-ignore\n info.touch =\n (_window && \"ontouchstart\" in _window) ||\n (_navigator?.maxTouchPoints || 0) > 1 ||\n // @ts-ignore\n (_navigator?.msPointerEnabled && _window?.MSGesture) ||\n // @ts-ignore\n (_window?.DocumentTouch && document instanceof DocumentTouch)\n\n return info\n}\n\n// https://stackoverflow.com/a/31090240/140927\n// export const isBrowser = new Function(\n// \"try {return this===window;}catch(e){ return false;}\"\n// )\n\n// export const isNode = new Function(\n// \"try {return this===global;}catch(e){return false;}\"\n// )\n\nexport const isBrowser = () =>\n typeof window !== \"undefined\" && globalThis === window\n\nexport const platform = detect()\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 =>\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", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport const isObject = (obj: any) => obj && typeof obj === \"object\"\nexport const isPrimitive = (obj: any) => Object(obj) !== obj\n\n// export function deepClone(obj) {\n// return cloneDeep(obj)\n// }\n\n// // https://stackoverflow.com/a/40294058/140927\n// // Handles cyclic references\n// export function deepClone(obj, hash = new WeakMap()) {\n// return cloneDeep(obj)\n//\n// // primitives\n// if (Object(obj) !== 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// if (obj instanceof Set) {\n// result = new Set(obj)\n// } else if (obj instanceof Map) {\n// result = new Map(Array.from(obj, ([key, val]) =>\n// [key, deepClone(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 (obj.constructor) {\n// result = new obj.constructor()\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]: deepClone(obj[key], hash),\n// })),\n// )\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\nexport function deepEqual(a: any, b: any, hash = new WeakSet()) {\n // if both x and y are null or undefined and exactly the same\n if (a === b) {\n return true\n }\n\n // Cyclic\n if (hash.has(b)) {\n // console.log('cyclic')\n return true\n }\n\n if (!isPrimitive(b)) {\n hash.add(b)\n }\n\n // if they are not strictly equal, they both need to be Objects\n if (!(a instanceof Object) || !(b instanceof Object)) {\n return false\n }\n\n // they must have the exact same prototype chain, the closest we can do is\n // test there constructor.\n if (a.constructor !== b.constructor) {\n return false\n }\n\n // Shortcut to avoid to many loops\n if (a.length !== b.length) {\n return false\n }\n\n for (let p in a) {\n // other properties were tested using x.constructor === y.constructor\n if (!a.hasOwnProperty(p)) {\n continue\n }\n\n // allows to compare x[ p ] and y[ p ] when set to undefined\n if (!b.hasOwnProperty(p)) {\n return false\n }\n\n let aa = a[p]\n let bb = b[p]\n\n // if they have the same strict value or identity then they are equal\n // if (aa === bb) {\n // console.log('eq', typeof bb)\n // if (bb != null) hash.set(bb, true)\n // continue\n // }\n //\n // // Numbers, Strings, Functions, Booleans must be strictly equal\n // if (typeof (aa) !== 'object') {\n // return false\n // }\n\n // Objects and Arrays must be tested recursively\n if (!deepEqual(aa, bb, hash)) {\n return false\n }\n }\n\n // allows x[ p ] to be set to undefined\n for (let p in b) {\n if (b.hasOwnProperty(p) && !a.hasOwnProperty(p)) {\n return false\n }\n }\n\n return true\n}\n\nexport function deepMerge(target: any, ...sources: any[]) {\n for (let source of sources) {\n if (!isObject(target)) {\n target = {}\n }\n\n if (source == null) continue\n\n Object.keys(source).forEach((key) => {\n const targetValue = target[key]\n const sourceValue = source[key]\n\n if (Array.isArray(targetValue) && Array.isArray(sourceValue)) {\n target[key] = targetValue.concat(sourceValue)\n } else if (isObject(targetValue) && isObject(sourceValue)) {\n target[key] = deepMerge(Object.assign({}, targetValue), sourceValue)\n } else {\n target[key] = sourceValue\n }\n })\n }\n\n return target\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\ninterface NamespaceFilter {\n (name: string): boolean\n accept: RegExp[]\n reject: RegExp[]\n filter: string\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(filter?: string): 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", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { deepEqual } from \"./data/deep\"\nimport { LoggerConsoleHandler } from \"./log-console\"\nimport { useNamespaceFilter } from \"./log-filter\"\n\nexport enum LogLevel {\n all = -1,\n debug = 0,\n info,\n warn,\n error,\n fatal,\n off = Infinity,\n}\n\nexport 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\nexport interface LoggerContextInterface {\n (name?: string): LoggerInterface\n registerHandler(handler: LogHandler): void\n setFilter(namespaces: string): void\n setHandlers(handlers?: LogHandler[]): void\n setLock(lock: boolean): void\n setLogLevel(level?: LogLevel): void\n setFactory(factory: (name?: string) => LoggerInterface): void\n}\n\nexport interface LogHandlerOptions {\n level?: LogLevel\n filter?: string\n colors?: boolean\n levelHelper?: boolean\n nameBrackets?: boolean\n padding?: number\n fill?: number\n stack?: boolean | number\n}\n\nexport function LoggerContext(prefix: string = \"\"): LoggerContextInterface {\n let logHandlers: LogHandler[] = [LoggerConsoleHandler()]\n let logAssertLevel: LogLevel = LogLevel.warn\n let logCheckNamespace = (name: string) => true\n let logLock = false\n let logFactory = LoggerBaseFactory\n\n function LoggerBaseFactory(name: string = \"\"): LoggerInterface {\n log.extend = function (prefix: string): LoggerInterface {\n return logFactory(name ? `${name}:${prefix}` : prefix)\n }\n\n const emit = (msg: LogMessage) => {\n if (log.active === true) {\n if (msg.level >= Logger.level && msg.level >= log.level) {\n if (logCheckNamespace(name)) {\n for (let handler of logHandlers) {\n if (handler) handler(msg)\n }\n }\n }\n }\n }\n\n function log(...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.active = true\n log.level = LogLevel.all\n\n log.debug = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.debug,\n })\n }\n\n log.info = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.info,\n })\n }\n\n log.warn = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.warn,\n })\n }\n\n log.error = function (...messages: any[]) {\n emit({\n name,\n messages,\n level: LogLevel.error,\n })\n }\n\n // fatal(...args: any[]) {\n // console.error(...args)\n // },\n\n log.assert = function (cond: any, ...messages: any[]) {\n if (!cond) {\n if (typeof console !== undefined) {\n if (console.assert) {\n // https://developer.mozilla.org/de/docs/Web/API/Console/assert\n console.assert(cond, ...messages)\n } else {\n console.error(`Assert did fail with: ${cond}`, ...messages)\n }\n }\n emit({\n name,\n messages: messages || [`Assert did fail with: ${cond}`],\n level: logAssertLevel,\n })\n // try {\n // if (typeof expect !== undefined) {\n // expect(cond).toBeTruthy()\n // }\n // } catch (err) {\n // methods.warn(...args)\n // }\n }\n }\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed equal`)\n }\n }\n\n log.assertNotEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n // } else {\n // methods.debug(`Passed not equal check`)\n }\n }\n\n return log\n }\n\n function Logger(name: string = \"\"): LoggerInterface {\n return logFactory(name)\n }\n\n Logger.registerHandler = function (handler: LogHandler) {\n logHandlers.push(handler)\n }\n\n Logger.setFilter = function (namespaces: string) {\n logCheckNamespace = useNamespaceFilter(namespaces)\n }\n\n Logger.setLock = (lock: boolean = true) => (logLock = lock)\n\n Logger.setHandlers = function (handlers: LogHandler[] = []) {\n if (logFactory !== LoggerBaseFactory) {\n logFactory = LoggerBaseFactory\n }\n if (logLock) return\n logHandlers = [...handlers].filter((h) => typeof h === \"function\")\n }\n\n Logger.level = LogLevel.all\n\n /** @deprecated */\n Logger.setLogLevel = function (level: LogLevel = LogLevel.all) {\n if (logLock) return\n Logger.level = level\n }\n\n Logger.setFactory = function (\n factory: (name?: string) => LoggerInterface\n ): void {\n if (logLock) return\n logFactory = factory\n }\n\n return Logger\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { LogLevel, LogHandler, LogMessage, LogHandlerOptions } from \"./log-base\"\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 = LogLevel.all,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n filter = undefined,\n } = opt\n return (msg: LogMessage) => {\n if (msg.level < level) 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", "// Taken from https://github.com/visionmedia/debug/blob/master/src/browser.js#L27\n\nconst colors = [\n \"#0000CC\",\n \"#0000FF\",\n \"#0033CC\",\n \"#0033FF\",\n \"#0066CC\",\n \"#0066FF\",\n \"#0099CC\",\n \"#0099FF\",\n \"#00CC00\",\n \"#00CC33\",\n \"#00CC66\",\n \"#00CC99\",\n \"#00CCCC\",\n \"#00CCFF\",\n \"#3300CC\",\n \"#3300FF\",\n \"#3333CC\",\n \"#3333FF\",\n \"#3366CC\",\n \"#3366FF\",\n \"#3399CC\",\n \"#3399FF\",\n \"#33CC00\",\n \"#33CC33\",\n \"#33CC66\",\n \"#33CC99\",\n \"#33CCCC\",\n \"#33CCFF\",\n \"#6600CC\",\n \"#6600FF\",\n \"#6633CC\",\n \"#6633FF\",\n \"#66CC00\",\n \"#66CC33\",\n \"#9900CC\",\n \"#9900FF\",\n \"#9933CC\",\n \"#9933FF\",\n \"#99CC00\",\n \"#99CC33\",\n \"#CC0000\",\n \"#CC0033\",\n \"#CC0066\",\n \"#CC0099\",\n \"#CC00CC\",\n \"#CC00FF\",\n \"#CC3300\",\n \"#CC3333\",\n \"#CC3366\",\n \"#CC3399\",\n \"#CC33CC\",\n \"#CC33FF\",\n \"#CC6600\",\n \"#CC6633\",\n \"#CC9900\",\n \"#CC9933\",\n \"#CCCC00\",\n \"#CCCC33\",\n \"#FF0000\",\n \"#FF0033\",\n \"#FF0066\",\n \"#FF0099\",\n \"#FF00CC\",\n \"#FF00FF\",\n \"#FF3300\",\n \"#FF3333\",\n \"#FF3366\",\n \"#FF3399\",\n \"#FF33CC\",\n \"#FF33FF\",\n \"#FF6600\",\n \"#FF6633\",\n \"#FF9900\",\n \"#FF9933\",\n \"#FFCC00\",\n \"#FFCC33\",\n]\n\nexport function supportsColors(): boolean {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (\n typeof window !== \"undefined\" &&\n window.process &&\n // @ts-ignore\n (window.process.type === \"renderer\" || window.process.__nwjs)\n ) {\n return true\n }\n\n // Internet Explorer and Edge do not support colors.\n if (\n typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)\n ) {\n return false\n }\n\n // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (\n (typeof document !== \"undefined\" &&\n document.documentElement &&\n document.documentElement.style &&\n // @ts-ignore\n document.documentElement.style.WebkitAppearance) ||\n // Is firebug? http://stackoverflow.com/a/398120/376773\n (typeof window !== \"undefined\" &&\n window.console &&\n // @ts-ignore\n (window.console.firebug ||\n // @ts-ignore\n (window.console.exception && window.console.table))) ||\n // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/) &&\n parseInt(RegExp.$1, 10) >= 31) ||\n // Double check webkit in userAgent just in case we are in a worker\n (typeof navigator !== \"undefined\" &&\n navigator.userAgent &&\n navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))\n )\n}\n\nexport function selectColor(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { formatMilliseconds, getTimestamp } from \"../common/time\"\nimport {\n LoggerInterface,\n LogHandler,\n LogHandlerOptions,\n LogLevel,\n LogMessage,\n} from \"../common/log-base\"\nimport { selectColor, supportsColors } from \"./log-colors\"\nimport { useNamespaceFilter } from \"../common/log-filter\"\nimport { deepEqual } from \"../common/data/deep\"\n\nconst styleFont = `font-family: \"JetBrains Mono\", Menlo; font-size: 11px;`\nconst styleDefault = `${styleFont}`\nconst styleBold = `font-weight: 600; ${styleFont}`\nconst useColors = supportsColors()\n\nlet namespaces: Record<string, any> = {}\n\nlet time = getTimestamp()\n\nexport function LoggerBrowserHandler(opt: LogHandlerOptions = {}): LogHandler {\n const {\n level = LogLevel.all,\n colors = true,\n levelHelper = false,\n nameBrackets = true,\n padding = 16,\n } = opt\n const matches = useNamespaceFilter(\n opt.filter ?? localStorage.zeed ?? localStorage.debug\n )\n return (msg: LogMessage) => {\n if (msg.level < level) return\n if (!matches(msg.name)) return\n\n const timeNow = getTimestamp()\n let name = msg.name || \"\"\n let ninfo = namespaces[name || \"\"]\n if (ninfo == null) {\n ninfo = {\n color: selectColor(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const diff = formatMilliseconds(timeNow - time)\n let args: string[]\n\n if (padding > 0) {\n name = name.padEnd(16, \" \")\n }\n\n if (colors && useColors) {\n args = [`%c${name}%c \\t%s %c+${diff}`]\n args.push(`color:${ninfo.color}; ${styleBold}`)\n args.push(styleDefault)\n args.push(msg.messages?.[0] ?? \"\")\n args.push(`color:${ninfo.color};`)\n args.push(...msg.messages.slice(1))\n } else {\n args = [name, ...msg.messages, `+${diff}`]\n }\n\n // function consoleArgs(args: any[] = []): any[] {\n // return [\n // args\n // .filter((a) => typeof a === \"string\")\n // .map((a) => String(a))\n // .join(\" \"),\n // ...styles,\n // ...args.filter((a) => typeof a !== \"string\"),\n // ]\n // }\n\n switch (msg.level) {\n case LogLevel.info:\n if (opt.levelHelper) args[0] = `I|* ` + args[0]\n console.info(...args)\n break\n case LogLevel.warn:\n if (opt.levelHelper) args[0] = `W|** ` + args[0]\n console.warn(...args)\n break\n case LogLevel.error:\n if (opt.levelHelper) args[0] = `E|*** ` + args[0]\n console.error(...args)\n break\n default:\n if (opt.levelHelper) args[0] = `D| ` + args[0]\n console.debug(...args)\n break\n }\n }\n}\n\nexport function LoggerBrowserSetupDebugFactory(opt: LogHandlerOptions = {}) {\n const filter = opt.filter ?? localStorage.zeed ?? localStorage.debug\n\n /// The trick is, that console called directly provides a reference to the source code.\n /// For the regular implementation this information is lost. But this approach has other\n /// drawbacks, therefore only use it in the Browser when actively debugging.\n return function LoggerBrowserDebugFactory(\n name: string = \"\"\n ): LoggerInterface {\n let log: LoggerInterface\n\n const matches = useNamespaceFilter(filter)\n\n if (matches(name)) {\n let fixedArgs = []\n if (useColors) {\n const color = selectColor(name)\n fixedArgs.push(`%c${name.padEnd(16, \" \")}%c \\t%s`)\n fixedArgs.push(`color:${color}; ${styleBold}`)\n fixedArgs.push(styleDefault)\n } else {\n fixedArgs.push(`[${name}] \\t%s`)\n }\n\n // @ts-ignore\n // console.previous = {\n // debug: console.debug,\n // info: console.info,\n // warn: console.warn,\n // error: console.error,\n // assert: console.assert,\n // }\n\n log = console.debug.bind(console, ...fixedArgs) as LoggerInterface\n log.debug = console.debug.bind(console, ...fixedArgs)\n log.info = console.info.bind(console, ...fixedArgs)\n log.warn = console.warn.bind(console, ...fixedArgs)\n log.error = console.error.bind(console, ...fixedArgs)\n\n log.assert = console.assert.bind(console)\n\n log.assertEqual = function (value: any, expected: any, ...args: any[]) {\n let equal = deepEqual(value, expected)\n if (!equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} got ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n\n log.assertNotEqual = function (\n value: any,\n expected: any,\n ...args: any[]\n ) {\n let equal = deepEqual(value, expected)\n if (equal) {\n log.assert(\n equal,\n `Assert did fail. Expected ${expected} not to be equal with ${value}`,\n expected,\n value,\n ...args\n )\n }\n }\n } else {\n const noop = () => {}\n log = noop as LoggerInterface\n log.debug = noop\n log.info = noop\n log.warn = noop\n log.error = noop\n\n log.assert = noop\n log.assertEqual = noop\n log.assertNotEqual = noop\n }\n\n log.extend = (subName: string) => {\n return LoggerBrowserDebugFactory(name ? `${name}:${subName}` : subName)\n }\n\n return log\n }\n}\n\n/** @deprecated This output is default for initial use of Logger in browser environments. */\nexport function activateConsoleDebug(opt: LogHandlerOptions = {}) {\n console.info(\"activateConsoleDebug is activated by default in browsers\")\n // Logger.setHandlers([LoggerBrowserHandler(opt)]) // Fallback for previously registered Loggers\n // Logger.setFactory(LoggerBrowserSetupDebugFactory(opt))\n}\n\n// let klass = console\n// let debug = console.debug.bind(window.console, klass.toString() + \": \")\n\n// debug(\"test\")\n// console.debug(\"test2\")\n\n// let dd\n// if (Function.prototype.bind) {\n// dd = Function.prototype.bind.call(console.log, console)\n// } else {\n// dd = function () {\n// Function.prototype.apply.call(console.log, console, arguments)\n// }\n// }\n\n// dd(\"dd\")\n\n// let c = 1\n// Object.defineProperty(window, \"log2\", {\n// get: () => {\n// return console.log.bind(\n// window.console,\n// \"%c[log]%c %s\" + c++,\n// \"color:red\",\n// \"\"\n// )\n// },\n// })\n\n// // usage:\n// log2(\"Back to the future\")\n// log2(\"Back to the future\")\n\n// let plog = new Proxy(console.debug, {\n// apply: function (target, that, args) {\n// target.apply(that, args)\n// // base.apply(that, args);\n// },\n// })\n\n// let cons = console.debug\n// let plog = (...args) => {\n// cons.apply(window.console, [\"|\", ...args])\n// }\n\n// plog(\"xxx\")\n\n// function a() {\n// var err = new Error()\n// var caller_line = err.stack.split(\"\\n\")[2]\n// var index = caller_line.indexOf(\"at \")\n// var clean = caller_line.slice(index + 2, caller_line.length)\n// clean = clean.replace(/\\?t=\\d+/, \"\").replace(\"@fs/\", \"\")\n// console.log(clean)\n// console.log(\n// \"http://localhost:8080/Users/dirk/work/viidoo/lib/src/browser/log-browser.ts:188:1 log-browser.ts:291:10\"\n// )\n// }\n// function b() {\n// a()\n// }\n// b()\n", "// 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 { isBrowser } from \"./platform\"\nimport {\n LoggerBrowserHandler,\n LoggerBrowserSetupDebugFactory,\n} from \"../browser/log-browser\"\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?: LoggerContextInterface\n }\n}\n\nfunction getLoggerContext() {\n let logger = LoggerContext()\n if (isBrowser()) {\n logger.setHandlers([LoggerBrowserHandler()]) // Fallback for previously registered Loggers\n logger.setFactory(LoggerBrowserSetupDebugFactory({}))\n }\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"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
package/dist/chunk-NHGGF4FJ.js
DELETED
|
@@ -1,3 +0,0 @@
|
|
|
1
|
-
import{LogLevel,Logger,__name,getGlobal,getGlobalContext,getTimestamp}from"./chunk-HXRBK433.js";var separator=",";var preventCast=false;var ignoreNullOrUndefined=true;function filterFloat(value){if(/^([-+])?([0-9]+(\.[0-9]+)?|Infinity)$/.test(value)){return Number(value)}return NaN}__name(filterFloat,"filterFloat");function escape(field){if(ignoreNullOrUndefined&&field==void 0){return""}if(preventCast){return'="'+String(field).replace(/"/g,'""')+'"'}if(!isNaN(filterFloat(field))&&isFinite(field)){return parseFloat(field)}return'"'+String(field).replace(/"/g,'""')+'"'}__name(escape,"escape");function csv(data,headerRow){let body="";if(headerRow){body=headerRow.join(separator)+"\r\n"}for(let i=0;i<data.length;i++){body+=data[i].map(escape).join(separator)+"\r\n"}return body}__name(csv,"csv");var log=Logger("zeed:basex");var alphabets={"2":"01","8":"01234567","11":"0123456789a","16":"0123456789abcdef","32":"0123456789ABCDEFGHJKMNPQRSTVWXYZ","36":"0123456789abcdefghijklmnopqrstuvwxyz","58":"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz","62":"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz","64":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/","66":"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~"};function useBase(alphaOrBase){let ALPHABET;if(typeof alphaOrBase==="string"){ALPHABET=alphaOrBase}else{ALPHABET=alphabets[alphaOrBase.toString()];if(ALPHABET==null)throw new Error(`Unknown base ${alphaOrBase}`)}if(ALPHABET.length>=255)throw new TypeError("Alphabet too long");const BASE_MAP=new Uint8Array(256);for(let j=0;j<BASE_MAP.length;j++){BASE_MAP[j]=255}for(let i=0;i<ALPHABET.length;i++){const x=ALPHABET.charAt(i);const xc=x.charCodeAt(0);if(BASE_MAP[xc]!==255)throw new TypeError(x+" is ambiguous");BASE_MAP[xc]=i}const BASE=ALPHABET.length;const LEADER=ALPHABET.charAt(0);const FACTOR=Math.log(BASE)/Math.log(256);const iFACTOR=Math.log(256)/Math.log(BASE);function encode(source,padToLength=-1){let data;if(source instanceof ArrayBuffer){data=new Uint8Array(source)}else{data=source}if(data.length===0)return"";let length=0;let pbegin=0;const pend=data.length;while(pbegin!==pend&&data[pbegin]===0)pbegin++;const size2=(pend-pbegin)*iFACTOR+1>>>0;const dataEncoded=new Uint8Array(size2);while(pbegin!==pend){let carry=data[pbegin];let i=0;for(let it1=size2-1;(carry!==0||i<length)&&it1!==-1;it1--,i++){carry+=256*dataEncoded[it1]>>>0;dataEncoded[it1]=carry%BASE>>>0;carry=carry/BASE>>>0}if(carry!==0){log.warn("Non-zero carry",data,padToLength,i,size2);throw new Error("Non-zero carry")}length=i;pbegin++}let it2=size2-length;while(it2!==size2&&dataEncoded[it2]===0){it2++}let str="";for(;it2<size2;++it2)str+=ALPHABET.charAt(dataEncoded[it2]);if(padToLength>0){return str.padStart(padToLength,LEADER)}return str}__name(encode,"encode");function decode(source,padToLength=-1){if(typeof source!=="string")throw new TypeError("Expected String");if(source.length===0)return new Uint8Array;source=source.replace(/\s+/gi,"");let psz=0;let length=0;while(source[psz]===LEADER){psz++}const size2=(source.length-psz)*FACTOR+1>>>0;const dataDecoded=new Uint8Array(size2);while(source[psz]){let carry=BASE_MAP[source.charCodeAt(psz)];if(carry===255)throw new Error(`Unsupported character "${source[psz]}"`);let i=0;for(let it3=size2-1;(carry!==0||i<length)&&it3!==-1;it3--,i++){carry+=BASE*dataDecoded[it3]>>>0;dataDecoded[it3]=carry%256>>>0;carry=carry/256>>>0}if(carry!==0)throw new Error("Non-zero carry");length=i;psz++}let it4=size2-length;while(it4!==size2&&dataDecoded[it4]===0){it4++}if(padToLength>0){return new Uint8Array([...new Uint8Array(padToLength-dataDecoded.length+it4),...dataDecoded.slice(it4)])}return dataDecoded.slice(it4)}__name(decode,"decode");return{encode,decode}}__name(useBase,"useBase");var{encode:encodeBase16,decode:decodeBase16}=useBase(16);var{encode:encodeBase32,decode:decodeBase32}=useBase(32);var{encode:encodeBase58,decode:decodeBase58}=useBase(58);var{encode:encodeBase62,decode:decodeBase62}=useBase(62);var toCamelCase=__name(s=>{if(s.length>0){if(/^[A-Z0-9_\-\ ]*$/g.test(s)){s=s.toLowerCase()}s=s.replace(/^[-_\ ]+/gi,"").replace(/[-_\ ]+$/gi,"").replace(/[-_\ ]+([a-z0-9])/gi,($0,$1)=>$1.toUpperCase());s=s[0].toLowerCase()+s.substring(1)}return s},"toCamelCase");var TRUE_VALUES_LIST=["1","true","yes","y","on"];function stringToBoolean(value,defaultValue=false){if(value==null||typeof value!=="string")return defaultValue;return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())}__name(stringToBoolean,"stringToBoolean");function stringToInteger(value,defaultValue=0){var _a;if(value==null||typeof value!=="string")return defaultValue;return(_a=parseInt(value.trim(),10))!=null?_a:defaultValue}__name(stringToInteger,"stringToInteger");function stringToFloat(value,defaultValue=0){var _a;if(value==null||typeof value!=="string")return defaultValue;return(_a=parseFloat(value.trim()))!=null?_a:defaultValue}__name(stringToFloat,"stringToFloat");function valueToBoolean(value,defaultValue=false){if(value==null)return defaultValue;if(typeof value==="boolean")return value;if(typeof value==="number")return value!==0;return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())}__name(valueToBoolean,"valueToBoolean");function valueToInteger(value,defaultValue=0){var _a;if(value==null)return defaultValue;if(typeof value==="boolean")return value?1:0;if(typeof value==="number")return Math.floor(value);return(_a=parseInt(String(value).trim(),10))!=null?_a:defaultValue}__name(valueToInteger,"valueToInteger");function valueToFloat(value,defaultValue=0){var _a;if(value==null)return defaultValue;if(typeof value==="boolean")return value?1:0;if(typeof value==="number")return Math.floor(value);return(_a=parseFloat(String(value).trim()))!=null?_a:defaultValue}__name(valueToFloat,"valueToFloat");function valueToString(value,defaultValue=""){var _a;if(value==null)return defaultValue;return(_a=String(value))!=null?_a:defaultValue}__name(valueToString,"valueToString");var toFloat=valueToFloat;var toInt=valueToInteger;var toString=valueToString;var toBool=valueToBoolean;function serializer(replacer,cycleReplacer){var stack=[],keys=[];if(cycleReplacer==null)cycleReplacer=__name(function(key,value){if(stack[0]===value)return"[Circular ~]";return"[Circular ~."+keys.slice(0,stack.indexOf(value)).join(".")+"]"},"cycleReplacer");return function(key,value){if(stack.length>0){var thisPos=stack.indexOf(this);~thisPos?stack.splice(thisPos+1):stack.push(this);~thisPos?keys.splice(thisPos,Infinity,key):keys.push(key);if(~stack.indexOf(value))value=cycleReplacer==null?void 0:cycleReplacer.call(this,key,value)}else stack.push(value);return replacer==null?value:replacer.call(this,key,value)}}__name(serializer,"serializer");function stringify(obj,replacer,spaces,cycleReplacer){return JSON.stringify(obj,serializer(replacer,cycleReplacer),spaces)}__name(stringify,"stringify");function formatMessages(messages2,opt={}){const{trace=true,pretty=true}=opt;return messages2.map(obj=>{if(obj&&typeof obj==="object"){if(obj instanceof Error){if(!trace){return`${obj.name||"Error"}: ${obj.message}`}return`${obj.name||"Error"}: ${obj.message}
|
|
2
|
-
${obj.stack}`}return pretty?stringify(obj,null,2):stringify(obj)}return String(obj)})}__name(formatMessages,"formatMessages");function renderMessages(messages2,opt={}){return formatMessages(messages2,opt).join(" ")}__name(renderMessages,"renderMessages");function parseOrderby(value=""){let[field="",orderby="asc"]=value.split(" ");orderby=orderby.toLowerCase();return{field,orderby,asc:orderby!=="desc",desc:orderby==="desc"}}__name(parseOrderby,"parseOrderby");function composeOrderby(field,asc=true){return`${field} ${asc?"asc":"desc"}`}__name(composeOrderby,"composeOrderby");function cmp(a,b,asc=true){const aa=a||0;const bb=b||0;return aa>bb?asc?1:-1:aa<bb?asc?-1:1:0}__name(cmp,"cmp");function sortedOrderby(values,...orderby){if(orderby.length>0){let orderByList=orderby.map(parseOrderby);let sortValues=Array.from(values);sortValues.sort((a,b)=>{for(let{field,asc}of orderByList){const result=cmp(a[field],b[field],asc);if(result!==0)return result}return 0});return sortValues}return values}__name(sortedOrderby,"sortedOrderby");function startSortWeight(items){return items.reduce((acc,item)=>Math.min(acc,item.sort_weight||0),0)-1-Math.random()}__name(startSortWeight,"startSortWeight");function endSortWeight(items){return items.reduce((acc,item)=>Math.max(acc,item.sort_weight||0),0)+1+Math.random()}__name(endSortWeight,"endSortWeight");function moveSortWeight(newIndex,oldIndex,items){let count=items.length;const moveLower=newIndex<oldIndex;if(count<=0||newIndex>=count-1){return endSortWeight(items)}if(newIndex<=0){return startSortWeight(items)}items=sortedItems([...items]);const step=moveLower?-1:0;const lower=items[newIndex+step].sort_weight||0;const upper=items[newIndex+step+1].sort_weight||0;const distance=upper-lower;if(distance===0){if(moveLower){return startSortWeight(items)}return endSortWeight(items)}const middle=lower+distance/2;const fuzzy=distance*.01*(Math.random()-.5);return middle+fuzzy}__name(moveSortWeight,"moveSortWeight");function sortedItems(items){items.sort((a,b)=>(a.sort_weight||0)-(b.sort_weight||0));return items}__name(sortedItems,"sortedItems");function size(obj){if(obj!=null){if(obj.size!=null){return obj.size}if(obj.length!=null){return obj.length}return Object.keys(obj).length}return 0}__name(size,"size");function last(array){return array!=null&&array.length>0?array[array.length-1]:void 0}__name(last,"last");function empty(value){try{if(value!=null){if(Array.isArray(value)){return value.length<=0}else if(typeof value==="string"){return value.length<=0}else if((value==null?void 0:value.size)!=null){return value.size<=0}else{return Object.keys(value).length<=0}}}catch(err){console.error("Failed to check if empty for",value,err)}return true}__name(empty,"empty");function cloneObject(obj){return JSON.parse(JSON.stringify(obj))}__name(cloneObject,"cloneObject");var escapeHTML=__name(s=>s.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/'/g,"'").replace(/"/g,"""),"escapeHTML");var unescapeHTML=__name(s=>s.replace(/</gi,"<").replace(/>/gi,">").replace(/"/gi,'"').replace(/'/gi,"'").replace(/&/gi,"&"),"unescapeHTML");var findURL=/((?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z0-9\u00a1-\uffff][a-z0-9\u00a1-\uffff_-]{0,62})?[a-z0-9\u00a1-\uffff]\.)+(?:[a-z\u00a1-\uffff]{2,}\.?))(?::\d{2,5})?(?:[/?#]\S*)?)/gim;function linkifyPlainText(text){return text.split(findURL).map((part,i)=>{const escapedPart=escapeHTML(part);return i%2?`<a target="_blank" href="${escapedPart}">${toHumanReadableUrl(escapedPart)}</a>`:escapedPart}).join("")}__name(linkifyPlainText,"linkifyPlainText");function toHumanReadableUrl(url){return url.replace(/^https?:\/\/(?:www\.)/,"")}__name(toHumanReadableUrl,"toHumanReadableUrl");var rxEscape=/[\-\[\]\/{}()*+?.^$|]/g;function escapeRegExp(value){if(!value)return"";if(value instanceof RegExp){return value.source}return value.replace(rxEscape,"\\$&")}__name(escapeRegExp,"escapeRegExp");var MAX_FILENAME_LENGTH=100;var reControlChars=/[\u0000-\u001F\u0080-\u009F]/g;var reRelativePath=/^\.+/;var reTrailingPeriods=/\.+$/;function filenameReservedRegex(){return/[<>:"/\\|?*\u0000-\u001F]/g}__name(filenameReservedRegex,"filenameReservedRegex");function windowsReservedNameRegex(){return/^(con|prn|aux|nul|com\d|lpt\d)$/i}__name(windowsReservedNameRegex,"windowsReservedNameRegex");function toValidFilename(string){if(typeof string!=="string"){throw new TypeError("Expected a string")}const replacement="_";if(filenameReservedRegex().test(replacement)&&reControlChars.test(replacement)){throw new Error("Replacement string cannot contain reserved filename characters")}string=string.replace(filenameReservedRegex(),replacement).replace(reControlChars,replacement).replace(reRelativePath,replacement).replace(reTrailingPeriods,"");string=windowsReservedNameRegex().test(string)?string+replacement:string;return string.slice(0,MAX_FILENAME_LENGTH)}__name(toValidFilename,"toValidFilename");function arrayUnique(x){return x.filter((n,index)=>x.indexOf(n)===index)}__name(arrayUnique,"arrayUnique");function arrayMinus(x,y){return arrayUnique(x.filter(n=>!y.includes(n)))}__name(arrayMinus,"arrayMinus");function arrayUnion(...a){return arrayUnique(a.reduce((acc=[],value)=>acc.concat(value),[]))}__name(arrayUnion,"arrayUnion");function arrayFlatten(list){return list.reduce((a,b)=>a.concat(Array.isArray(b)?arrayFlatten(b):b),[])}__name(arrayFlatten,"arrayFlatten");function arrayIntersection(x,y){return arrayUnique(x).filter(n=>y.includes(n))}__name(arrayIntersection,"arrayIntersection");function arraySymmetricDifference(x,y){return arrayMinus(arrayUnion(x,y),arrayIntersection(x,y))}__name(arraySymmetricDifference,"arraySymmetricDifference");function arrayRemoveElement(arr,el){if(arr&&Array.isArray(arr)){let index;while((index=arr.indexOf(el))!==-1){arr.splice(index,1)}return arr}return[]}__name(arrayRemoveElement,"arrayRemoveElement");function arraySetElement(arr,el){if(!arr.includes(el))arr.push(el);return arr}__name(arraySetElement,"arraySetElement");function arrayFilterInPlace(array,fn){array.splice(0,array.length,...array.filter(fn));return array}__name(arrayFilterInPlace,"arrayFilterInPlace");function arrayToggleInPlace(array,el){const index=array.findIndex(e=>e===el);if(index>=0)array.splice(index,1);else array.push(el);return array}__name(arrayToggleInPlace,"arrayToggleInPlace");function arrayEmptyInPlace(array){array.splice(0,array.length);return array}__name(arrayEmptyInPlace,"arrayEmptyInPlace");function arraySorted(arr,cond=cmp){let copy=Array.from(arr);copy.sort(cond);return copy}__name(arraySorted,"arraySorted");function arraySortedNumbers(arr){return arraySorted(arr,(l,r)=>l-r)}__name(arraySortedNumbers,"arraySortedNumbers");function arrayIsEqual(array1,array2){return array1.length===array2.length&&array1.every((value,index)=>value===array2[index])}__name(arrayIsEqual,"arrayIsEqual");function arrayShuffleInPlace(array){array.sort(()=>Math.random()>.5?1:-1);return array}__name(arrayShuffleInPlace,"arrayShuffleInPlace");function arrayShuffle(array){return arrayShuffleInPlace(Array.from(array))}__name(arrayShuffle,"arrayShuffle");function arrayShuffleForce(array){while(array.length>1){const copy=Array.from(array);arrayShuffleInPlace(copy);if(!arrayIsEqual(array,copy))return copy}return array}__name(arrayShuffleForce,"arrayShuffleForce");function arrayRandomElement(array){return array[Math.floor(Math.random()*array.length)]}__name(arrayRandomElement,"arrayRandomElement");function getStackLlocationList(stack){var _a,_b;if(typeof stack!=="string")return[];return((_b=(_a=stack==null?void 0:stack.split("\n"))==null?void 0:_a.map(rawLine=>{let m=rawLine.match(/^\s+at.*(\((.*)\)|file:\/\/(.*)$)/);if(m){let line=m[3]||m[2];if(line.endsWith(")"))line=line.slice(0,-1);return line}}))==null?void 0:_b.filter(v=>v!=null))||[]}__name(getStackLlocationList,"getStackLlocationList");function getSourceLocation(level=2,stripCwd=true){var _a;let stack=new Error().stack||"";let line=(_a=getStackLlocationList(stack))==null?void 0:_a[level];if(line&&stripCwd){if(line.includes("/node_modules/")){return""}const fileURL="file://";if(line.startsWith(fileURL)){return line.substr(fileURL.length)}const cwd=process.cwd();if(cwd&&line.startsWith(cwd)){return line.substr(cwd.length+1)}const home=process.env["HOME"];if(home&&line.startsWith(home)){line=line.substr(home.length+1)}}return line||""}__name(getSourceLocation,"getSourceLocation");var{warn}=Logger("zeed:promise");async function sleep(milliSeconds){return new Promise(resolve=>setTimeout(resolve,milliSeconds))}__name(sleep,"sleep");async function immediate(){return new Promise(resolve=>setTimeout(resolve,0))}__name(immediate,"immediate");var timeoutReached=Symbol("timeout");async function timeout(promise,milliSeconds,timeoutValue=timeoutReached){return new Promise(async(resolve,reject)=>{let done=false;const timeout2=setTimeout(()=>{done=true;resolve(timeoutValue)},milliSeconds);try{let result=await promise;clearTimeout(timeout2);if(!done)resolve(result)}catch(err){clearTimeout(timeout2);if(!done)reject(err)}})}__name(timeout,"timeout");var timoutError=new Error("Timeout reached");function isTimeout(value){return value===timeoutReached||value===timoutError}__name(isTimeout,"isTimeout");async function tryTimeout(promise,milliSeconds){if(milliSeconds<=0){return await promise}return new Promise(async(resolve,reject)=>{let done=false;const timeout2=setTimeout(()=>{done=true;reject(timoutError)},milliSeconds);try{let result=await promise;clearTimeout(timeout2);if(!done)resolve(result)}catch(err){clearTimeout(timeout2);if(!done)reject(err)}})}__name(tryTimeout,"tryTimeout");function waitOn(obj,event,timeoutMS=1e3){return new Promise((resolve,reject)=>{let fn=__name(value=>{if(timer){clearTimeout(timer);done();resolve(value)}},"fn");let done=__name(()=>{timer=null;if(obj.off){obj.off(event,fn)}else if(obj.removeEventListener){obj.removeEventListener(event,fn)}else{warn("No remove listener method found for",obj,event)}},"done");let timer=setTimeout(()=>{done();reject(new Error(`Did not response in time`))},timeoutMS);if(obj.on){obj.on(event,fn)}else if(obj.addEventListener){obj.addEventListener(event,fn)}else{warn("No listener method found for",obj)}})}__name(waitOn,"waitOn");function isPromise(value){return Boolean(value&&(value instanceof Promise||typeof value.then==="function"))}__name(isPromise,"isPromise");function promisify(value){return Promise.resolve(value)}__name(promisify,"promisify");var log2=Logger("zeed:emitter");var Emitter=class{constructor(){this.subscribers={};this.subscribersOnAny=[]}async emit(event,...args){let ok=false;try{let subscribers=this.subscribers[event]||[];this.subscribersOnAny.forEach(fn=>fn(event,...args));if(subscribers.length>0){let all=subscribers.map(fn=>{try{return promisify(fn(...args))}catch(err){log2.warn("emit warning:",err)}});ok=true;await Promise.all(all)}}catch(err){log2.error("emit exception",err)}return ok}onAny(fn){this.subscribersOnAny.push(fn)}on(event,listener){let subscribers=this.subscribers[event]||[];subscribers.push(listener);this.subscribers[event]=subscribers;return{cleanup:()=>{this.off(event,listener)}}}once(event,listener){const onceListener=__name(async(...args)=>{this.off(event,onceListener);return await promisify(listener(...args))},"onceListener");this.on(event,onceListener)}off(event,listener){this.subscribers[event]=(this.subscribers[event]||[]).filter(f=>listener&&f!==listener);return this}removeAllListeners(event){this.subscribers={};return this}};__name(Emitter,"Emitter");function getGlobalEmitter(){let emitter=getGlobalContext().emitter;if(!emitter){emitter=new Emitter;getGlobalContext().emitter=emitter}return emitter}__name(getGlobalEmitter,"getGlobalEmitter");var messages=new Emitter;function lazyListener(emitter,listenerKey){const name=Math.round(Math.random()*100);var events=[];var lazyResolve;const incoming=__name((key,obj)=>{let ev={key,obj};events.push(ev);lazyResolve&&lazyResolve()},"incoming");if(listenerKey){if(emitter.on){emitter.on(listenerKey,obj=>{incoming(listenerKey,obj)})}else if(emitter.addEventListener){emitter.addEventListener(listenerKey,obj=>{incoming(listenerKey,obj)})}else{log2.error(name,"Cannot listen to key")}}else{if(emitter.onAny){emitter.onAny((key,obj)=>{incoming(key,obj)})}else{log2.error(name,"cannot listen to all for",emitter)}}let on=__name((key,skipUnmatched=true)=>{return new Promise((resolve,reject)=>{if(!key){key=listenerKey;if(!key){if(events.length){key=events[0].key}}}lazyResolve=__name(()=>{while(events.length>0){let ev=events.shift();if(ev.key===key){lazyResolve=void 0;resolve(ev.obj)}else{if(skipUnmatched){log2.warn(name,`Unhandled event ${key} with value: ${ev.obj}`);continue}reject(`Expected ${key}, but found ${ev.key} with value=${ev.obj}`);log2.error(name,`Unhandled event ${key} with value: ${ev.obj}`)}break}},"lazyResolve");lazyResolve()})},"on");return on}__name(lazyListener,"lazyListener");var{encode:encode62,decode:decode62}=useBase(62);var{encode:encode32}=useBase(32);var _crypto=getGlobal().crypto||getGlobal()["msCrypto"];function randomUint8Array(length=16){let rands=new Uint8Array(length);if(_crypto&&_crypto["getRandomValues"]){_crypto["getRandomValues"](rands)}else{for(let i=0;i<length;i++){rands[i]=Math.floor(Math.random()*256)}}return rands}__name(randomUint8Array,"randomUint8Array");function uuid(){return encode62(randomUint8Array(16),22)}__name(uuid,"uuid");function uuidB32(){return encode32(randomUint8Array(16),26)}__name(uuidB32,"uuidB32");var _unameCounters={};function uname(name="id"){if(_unameCounters[name]==null){_unameCounters[name]=0}return`${name}-${(_unameCounters[name]++).toString()}`}__name(uname,"uname");var ReferenceDateInMS=16e11;function longToByteArray(long){var byteArray=new Uint8Array([0,0,0,0,0,0]);const bytes=byteArray.length-1;for(var index=0;index<byteArray.length;index++){var byte=long&255;byteArray[bytes-index]=byte;long=(long-byte)/256}return byteArray}__name(longToByteArray,"longToByteArray");function suidBytes(){const ms=getTimestamp()-ReferenceDateInMS;return new Uint8Array([...longToByteArray(ms),...randomUint8Array(10)])}__name(suidBytes,"suidBytes");function suid(){return encode62(suidBytes(),22)}__name(suid,"suid");function suidDate(id){return suidBytesDate(decode62(id,16))}__name(suidDate,"suidDate");function suidBytesDate(id){return new Date(ReferenceDateInMS+id.slice(0,6).reduce((acc,byte)=>{return acc*256+byte},0))}__name(suidBytesDate,"suidBytesDate");var log3=Logger("zeed:channel");var Channel=class extends Emitter{close(){}};__name(Channel,"Channel");var LocalChannel=class extends Channel{postMessage(data){var _a;(_a=this.other)==null?void 0:_a.emit("message",{data:cloneObject(data),origin:"local",lastEventId:uuid()})}};__name(LocalChannel,"LocalChannel");var CommandChannel=class{};__name(CommandChannel,"CommandChannel");function createMutex(){let token=true;return(fn,elseFn)=>{let executed=false;if(token){token=false;try{fn();executed=true}finally{token=true}}else if(elseFn!==void 0){elseFn()}return executed}}__name(createMutex,"createMutex");var log4=Logger("zeed:queue");var SerialQueue=class{constructor(opt={}){this.queue=[];this.isPaused=false;this.waitToFinish=[];const{name=uname("queue"),logLevel}=opt;this.name=name;this.log=Logger(`zeed:queue:${name}`);this.log.level=logLevel!=null?logLevel:LogLevel.off}async performNext(){this.log(`performNext, queue.length =`,this.queue.length);if(this.currentTask!=null){this.log(`performNext => skip while another task is running`);return}if(this.isPaused){this.log(`performNext => skip while is paused`);return}while(this.currentTask==null&&!this.isPaused){let info=this.queue.shift();this.log(`performNext => ${info==null?void 0:info.name}`);if(info==null){break}const{name,task,resolve}=info;this.currentTask=task();let result=void 0;try{this.log.info(`start task ${name}`);result=await this.currentTask;this.log(`finished task ${name} with result =`,result)}catch(err){log4.warn("Error performing task",err)}resolve(result);this.currentTask=void 0}while(this.waitToFinish.length>0){this.waitToFinish.shift()()}}async enqueue(task,opt={}){const{immediate:immediate2=false,name=uname(this.name)}=opt;if(immediate2){this.log.info(`immediate execution ${name}`);return await task()}this.log(`enqueue ${name}`);return new Promise(resolve=>{this.queue.push({name,task,resolve});this.performNext()})}async enqueueReentrant(task,opt={}){return this.enqueue(task,{immediate:this.currentTask!=null,name:opt.name})}async cancelAll(unblock=true){this.log(`cancelAll`);let resolver=this.queue.map(task=>task.resolve);this.queue=[];resolver.forEach(r=>r(void 0));await this.wait()}async pause(){this.log(`pause`);this.isPaused=true;await this.wait()}resume(){this.log(`resume`);this.isPaused=false;this.performNext()}async wait(){this.log(`wait`);if(this.currentTask==null&&(this.queue.length===0||this.isPaused)){return}return new Promise(resolve=>{this.waitToFinish.push(resolve)})}};__name(SerialQueue,"SerialQueue");var log5=Logger("zeed:memstorage");var MemStorage=class{constructor(opt={}){this.store={};this.pretty=false;var _a,_b;this.objectToString=(_a=opt.objectToString)!=null?_a:data=>{return this.pretty?JSON.stringify(data,null,2):JSON.stringify(data)};this.objectFromString=(_b=opt.objectFromString)!=null?_b:data=>{try{return JSON.parse(data)}catch(err){log5.warn(`MemStorage parse error '${err}' in`,data)}}}setItem(key,value){const data=this.objectToString(value);this.store[key]=data}getItem(key){if(this.store.hasOwnProperty(key)){let value=this.store[key];return this.objectFromString(value)}}removeItem(key){delete this.store[key]}clear(){this.store={}}allKeys(){return Object.keys(this.store)}};__name(MemStorage,"MemStorage");export{csv,useBase,encodeBase16,decodeBase16,encodeBase32,decodeBase32,encodeBase58,decodeBase58,encodeBase62,decodeBase62,toCamelCase,stringToBoolean,stringToInteger,stringToFloat,valueToBoolean,valueToInteger,valueToFloat,valueToString,toFloat,toInt,toString,toBool,stringify,formatMessages,renderMessages,parseOrderby,composeOrderby,cmp,sortedOrderby,startSortWeight,endSortWeight,moveSortWeight,sortedItems,size,last,empty,cloneObject,escapeHTML,unescapeHTML,linkifyPlainText,toHumanReadableUrl,escapeRegExp,toValidFilename,arrayUnique,arrayMinus,arrayUnion,arrayFlatten,arrayIntersection,arraySymmetricDifference,arrayRemoveElement,arraySetElement,arrayFilterInPlace,arrayToggleInPlace,arrayEmptyInPlace,arraySorted,arraySortedNumbers,arrayIsEqual,arrayShuffleInPlace,arrayShuffle,arrayShuffleForce,arrayRandomElement,getStackLlocationList,getSourceLocation,sleep,immediate,timeoutReached,timeout,timoutError,isTimeout,tryTimeout,waitOn,isPromise,promisify,Emitter,getGlobalEmitter,messages,lazyListener,uuid,uuidB32,uname,suidBytes,suid,suidDate,suidBytesDate,Channel,LocalChannel,CommandChannel,createMutex,SerialQueue,MemStorage};
|
|
3
|
-
//# sourceMappingURL=chunk-NHGGF4FJ.js.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../src/common/csv.ts", "../src/common/data/basex.ts", "../src/common/data/camelcase.ts", "../src/common/data/convert.ts", "../src/common/data/orderby.ts", "../src/common/data/sortable.ts", "../src/common/data/utils.ts", "../src/common/data/html.ts", "../src/common/data/url.ts", "../src/common/data/regexp.ts", "../src/common/data/path.ts", "../src/common/data/array.ts", "../src/common/log-util.ts", "../src/common/promise.ts", "../src/common/msg/emitter.ts", "../src/common/uuid.ts", "../src/common/msg/channel.ts", "../src/common/mutex.ts", "../src/common/queue.ts", "../src/common/storage/memstorage.ts"],
|
|
4
|
-
"sourcesContent": ["/*\n csv-express\n Forked and modified by John J Czaplewski <jczaplew@gmail.com>\n Copyright 2011 Seiya Konno <nulltask@gmail.com>\n MIT Licensed\n\n https://github.com/jczaplew/csv-express/blob/master/lib/csv-express.js\n */\n\n// Configurable settings\nconst separator = \",\"\nconst preventCast = false\nconst ignoreNullOrUndefined = true\n\n// Stricter parseFloat to support hexadecimal strings from\n// https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/parseFloat#A_stricter_parse_function\nfunction filterFloat(value: string) {\n if (/^([-+])?([0-9]+(\\.[0-9]+)?|Infinity)$/.test(value)) {\n return Number(value)\n }\n return NaN\n}\n\nfunction escape(field: any) {\n if (ignoreNullOrUndefined && field == undefined) {\n return \"\"\n }\n if (preventCast) {\n return '=\"' + String(field).replace(/\"/g, '\"\"') + '\"'\n }\n if (!isNaN(filterFloat(field)) && isFinite(field)) {\n return parseFloat(field)\n }\n return '\"' + String(field).replace(/\"/g, '\"\"') + '\"'\n}\n\nexport function csv(data: any[], headerRow: string[]): string {\n let body = \"\"\n\n // Append the header row to the response if requested\n if (headerRow) {\n body = headerRow.join(separator) + \"\\r\\n\"\n }\n\n // Convert the data to a CSV-like structure\n for (let i = 0; i < data.length; i++) {\n body += data[i].map(escape).join(separator) + \"\\r\\n\"\n }\n\n return body\n}\n", "// Originial code at https://github.com/cryptocoinjs/base-x/blob/master/ts_src/index.ts\n//\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\n\nimport { Logger } from \"../log\"\n\nconst log = Logger(\"zeed:basex\")\n\nconst alphabets = {\n \"2\": \"01\",\n \"8\": \"01234567\",\n \"11\": \"0123456789a\",\n \"16\": \"0123456789abcdef\",\n \"32\": \"0123456789ABCDEFGHJKMNPQRSTVWXYZ\",\n // \"32\": \"ybndrfg8ejkmcpqxot1uwisza345h769\", // (z-base-32)\n \"36\": \"0123456789abcdefghijklmnopqrstuvwxyz\",\n \"58\": \"123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz\",\n // \"62\": \"0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\", // The sort order is not kept!\n \"62\": \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\",\n \"64\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",\n \"66\": \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_.!~\",\n}\n\nexport function useBase(alphaOrBase: string | number) {\n let ALPHABET: string\n if (typeof alphaOrBase === \"string\") {\n ALPHABET = alphaOrBase\n } else {\n // @ts-ignore\n ALPHABET = alphabets[alphaOrBase.toString()]\n if (ALPHABET == null) throw new Error(`Unknown base ${alphaOrBase}`)\n }\n\n if (ALPHABET.length >= 255) throw new TypeError(\"Alphabet too long\")\n\n const BASE_MAP = new Uint8Array(256)\n for (let j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n\n for (let i = 0; i < ALPHABET.length; i++) {\n const x = ALPHABET.charAt(i)\n const xc = x.charCodeAt(0)\n\n if (BASE_MAP[xc] !== 255) throw new TypeError(x + \" is ambiguous\")\n BASE_MAP[xc] = i\n }\n\n const BASE = ALPHABET.length\n const LEADER = ALPHABET.charAt(0)\n const FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n const iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n\n function encode(\n source: number[] | Uint8Array | ArrayBuffer,\n padToLength: number = -1\n ): string {\n let data: number[] | Uint8Array\n if (source instanceof ArrayBuffer) {\n data = new Uint8Array(source)\n } else {\n data = source\n }\n\n if (data.length === 0) return \"\"\n\n // Skip & count leading zeroes.\n let length = 0\n let pbegin = 0\n const pend = data.length\n\n while (pbegin !== pend && data[pbegin] === 0) pbegin++\n\n // Allocate enough space in big-endian base58 representation.\n const size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n const dataEncoded = new Uint8Array(size)\n\n // Process the bytes.\n while (pbegin !== pend) {\n let carry = data[pbegin]\n\n // Apply \"dataEncoded = dataEncoded * 256 + ch\".\n let i = 0\n for (\n let it1 = size - 1;\n (carry !== 0 || i < length) && it1 !== -1;\n it1--, i++\n ) {\n carry += (256 * dataEncoded[it1]) >>> 0\n dataEncoded[it1] = carry % BASE >>> 0\n carry = (carry / BASE) >>> 0\n }\n\n if (carry !== 0) {\n log.warn(\"Non-zero carry\", data, padToLength, i, size)\n throw new Error(\"Non-zero carry\")\n }\n\n length = i\n pbegin++\n }\n\n let it2 = size - length\n\n // Skip leading zeroes\n while (it2 !== size && dataEncoded[it2] === 0) {\n it2++\n }\n\n // Translate the result into a string.\n let str = \"\"\n for (; it2 < size; ++it2) str += ALPHABET.charAt(dataEncoded[it2])\n\n if (padToLength > 0) {\n // const pad = Math.ceil(source.length * iFACTOR)\n return str.padStart(padToLength, LEADER)\n }\n return str\n }\n\n function decode(source: string, padToLength: number = -1): Uint8Array {\n if (typeof source !== \"string\") throw new TypeError(\"Expected String\")\n if (source.length === 0) return new Uint8Array()\n\n // Normalize\n source = source.replace(/\\s+/gi, \"\")\n\n let psz = 0\n let length = 0\n\n while (source[psz] === LEADER) {\n psz++\n }\n\n // Allocate enough space in big-endian base256 representation.\n const size = ((source.length - psz) * FACTOR + 1) >>> 0 // log(58) / log(256), rounded up.\n const dataDecoded = new Uint8Array(size)\n\n // Process the characters.\n while (source[psz]) {\n let carry = BASE_MAP[source.charCodeAt(psz)]\n\n // Invalid character\n if (carry === 255)\n throw new Error(`Unsupported character \"${source[psz]}\"`)\n\n let i = 0\n for (\n let it3 = size - 1;\n (carry !== 0 || i < length) && it3 !== -1;\n it3--, i++\n ) {\n carry += (BASE * dataDecoded[it3]) >>> 0\n dataDecoded[it3] = carry % 256 >>> 0\n carry = (carry / 256) >>> 0\n }\n\n if (carry !== 0) throw new Error(\"Non-zero carry\")\n length = i\n psz++\n }\n\n // Skip leading zeroes\n let it4 = size - length\n while (it4 !== size && dataDecoded[it4] === 0) {\n it4++\n }\n\n if (padToLength > 0) {\n return new Uint8Array([\n ...new Uint8Array(padToLength - dataDecoded.length + it4),\n ...dataDecoded.slice(it4),\n ])\n }\n\n return dataDecoded.slice(it4)\n }\n\n return {\n encode,\n decode,\n }\n}\n\n// Shortcuts\n\nexport const { encode: encodeBase16, decode: decodeBase16 } = useBase(16)\nexport const { encode: encodeBase32, decode: decodeBase32 } = useBase(32)\nexport const { encode: encodeBase58, decode: decodeBase58 } = useBase(58)\nexport const { encode: encodeBase62, decode: decodeBase62 } = useBase(62)\n", "/*\nhttps://matthiashager.com/converting-snake-case-to-camel-case-object-keys-with-javascript\n\ncamelCase\nsnake_case\nkebab-case\nPascalCase // I won't be using this here, but it's only one small step further if you want to use it\n*/\n\nexport const toCamelCase = (s: string) => {\n // if only capital letters, convert to lower case\n if (s.length > 0) {\n if (/^[A-Z0-9_\\-\\ ]*$/g.test(s)) {\n s = s.toLowerCase()\n }\n s = s\n // strip trailing non chars\n .replace(/^[-_\\ ]+/gi, \"\")\n .replace(/[-_\\ ]+$/gi, \"\")\n // strip separators and upper case first char\n .replace(/[-_\\ ]+([a-z0-9])/gi, ($0, $1) => $1.toUpperCase())\n // lower case first char\n s = s[0].toLowerCase() + s.substring(1)\n }\n return s\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nconst TRUE_VALUES_LIST = [\"1\", \"true\", \"yes\", \"y\", \"on\"]\n\nexport function stringToBoolean(value?: string, defaultValue = false): boolean {\n if (value == null || typeof value !== \"string\") return defaultValue\n return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())\n}\n\nexport function stringToInteger(value?: string, defaultValue = 0): number {\n if (value == null || typeof value !== \"string\") return defaultValue\n return parseInt(value.trim(), 10) ?? defaultValue\n}\n\nexport function stringToFloat(value?: string, defaultValue = 0.0): number {\n if (value == null || typeof value !== \"string\") return defaultValue\n return parseFloat(value.trim()) ?? defaultValue\n}\n\nexport function valueToBoolean(value?: any, defaultValue = false): boolean {\n if (value == null) return defaultValue\n if (typeof value === \"boolean\") return value\n if (typeof value === \"number\") return value !== 0\n return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())\n}\n\nexport function valueToInteger(value?: any, defaultValue = 0): number {\n if (value == null) return defaultValue\n if (typeof value === \"boolean\") return value ? 1 : 0\n if (typeof value === \"number\") return Math.floor(value)\n return parseInt(String(value).trim(), 10) ?? defaultValue\n}\n\nexport function valueToFloat(value?: any, defaultValue = 0.0): number {\n if (value == null) return defaultValue\n if (typeof value === \"boolean\") return value ? 1 : 0\n if (typeof value === \"number\") return Math.floor(value)\n return parseFloat(String(value).trim()) ?? defaultValue\n}\n\nexport function valueToString(value?: any, defaultValue = \"\"): string {\n if (value == null) return defaultValue\n // if (value == \"\") return defaultValue // ???\n return String(value) ?? defaultValue\n}\n\n// todo: toDate, toTimestamp, toData(value, base=64)\n\n// export function mapToObject<T>(map: Map<string, T>): { [key: string]: T } {\n// return Object.fromEntries(map)\n// }\n\n// export function objectToMap<T>(obj: { [key: string]: T }): Map<string, T> {\n// return new Map(Object.entries(obj))\n// }\n\n// Shortcuts\n\nexport const toFloat = valueToFloat\nexport const toInt = valueToInteger\nexport const toString = valueToString\nexport const toBool = valueToBoolean\n\n// Strings\n\n// From https://github.com/moll/json-stringify-safe License ISC\n\ntype EntryProcessor = (key: string, value: any) => any\n\nfunction serializer(replacer: EntryProcessor, cycleReplacer?: EntryProcessor) {\n var stack: any[] = [],\n keys: string[] = []\n\n if (cycleReplacer == null)\n cycleReplacer = function (key, value) {\n if (stack[0] === value) return \"[Circular ~]\"\n return (\n \"[Circular ~.\" + keys.slice(0, stack.indexOf(value)).join(\".\") + \"]\"\n )\n }\n\n return function (this: EntryProcessor, key: string, value: any): any {\n if (stack.length > 0) {\n var thisPos = stack.indexOf(this)\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n ~thisPos ? keys.splice(thisPos, Infinity, key) : keys.push(key)\n if (~stack.indexOf(value)) value = cycleReplacer?.call(this, key, value)\n } else stack.push(value)\n\n return replacer == null ? value : replacer.call(this, key, value)\n }\n}\n\nexport function stringify(\n obj: any,\n replacer?: EntryProcessor | null,\n spaces?: string | number | null,\n cycleReplacer?: EntryProcessor\n): string {\n // @ts-ignore\n return JSON.stringify(obj, serializer(replacer, cycleReplacer), spaces)\n}\nexport type RenderMessagesOptions = {\n trace?: boolean // = true\n pretty?: boolean // = true\n}\n\nexport function formatMessages(\n messages: any[],\n opt: RenderMessagesOptions = {}\n): any[] {\n const { trace = true, pretty = true } = opt\n return messages.map((obj) => {\n if (obj && typeof obj === \"object\") {\n if (obj instanceof Error) {\n if (!trace) {\n return `${obj.name || \"Error\"}: ${obj.message}`\n }\n return `${obj.name || \"Error\"}: ${obj.message}\\n${obj.stack}`\n }\n return pretty ? stringify(obj, null, 2) : stringify(obj)\n }\n return String(obj)\n })\n}\n\nexport function renderMessages(\n messages: any[],\n opt: RenderMessagesOptions = {}\n): string {\n return formatMessages(messages, opt).join(\" \")\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport function parseOrderby(value: string = \"\"): {\n field: string\n orderby: string\n asc: boolean\n desc: boolean\n} {\n let [field = \"\", orderby = \"asc\"] = value.split(\" \")\n orderby = orderby.toLowerCase()\n return {\n field,\n orderby,\n asc: orderby !== \"desc\",\n desc: orderby === \"desc\",\n }\n}\n\nexport function composeOrderby(field: string, asc: boolean = true): string {\n return `${field} ${asc ? \"asc\" : \"desc\"}`\n}\n\n// Classic compare function with direction flag\nexport function cmp(a: any, b: any, asc: boolean = true): number {\n const aa = a || 0\n const bb = b || 0\n return aa > bb ? (asc ? 1 : -1) : aa < bb ? (asc ? -1 : 1) : 0\n}\n\nexport function sortedOrderby<T>(values: T[], ...orderby: string[]): T[] {\n if (orderby.length > 0) {\n let orderByList = orderby.map(parseOrderby)\n // let { field, asc } = parseOrderby(orderby)\n //if (field != null && typeof field === \"string\") {\n // let bigger = asc ? 1 : -1\n // let smaller = asc ? -1 : 1\n let sortValues = Array.from(values)\n sortValues.sort((a: any, b: any): number => {\n for (let { field, asc } of orderByList) {\n const result = cmp(a[field], b[field], asc)\n if (result !== 0) return result\n }\n return 0\n // const aa = a[field] || 0\n // const bb = b[field] || 0\n // return aa > bb ? bigger : aa < bb ? smaller : 0\n })\n return sortValues\n }\n return values\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Get a sort_weight suitable for adding to top of list\n// Original idea https://holtwick.de/en/blog/smart-table-reordering\n\nexport interface SortableItem {\n sort_weight: number\n}\n\nexport function startSortWeight(items: SortableItem[]): number {\n return (\n items.reduce((acc, item) => Math.min(acc, item.sort_weight || 0), 0) -\n 1 -\n Math.random()\n )\n}\n\n// Get a sort_weight suitable for adding to end of list\nexport function endSortWeight(items: SortableItem[]): number {\n return (\n items.reduce((acc, item) => Math.max(acc, item.sort_weight || 0), 0) +\n 1 +\n Math.random()\n )\n}\n\n// The real magic\nexport function moveSortWeight(\n newIndex: number,\n oldIndex: number,\n items: SortableItem[]\n): number {\n let count = items.length\n\n const moveLower = newIndex < oldIndex\n if (count <= 0 || newIndex >= count - 1) {\n return endSortWeight(items)\n }\n if (newIndex <= 0) {\n return startSortWeight(items)\n }\n\n // Make sure they are sorted\n items = sortedItems([...items])\n\n const step = moveLower ? -1 : 0\n const lower = items[newIndex + step].sort_weight || 0\n const upper = items[newIndex + step + 1].sort_weight || 0\n const distance = upper - lower\n if (distance === 0) {\n // Ugly list with no presets, make the best guess\n if (moveLower) {\n return startSortWeight(items)\n }\n return endSortWeight(items)\n }\n const middle = lower + distance / 2\n const fuzzy = distance * 0.01 * (Math.random() - 0.5) // 1% fuzziness to avoid conflicts\n return middle + fuzzy\n}\n\nexport function sortedItems<T extends SortableItem>(items: T[]): T[] {\n items.sort((a, b) => (a.sort_weight || 0) - (b.sort_weight || 0))\n return items\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport function size(obj: any) {\n if (obj != null) {\n if (obj.size != null) {\n return obj.size\n }\n if (obj.length != null) {\n return obj.length\n }\n return Object.keys(obj).length\n }\n return 0\n}\n\nexport function last<T>(array?: T[]): T | undefined {\n return array != null && array.length > 0 ? array[array.length - 1] : undefined\n}\n\n// True for [], {}, \"\", Map(), Set() and all primitives\nexport function empty(value: any): boolean {\n try {\n if (value != null) {\n if (Array.isArray(value)) {\n return value.length <= 0\n } else if (typeof value === \"string\") {\n return value.length <= 0\n } else if (value?.size != null) {\n return value.size <= 0\n } else {\n return Object.keys(value).length <= 0\n }\n }\n } catch (err) {\n console.error(\"Failed to check if empty for\", value, err)\n }\n return true\n}\n\nexport function cloneObject<T>(obj: T): T {\n return JSON.parse(JSON.stringify(obj))\n}\n\n// export function timestampToDate(ts: number): Date {\n// return new Date(+ts * 1000)\n// }\n\n// export function dateToTimestamp(date: Date): number {\n// return date.getTime() / 1000\n// }\n", "export const escapeHTML = (s: string): string =>\n s\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/'/g, \"'\")\n .replace(/\"/g, \""\")\n\nexport const unescapeHTML = (s: string): string =>\n s\n .replace(/</gi, \"<\")\n .replace(/>/gi, \">\")\n .replace(/"/gi, '\"')\n .replace(/'/gi, \"'\")\n .replace(/&/gi, \"&\")\n", "// https://mathiasbynens.be/demo/url-regex\n// https://gist.github.com/dperini/729294\n\nimport { escapeHTML } from \"./html\"\n\nconst findURL =\n /((?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z0-9\\u00a1-\\uffff][a-z0-9\\u00a1-\\uffff_-]{0,62})?[a-z0-9\\u00a1-\\uffff]\\.)+(?:[a-z\\u00a1-\\uffff]{2,}\\.?))(?::\\d{2,5})?(?:[/?#]\\S*)?)/gim\n\nexport function linkifyPlainText(text: string): string {\n return text\n .split(findURL)\n .map((part, i) => {\n const escapedPart = escapeHTML(part)\n return i % 2\n ? `<a target=\"_blank\" href=\"${escapedPart}\">${toHumanReadableUrl(\n escapedPart\n )}</a>`\n : escapedPart\n })\n .join(\"\")\n}\n\nexport function toHumanReadableUrl(url: string): string {\n return url.replace(/^https?:\\/\\/(?:www\\.)/, \"\")\n}\n", "const rxEscape = /[\\-\\[\\]\\/{}()*+?.^$|]/g\n\nexport function escapeRegExp(value: RegExp | string): string {\n if (!value) return \"\"\n if (value instanceof RegExp) {\n return value.source\n }\n return value.replace(rxEscape, \"\\\\$&\")\n}\n", "// https://github.com/sindresorhus/filenamify/blob/main/filenamify.js\n\nconst MAX_FILENAME_LENGTH = 100\n\nconst reControlChars = /[\\u0000-\\u001F\\u0080-\\u009F]/g // eslint-disable-line no-control-regex\nconst reRelativePath = /^\\.+/\nconst reTrailingPeriods = /\\.+$/\n\nfunction filenameReservedRegex() {\n return /[<>:\"/\\\\|?*\\u0000-\\u001F]/g\n}\n\nfunction windowsReservedNameRegex() {\n return /^(con|prn|aux|nul|com\\d|lpt\\d)$/i\n}\n\nexport function toValidFilename(string: string) {\n if (typeof string !== \"string\") {\n throw new TypeError(\"Expected a string\")\n }\n\n const replacement = \"_\"\n\n if (\n filenameReservedRegex().test(replacement) &&\n reControlChars.test(replacement)\n ) {\n throw new Error(\n \"Replacement string cannot contain reserved filename characters\"\n )\n }\n\n string = string\n .replace(filenameReservedRegex(), replacement)\n .replace(reControlChars, replacement)\n .replace(reRelativePath, replacement)\n .replace(reTrailingPeriods, \"\")\n\n string = windowsReservedNameRegex().test(string)\n ? string + replacement\n : string\n\n return string.slice(0, MAX_FILENAME_LENGTH)\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { cmp } from \"./orderby\"\n\nexport function arrayUnique<T>(x: T[]): T[] {\n return x.filter((n: any, index: any) => x.indexOf(n) === index)\n}\n\nexport function arrayMinus<T>(x: T[], y: T[]): T[] {\n return arrayUnique(x.filter((n: any) => !y.includes(n)))\n}\n\nexport function arrayUnion<T>(...a: T[][]): T[] {\n return arrayUnique(a.reduce((acc: T[] = [], value) => acc.concat(value), []))\n}\n\n/** `[1,[2,3]]` becomes `[1,2,3]` */\nexport function arrayFlatten<T>(list: (T | T[])[]): T[] {\n return list.reduce(\n (a: any, b: any) => a.concat(Array.isArray(b) ? arrayFlatten(b) : b),\n []\n ) as T[]\n}\n\nexport function arrayIntersection<T>(x: T[], y: T[]): T[] {\n return arrayUnique<T>(x).filter((n: any) => y.includes(n))\n}\n\nexport function arraySymmetricDifference<T>(x: T[], y: T[]): T[] {\n return arrayMinus(arrayUnion(x, y), arrayIntersection(x, y))\n // return arrayUnique(x.filter(n => !y.includes(n)).concat(y.filter(n => !x.includes(n))))\n}\n\n// export function arrayApply<T>(fn: any, a: T[]): T[] {\n// return a.reduce(fn, [])\n// }\n\nexport function arrayRemoveElement<T>(arr: T[], el: T): T[] {\n if (arr && Array.isArray(arr)) {\n let index\n while ((index = arr.indexOf(el)) !== -1) {\n // log(\"arrayRemoveElement remove\", index, el)\n arr.splice(index, 1)\n }\n // log(\"arrayRemoveElement result\", arr)\n return arr\n }\n // log(\"arrayRemoveElement no array\", arr, el)\n return []\n}\n\n/** Only have it once in the set */\nexport function arraySetElement<T>(arr: T[], el: T): T[] {\n if (!arr.includes(el)) arr.push(el)\n return arr\n}\n\n// via https://stackoverflow.com/a/49587869 and Erwin\nexport function arrayFilterInPlace<T>(array: T[], fn: (el: T) => boolean): T[] {\n array.splice(0, array.length, ...array.filter(fn))\n return array\n}\n\n// via https://stackoverflow.com/a/49587869 and Erwin\nexport function arrayToggleInPlace<T>(array: T[], el: T): T[] {\n const index = array.findIndex((e) => e === el)\n if (index >= 0) array.splice(index, 1)\n else array.push(el)\n return array\n}\n\nexport function arrayEmptyInPlace<T>(array: T[]): T[] {\n array.splice(0, array.length)\n return array\n}\n\nexport function arraySorted<T>(\n arr: Iterable<T> | ArrayLike<T>,\n cond: ((a: T, b: T) => number) | undefined = cmp\n): T[] {\n let copy = Array.from(arr)\n copy.sort(cond)\n return copy as T[]\n}\n\nexport function arraySortedNumbers(arr: number[]): number[] {\n return arraySorted(arr, (l: number, r: number) => l - r)\n}\n\nexport function arrayIsEqual<T>(array1: T[], array2: T[]): boolean {\n return (\n array1.length === array2.length &&\n array1.every((value, index) => value === array2[index])\n )\n}\n\nexport function arrayShuffleInPlace<T>(array: T[]): T[] {\n array.sort(() => (Math.random() > 0.5 ? 1 : -1))\n\n // Alternative https://github.com/sindresorhus/array-shuffle/blob/main/index.js#L8\n // for (let index = array.length - 1; index > 0; index--) {\n // \tconst newIndex = Math.floor(Math.random() * (index + 1));\n // \t[array[index], array[newIndex]] = [array[newIndex], array[index]];\n // }\n\n return array\n}\n\nexport function arrayShuffle<T>(array: T[]): T[] {\n return arrayShuffleInPlace(Array.from(array))\n}\n\n/** Randomly shuffle the order of the array's elements. Force to have a different order if array has more than one element. */\nexport function arrayShuffleForce<T>(array: T[]): T[] {\n while (array.length > 1) {\n const copy = Array.from(array)\n arrayShuffleInPlace(copy)\n if (!arrayIsEqual(array, copy)) return copy\n }\n return array\n}\n\nexport function arrayRandomElement<T>(array: T[]): T {\n return array[Math.floor(Math.random() * array.length)]\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\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(/^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)/)\n if (m) {\n let line = m[3] || m[2]\n if (line.endsWith(\")\")) line = line.slice(0, -1)\n return line\n }\n })\n ?.filter((v) => v != null) || []\n )\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 if (line.includes(\"/node_modules/\")) {\n return \"\"\n }\n\n const fileURL = \"file://\"\n if (line.startsWith(fileURL)) {\n return line.substr(fileURL.length)\n }\n\n const cwd = process.cwd()\n if (cwd && line.startsWith(cwd)) {\n return line.substr(cwd.length + 1)\n }\n\n const home = process.env[\"HOME\"]\n if (home && line.startsWith(home)) {\n line = line.substr(home.length + 1)\n }\n }\n return line || \"\"\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { Logger } from \"./log\"\n\nconst { warn } = Logger(\"zeed:promise\")\n\n/** Sleep for `milliSeconds`. Example 1s: `await sleep(1000)` */\nexport async function sleep(milliSeconds: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, milliSeconds))\n}\n\nexport async function immediate(): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, 0))\n}\n\nexport const timeoutReached = Symbol(\"timeout\")\n\ntype Unwrap<T> = T extends Promise<infer U>\n ? U\n : T extends (...args: any) => Promise<infer U>\n ? U\n : T extends (...args: any) => infer U\n ? U\n : T\n\nexport async function timeout<T>(\n promise: Promise<T>,\n milliSeconds: number,\n timeoutValue = timeoutReached\n): Promise<T | typeof timeoutValue> {\n return new Promise(async (resolve, reject) => {\n let done = false\n\n const timeout = setTimeout(() => {\n done = true\n resolve(timeoutValue)\n }, milliSeconds)\n\n try {\n let result = await promise\n clearTimeout(timeout)\n if (!done) resolve(result)\n } catch (err) {\n clearTimeout(timeout)\n if (!done) reject(err)\n }\n })\n}\n\nexport const timoutError = new Error(\"Timeout reached\")\n\nexport function isTimeout(value: any): boolean {\n return value === timeoutReached || value === timoutError\n}\n\nexport async function tryTimeout<T>(\n promise: Promise<T>,\n milliSeconds: number\n): Promise<T | undefined> {\n if (milliSeconds <= 0) {\n return await promise\n }\n return new Promise(async (resolve, reject) => {\n let done = false\n\n const timeout = setTimeout(() => {\n done = true\n reject(timoutError)\n }, milliSeconds)\n\n try {\n let result = await promise\n clearTimeout(timeout)\n if (!done) resolve(result)\n } catch (err) {\n clearTimeout(timeout)\n if (!done) reject(err)\n }\n })\n}\n\n/** Wait for `event` on `obj` to emit. Resolve with result or reject on `timeout` */\nexport function waitOn(\n obj: any,\n event: string,\n timeoutMS: number = 1000\n): Promise<any> {\n return new Promise((resolve, reject) => {\n let fn = (value: any) => {\n if (timer) {\n clearTimeout(timer)\n done()\n resolve(value)\n }\n }\n\n let done = () => {\n timer = null\n if (obj.off) {\n obj.off(event, fn)\n } else if (obj.removeEventListener) {\n obj.removeEventListener(event, fn)\n } else {\n warn(\"No remove listener method found for\", obj, event)\n }\n }\n\n let timer: any = setTimeout(() => {\n done()\n reject(new Error(`Did not response in time`))\n }, timeoutMS)\n\n if (obj.on) {\n obj.on(event, fn)\n } else if (obj.addEventListener) {\n obj.addEventListener(event, fn)\n } else {\n warn(\"No listener method found for\", obj)\n }\n })\n}\n\nexport function isPromise<T>(value: Promise<T> | T): value is Promise<T> {\n return Boolean(\n value &&\n (value instanceof Promise ||\n // @ts-ignore\n typeof value.then === \"function\")\n )\n}\n\n/** This is exactly what Prose.resolve(x) is supposed to be: return a Promise no matter what type x is */\nexport function promisify<T>(value: Promise<T> | T): Promise<T> {\n // return isPromise(value) ? value : Promise.resolve(value)\n return Promise.resolve(value)\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { getGlobalContext } from \"../global\"\nimport { Logger } from \"../log\"\nimport { promisify } from \"../promise\"\n\nconst log = Logger(\"zeed:emitter\")\n\nexport type EmitterHandler = (...objs: any[]) => void\nexport type EmitterAllHandler<T = string> = (key: T, ...objs: any[]) => void\n\n// For magic see https://www.npmjs.com/package/tiny-typed-emitter / License MIT\n// https://stackoverflow.com/a/61609010/140927\n// https://basarat.gitbook.io/typescript/main-1/typed-event\n// https://github.com/andywer/typed-emitter#extending-an-emitter\n\n// TODO: Allow symbols? https://github.com/sindresorhus/emittery\n\nexport declare type ListenerSignature<L> = {\n [E in keyof L]: (...args: any[]) => any\n}\n\nexport declare type DefaultListener = {\n [k: string]: (...args: any[]) => any\n}\n\nexport class Emitter<L extends ListenerSignature<L> = DefaultListener> {\n subscribers: any = {}\n subscribersOnAny: any[] = []\n\n public async emit<U extends keyof L>(\n event: U,\n ...args: Parameters<L[U]>\n ): Promise<boolean> {\n let ok = false\n try {\n let subscribers = (this.subscribers[event] || []) as EmitterHandler[]\n // log.debug(\"emit\", this?.constructor?.name, event, ...args, subscribers)\n\n this.subscribersOnAny.forEach((fn) => fn(event, ...args))\n\n if (subscribers.length > 0) {\n let all = subscribers.map((fn) => {\n try {\n return promisify(fn(...args))\n } catch (err) {\n log.warn(\"emit warning:\", err)\n }\n })\n ok = true\n await Promise.all(all)\n }\n } catch (err) {\n log.error(\"emit exception\", err)\n }\n return ok\n }\n\n public onAny(fn: EmitterHandler) {\n this.subscribersOnAny.push(fn)\n }\n\n public on<U extends keyof L>(event: U, listener: L[U]) {\n let subscribers = (this.subscribers[event] || []) as EmitterHandler[]\n subscribers.push(listener)\n this.subscribers[event] = subscribers\n return {\n cleanup: () => {\n this.off(event, listener)\n },\n }\n }\n\n public once<U extends keyof L>(event: U, listener: L[U]) {\n const onceListener = async (...args: any[]) => {\n this.off(event, onceListener as any)\n return await promisify(listener(...args))\n }\n this.on(event, onceListener as any)\n }\n\n public off<U extends keyof L>(event: U, listener: L[U]): this {\n // log(\"off\", key)\n this.subscribers[event] = (this.subscribers[event] || []).filter(\n (f: any) => listener && f !== listener\n )\n return this\n }\n\n public removeAllListeners(event?: keyof L): this {\n this.subscribers = {}\n return this\n }\n}\n\ndeclare global {\n interface ZeedGlobalContext {\n emitter?: Emitter\n }\n\n interface ZeedGlobalEmitter {}\n}\n\n/** Global emitter that will listen even across modules */\nexport function getGlobalEmitter(): Emitter<ZeedGlobalEmitter> {\n let emitter = getGlobalContext().emitter\n if (!emitter) {\n emitter = new Emitter()\n getGlobalContext().emitter = emitter\n }\n return emitter\n}\n\n// This can be used as a global messaging port to connect loose\n// parts of your app\nexport const messages = new Emitter()\n\n// For debugging\n\ninterface LazyEvent {\n key: string\n obj: any\n}\n\nexport function lazyListener(\n emitter: any,\n listenerKey?: string\n): (key?: string, skipUnmatched?: boolean) => Promise<any> {\n const name = Math.round(Math.random() * 100)\n\n var events: LazyEvent[] = []\n var lazyResolve: (() => void) | undefined\n\n const incoming = (key: string, obj: any) => {\n let ev = { key, obj }\n // debug(name, \" lazy push\", ev)\n events.push(ev)\n lazyResolve && lazyResolve()\n }\n\n if (listenerKey) {\n if (emitter.on) {\n emitter.on(listenerKey, (obj: any) => {\n incoming(listenerKey, obj)\n })\n } else if (emitter.addEventListener) {\n emitter.addEventListener(listenerKey, (obj: any) => {\n incoming(listenerKey, obj)\n })\n } else {\n log.error(name, \"Cannot listen to key\")\n }\n } else {\n if (emitter.onAny) {\n emitter.onAny((key: string, obj: any) => {\n incoming(key, obj)\n })\n } else {\n log.error(name, \"cannot listen to all for\", emitter)\n }\n }\n\n let on = (key?: string, skipUnmatched: boolean = true): Promise<any> => {\n return new Promise((resolve, reject) => {\n if (!key) {\n key = listenerKey\n if (!key) {\n if (events.length) {\n // no key specified? just take the first one!\n key = events[0].key\n }\n }\n }\n // debug(name, \"lazy resolve on2\", key, skipUnmatched, events)\n lazyResolve = () => {\n // debug(name, \"lazy resolve\", key, listenerKey, events)\n while (events.length > 0) {\n let ev = <LazyEvent>events.shift()\n // debug(name, \" lazy analyze\", ev)\n if (ev.key === key) {\n lazyResolve = undefined\n resolve(ev.obj)\n } else {\n if (skipUnmatched) {\n log.warn(name, `Unhandled event ${key} with value: ${ev.obj}`)\n continue\n }\n reject(`Expected ${key}, but found ${ev.key} with value=${ev.obj}`)\n log.error(name, `Unhandled event ${key} with value: ${ev.obj}`)\n }\n break\n }\n }\n lazyResolve()\n })\n }\n\n return on\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { useBase } from \"./data/basex\"\nimport { getGlobal } from \"./platform\"\nimport { getTimestamp } from \"./time\"\n\nconst { encode: encode62, decode: decode62 } = useBase(62)\nconst { encode: encode32 } = useBase(32)\n\nconst _crypto = getGlobal().crypto || getGlobal()[\"msCrypto\"]\n\nfunction randomUint8Array(length = 16): Uint8Array {\n let rands = new Uint8Array(length)\n if (_crypto && _crypto[\"getRandomValues\"]) {\n _crypto[\"getRandomValues\"](rands)\n } else {\n for (let i = 0; i < length; i++) {\n rands[i] = Math.floor(Math.random() * 256)\n }\n }\n return rands\n}\n\n// function randomDigit(base = 32) {\n// if (_crypto && _crypto['getRandomValues']) {\n// let rands = new Uint8Array(1)\n// _crypto['getRandomValues'](rands)\n// return (rands[0] % base).toString(base)\n// }\n// return ((Math.random() * base) | 0).toString(base)\n// }\n\nexport function uuid(): string {\n return encode62(randomUint8Array(16), 22)\n}\n\nexport function uuidB32(): string {\n return encode32(randomUint8Array(16), 26)\n}\n\nlet _unameCounters: { [key: string]: number } = {}\n\nexport function uname(name: string = \"id\"): string {\n if (_unameCounters[name] == null) {\n _unameCounters[name] = 0\n }\n return `${name}-${(_unameCounters[name]++).toString()}`\n}\n\n// export function uuidv4() {\n// return String(1e7 + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, (c: any) =>\n// (\n// c ^\n// (crypto.getRandomValues(new Uint8Array(1))[0] & (15 >> (c / 4)))\n// ).toString(16)\n// )\n// }\n\n// https://github.com/segmentio/ksuid\n// https://pkg.go.dev/github.com/rsms/go-uuid\n\n/**\n * Sortable unique ID\n * Inspired by https://github.com/rsms/go-uuid\n *\n * Bytes 0-5: Current time in miliseconds from 2021-06-01T00:00:00Z\n * Bytes 6-15: Random\n */\n\n// 1622505600000 // new Date('2021-06-01T00:00:00Z').getTime()\nconst ReferenceDateInMS = 1600000000000\n\n// 6 bytes will stay valid until end of time: new Date(1622505600000 + 0xffffffffffff) === Date Sun Jan 01 10941 06:31:50 GMT+0100 (Central European Standard Time)\n\nfunction longToByteArray(long: number) {\n var byteArray = new Uint8Array([0, 0, 0, 0, 0, 0])\n const bytes = byteArray.length - 1\n for (var index = 0; index < byteArray.length; index++) {\n var byte = long & 0xff\n byteArray[bytes - index] = byte\n long = (long - byte) / 256\n }\n return byteArray\n}\n\nfunction byteArrayToLong(byteArray: number[]): number {\n var value = 0\n for (var i = byteArray.length - 1; i >= 0; i--) {\n value = value * 256 + byteArray[i]\n }\n return value\n}\n\nexport function suidBytes(): Uint8Array {\n const ms = getTimestamp() - ReferenceDateInMS\n return new Uint8Array([...longToByteArray(ms), ...randomUint8Array(10)])\n}\n\nexport function suid(): string {\n return encode62(suidBytes(), 22)\n}\n\nexport function suidDate(id: string): Date {\n return suidBytesDate(decode62(id, 16))\n}\n\nexport function suidBytesDate(id: Uint8Array): Date {\n return new Date(\n ReferenceDateInMS +\n id.slice(0, 6).reduce((acc, byte) => {\n return acc * 256 + byte\n }, 0)\n )\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { Logger } from \"../log\"\nimport { Emitter } from \"./emitter\"\nimport { cloneObject } from \"../data/utils\"\nimport { uuid } from \"../uuid\"\n\nconst log = Logger(\"zeed:channel\")\n\ntype Data = string | Uint8Array\n\n/** See http://developer.mozilla.org/en-US/docs/Web/API/MessageEvent */\nexport interface ChannelMessageEvent {\n data: any\n origin?: string\n lastEventId?: string\n}\n\n/**\n * Inspired by\n * http://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n * https://deno.com/deploy/docs/runtime-broadcast-channel\n * */\nexport abstract class Channel extends Emitter<{\n message(event: ChannelMessageEvent): void\n messageerror(event: ChannelMessageEvent): void\n}> {\n abstract postMessage(data: any): void\n close() {}\n}\n\n/** Very basic channel demonstrating local communication */\nexport class LocalChannel extends Channel {\n other?: LocalChannel\n\n postMessage(data: any) {\n this.other?.emit(\"message\", {\n data: cloneObject(data),\n origin: \"local\",\n lastEventId: uuid(),\n })\n }\n}\n\n/** Channel that requires */\nexport class CommandChannel {}\n\n// export class Channel {\n// _name = uname(this.constructor.name)\n// _channel?: ChannelTransport\n// // _subscriber\n\n// buffer: Data[] = []\n\n// constructor(channel?: SimpleChannel) {\n// if (channel) {\n// this.connect(channel)\n// }\n// }\n\n// _connectChannel() {\n// log(\"_connectChannel Channel\")\n// this.publishBuffered()\n// }\n\n// connect(channel: SimpleChannel) {\n// log.assert(channel, \"Channel missing\")\n// this._channel = channel\n// this._connectChannel()\n// }\n\n// publishBuffered() {\n// if (this.isConnected()) {\n// log(\"publishBuffered\", this._name)\n// this.buffer.forEach((data) => {\n// log(\"send buffered\", this._name, data)\n// this.send(data)\n// })\n// this.buffer = []\n// }\n// }\n\n// disconnect() {\n// // this._subscriber = undefined // ?\n// this._channel = undefined\n// }\n\n// isConnected() {\n// return this._channel != null\n// }\n\n// encode(obj: Json): Data {\n// return JSON.stringify(obj) // e.g. JSON.stringify\n// }\n\n// decode(obj: Data): Json {\n// return JSON.parse(obj as string) // e.g. JSON.parse\n// }\n\n// publish(obj: Json) {\n// const data = this.encode(obj)\n// if (this.isConnected()) {\n// this.send(data)\n// } else {\n// this.buffer.push(data)\n// }\n// }\n\n// subscribe(fn) {\n// this._subscriber = fn\n// }\n\n// receive(data: Data) {\n// log(\"receive\", this._name, data)\n// let obj = this.decode(data)\n// if (this._subscriber) {\n// this._subscriber(obj)\n// }\n// }\n\n// // Override this in a subclass!\n// send(data: Data) {\n// log(\"send\", this._name, data)\n// // this._channel.postMessage(payload)\n// this._channel.receive(data)\n// }\n// }\n\n// const HANDSHAKE_PING = \"__handshake__ping__\"\n// const HANDSHAKE_PONG = \"__handshake__pong__\"\n\n// export class HandshakeChannel extends Channel {\n// _handshake = false\n\n// isConnected(): boolean {\n// return this._handshake\n// }\n\n// _connectChannel() {\n// log(\"_connectChannel HandshakeChannel\", this._name)\n// // super._connectChannel()\n// this.send(HANDSHAKE_PING)\n// }\n\n// receive(data) {\n// log(\"receive\", this._name, data)\n// if (data === HANDSHAKE_PING) {\n// if (this._channel) {\n// this.send(HANDSHAKE_PONG)\n// this._handshake = true\n// this.publishBuffered()\n// }\n// } else if (data === HANDSHAKE_PONG) {\n// if (!this._handshake) {\n// this._handshake = true\n// this.publishBuffered()\n// }\n// } else {\n// super.receive(data)\n// }\n// }\n// }\n\n// export class PostChannel extends HandshakeChannel {\n// _connectChannel() {\n// this._channel.addEventListener(\"message\", (e: MessageEvent) =>\n// this.receive(e.data)\n// )\n// super._connectChannel()\n// }\n\n// send(data) {\n// log(\"send postChannel\", this._name, data)\n// this._channel.postMessage(data)\n// }\n\n// // Proxy?\n// // Heartbeat?\n// // Error and disconnect handling?\n// }\n\n// export class JSONPostChannel extends PostChannel {\n// encode(obj: Json): string {\n// return JSON.stringify(obj)\n// }\n\n// decode(obj: string): Json {\n// return JSON.parse(obj)\n// }\n// }\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nexport type Mutex = (fn: () => void, elseFn?: () => void) => boolean\n\nexport function createMutex(): Mutex {\n let token = true\n return (fn, elseFn) => {\n let executed = false\n if (token) {\n token = false\n try {\n fn()\n executed = true\n } finally {\n token = true\n }\n } else if (elseFn !== undefined) {\n elseFn()\n }\n return executed\n }\n}\n\n// export type Lock = ({lock: () => Promise<void>, unlock: () => void})\n\n// export function createLock() {\n// let lockCtr = []\n// return {\n// lock() {\n\n// },\n// unlock() {\n\n// }\n// }\n// }\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\n// Can learn from here https://github.com/sindresorhus/p-queue\n\nimport { LoggerInterface, LogLevel } from \"../common/log-base\"\nimport { Logger } from \"../common/log\"\nimport { uname } from \"./uuid\"\n\nconst log = Logger(\"zeed:queue\")\n\ntype QueueTaskResolver = any\ntype QueueTask<T = any> = () => Promise<T>\n\ninterface QueueTaskInfo {\n name: string\n task: QueueTask\n resolve: QueueTaskResolver\n}\n\n/** Guarentee serial execution of tasks. Able to wait, pause, resume and cancel all. */\nexport class SerialQueue {\n private queue: QueueTaskInfo[] = []\n\n private isPaused: boolean = false\n private waitToFinish: QueueTaskResolver[] = []\n\n private currentTask?: Promise<any>\n\n private log: LoggerInterface\n\n name: string\n\n constructor(opt: { name?: string; logLevel?: LogLevel } = {}) {\n const { name = uname(\"queue\"), logLevel } = opt\n\n this.name = name\n this.log = Logger(`zeed:queue:${name}`)\n this.log.level = logLevel ?? LogLevel.off\n }\n\n private async performNext() {\n this.log(`performNext, queue.length =`, this.queue.length)\n\n if (this.currentTask != null) {\n this.log(`performNext => skip while another task is running`)\n return\n }\n\n if (this.isPaused) {\n this.log(`performNext => skip while is paused`)\n return\n }\n\n while (this.currentTask == null && !this.isPaused) {\n let info = this.queue.shift()\n this.log(`performNext => ${info?.name}`)\n\n if (info == null) {\n break\n }\n\n const { name, task, resolve } = info\n this.currentTask = task()\n let result = undefined\n try {\n this.log.info(`start task ${name}`)\n result = await this.currentTask\n this.log(`finished task ${name} with result =`, result)\n } catch (err) {\n log.warn(\"Error performing task\", err)\n }\n\n resolve(result)\n this.currentTask = undefined\n }\n\n while (this.waitToFinish.length > 0) {\n this.waitToFinish.shift()()\n }\n }\n\n /** Enqueue task to be executed when all other tasks are done. Except `immediate = true`. */\n async enqueue<T>(\n task: QueueTask<T>,\n opt: { immediate?: boolean; name?: string } = {}\n ): Promise<T> {\n const { immediate = false, name = uname(this.name) } = opt\n if (immediate) {\n this.log.info(`immediate execution ${name}`)\n return await task()\n }\n this.log(`enqueue ${name}`)\n return new Promise((resolve) => {\n this.queue.push({\n name,\n task,\n resolve,\n })\n this.performNext()\n })\n }\n\n /** If a task is already performing, execute immediately. Otherwise enqueue as usual. */\n async enqueueReentrant<T>(\n task: QueueTask<T>,\n opt: { name?: string } = {}\n ): Promise<T> {\n return this.enqueue(task, {\n immediate: this.currentTask != null,\n name: opt.name,\n })\n }\n\n /** Remove all tasks from queue that are not yet executing. */\n async cancelAll(unblock = true) {\n this.log(`cancelAll`)\n let resolver = this.queue.map((task) => task.resolve)\n this.queue = []\n resolver.forEach((r) => r(undefined))\n await this.wait()\n }\n\n /** Pause execution after current task is finished. */\n async pause() {\n this.log(`pause`)\n this.isPaused = true\n await this.wait()\n }\n\n /** Resume paused queue. */\n resume() {\n this.log(`resume`)\n this.isPaused = false\n this.performNext()\n }\n\n /** Wait for all tasks to finish */\n async wait() {\n this.log(`wait`)\n if (\n this.currentTask == null &&\n (this.queue.length === 0 || this.isPaused)\n ) {\n return\n }\n return new Promise((resolve) => {\n this.waitToFinish.push(resolve)\n })\n }\n}\n", "// (C)opyright 2021-07-15 Dirk Holtwick, holtwick.it. All rights reserved.\n\nimport { Json } from \"../types\"\nimport { Logger } from \"../log\"\nimport { ObjectStorage } from \"../types\"\n\nconst log = Logger(\"zeed:memstorage\")\n\nexport interface MemStorageOptions {\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n}\n\nexport class MemStorage implements ObjectStorage {\n private store: { [key: string]: string } = {}\n private pretty: boolean = false\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n\n constructor(opt: MemStorageOptions = {}) {\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(`MemStorage parse error '${err}' in`, data)\n }\n })\n }\n\n setItem(key: string, value: Json): void {\n const data = this.objectToString(value)\n this.store[key] = data\n }\n\n getItem(key: string): Json | undefined {\n if (this.store.hasOwnProperty(key)) {\n let value = this.store[key]\n return this.objectFromString(value)\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n }\n\n clear(): void {\n this.store = {}\n }\n\n allKeys(): string[] {\n return Object.keys(this.store)\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|