UNPKG

@aimee-blue/ab-service-kit

Version:
1 lines 11.7 kB
{"version":3,"sources":["../../../src/shared/logging/logEvents.ts"],"names":["isTagNotification","notification","isLogNotification","tagsFromLogOn","notifications","filter","logOnFromParam","on","Array","isArray","set","Set","entry","buildSimpleLog","paramsRaw","info","params","description","prefix","tags","logger","log","value","suffix","error","err","buildAuditLog","lastValue","logEventsParams","arg","defaultLogger","logEvents","project","logOn","observables","isObservable","operator","includes","length","pipe","stream","shared","taggedLogEventsFactory","startWith","fn","taggedlogEvents","withTags","extraTags","createTaggedLogEvents"],"mappings":"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","sourcesContent":["import { OperatorFunction, Observable, merge, isObservable, empty } from 'rxjs';\nimport { BasicLogger, defaultBasicLogger } from './basicLogger';\nimport {\n TagNotification,\n executeOnNotifications,\n NotificationInfo,\n} from '../notifications';\nimport { registerError } from '../registerError';\nimport { onLoggingAudit } from './loggingAuditAction';\nimport { mapTo, ignoreElements, publish } from 'rxjs/operators';\n\nexport type LogNotification = TagNotification | 'audit';\n\nexport interface ILogTextParams {\n prefix: string;\n tags?: unknown[];\n suffix?: unknown[];\n}\n\nexport type LogOn<K extends string = string> = Array<\n LogNotification | Observable<K>\n>;\n\nexport interface ILogStreamParamsCore<T, Y> extends ILogTextParams {\n on?: LogOn;\n project?: (stream: Observable<T>) => Observable<Y>;\n logger?: BasicLogger;\n}\n\nexport type LogTextParamsMap = Partial<Record<LogNotification, ILogTextParams>>;\n\nexport type LogStreamParams<T, Y> = ILogStreamParamsCore<T, Y> &\n LogTextParamsMap;\n\nfunction isTagNotification(\n notification: LogNotification\n): notification is TagNotification {\n return notification !== 'audit';\n}\n\nfunction isLogNotification(\n notification: LogNotification | Observable<string>\n): notification is TagNotification {\n return typeof notification === 'string';\n}\n\nfunction tagsFromLogOn(notifications: LogOn): TagNotification[] {\n return notifications.filter(isTagNotification);\n}\n\nfunction logOnFromParam(on?: LogOn): LogOn {\n if (Array.isArray(on)) {\n const set = new Set<LogNotification>(on.filter(isLogNotification));\n return [...set, ...on.filter(entry => !isLogNotification(entry))];\n } else {\n // default:\n return ['next', 'error', 'complete', 'subscribe', 'unsubscribe'];\n }\n}\n\nconst buildSimpleLog = <T, Y>(\n paramsRaw: LogStreamParams<T, Y> & { logger: BasicLogger }\n) => {\n return (info: NotificationInfo<T | Y, 'audit'>) => {\n const params = {\n ...paramsRaw,\n ...paramsRaw[info.notification],\n };\n\n try {\n const description = [\n params.prefix,\n `(${info.notification})`,\n ...(params.tags || []),\n ];\n\n switch (info.notification) {\n case 'next':\n params.logger.log(\n ...description,\n info.value,\n ...(params.suffix ?? [])\n );\n break;\n case 'error':\n params.logger.error(\n ...description,\n info.error,\n ...(params.suffix ?? [])\n );\n break;\n default:\n params.logger.log(...description, ...(params.suffix ?? []));\n break;\n }\n } catch (err) {\n registerError(err);\n params.logger.error('💥 Something bad happened when logging', err);\n }\n };\n};\n\nconst buildAuditLog = <T, Y>(\n paramsRaw: LogStreamParams<T, Y> & { logger: BasicLogger }\n) => (info: NotificationInfo<T | Y, 'audit'>) => {\n const params = {\n ...paramsRaw,\n ...paramsRaw[info.notification],\n };\n\n try {\n const description = [params.prefix, ...(params.tags || [])];\n\n switch (info.notification) {\n case 'audit':\n if (!info.lastValue) {\n break;\n }\n params.logger.log(\n ...description,\n 'last-observed:',\n info.lastValue,\n ...(params.suffix ?? [])\n );\n break;\n case 'unsubscribe':\n params.logger.log(\n ...description,\n 'last-observed:',\n info.lastValue,\n ...(params.suffix ?? [])\n );\n break;\n case 'next':\n params.logger.log(...description, info.value, ...(params.suffix ?? []));\n break;\n case 'error':\n params.logger.log(...description, info.error, ...(params.suffix ?? []));\n break;\n default:\n params.logger.log(...description, ...(params.suffix ?? []));\n break;\n }\n } catch (err) {\n registerError(err);\n params.logger.error('💥 Something bad happened when logging', err);\n }\n};\n\nexport type LogEventsArg<T, Y> = LogStreamParams<T, Y> | string;\n\nexport function logEventsParams<T, Y>(\n arg: LogEventsArg<T, Y>,\n defaultLogger = defaultBasicLogger()\n): LogStreamParams<T, Y> & { logger: BasicLogger } {\n return {\n logger: defaultLogger,\n ...(typeof arg === 'string'\n ? {\n prefix: arg,\n }\n : arg),\n };\n}\n\nexport function logEvents<T, Y>(\n paramsRaw: LogEventsArg<T, Y>\n): OperatorFunction<T, T> {\n const params = logEventsParams<T, Y>(paramsRaw);\n\n const project = params.project;\n const logOn = logOnFromParam(params.on);\n const tags = tagsFromLogOn(logOn);\n const observables = logOn.filter(isObservable) as Array<Observable<string>>;\n\n // When the triggering event is another observable we want to\n // log the latest value from source stream\n const operator =\n logOn.includes('audit') || observables.length > 0\n ? executeOnNotifications(\n [\n ...tags,\n (logOn.includes('audit') &&\n onLoggingAudit().pipe(mapTo('audit' as const))) ||\n empty(),\n ],\n buildAuditLog(params),\n params.logger\n )\n : executeOnNotifications(tags, buildSimpleLog(params), params.logger);\n\n if (!project) {\n return stream => stream.pipe(operator);\n } else {\n return stream =>\n stream.pipe(\n publish(shared =>\n merge(shared, shared.pipe(project, operator, ignoreElements()))\n )\n );\n }\n}\n\nexport type LogEventsOperator<T, Y> = (\n paramsRaw: LogEventsArg<T, Y>\n) => OperatorFunction<T, T>;\n\nfunction taggedLogEventsFactory(\n startWith: unknown[] = [],\n logger: BasicLogger = defaultBasicLogger(),\n fn = logEvents\n) {\n const tags = [...startWith];\n const taggedlogEvents = <T, Y>(paramsRaw: LogEventsArg<T, Y>) => {\n const params = logEventsParams(paramsRaw, logger);\n return fn<T, Y>({\n ...params,\n tags: [...(params.tags ?? []), ...tags],\n });\n };\n taggedlogEvents.withTags = (...extraTags: unknown[]) => {\n return taggedLogEventsFactory([...tags, ...extraTags], logger, fn);\n };\n return taggedlogEvents;\n}\n\nexport function createTaggedLogEvents(\n tags: unknown[],\n logger = defaultBasicLogger()\n) {\n return taggedLogEventsFactory(tags, logger);\n}\n\nexport type TaggedLogEventsOperator = ReturnType<typeof createTaggedLogEvents>;\n"],"file":"logEvents.js"}