@visulima/pail 1.1.3 → 1.1.4

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/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ ## @visulima/pail [1.1.4](https://github.com/visulima/visulima/compare/@visulima/pail@1.1.3...@visulima/pail@1.1.4) (2024-03-30)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * **pail:** fixed wrong function call on wrapConsole ([0ae24cf](https://github.com/visulima/visulima/commit/0ae24cf287723e1ca108846d4bef4377974f8ad9))
7
+
1
8
  ## @visulima/pail [1.1.3](https://github.com/visulima/visulima/compare/@visulima/pail@1.1.2...@visulima/pail@1.1.3) (2024-03-27)
2
9
 
3
10
 
@@ -0,0 +1,9 @@
1
+ import { a as a$1 } from './chunk-AFMDCM5W.js';
2
+ import { b, c as c$1, a } from './chunk-NF47XQ47.js';
3
+ import { configure } from 'safe-stable-stringify';
4
+
5
+ var L=class{log(e){let{context:r=[],message:t,type:o}=e;a$1(o.level)(t,...r);}};var v=s=>s===void 0?[]:Array.isArray(s)?s:[s];var x=(s,e)=>{let r={...s};return Object.keys(e).forEach(t=>{r[t]={...r[t],...e[t]};}),r};var E=(s,e)=>s.length>=e?s:s.padEnd(e);var C={badge:void 0,context:void 0,error:void 0,label:void 0,message:void 0,prefix:void 0,repeated:void 0,scope:void 0,suffix:void 0},y=class{timersMap;countMap;seqTimers;lastLog;logLevels;disabled;scopeName;types;longestLabel;processors;generalLogLevel;reporters;throttle;throttleMin;stringify;groups;startTimerMessage;endTimerMessage;rawReporter;constructor(e){this.throttle=e.throttle??1e3,this.throttleMin=e.throttleMin??5,this.stringify=configure({strict:!0}),this.startTimerMessage=e.messages?.timerStart??"Initialized timer...",this.endTimerMessage=e.messages?.timerEnd??"Timer run for:",this.types=x(b,e.types??{}),this.longestLabel=c$1(this.types),this.logLevels={...a,...e.logLevels},this.generalLogLevel=this._normalizeLogLevel(e.logLevel),this.reporters=new Set,this.processors=new Set,this.disabled=e.disabled??!1,this.scopeName=v(e.scope).filter(Boolean),this.timersMap=new Map,this.countMap=new Map,this.groups=[],this.seqTimers=new Set;for(let r in this.types)this[r]=this._logger.bind(this,r,!1);this.lastLog={},Array.isArray(e.reporters)&&this.registerReporters(e.reporters),this.rawReporter=this.extendReporter(e.rawReporter??new L),Array.isArray(e.processors)&&this.registerProcessors(e.processors);}wrapConsole(){for(let e in this.types)console["__"+e]||(console["__"+e]=console[e]),console[e]=this[e];}restoreConsole(){for(let e in this.types)console["__"+e]&&(console[e]=console["__"+e],delete console["__"+e]);}wrapException(){process.on("uncaughtException",e=>{this.error(e);}),process.on("unhandledRejection",e=>{this.error(e);});}disable(){this.disabled=!0;}enable(){this.disabled=!1;}isEnabled(){return !this.disabled}scope(...e){if(e.length===0)throw new Error("No scope name was defined.");return this.scopeName=e.flat(),this}unscope(){this.scopeName=[];}time(e="default"){this.seqTimers.has(e)?this._logger("warn",!1,{message:"Timer '"+e+"' already exists",prefix:e}):(this.seqTimers.add(e),this.timersMap.set(e,Date.now()),this._logger("start",!1,{message:this.startTimerMessage,prefix:e}));}timeLog(e,...r){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let t=Date.now()-this.timersMap.get(e);this._logger("info",!1,{context:r,message:t<1e3?t+" ms":(t/1e3).toFixed(2)+" s",prefix:e});}else this._logger("warn",!1,{context:r,message:"Timer not found",prefix:e});}timeEnd(e){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let r=Date.now()-this.timersMap.get(e);this.timersMap.delete(e),this._logger("stop",!1,{message:this.endTimerMessage+" "+(r<1e3?r+" ms":(r/1e3).toFixed(2)+" s"),prefix:e});}}group(e="console.group"){typeof window>"u"?console.group(e):this.groups.push(e);}groupEnd(){typeof window>"u"?console.groupEnd():this.groups.pop();}count(e="default"){let r=this.countMap.get(e)??0;this.countMap.set(e,r+1),this._logger("log",!1,{message:e+": "+(r+1),prefix:e});}countReset(e="default"){this.countMap.has(e)?this.countMap.delete(e):this._logger("warn",!1,{message:"Count for "+e+" does not exist",prefix:e});}clear(){console.clear();}raw(e,...r){this.disabled||this._logger("log",!0,{context:r,message:e});}extendReporter(e){return typeof e.setLoggerTypes=="function"&&e.setLoggerTypes(this.types),typeof e.setStringify=="function"&&e.setStringify(this.stringify),e}registerReporters(e){for(let r of e)this.reporters.add(this.extendReporter(r));}_report(e,r){if(r)this.rawReporter.log(Object.freeze(e));else for(let t of this.reporters)t.log(Object.freeze(e));}registerProcessors(e){for(let r of e)typeof r.setStringify=="function"&&r.setStringify(this.stringify),this.processors.add(r);}_normalizeLogLevel(e){return e&&this.logLevels[e]?e:"debug"}_buildMeta(e,r,...t){let o={...C};if(o.type={level:r.logLevel,name:e},o.groups=this.groups,o.scope=this.scopeName,o.date=new Date,t.length===1&&typeof t[0]=="object"&&t[0]!==null)if(t[0]instanceof Error)o.error=t[0];else if("message"in t[0]){let{context:i,message:d,prefix:f,suffix:n}=t[0];i&&(o.context=i),f&&(o.prefix=f),n&&(o.suffix=n),o.message=d;}else o.message=t[0];else t.length>1&&typeof t[0]=="string"?(o.message=t[0],o.context=t.slice(1)):o.message=t[0];return r.logLevel==="trace"&&(o.traceError=new Error("Trace")),r.badge&&(o.badge=E(r.badge,r.badge.length+1)),r.label&&(o.label=r.label),o}_logger(e,r,...t){if(this.disabled)return;let o=this._normalizeLogLevel(this.types[e].logLevel);if(this.logLevels[o]>=this.logLevels[this.generalLogLevel]){let i=this._buildMeta(e,this.types[e],...t),d=(n=!1)=>{let l=(this.lastLog.count||0)-this.throttleMin;if(this.lastLog.object&&l>0){let u={...this.lastLog.object};l>1&&(u.repeated=l),this._report(u,r),this.lastLog.count=1;}if(n){for(let u of this.processors)i={...u.process(i)};this.lastLog.object=i,this._report(i,r);}};clearTimeout(this.lastLog.timeout);let f=this.lastLog.time&&i.date?new Date(i.date).getTime()-this.lastLog.time.getTime():0;if(this.lastLog.time=new Date(i.date),f<this.throttle)try{let n=JSON.stringify([i.label,i.scope,i.type,i.message,i.prefix,i.suffix,i.context]),l=this.lastLog.serialized===n;if(this.lastLog.serialized=n,l&&(this.lastLog.count=(this.lastLog.count||0)+1,this.lastLog.count>this.throttleMin)){this.lastLog.timeout=setTimeout(d,this.throttle);return}}catch{}d(!0);}}},Y=y;var g=Symbol("circular-reference-tag"),m=Symbol("raw-error-ref"),M=Object.create({},{aggregateErrors:{enumerable:!0,value:void 0,writable:!0},cause:{enumerable:!0,value:void 0,writable:!0},code:{enumerable:!0,value:void 0,writable:!0},message:{enumerable:!0,value:void 0,writable:!0},name:{enumerable:!0,value:void 0,writable:!0},raw:{enumerable:!1,get(){return this[m]},set(s){this[m]=s;}},stack:{enumerable:!0,value:void 0,writable:!0}});Object.defineProperty(M,m,{value:{},writable:!0});var R=M;var c=(s,e={})=>{s[g]=void 0;let r=Object.create(R);r.name=Object.prototype.toString.call(s.constructor)==="[object Function]"?s.constructor.name:s.name,r.message=s.message,r.stack=s.stack,Array.isArray(s.errors)&&(r.aggregateErrors=s.errors.map(t=>c(t,e))),s.cause instanceof Error&&!Object.prototype.hasOwnProperty.call(s.cause,g)&&(r.cause=c(s.cause,e));for(let t in s)if(r[t]===void 0){let o=s[t];if(o instanceof Error)Object.prototype.hasOwnProperty.call(o,g)||(r[t]=c(o,e));else if(typeof o=="function")r[t]="[Function: "+(o.name||"anonymous");else try{r[t]=o;}catch{}}return delete s[g],r.raw=s,r};var S=class{_options;constructor(e={}){this._options={maxDepth:Number.POSITIVE_INFINITY,useToJSON:!0,...e};}process(e){return e.error&&(e.error=c(e.error,this._options)),e}};
6
+
7
+ export { y as a, Y as b, S as c };
8
+ //# sourceMappingURL=out.js.map
9
+ //# sourceMappingURL=chunk-7QFUDEFS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pail.browser.ts","../src/reporter/raw/raw.browser.ts","../src/util/arrayify.ts","../src/util/merge-types.ts","../src/util/pad-end.ts","../src/processor/error/error-proto.ts","../src/processor/error/error-with-cause-serializer.ts","../src/processor/error/error-processor.ts"],"names":["stringifyConfigure","RawReporter","meta","context","message","type","writeConsoleLogBasedOnLevel","arrayify","x","mergeTypes","standard","custom","types","padEnd","string_","targetLength","EMPTY_META","PailBrowserImpl","options","LOG_TYPES","getLongestLabel","EXTENDED_RFC_5424_LOG_LEVELS","error","name","label","data","span","current","arguments_","reporter","reporters","raw","processors","processor","level","typeName","prefix","suffix","messageObject","logLevel","resolveLog","newLog","repeated","lastMeta","diffTime","serializedLog","isSameLog","PailBrowser","seen","rawSymbol","errorProto","value","ErrorProto","errorWithCauseSerializer","protoError","error_","key","ErrorProcessor"],"mappings":"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","sourcesContent":["import type { stringify } from \"safe-stable-stringify\";\nimport { configure as stringifyConfigure } from \"safe-stable-stringify\";\n\nimport { EXTENDED_RFC_5424_LOG_LEVELS, LOG_TYPES } from \"./constants\";\nimport { RawReporter } from \"./reporter/raw/raw.browser\";\nimport type {\n ConstructorOptions,\n DefaultLogTypes,\n ExtendedRfc5424LogLevels,\n LiteralUnion,\n LoggerConfiguration,\n LoggerFunction,\n LoggerTypesAwareReporter,\n LoggerTypesConfig,\n Message,\n Meta,\n Primitive,\n Processor,\n Reporter,\n StringifyAwareProcessor,\n StringifyAwareReporter,\n} from \"./types\";\nimport { arrayify } from \"./util/arrayify\";\nimport { getLongestLabel } from \"./util/get-longest-label\";\nimport { mergeTypes } from \"./util/merge-types\";\nimport { padEnd } from \"./util/pad-end\";\n\nconst EMPTY_META = {\n badge: undefined,\n context: undefined,\n error: undefined,\n label: undefined,\n message: undefined,\n prefix: undefined,\n repeated: undefined,\n scope: undefined,\n suffix: undefined,\n};\n\nexport class PailBrowserImpl<T extends string = never, L extends string = never> {\n protected timersMap: Map<string, number>;\n\n protected countMap: Map<string, number>;\n\n protected seqTimers: Set<string>;\n\n protected readonly lastLog: {\n count?: number;\n object?: Meta<L>;\n serialized?: string;\n time?: Date;\n timeout?: ReturnType<typeof setTimeout>;\n };\n\n protected readonly logLevels: Record<string, number>;\n\n protected disabled: boolean;\n\n protected scopeName: string[];\n\n protected readonly types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n protected readonly longestLabel: string;\n\n protected readonly processors: Set<Processor<L>>;\n\n protected readonly generalLogLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>;\n\n protected reporters: Set<Reporter<L>>;\n\n protected readonly throttle: number;\n\n protected readonly throttleMin: number;\n\n protected readonly stringify: typeof stringify;\n\n protected groups: string[];\n\n protected readonly startTimerMessage: string;\n\n protected readonly endTimerMessage: string;\n\n protected rawReporter: Reporter<L>;\n\n public constructor(options: ConstructorOptions<T, L>) {\n this.throttle = options.throttle ?? 1000;\n this.throttleMin = options.throttleMin ?? 5;\n\n this.stringify = stringifyConfigure({\n strict: true,\n });\n\n this.startTimerMessage = options.messages?.timerStart ?? \"Initialized timer...\";\n this.endTimerMessage = options.messages?.timerEnd ?? \"Timer run for:\";\n this.types = mergeTypes<L, T>(LOG_TYPES, (options.types ?? {}) as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>);\n this.longestLabel = getLongestLabel<L, T>(this.types);\n\n this.logLevels = { ...EXTENDED_RFC_5424_LOG_LEVELS, ...options.logLevels };\n this.generalLogLevel = this._normalizeLogLevel(options.logLevel);\n\n this.reporters = new Set();\n this.processors = new Set();\n\n this.disabled = options.disabled ?? false;\n\n this.scopeName = arrayify(options.scope).filter(Boolean) as string[];\n\n this.timersMap = new Map();\n this.countMap = new Map();\n\n this.groups = [];\n\n this.seqTimers = new Set();\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax,guard-for-in\n for (const type in this.types) {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line security/detect-object-injection\n this[type] = this._logger.bind(this, type as T, false);\n }\n\n // Track of last log\n this.lastLog = {};\n\n if (Array.isArray(options.reporters)) {\n this.registerReporters(options.reporters);\n }\n\n this.rawReporter = this.extendReporter(options.rawReporter ?? new RawReporter<L>());\n\n if (Array.isArray(options.processors)) {\n this.registerProcessors(options.processors);\n }\n }\n\n public wrapConsole(): void {\n // eslint-disable-next-line guard-for-in,no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Backup original value\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!(console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[\"__\" + type] = (console as any)[type];\n }\n // Override\n // @TODO: Fix typings\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (this as unknown as PailBrowserImpl<T, L>)[type as keyof PailBrowserImpl<T, L>];\n }\n }\n\n public restoreConsole(): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Restore if backup is available\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (console as any)[\"__\" + type];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-dynamic-delete\n delete (console as any)[\"__\" + type];\n }\n }\n }\n\n public wrapException(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"uncaughtException\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"unhandledRejection\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n }\n\n /**\n * Disables logging\n */\n public disable(): void {\n this.disabled = true;\n }\n\n /**\n * Enables logging\n */\n public enable(): void {\n this.disabled = false;\n }\n\n public isEnabled(): boolean {\n return !this.disabled;\n }\n\n public scope<N extends string = T>(...name: string[]): PailBrowserType<N, L> {\n if (name.length === 0) {\n throw new Error(\"No scope name was defined.\");\n }\n\n this.scopeName = name.flat();\n\n return this as unknown as PailBrowserType<N, L>;\n }\n\n public unscope(): void {\n this.scopeName = [];\n }\n\n public time(label = \"default\"): void {\n if (this.seqTimers.has(label)) {\n this._logger(\"warn\", false, {\n message: \"Timer '\" + label + \"' already exists\",\n prefix: label,\n });\n } else {\n this.seqTimers.add(label);\n this.timersMap.set(label, Date.now());\n\n this._logger(\"start\", false, {\n message: this.startTimerMessage,\n prefix: label,\n });\n }\n }\n\n public timeLog(label?: string, ...data: unknown[]): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this._logger(\"info\", false, {\n context: data,\n message: span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\",\n prefix: label,\n });\n } else {\n this._logger(\"warn\", false, {\n context: data,\n message: \"Timer not found\",\n prefix: label,\n });\n }\n }\n\n public timeEnd(label?: string): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this.timersMap.delete(label);\n\n this._logger(\"stop\", false, {\n message: this.endTimerMessage + \" \" + (span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\"),\n prefix: label,\n });\n }\n }\n\n public group(label = \"console.group\"): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.group(label);\n } else {\n this.groups.push(label);\n }\n }\n\n public groupEnd(): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.groupEnd();\n } else {\n this.groups.pop();\n }\n }\n\n public count(label = \"default\"): void {\n const current = this.countMap.get(label) ?? 0;\n\n this.countMap.set(label, current + 1);\n\n this._logger(\"log\", false, {\n message: label + \": \" + (current + 1),\n prefix: label,\n });\n }\n\n public countReset(label = \"default\"): void {\n if (this.countMap.has(label)) {\n this.countMap.delete(label);\n } else {\n this._logger(\"warn\", false, {\n message: \"Count for \" + label + \" does not exist\",\n prefix: label,\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n public clear(): void {\n // eslint-disable-next-line no-console\n console.clear();\n }\n\n public raw(message: string, ...arguments_: unknown[]): void {\n if (this.disabled) {\n return;\n }\n\n this._logger(\"log\", true, {\n context: arguments_,\n message,\n });\n }\n\n protected extendReporter(reporter: Reporter<L>): Reporter<L> {\n if (typeof (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes === \"function\") {\n (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes(this.types);\n }\n\n if (typeof (reporter as StringifyAwareReporter<L>).setStringify === \"function\") {\n (reporter as StringifyAwareReporter<L>).setStringify(this.stringify);\n }\n\n return reporter;\n }\n\n protected registerReporters(reporters: Reporter<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of reporters) {\n this.reporters.add(this.extendReporter(reporter));\n }\n }\n\n private _report(meta: Meta<L>, raw: boolean): void {\n if (raw) {\n this.rawReporter.log(Object.freeze(meta));\n } else {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of this.reporters) {\n reporter.log(Object.freeze(meta));\n }\n }\n }\n\n private registerProcessors(processors: Processor<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of processors) {\n if (typeof (processor as StringifyAwareProcessor<L>).setStringify === \"function\") {\n (processor as StringifyAwareProcessor<L>).setStringify(this.stringify);\n }\n\n this.processors.add(processor as Processor<L>);\n }\n }\n\n private _normalizeLogLevel(level: LiteralUnion<ExtendedRfc5424LogLevels, L> | undefined): LiteralUnion<ExtendedRfc5424LogLevels, L> {\n // eslint-disable-next-line security/detect-object-injection\n return level && this.logLevels[level] ? level : \"debug\";\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _buildMeta(typeName: string, type: Partial<LoggerConfiguration<L>>, ...arguments_: any[]): Meta<L> {\n const meta = { ...EMPTY_META } as Meta<L>;\n\n meta.type = {\n level: type.logLevel as LiteralUnion<ExtendedRfc5424LogLevels, L>,\n name: typeName,\n };\n\n meta.groups = this.groups;\n meta.scope = this.scopeName;\n meta.date = new Date();\n\n if (arguments_.length === 1 && typeof arguments_[0] === \"object\" && arguments_[0] !== null) {\n if (arguments_[0] instanceof Error) {\n // eslint-disable-next-line prefer-destructuring\n meta.error = arguments_[0];\n } else if (\"message\" in arguments_[0]) {\n const { context, message, prefix, suffix } = arguments_[0] as Message;\n\n if (context) {\n meta.context = context;\n }\n\n if (prefix) {\n meta.prefix = prefix;\n }\n\n if (suffix) {\n meta.suffix = suffix;\n }\n\n meta.message = message;\n } else {\n meta.message = arguments_[0] as Primitive | ReadonlyArray<unknown> | Record<PropertyKey, unknown>;\n }\n } else if (arguments_.length > 1 && typeof arguments_[0] === \"string\") {\n meta.message = arguments_[0] as string;\n meta.context = arguments_.slice(1);\n } else {\n // eslint-disable-next-line prefer-destructuring\n meta.message = arguments_[0];\n }\n\n if (type.logLevel === \"trace\") {\n meta.traceError = new Error(\"Trace\");\n }\n\n if (type.badge) {\n meta.badge = padEnd(type.badge, type.badge.length + 1);\n }\n\n if (type.label) {\n meta.label = type.label;\n }\n\n return meta;\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _logger(type: LiteralUnion<DefaultLogTypes, T>, raw: boolean, ...messageObject: any[]): void {\n if (this.disabled) {\n return;\n }\n\n // eslint-disable-next-line security/detect-object-injection\n const logLevel = this._normalizeLogLevel(this.types[type].logLevel);\n\n // eslint-disable-next-line security/detect-object-injection\n if ((this.logLevels[logLevel] as number) >= (this.logLevels[this.generalLogLevel] as number)) {\n // eslint-disable-next-line security/detect-object-injection\n let meta = this._buildMeta(type, this.types[type], ...messageObject);\n\n /**\n * @param newLog false if the throttle expired and we don't want to log a duplicate\n */\n const resolveLog = (newLog = false) => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n const repeated = (this.lastLog.count || 0) - this.throttleMin;\n\n if (this.lastLog.object && repeated > 0) {\n const lastMeta = { ...this.lastLog.object };\n\n if (repeated > 1) {\n lastMeta.repeated = repeated;\n }\n\n this._report(lastMeta, raw);\n\n this.lastLog.count = 1;\n }\n\n if (newLog) {\n // Apply global processors\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of this.processors) {\n meta = { ...processor.process(meta) };\n }\n\n this.lastLog.object = meta;\n\n this._report(meta, raw);\n }\n };\n\n clearTimeout(this.lastLog.timeout);\n\n const diffTime = this.lastLog.time && meta.date ? new Date(meta.date as Date | string).getTime() - this.lastLog.time.getTime() : 0;\n\n this.lastLog.time = new Date(meta.date as Date | string);\n\n if (diffTime < this.throttle) {\n try {\n const serializedLog = JSON.stringify([meta.label, meta.scope, meta.type, meta.message, meta.prefix, meta.suffix, meta.context]);\n const isSameLog = this.lastLog.serialized === serializedLog;\n\n this.lastLog.serialized = serializedLog;\n\n if (isSameLog) {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.lastLog.count = (this.lastLog.count || 0) + 1;\n\n if (this.lastLog.count > this.throttleMin) {\n // Auto-resolve when throttle is timed out\n this.lastLog.timeout = setTimeout(resolveLog, this.throttle);\n\n return; // SPAM!\n }\n }\n } catch {\n // Circular References\n }\n }\n\n resolveLog(true);\n }\n }\n}\n\nexport type PailBrowserType<T extends string = never, L extends string = never> = PailBrowserImpl<T, L> &\n Record<DefaultLogTypes, LoggerFunction> &\n Record<T, LoggerFunction> &\n (new<TC extends string = never, LC extends string = never>(options?: ConstructorOptions<TC, LC>) => PailBrowserType<TC, LC>);\n\nexport type PailConstructor<T extends string = never, L extends string = never> = new (options?: ConstructorOptions<T, L>) => PailBrowserType<T, L>;\n\nexport const PailBrowser = PailBrowserImpl as unknown as PailBrowserType;\n","import type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { writeConsoleLogBasedOnLevel } from \"../../util/write-console-log\";\n\nexport class RawReporter<L extends string = never> implements Reporter<L> {\n // eslint-disable-next-line class-methods-use-this\n public log(meta: ReadonlyMeta<L>): void {\n const { context = [], message, type } = meta;\n\n const consoleLogFunction = writeConsoleLogBasedOnLevel(type.level);\n\n consoleLogFunction(message, ...context);\n }\n}\n","export const arrayify = <T>(x: T | T[]): T[] => {\n if (x === undefined) {\n return [] as T[];\n }\n\n return Array.isArray(x) ? x : ([x] as T[]);\n};\n","import type { DefaultLoggerTypes, DefaultLogTypes, LiteralUnion, LoggerTypesConfig } from \"../types\";\n\nexport const mergeTypes = <L extends string, T extends string>(\n standard: DefaultLoggerTypes<L>,\n custom: LoggerTypesConfig<T, L>,\n): LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L> => {\n const types = { ...standard } as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n Object.keys(custom).forEach((type) => {\n types[type as T] = { ...types[type as T], ...custom[type as T] };\n });\n\n return types;\n};\n","export const padEnd = (string_: string, targetLength: number): string => {\n if (string_.length >= targetLength) {\n return string_;\n }\n\n return string_.padEnd(targetLength);\n};\n","// eslint-disable-next-line import/exports-last\nexport const seen = Symbol(\"circular-reference-tag\");\n\n// eslint-disable-next-line import/exports-last,import/no-unused-modules\nexport const rawSymbol = Symbol(\"raw-error-ref\");\n\nconst errorProto = Object.create(\n {},\n {\n aggregateErrors: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n cause: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n code: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n message: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n name: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n raw: {\n enumerable: false,\n get() {\n // eslint-disable-next-line security/detect-object-injection\n return this[rawSymbol];\n },\n set(value) {\n // eslint-disable-next-line security/detect-object-injection\n this[rawSymbol] = value;\n },\n },\n stack: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n },\n) as SerializedError;\n\nObject.defineProperty(errorProto, rawSymbol, {\n value: {},\n writable: true,\n});\n\nexport const ErrorProto = errorProto;\n\nexport type SerializedError<ErrorType = Error> = Record<PropertyKey, unknown> & {\n aggregateErrors?: SerializedError<ErrorType>[];\n cause?: unknown;\n code?: string;\n message: string;\n name: string;\n raw?: ErrorType;\n stack?: string;\n};\n","import type { SerializedError } from \"./error-proto\";\nimport { ErrorProto, seen } from \"./error-proto\";\n\ntype CauseError = Error & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cause: any;\n};\n\ntype Options = {\n readonly maxDepth?: number;\n readonly useToJSON?: boolean;\n};\n\n/**\n * Serialize an `Error` object into a plain object.\n *\n * - Non-error values are passed through.\n * - Custom properties are preserved.\n * - Buffer properties are replaced with `[object Buffer]`.\n * - Circular references are handled.\n * - If the input object has a `.toJSON()` method, then it's called instead of serializing the object's properties.\n * - It's up to `.toJSON()` implementation to handle circular references and enumerability of the properties.\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport const errorWithCauseSerializer = (error: AggregateError | Error, options: Options = {}): SerializedError => {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line no-param-reassign\n error[seen as keyof Error] = undefined; // tag to prevent re-looking at this\n\n const protoError = Object.create(ErrorProto as object) as SerializedError;\n\n protoError.name = Object.prototype.toString.call(error.constructor) === \"[object Function]\" ? error.constructor.name : error.name;\n protoError.message = error.message;\n protoError.stack = error.stack;\n\n if (Array.isArray((error as AggregateError).errors)) {\n protoError.aggregateErrors = (error as AggregateError).errors.map((error_: AggregateError | Error) => errorWithCauseSerializer(error_, options));\n }\n\n // Handle aggregate errors\n if ((error as CauseError).cause instanceof Error && !Object.prototype.hasOwnProperty.call((error as CauseError).cause, seen as PropertyKey)) {\n protoError.cause = errorWithCauseSerializer((error as CauseError).cause, options);\n }\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const key in error) {\n // eslint-disable-next-line security/detect-object-injection\n if (protoError[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value = error[key as keyof Error] as any;\n\n if (value instanceof Error) {\n if (!Object.prototype.hasOwnProperty.call(value, seen as PropertyKey)) {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = errorWithCauseSerializer(value, options);\n }\n } else if (typeof value === \"function\") {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = \"[Function: \" + (value.name || \"anonymous\");\n } else {\n // Gracefully handle non-configurable errors like `DOMException`.\n try {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = value;\n } catch {\n /* empty */\n }\n }\n }\n }\n\n // eslint-disable-next-line no-param-reassign,@typescript-eslint/no-dynamic-delete\n delete error[seen as unknown as keyof Error]; // clean up tag in case err is serialized again later\n\n protoError.raw = error;\n\n return protoError;\n};\n","import type { Meta, Processor } from \"../../types\";\nimport type { SerializedError } from \"./error-proto\";\nimport { errorWithCauseSerializer } from \"./error-with-cause-serializer\";\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace VisulimaPail {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface CustomMeta<L> {\n error: SerializedError | undefined;\n }\n }\n}\n\nexport class ErrorProcessor<L extends string = never> implements Processor<L> {\n private readonly _options: { maxDepth: number; useToJSON: boolean };\n\n public constructor(options: { maxDepth?: number; useToJSON?: boolean } = {}) {\n this._options = {\n maxDepth: Number.POSITIVE_INFINITY,\n useToJSON: true,\n ...options,\n };\n }\n\n public process(meta: Meta<L>): Meta<L> {\n if (meta.error) {\n // eslint-disable-next-line no-param-reassign\n meta.error = errorWithCauseSerializer(meta.error, this._options);\n }\n\n return meta;\n }\n}\n"]}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ var chunkN2UPJYJR_cjs = require('./chunk-N2UPJYJR.cjs');
4
+ var chunkQINSQ6TU_cjs = require('./chunk-QINSQ6TU.cjs');
5
+ var safeStableStringify = require('safe-stable-stringify');
6
+
7
+ var u=class{log(e){let{context:r=[],message:t,type:o}=e;chunkN2UPJYJR_cjs.a(o.level)(t,...r);}};var w=s=>s===void 0?[]:Array.isArray(s)?s:[s];var v=(s,e)=>{let r={...s};return Object.keys(e).forEach(t=>{r[t]={...r[t],...e[t]};}),r};var x=(s,e)=>s.length>=e?s:s.padEnd(e);var P={badge:void 0,context:void 0,error:void 0,label:void 0,message:void 0,prefix:void 0,repeated:void 0,scope:void 0,suffix:void 0},L=class{timersMap;countMap;seqTimers;lastLog;logLevels;disabled;scopeName;types;longestLabel;processors;generalLogLevel;reporters;throttle;throttleMin;stringify;groups;startTimerMessage;endTimerMessage;rawReporter;constructor(e){this.throttle=e.throttle??1e3,this.throttleMin=e.throttleMin??5,this.stringify=safeStableStringify.configure({strict:!0}),this.startTimerMessage=e.messages?.timerStart??"Initialized timer...",this.endTimerMessage=e.messages?.timerEnd??"Timer run for:",this.types=v(chunkQINSQ6TU_cjs.b,e.types??{}),this.longestLabel=chunkQINSQ6TU_cjs.c(this.types),this.logLevels={...chunkQINSQ6TU_cjs.a,...e.logLevels},this.generalLogLevel=this._normalizeLogLevel(e.logLevel),this.reporters=new Set,this.processors=new Set,this.disabled=e.disabled??!1,this.scopeName=w(e.scope).filter(Boolean),this.timersMap=new Map,this.countMap=new Map,this.groups=[],this.seqTimers=new Set;for(let r in this.types)this[r]=this._logger.bind(this,r,!1);this.lastLog={},Array.isArray(e.reporters)&&this.registerReporters(e.reporters),this.rawReporter=this.extendReporter(e.rawReporter??new u),Array.isArray(e.processors)&&this.registerProcessors(e.processors);}wrapConsole(){for(let e in this.types)console["__"+e]||(console["__"+e]=console[e]),console[e]=this[e];}restoreConsole(){for(let e in this.types)console["__"+e]&&(console[e]=console["__"+e],delete console["__"+e]);}wrapException(){process.on("uncaughtException",e=>{this.error(e);}),process.on("unhandledRejection",e=>{this.error(e);});}disable(){this.disabled=!0;}enable(){this.disabled=!1;}isEnabled(){return !this.disabled}scope(...e){if(e.length===0)throw new Error("No scope name was defined.");return this.scopeName=e.flat(),this}unscope(){this.scopeName=[];}time(e="default"){this.seqTimers.has(e)?this._logger("warn",!1,{message:"Timer '"+e+"' already exists",prefix:e}):(this.seqTimers.add(e),this.timersMap.set(e,Date.now()),this._logger("start",!1,{message:this.startTimerMessage,prefix:e}));}timeLog(e,...r){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let t=Date.now()-this.timersMap.get(e);this._logger("info",!1,{context:r,message:t<1e3?t+" ms":(t/1e3).toFixed(2)+" s",prefix:e});}else this._logger("warn",!1,{context:r,message:"Timer not found",prefix:e});}timeEnd(e){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let r=Date.now()-this.timersMap.get(e);this.timersMap.delete(e),this._logger("stop",!1,{message:this.endTimerMessage+" "+(r<1e3?r+" ms":(r/1e3).toFixed(2)+" s"),prefix:e});}}group(e="console.group"){typeof window>"u"?console.group(e):this.groups.push(e);}groupEnd(){typeof window>"u"?console.groupEnd():this.groups.pop();}count(e="default"){let r=this.countMap.get(e)??0;this.countMap.set(e,r+1),this._logger("log",!1,{message:e+": "+(r+1),prefix:e});}countReset(e="default"){this.countMap.has(e)?this.countMap.delete(e):this._logger("warn",!1,{message:"Count for "+e+" does not exist",prefix:e});}clear(){console.clear();}raw(e,...r){this.disabled||this._logger("log",!0,{context:r,message:e});}extendReporter(e){return typeof e.setLoggerTypes=="function"&&e.setLoggerTypes(this.types),typeof e.setStringify=="function"&&e.setStringify(this.stringify),e}registerReporters(e){for(let r of e)this.reporters.add(this.extendReporter(r));}_report(e,r){if(r)this.rawReporter.log(Object.freeze(e));else for(let t of this.reporters)t.log(Object.freeze(e));}registerProcessors(e){for(let r of e)typeof r.setStringify=="function"&&r.setStringify(this.stringify),this.processors.add(r);}_normalizeLogLevel(e){return e&&this.logLevels[e]?e:"debug"}_buildMeta(e,r,...t){let o={...P};if(o.type={level:r.logLevel,name:e},o.groups=this.groups,o.scope=this.scopeName,o.date=new Date,t.length===1&&typeof t[0]=="object"&&t[0]!==null)if(t[0]instanceof Error)o.error=t[0];else if("message"in t[0]){let{context:i,message:c,prefix:d,suffix:n}=t[0];i&&(o.context=i),d&&(o.prefix=d),n&&(o.suffix=n),o.message=c;}else o.message=t[0];else t.length>1&&typeof t[0]=="string"?(o.message=t[0],o.context=t.slice(1)):o.message=t[0];return r.logLevel==="trace"&&(o.traceError=new Error("Trace")),r.badge&&(o.badge=x(r.badge,r.badge.length+1)),r.label&&(o.label=r.label),o}_logger(e,r,...t){if(this.disabled)return;let o=this._normalizeLogLevel(this.types[e].logLevel);if(this.logLevels[o]>=this.logLevels[this.generalLogLevel]){let i=this._buildMeta(e,this.types[e],...t),c=(n=!1)=>{let p=(this.lastLog.count||0)-this.throttleMin;if(this.lastLog.object&&p>0){let f={...this.lastLog.object};p>1&&(f.repeated=p),this._report(f,r),this.lastLog.count=1;}if(n){for(let f of this.processors)i={...f.process(i)};this.lastLog.object=i,this._report(i,r);}};clearTimeout(this.lastLog.timeout);let d=this.lastLog.time&&i.date?new Date(i.date).getTime()-this.lastLog.time.getTime():0;if(this.lastLog.time=new Date(i.date),d<this.throttle)try{let n=JSON.stringify([i.label,i.scope,i.type,i.message,i.prefix,i.suffix,i.context]),p=this.lastLog.serialized===n;if(this.lastLog.serialized=n,p&&(this.lastLog.count=(this.lastLog.count||0)+1,this.lastLog.count>this.throttleMin)){this.lastLog.timeout=setTimeout(c,this.throttle);return}}catch{}c(!0);}}},V=L;var l=Symbol("circular-reference-tag"),y=Symbol("raw-error-ref"),E=Object.create({},{aggregateErrors:{enumerable:!0,value:void 0,writable:!0},cause:{enumerable:!0,value:void 0,writable:!0},code:{enumerable:!0,value:void 0,writable:!0},message:{enumerable:!0,value:void 0,writable:!0},name:{enumerable:!0,value:void 0,writable:!0},raw:{enumerable:!1,get(){return this[y]},set(s){this[y]=s;}},stack:{enumerable:!0,value:void 0,writable:!0}});Object.defineProperty(E,y,{value:{},writable:!0});var M=E;var g=(s,e={})=>{s[l]=void 0;let r=Object.create(M);r.name=Object.prototype.toString.call(s.constructor)==="[object Function]"?s.constructor.name:s.name,r.message=s.message,r.stack=s.stack,Array.isArray(s.errors)&&(r.aggregateErrors=s.errors.map(t=>g(t,e))),s.cause instanceof Error&&!Object.prototype.hasOwnProperty.call(s.cause,l)&&(r.cause=g(s.cause,e));for(let t in s)if(r[t]===void 0){let o=s[t];if(o instanceof Error)Object.prototype.hasOwnProperty.call(o,l)||(r[t]=g(o,e));else if(typeof o=="function")r[t]="[Function: "+(o.name||"anonymous");else try{r[t]=o;}catch{}}return delete s[l],r.raw=s,r};var R=class{_options;constructor(e={}){this._options={maxDepth:Number.POSITIVE_INFINITY,useToJSON:!0,...e};}process(e){return e.error&&(e.error=g(e.error,this._options)),e}};
8
+
9
+ exports.a = L;
10
+ exports.b = V;
11
+ exports.c = R;
12
+ //# sourceMappingURL=out.js.map
13
+ //# sourceMappingURL=chunk-VDTOVBKK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/pail.browser.ts","../src/reporter/raw/raw.browser.ts","../src/util/arrayify.ts","../src/util/merge-types.ts","../src/util/pad-end.ts","../src/processor/error/error-proto.ts","../src/processor/error/error-with-cause-serializer.ts","../src/processor/error/error-processor.ts"],"names":["stringifyConfigure","RawReporter","meta","context","message","type","writeConsoleLogBasedOnLevel","arrayify","x","mergeTypes","standard","custom","types","padEnd","string_","targetLength","EMPTY_META","PailBrowserImpl","options","LOG_TYPES","getLongestLabel","EXTENDED_RFC_5424_LOG_LEVELS","error","name","label","data","span","current","arguments_","reporter","reporters","raw","processors","processor","level","typeName","prefix","suffix","messageObject","logLevel","resolveLog","newLog","repeated","lastMeta","diffTime","serializedLog","isSameLog","PailBrowser","seen","rawSymbol","errorProto","value","ErrorProto","errorWithCauseSerializer","protoError","error_","key","ErrorProcessor"],"mappings":"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","sourcesContent":["import type { stringify } from \"safe-stable-stringify\";\nimport { configure as stringifyConfigure } from \"safe-stable-stringify\";\n\nimport { EXTENDED_RFC_5424_LOG_LEVELS, LOG_TYPES } from \"./constants\";\nimport { RawReporter } from \"./reporter/raw/raw.browser\";\nimport type {\n ConstructorOptions,\n DefaultLogTypes,\n ExtendedRfc5424LogLevels,\n LiteralUnion,\n LoggerConfiguration,\n LoggerFunction,\n LoggerTypesAwareReporter,\n LoggerTypesConfig,\n Message,\n Meta,\n Primitive,\n Processor,\n Reporter,\n StringifyAwareProcessor,\n StringifyAwareReporter,\n} from \"./types\";\nimport { arrayify } from \"./util/arrayify\";\nimport { getLongestLabel } from \"./util/get-longest-label\";\nimport { mergeTypes } from \"./util/merge-types\";\nimport { padEnd } from \"./util/pad-end\";\n\nconst EMPTY_META = {\n badge: undefined,\n context: undefined,\n error: undefined,\n label: undefined,\n message: undefined,\n prefix: undefined,\n repeated: undefined,\n scope: undefined,\n suffix: undefined,\n};\n\nexport class PailBrowserImpl<T extends string = never, L extends string = never> {\n protected timersMap: Map<string, number>;\n\n protected countMap: Map<string, number>;\n\n protected seqTimers: Set<string>;\n\n protected readonly lastLog: {\n count?: number;\n object?: Meta<L>;\n serialized?: string;\n time?: Date;\n timeout?: ReturnType<typeof setTimeout>;\n };\n\n protected readonly logLevels: Record<string, number>;\n\n protected disabled: boolean;\n\n protected scopeName: string[];\n\n protected readonly types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n protected readonly longestLabel: string;\n\n protected readonly processors: Set<Processor<L>>;\n\n protected readonly generalLogLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>;\n\n protected reporters: Set<Reporter<L>>;\n\n protected readonly throttle: number;\n\n protected readonly throttleMin: number;\n\n protected readonly stringify: typeof stringify;\n\n protected groups: string[];\n\n protected readonly startTimerMessage: string;\n\n protected readonly endTimerMessage: string;\n\n protected rawReporter: Reporter<L>;\n\n public constructor(options: ConstructorOptions<T, L>) {\n this.throttle = options.throttle ?? 1000;\n this.throttleMin = options.throttleMin ?? 5;\n\n this.stringify = stringifyConfigure({\n strict: true,\n });\n\n this.startTimerMessage = options.messages?.timerStart ?? \"Initialized timer...\";\n this.endTimerMessage = options.messages?.timerEnd ?? \"Timer run for:\";\n this.types = mergeTypes<L, T>(LOG_TYPES, (options.types ?? {}) as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>);\n this.longestLabel = getLongestLabel<L, T>(this.types);\n\n this.logLevels = { ...EXTENDED_RFC_5424_LOG_LEVELS, ...options.logLevels };\n this.generalLogLevel = this._normalizeLogLevel(options.logLevel);\n\n this.reporters = new Set();\n this.processors = new Set();\n\n this.disabled = options.disabled ?? false;\n\n this.scopeName = arrayify(options.scope).filter(Boolean) as string[];\n\n this.timersMap = new Map();\n this.countMap = new Map();\n\n this.groups = [];\n\n this.seqTimers = new Set();\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax,guard-for-in\n for (const type in this.types) {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line security/detect-object-injection\n this[type] = this._logger.bind(this, type as T, false);\n }\n\n // Track of last log\n this.lastLog = {};\n\n if (Array.isArray(options.reporters)) {\n this.registerReporters(options.reporters);\n }\n\n this.rawReporter = this.extendReporter(options.rawReporter ?? new RawReporter<L>());\n\n if (Array.isArray(options.processors)) {\n this.registerProcessors(options.processors);\n }\n }\n\n public wrapConsole(): void {\n // eslint-disable-next-line guard-for-in,no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Backup original value\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!(console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[\"__\" + type] = (console as any)[type];\n }\n // Override\n // @TODO: Fix typings\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (this as unknown as PailBrowserImpl<T, L>)[type as keyof PailBrowserImpl<T, L>];\n }\n }\n\n public restoreConsole(): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Restore if backup is available\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (console as any)[\"__\" + type];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-dynamic-delete\n delete (console as any)[\"__\" + type];\n }\n }\n }\n\n public wrapException(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"uncaughtException\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"unhandledRejection\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n }\n\n /**\n * Disables logging\n */\n public disable(): void {\n this.disabled = true;\n }\n\n /**\n * Enables logging\n */\n public enable(): void {\n this.disabled = false;\n }\n\n public isEnabled(): boolean {\n return !this.disabled;\n }\n\n public scope<N extends string = T>(...name: string[]): PailBrowserType<N, L> {\n if (name.length === 0) {\n throw new Error(\"No scope name was defined.\");\n }\n\n this.scopeName = name.flat();\n\n return this as unknown as PailBrowserType<N, L>;\n }\n\n public unscope(): void {\n this.scopeName = [];\n }\n\n public time(label = \"default\"): void {\n if (this.seqTimers.has(label)) {\n this._logger(\"warn\", false, {\n message: \"Timer '\" + label + \"' already exists\",\n prefix: label,\n });\n } else {\n this.seqTimers.add(label);\n this.timersMap.set(label, Date.now());\n\n this._logger(\"start\", false, {\n message: this.startTimerMessage,\n prefix: label,\n });\n }\n }\n\n public timeLog(label?: string, ...data: unknown[]): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this._logger(\"info\", false, {\n context: data,\n message: span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\",\n prefix: label,\n });\n } else {\n this._logger(\"warn\", false, {\n context: data,\n message: \"Timer not found\",\n prefix: label,\n });\n }\n }\n\n public timeEnd(label?: string): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this.timersMap.delete(label);\n\n this._logger(\"stop\", false, {\n message: this.endTimerMessage + \" \" + (span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\"),\n prefix: label,\n });\n }\n }\n\n public group(label = \"console.group\"): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.group(label);\n } else {\n this.groups.push(label);\n }\n }\n\n public groupEnd(): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.groupEnd();\n } else {\n this.groups.pop();\n }\n }\n\n public count(label = \"default\"): void {\n const current = this.countMap.get(label) ?? 0;\n\n this.countMap.set(label, current + 1);\n\n this._logger(\"log\", false, {\n message: label + \": \" + (current + 1),\n prefix: label,\n });\n }\n\n public countReset(label = \"default\"): void {\n if (this.countMap.has(label)) {\n this.countMap.delete(label);\n } else {\n this._logger(\"warn\", false, {\n message: \"Count for \" + label + \" does not exist\",\n prefix: label,\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n public clear(): void {\n // eslint-disable-next-line no-console\n console.clear();\n }\n\n public raw(message: string, ...arguments_: unknown[]): void {\n if (this.disabled) {\n return;\n }\n\n this._logger(\"log\", true, {\n context: arguments_,\n message,\n });\n }\n\n protected extendReporter(reporter: Reporter<L>): Reporter<L> {\n if (typeof (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes === \"function\") {\n (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes(this.types);\n }\n\n if (typeof (reporter as StringifyAwareReporter<L>).setStringify === \"function\") {\n (reporter as StringifyAwareReporter<L>).setStringify(this.stringify);\n }\n\n return reporter;\n }\n\n protected registerReporters(reporters: Reporter<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of reporters) {\n this.reporters.add(this.extendReporter(reporter));\n }\n }\n\n private _report(meta: Meta<L>, raw: boolean): void {\n if (raw) {\n this.rawReporter.log(Object.freeze(meta));\n } else {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of this.reporters) {\n reporter.log(Object.freeze(meta));\n }\n }\n }\n\n private registerProcessors(processors: Processor<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of processors) {\n if (typeof (processor as StringifyAwareProcessor<L>).setStringify === \"function\") {\n (processor as StringifyAwareProcessor<L>).setStringify(this.stringify);\n }\n\n this.processors.add(processor as Processor<L>);\n }\n }\n\n private _normalizeLogLevel(level: LiteralUnion<ExtendedRfc5424LogLevels, L> | undefined): LiteralUnion<ExtendedRfc5424LogLevels, L> {\n // eslint-disable-next-line security/detect-object-injection\n return level && this.logLevels[level] ? level : \"debug\";\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _buildMeta(typeName: string, type: Partial<LoggerConfiguration<L>>, ...arguments_: any[]): Meta<L> {\n const meta = { ...EMPTY_META } as Meta<L>;\n\n meta.type = {\n level: type.logLevel as LiteralUnion<ExtendedRfc5424LogLevels, L>,\n name: typeName,\n };\n\n meta.groups = this.groups;\n meta.scope = this.scopeName;\n meta.date = new Date();\n\n if (arguments_.length === 1 && typeof arguments_[0] === \"object\" && arguments_[0] !== null) {\n if (arguments_[0] instanceof Error) {\n // eslint-disable-next-line prefer-destructuring\n meta.error = arguments_[0];\n } else if (\"message\" in arguments_[0]) {\n const { context, message, prefix, suffix } = arguments_[0] as Message;\n\n if (context) {\n meta.context = context;\n }\n\n if (prefix) {\n meta.prefix = prefix;\n }\n\n if (suffix) {\n meta.suffix = suffix;\n }\n\n meta.message = message;\n } else {\n meta.message = arguments_[0] as Primitive | ReadonlyArray<unknown> | Record<PropertyKey, unknown>;\n }\n } else if (arguments_.length > 1 && typeof arguments_[0] === \"string\") {\n meta.message = arguments_[0] as string;\n meta.context = arguments_.slice(1);\n } else {\n // eslint-disable-next-line prefer-destructuring\n meta.message = arguments_[0];\n }\n\n if (type.logLevel === \"trace\") {\n meta.traceError = new Error(\"Trace\");\n }\n\n if (type.badge) {\n meta.badge = padEnd(type.badge, type.badge.length + 1);\n }\n\n if (type.label) {\n meta.label = type.label;\n }\n\n return meta;\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _logger(type: LiteralUnion<DefaultLogTypes, T>, raw: boolean, ...messageObject: any[]): void {\n if (this.disabled) {\n return;\n }\n\n // eslint-disable-next-line security/detect-object-injection\n const logLevel = this._normalizeLogLevel(this.types[type].logLevel);\n\n // eslint-disable-next-line security/detect-object-injection\n if ((this.logLevels[logLevel] as number) >= (this.logLevels[this.generalLogLevel] as number)) {\n // eslint-disable-next-line security/detect-object-injection\n let meta = this._buildMeta(type, this.types[type], ...messageObject);\n\n /**\n * @param newLog false if the throttle expired and we don't want to log a duplicate\n */\n const resolveLog = (newLog = false) => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n const repeated = (this.lastLog.count || 0) - this.throttleMin;\n\n if (this.lastLog.object && repeated > 0) {\n const lastMeta = { ...this.lastLog.object };\n\n if (repeated > 1) {\n lastMeta.repeated = repeated;\n }\n\n this._report(lastMeta, raw);\n\n this.lastLog.count = 1;\n }\n\n if (newLog) {\n // Apply global processors\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of this.processors) {\n meta = { ...processor.process(meta) };\n }\n\n this.lastLog.object = meta;\n\n this._report(meta, raw);\n }\n };\n\n clearTimeout(this.lastLog.timeout);\n\n const diffTime = this.lastLog.time && meta.date ? new Date(meta.date as Date | string).getTime() - this.lastLog.time.getTime() : 0;\n\n this.lastLog.time = new Date(meta.date as Date | string);\n\n if (diffTime < this.throttle) {\n try {\n const serializedLog = JSON.stringify([meta.label, meta.scope, meta.type, meta.message, meta.prefix, meta.suffix, meta.context]);\n const isSameLog = this.lastLog.serialized === serializedLog;\n\n this.lastLog.serialized = serializedLog;\n\n if (isSameLog) {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.lastLog.count = (this.lastLog.count || 0) + 1;\n\n if (this.lastLog.count > this.throttleMin) {\n // Auto-resolve when throttle is timed out\n this.lastLog.timeout = setTimeout(resolveLog, this.throttle);\n\n return; // SPAM!\n }\n }\n } catch {\n // Circular References\n }\n }\n\n resolveLog(true);\n }\n }\n}\n\nexport type PailBrowserType<T extends string = never, L extends string = never> = PailBrowserImpl<T, L> &\n Record<DefaultLogTypes, LoggerFunction> &\n Record<T, LoggerFunction> &\n (new<TC extends string = never, LC extends string = never>(options?: ConstructorOptions<TC, LC>) => PailBrowserType<TC, LC>);\n\nexport type PailConstructor<T extends string = never, L extends string = never> = new (options?: ConstructorOptions<T, L>) => PailBrowserType<T, L>;\n\nexport const PailBrowser = PailBrowserImpl as unknown as PailBrowserType;\n","import type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { writeConsoleLogBasedOnLevel } from \"../../util/write-console-log\";\n\nexport class RawReporter<L extends string = never> implements Reporter<L> {\n // eslint-disable-next-line class-methods-use-this\n public log(meta: ReadonlyMeta<L>): void {\n const { context = [], message, type } = meta;\n\n const consoleLogFunction = writeConsoleLogBasedOnLevel(type.level);\n\n consoleLogFunction(message, ...context);\n }\n}\n","export const arrayify = <T>(x: T | T[]): T[] => {\n if (x === undefined) {\n return [] as T[];\n }\n\n return Array.isArray(x) ? x : ([x] as T[]);\n};\n","import type { DefaultLoggerTypes, DefaultLogTypes, LiteralUnion, LoggerTypesConfig } from \"../types\";\n\nexport const mergeTypes = <L extends string, T extends string>(\n standard: DefaultLoggerTypes<L>,\n custom: LoggerTypesConfig<T, L>,\n): LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L> => {\n const types = { ...standard } as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n Object.keys(custom).forEach((type) => {\n types[type as T] = { ...types[type as T], ...custom[type as T] };\n });\n\n return types;\n};\n","export const padEnd = (string_: string, targetLength: number): string => {\n if (string_.length >= targetLength) {\n return string_;\n }\n\n return string_.padEnd(targetLength);\n};\n","// eslint-disable-next-line import/exports-last\nexport const seen = Symbol(\"circular-reference-tag\");\n\n// eslint-disable-next-line import/exports-last,import/no-unused-modules\nexport const rawSymbol = Symbol(\"raw-error-ref\");\n\nconst errorProto = Object.create(\n {},\n {\n aggregateErrors: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n cause: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n code: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n message: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n name: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n raw: {\n enumerable: false,\n get() {\n // eslint-disable-next-line security/detect-object-injection\n return this[rawSymbol];\n },\n set(value) {\n // eslint-disable-next-line security/detect-object-injection\n this[rawSymbol] = value;\n },\n },\n stack: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n },\n) as SerializedError;\n\nObject.defineProperty(errorProto, rawSymbol, {\n value: {},\n writable: true,\n});\n\nexport const ErrorProto = errorProto;\n\nexport type SerializedError<ErrorType = Error> = Record<PropertyKey, unknown> & {\n aggregateErrors?: SerializedError<ErrorType>[];\n cause?: unknown;\n code?: string;\n message: string;\n name: string;\n raw?: ErrorType;\n stack?: string;\n};\n","import type { SerializedError } from \"./error-proto\";\nimport { ErrorProto, seen } from \"./error-proto\";\n\ntype CauseError = Error & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cause: any;\n};\n\ntype Options = {\n readonly maxDepth?: number;\n readonly useToJSON?: boolean;\n};\n\n/**\n * Serialize an `Error` object into a plain object.\n *\n * - Non-error values are passed through.\n * - Custom properties are preserved.\n * - Buffer properties are replaced with `[object Buffer]`.\n * - Circular references are handled.\n * - If the input object has a `.toJSON()` method, then it's called instead of serializing the object's properties.\n * - It's up to `.toJSON()` implementation to handle circular references and enumerability of the properties.\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport const errorWithCauseSerializer = (error: AggregateError | Error, options: Options = {}): SerializedError => {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line no-param-reassign\n error[seen as keyof Error] = undefined; // tag to prevent re-looking at this\n\n const protoError = Object.create(ErrorProto as object) as SerializedError;\n\n protoError.name = Object.prototype.toString.call(error.constructor) === \"[object Function]\" ? error.constructor.name : error.name;\n protoError.message = error.message;\n protoError.stack = error.stack;\n\n if (Array.isArray((error as AggregateError).errors)) {\n protoError.aggregateErrors = (error as AggregateError).errors.map((error_: AggregateError | Error) => errorWithCauseSerializer(error_, options));\n }\n\n // Handle aggregate errors\n if ((error as CauseError).cause instanceof Error && !Object.prototype.hasOwnProperty.call((error as CauseError).cause, seen as PropertyKey)) {\n protoError.cause = errorWithCauseSerializer((error as CauseError).cause, options);\n }\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const key in error) {\n // eslint-disable-next-line security/detect-object-injection\n if (protoError[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value = error[key as keyof Error] as any;\n\n if (value instanceof Error) {\n if (!Object.prototype.hasOwnProperty.call(value, seen as PropertyKey)) {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = errorWithCauseSerializer(value, options);\n }\n } else if (typeof value === \"function\") {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = \"[Function: \" + (value.name || \"anonymous\");\n } else {\n // Gracefully handle non-configurable errors like `DOMException`.\n try {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = value;\n } catch {\n /* empty */\n }\n }\n }\n }\n\n // eslint-disable-next-line no-param-reassign,@typescript-eslint/no-dynamic-delete\n delete error[seen as unknown as keyof Error]; // clean up tag in case err is serialized again later\n\n protoError.raw = error;\n\n return protoError;\n};\n","import type { Meta, Processor } from \"../../types\";\nimport type { SerializedError } from \"./error-proto\";\nimport { errorWithCauseSerializer } from \"./error-with-cause-serializer\";\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace VisulimaPail {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface CustomMeta<L> {\n error: SerializedError | undefined;\n }\n }\n}\n\nexport class ErrorProcessor<L extends string = never> implements Processor<L> {\n private readonly _options: { maxDepth: number; useToJSON: boolean };\n\n public constructor(options: { maxDepth?: number; useToJSON?: boolean } = {}) {\n this._options = {\n maxDepth: Number.POSITIVE_INFINITY,\n useToJSON: true,\n ...options,\n };\n }\n\n public process(meta: Meta<L>): Meta<L> {\n if (meta.error) {\n // eslint-disable-next-line no-param-reassign\n meta.error = errorWithCauseSerializer(meta.error, this._options);\n }\n\n return meta;\n }\n}\n"]}
@@ -1,13 +1,13 @@
1
1
  'use strict';
