{"_id":"@neodx/log","_rev":"20-120658f0328c94f9b4fb6ad2d5c97ac4","name":"@neodx/log","dist-tags":{"latest":"1.1.1"},"versions":{"0.1.0":{"name":"@neodx/log","version":"0.1.0","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.0","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues?q=is%3Aopen+is%3Aissue+label%3Ascope%3Alog"},"dist":{"shasum":"88a2d8ea1550dde6dff1ff0a082eaf2e20edcac7","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.0.tgz","fileCount":40,"integrity":"sha512-AsUI0hdsGVz0em0C4Di5VxVMJ0Hi3j0x88+gs5zMOH2Y6yA5sf7c3T82mRHr01djtN9DhW0a96EzkWb7L4YAtA==","signatures":[{"sig":"MEUCIQC1oWqHB/RTQV5kC1SBGwToG/fDDVIg5S9au4Jq81gFrAIgFcDuFU6wcfmD+ImK2lUsurP5nTZBSIXaDrzkzPB4exs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUE0LACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo7lg//Zva1G1Rx+pbvRJ2E4sv8aNfmQly9IjS5mh8azeF5hjIb6aRg\r\nAsMBVJtRrKeVArtO6iu7y9l6gVaAyjp7cE7Fx91H0GN1fq+EEnaxwZqNI2af\r\n5/ZPHF0/poI/1dMIcVy3OIkdrmwX4O3d53B1XabbpzlOmePNvl2wWGx83b43\r\nR3Z98YNV9XHyZmEe8eaqaiIldU3OlH3R0obL+Y/V5TIhA50tPohZPbb8HB1H\r\nM4OniXjEU3NksHocYq367b62ZRF+6ToWQ1XgXVcbUQDTnP0C7jPMeai7EYCn\r\nugAAwgZczMZXrlaYXkyy3ZBu76Uu7yUNhv1fKQIv408luj5xEUl8F7DO/S8w\r\nsog80wcjqu8yvoDwXAmHIOs0TsGEWG5+as51jKN5iHAnGvuLeCnBWlMz/n6Q\r\ngxX3/ggyfKdaGZKPIkPJVII8V85A8hsF+uJJrq2jVWFIDQ2Oe4QEO+Ih2FWO\r\nmawte7jD7Mr+ANumftTix3TZAYbYwYKBbaGE+fO3u/IBW9VqgcNrAMCAr3yM\r\ndli2qodLLaDj9lzkH/WjI7xg8SqrdyAVc0o0FBoNXDqhd/YUyP67pfBPPu69\r\nHBQio+CfHTAmPbXKbPKKe9BGIYMAyW0GsV2mxromBcv6LIz+Cp6JSetZybLy\r\nLY+4a7I4QQIuQY5O5L5ezdM6wp9WUlcvumc=\r\n=u+RU\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/browser.ts","src/node/index.ts","src/utils/index.ts"],"browser":"./dist/browser.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.cjs"}},"gitHead":"9b5b86c12154acbb66e339ac832630747ce54748","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework without ","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/std":"*","@neodx/colors":"*"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"0.2.1","tsx":"3.12.7","pino":"8.11.0","bunyan":"1.8.15","winston":"3.8.2","loglevel":"1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.0_1682984203023_0.650459422521211","host":"s3://npm-registry-packages"}},"0.1.1":{"name":"@neodx/log","version":"0.1.1","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.1","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues?q=is%3Aopen+is%3Aissue+label%3Ascope%3Alog"},"dist":{"shasum":"e6f95bba682ed10a67822b591d24df96fb14c07e","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.1.tgz","fileCount":40,"integrity":"sha512-fhPcFvO9jF5HbKWG9/EJemWQI36T6FFEUJgSUEbvXZUNnLD6Wtk0FwSKvtuozhKdJH0ITcW0ElCKzOd7Nxu39A==","signatures":[{"sig":"MEUCIBZ+aLxdYC8943qiFOXswXV2BPc9GPayWwo8EPC5670bAiEAvYk1/SBcL83LAP6FAkDSO9a+PEO6QJHpQ6Bpi9QkP9E=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101725,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUFAlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmrtRxAAm223JSQ+wjD682aL3e3wLTnXpkUBGO/MHbiyIEJnPZrXHo3y\r\n5Vh9bRqV9lHFBrfbV0B/sP9ThUS69OyJDuvLwMpGRRDSb7MHZSHM9pvkgu1S\r\nEGpxSCeuPpqdx6/2elZ4qOxCOAXnt4YRtmi7fmdQJ0oxf9PMiigtVh00Z8Pl\r\nf8LHDrNe6J+0zw74E59OlbQ74J82TkjrXo7tHibLvTqMzcmyQ0wzeCZ44SPB\r\n5X70L3SNM+zVKnNgZRBldcPO/UYwmvqvkGUxCLZc+v5zYb0Y152J0IUFALhH\r\nPlzsxMkORie9m9ycFJjAPZ+LRb4xzx0PDPn8vWVmnC6PxN8c+035y6WYdGgp\r\nQvIh0OoauNQPL9PAKHx9+aVDvWSaBLLiCk4x1kjYTlpCDrAd7Q3mmvvSOhD6\r\nmLNCDSX2HRQaokz3yXJnIJiKYhLJH6wxy2+CCmif1d99jkh8VHpOVg2kmjYP\r\nK6LTR8isFGtYn2jz06IfxpmVtv41FzZT5EkiGOsVle/s1TD3lGjcrocVeSiN\r\nJggvPv6hSO2NTIIvTQyosKpc1HNjPOsrnbMG88iY0O2WxcFbbIPafc1alwXN\r\nLMMhdPkUViPBgjXeqI0eyDlgdTT9LHt3rKn0k/rN8hTiE/Kw8ewACpW7XK/A\r\nhgEBkr8v3YKe0B0vPJel+r82Bri4P9c7UAM=\r\n=hcKQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/browser.ts","src/node/index.ts","src/utils/index.ts"],"browser":"./dist/browser.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.cjs"}},"gitHead":"db9a95bce0fe271931e5ec1d140169933f16a6de","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework without ","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/std":"*","@neodx/colors":"*"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"0.2.1","tsx":"3.12.7","pino":"8.11.0","bunyan":"1.8.15","winston":"3.8.2","loglevel":"1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.1_1682984997654_0.24025849655385456","host":"s3://npm-registry-packages"}},"0.1.2":{"name":"@neodx/log","version":"0.1.2","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.2","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues?q=is%3Aopen+is%3Aissue+label%3Ascope%3Alog"},"dist":{"shasum":"ae9174e75ade33628f59e3142857be2fb2065461","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.2.tgz","fileCount":40,"integrity":"sha512-n1soLfUBitzbWBQfjxp8TG/wsi38UsEurzkvT9rK7lgom3uKvocU6MRU4saEVpqWlaA4QS/XS+IVp7iW5Qlo5g==","signatures":[{"sig":"MEUCIQCHbtqORemnGjObbSaoIV/L4ohBUsekTuyzwfn3gN9C+AIgafB8U/wvSksD0UxYx7DGNj1/GqjEHov/W2LJsoSYie0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":101928,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUVFlACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoZEg//dkYaSVmJopscj+7LFrjicmt971ylMlGtwnFKLkonfLmxl1hm\r\nvosM2q9rBBoXP73uMqKYBAUkP/JG+x7VbxwxyjK9bhtbctgp+qCWTrkeNh1M\r\nARfyIWj008rP780VnPpIHTnYXeZ++KUditI3ja9+4ABZNyfLN8EuI7KWfNQn\r\n85m3oaRPFMAGLiHBqUjJGXokspzjR4LuI6ytUUDvema1aqqU6bYlanW4VONe\r\n1vw0TKt64W2FMgueWfBKf7KyvSlzonodDW5p6ozS8t9as5frvNj8qX+CQICn\r\n1d9VnKosyYr/zKY8PzNh2PyqH43I8MYDaifr0wO+pkPH9G3rM2BzYfB1RTRx\r\neHD81nJTXf+YOIH/BuNFj0YcoBuHjY+0veQJFHlTpLIhKSfEK8EbqbRU0A9Y\r\naNxXHQP5NRu9Fj4ejQE7lYRGGFKO7hxzraU73/ObTtK+x1E1EJkoPN9YG2DG\r\ntFQyHlVULQDzl1wHCp8WyTmEuU/vQVLOJZ9j+/Dc4QVW4tQftSUQ5ke8wtpk\r\nkfixxvkdr72HdspZoEg5LGvHXvShtz8YiK4uM5jkNaVXp7qJQ/ZyYmo3xlaD\r\n2/ZfGARPP3nZgCsBka6v7j9GvB9xpVeGn1qQGYSKwuNDSz35X5XQBQkIYla/\r\nhVxBlEY7QoCciiK4cDdPAGeJNQrVTQvGgcw=\r\n=xbDw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/browser.ts","src/node/index.ts","src/utils/index.ts"],"browser":"./dist/browser.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/browser.mjs","require":"./dist/browser.cjs"},"require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"},"./browser":{"types":"./dist/browser.d.ts","import":"./dist/browser.mjs","require":"./dist/browser.cjs"}},"gitHead":"af98efa753c9abf9d5d87f07a87d8c239519aed9","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework without ","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/std":"*","@neodx/colors":"*"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"^0.2.1","pino":"^8.12.0","bunyan":"^1.8.15","winston":"^3.8.2","loglevel":"^1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.2_1683050853599_0.9510622067707608","host":"s3://npm-registry-packages"}},"0.1.3":{"name":"@neodx/log","version":"0.1.3","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.3","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues?q=is%3Aopen+is%3Aissue+label%3Ascope%3Alog"},"dist":{"shasum":"1bc6e1faf4dd45b83c64c0101e32acdb8252db03","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.3.tgz","fileCount":31,"integrity":"sha512-yFSc6rAF6DbvI2yLqbraAq3eP1hk++1SnWLXIaO7MWzxb2T2dYb6QwAaLYC+x6oZgbwYnCxURCOer+7OLaVVMg==","signatures":[{"sig":"MEUCIFaAFwWO/xV5LELMv8K33qE1P1SVVz11JlWfyf/SZe/bAiEAux2bRnVZFfFdgq4V+LaHxUhNiEAG5AXVKW/z/2oQatE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90226,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUXA2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpxDhAAlEHCC/uwwqWffqLq+m99pEP3dQ7RnITGxqgxj3O1gKYTQoIl\r\nh7drFrf0PegsXg0oRivxt/HAd/E3j0B0BrWJ3HuXIlRw3Rln5H9E+7J4YZU7\r\nj3WVJwydjDZAYFvafmOISG/gek+D4/MZJ6GzEal4oUizxju1/rIP3H+HI/Yw\r\nJUUV1Mrie9PVfr+aRa2FJVPlfa/Sb4NaNGk2xwujFIKG4R9fmNM7rNbhkYe7\r\ngQRdaaaOsqmwue4NpL422EYCL/7J/QOGhsFB9Ot8HSunAZOsoGyGaW4/U+vK\r\nm2wSImKFIo3iXlUiGK+qqTZ3KCNuKpnHEwKXp58uGkoDpkCGtOxFnfXN6YD7\r\n8ajaeoHq+VvxTe4S/nTaOtWGAfie0NnSFDe/qla6gbkYASJv/AlGnTFehB9K\r\n+jCQsALxKFezGHy+h2eVnRgJ1BqZVbzCYSUXKA55c1WOMC7DZsZlYHPzk4pc\r\ntYWTlniQY/G7q9+Ac3A9RfObj2dhWo6EielhHy6fUrqI+vw7y+VdlI1nQD6V\r\nhk/RuqW3CNsGY/7AQY/coNVvQPs0srmE+OkMVRUYe9qKMRX2zj7FOXOkls70\r\nSdX2VH4oEFX60T4PBwLaIh5lXN7iz18uZeuZMVxVVwuHfUE08wM2pWRRuYgh\r\noJfNe8ztCBz0YxI+cdD6DLQKgbpuPD8kxnI=\r\n=ioB/\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/node/index.ts","src/utils/index.ts"],"exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"}},"gitHead":"adfb4749dfeded53997fa2ccb77bc9a6901742cb","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework without ","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/std":"*","@neodx/colors":"*"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"^0.2.1","pino":"^8.12.0","bunyan":"^1.8.15","winston":"^3.8.2","loglevel":"^1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.3_1683058742473_0.4293213264659874","host":"s3://npm-registry-packages"}},"0.1.4":{"name":"@neodx/log","version":"0.1.4","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.4","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues?q=is%3Aopen+is%3Aissue+label%3Ascope%3Alog"},"dist":{"shasum":"e947fad6c3025d289e782503fb10a977028e080f","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.4.tgz","fileCount":31,"integrity":"sha512-+2kEqD/HMUx6ioXLlVYcojmL4PekKLUpzvhmptoMjuLh4cuBMat6su2wwBKuEaGkUS4kxroctMF+2RpQdQ86gA==","signatures":[{"sig":"MEYCIQDuS5LyZObezjcGD1xECqOCmSs7D3HY1rLe/lgAMtF38QIhAKq+OjUYfU5PFTmssAk9nCUX3cq3uqcqJ3qPa8zblvp7","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90560,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkUXnLACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpaaw/+P2L5AalEPm0LhEcZ8ho4RR6GCpyN+fmm7zh8mbMXaom5wptO\r\neNc9/WQHkHwCKi5glzho35OJwf5qu/G7pZ8voUM1hQxtfB4lBzTPx+KwGMJB\r\nnUOSWlCreFiyLhv0r8dHLXFbL5f6zkyzqS/csGQIJNsWQPa9sgqN9ozZFcUb\r\nkX4ZlAxwaTc3kR6qotYYdawC2ibkdbBx1fB+SfgojUlYMahQTiwnn7dGrm+w\r\nopRlLezBk66z3DVHmvX5njNYhNnRLnL9ttMRZ0Iswflvgt3q1d1FHVD01DiS\r\nQndfMCSqSoVJcP6DoTFkA5+JcHhAKCfTMeG2kW3Ua9LxHtnG3HM2mmtGRKan\r\n5qrGOfVrZkwGMDH9qET7pu+Nx3Q+hXY0EftCcpHjBxP/WxBOGFRXELqo/UX2\r\n2aT90PVEjGTfRnogMMJX174qmrKS9CaGKy7hWKpziIj/NNEb1WDVq6hXOtGw\r\n0qRuhqZDbrIV/jUS2SSE7JZLPdCAfi7Y7z5T2mbXt2WqZlb9KfTus9fsxFvu\r\nEHbjIYGj996ZoVBdfhpFaXVrYxb+z69NK1aZVhez0EwauAlidlU2J24IuUei\r\nHqdTyGSrFn9APajR9JBQ1fb08Dv/tEZ/5bHEiG64FmYxmCuz73Oi153SHQzq\r\nTTy527tEal1ZsgMSewxDnfM/a8b0It/AiDk=\r\n=cQM6\r\n-----END PGP SIGNATURE-----\r\n"},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/node/index.ts","src/utils/index.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"}},"gitHead":"bcc505eebcff81d13d7f1f068be4ba082173d956","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/std":"*","@neodx/colors":"*"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"^0.2.1","pino":"^8.12.0","bunyan":"^1.8.15","winston":"^3.8.2","loglevel":"^1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.4_1683061195053_0.16286337745038804","host":"s3://npm-registry-packages"}},"0.1.5":{"name":"@neodx/log","version":"0.1.5","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.5","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"3bdb94e95271dac91e3bd89a41b5dadc7e8ae634","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.5.tgz","fileCount":31,"integrity":"sha512-cMH6gE9mjPDto8GB4eCjrscAWlu4aC1+5EYeawFL1k219iXvHNKDyQ0McuT+0eG5XwUclz3g1dp1okGfJbg/XA==","signatures":[{"sig":"MEUCIGT9+y3kfH+zwxAxRd4/bx1Da59YmIU+xELu7RNe7+bfAiEA5yQQvkI2yEZB63iGqm1qtfLa5o7at+yRHCAwtlxFydU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102814},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/node/index.ts","src/utils/index.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"}},"gitHead":"c7e4396ff21bde42bce366637f055aa7144671f0","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/colors":"*"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"^0.2.1","pino":"^8.14.1","bunyan":"^1.8.15","winston":"^3.8.2","loglevel":"^1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.5_1684254431769_0.30415618167476866","host":"s3://npm-registry-packages"}},"0.1.6":{"name":"@neodx/log","version":"0.1.6","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.6","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"9226fdeb1e3d749d6258dae711050e1f896aa1a5","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.6.tgz","fileCount":31,"integrity":"sha512-TpFf9MKQUuG642HAlZUHMbA+S+MNl2CpX2/CFP7sb9a3hB4FvJBHla0DVmIekvihR9we7gkGO5vfCA/viVAw0w==","signatures":[{"sig":"MEUCIQDgytK6/tXMDAAYAToCldNQmL1iz7zKvn1M3WE2YXJFPwIgdtrY1Lyd2mLnbO/qaZKubRmnXtElKd8kiUr6d62Fx5o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102814},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/node/index.ts","src/utils/index.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"}},"gitHead":"084e3b1a643c1965bea429f23c8aff741df2ac7b","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/colors":"*"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"^0.2.1","pino":"^8.14.1","bunyan":"^1.8.15","winston":"^3.8.2","loglevel":"^1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.6_1684490794401_0.46088809437095635","host":"s3://npm-registry-packages"}},"0.1.7":{"name":"@neodx/log","version":"0.1.7","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.1.7","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"ed6a7c6d81f742bc35294ea9820c1def72095329","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.1.7.tgz","fileCount":31,"integrity":"sha512-pz4HyJRNS/kzMWDrSa6oP5FMgQzhT61KJJiOCX5e2xIbpRevT7PGACrNk1XiH0xnWWL2DcSYrcoUv0t495yTIg==","signatures":[{"sig":"MEYCIQC9eIGydW4gwp/5FkNdlEjDwpOqJLT+fBflhmaI2I8reAIhANM3OM8FRJ+jRZnftZey3ptpGT7YHbQVr4k2HgAljEpI","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":102819},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/index.ts","src/node/index.ts","src/utils/index.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"}},"gitHead":"4399df90b6cefcefe0810255249b4e367b7d9b24","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx bench/neodx-log-output.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"18.16.0","dependencies":{"@neodx/colors":"^0.2.4"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"tmp":"^0.2.1","pino":"^8.14.1","bunyan":"^1.8.15","winston":"^3.8.2","loglevel":"^1.8.1","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@neodx/autobuild":"*"},"_npmOperationalInternal":{"tmp":"tmp/log_0.1.7_1685037436218_0.8511305751764577","host":"s3://npm-registry-packages"}},"0.2.0":{"name":"@neodx/log","version":"0.2.0","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.2.0","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"2e172457c009bfb368f3fa60d3f26dd2ae89ad1c","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.2.0.tgz","fileCount":55,"integrity":"sha512-dTXQ6cpoeQ4PVAm5k7J0MEPgZ7QxQSVdANpDdmTYQ55ivdzb4ouRqYwcvn5dIEzJPiUZ0nVm0bZbgDSEvLikfQ==","signatures":[{"sig":"MEUCIBgE9BXP/49qlDfuVJx4LvdXtaJLUNsEDIOq4lm1VhwVAiEAgSUUUqhGaGO/EpgAF+8dsWK8gCpsmLN81xOIpCqt2LU=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":270305},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs"},"./koa":{"types":"./dist/koa.d.ts","import":"./dist/koa.mjs","require":"./dist/koa.cjs"},"./http":{"types":"./dist/http/index.d.ts","import":"./dist/http/index.mjs","require":"./dist/http/index.cjs"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.cjs"}},"gitHead":"ad2a3c8ebfbc767330304c58ccf95a54cde658ee","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"vitest typecheck --run","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.5.1","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"18.16.1","dependencies":{"pathe":"^1.1.1","cli-truncate":"^3.1.0","@neodx/colors":"^0.2.4"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"koa":"^2.14.2","tmp":"^0.2.1","tsx":"^3.12.7","pino":"^8.14.1","bunyan":"^1.8.15","express":"^4.18.2","winston":"^3.10.0","loglevel":"^1.8.1","@types/koa":"^2.13.6","@types/tmp":"^0.2.3","@types/bunyan":"^1.8.8","@types/express":"^4.17.17","@neodx/autobuild":"*"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_0.2.0_1690053700094_0.5845236061785735","host":"s3://npm-registry-packages"}},"0.2.1":{"name":"@neodx/log","version":"0.2.1","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.2.1","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"339b337ab91bf4660ff7046abd79b5260f748037","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.2.1.tgz","fileCount":47,"integrity":"sha512-w106TDNr1kuFqgEPPvldvcg9o73bFgIvwAVFJDxAxftkxflI6hagAmpadIUuG4rn4G2VqjYnKK5dk/514yzohw==","signatures":[{"sig":"MEUCIDNSQ79r4Bd+80/jwzpoeNA4WF4Y5lH8cStgXmrVyJaXAiEAnbIus4yaRJQIBn3PA7+vhxN692ERqYPeI9TK3y2ZqDM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":414921},"main":"./index.cjs","type":"module","types":"./index.d.ts","module":"./index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./index.mjs","exports":{".":{"node":{"import":"./node/index.mjs","require":"./node/index.cjs"},"types":"./index.d.ts","import":"./index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./index.cjs"},"./koa":{"types":"./koa.d.ts","import":"./koa.mjs","require":"./koa.cjs"},"./http":{"types":"./http/index.d.ts","import":"./http/index.mjs","require":"./http/index.cjs"},"./node":{"types":"./node/index.d.ts","import":"./node/index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./node/index.cjs"},"./utils":{"types":"./utils/index.d.ts","import":"./utils/index.mjs","require":"./utils/index.cjs"},"./express":{"types":"./express.d.ts","import":"./express.mjs","require":"./express.cjs"},"./package.json":"./package.json"},"gitHead":"9e3e47a7fd3f196dade8057e54243a2ed9bf242e","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"vitest typecheck --run","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.6.7","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"18.17.0","dependencies":{"pathe":"^1.1.1","@neodx/colors":"^0.2.5"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"koa":"^2.14.2","tmp":"^0.2.1","tsx":"^3.12.7","pino":"^8.14.1","bunyan":"^1.8.15","express":"^4.18.2","winston":"^3.10.0","loglevel":"^1.8.1","@types/koa":"^2.13.6","@types/tmp":"^0.2.3","cli-truncate":"^3.1.0","@types/bunyan":"^1.8.8","@types/express":"^4.17.17","@neodx/autobuild":"*"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_0.2.1_1690744921853_0.39333627962450546","host":"s3://npm-registry-packages"}},"0.3.0":{"name":"@neodx/log","version":"0.3.0","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.3.0","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"43ab2b3e34675cc11f1b8b2d0a82d1c526d9840e","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.3.0.tgz","fileCount":47,"integrity":"sha512-Dg0Vav0ka0c5oc7ViWId0f/4Jph3QqkjLc2bi2oEPwJtH0OVHMh1bGC36z8AVuH5ojpzA44iwPpPQxNp+Bb6ZQ==","signatures":[{"sig":"MEQCIHdFjGu9yN2xLB5DMz355PDhPS5LElIBfCf00fny6q0wAiAbVcA3bn7xsJPzwlKw6sr+6ePKOhwLjvmHqnGaiKymkQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":423973},"main":"./index.cjs","type":"module","types":"./index.d.ts","module":"./index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./index.mjs","exports":{".":{"node":{"import":"./node/index.mjs","require":"./node/index.cjs"},"types":"./index.d.ts","import":"./index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./index.cjs"},"./koa":{"types":"./koa.d.ts","import":"./koa.mjs","require":"./koa.cjs"},"./http":{"types":"./http/index.d.ts","import":"./http/index.mjs","require":"./http/index.cjs"},"./node":{"types":"./node/index.d.ts","import":"./node/index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./node/index.cjs"},"./utils":{"types":"./utils/index.d.ts","import":"./utils/index.mjs","require":"./utils/index.cjs"},"./express":{"types":"./express.d.ts","import":"./express.mjs","require":"./express.cjs"},"./package.json":"./package.json"},"gitHead":"930466b8ad7c5313d16ef3c01f53ba6ee2a3d433","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"vitest typecheck --run","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"9.8.1","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"18.18.0","dependencies":{"pathe":"1.1.1","@neodx/colors":"0.2.6"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"koa":"2.14.2","tmp":"0.2.1","tsx":"3.13.0","pino":"8.15.6","bunyan":"1.8.15","express":"4.18.2","winston":"3.11.0","loglevel":"1.8.1","@types/koa":"2.13.9","@types/tmp":"0.2.4","cli-truncate":"3.1.0","@types/bunyan":"1.8.9","@types/express":"4.17.18","@neodx/autobuild":"*"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_0.3.0_1696956871996_0.5720210319970322","host":"s3://npm-registry-packages"}},"0.4.0":{"name":"@neodx/log","version":"0.4.0","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.4.0","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"1c84205c422e2295472373ad153dbc5237e06c21","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.4.0.tgz","fileCount":47,"integrity":"sha512-FSmW+3gqc8vr24QmWDpibzl/DD86c4T6TIXkjj+ZE4Bch97qJ2H9TlNjSBVbD3LHTaMESSUmxreWQrXD6krfvw==","signatures":[{"sig":"MEYCIQDd9vKOyeGbKFtqH7L0sapo7Pvlq24l8dAxOlb1dUYBrgIhAOFyforRu14COAie8bH5UeBvFWsamawt+X2p50GGjKZb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":456443},"main":"./index.cjs","type":"module","types":"./index.d.ts","module":"./index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./index.mjs","exports":{".":{"node":{"import":"./node/index.mjs","require":"./node/index.cjs"},"types":"./index.d.ts","import":"./index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./index.cjs"},"./koa":{"types":"./koa.d.ts","import":"./koa.mjs","require":"./koa.cjs"},"./http":{"types":"./http/index.d.ts","import":"./http/index.mjs","require":"./http/index.cjs"},"./node":{"types":"./node/index.d.ts","import":"./node/index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./node/index.cjs"},"./utils":{"types":"./utils/index.d.ts","import":"./utils/index.mjs","require":"./utils/index.cjs"},"./express":{"types":"./express.d.ts","import":"./express.mjs","require":"./express.cjs"},"./package.json":"./package.json"},"gitHead":"fc0432883fdfff05dffbc45495035d0dd19c1789","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"vitest run --typecheck.only","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"10.2.4","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"20.11.1","dependencies":{"pathe":"1.1.2","@neodx/colors":"0.2.7"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"koa":"2.14.2","tmp":"0.2.1","tsx":"4.7.1","pino":"8.16.1","bunyan":"1.8.15","express":"4.18.2","winston":"3.11.0","loglevel":"1.8.1","@types/koa":"2.14.0","@types/tmp":"0.2.6","cli-truncate":"3.1.0","@types/bunyan":"1.8.11","@types/express":"4.17.21","@neodx/autobuild":"*"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_0.4.0_1708513428001_0.5176597398744875","host":"s3://npm-registry-packages"}},"0.4.1":{"name":"@neodx/log","version":"0.4.1","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.4.1","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"9ac30586f82311584e0c4d1440f2c93d8886fac4","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.4.1.tgz","fileCount":47,"integrity":"sha512-v6U20VjPNfo2SBaSWZ+fJN3Ggmh98qNT5AQgKwAQKpaNGP0p3ZGG8uGSROzU3RNKtQZkT0f0e/pvNLv1kKe21Q==","signatures":[{"sig":"MEYCIQC4iD0Or+M1910mDVnHqm+h/12qXkZCsr9f5206JqipnwIhAOeNbGuX33at0dOKsReIvjjAAyQ1+ltjcZHh3Ls0BImZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":456443},"main":"./index.cjs","type":"module","types":"./index.d.ts","module":"./index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./index.mjs","exports":{".":{"node":{"import":"./node/index.mjs","require":"./node/index.cjs"},"types":"./index.d.ts","import":"./index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./index.cjs"},"./koa":{"types":"./koa.d.ts","import":"./koa.mjs","require":"./koa.cjs"},"./http":{"types":"./http/index.d.ts","import":"./http/index.mjs","require":"./http/index.cjs"},"./node":{"types":"./node/index.d.ts","import":"./node/index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./node/index.cjs"},"./utils":{"types":"./utils/index.d.ts","import":"./utils/index.mjs","require":"./utils/index.cjs"},"./express":{"types":"./express.d.ts","import":"./express.mjs","require":"./express.cjs"},"./package.json":"./package.json"},"gitHead":"0d154ec25abe8568aa7ce2d540de7e90eb0df9ef","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"vitest run --typecheck.only","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"10.5.2","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"20.13.1","dependencies":{"pathe":"1.1.2","@neodx/colors":"0.2.8"},"_hasShrinkwrap":false,"packageManager":"yarn@3.2.0","devDependencies":{"koa":"2.14.2","tmp":"0.2.1","tsx":"4.7.1","pino":"8.16.1","bunyan":"1.8.15","express":"4.18.2","winston":"3.11.0","loglevel":"1.8.1","@types/koa":"2.14.0","@types/tmp":"0.2.6","cli-truncate":"3.1.0","@types/bunyan":"1.8.11","@types/express":"4.17.21","@neodx/autobuild":"*"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_0.4.1_1716302590843_0.22408083938452572","host":"s3://npm-registry-packages"}},"0.4.2":{"name":"@neodx/log","version":"0.4.2","keywords":["log","cli","logger","logging","hackable","colorful","console","json","tiny","isomorphic"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@0.4.2","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"6614e3509ee78b509e693957d4954d464a6cb4c1","tarball":"https://registry.npmjs.org/@neodx/log/-/log-0.4.2.tgz","fileCount":47,"integrity":"sha512-sfqCPzW/QoGDOvVSkvWt8PM6I6gvpIlRzoFpCLnCw9BbLdfIDYMHXvQc1gca3JjLgfqmzrKvNnLFtNtrzKcUrA==","signatures":[{"sig":"MEUCIQCH+jWiMJuPJFWf9qYicPgFPflkeHqQ5ZNLsZb//5stCQIgR4Ag8f7NaX+DMMiuEwQiu8tMTi8xEQYI6pcdt2VMfVo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":559125},"main":"./index.cjs","type":"module","types":"./index.d.ts","module":"./index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./index.mjs","exports":{".":{"node":{"import":"./node/index.mjs","require":"./node/index.cjs"},"types":"./index.d.ts","import":"./index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./index.cjs"},"./koa":{"types":"./koa.d.ts","import":"./koa.mjs","require":"./koa.cjs"},"./http":{"types":"./http/index.d.ts","import":"./http/index.mjs","require":"./http/index.cjs"},"./node":{"types":"./node/index.d.ts","import":"./node/index.mjs","browser":{"import":"./index.mjs","require":"./index.cjs"},"require":"./node/index.cjs"},"./utils":{"types":"./utils/index.d.ts","import":"./utils/index.mjs","require":"./utils/index.cjs"},"./express":{"types":"./express.d.ts","import":"./express.mjs","require":"./express.cjs"},"./package.json":"./package.json"},"gitHead":"f3f1da1a3fe528fda8e6f289f895041d3f5a61d1","scripts":{"lint":"eslint","test":"vitest run","bench":"vitest bench","build":"autobuild","clean":"yarn dlx rimraf dist","typecheck":"tsc --noEmit","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"secundant","email":"mysecundant@gmail.com"},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"10.8.2","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"20.19.3","dependencies":{"pathe":"1.1.2","@neodx/colors":"0.2.9"},"_hasShrinkwrap":false,"packageManager":"yarn@4.1.0","devDependencies":{"koa":"2.15.3","tmp":"0.2.3","tsx":"4.16.2","pino":"8.20.0","bunyan":"1.8.15","express":"4.19.2","winston":"3.13.0","loglevel":"1.9.1","@types/koa":"2.15.0","@types/tmp":"0.2.6","cli-truncate":"4.0.0","@types/bunyan":"1.8.11","@types/express":"4.17.21","@neodx/autobuild":"*"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_0.4.2_1753194198967_0.7170250420832418","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@neodx/log","version":"1.0.0","keywords":["cli","colorful","console","hackable","isomorphic","json","log","logger","logging","tiny"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@1.0.0","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"dec16149b64637442d9d94a707bc5dfdabad078e","tarball":"https://registry.npmjs.org/@neodx/log/-/log-1.0.0.tgz","fileCount":39,"integrity":"sha512-hVdDB9BREPyT6W2J9+N/e62IOJd/HIqdemWNszSSBnXDqU74UHkBkemhMTIM2gEvLMygCM1dmL8bXK1DxePiMA==","signatures":[{"sig":"MEUCIQC3Sb3PWzu49BIKsJxv2mOOsMm4UVCpAqAXDso6kFntGQIgN5e3KU4Lrjs55IRm5oLo2CIEgxgLb9yEx6X1ReApqNI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@neodx%2flog@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":472880},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs","development":"./src/index.ts"},"./koa":{"types":"./dist/koa.d.ts","import":"./dist/koa.mjs","require":"./dist/koa.cjs","development":"./src/koa.ts"},"./http":{"types":"./dist/http/index.d.ts","import":"./dist/http/index.mjs","require":"./dist/http/index.cjs","development":"./src/http/index.ts"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs","development":"./src/node/index.ts"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs","development":"./src/utils/index.ts"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.cjs","development":"./src/express.ts"}},"gitHead":"171b54619b506fcee03b20e65817e7840d161d2d","scripts":{"lint":"vp lint","pack":"vp pack","test":"vp test","bench":"vitest bench","build":"vp pack","clean":"yarn dlx rimraf dist","typecheck":"tsc -b tsconfig.build.json","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:083b084a-a5eb-4e42-9d4c-f1e6f6f719fa"}},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"11.19.0","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"pathe":"1.1.2","@neodx/std":"workspace:^","@neodx/colors":"workspace:^"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.3.1","devDependencies":{"koa":"2.16.4","tmp":"0.2.7","tsx":"4.23.12","pino":"8.20.0","bunyan":"1.8.15","express":"4.22.2","winston":"3.13.0","loglevel":"1.9.1","@types/koa":"2.15.2","@types/tmp":"0.2.6","cli-truncate":"4.0.0","@types/bunyan":"1.8.11","@types/express":"4.17.25"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_1.0.0_1786719219844_0.5500965821998773","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@neodx/log","version":"1.0.1","keywords":["cli","colorful","console","hackable","isomorphic","json","log","logger","logging","tiny"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@1.0.1","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"af8905e2deb544656b3407108cc8f55c8f6b5c88","tarball":"https://registry.npmjs.org/@neodx/log/-/log-1.0.1.tgz","fileCount":39,"integrity":"sha512-wf7SSy9+FWeuNgUDeAdMrCpZo+DETc5LL7n28lB2K8JdFI7fRUJBq5zDOXz1swy+2WFddOwZ7+QIHSwn3orwvg==","signatures":[{"sig":"MEUCIQDMFTJbjGVNVWVofw3m6v+DkMOkpmpQifX5o4MeTX5jxgIgYzHJOQZVtdVddfOkrgm2ppulA9RKG5gSNTmtD5pAcpE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@neodx%2flog@1.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":473040},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs","development":"./src/index.ts"},"./koa":{"types":"./dist/koa.d.ts","import":"./dist/koa.mjs","require":"./dist/koa.cjs","development":"./src/koa.ts"},"./http":{"types":"./dist/http/index.d.ts","import":"./dist/http/index.mjs","require":"./dist/http/index.cjs","development":"./src/http/index.ts"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs","development":"./src/node/index.ts"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs","development":"./src/utils/index.ts"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.cjs","development":"./src/express.ts"}},"gitHead":"88b8c617eda0ffb3f2d636af31b64d5215bc6295","scripts":{"lint":"vp lint","pack":"vp pack","test":"vp test","bench":"vitest bench","build":"vp pack","clean":"yarn dlx rimraf dist","prepack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --prepack","postpack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --postpack","typecheck":"tsc -b tsconfig.build.json","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:083b084a-a5eb-4e42-9d4c-f1e6f6f719fa"}},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"11.19.0","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"pathe":"1.1.2","@neodx/std":"workspace:^","@neodx/colors":"workspace:^"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.3.1","devDependencies":{"koa":"2.16.4","tmp":"0.2.7","tsx":"4.23.12","pino":"8.20.0","bunyan":"1.8.15","express":"4.22.2","winston":"3.13.0","loglevel":"1.9.1","@types/koa":"2.15.2","@types/tmp":"0.2.6","cli-truncate":"4.0.0","@types/bunyan":"1.8.11","@types/express":"4.17.25"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_1.0.1_1787394233853_0.20474276645253187","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@neodx/log","version":"1.0.2","keywords":["cli","colorful","console","hackable","isomorphic","json","log","logger","logging","tiny"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@1.0.2","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"fc73b21cd9d259a62286eb2a3d6479a39739c167","tarball":"https://registry.npmjs.org/@neodx/log/-/log-1.0.2.tgz","fileCount":39,"integrity":"sha512-MsDOm5wS1WNAsuz77ZTH7hXWArfPaX18szT1ydPdA/l97JwaDYRBLmhQkMMDaVg+kzridxPSdlZxPKHIi89/og==","signatures":[{"sig":"MEQCIEbgG653TC7YM5AKaAE/Zrf9ycWnerqP01hFxDVzY76mAiAwI3RZeLiz6fiB1kOpQleMAnHogE/VVno063/yBtDVbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@neodx%2flog@1.0.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":473040},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs","development":"./src/index.ts"},"./koa":{"types":"./dist/koa.d.ts","import":"./dist/koa.mjs","require":"./dist/koa.cjs","development":"./src/koa.ts"},"./http":{"types":"./dist/http/index.d.ts","import":"./dist/http/index.mjs","require":"./dist/http/index.cjs","development":"./src/http/index.ts"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs","development":"./src/node/index.ts"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs","development":"./src/utils/index.ts"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.cjs","development":"./src/express.ts"}},"gitHead":"e9866e1913cc13536b6a6c63b61847a524034cac","scripts":{"lint":"vp lint","pack":"vp pack","test":"vp test","bench":"vitest bench","build":"vp pack","clean":"yarn dlx rimraf dist","prepack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --prepack","postpack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --postpack","typecheck":"tsc -b tsconfig.build.json","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:083b084a-a5eb-4e42-9d4c-f1e6f6f719fa"}},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"11.19.0","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"pathe":"1.1.2","@neodx/std":"workspace:^","@neodx/colors":"workspace:^"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.3.1","devDependencies":{"koa":"2.16.4","tmp":"0.2.7","tsx":"4.23.12","pino":"8.20.0","bunyan":"1.8.15","express":"4.22.2","winston":"3.13.0","loglevel":"1.9.1","@types/koa":"2.15.2","@types/tmp":"0.2.6","cli-truncate":"4.0.0","@types/bunyan":"1.8.11","@types/express":"4.17.25"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_1.0.2_1787394626765_0.1540789635194999","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"@neodx/log","version":"1.0.3","keywords":["cli","colorful","console","hackable","isomorphic","json","log","logger","logging","tiny"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@1.0.3","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"1a2fae3f7df8f791e1442c30c6987f9cec19ed60","tarball":"https://registry.npmjs.org/@neodx/log/-/log-1.0.3.tgz","fileCount":39,"integrity":"sha512-KtN2xo+jlPkSakMLceeXLFImFn4BTfpbwkUg2DdZR3TphN8FxPHNeB5Ea6MpPuAOEMAxmv/Btd16PtUrcJvHTw==","signatures":[{"sig":"MEUCIQDKLR6bjvXB3mAqNDD90+2PhcH8Hi2RjJolrzjdIj0BQgIgPcM3kpBf6SLF51CIRb4f3XBibE0QEB6Q6+dcQRUNMRM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@neodx%2flog@1.0.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":473040},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":"./dist/node/index.mjs","require":"./dist/node/index.cjs"},"types":"./dist/index.d.ts","import":"./dist/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/index.cjs","development":"./src/index.ts"},"./koa":{"types":"./dist/koa.d.ts","import":"./dist/koa.mjs","require":"./dist/koa.cjs","development":"./src/koa.ts"},"./http":{"types":"./dist/http/index.d.ts","import":"./dist/http/index.mjs","require":"./dist/http/index.cjs","development":"./src/http/index.ts"},"./node":{"types":"./dist/node/index.d.ts","import":"./dist/node/index.mjs","browser":{"import":"./dist/index.mjs","require":"./dist/index.cjs"},"require":"./dist/node/index.cjs","development":"./src/node/index.ts"},"./utils":{"types":"./dist/utils/index.d.ts","import":"./dist/utils/index.mjs","require":"./dist/utils/index.cjs","development":"./src/utils/index.ts"},"./express":{"types":"./dist/express.d.ts","import":"./dist/express.mjs","require":"./dist/express.cjs","development":"./src/express.ts"}},"gitHead":"063aa2c9b36bb4dab5503be74123e452cf6efada","scripts":{"lint":"vp lint","pack":"vp pack","test":"vp test","bench":"vitest bench","build":"vp pack","clean":"yarn dlx rimraf dist","prepack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --prepack","postpack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --postpack","typecheck":"tsc -b tsconfig.build.json","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:083b084a-a5eb-4e42-9d4c-f1e6f6f719fa"}},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"11.19.0","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"pathe":"1.1.2","@neodx/std":"^1.0.0","@neodx/colors":"^1.0.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.3.1","devDependencies":{"koa":"2.16.4","tmp":"0.2.7","tsx":"4.23.12","pino":"8.20.0","bunyan":"1.8.15","express":"4.22.2","winston":"3.13.0","loglevel":"1.9.1","@types/koa":"2.15.2","@types/tmp":"0.2.6","cli-truncate":"4.0.0","@types/bunyan":"1.8.11","@types/express":"4.17.25"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_1.0.3_1787394962183_0.8298034648080879","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@neodx/log","version":"1.1.0","keywords":["cli","colorful","console","hackable","isomorphic","json","log","logger","logging","tiny"],"author":{"url":"https://github.com/secundant","name":"Dmitry Remezov","email":"mysecundant@gmail.com"},"license":"MIT","_id":"@neodx/log@1.1.0","maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"contributors":[{"name":"secundant"}],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"dist":{"shasum":"1bf412641f7015ee9e326c2e510c1e2fa9cca5c3","tarball":"https://registry.npmjs.org/@neodx/log/-/log-1.1.0.tgz","fileCount":46,"integrity":"sha512-/5kFzJul/EwImkvyJdRS+joB4o+Ph/tCwVXA30BycYVvJFtLdgSBHFrtkeoZAqyJLm4HEtkB9hVGwulV3ZjFZQ==","signatures":[{"sig":"MEUCIQDLg3hBT3dqdVuehFuz/VATBzWvi9ccDWk16AlDaywJgwIgLGD0MFy99pGwD2aKUTjxvCOue6e28LzGWXDaIdktR4c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@neodx%2flog@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":497851},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.cts","module":"./dist/index.mjs","source":["src/*/index.ts","src/*.ts"],"browser":"./dist/index.mjs","exports":{".":{"node":{"import":{"types":"./dist/node/index.d.mts","default":"./dist/node/index.mjs"},"require":{"types":"./dist/node/index.d.cts","default":"./dist/node/index.cjs"}},"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"browser":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"},"development":"./src/index.ts"},"./koa":{"import":{"types":"./dist/koa.d.mts","default":"./dist/koa.mjs"},"require":{"types":"./dist/koa.d.cts","default":"./dist/koa.cjs"},"development":"./src/koa.ts"},"./http":{"import":{"types":"./dist/http/index.d.mts","default":"./dist/http/index.mjs"},"require":{"types":"./dist/http/index.d.cts","default":"./dist/http/index.cjs"},"development":"./src/http/index.ts"},"./node":{"import":{"types":"./dist/node/index.d.mts","default":"./dist/node/index.mjs"},"browser":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"require":{"types":"./dist/node/index.d.cts","default":"./dist/node/index.cjs"},"development":"./src/node/index.ts"},"./utils":{"import":{"types":"./dist/utils/index.d.mts","default":"./dist/utils/index.mjs"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"},"development":"./src/utils/index.ts"},"./express":{"import":{"types":"./dist/express.d.mts","default":"./dist/express.mjs"},"require":{"types":"./dist/express.d.cts","default":"./dist/express.cjs"},"development":"./src/express.ts"}},"gitHead":"e86679b1e91640e482c2922cfb07fa20c23e173c","scripts":{"lint":"vp lint","pack":"vp pack","test":"vp test","bench":"vitest bench","build":"vp pack","clean":"yarn dlx rimraf dist","prepack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --prepack","postpack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --postpack","typecheck":"tsc -b tsconfig.build.json","show-output":"tsx examples/big-list-of-logs.ts","compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:083b084a-a5eb-4e42-9d4c-f1e6f6f719fa"}},"repository":{"url":"git+https://github.com/secundant/neodx.git","type":"git","directory":"libs/log"},"_npmVersion":"11.19.0","description":"A lightweight universal logging framework","directories":{},"sideEffects":false,"_nodeVersion":"26.7.0","dependencies":{"pathe":"1.1.2","@neodx/std":"^1.1.0","@neodx/colors":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"yarn@4.3.1","devDependencies":{"koa":"2.16.4","tmp":"0.2.7","tsx":"4.23.12","pino":"8.20.0","bunyan":"1.8.15","express":"4.22.2","winston":"3.13.0","loglevel":"1.9.1","@types/koa":"2.15.2","@types/tmp":"0.2.6","cli-truncate":"4.0.0","@types/bunyan":"1.8.11","@types/express":"4.17.25"},"peerDependencies":{"koa":"*","express":"*","@types/koa":"*","@types/express":"*"},"peerDependenciesMeta":{"koa":{"optional":true},"express":{"optional":true},"@types/koa":{"optional":true},"@types/express":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/log_1.1.0_1787416163190_0.9138873229502633","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@neodx/log","version":"1.1.1","description":"A lightweight universal logging framework","keywords":["cli","colorful","console","hackable","isomorphic","json","log","logger","logging","tiny"],"homepage":"https://github.com/secundant/neodx/tree/main/libs/log","bugs":{"url":"https://github.com/secundant/neodx/issues"},"license":"MIT","author":{"name":"Dmitry Remezov","email":"mysecundant@gmail.com","url":"https://github.com/secundant"},"contributors":[{"name":"secundant"}],"repository":{"type":"git","url":"git+https://github.com/secundant/neodx.git","directory":"libs/log"},"source":["src/*/index.ts","src/*.ts"],"type":"module","sideEffects":false,"main":"./dist/index.cjs","module":"./dist/index.mjs","browser":"./dist/index.mjs","types":"./dist/index.d.cts","exports":{".":{"node":{"import":{"types":"./dist/node/index.d.mts","default":"./dist/node/index.mjs"},"require":{"types":"./dist/node/index.d.cts","default":"./dist/node/index.cjs"}},"browser":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"./node":{"browser":{"import":{"types":"./dist/index.d.mts","default":"./dist/index.mjs"},"require":{"types":"./dist/index.d.cts","default":"./dist/index.cjs"}},"import":{"types":"./dist/node/index.d.mts","default":"./dist/node/index.mjs"},"require":{"types":"./dist/node/index.d.cts","default":"./dist/node/index.cjs"}},"./utils":{"import":{"types":"./dist/utils/index.d.mts","default":"./dist/utils/index.mjs"},"require":{"types":"./dist/utils/index.d.cts","default":"./dist/utils/index.cjs"}},"./express":{"import":{"types":"./dist/express.d.mts","default":"./dist/express.mjs"},"require":{"types":"./dist/express.d.cts","default":"./dist/express.cjs"}},"./koa":{"import":{"types":"./dist/koa.d.mts","default":"./dist/koa.mjs"},"require":{"types":"./dist/koa.d.cts","default":"./dist/koa.cjs"}},"./http":{"import":{"types":"./dist/http/index.d.mts","default":"./dist/http/index.mjs"},"require":{"types":"./dist/http/index.d.cts","default":"./dist/http/index.cjs"}}},"publishConfig":{"access":"public"},"scripts":{"compare-bundle":"tsx bench/compare-bundle.ts","compare-output":"tsx bench/compare-output.ts","show-output":"tsx examples/big-list-of-logs.ts","bench":"vitest bench","typecheck":"tsc -b tsconfig.build.json","clean":"yarn dlx rimraf dist","build":"vp pack","test":"vp test","lint":"vp lint","pack":"vp pack","prepack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --prepack","postpack":"node ../../tools/scripts/rewrite-workspace-protocol.mjs --postpack"},"dependencies":{"@neodx/colors":"^1.1.1","@neodx/std":"^1.1.1","pathe":"1.1.2"},"devDependencies":{"@types/bunyan":"1.8.11","@types/express":"4.17.25","@types/koa":"2.15.2","@types/tmp":"0.2.6","bunyan":"1.8.15","cli-truncate":"4.0.0","express":"4.22.2","koa":"2.16.4","loglevel":"1.9.1","pino":"8.20.0","tmp":"0.2.7","tsx":"4.23.12","winston":"3.13.0"},"peerDependencies":{"@types/express":"*","@types/koa":"*","express":"*","koa":"*"},"peerDependenciesMeta":{"@types/express":{"optional":true},"@types/koa":{"optional":true},"express":{"optional":true},"koa":{"optional":true}},"packageManager":"yarn@4.3.1","gitHead":"cf60915d175a572a68a501c68a076238dd0b19d1","_id":"@neodx/log@1.1.1","_nodeVersion":"26.7.0","_npmVersion":"11.19.0","dist":{"integrity":"sha512-HrMDra9Qhk3dJ+eV+ZtFrMupYMhR+punEaUNUd78puxy3KRl6Q2wWvGiF8jvCIQMtg9KeKhhjWZU6TTHstE4mw==","shasum":"055d32e3aff35b465dfa58297b62d4cd7ff8ac24","tarball":"https://registry.npmjs.org/@neodx/log/-/log-1.1.1.tgz","fileCount":46,"unpackedSize":497601,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@neodx%2flog@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCID7U2C93LJ6YnkxICu0Uars7Xt1qsLGLvFC1O62vfJomAiEAhXs5x2oDtx5uMQlT1dwjyMBTnu6H54snuMz094ScHVk="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:083b084a-a5eb-4e42-9d4c-f1e6f6f719fa"}},"directories":{},"maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/log_1.1.1_1787673057677_0.320716152812657"},"_hasShrinkwrap":false}},"time":{"created":"2023-05-01T23:36:42.950Z","modified":"2026-08-25T15:50:58.235Z","0.1.0":"2023-05-01T23:36:43.217Z","0.1.1":"2023-05-01T23:49:57.879Z","0.1.2":"2023-05-02T18:07:33.808Z","0.1.3":"2023-05-02T20:19:02.654Z","0.1.4":"2023-05-02T20:59:55.248Z","0.1.5":"2023-05-16T16:27:11.975Z","0.1.6":"2023-05-19T10:06:34.597Z","0.1.7":"2023-05-25T17:57:16.386Z","0.2.0":"2023-07-22T19:21:40.325Z","0.2.1":"2023-07-30T19:22:02.047Z","0.3.0":"2023-10-10T16:54:32.384Z","0.4.0":"2024-02-21T11:03:48.168Z","0.4.1":"2024-05-21T14:43:11.025Z","0.4.2":"2025-07-22T14:23:19.222Z","1.0.0":"2026-08-14T14:53:39.996Z","1.0.1":"2026-08-22T10:23:54.010Z","1.0.2":"2026-08-22T10:30:26.908Z","1.0.3":"2026-08-22T10:36:02.333Z","1.1.0":"2026-08-22T16:29:23.349Z","1.1.1":"2026-08-25T15:50:57.826Z"},"bugs":{"url":"https://github.com/secundant/neodx/issues"},"author":{"name":"Dmitry Remezov","email":"mysecundant@gmail.com","url":"https://github.com/secundant"},"license":"MIT","homepage":"https://github.com/secundant/neodx/tree/main/libs/log","keywords":["cli","colorful","console","hackable","isomorphic","json","log","logger","logging","tiny"],"repository":{"type":"git","url":"git+https://github.com/secundant/neodx.git","directory":"libs/log"},"description":"A lightweight universal logging framework","contributors":[{"name":"secundant"}],"maintainers":[{"name":"secundant","email":"mysecundant@gmail.com"}],"readme":"<h1 align=\"center\">\n  @neodx/log\n</h1>\n\n<h4 align=\"center\">\n  Lightweight flexible isomorphic logging framework\n</h4>\n\n<div align=\"center\">\n  <img alt=\"Header\" src=\"docs/preview-intro.png\" width=\"1416\">\n</div>\n\n<div align=\"center\">\n  <a href=\"https://bundlejs.com/?q=%40neodx%2Flog&treeshake=%5B%7B+createLogger+%7D%5D\">\n    <img alt=\"npm\" src=\"https://deno.bundlejs.com/badge?q=@neodx/log&treeshake=[{+createLogger+}]\">\n  </a>\n  <a href=\"https://www.npmjs.com/package/@neodx/log\">\n    <img src=\"https://img.shields.io/npm/v/@neodx/log.svg\" alt=\"npm\" />\n  </a>\n  <img src=\"https://img.shields.io/npm/l/@neodx/log.svg\" alt=\"license\"/>\n</div>\n<div align=\"center\">\n  <a href=\"https://neodx.pages.dev/log\">Explore documentation</a>\n</div>\n\n`@neodx/log` is a **product (flagship)** package: it is publicly published\n(`access: public`), consumed across the `@neodx` namespace, and documented for direct use. The\ndocumented Public API below is intended to stay stable; the source under [`src`](./src) remains the\nsingle source of truth.\n\nThe core logger is **isomorphic** — it ships from `@neodx/log` and works the same in Node.js and\nbrowsers. The optional Node.js targets (`pretty`, `json`, `file`) and the HTTP framework adapters\n(`express`, `koa`, Node core `http`) live in dedicated subpath entries so the browser bundle stays\nsmall.\n\n- **Tiny and simple**. `< 1kb!` without extra configuration\n- **Fast enough**. No extra overhead, no hidden magic\n- **Customizable**. You can replace most of the parts with your own\n- **Isomorphic**. Automatically works in Node.js and browsers\n- **Typed**. Written in TypeScript, with full type support\n- **Well featured**. Semantic levels, JSON logs, pretty output, error handling, and more\n- [**Built-in HTTP frameworks**](#-frameworks-integration) ⛓️`express`, `koa`, Node core `http` loggers are supported out of the box\n\n```typescript\nconst log = createLogger();\n\nlog.info('Hello, world!'); // [my-app] Hello, world!\nlog.info({ object: 'property' }, 'Template %s', 'string'); // Template string { object: 'property' }\nlog.debug('Some additional information...'); // nothing, because debug level is disabled\n\n// Child logger will extend all unspecified settings from the parent\nconst childLog = log.child('example');\nconst needToGoDeeper = childLog.child('next one', {\n  level: 'debug' // override level\n});\n\nchildLog.warn('Hello, world!'); // [example] Hello, world!\nneedToGoDeeper.debug('debug is enabled here'); // [example › next one] debug is enabled here\n```\n\n## Public API overview\n\nThe source under [`src`](./src) is the source of truth for the current Public API. The package is\nsplit into an **isomorphic core** (`@neodx/log`) and **Node.js-only** targets/adapters so the\nbrowser bundle stays minimal. Multi-entry exports are first-class.\n\n| Subpath              | Surface                                                                                                                                                                                                                                                                                                                 |\n| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `@neodx/log`         | Core logger factory. `createLogger`, `createAutoLogger`, `createLoggerFactory` (+ `CreateLoggerFactoryParams`), `createConsoleTarget`, `DEFAULT_LOGGER_LEVELS`, `DEFAULT_LOGGER_PARAMS`, `LOGGER_SILENT_LEVEL` (+ `DefaultLoggerLevel`), and the core types (`Logger`, `LoggerParams`, `LogChunk`, `LoggerHandler`, …). |\n| `@neodx/log/node`    | Node.js entry: `createLogger`/`createAutoLogger` with `pretty`/`json` defaults, the `pretty`/`json`/`file` targets (+ `PrettyTargetParams`, `JsonTargetParams`), `printCodeFrame`/`printPrettyError` (+ their option types), `NODE_LOGGER_SYSTEM_INFO`, and the core factory re-exports.                                |\n| `@neodx/log/utils`   | Building blocks for custom factories: `createLoggerAutoFactory`, `printf`, `readArguments`, `serializeJSON` (+ `LogArguments`, `AutoLoggerInput`).                                                                                                                                                                      |\n| `@neodx/log/http`    | Node core `http` adapter: `createHttpLogger` (+ `HttpLoggerParams`, `HttpResponseContext`, `HttpLogLevels`, `HttpRequestId`, `HttpLoggerMetaKeys`). Augments `http.IncomingMessage`/`ServerResponse`/`OutgoingMessage`.                                                                                                 |\n| `@neodx/log/express` | Express adapter: `createExpressLogger` (returns the middleware plus `preserveErrorMiddleware`). Augments `express` `Request`/`Response`.                                                                                                                                                                                |\n| `@neodx/log/koa`     | Koa adapter: `createKoaLogger`. Augments `koa` `Context`/`Request`/`Response`.                                                                                                                                                                                                                                          |\n\n> In the browser, the `./node` subpath transparently resolves to the isomorphic `@neodx/log` build\n> (see the `browser` condition in `package.json` `exports`), so importing `@neodx/log/node` yields\n> the core logger instead of the Node-only targets. The `./express`, `./koa`, and `./http` adapters\n> are Node-only and should not be imported in browser code.\n\n## Installation\n\n```bash\n# yarn\nyarn add @neodx/log\n# npm\nnpm install @neodx/log\n# pnpm\npnpm install @neodx/log\n```\n\n## Usage\n\n### First steps\n\nFor basic usage, you can just create a logger and start logging:\n\n```typescript\nimport { createLogger } from '@neodx/log';\n\nconst log = createLogger();\n\nlog.info('Hello, world!'); // Hello, world!\n```\n\n### Branding your logs\n\nBy default, logger doesn't have a name, so you can't distinguish between different loggers.\nLet's add a name:\n\n```typescript\nconst log = createLogger({\n  name: 'my-app'\n});\n\nlog.info('Hello, world!'); // [my-app] Hello, world!\n```\n\n### Semantic levels\n\nWe're supporting multiple log levels exposed as methods for semantic and output control.\n\nYou can use one of the built-in log levels: `error`, `warn`, `info`, `done`, `success`, `verbose`, `debug`:\n\n```typescript\nconst log = createLogger({ name: 'my-app' });\n\nlog.error('Something went wrong!'); // errors most important level\nlog.warn('Deprecated function used!'); // warnings\nlog.info('User logged in'); // information, most used level, neutral messages\nlog.done('Task completed'); // any success messages, by default less important than \"info\"\nlog.success('Session has been closed'); // alias to \"done\"\nlog.debug({ login: 'gigachad', password: '123' }, 'User logged in, session id: %s', 'xx-dj2jd'); // debug messages, the least important level, can contain sensitive information for debugging purposes\nlog.verbose('User opened the page %s', '/home'); // verbose messages, extended information, alias to \"debug\"\n```\n\n<div align=\"center\">\n  <img alt=\"Header\" src=\"docs/output-levels.png\" width=\"1416\">\n</div>\n\n#### Level aliasing\n\nSometimes you want to specify additional semantic levels, for example, `trace` or `fatal`, but you don't want to add a new **real** level to the logger, because it requires additional configuration and output control.\n\nTo solve this problem, you can define level aliases:\n\n```typescript\nconst log = createLogger({\n  level: 'info',\n  levels: {\n    fatal: 'error',\n    trace: 'debug'\n  }\n});\n\nlog.fatal('Something went wrong!'); // [my-app] Something went wrong!\nlog.trace('User opened the page %s', '/home'); // [my-app] User opened the page /home\n```\n\nIn this example, we defined two aliases: `fatal` and `trace` that will be mapped to `error` and `debug` levels respectively without any additional behavior.\n\nSome targets are supporting additional configuration for aliases, for example, `pretty` target tries to work with aliases as with real levels, so you can specify different settings for them.\n\n```typescript\nconst aliases = createLogger({\n  name: 'aliases',\n  level: 'trace',\n  levels: {\n    ...DEFAULT_LOGGER_LEVELS,\n    fatal: 'error',\n    trace: 'debug'\n  },\n  target: pretty({\n    levelColors: {\n      ...pretty.defaultColors,\n      fatal: 'red',\n      trace: 'magentaBright'\n    },\n    levelBadges: {\n      ...pretty.defaultBadges,\n      fatal: '💀',\n      trace: '❯'\n    }\n  })\n});\n\naliases.error('Message from error level');\naliases.fatal('fatal is alias for error');\naliases.warn('Attention!');\naliases.info('Some common information');\naliases.done('Success message');\naliases.debug('Additional details');\naliases.verbose('is alias for debug');\naliases.trace('is alias for debug, too!');\n```\n\n<div align=\"center\">\n  <img alt=\"Aliases\" src=\"docs/aliases.png\" width=\"1124\">\n</div>\n\n### Formatting, metadata, and errors\n\nEvery log method supports [format template](#format-template) and optional error/metadata as the first argument.\n\"Metadata\" is an object with your data, which will be serialized to JSON and added to the log message.\n\nYou can use any combination of arguments:\n\n- Template/raw - `log.info('Hello, %s!', 'world')`, `log.info('Hello, world!')`\n- Metadata - `log.info({ my: 'field' })`\n- Error - `log.error(new Error('Something went wrong!'))`\n- Error with metadata `log.error({ err: new Error('Something went wrong!'), foo: 'bar' })`\n\nIn other words:\n\n- If the first argument is an object, it will be treated as metadata; other arguments are a format template and arguments for it\n- If the first argument is an error, it will be treated as an error; other arguments are a format template and arguments for it\n- Otherwise, the first argument is a format template and the other arguments are arguments for it\n\nLet's see how it works:\n\n```typescript\nconst log = createLogger();\n\nlog.info('Hello, world!'); // \"Hello, world!\"\nlog.info({ name: 'world' }); // [ Metadata: { \"name\": \"world\" } ]\nlog.info('Hello, %s!', 'world'); // \"Hello, world!\"\nlog.info({ name: 'world' }, 'Hello, %s!', 'world'); // [ Metadata: { \"name\": \"world\" } ] Hello, world!\nlog.error(new Error('Something went wrong!')); // Error: Something went wrong!\nlog.error({ err: new Error('Something went wrong!'), foo: 'bar' }); // Error: Something went wrong! [ Metadata: { \"foo\": \"bar\" } ]\n```\n\n### 🆕 Frameworks integration\n\n`@neodx/log` provides a set of integrations for popular frameworks built on top of the core logger and Node.JS `http` module.\n\n> **Note:** We have a plan to add more integrations in the future, but you can use the core logger with any framework.\n\n#### Express\n\n![Express](docs/example-express-logs.png)\n\n> **Note:** Under explanation, we will use `@neodx/log/express`, but the same approach can be used for any supported framework.\n\n> **Note:** Currently, we are not able to catch errors from single middleware, so you need to use `preserveErrorMiddleware` to catch errors from all middlewares.\n\n```typescript\nimport { createExpressLogger } from '@neodx/log/express';\nimport { createLogger } from '@neodx/log/node';\nimport express from 'express';\nimport createError from 'http-errors';\n\nconst app = express();\nconst expressLogger = createExpressLogger();\n\napp.use(expressLogger);\napp.get('/', (req, res) => {\n  res.send('respond with a resource');\n});\napp.get('/:id', (req, res) => {\n  req.log.info('Requested user ID %s', req.params.id);\n  res.status(200).json({ id: req.params.id });\n});\n// ... other routes\napp.use((req, res, next) => {\n  next(createError(404));\n});\napp.use(expressLogger.preserveErrorMiddleware);\n```\n\n###### Pass your own logger instance\n\nBy default, `createExpressLogger` and other framework integrations will create a new empty logger instance,\nbut you can pass your own instance:\n\n```typescript\nimport { createExpressLogger } from '@neodx/log/express';\nimport { createLogger } from '@neodx/log';\n\nconst logger = createLogger({\n  name: 'my-app',\n  level: 'debug'\n});\n\napp.use(createExpressLogger({ logger }));\n```\n\n##### Configure every part of request logging\n\n> For detailed information, check [HttpLoggerParams API reference](#httploggerparams)\n\n```typescript\n// Other frameworks adapters will have same options\ncreateExpressLogger({\n  // You can pass your own request ID extractor instead of our built-in generator\n  getRequestId: req => req.headers['x-request-id'],\n\n  // Control logging behavior\n\n  shouldLog: ({ req }) => !isHealthCheck(req), // enable/disable logging. By default, it will log every request\n  shouldLogError: true, // will log any tracked error\n  shouldLogRequest: true, // log information about the request\n  shouldLogResponse: true, // log successful response\n\n  // Extract information from request/response\n\n  getMeta: ({ req }) => ({ ip: req.ip }), // function to get metadata for every request\n  // function to get metadata for error\n  getErrorMeta: ({ req, res, error }) => ({/* ... */}),\n  // function to get metadata for request\n  getRequestMeta: ({ req, res }) => ({/* ... */}),\n  // function to get metadata for response\n  getResponseMeta: ({ req, res }) => ({/* ... */}),\n\n  // Customize log messages (we already format them for you in a well-readable way)\n\n  getErrorMessage: ({ req }) => `Failed ${req.method} ${req.url}`, // function to get log message for error\n  getRequestMessage: ({ req }) => `Request ${req.method} ${req.url}`, // function to get log message for request\n  getResponseMessage: ({ req }) => `Success ${req.method} ${req.url}` // function to get log message for response\n});\n```\n\n#### Koa\n\nIn Koa, you don't need to pass anything except `createKoaLogger` middleware:\n\n```typescript\napp.use(createKoaLogger());\n```\n\n<details>\n  <summary>Detailed example</summary>\n\n  <img alt=\"Koa\" src=\"docs/example-koa-logs.png\" width=\"1892\" />\n\n```typescript\nimport { createKoaLogger } from '@neodx/log/koa';\nimport { createLogger } from '@neodx/log/node';\nimport createError from 'http-errors';\nimport Koa from 'koa';\n\nconst dev = process.env.NODE_ENV !== 'production';\nconst port = process.env.PORT || 3000;\n\nconst app = new Koa();\nconst logger = createLogger({\n  name: 'koa-app'\n});\nconst koaLogger = createKoaLogger({\n  logger,\n  simple: dev,\n  shouldLogRequest: true\n});\n\napp.use(koaLogger);\napp.use(async (ctx, next) => {\n  await next();\n  const status = ctx.status || 404;\n\n  if (status === 404) {\n    ctx.throw(createError(404));\n  }\n});\napp.get('/users', ctx => {\n  ctx.body = 'respond with a resource';\n});\napp.get('/users/:id', ctx => {\n  ctx.req.log.info('Requested user ID %s', ctx.params.id);\n  ctx.status = 200;\n  ctx.body = { id: ctx.params.id };\n});\n\napp.listen(port, () => {\n  logger.success(`Example app listening on port ${port}!`);\n});\n```\n\n</details>\n\n#### Node.JS HTTP\n\nNode.JS `http` module is the most basic way to create a server in Node.JS,\nso we don't have any abstractions as we have for Express or Koa.\n\nWe need to create http logger handler and pass it to `http.createServer` by ourselves:\n\n```typescript\nconst httpLogger = createHttpLogger();\nconst server = createServer((req, res) => {\n  httpLogger(req, res);\n  // ... your code\n});\n```\n\n<details>\n  <summary>Detailed example</summary>\n\n  <img alt=\"Koa\" src=\"docs/example-http-logs.png\" width=\"1892\" />\n\n```typescript\nimport { createHttpLogger } from '@neodx/log/http';\nimport { createLogger } from '@neodx/log/node';\nimport createError from 'http-errors';\nimport { createServer } from 'node:http';\n\nconst dev = process.env.NODE_ENV !== 'production';\nconst port = process.env.PORT || 3000;\n\nconst logger = createLogger({\n  name: 'node-http-app'\n});\nconst httpLogger = createHttpLogger({\n  logger,\n  simple: dev,\n  shouldLogRequest: true\n});\n\nconst server = createServer((req, res) => {\n  httpLogger(req, res);\n  if (req.url === '/users') {\n    res.setHeader('Content-Type', 'application/json');\n    res.writeHead(200);\n    res.end(\n      JSON.stringify([\n        { id: 1, name: 'John' },\n        { id: 2, name: 'Jane' }\n      ])\n    );\n  } else {\n    res.err = createError(404);\n    res.writeHead(404);\n    res.end('Unknown route');\n  }\n});\n\nserver.listen(port, () => {\n  logger.success(`Example app listening on port ${port}!`);\n});\n```\n\n</details>\n\n## Key concepts\n\n### Log levels\n\nLevels are a semantic method and mechanism for controlling output in different environments.\n\n```typescript\nconst log = createLogger({\n  /**\n   * All messages with a lower-priority level than this are ignored.\n   * @default \"done\" (from DEFAULT_LOGGER_PARAMS)\n   */\n  level: process.env.NODE_ENV === 'production' ? 'info' : 'debug'\n});\n\nlog.error('Always visible'); // \"error\" satisfies both \"info\" and \"debug\" restrictions\nlog.info('It is visible too'); // \"info\" satisfies both restrictions too\nlog.debug('But this is not'); // will not be visible in production, because \"debug\" doesn't satisfy \"info\" restriction\n```\n\nIf you want to introduce your levels, you can do it with `levels` option:\n\n```typescript\nimport { createLogger, LOGGER_SILENT_LEVEL } from '@neodx/log';\n\nconst log = createLogger({\n  level: 'success',\n  /**\n   * @default { error: 10, warn: 20, info: 30, verbose: 40, debug: 50 }\n   */\n  levels: {\n    fatal: 10,\n    error: 20,\n    warn: 30,\n    info: 40,\n    success: 50,\n    debug: 60,\n    [LOGGER_SILENT_LEVEL]: Infinity // special level, which will disable all output\n  }\n});\n\nlog.success('Done successfully!');\nlog.warn('Let me check it...');\nlog.fatal('Something went very wrong');\n```\n\nFor some additional information about levels, see [createLogger API](#createlogger) options.\n\n### Log targets\n\nImagine that you have a server application, and you want to get the following behavior:\n\n- In development, you want to see all logs in the console\n- In production, you want to see only errors in the console and all non-debug logs in the file\n- In tests, you want to see only errors in the console\n\nTo achieve this, you can use `target` option and specify different targets based on the environment:\n\n```typescript\nimport { createLogger, pretty, json, file } from '@neodx/log/node';\n\nconst log = createLogger({\n  target: [\n    // Enabling pretty output for errors in test mode\n    {\n      level: 'error',\n      target: process.env.NODE_ENV === 'test' ? pretty() : []\n    },\n    // Enabling JSON stdout streaming for errors in production mode\n    {\n      level: 'error',\n      target: process.env.NODE_ENV === 'production' ? json() : []\n    },\n    // Enabling file streaming for \"info\", \"warn\" and \"error\" in production mode\n    {\n      level: 'info',\n      target: process.env.NODE_ENV === 'production' ? file('/dev/null') : []\n    },\n    // Enabling pretty output for \"debug\" in development mode\n    {\n      level: 'debug',\n      target: process.env.NODE_ENV === 'development' ? pretty() : []\n    }\n  ]\n});\n```\n\nIt's an example for multiple targets configuration only, but you also can use a single target and multiple targets on same level, see [createLogger API](#createlogger) options for more information.\n\n### Format template\n\nWe're providing support for **limited (_see further_)** [printf](https://en.wikipedia.org/wiki/Printf_format_string) format for log messages.\nYou can annotate string with special placeholders, which will be replaced with values from the argument list:\n\n- `%s` - string\n- `%d` - number\n- `%i` - integer\n- `%f` - float\n- `%j` - JSON, under the hood we're resolving circular references (they will be replaced with `\"[Circular]\"`)\n- `%o`, `%O` - object, in our implementation, it's the same as `%j`\n- `%%` - percent sign\n\nTo start using it, just add placeholders to your message:\n\n```typescript\nlog.info('Raw string'); // \"Raw string\", no placeholders, no arguments\nlog.info('Hello, %s!', 'world'); // \"Hello, world!\"\nlog.info('Hello, %s, you are %d years old!', 'John', 30); // \"Hello, John, you are 30 years old!\"\nlog.info('Hello, %s, you are %i years old! Your salary is %f', 'John', 30, '1000.5'); // \"Hello, John, you are 30 years old! Your salary is 1000.5\"\nlog.info('Object: %j', { foo: 'bar' }); // \"Object: { \"foo\": \"bar\" }\"\nconst object = { foo: 'bar' };\n\nobject.bar = object; // Circular reference\nlog.info('Circular object: %j', object); // \"Circular object: { \"foo\": \"bar\", \"bar\": \"[Circular]\" }\"\n```\n\nIn specific cases, you can replace our `printf` implementation with your own:\n\n```typescript\nimport { createLoggerFactory, DEFAULT_LOGGER_PARAMS } from '@neodx/log';\nimport { readArguments } from '@neodx/log/utils';\nimport { format } from 'node:util';\n\nexport const createLogger = createLoggerFactory({\n  formatMessage: (message: string, args: unknown[]) => format(message, ...args),\n  readArguments,\n  defaultParams: {\n    ...DEFAULT_LOGGER_PARAMS\n    // Your default params\n  }\n});\n```\n\n## Advanced\n\n### Building your own logger\n\nIf you don't feel good with our built-in core parts, and you want to build your own logger, you can use `createLoggerFactory` function:\n\n```typescript\nimport { createConsoleTarget, createLoggerFactory, DEFAULT_LOGGER_PARAMS } from '@neodx/log';\nimport { readArguments } from '@neodx/log/utils';\n\nexport const createLogger = createLoggerFactory({\n  defaultParams: {\n    ...DEFAULT_LOGGER_PARAMS,\n    target: createConsoleTarget()\n  },\n  formatMessage: (message: string, args: unknown[]) => {\n    // Your implementation\n  },\n  readArguments // Not too much sense to override it, but you can do it\n});\n```\n\n`createConsoleTarget(console = globalThis.console)` returns a `LoggerHandler` that maps each log level\nto its matching `console` method (falling back to `console.log`), appends non-empty `meta` as a final\nargument, and prints the `error` on its own line when present. It is the default target of the\nisomorphic `createLogger`.\n\n## API\n\n### `createLogger`\n\nCreate a new logger instance.\n\n```typescript\nimport { createLogger, LOGGER_SILENT_LEVEL } from '@neodx/log';\n\nconst log = createLogger({\n  /**\n   * Logger name\n   * @default No name\n   */\n  name: 'my-logger',\n  /**\n   * Logger level. All messages with lower level will be ignored.\n   * @default done\n   */\n  level: 'debug',\n  /**\n   * Object with all available levels and their values.\n   * @default { error: 10, warn: 20, info: 30, done: 40, debug: 50, success: 'done', verbose: 'debug', [LOGGER_SILENT_LEVEL]: Infinity }\n   */\n  levels: {\n    error: 10, // Lowest value - highest priority, can be disabled only with { level: \"silent\" }\n    warn: 20,\n    info: 30,\n    debug: 40, // Highest value - lowest priority, logs will be emitted only with { level: \"debug\" },\n    verbose: 'debug', // You can use level aliases\n    [LOGGER_SILENT_LEVEL]: Infinity // Special level, which can be used to disable all logs. Ignore it if you don't need it.\n  },\n  /**\n   * Logger target(s). See details further.\n   * @type {LoggerHandler<Level> | Array<LoggerHandler<Level> | LoggerHandleConfig<Level> | Falsy>}\n   */\n  target: createConsoleTarget(),\n  /**\n   * Base metadata, which will be added to every log message\n   * @default No metadata\n   */\n  meta: {\n    foo: 'bar'\n  },\n  /**\n   * Logger chunks transformer(s). See details further.\n   * @type {LoggerTransformer<Level> | Array<LoggerTransformer<Level>>}\n   */\n  transform: params => ({\n    ...params,\n    meta: {\n      ...params.meta,\n      bar: 'baz'\n    }\n  })\n});\n```\n\nAlternatively, can be created with [`createLoggerFactory`](#createLoggerFactory).\n\n#### `target: LoggerHandler<Level>`\n\nSingle target for all logs.\n\n```typescript\nimport { createLogger, pretty, json } from '@neodx/log/node';\n\nconst log = createLogger({\n  target: process.env.NODE_ENV === 'production' ? json() : pretty()\n});\n```\n\n#### `target: LoggerHandleConfig<Level>`\n\nLog target can be described as a config object:\n\n```typescript\nconst log = createLogger({\n  target: {\n    /**\n     * The minimum level priority that this stream will receive.\n     * @example 'info' - will receive 'info', 'warn' and 'error' chunks\n     * @example 'warn' - will receive 'warn' and 'error' chunks\n     * @example 'error' - will receive only 'error' chunks\n     * @default no minimum level, will receive all chunks\n     */\n    level: 'info', // Will receive only 'info', 'warn' and 'error' chunks\n    /**\n     * Your handler function(s) that will receive log chunks.\n     * @param chunk Log chunk\n     */\n    target: chunk => console.log(chunk)\n  }\n});\n```\n\n#### `target: Array<LoggerHandler<Level> | LoggerHandleConfig<Level> | Falsy>`\n\nIf you need to send different log chunks to different targets, you can specify an array of targets:\n\n```typescript\nconst log = createLogger({\n  target: [\n    {\n      level: 'info', // Will receive only 'info', 'warn' and 'error' chunks\n      target: [json(), chunk => writeLogToFile(chunk)]\n    },\n    {\n      level: 'error', // Will receive only 'error' chunks\n      target: chunk => sendLogToSentry(chunk)\n    },\n    // You can use simple conditional expressions to specify targets\n    process.env.NODE_ENV === 'production' && {\n      level: 'debug', // Will receive only 'debug' chunks\n      target: chunk => sendLogToSentry(chunk)\n    }\n  ]\n});\n```\n\n#### `transform: LoggerTransformer<Level>`\n\nSingle transformer for all logs.\n\n```typescript\nconst log = createLogger({\n  /**\n   * Transform log chunks before sending them to the target(s)\n   */\n  transform: params => ({\n    ...params,\n    meta: redactSensitiveData(params.meta)\n  })\n});\n```\n\n#### `transform: Array<LoggerTransformer<Level>>`\n\nIf you need to transform different log chunks in different ways, you can specify an array of transformers\n(the single-transformer form above is just shorthand for a one-element array):\n\n```typescript\nconst log = createLogger({\n  /**\n   * Transform log chunks before sending them to the target(s)\n   */\n  transform: [\n    params => ({\n      ...params,\n      meta: redactSensitiveData(params.meta)\n    }),\n    params => ({\n      ...params,\n      msg: replaceUnsecureLinks(params.msg)\n    })\n  ]\n});\n```\n\n### `createHttpLogger`\n\nCreate new HTTP logger middleware for handling `node:http`-based requests.\n\n`req` and `res` are `node:http` request and response objects or their extensions (e.g. `express` request and response).\n\nExtended signature:\n\n```typescript\ndeclare function createHttpLogger<\n  // By default, `req` and `res` are `node:http` request and response objects\n  Req extends IncomingMessage = IncomingMessage,\n  Res extends OutgoingMessage = OutgoingMessage\n>(params: HttpLoggerParams<Req, Res>): RequestHandler<Req, Res>;\n\ntype RequestHandler<Req extends IncomingMessage, Res extends OutgoingMessage> = (\n  req: Req,\n  res: Res,\n  next: (err?: any) => void\n) => void;\n```\n\n#### `HttpLoggerParams`\n\n```typescript\ninterface HttpLoggerParams<\n  Req extends IncomingMessage = IncomingMessage,\n  Res extends OutgoingMessage = OutgoingMessage\n> {\n  /**\n   * Custom logger instance.\n   * @default createLogger()\n   */\n  logger?: Logger<HttpLogLevels>;\n  /**\n   * Custom colors instance\n   * @see `@neodx/colors`\n   */\n  colors?: Colors;\n  /**\n   * If `true`, the logger will only log the pre-formatted message without any additional metadata.\n   * @default process.env.NODE_ENV === 'development'\n   */\n  simple?: boolean;\n  /**\n   * Optional function to extract/create request ID.\n   * @default built-in simple safe number counter\n   */\n  getRequestId?: (req: Req, res: Res) => string | number;\n\n  // ===\n  // Metadata and formatting\n  // ===\n\n  /**\n   * Extract shared metadata for every produced log\n   */\n  getMeta?: (req: Req, res: Res) => Record<string, unknown>;\n  /**\n   * Extract metadata for request logs\n   */\n  getRequestMeta?: (ctx: HttpResponseContext<Req, Res>) => Record<string, unknown>;\n  /**\n   * Custom incoming request message formatter\n   */\n  getRequestMessage?: (ctx: HttpResponseContext<Req, Res>) => string;\n  /**\n   * Extract metadata for success response logs\n   */\n  getResponseMeta?: (ctx: HttpResponseContext<Req, Res>) => Record<string, unknown>;\n  /**\n   * Custom success response message formatter\n   */\n  getResponseMessage?: (ctx: HttpResponseContext<Req, Res>) => string;\n  /**\n   * Extract metadata for error response logs\n   */\n  getErrorMeta?: (ctx: HttpResponseContext<Req, Res>) => Record<string, unknown>;\n  /**\n   * Custom error response message formatter\n   */\n  getErrorMessage?: (ctx: HttpResponseContext<Req, Res>) => string;\n\n  // ===\n  // Control logging behavior\n  // ===\n\n  /**\n   * Whether to log anything at all.\n   * @default true\n   */\n  shouldLog?: boolean | ((req: Req, res: Res) => boolean);\n  /**\n   * Prevents logging of errors.\n   * @default true\n   */\n  shouldLogError?: boolean | ((ctx: HttpResponseContext<Req, Res>) => boolean);\n  /**\n   * Prevents built-in logging of requests.\n   * DISABLED BY DEFAULT, because it can be very verbose.\n   * @default false\n   */\n  shouldLogRequest?: boolean | ((ctx: HttpResponseContext<Req, Res>) => boolean);\n  /**\n   * Prevents built-in logging of responses.\n   * @default true\n   */\n  shouldLogResponse?: boolean | ((ctx: HttpResponseContext<Req, Res>) => boolean);\n}\n```\n\n#### `HttpResponseContext`\n\n```typescript\ninterface HttpResponseContext<\n  Req extends IncomingMessage = IncomingMessage,\n  Res extends OutgoingMessage = OutgoingMessage\n> {\n  // request\n  req: Req;\n  // response\n  res: Res;\n  // error will be present if is an error response\n  error?: Error;\n  // reference to logger instance\n  logger: Logger<HttpLogLevels>; // 'debug' | 'error' | 'info' | 'done'\n  // reference to @neodx/colors instance\n  colors: Colors;\n  // measured response time, filled on response finish/error\n  responseTime: number;\n}\n```\n\n#### `createExpressLogger`\n\nSame signature as `createHttpLogger`, but with `express`-specific types and additional `preserveErrorMiddleware`.\n\n```typescript\nimport type { Request, Response, ErrorRequestHandler } from 'express';\n\ndeclare function createExpressLogger(\n  params: HttpLoggerParams<Request, Response>\n): ExpressLoggerMiddleware;\n\ninterface ExpressLoggerMiddleware extends RequestHandler {\n  /**\n   * Middleware to preserve error status code and message\n   */\n  preserveErrorMiddleware: ErrorRequestHandler;\n}\n```\n\n#### `createKoaLogger`\n\nSame signature as `createHttpLogger`.\n\n```typescript\nimport type { Middleware } from 'koa';\n\ndeclare function createKoaLogger(params: HttpLoggerParams): Middleware;\n```\n\n### `createLoggerFactory`\n\nCustomize logger behavior and create a new logger factory.\n\n```typescript\nimport { createLoggerFactory, DEFAULT_LOGGER_PARAMS } from '@neodx/log';\nimport { readArguments, printf, type LogArguments } from '@neodx/log/utils';\n\nconst createLogger = createLoggerFactory({\n  /**\n   * Default logger parameters\n   */\n  defaultParams: {\n    ...DEFAULT_LOGGER_PARAMS,\n    target: createConsoleTarget()\n  },\n  /**\n   * Message formatter\n   * @default Our own limited implementation of printf\n   */\n  formatMessage: (message: string, args: unknown[]) => printf(message, args),\n  /**\n   * Arguments reader, used to extract metadata and error from the arguments list\n   * @param args - Logger method's arguments\n   * @returns A tuple with message fragments, metadata and optional error\n   */\n  readArguments: (args: unknown[]): LogArguments => readArguments(args) // I don't know why you want to replace it, but you can\n});\n```\n\n## Motivation\n\nLogging is one of the key aspects of software development, and you've probably heard advice like \"Just log everything.\"\nIt's a solid recommendation, and chances are, you agree with it too.\nHowever, in web development, logging can sometimes become challenging to manage and maintain, leading to a frustrating development experience (DX).\n\nOften, we find ourselves avoiding logs until it becomes inevitable, removing them, or wrapping them in numerous conditions.\nIn today's development landscape, logs can be perceived as a hindrance to DX.\nNevertheless, embracing comprehensive logging is essential for effective software development and is required for building stable products.\n\nSo, what's the problem? Why do we avoid logging?\n\nDuring software development, developers frequently face the same issue: \"How can I turn off, replace, or modify my logs?\"\nThe inability to easily control logging behavior often leads us to one of two choices—either drop the logs (we even have ESLint rules for this purpose) altogether or introduce an abstraction layer.\n\nDropping logs means avoiding any use of `console.log` and similar APIs, simply because we **cannot control them**.\n\nOn the other hand, abstractions come with their own set of trade-offs and there is no widely-accepted, easy-to-use solution available.\n\nIn my opinion, - we just don't have a good enough abstraction layer for logging:\n\n- Small size\n- Isomorphic\n- Configurable\n- Multiple transports support\n- Multiple log levels support\n- Built-in pretty-printing, JSON logging\n- etc.\n\nOkay, maybe we have some good enough solutions, but they are not perfect:\n\n- [pino](https://www.npmjs.com/package/pino) - **really fast**, but 3kb (browser) size, huge API, no built-in pretty-printing\n- [signale](https://www.npmjs.com/package/signale) - Not maintained, only Node.JS, only pretty-printing, no JSON logging\n- [loglevel](https://www.npmjs.com/package/loglevel) - Not maintained, just a console wrapper\n- Other solutions are not worth mentioning, they are too far from the \"just take it and use it\" state\n\nAnd after all, I decided to create my own solution.\n\n## Comparison\n\n### JSON logging\n\nThis is a simple comparison of JSON logging output from different libraries.\n\n<div align=\"center\">\n  <img alt=\"JSON logging\" src=\"docs/compare-output.png\" width=\"2574\">\n</div>\n\n## Inspiration\n\nThis project got inspiration about API design and some features from the following projects:\n\n- [signale](https://www.npmjs.com/package/signale) for pretty target inspiration\n- [pino](https://www.npmjs.com/package/pino) for JSON logging, API design and framework integration ideas\n- [vitest](https://vitest.dev/) for beautiful errors printing\n- Other loggers for comparison:\n- [loglevel](https://www.npmjs.com/package/loglevel)\n- [winston](https://www.npmjs.com/package/winston)\n- [bunyan](https://www.npmjs.com/package/bunyan)\n\n## License\n\n[MIT](https://github.com/secundant/neodx/blob/main/LICENSE)\n","readmeFilename":"README.md"}