@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
1 lines • 7.24 kB
Source Map (JSON)
{"version":3,"sources":["../../../src/shared/logging/logger.ts"],"names":["createLogger","basicLogger","Object","freeze","logEvents","arg","createNoOpLogger","_arg","stream","defaultLogger","splitFirstLineAndBody","text","test","firstLineAndRest","result","exec","determineTagsInjectionPoint","args","emptyOrWhitespace","injectAt","findIndex","beforeArgs","slice","injectAtArg","afterArgs","firstLine","rest","appendTags","tags","before","after","isTaggedLogger","logger","taggedLoggerFactory","parent","startWith","locked","log","warn","error","withTags","createTaggedLogger","createNoOpTaggedLogger"],"mappings":"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","sourcesContent":["import {\n logEvents,\n LogEventsArg,\n logEventsParams,\n createTaggedLogEvents,\n TaggedLogEventsOperator,\n} from './logEvents';\nimport {\n createNoOpBasicLogger,\n BasicLogger,\n defaultBasicLogger,\n} from './basicLogger';\nimport { Observable } from 'rxjs';\n\nexport function createLogger(basicLogger = defaultBasicLogger()) {\n return Object.freeze({\n ...basicLogger,\n logEvents: <T, Y>(arg: LogEventsArg<T, Y>) =>\n logEvents<T, Y>(logEventsParams(arg, basicLogger)),\n });\n}\n\nexport function createNoOpLogger(): Logger {\n const basicLogger = createNoOpBasicLogger();\n return Object.freeze({\n ...basicLogger,\n logEvents: <T, Y>(_arg: LogEventsArg<T, Y>) => (stream: Observable<T>) =>\n stream,\n });\n}\n\nexport const defaultLogger = createLogger();\n\nexport type Logger = ReturnType<typeof createLogger>;\n\nexport type LogArgs = Parameters<Logger['log']>;\n\nexport type TaggedLogger = Logger &\n Readonly<{\n logEvents: TaggedLogEventsOperator;\n withTags: (...tags: unknown[]) => TaggedLogger;\n parent: BasicLogger;\n }>;\n\nfunction splitFirstLineAndBody(text: string) {\n // empty or whitespace only?\n if (/^\\s*$/u.test(text)) {\n return [text, ''];\n }\n\n const firstLineAndRest = /^(\\s*([^\\s\\n]+[^\\n]*)+)(.*)/u;\n\n const result = firstLineAndRest.exec(text);\n\n if (!result) {\n return [text, ''];\n }\n\n return [result[1], result[3]];\n}\n\nfunction determineTagsInjectionPoint(\n args: unknown[]\n): readonly [unknown[], unknown[]] {\n const emptyOrWhitespace = /^\\s*$/u;\n\n const injectAt = args.findIndex(arg => {\n if (typeof arg === 'string' && emptyOrWhitespace.test(arg)) {\n return false;\n }\n return true;\n });\n\n if (injectAt === -1) {\n return [args, [] as unknown[]] as const;\n }\n\n const beforeArgs = args.slice(0, injectAt);\n const injectAtArg = args[injectAt];\n const afterArgs = args.slice(injectAt + 1);\n\n if (typeof injectAtArg === 'string') {\n const [firstLine, rest] = splitFirstLineAndBody(injectAtArg);\n return [\n firstLine ? [...beforeArgs, firstLine] : beforeArgs,\n rest ? [rest, ...afterArgs] : afterArgs,\n ] as const;\n }\n\n return [beforeArgs, [injectAtArg, ...afterArgs]];\n}\n\nfunction appendTags(args: LogArgs, tags: unknown[]) {\n const [before, after] = determineTagsInjectionPoint(args);\n return [...before, ...tags, ...after];\n}\n\nfunction isTaggedLogger(logger: BasicLogger): logger is TaggedLogger {\n return (\n logger !== null &&\n typeof logger === 'object' &&\n 'withTags' in logger &&\n 'parent' in logger\n );\n}\n\nfunction taggedLoggerFactory(\n parent: BasicLogger,\n startWith: unknown[] = []\n): TaggedLogger {\n const locked = [...startWith];\n return Object.freeze({\n log: (...args) => {\n parent.log(...appendTags(args, locked));\n },\n warn: (...args) => {\n parent.warn(...appendTags(args, locked));\n },\n error: (...args) => {\n parent.error(...appendTags(args, locked));\n },\n withTags: (...args) => {\n return taggedLoggerFactory(parent, [...locked, ...args]);\n },\n logEvents: createTaggedLogEvents(startWith, parent),\n parent,\n });\n}\n\nexport function createTaggedLogger(\n tags: unknown[],\n parent?: BasicLogger\n): TaggedLogger {\n if (parent && isTaggedLogger(parent)) {\n return parent.withTags(...tags);\n }\n\n return taggedLoggerFactory(parent || defaultBasicLogger(), tags);\n}\n\nexport function createNoOpTaggedLogger() {\n return createTaggedLogger([], createNoOpLogger());\n}\n"],"file":"logger.js"}