2
2
 
3
- var chunk2SZMC2SJ_cjs = require('./chunk-2SZMC2SJ.cjs');
3
+ var chunkVDTOVBKK_cjs = require('./chunk-VDTOVBKK.cjs');
4
4
  var chunkF4FJCQ4L_cjs = require('./chunk-F4FJCQ4L.cjs');
5
5
  var chunk5MNFJRLM_cjs = require('./chunk-5MNFJRLM.cjs');
6
6
  require('./chunk-N2UPJYJR.cjs');
7
7
  require('./chunk-ZJMTPHZR.cjs');
8
8
  require('./chunk-QINSQ6TU.cjs');
9
9
 
10
- var p=s=>new chunk2SZMC2SJ_cjs.b({processors:[new chunkF4FJCQ4L_cjs.a,...typeof window<"u"?[new chunk2SZMC2SJ_cjs.c]:[]],reporters:[new chunk5MNFJRLM_cjs.a],...s}),f=p();
10
+ var p=s=>new chunkVDTOVBKK_cjs.b({processors:[new chunkF4FJCQ4L_cjs.a,...typeof window<"u"?[new chunkVDTOVBKK_cjs.c]:[]],reporters:[new chunk5MNFJRLM_cjs.a],...s}),f=p();
11
11
 
12
12
  exports.createPail = p;
