UNPKG

@alwatr/logger

Version:

Fancy colorful console debugger with custom scope written in tiny TypeScript, ES module.

8 lines (7 loc) 7.03 kB
{ "version": 3, "sources": ["../src/logger.ts"], "sourcesContent": ["import {packageTracer} from '@alwatr/package-tracer';\nimport {platformInfo} from '@alwatr/platform-info';\n\nimport type {AlwatrLogger} from './type.js';\n\n__dev_mode__: packageTracer.add(__package_name__, __package_version__);\n\nconst defaultDebugMode = /* #__PURE__ */ (() => {\n return (\n platformInfo.development ||\n (platformInfo.isCli ? Boolean(process.env.DEBUG) : typeof localStorage !== 'undefined' && localStorage.getItem('ALWATR_DEBUG') === '1')\n );\n})();\n\n/**\n * Color list storage for logger.\n */\nconst colorList = /* #__PURE__ */ (() =>\n platformInfo.isCli\n ? ['0;36', '0;35', '0;34', '0;33', '0;32'] // red and white omitted\n : [\n '#35b997',\n '#f05561',\n '#ee224a',\n '#91c13e',\n '#22af4b',\n '#f0e995',\n '#0fe995',\n '#0f89ca',\n '#08b9a5',\n '#fee851',\n '#ee573d',\n '#f9df30',\n '#1da2dc',\n '#f05123',\n '#ee2524',\n ])();\n\nlet _colorIndex = 0;\nconst _getNextColor = (): string => {\n const color = colorList[_colorIndex];\n _colorIndex++;\n if (_colorIndex >= colorList.length) {\n _colorIndex = 0;\n }\n return color;\n};\n\nconst _style = /* #__PURE__ */ (() => ({\n scope: platformInfo.isCli ? '\\x1b[{{color}}m' : 'color: {{color}};',\n reset: platformInfo.isCli ? '\\x1b[0m' : 'color: inherit;',\n}))();\n\nconst _keySection = /* #__PURE__ */ (() => (platformInfo.isCli ? '%s%s%s' : '%c%s%c'))();\n\nconst _sanitizeDomain = (domain: string): string => {\n domain = domain.trim();\n const first = domain.charAt(0);\n if (first !== '[' && first !== '{' && first !== '<') {\n domain = '[' + domain + ']';\n }\n return domain;\n};\n\n/**\n * Create a logger function for fancy console debug with custom scope.\n *\n * - **color** is optional and automatically select from internal fancy color list.\n * - **debug** is optional and automatically detect from localStorage `ALWATR_DEBUG` item or `process.env.ALWATR_DEBUG`\n *\n * Example:\n *\n * ```ts\n * import {createLogger} from 'https://esm.run/@alwatr/logger';\n * const logger = createLogger('logger/demo');\n * ```\n */\nexport const createLogger = (domain: string, debugMode = defaultDebugMode): AlwatrLogger => {\n const color = _getNextColor();\n const styleScope = _style.scope.replace('{{color}}', color);\n domain = _sanitizeDomain(domain);\n\n /**\n * Required logger object, accident, error always reported even when the devMode is false.\n */\n const requiredItems: AlwatrLogger = {\n debugMode,\n\n banner: platformInfo.isCli\n ? console.log.bind(console, `\\x1b[1;37;45m {{{ %s }}} ${_style.reset}`)\n : console.log.bind(\n console,\n '%c%s',\n 'font-size: 2rem; background-color: #5858e8; color: #fff; padding: 1rem 4rem; border-radius: 0.5rem;',\n ),\n\n accident: platformInfo.isCli\n ? console.warn.bind(console, `${styleScope}⚠️\\n%s\\x1b[33m.%s() Accident \\`%s\\`!${_style.reset}`, domain)\n : console.warn.bind(console, '%c%s%c.%s() Accident `%s`!', styleScope, domain, _style.reset),\n\n error: platformInfo.isCli\n ? console.error.bind(console, `${styleScope}❌\\n%s\\x1b[31m.%s() Error \\`%s\\`${_style.reset}\\n`, domain)\n : console.error.bind(console, '%c%s%c.%s() Error `%s`\\n', styleScope, domain, _style.reset),\n };\n\n if (!debugMode) {\n return requiredItems;\n }\n // else\n return {\n ...requiredItems,\n\n logProperty: console.debug.bind(console, _keySection + '.%s = %o;', styleScope, domain, _style.reset),\n\n logMethod: console.debug.bind(console, _keySection + '.%s();', styleScope, domain, _style.reset),\n\n logFileModule: console.debug.bind(console, _keySection + '/%s.js;', styleScope, domain, _style.reset),\n\n logMethodArgs: console.debug.bind(console, _keySection + '.%s(%o);', styleScope, domain, _style.reset),\n\n logMethodFull: console.debug.bind(console, _keySection + '.%s(%o) => %o', styleScope, domain, _style.reset),\n\n logStep: console.debug.bind(console, _keySection + '.%s() -> %s', styleScope, domain, _style.reset),\n\n logOther: console.debug.bind(console, _keySection, styleScope, domain, _style.reset),\n\n incident: platformInfo.isCli\n ? console.log.bind(console, `${styleScope}🚸\\n%s${_style.reset}.%s() Incident \\`%s\\`!${_style.reset}`, domain)\n : console.log.bind(console, '%c%s%c.%s() Incident `%s`!', styleScope, domain, 'color: orange;'),\n\n time: (label: string) => console.time(domain + '.' + label + ' duration time'),\n timeEnd: (label: string) => console.timeEnd(domain + '.' + label + ' duration time'),\n } as const;\n};\n"], "mappings": "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", "names": [] }