@cmtlyt/logger
Version:
1 lines • 3.69 kB
JavaScript
;const __rslib_import_meta_url__="undefined"==typeof document?new(require("url".replace("",""))).URL("file:"+__filename).href:document.currentScript&&document.currentScript.src||new URL("main.js",document.baseURI).href;var __webpack_require__={};__webpack_require__.d=(e,t)=>{for(var r in t)__webpack_require__.o(t,r)&&!__webpack_require__.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},__webpack_require__.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),__webpack_require__.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var __webpack_exports__={};function normalizeEnableOutput(e){return null==e?()=>!0:"function"==typeof e?e:()=>e}function withResolvers(){let e={};return e.promise=new Promise((t,r)=>{e.resolve=t,e.reject=r}),e}function isPromise(e){return"object"==typeof e&&null!=e&&"function"==typeof e.then}function parseOutputAdapters(e,t){let r=e.outputAdapters.filter(Boolean).slice(),n=Array(r.length);return(async()=>{try{for(let e=0;e<r.length;e++){let t=r[e];if("function"==typeof t)n[e]=t;else if(isPromise(t)){let n=await t;if(isPromise(n))throw TypeError("outputAdapters must not be nested promise");r[e--]=n}else n[e]=e=>t[e]}t.resolve()}catch(e){t.reject(e)}})(),n}function normalizeOptions(e){let t=[],r=withResolvers();if(null==e.outputAdapters)t=[],r.resolve();else if(Array.isArray(e.outputAdapters))t=parseOutputAdapters(e,r);else throw TypeError("outputAdapters must be an array");return{options:{enableOutput:normalizeEnableOutput(e.enableOutput),outputAdapters:t,maxNestingDepth:e.maxNestingDepth||3,transform:e.transform||(()=>void 0),report:e.report||(()=>void 0)},readyPromise:r.promise}}function getOutputFunc(e,t){return(t.find(t=>"function"==typeof t(e))||(()=>null))(e)||(({type:e,messages:t})=>console.debug(e,...t))}__webpack_require__.r(__webpack_exports__),__webpack_require__.d(__webpack_exports__,{createLogger:()=>createLogger});const STATUS={pending:0,processing:1,skipping:2,initializing:4};function createLogCtrl(e){let t=new Map,r=new Set,n=STATUS.initializing;return{func:(o,{options:i})=>{let a=i.maxNestingDepth;if(t.has(o))return t.get(o);let p=null,s=(e,t)=>{let r={type:o,messages:e,isNestingCall:t>0,timestamp:Date.now()},n=i.transform(r)||{};i.report({...r,data:n});let a=!0;try{a=i.enableOutput({...r,data:n})}catch(e){console.error(e),a=!0}if(a&&p)return p({type:o,messages:e,transformData:n})},u=e=>{console.warn(e),i.enableOutput=()=>!1},_=async(...t)=>{if(n===STATUS.initializing&&(await e.catch(u).finally(()=>{n=STATUS.pending}),p=getOutputFunc(o,i.outputAdapters)),n&(STATUS.processing|STATUS.skipping))return n&STATUS.skipping?void getOutputFunc("warn",i.outputAdapters)({type:"warn",messages:[`最大嵌套深度 ${a} 已达到, 跳过调用, 请检查是否在 transform 和 report 中存在 logger 调用, 如果存在的话可以通过参数中的 isNestingCall 参数判断是否为嵌套调用`],transformData:{}}):void r.add(e=>s(t,e));n=STATUS.processing,s(t,0);for(let e=1;e<=a&&r.size;e++){let t=Array.from(r);r.clear(),e===a&&(n=STATUS.skipping),t.forEach(t=>{t(e)})}n=STATUS.pending,r.clear()},c=(...e)=>void _(...e);return t.set(o,c),c}}}function createLogger(e){let{options:t,readyPromise:r}=normalizeOptions(e||{}),n={options:t},o=createLogCtrl(r);return new Proxy({},{get:(e,t,r)=>Reflect.get(n,t,r)||o.func(t,n)})}for(var __rspack_i in exports.createLogger=__webpack_exports__.createLogger,__webpack_exports__)-1===["createLogger"].indexOf(__rspack_i)&&(exports[__rspack_i]=__webpack_exports__[__rspack_i]);Object.defineProperty(exports,"__esModule",{value:!0});