13
13
  exports.pail = f;
@@ -1,4 +1,4 @@
1
- import { b, c } from './chunk-576JQ6DN.js';
1
+ import { b, c } from './chunk-7QFUDEFS.js';
2
2
  import { a } from './chunk-SR3Q3EUO.js';
3
3
  import { a as a$1 } from './chunk-KERJDMYV.js';
4
4
  import './chunk-AFMDCM5W.js';
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunk2SZMC2SJ_cjs = require('./chunk-2SZMC2SJ.cjs');
3
+ var chunkVDTOVBKK_cjs = require('./chunk-VDTOVBKK.cjs');
4
4
  var chunkF4FJCQ4L_cjs = require('./chunk-F4FJCQ4L.cjs');
5
5
  require('./chunk-N2UPJYJR.cjs');
6
6
  var chunkXQP4GKQU_cjs = require('./chunk-XQP4GKQU.cjs');
@@ -12,7 +12,7 @@ var g=class{#e;#t=!1;#i=!1;#r=0;#s=0;constructor(t,e){this.#e={stderr:e,stdout:t
12
12
  `)+`
13
13
  `),this.#r=d?d+p.length+1:p.length,this.#s=Math.max(this.lastLength-i,this.outside);}}_clear(t=!1){this.#t=t,this.#r=0,this.#s=0;}};var a="\x1B[",I=a+"2J",P=a+"2K",_=a+"G",J=(s=1)=>a+s+"A",m=process.platform==="win32"?`${I}${a}0f`:`${I}${a}3J${a}H`,A=a+"?25l",N=a+"?25h",M=s=>{let t="";for(let e=0;e<s;e++)t+=P+(e<s-1?J():"");return s&&(t+=_),t};var h=class s{static DRAIN=!0;#e=new string_decoder.StringDecoder;#t=[];#i;#r;constructor(t){this.#i=t.write,this.#r=t;}active(){this.write(A),this.#r.write=(t,...e)=>{let r=e.at(-1);return this.#t.push(this.#e.write(typeof t=="string"?Buffer.from(t,typeof e[0]=="string"?e[0]:void 0):Buffer.from(t))),typeof r=="function"&&r(),s.DRAIN};}erase(t){t>0&&this.write(M(t+1));}inactive(t=!1){this.#t.length>0&&(t&&this.write(`
14
14
  `),this.#t.forEach(e=>{this.write(e);}),this.#t=[]),this.renew();}renew(){this.#r.write=this.#i,this.write(N);}write(t){this.#i.apply(this.#r,[t]);}};var v=class{#e;#t;#i;#r;#s=!1;constructor(){this.#t=process.stdout,this.#i=process.stderr;}setStdout(t){this.#t=t;}setStderr(t){this.#i=t;}setStringify(t){this.#e=t;}setInteractiveManager(t){this.#r=t;}setIsInteractive(t){this.#s=t;}log(t){let{context:e,groups:r,message:o,type:u}=t,i=[],c=typeof o=="string"?o:this.#e(o);i.push(c+""),e&&i.push(...e.map(l=>typeof l=="object"?" "+this.#e(l):" "+l));let n=["error","trace","warn"].includes(u.level)?"stderr":"stdout",d=n==="stderr"?this.#i:this.#t,p=r.map(()=>" ").join("");this.#s&&this.#r!==void 0&&d.isTTY?this.#r.update(n,(p+i.join("")).split(`
15
- `),0):chunkXQP4GKQU_cjs.c(p+i.join(""),d);}};var S=class extends chunk2SZMC2SJ_cjs.a{constructor(e={}){let{interactive:r,rawReporter:o,reporters:u,stderr:i,stdout:c,...n}=e;super(n);this.options=e;this.interactive=r??!1,this.stdout=c,this.stderr=i,this.interactive&&(this.interactiveManager=new g(new h(this.stdout),new h(this.stderr))),Array.isArray(u)&&this.registerReporters(u),this.rawReporter=this.extendReporter(e.rawReporter??new v);}stdout;stderr;interactiveManager;interactive;scope(...e){if(e.length===0)throw new Error("No scope name was defined.");return this.scopeName=e.flat(),this}getInteractiveManager(){return this.interactiveManager}wrapStd(){this._wrapStream(this.stdout,"log"),this._wrapStream(this.stderr,"log");}restoreStd(){this._restoreStream(this.stdout),this._restoreStream(this.stderr);}wrapAll(){this.wrapConsole(),this.wrapStd();}restoreAll(){this.restoreConsole(),this.restoreStd();}clear(){this.stdout.write(m),this.stderr.write(m);}extendReporter(e){return typeof e.setStdout=="function"&&e.setStdout(this.stdout),typeof e.setStderr=="function"&&e.setStderr(this.stderr),typeof e.setLoggerTypes=="function"&&e.setLoggerTypes(this.types),typeof e.setStringify=="function"&&e.setStringify(this.stringify),typeof e.setIsInteractive=="function"&&e.setIsInteractive(this.interactive),this.interactive&&typeof e.setInteractiveManager=="function"&&e.setInteractiveManager(this.interactiveManager),e}_wrapStream(e,r){e&&(e.__write||(e.__write=e.write),e.write=o=>{this[r].log(String(o).trim());});}_restoreStream(e){e&&e.__write&&(e.write=e.__write,delete e.__write);}},E=S;var k=()=>process.env.DEBUG!==void 0?"debug":"informational",W=s=>new E({logLevel:k(),processors:[new chunkF4FJCQ4L_cjs.a,new chunk2SZMC2SJ_cjs.c],reporters:[new chunkXQP4GKQU_cjs.d],stderr:process.stderr,stdout:process.stdout,...s}),pe=W();
15
+ `),0):chunkXQP4GKQU_cjs.c(p+i.join(""),d);}};var S=class extends chunkVDTOVBKK_cjs.a{constructor(e={}){let{interactive:r,rawReporter:o,reporters:u,stderr:i,stdout:c,...n}=e;super(n);this.options=e;this.interactive=r??!1,this.stdout=c,this.stderr=i,this.interactive&&(this.interactiveManager=new g(new h(this.stdout),new h(this.stderr))),Array.isArray(u)&&this.registerReporters(u),this.rawReporter=this.extendReporter(e.rawReporter??new v);}stdout;stderr;interactiveManager;interactive;scope(...e){if(e.length===0)throw new Error("No scope name was defined.");return this.scopeName=e.flat(),this}getInteractiveManager(){return this.interactiveManager}wrapStd(){this._wrapStream(this.stdout,"log"),this._wrapStream(this.stderr,"log");}restoreStd(){this._restoreStream(this.stdout),this._restoreStream(this.stderr);}wrapAll(){this.wrapConsole(),this.wrapStd();}restoreAll(){this.restoreConsole(),this.restoreStd();}clear(){this.stdout.write(m),this.stderr.write(m);}extendReporter(e){return typeof e.setStdout=="function"&&e.setStdout(this.stdout),typeof e.setStderr=="function"&&e.setStderr(this.stderr),typeof e.setLoggerTypes=="function"&&e.setLoggerTypes(this.types),typeof e.setStringify=="function"&&e.setStringify(this.stringify),typeof e.setIsInteractive=="function"&&e.setIsInteractive(this.interactive),this.interactive&&typeof e.setInteractiveManager=="function"&&e.setInteractiveManager(this.interactiveManager),e}_wrapStream(e,r){e&&(e.__write||(e.__write=e.write),e.write=o=>{this[r].log(String(o).trim());});}_restoreStream(e){e&&e.__write&&(e.write=e.__write,delete e.__write);}},E=S;var k=()=>process.env.DEBUG!==void 0?"debug":"informational",W=s=>new E({logLevel:k(),processors:[new chunkF4FJCQ4L_cjs.a,new chunkVDTOVBKK_cjs.c],reporters:[new chunkXQP4GKQU_cjs.d],stderr:process.stderr,stdout:process.stdout,...s}),pe=W();
16
16
 
17
17
  exports.createPail = W;
18
18
  exports.pail = pe;
@@ -1,4 +1,4 @@
1
- import { c, a as a$2 } from './chunk-576JQ6DN.js';
1
+ import { c, a as a$2 } from './chunk-7QFUDEFS.js';
2
2
  import { a as a$1 } from './chunk-SR3Q3EUO.js';
3
3
  import './chunk-AFMDCM5W.js';
4
4
  import { d, a as a$3, b, c as c$1 } from './chunk-JGZNXQSY.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/pail",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "Find a file or directory by walking up parent directories.",
5
5
  "keywords": [
6
6
  "anolilab",
@@ -1,13 +0,0 @@
1
- 'use strict';
2
-
3
- var chunkN2UPJYJR_cjs = require('./chunk-N2UPJYJR.cjs');
4
- var chunkQINSQ6TU_cjs = require('./chunk-QINSQ6TU.cjs');
5
- var safeStableStringify = require('safe-stable-stringify');
6
-
7
- var u=class{log(e){let{context:r=[],message:t,type:o}=e;chunkN2UPJYJR_cjs.a(o.level)(t,...r);}};var w=s=>s===void 0?[]:Array.isArray(s)?s:[s];var v=(s,e)=>{let r={...s};return Object.keys(e).forEach(t=>{r[t]={...r[t],...e[t]};}),r};var x=(s,e)=>s.length>=e?s:s.padEnd(e);var P={badge:void 0,context:void 0,error:void 0,label:void 0,message:void 0,prefix:void 0,repeated:void 0,scope:void 0,suffix:void 0},L=class{timersMap;countMap;seqTimers;lastLog;logLevels;disabled;scopeName;types;longestLabel;processors;generalLogLevel;reporters;throttle;throttleMin;stringify;groups;startTimerMessage;endTimerMessage;rawReporter;constructor(e){this.throttle=e.throttle??1e3,this.throttleMin=e.throttleMin??5,this.stringify=safeStableStringify.configure({strict:!0}),this.startTimerMessage=e.messages?.timerStart??"Initialized timer...",this.endTimerMessage=e.messages?.timerEnd??"Timer run for:",this.types=v(chunkQINSQ6TU_cjs.b,e.types??{}),this.longestLabel=chunkQINSQ6TU_cjs.c(this.types),this.logLevels={...chunkQINSQ6TU_cjs.a,...e.logLevels},this.generalLogLevel=this._normalizeLogLevel(e.logLevel),this.reporters=new Set,this.processors=new Set,this.disabled=e.disabled??!1,this.scopeName=w(e.scope).filter(Boolean),this.timersMap=new Map,this.countMap=new Map,this.groups=[],this.seqTimers=new Set;for(let r in this.types)this[r]=this._logger.bind(this,r,!1);this.lastLog={},Array.isArray(e.reporters)&&this.registerReporters(e.reporters),this.rawReporter=this.extendReporter(e.rawReporter??new u),Array.isArray(e.processors)&&this.registerProcessors(e.processors);}wrapConsole(){for(let e in this.types)console["__"+e]||(console["__"+e]=console[e]),console[e]=this[e].log;}restoreConsole(){for(let e in this.types)console["__"+e]&&(console[e]=console["__"+e],delete console["__"+e]);}wrapException(){process.on("uncaughtException",e=>{this.error(e);}),process.on("unhandledRejection",e=>{this.error(e);});}disable(){this.disabled=!0;}enable(){this.disabled=!1;}isEnabled(){return !this.disabled}scope(...e){if(e.length===0)throw new Error("No scope name was defined.");return this.scopeName=e.flat(),this}unscope(){this.scopeName=[];}time(e="default"){this.seqTimers.has(e)?this._logger("warn",!1,{message:"Timer '"+e+"' already exists",prefix:e}):(this.seqTimers.add(e),this.timersMap.set(e,Date.now()),this._logger("start",!1,{message:this.startTimerMessage,prefix:e}));}timeLog(e,...r){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let t=Date.now()-this.timersMap.get(e);this._logger("info",!1,{context:r,message:t<1e3?t+" ms":(t/1e3).toFixed(2)+" s",prefix:e});}else this._logger("warn",!1,{context:r,message:"Timer not found",prefix:e});}timeEnd(e){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let r=Date.now()-this.timersMap.get(e);this.timersMap.delete(e),this._logger("stop",!1,{message:this.endTimerMessage+" "+(r<1e3?r+" ms":(r/1e3).toFixed(2)+" s"),prefix:e});}}group(e="console.group"){typeof window>"u"?console.group(e):this.groups.push(e);}groupEnd(){typeof window>"u"?console.groupEnd():this.groups.pop();}count(e="default"){let r=this.countMap.get(e)??0;this.countMap.set(e,r+1),this._logger("log",!1,{message:e+": "+(r+1),prefix:e});}countReset(e="default"){this.countMap.has(e)?this.countMap.delete(e):this._logger("warn",!1,{message:"Count for "+e+" does not exist",prefix:e});}clear(){console.clear();}raw(e,...r){this.disabled||this._logger("log",!0,{context:r,message:e});}extendReporter(e){return typeof e.setLoggerTypes=="function"&&e.setLoggerTypes(this.types),typeof e.setStringify=="function"&&e.setStringify(this.stringify),e}registerReporters(e){for(let r of e)this.reporters.add(this.extendReporter(r));}_report(e,r){if(r)this.rawReporter.log(Object.freeze(e));else for(let t of this.reporters)t.log(Object.freeze(e));}registerProcessors(e){for(let r of e)typeof r.setStringify=="function"&&r.setStringify(this.stringify),this.processors.add(r);}_normalizeLogLevel(e){return e&&this.logLevels[e]?e:"debug"}_buildMeta(e,r,...t){let o={...P};if(o.type={level:r.logLevel,name:e},o.groups=this.groups,o.scope=this.scopeName,o.date=new Date,t.length===1&&typeof t[0]=="object"&&t[0]!==null)if(t[0]instanceof Error)o.error=t[0];else if("message"in t[0]){let{context:i,message:c,prefix:d,suffix:n}=t[0];i&&(o.context=i),d&&(o.prefix=d),n&&(o.suffix=n),o.message=c;}else o.message=t[0];else t.length>1&&typeof t[0]=="string"?(o.message=t[0],o.context=t.slice(1)):o.message=t[0];return r.logLevel==="trace"&&(o.traceError=new Error("Trace")),r.badge&&(o.badge=x(r.badge,r.badge.length+1)),r.label&&(o.label=r.label),o}_logger(e,r,...t){if(this.disabled)return;let o=this._normalizeLogLevel(this.types[e].logLevel);if(this.logLevels[o]>=this.logLevels[this.generalLogLevel]){let i=this._buildMeta(e,this.types[e],...t),c=(n=!1)=>{let p=(this.lastLog.count||0)-this.throttleMin;if(this.lastLog.object&&p>0){let f={...this.lastLog.object};p>1&&(f.repeated=p),this._report(f,r),this.lastLog.count=1;}if(n){for(let f of this.processors)i={...f.process(i)};this.lastLog.object=i,this._report(i,r);}};clearTimeout(this.lastLog.timeout);let d=this.lastLog.time&&i.date?new Date(i.date).getTime()-this.lastLog.time.getTime():0;if(this.lastLog.time=new Date(i.date),d<this.throttle)try{let n=JSON.stringify([i.label,i.scope,i.type,i.message,i.prefix,i.suffix,i.context]),p=this.lastLog.serialized===n;if(this.lastLog.serialized=n,p&&(this.lastLog.count=(this.lastLog.count||0)+1,this.lastLog.count>this.throttleMin)){this.lastLog.timeout=setTimeout(c,this.throttle);return}}catch{}c(!0);}}},V=L;var l=Symbol("circular-reference-tag"),y=Symbol("raw-error-ref"),E=Object.create({},{aggregateErrors:{enumerable:!0,value:void 0,writable:!0},cause:{enumerable:!0,value:void 0,writable:!0},code:{enumerable:!0,value:void 0,writable:!0},message:{enumerable:!0,value:void 0,writable:!0},name:{enumerable:!0,value:void 0,writable:!0},raw:{enumerable:!1,get(){return this[y]},set(s){this[y]=s;}},stack:{enumerable:!0,value:void 0,writable:!0}});Object.defineProperty(E,y,{value:{},writable:!0});var M=E;var g=(s,e={})=>{s[l]=void 0;let r=Object.create(M);r.name=Object.prototype.toString.call(s.constructor)==="[object Function]"?s.constructor.name:s.name,r.message=s.message,r.stack=s.stack,Array.isArray(s.errors)&&(r.aggregateErrors=s.errors.map(t=>g(t,e))),s.cause instanceof Error&&!Object.prototype.hasOwnProperty.call(s.cause,l)&&(r.cause=g(s.cause,e));for(let t in s)if(r[t]===void 0){let o=s[t];if(o instanceof Error)Object.prototype.hasOwnProperty.call(o,l)||(r[t]=g(o,e));else if(typeof o=="function")r[t]="[Function: "+(o.name||"anonymous");else try{r[t]=o;}catch{}}return delete s[l],r.raw=s,r};var R=class{_options;constructor(e={}){this._options={maxDepth:Number.POSITIVE_INFINITY,useToJSON:!0,...e};}process(e){return e.error&&(e.error=g(e.error,this._options)),e}};
8
-
9
- exports.a = L;
10
- exports.b = V;
11
- exports.c = R;
12
- //# sourceMappingURL=out.js.map
13
- //# sourceMappingURL=chunk-2SZMC2SJ.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/pail.browser.ts","../src/reporter/raw/raw.browser.ts","../src/util/arrayify.ts","../src/util/merge-types.ts","../src/util/pad-end.ts","../src/processor/error/error-proto.ts","../src/processor/error/error-with-cause-serializer.ts","../src/processor/error/error-processor.ts"],"names":["stringifyConfigure","RawReporter","meta","context","message","type","writeConsoleLogBasedOnLevel","arrayify","x","mergeTypes","standard","custom","types","padEnd","string_","targetLength","EMPTY_META","PailBrowserImpl","options","LOG_TYPES","getLongestLabel","EXTENDED_RFC_5424_LOG_LEVELS","error","name","label","data","span","current","arguments_","reporter","reporters","raw","processors","processor","level","typeName","prefix","suffix","messageObject","logLevel","resolveLog","newLog","repeated","lastMeta","diffTime","serializedLog","isSameLog","PailBrowser","seen","rawSymbol","errorProto","value","ErrorProto","errorWithCauseSerializer","protoError","error_","key","ErrorProcessor"],"mappings":"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","sourcesContent":["import type { stringify } from \"safe-stable-stringify\";\nimport { configure as stringifyConfigure } from \"safe-stable-stringify\";\n\nimport { EXTENDED_RFC_5424_LOG_LEVELS, LOG_TYPES } from \"./constants\";\nimport { RawReporter } from \"./reporter/raw/raw.browser\";\nimport type {\n ConstructorOptions,\n DefaultLogTypes,\n ExtendedRfc5424LogLevels,\n LiteralUnion,\n LoggerConfiguration,\n LoggerFunction,\n LoggerTypesAwareReporter,\n LoggerTypesConfig,\n Message,\n Meta,\n Primitive,\n Processor,\n Reporter,\n StringifyAwareProcessor,\n StringifyAwareReporter,\n} from \"./types\";\nimport { arrayify } from \"./util/arrayify\";\nimport { getLongestLabel } from \"./util/get-longest-label\";\nimport { mergeTypes } from \"./util/merge-types\";\nimport { padEnd } from \"./util/pad-end\";\n\nconst EMPTY_META = {\n badge: undefined,\n context: undefined,\n error: undefined,\n label: undefined,\n message: undefined,\n prefix: undefined,\n repeated: undefined,\n scope: undefined,\n suffix: undefined,\n};\n\nexport class PailBrowserImpl<T extends string = never, L extends string = never> {\n protected timersMap: Map<string, number>;\n\n protected countMap: Map<string, number>;\n\n protected seqTimers: Set<string>;\n\n protected readonly lastLog: {\n count?: number;\n object?: Meta<L>;\n serialized?: string;\n time?: Date;\n timeout?: ReturnType<typeof setTimeout>;\n };\n\n protected readonly logLevels: Record<string, number>;\n\n protected disabled: boolean;\n\n protected scopeName: string[];\n\n protected readonly types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n protected readonly longestLabel: string;\n\n protected readonly processors: Set<Processor<L>>;\n\n protected readonly generalLogLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>;\n\n protected reporters: Set<Reporter<L>>;\n\n protected readonly throttle: number;\n\n protected readonly throttleMin: number;\n\n protected readonly stringify: typeof stringify;\n\n protected groups: string[];\n\n protected readonly startTimerMessage: string;\n\n protected readonly endTimerMessage: string;\n\n protected rawReporter: Reporter<L>;\n\n public constructor(options: ConstructorOptions<T, L>) {\n this.throttle = options.throttle ?? 1000;\n this.throttleMin = options.throttleMin ?? 5;\n\n this.stringify = stringifyConfigure({\n strict: true,\n });\n\n this.startTimerMessage = options.messages?.timerStart ?? \"Initialized timer...\";\n this.endTimerMessage = options.messages?.timerEnd ?? \"Timer run for:\";\n this.types = mergeTypes<L, T>(LOG_TYPES, (options.types ?? {}) as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>);\n this.longestLabel = getLongestLabel<L, T>(this.types);\n\n this.logLevels = { ...EXTENDED_RFC_5424_LOG_LEVELS, ...options.logLevels };\n this.generalLogLevel = this._normalizeLogLevel(options.logLevel);\n\n this.reporters = new Set();\n this.processors = new Set();\n\n this.disabled = options.disabled ?? false;\n\n this.scopeName = arrayify(options.scope).filter(Boolean) as string[];\n\n this.timersMap = new Map();\n this.countMap = new Map();\n\n this.groups = [];\n\n this.seqTimers = new Set();\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax,guard-for-in\n for (const type in this.types) {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line security/detect-object-injection\n this[type] = this._logger.bind(this, type as T, false);\n }\n\n // Track of last log\n this.lastLog = {};\n\n if (Array.isArray(options.reporters)) {\n this.registerReporters(options.reporters);\n }\n\n this.rawReporter = this.extendReporter(options.rawReporter ?? new RawReporter<L>());\n\n if (Array.isArray(options.processors)) {\n this.registerProcessors(options.processors);\n }\n }\n\n public wrapConsole(): void {\n // eslint-disable-next-line guard-for-in,no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Backup original value\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!(console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[\"__\" + type] = (console as any)[type];\n }\n // Override\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (this as unknown as PailBrowserImpl<T, L>)[type as keyof PailBrowserImpl<T, L>].log;\n }\n }\n\n public restoreConsole(): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Restore if backup is available\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (console as any)[\"__\" + type];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-dynamic-delete\n delete (console as any)[\"__\" + type];\n }\n }\n }\n\n public wrapException(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"uncaughtException\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"unhandledRejection\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n }\n\n /**\n * Disables logging\n */\n public disable(): void {\n this.disabled = true;\n }\n\n /**\n * Enables logging\n */\n public enable(): void {\n this.disabled = false;\n }\n\n public isEnabled(): boolean {\n return !this.disabled;\n }\n\n public scope<N extends string = T>(...name: string[]): PailBrowserType<N, L> {\n if (name.length === 0) {\n throw new Error(\"No scope name was defined.\");\n }\n\n this.scopeName = name.flat();\n\n return this as unknown as PailBrowserType<N, L>;\n }\n\n public unscope(): void {\n this.scopeName = [];\n }\n\n public time(label = \"default\"): void {\n if (this.seqTimers.has(label)) {\n this._logger(\"warn\", false, {\n message: \"Timer '\" + label + \"' already exists\",\n prefix: label,\n });\n } else {\n this.seqTimers.add(label);\n this.timersMap.set(label, Date.now());\n\n this._logger(\"start\", false, {\n message: this.startTimerMessage,\n prefix: label,\n });\n }\n }\n\n public timeLog(label?: string, ...data: unknown[]): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this._logger(\"info\", false, {\n context: data,\n message: span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\",\n prefix: label,\n });\n } else {\n this._logger(\"warn\", false, {\n context: data,\n message: \"Timer not found\",\n prefix: label,\n });\n }\n }\n\n public timeEnd(label?: string): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this.timersMap.delete(label);\n\n this._logger(\"stop\", false, {\n message: this.endTimerMessage + \" \" + (span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\"),\n prefix: label,\n });\n }\n }\n\n public group(label = \"console.group\"): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.group(label);\n } else {\n this.groups.push(label);\n }\n }\n\n public groupEnd(): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.groupEnd();\n } else {\n this.groups.pop();\n }\n }\n\n public count(label = \"default\"): void {\n const current = this.countMap.get(label) ?? 0;\n\n this.countMap.set(label, current + 1);\n\n this._logger(\"log\", false, {\n message: label + \": \" + (current + 1),\n prefix: label,\n });\n }\n\n public countReset(label = \"default\"): void {\n if (this.countMap.has(label)) {\n this.countMap.delete(label);\n } else {\n this._logger(\"warn\", false, {\n message: \"Count for \" + label + \" does not exist\",\n prefix: label,\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n public clear(): void {\n // eslint-disable-next-line no-console\n console.clear();\n }\n\n public raw(message: string, ...arguments_: unknown[]): void {\n if (this.disabled) {\n return;\n }\n\n this._logger(\"log\", true, {\n context: arguments_,\n message,\n });\n }\n\n protected extendReporter(reporter: Reporter<L>): Reporter<L> {\n if (typeof (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes === \"function\") {\n (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes(this.types);\n }\n\n if (typeof (reporter as StringifyAwareReporter<L>).setStringify === \"function\") {\n (reporter as StringifyAwareReporter<L>).setStringify(this.stringify);\n }\n\n return reporter;\n }\n\n protected registerReporters(reporters: Reporter<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of reporters) {\n this.reporters.add(this.extendReporter(reporter));\n }\n }\n\n private _report(meta: Meta<L>, raw: boolean): void {\n if (raw) {\n this.rawReporter.log(Object.freeze(meta));\n } else {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of this.reporters) {\n reporter.log(Object.freeze(meta));\n }\n }\n }\n\n private registerProcessors(processors: Processor<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of processors) {\n if (typeof (processor as StringifyAwareProcessor<L>).setStringify === \"function\") {\n (processor as StringifyAwareProcessor<L>).setStringify(this.stringify);\n }\n\n this.processors.add(processor as Processor<L>);\n }\n }\n\n private _normalizeLogLevel(level: LiteralUnion<ExtendedRfc5424LogLevels, L> | undefined): LiteralUnion<ExtendedRfc5424LogLevels, L> {\n // eslint-disable-next-line security/detect-object-injection\n return level && this.logLevels[level] ? level : \"debug\";\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _buildMeta(typeName: string, type: Partial<LoggerConfiguration<L>>, ...arguments_: any[]): Meta<L> {\n const meta = { ...EMPTY_META } as Meta<L>;\n\n meta.type = {\n level: type.logLevel as LiteralUnion<ExtendedRfc5424LogLevels, L>,\n name: typeName,\n };\n\n meta.groups = this.groups;\n meta.scope = this.scopeName;\n meta.date = new Date();\n\n if (arguments_.length === 1 && typeof arguments_[0] === \"object\" && arguments_[0] !== null) {\n if (arguments_[0] instanceof Error) {\n // eslint-disable-next-line prefer-destructuring\n meta.error = arguments_[0];\n } else if (\"message\" in arguments_[0]) {\n const { context, message, prefix, suffix } = arguments_[0] as Message;\n\n if (context) {\n meta.context = context;\n }\n\n if (prefix) {\n meta.prefix = prefix;\n }\n\n if (suffix) {\n meta.suffix = suffix;\n }\n\n meta.message = message;\n } else {\n meta.message = arguments_[0] as Primitive | ReadonlyArray<unknown> | Record<PropertyKey, unknown>;\n }\n } else if (arguments_.length > 1 && typeof arguments_[0] === \"string\") {\n meta.message = arguments_[0] as string;\n meta.context = arguments_.slice(1);\n } else {\n // eslint-disable-next-line prefer-destructuring\n meta.message = arguments_[0];\n }\n\n if (type.logLevel === \"trace\") {\n meta.traceError = new Error(\"Trace\");\n }\n\n if (type.badge) {\n meta.badge = padEnd(type.badge, type.badge.length + 1);\n }\n\n if (type.label) {\n meta.label = type.label;\n }\n\n return meta;\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _logger(type: LiteralUnion<DefaultLogTypes, T>, raw: boolean, ...messageObject: any[]): void {\n if (this.disabled) {\n return;\n }\n\n // eslint-disable-next-line security/detect-object-injection\n const logLevel = this._normalizeLogLevel(this.types[type].logLevel);\n\n // eslint-disable-next-line security/detect-object-injection\n if ((this.logLevels[logLevel] as number) >= (this.logLevels[this.generalLogLevel] as number)) {\n // eslint-disable-next-line security/detect-object-injection\n let meta = this._buildMeta(type, this.types[type], ...messageObject);\n\n /**\n * @param newLog false if the throttle expired and we don't want to log a duplicate\n */\n const resolveLog = (newLog = false) => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n const repeated = (this.lastLog.count || 0) - this.throttleMin;\n\n if (this.lastLog.object && repeated > 0) {\n const lastMeta = { ...this.lastLog.object };\n\n if (repeated > 1) {\n lastMeta.repeated = repeated;\n }\n\n this._report(lastMeta, raw);\n\n this.lastLog.count = 1;\n }\n\n if (newLog) {\n // Apply global processors\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of this.processors) {\n meta = { ...processor.process(meta) };\n }\n\n this.lastLog.object = meta;\n\n this._report(meta, raw);\n }\n };\n\n clearTimeout(this.lastLog.timeout);\n\n const diffTime = this.lastLog.time && meta.date ? new Date(meta.date as Date | string).getTime() - this.lastLog.time.getTime() : 0;\n\n this.lastLog.time = new Date(meta.date as Date | string);\n\n if (diffTime < this.throttle) {\n try {\n const serializedLog = JSON.stringify([meta.label, meta.scope, meta.type, meta.message, meta.prefix, meta.suffix, meta.context]);\n const isSameLog = this.lastLog.serialized === serializedLog;\n\n this.lastLog.serialized = serializedLog;\n\n if (isSameLog) {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.lastLog.count = (this.lastLog.count || 0) + 1;\n\n if (this.lastLog.count > this.throttleMin) {\n // Auto-resolve when throttle is timed out\n this.lastLog.timeout = setTimeout(resolveLog, this.throttle);\n\n return; // SPAM!\n }\n }\n } catch {\n // Circular References\n }\n }\n\n resolveLog(true);\n }\n }\n}\n\nexport type PailBrowserType<T extends string = never, L extends string = never> = PailBrowserImpl<T, L> &\n Record<DefaultLogTypes, LoggerFunction> &\n Record<T, LoggerFunction> &\n (new<TC extends string = never, LC extends string = never>(options?: ConstructorOptions<TC, LC>) => PailBrowserType<TC, LC>);\n\nexport type PailConstructor<T extends string = never, L extends string = never> = new (options?: ConstructorOptions<T, L>) => PailBrowserType<T, L>;\n\nexport const PailBrowser = PailBrowserImpl as unknown as PailBrowserType;\n","import type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { writeConsoleLogBasedOnLevel } from \"../../util/write-console-log\";\n\nexport class RawReporter<L extends string = never> implements Reporter<L> {\n // eslint-disable-next-line class-methods-use-this\n public log(meta: ReadonlyMeta<L>): void {\n const { context = [], message, type } = meta;\n\n const consoleLogFunction = writeConsoleLogBasedOnLevel(type.level);\n\n consoleLogFunction(message, ...context);\n }\n}\n","export const arrayify = <T>(x: T | T[]): T[] => {\n if (x === undefined) {\n return [] as T[];\n }\n\n return Array.isArray(x) ? x : ([x] as T[]);\n};\n","import type { DefaultLoggerTypes, DefaultLogTypes, LiteralUnion, LoggerTypesConfig } from \"../types\";\n\nexport const mergeTypes = <L extends string, T extends string>(\n standard: DefaultLoggerTypes<L>,\n custom: LoggerTypesConfig<T, L>,\n): LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L> => {\n const types = { ...standard } as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n Object.keys(custom).forEach((type) => {\n types[type as T] = { ...types[type as T], ...custom[type as T] };\n });\n\n return types;\n};\n","export const padEnd = (string_: string, targetLength: number): string => {\n if (string_.length >= targetLength) {\n return string_;\n }\n\n return string_.padEnd(targetLength);\n};\n","// eslint-disable-next-line import/exports-last\nexport const seen = Symbol(\"circular-reference-tag\");\n\n// eslint-disable-next-line import/exports-last,import/no-unused-modules\nexport const rawSymbol = Symbol(\"raw-error-ref\");\n\nconst errorProto = Object.create(\n {},\n {\n aggregateErrors: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n cause: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n code: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n message: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n name: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n raw: {\n enumerable: false,\n get() {\n // eslint-disable-next-line security/detect-object-injection\n return this[rawSymbol];\n },\n set(value) {\n // eslint-disable-next-line security/detect-object-injection\n this[rawSymbol] = value;\n },\n },\n stack: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n },\n) as SerializedError;\n\nObject.defineProperty(errorProto, rawSymbol, {\n value: {},\n writable: true,\n});\n\nexport const ErrorProto = errorProto;\n\nexport type SerializedError<ErrorType = Error> = Record<PropertyKey, unknown> & {\n aggregateErrors?: SerializedError<ErrorType>[];\n cause?: unknown;\n code?: string;\n message: string;\n name: string;\n raw?: ErrorType;\n stack?: string;\n};\n","import type { SerializedError } from \"./error-proto\";\nimport { ErrorProto, seen } from \"./error-proto\";\n\ntype CauseError = Error & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cause: any;\n};\n\ntype Options = {\n readonly maxDepth?: number;\n readonly useToJSON?: boolean;\n};\n\n/**\n * Serialize an `Error` object into a plain object.\n *\n * - Non-error values are passed through.\n * - Custom properties are preserved.\n * - Buffer properties are replaced with `[object Buffer]`.\n * - Circular references are handled.\n * - If the input object has a `.toJSON()` method, then it's called instead of serializing the object's properties.\n * - It's up to `.toJSON()` implementation to handle circular references and enumerability of the properties.\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport const errorWithCauseSerializer = (error: AggregateError | Error, options: Options = {}): SerializedError => {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line no-param-reassign\n error[seen as keyof Error] = undefined; // tag to prevent re-looking at this\n\n const protoError = Object.create(ErrorProto as object) as SerializedError;\n\n protoError.name = Object.prototype.toString.call(error.constructor) === \"[object Function]\" ? error.constructor.name : error.name;\n protoError.message = error.message;\n protoError.stack = error.stack;\n\n if (Array.isArray((error as AggregateError).errors)) {\n protoError.aggregateErrors = (error as AggregateError).errors.map((error_: AggregateError | Error) => errorWithCauseSerializer(error_, options));\n }\n\n // Handle aggregate errors\n if ((error as CauseError).cause instanceof Error && !Object.prototype.hasOwnProperty.call((error as CauseError).cause, seen as PropertyKey)) {\n protoError.cause = errorWithCauseSerializer((error as CauseError).cause, options);\n }\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const key in error) {\n // eslint-disable-next-line security/detect-object-injection\n if (protoError[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value = error[key as keyof Error] as any;\n\n if (value instanceof Error) {\n if (!Object.prototype.hasOwnProperty.call(value, seen as PropertyKey)) {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = errorWithCauseSerializer(value, options);\n }\n } else if (typeof value === \"function\") {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = \"[Function: \" + (value.name || \"anonymous\");\n } else {\n // Gracefully handle non-configurable errors like `DOMException`.\n try {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = value;\n } catch {\n /* empty */\n }\n }\n }\n }\n\n // eslint-disable-next-line no-param-reassign,@typescript-eslint/no-dynamic-delete\n delete error[seen as unknown as keyof Error]; // clean up tag in case err is serialized again later\n\n protoError.raw = error;\n\n return protoError;\n};\n","import type { Meta, Processor } from \"../../types\";\nimport type { SerializedError } from \"./error-proto\";\nimport { errorWithCauseSerializer } from \"./error-with-cause-serializer\";\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace VisulimaPail {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface CustomMeta<L> {\n error: SerializedError | undefined;\n }\n }\n}\n\nexport class ErrorProcessor<L extends string = never> implements Processor<L> {\n private readonly _options: { maxDepth: number; useToJSON: boolean };\n\n public constructor(options: { maxDepth?: number; useToJSON?: boolean } = {}) {\n this._options = {\n maxDepth: Number.POSITIVE_INFINITY,\n useToJSON: true,\n ...options,\n };\n }\n\n public process(meta: Meta<L>): Meta<L> {\n if (meta.error) {\n // eslint-disable-next-line no-param-reassign\n meta.error = errorWithCauseSerializer(meta.error, this._options);\n }\n\n return meta;\n }\n}\n"]}
@@ -1,9 +0,0 @@
1
- import { a as a$1 } from './chunk-AFMDCM5W.js';
2
- import { b, c as c$1, a } from './chunk-NF47XQ47.js';
3
- import { configure } from 'safe-stable-stringify';
4
-
5
- var L=class{log(e){let{context:r=[],message:t,type:o}=e;a$1(o.level)(t,...r);}};var v=s=>s===void 0?[]:Array.isArray(s)?s:[s];var x=(s,e)=>{let r={...s};return Object.keys(e).forEach(t=>{r[t]={...r[t],...e[t]};}),r};var E=(s,e)=>s.length>=e?s:s.padEnd(e);var C={badge:void 0,context:void 0,error:void 0,label:void 0,message:void 0,prefix:void 0,repeated:void 0,scope:void 0,suffix:void 0},y=class{timersMap;countMap;seqTimers;lastLog;logLevels;disabled;scopeName;types;longestLabel;processors;generalLogLevel;reporters;throttle;throttleMin;stringify;groups;startTimerMessage;endTimerMessage;rawReporter;constructor(e){this.throttle=e.throttle??1e3,this.throttleMin=e.throttleMin??5,this.stringify=configure({strict:!0}),this.startTimerMessage=e.messages?.timerStart??"Initialized timer...",this.endTimerMessage=e.messages?.timerEnd??"Timer run for:",this.types=x(b,e.types??{}),this.longestLabel=c$1(this.types),this.logLevels={...a,...e.logLevels},this.generalLogLevel=this._normalizeLogLevel(e.logLevel),this.reporters=new Set,this.processors=new Set,this.disabled=e.disabled??!1,this.scopeName=v(e.scope).filter(Boolean),this.timersMap=new Map,this.countMap=new Map,this.groups=[],this.seqTimers=new Set;for(let r in this.types)this[r]=this._logger.bind(this,r,!1);this.lastLog={},Array.isArray(e.reporters)&&this.registerReporters(e.reporters),this.rawReporter=this.extendReporter(e.rawReporter??new L),Array.isArray(e.processors)&&this.registerProcessors(e.processors);}wrapConsole(){for(let e in this.types)console["__"+e]||(console["__"+e]=console[e]),console[e]=this[e].log;}restoreConsole(){for(let e in this.types)console["__"+e]&&(console[e]=console["__"+e],delete console["__"+e]);}wrapException(){process.on("uncaughtException",e=>{this.error(e);}),process.on("unhandledRejection",e=>{this.error(e);});}disable(){this.disabled=!0;}enable(){this.disabled=!1;}isEnabled(){return !this.disabled}scope(...e){if(e.length===0)throw new Error("No scope name was defined.");return this.scopeName=e.flat(),this}unscope(){this.scopeName=[];}time(e="default"){this.seqTimers.has(e)?this._logger("warn",!1,{message:"Timer '"+e+"' already exists",prefix:e}):(this.seqTimers.add(e),this.timersMap.set(e,Date.now()),this._logger("start",!1,{message:this.startTimerMessage,prefix:e}));}timeLog(e,...r){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let t=Date.now()-this.timersMap.get(e);this._logger("info",!1,{context:r,message:t<1e3?t+" ms":(t/1e3).toFixed(2)+" s",prefix:e});}else this._logger("warn",!1,{context:r,message:"Timer not found",prefix:e});}timeEnd(e){if(!e&&this.seqTimers.size>0&&(e=[...this.seqTimers].pop()),e&&this.timersMap.has(e)){let r=Date.now()-this.timersMap.get(e);this.timersMap.delete(e),this._logger("stop",!1,{message:this.endTimerMessage+" "+(r<1e3?r+" ms":(r/1e3).toFixed(2)+" s"),prefix:e});}}group(e="console.group"){typeof window>"u"?console.group(e):this.groups.push(e);}groupEnd(){typeof window>"u"?console.groupEnd():this.groups.pop();}count(e="default"){let r=this.countMap.get(e)??0;this.countMap.set(e,r+1),this._logger("log",!1,{message:e+": "+(r+1),prefix:e});}countReset(e="default"){this.countMap.has(e)?this.countMap.delete(e):this._logger("warn",!1,{message:"Count for "+e+" does not exist",prefix:e});}clear(){console.clear();}raw(e,...r){this.disabled||this._logger("log",!0,{context:r,message:e});}extendReporter(e){return typeof e.setLoggerTypes=="function"&&e.setLoggerTypes(this.types),typeof e.setStringify=="function"&&e.setStringify(this.stringify),e}registerReporters(e){for(let r of e)this.reporters.add(this.extendReporter(r));}_report(e,r){if(r)this.rawReporter.log(Object.freeze(e));else for(let t of this.reporters)t.log(Object.freeze(e));}registerProcessors(e){for(let r of e)typeof r.setStringify=="function"&&r.setStringify(this.stringify),this.processors.add(r);}_normalizeLogLevel(e){return e&&this.logLevels[e]?e:"debug"}_buildMeta(e,r,...t){let o={...C};if(o.type={level:r.logLevel,name:e},o.groups=this.groups,o.scope=this.scopeName,o.date=new Date,t.length===1&&typeof t[0]=="object"&&t[0]!==null)if(t[0]instanceof Error)o.error=t[0];else if("message"in t[0]){let{context:i,message:d,prefix:f,suffix:n}=t[0];i&&(o.context=i),f&&(o.prefix=f),n&&(o.suffix=n),o.message=d;}else o.message=t[0];else t.length>1&&typeof t[0]=="string"?(o.message=t[0],o.context=t.slice(1)):o.message=t[0];return r.logLevel==="trace"&&(o.traceError=new Error("Trace")),r.badge&&(o.badge=E(r.badge,r.badge.length+1)),r.label&&(o.label=r.label),o}_logger(e,r,...t){if(this.disabled)return;let o=this._normalizeLogLevel(this.types[e].logLevel);if(this.logLevels[o]>=this.logLevels[this.generalLogLevel]){let i=this._buildMeta(e,this.types[e],...t),d=(n=!1)=>{let l=(this.lastLog.count||0)-this.throttleMin;if(this.lastLog.object&&l>0){let u={...this.lastLog.object};l>1&&(u.repeated=l),this._report(u,r),this.lastLog.count=1;}if(n){for(let u of this.processors)i={...u.process(i)};this.lastLog.object=i,this._report(i,r);}};clearTimeout(this.lastLog.timeout);let f=this.lastLog.time&&i.date?new Date(i.date).getTime()-this.lastLog.time.getTime():0;if(this.lastLog.time=new Date(i.date),f<this.throttle)try{let n=JSON.stringify([i.label,i.scope,i.type,i.message,i.prefix,i.suffix,i.context]),l=this.lastLog.serialized===n;if(this.lastLog.serialized=n,l&&(this.lastLog.count=(this.lastLog.count||0)+1,this.lastLog.count>this.throttleMin)){this.lastLog.timeout=setTimeout(d,this.throttle);return}}catch{}d(!0);}}},Y=y;var g=Symbol("circular-reference-tag"),m=Symbol("raw-error-ref"),M=Object.create({},{aggregateErrors:{enumerable:!0,value:void 0,writable:!0},cause:{enumerable:!0,value:void 0,writable:!0},code:{enumerable:!0,value:void 0,writable:!0},message:{enumerable:!0,value:void 0,writable:!0},name:{enumerable:!0,value:void 0,writable:!0},raw:{enumerable:!1,get(){return this[m]},set(s){this[m]=s;}},stack:{enumerable:!0,value:void 0,writable:!0}});Object.defineProperty(M,m,{value:{},writable:!0});var R=M;var c=(s,e={})=>{s[g]=void 0;let r=Object.create(R);r.name=Object.prototype.toString.call(s.constructor)==="[object Function]"?s.constructor.name:s.name,r.message=s.message,r.stack=s.stack,Array.isArray(s.errors)&&(r.aggregateErrors=s.errors.map(t=>c(t,e))),s.cause instanceof Error&&!Object.prototype.hasOwnProperty.call(s.cause,g)&&(r.cause=c(s.cause,e));for(let t in s)if(r[t]===void 0){let o=s[t];if(o instanceof Error)Object.prototype.hasOwnProperty.call(o,g)||(r[t]=c(o,e));else if(typeof o=="function")r[t]="[Function: "+(o.name||"anonymous");else try{r[t]=o;}catch{}}return delete s[g],r.raw=s,r};var S=class{_options;constructor(e={}){this._options={maxDepth:Number.POSITIVE_INFINITY,useToJSON:!0,...e};}process(e){return e.error&&(e.error=c(e.error,this._options)),e}};
6
-
7
- export { y as a, Y as b, S as c };
8
- //# sourceMappingURL=out.js.map
9
- //# sourceMappingURL=chunk-576JQ6DN.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/pail.browser.ts","../src/reporter/raw/raw.browser.ts","../src/util/arrayify.ts","../src/util/merge-types.ts","../src/util/pad-end.ts","../src/processor/error/error-proto.ts","../src/processor/error/error-with-cause-serializer.ts","../src/processor/error/error-processor.ts"],"names":["stringifyConfigure","RawReporter","meta","context","message","type","writeConsoleLogBasedOnLevel","arrayify","x","mergeTypes","standard","custom","types","padEnd","string_","targetLength","EMPTY_META","PailBrowserImpl","options","LOG_TYPES","getLongestLabel","EXTENDED_RFC_5424_LOG_LEVELS","error","name","label","data","span","current","arguments_","reporter","reporters","raw","processors","processor","level","typeName","prefix","suffix","messageObject","logLevel","resolveLog","newLog","repeated","lastMeta","diffTime","serializedLog","isSameLog","PailBrowser","seen","rawSymbol","errorProto","value","ErrorProto","errorWithCauseSerializer","protoError","error_","key","ErrorProcessor"],"mappings":"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","sourcesContent":["import type { stringify } from \"safe-stable-stringify\";\nimport { configure as stringifyConfigure } from \"safe-stable-stringify\";\n\nimport { EXTENDED_RFC_5424_LOG_LEVELS, LOG_TYPES } from \"./constants\";\nimport { RawReporter } from \"./reporter/raw/raw.browser\";\nimport type {\n ConstructorOptions,\n DefaultLogTypes,\n ExtendedRfc5424LogLevels,\n LiteralUnion,\n LoggerConfiguration,\n LoggerFunction,\n LoggerTypesAwareReporter,\n LoggerTypesConfig,\n Message,\n Meta,\n Primitive,\n Processor,\n Reporter,\n StringifyAwareProcessor,\n StringifyAwareReporter,\n} from \"./types\";\nimport { arrayify } from \"./util/arrayify\";\nimport { getLongestLabel } from \"./util/get-longest-label\";\nimport { mergeTypes } from \"./util/merge-types\";\nimport { padEnd } from \"./util/pad-end\";\n\nconst EMPTY_META = {\n badge: undefined,\n context: undefined,\n error: undefined,\n label: undefined,\n message: undefined,\n prefix: undefined,\n repeated: undefined,\n scope: undefined,\n suffix: undefined,\n};\n\nexport class PailBrowserImpl<T extends string = never, L extends string = never> {\n protected timersMap: Map<string, number>;\n\n protected countMap: Map<string, number>;\n\n protected seqTimers: Set<string>;\n\n protected readonly lastLog: {\n count?: number;\n object?: Meta<L>;\n serialized?: string;\n time?: Date;\n timeout?: ReturnType<typeof setTimeout>;\n };\n\n protected readonly logLevels: Record<string, number>;\n\n protected disabled: boolean;\n\n protected scopeName: string[];\n\n protected readonly types: LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n protected readonly longestLabel: string;\n\n protected readonly processors: Set<Processor<L>>;\n\n protected readonly generalLogLevel: LiteralUnion<ExtendedRfc5424LogLevels, L>;\n\n protected reporters: Set<Reporter<L>>;\n\n protected readonly throttle: number;\n\n protected readonly throttleMin: number;\n\n protected readonly stringify: typeof stringify;\n\n protected groups: string[];\n\n protected readonly startTimerMessage: string;\n\n protected readonly endTimerMessage: string;\n\n protected rawReporter: Reporter<L>;\n\n public constructor(options: ConstructorOptions<T, L>) {\n this.throttle = options.throttle ?? 1000;\n this.throttleMin = options.throttleMin ?? 5;\n\n this.stringify = stringifyConfigure({\n strict: true,\n });\n\n this.startTimerMessage = options.messages?.timerStart ?? \"Initialized timer...\";\n this.endTimerMessage = options.messages?.timerEnd ?? \"Timer run for:\";\n this.types = mergeTypes<L, T>(LOG_TYPES, (options.types ?? {}) as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>);\n this.longestLabel = getLongestLabel<L, T>(this.types);\n\n this.logLevels = { ...EXTENDED_RFC_5424_LOG_LEVELS, ...options.logLevels };\n this.generalLogLevel = this._normalizeLogLevel(options.logLevel);\n\n this.reporters = new Set();\n this.processors = new Set();\n\n this.disabled = options.disabled ?? false;\n\n this.scopeName = arrayify(options.scope).filter(Boolean) as string[];\n\n this.timersMap = new Map();\n this.countMap = new Map();\n\n this.groups = [];\n\n this.seqTimers = new Set();\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax,guard-for-in\n for (const type in this.types) {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line security/detect-object-injection\n this[type] = this._logger.bind(this, type as T, false);\n }\n\n // Track of last log\n this.lastLog = {};\n\n if (Array.isArray(options.reporters)) {\n this.registerReporters(options.reporters);\n }\n\n this.rawReporter = this.extendReporter(options.rawReporter ?? new RawReporter<L>());\n\n if (Array.isArray(options.processors)) {\n this.registerProcessors(options.processors);\n }\n }\n\n public wrapConsole(): void {\n // eslint-disable-next-line guard-for-in,no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Backup original value\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if (!(console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[\"__\" + type] = (console as any)[type];\n }\n // Override\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (this as unknown as PailBrowserImpl<T, L>)[type as keyof PailBrowserImpl<T, L>].log;\n }\n }\n\n public restoreConsole(): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const type in this.types) {\n // Restore if backup is available\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n if ((console as any)[\"__\" + type]) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,security/detect-object-injection\n (console as any)[type] = (console as any)[\"__\" + type];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any,@typescript-eslint/no-dynamic-delete\n delete (console as any)[\"__\" + type];\n }\n }\n }\n\n public wrapException(): void {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"uncaughtException\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n process.on(\"unhandledRejection\", (error: any) => {\n // @TODO: Fix typings\n // @ts-expect-error - dynamic property\n (this as unknown as PailBrowserImpl<T, L>).error(error);\n });\n }\n\n /**\n * Disables logging\n */\n public disable(): void {\n this.disabled = true;\n }\n\n /**\n * Enables logging\n */\n public enable(): void {\n this.disabled = false;\n }\n\n public isEnabled(): boolean {\n return !this.disabled;\n }\n\n public scope<N extends string = T>(...name: string[]): PailBrowserType<N, L> {\n if (name.length === 0) {\n throw new Error(\"No scope name was defined.\");\n }\n\n this.scopeName = name.flat();\n\n return this as unknown as PailBrowserType<N, L>;\n }\n\n public unscope(): void {\n this.scopeName = [];\n }\n\n public time(label = \"default\"): void {\n if (this.seqTimers.has(label)) {\n this._logger(\"warn\", false, {\n message: \"Timer '\" + label + \"' already exists\",\n prefix: label,\n });\n } else {\n this.seqTimers.add(label);\n this.timersMap.set(label, Date.now());\n\n this._logger(\"start\", false, {\n message: this.startTimerMessage,\n prefix: label,\n });\n }\n }\n\n public timeLog(label?: string, ...data: unknown[]): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this._logger(\"info\", false, {\n context: data,\n message: span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\",\n prefix: label,\n });\n } else {\n this._logger(\"warn\", false, {\n context: data,\n message: \"Timer not found\",\n prefix: label,\n });\n }\n }\n\n public timeEnd(label?: string): void {\n if (!label && this.seqTimers.size > 0) {\n // eslint-disable-next-line no-param-reassign\n label = [...this.seqTimers].pop();\n }\n\n if (label && this.timersMap.has(label)) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const span = Date.now() - this.timersMap.get(label)!;\n\n this.timersMap.delete(label);\n\n this._logger(\"stop\", false, {\n message: this.endTimerMessage + \" \" + (span < 1000 ? span + \" ms\" : (span / 1000).toFixed(2) + \" s\"),\n prefix: label,\n });\n }\n }\n\n public group(label = \"console.group\"): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.group(label);\n } else {\n this.groups.push(label);\n }\n }\n\n public groupEnd(): void {\n if (typeof window === \"undefined\") {\n // eslint-disable-next-line no-console\n console.groupEnd();\n } else {\n this.groups.pop();\n }\n }\n\n public count(label = \"default\"): void {\n const current = this.countMap.get(label) ?? 0;\n\n this.countMap.set(label, current + 1);\n\n this._logger(\"log\", false, {\n message: label + \": \" + (current + 1),\n prefix: label,\n });\n }\n\n public countReset(label = \"default\"): void {\n if (this.countMap.has(label)) {\n this.countMap.delete(label);\n } else {\n this._logger(\"warn\", false, {\n message: \"Count for \" + label + \" does not exist\",\n prefix: label,\n });\n }\n }\n\n // eslint-disable-next-line class-methods-use-this\n public clear(): void {\n // eslint-disable-next-line no-console\n console.clear();\n }\n\n public raw(message: string, ...arguments_: unknown[]): void {\n if (this.disabled) {\n return;\n }\n\n this._logger(\"log\", true, {\n context: arguments_,\n message,\n });\n }\n\n protected extendReporter(reporter: Reporter<L>): Reporter<L> {\n if (typeof (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes === \"function\") {\n (reporter as LoggerTypesAwareReporter<T, L>).setLoggerTypes(this.types);\n }\n\n if (typeof (reporter as StringifyAwareReporter<L>).setStringify === \"function\") {\n (reporter as StringifyAwareReporter<L>).setStringify(this.stringify);\n }\n\n return reporter;\n }\n\n protected registerReporters(reporters: Reporter<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of reporters) {\n this.reporters.add(this.extendReporter(reporter));\n }\n }\n\n private _report(meta: Meta<L>, raw: boolean): void {\n if (raw) {\n this.rawReporter.log(Object.freeze(meta));\n } else {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const reporter of this.reporters) {\n reporter.log(Object.freeze(meta));\n }\n }\n }\n\n private registerProcessors(processors: Processor<L>[]): void {\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of processors) {\n if (typeof (processor as StringifyAwareProcessor<L>).setStringify === \"function\") {\n (processor as StringifyAwareProcessor<L>).setStringify(this.stringify);\n }\n\n this.processors.add(processor as Processor<L>);\n }\n }\n\n private _normalizeLogLevel(level: LiteralUnion<ExtendedRfc5424LogLevels, L> | undefined): LiteralUnion<ExtendedRfc5424LogLevels, L> {\n // eslint-disable-next-line security/detect-object-injection\n return level && this.logLevels[level] ? level : \"debug\";\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _buildMeta(typeName: string, type: Partial<LoggerConfiguration<L>>, ...arguments_: any[]): Meta<L> {\n const meta = { ...EMPTY_META } as Meta<L>;\n\n meta.type = {\n level: type.logLevel as LiteralUnion<ExtendedRfc5424LogLevels, L>,\n name: typeName,\n };\n\n meta.groups = this.groups;\n meta.scope = this.scopeName;\n meta.date = new Date();\n\n if (arguments_.length === 1 && typeof arguments_[0] === \"object\" && arguments_[0] !== null) {\n if (arguments_[0] instanceof Error) {\n // eslint-disable-next-line prefer-destructuring\n meta.error = arguments_[0];\n } else if (\"message\" in arguments_[0]) {\n const { context, message, prefix, suffix } = arguments_[0] as Message;\n\n if (context) {\n meta.context = context;\n }\n\n if (prefix) {\n meta.prefix = prefix;\n }\n\n if (suffix) {\n meta.suffix = suffix;\n }\n\n meta.message = message;\n } else {\n meta.message = arguments_[0] as Primitive | ReadonlyArray<unknown> | Record<PropertyKey, unknown>;\n }\n } else if (arguments_.length > 1 && typeof arguments_[0] === \"string\") {\n meta.message = arguments_[0] as string;\n meta.context = arguments_.slice(1);\n } else {\n // eslint-disable-next-line prefer-destructuring\n meta.message = arguments_[0];\n }\n\n if (type.logLevel === \"trace\") {\n meta.traceError = new Error(\"Trace\");\n }\n\n if (type.badge) {\n meta.badge = padEnd(type.badge, type.badge.length + 1);\n }\n\n if (type.label) {\n meta.label = type.label;\n }\n\n return meta;\n }\n\n // eslint-disable-next-line sonarjs/cognitive-complexity,@typescript-eslint/no-explicit-any\n private _logger(type: LiteralUnion<DefaultLogTypes, T>, raw: boolean, ...messageObject: any[]): void {\n if (this.disabled) {\n return;\n }\n\n // eslint-disable-next-line security/detect-object-injection\n const logLevel = this._normalizeLogLevel(this.types[type].logLevel);\n\n // eslint-disable-next-line security/detect-object-injection\n if ((this.logLevels[logLevel] as number) >= (this.logLevels[this.generalLogLevel] as number)) {\n // eslint-disable-next-line security/detect-object-injection\n let meta = this._buildMeta(type, this.types[type], ...messageObject);\n\n /**\n * @param newLog false if the throttle expired and we don't want to log a duplicate\n */\n const resolveLog = (newLog = false) => {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n const repeated = (this.lastLog.count || 0) - this.throttleMin;\n\n if (this.lastLog.object && repeated > 0) {\n const lastMeta = { ...this.lastLog.object };\n\n if (repeated > 1) {\n lastMeta.repeated = repeated;\n }\n\n this._report(lastMeta, raw);\n\n this.lastLog.count = 1;\n }\n\n if (newLog) {\n // Apply global processors\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const processor of this.processors) {\n meta = { ...processor.process(meta) };\n }\n\n this.lastLog.object = meta;\n\n this._report(meta, raw);\n }\n };\n\n clearTimeout(this.lastLog.timeout);\n\n const diffTime = this.lastLog.time && meta.date ? new Date(meta.date as Date | string).getTime() - this.lastLog.time.getTime() : 0;\n\n this.lastLog.time = new Date(meta.date as Date | string);\n\n if (diffTime < this.throttle) {\n try {\n const serializedLog = JSON.stringify([meta.label, meta.scope, meta.type, meta.message, meta.prefix, meta.suffix, meta.context]);\n const isSameLog = this.lastLog.serialized === serializedLog;\n\n this.lastLog.serialized = serializedLog;\n\n if (isSameLog) {\n // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing\n this.lastLog.count = (this.lastLog.count || 0) + 1;\n\n if (this.lastLog.count > this.throttleMin) {\n // Auto-resolve when throttle is timed out\n this.lastLog.timeout = setTimeout(resolveLog, this.throttle);\n\n return; // SPAM!\n }\n }\n } catch {\n // Circular References\n }\n }\n\n resolveLog(true);\n }\n }\n}\n\nexport type PailBrowserType<T extends string = never, L extends string = never> = PailBrowserImpl<T, L> &\n Record<DefaultLogTypes, LoggerFunction> &\n Record<T, LoggerFunction> &\n (new<TC extends string = never, LC extends string = never>(options?: ConstructorOptions<TC, LC>) => PailBrowserType<TC, LC>);\n\nexport type PailConstructor<T extends string = never, L extends string = never> = new (options?: ConstructorOptions<T, L>) => PailBrowserType<T, L>;\n\nexport const PailBrowser = PailBrowserImpl as unknown as PailBrowserType;\n","import type { ReadonlyMeta, Reporter } from \"../../types\";\nimport { writeConsoleLogBasedOnLevel } from \"../../util/write-console-log\";\n\nexport class RawReporter<L extends string = never> implements Reporter<L> {\n // eslint-disable-next-line class-methods-use-this\n public log(meta: ReadonlyMeta<L>): void {\n const { context = [], message, type } = meta;\n\n const consoleLogFunction = writeConsoleLogBasedOnLevel(type.level);\n\n consoleLogFunction(message, ...context);\n }\n}\n","export const arrayify = <T>(x: T | T[]): T[] => {\n if (x === undefined) {\n return [] as T[];\n }\n\n return Array.isArray(x) ? x : ([x] as T[]);\n};\n","import type { DefaultLoggerTypes, DefaultLogTypes, LiteralUnion, LoggerTypesConfig } from \"../types\";\n\nexport const mergeTypes = <L extends string, T extends string>(\n standard: DefaultLoggerTypes<L>,\n custom: LoggerTypesConfig<T, L>,\n): LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L> => {\n const types = { ...standard } as LoggerTypesConfig<LiteralUnion<DefaultLogTypes, T>, L>;\n\n Object.keys(custom).forEach((type) => {\n types[type as T] = { ...types[type as T], ...custom[type as T] };\n });\n\n return types;\n};\n","export const padEnd = (string_: string, targetLength: number): string => {\n if (string_.length >= targetLength) {\n return string_;\n }\n\n return string_.padEnd(targetLength);\n};\n","// eslint-disable-next-line import/exports-last\nexport const seen = Symbol(\"circular-reference-tag\");\n\n// eslint-disable-next-line import/exports-last,import/no-unused-modules\nexport const rawSymbol = Symbol(\"raw-error-ref\");\n\nconst errorProto = Object.create(\n {},\n {\n aggregateErrors: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n cause: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n code: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n message: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n name: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n raw: {\n enumerable: false,\n get() {\n // eslint-disable-next-line security/detect-object-injection\n return this[rawSymbol];\n },\n set(value) {\n // eslint-disable-next-line security/detect-object-injection\n this[rawSymbol] = value;\n },\n },\n stack: {\n enumerable: true,\n value: undefined,\n writable: true,\n },\n },\n) as SerializedError;\n\nObject.defineProperty(errorProto, rawSymbol, {\n value: {},\n writable: true,\n});\n\nexport const ErrorProto = errorProto;\n\nexport type SerializedError<ErrorType = Error> = Record<PropertyKey, unknown> & {\n aggregateErrors?: SerializedError<ErrorType>[];\n cause?: unknown;\n code?: string;\n message: string;\n name: string;\n raw?: ErrorType;\n stack?: string;\n};\n","import type { SerializedError } from \"./error-proto\";\nimport { ErrorProto, seen } from \"./error-proto\";\n\ntype CauseError = Error & {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cause: any;\n};\n\ntype Options = {\n readonly maxDepth?: number;\n readonly useToJSON?: boolean;\n};\n\n/**\n * Serialize an `Error` object into a plain object.\n *\n * - Non-error values are passed through.\n * - Custom properties are preserved.\n * - Buffer properties are replaced with `[object Buffer]`.\n * - Circular references are handled.\n * - If the input object has a `.toJSON()` method, then it's called instead of serializing the object's properties.\n * - It's up to `.toJSON()` implementation to handle circular references and enumerability of the properties.\n */\n// eslint-disable-next-line sonarjs/cognitive-complexity\nexport const errorWithCauseSerializer = (error: AggregateError | Error, options: Options = {}): SerializedError => {\n // @ts-expect-error - dynamic property\n // eslint-disable-next-line no-param-reassign\n error[seen as keyof Error] = undefined; // tag to prevent re-looking at this\n\n const protoError = Object.create(ErrorProto as object) as SerializedError;\n\n protoError.name = Object.prototype.toString.call(error.constructor) === \"[object Function]\" ? error.constructor.name : error.name;\n protoError.message = error.message;\n protoError.stack = error.stack;\n\n if (Array.isArray((error as AggregateError).errors)) {\n protoError.aggregateErrors = (error as AggregateError).errors.map((error_: AggregateError | Error) => errorWithCauseSerializer(error_, options));\n }\n\n // Handle aggregate errors\n if ((error as CauseError).cause instanceof Error && !Object.prototype.hasOwnProperty.call((error as CauseError).cause, seen as PropertyKey)) {\n protoError.cause = errorWithCauseSerializer((error as CauseError).cause, options);\n }\n\n // eslint-disable-next-line no-loops/no-loops,no-restricted-syntax\n for (const key in error) {\n // eslint-disable-next-line security/detect-object-injection\n if (protoError[key] === undefined) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const value = error[key as keyof Error] as any;\n\n if (value instanceof Error) {\n if (!Object.prototype.hasOwnProperty.call(value, seen as PropertyKey)) {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = errorWithCauseSerializer(value, options);\n }\n } else if (typeof value === \"function\") {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = \"[Function: \" + (value.name || \"anonymous\");\n } else {\n // Gracefully handle non-configurable errors like `DOMException`.\n try {\n // eslint-disable-next-line security/detect-object-injection\n protoError[key] = value;\n } catch {\n /* empty */\n }\n }\n }\n }\n\n // eslint-disable-next-line no-param-reassign,@typescript-eslint/no-dynamic-delete\n delete error[seen as unknown as keyof Error]; // clean up tag in case err is serialized again later\n\n protoError.raw = error;\n\n return protoError;\n};\n","import type { Meta, Processor } from \"../../types\";\nimport type { SerializedError } from \"./error-proto\";\nimport { errorWithCauseSerializer } from \"./error-with-cause-serializer\";\n\ndeclare global {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n namespace VisulimaPail {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n interface CustomMeta<L> {\n error: SerializedError | undefined;\n }\n }\n}\n\nexport class ErrorProcessor<L extends string = never> implements Processor<L> {\n private readonly _options: { maxDepth: number; useToJSON: boolean };\n\n public constructor(options: { maxDepth?: number; useToJSON?: boolean } = {}) {\n this._options = {\n maxDepth: Number.POSITIVE_INFINITY,\n useToJSON: true,\n ...options,\n };\n }\n\n public process(meta: Meta<L>): Meta<L> {\n if (meta.error) {\n // eslint-disable-next-line no-param-reassign\n meta.error = errorWithCauseSerializer(meta.error, this._options);\n }\n\n return meta;\n }\n}\n"]}