zeed 1.1.1 → 1.2.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +225 -18
- package/README.md +1 -1
- package/dist/_experiments/bitcask.cjs.map +1 -1
- package/dist/browser/base64.cjs.map +1 -1
- package/dist/browser/gravatar.cjs.map +1 -1
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/localstorage.cjs.map +1 -1
- package/dist/browser/log/index.cjs.map +1 -1
- package/dist/browser/log/log-browser-factory.cjs.map +1 -1
- package/dist/browser/log/log-browser.cjs.map +1 -1
- package/dist/browser/log/log-colors.cjs.map +1 -1
- package/dist/browser/log/log-context-browser.cjs.map +1 -1
- package/dist/chunk-2TNLYCZH.cjs.map +1 -1
- package/dist/chunk-2UQU3IBA.cjs.map +1 -1
- package/dist/chunk-32B4KRI6.cjs.map +1 -1
- package/dist/{chunk-DAD3M2IM.cjs → chunk-344WNUEK.cjs} +2 -2
- package/dist/chunk-344WNUEK.cjs.map +1 -0
- package/dist/chunk-36N7ZI6A.cjs.map +1 -1
- package/dist/chunk-3P4XRJ23.cjs.map +1 -1
- package/dist/chunk-3TNVJY4F.cjs.map +1 -1
- package/dist/chunk-3ZBLU4D6.cjs.map +1 -1
- package/dist/chunk-47GAJHNO.cjs.map +1 -1
- package/dist/chunk-4ATJXWZH.cjs.map +1 -1
- package/dist/chunk-4B2XCWGL.cjs.map +1 -1
- package/dist/chunk-4M4EUXUS.cjs.map +1 -1
- package/dist/chunk-4TLMJAZB.cjs.map +1 -1
- package/dist/chunk-5RHVNJKM.cjs.map +1 -1
- package/dist/chunk-5RJ6XORD.cjs.map +1 -1
- package/dist/chunk-5VHLMAKU.cjs.map +1 -1
- package/dist/chunk-75LG3YTX.cjs.map +1 -1
- package/dist/chunk-7HXAZLZN.cjs.map +1 -1
- package/dist/chunk-7UA33BQW.cjs.map +1 -1
- package/dist/chunk-7XE6IQ4X.cjs.map +1 -1
- package/dist/chunk-A6DSKTWF.cjs.map +1 -1
- package/dist/chunk-ABCQXAMV.cjs.map +1 -1
- package/dist/chunk-AERHWWDH.cjs.map +1 -1
- package/dist/chunk-AH7ZMSSE.cjs.map +1 -1
- package/dist/chunk-B2XPF5R4.cjs.map +1 -1
- package/dist/chunk-B75IPNYG.cjs.map +1 -1
- package/dist/{chunk-RZPIAOGG.js → chunk-BPPN3ZNV.js} +2 -2
- package/dist/chunk-BPWOWVF7.cjs.map +1 -1
- package/dist/chunk-BQ66KUDG.cjs.map +1 -1
- package/dist/chunk-BTEZYY77.cjs.map +1 -1
- package/dist/chunk-BTOZJX47.cjs.map +1 -1
- package/dist/chunk-C3WUDLBK.cjs.map +1 -1
- package/dist/{chunk-AUYYYDRM.cjs → chunk-C72ST4ZR.cjs} +1 -1
- package/dist/chunk-C72ST4ZR.cjs.map +1 -0
- package/dist/chunk-C7CD7VGT.cjs.map +1 -1
- package/dist/chunk-CEANCAI7.cjs.map +1 -1
- package/dist/chunk-CGNAZMNO.cjs.map +1 -1
- package/dist/chunk-CGQIHGXL.cjs.map +1 -1
- package/dist/chunk-CHR4BOAA.cjs.map +1 -1
- package/dist/{chunk-LXFL3VYA.cjs → chunk-CLMIDN5Q.cjs} +2 -2
- package/dist/chunk-CLMIDN5Q.cjs.map +1 -0
- package/dist/chunk-CM2VW6MR.cjs.map +1 -1
- package/dist/chunk-CWGNDC2T.cjs.map +1 -1
- package/dist/chunk-CYPMLO24.cjs.map +1 -1
- package/dist/{chunk-AH3LPY2A.js → chunk-DBXJFUZ7.js} +2 -2
- package/dist/chunk-DHZPCNPE.cjs.map +1 -1
- package/dist/chunk-DLVWYIS2.cjs.map +1 -1
- package/dist/chunk-DMKWVXY7.cjs.map +1 -1
- package/dist/chunk-DRKHTT76.cjs.map +1 -1
- package/dist/chunk-DXQHNAIL.cjs.map +1 -1
- package/dist/chunk-ETHALF2S.cjs.map +1 -1
- package/dist/chunk-FMMEBQFR.cjs.map +1 -1
- package/dist/{chunk-5BA3O5XZ.cjs → chunk-GARQAHQE.cjs} +2 -2
- package/dist/chunk-GARQAHQE.cjs.map +1 -0
- package/dist/chunk-GFMSFYKE.cjs.map +1 -1
- package/dist/chunk-GILR5DT5.cjs.map +1 -1
- package/dist/chunk-HEYAOG5D.cjs.map +1 -1
- package/dist/chunk-HTEAHUXG.cjs.map +1 -1
- package/dist/chunk-HZC2RTNS.cjs.map +1 -1
- package/dist/chunk-I5HBI6EC.cjs.map +1 -1
- package/dist/chunk-IA2OMOCB.cjs.map +1 -1
- package/dist/chunk-IJE3VBKC.cjs.map +1 -1
- package/dist/chunk-IOEXXFCL.cjs.map +1 -1
- package/dist/chunk-IVUEQANC.cjs.map +1 -1
- package/dist/chunk-IXH5D35S.cjs.map +1 -1
- package/dist/chunk-JJKWFF7B.cjs.map +1 -1
- package/dist/chunk-JLB5ALZ5.cjs.map +1 -1
- package/dist/chunk-JWON4PLZ.cjs.map +1 -1
- package/dist/chunk-K4IRAHZV.cjs.map +1 -1
- package/dist/chunk-KFNJHRCB.cjs.map +1 -1
- package/dist/chunk-KJ3RKZH5.cjs.map +1 -1
- package/dist/chunk-KNKYRU4X.cjs.map +1 -1
- package/dist/chunk-KPU7ZOUH.cjs.map +1 -1
- package/dist/{chunk-LI2YWV3G.js → chunk-KWFFSQMW.js} +2 -2
- package/dist/chunk-KYDHX5HW.cjs.map +1 -1
- package/dist/chunk-KYNPDWX4.cjs.map +1 -1
- package/dist/chunk-L5C7BHMX.cjs.map +1 -1
- package/dist/chunk-L5IXZXHR.cjs.map +1 -1
- package/dist/chunk-L5XYQBG4.cjs.map +1 -1
- package/dist/chunk-LCZEBSTH.cjs.map +1 -1
- package/dist/{chunk-ETMFCGHO.cjs → chunk-LG7UXZKN.cjs} +2 -2
- package/dist/chunk-LG7UXZKN.cjs.map +1 -0
- package/dist/chunk-LLRM7AW7.cjs.map +1 -1
- package/dist/chunk-LONV4KUS.cjs +2 -0
- package/dist/chunk-LONV4KUS.cjs.map +1 -0
- package/dist/chunk-LUPESR7S.cjs.map +1 -1
- package/dist/chunk-M3W3RDZF.cjs.map +1 -1
- package/dist/chunk-MIEXPALS.cjs.map +1 -1
- package/dist/chunk-MQFII6MR.cjs.map +1 -1
- package/dist/{chunk-UFYY2K4G.js → chunk-MV2F4DQ6.js} +2 -2
- package/dist/chunk-MVSJTIGR.cjs.map +1 -1
- package/dist/chunk-N7XCSNC7.cjs.map +1 -1
- package/dist/chunk-NNQYMABK.cjs.map +1 -1
- package/dist/chunk-NPQ77LO4.cjs.map +1 -1
- package/dist/chunk-NU2LARFE.cjs.map +1 -1
- package/dist/chunk-NVLJOTGF.cjs.map +1 -1
- package/dist/chunk-NVLQ55J2.cjs.map +1 -1
- package/dist/chunk-O5QH7LLM.cjs.map +1 -1
- package/dist/chunk-OGP3AZFM.cjs.map +1 -1
- package/dist/chunk-ONPGFM6G.cjs.map +1 -1
- package/dist/chunk-P7XCQ7WV.cjs.map +1 -1
- package/dist/{chunk-X7RJP4DR.cjs → chunk-PU67BXVP.cjs} +1 -1
- package/dist/chunk-PU67BXVP.cjs.map +1 -0
- package/dist/chunk-PYRSJ4KI.cjs.map +1 -1
- package/dist/chunk-Q2SNIYQS.cjs.map +1 -1
- package/dist/chunk-QOZ5S3UC.cjs.map +1 -1
- package/dist/chunk-R3NVN3FY.cjs.map +1 -1
- package/dist/chunk-R74LEJVE.cjs.map +1 -1
- package/dist/chunk-RAXM7FU3.cjs.map +1 -1
- package/dist/chunk-RLII6GIK.cjs.map +1 -1
- package/dist/chunk-RMTW3TW2.cjs.map +1 -1
- package/dist/chunk-SEQAFKIV.cjs.map +1 -1
- package/dist/chunk-SHOLGUSO.cjs.map +1 -1
- package/dist/chunk-SQK2VOFN.cjs.map +1 -1
- package/dist/{chunk-BRQSQXKK.js → chunk-SSKDGT5N.js} +1 -1
- package/dist/chunk-SSKDGT5N.js.map +1 -0
- package/dist/chunk-TAUWRIFY.cjs.map +1 -1
- package/dist/chunk-TJQMBWXU.cjs.map +1 -1
- package/dist/chunk-TNMEWZPW.cjs.map +1 -1
- package/dist/chunk-UCS53L2H.cjs.map +1 -1
- package/dist/chunk-ULLUQLTA.cjs.map +1 -1
- package/dist/chunk-UO65Z4DR.cjs.map +1 -1
- package/dist/chunk-UXW3L3L6.cjs.map +1 -1
- package/dist/{chunk-IMM23TO5.cjs → chunk-V3A7ZIGT.cjs} +2 -2
- package/dist/chunk-V3A7ZIGT.cjs.map +1 -0
- package/dist/chunk-VMGJFJIM.cjs.map +1 -1
- package/dist/chunk-VR7T3I5N.cjs.map +1 -1
- package/dist/chunk-VWJZWXTJ.cjs.map +1 -1
- package/dist/chunk-VX3R7DUJ.cjs.map +1 -1
- package/dist/{chunk-LTEGKVQQ.js → chunk-W4M6PGBQ.js} +2 -2
- package/dist/chunk-WAK73JNG.cjs.map +1 -1
- package/dist/chunk-WCOWHFZD.cjs.map +1 -1
- package/dist/chunk-WEF4N7J4.cjs.map +1 -1
- package/dist/{chunk-4X7UJTXJ.js → chunk-WH4WW45N.js} +2 -2
- package/dist/chunk-WHJI4PQ2.cjs.map +1 -1
- package/dist/chunk-WK6DXBUD.cjs.map +1 -1
- package/dist/chunk-WPWV7ZEM.cjs.map +1 -1
- package/dist/chunk-WSRQ3X55.cjs.map +1 -1
- package/dist/chunk-X6SZNPFL.cjs.map +1 -1
- package/dist/chunk-X764QBCC.cjs.map +1 -1
- package/dist/{chunk-L5OF6DSH.cjs → chunk-XAU2ICXA.cjs} +2 -2
- package/dist/chunk-XAU2ICXA.cjs.map +1 -0
- package/dist/chunk-XH7UHZOF.cjs.map +1 -1
- package/dist/chunk-XICDURQQ.cjs.map +1 -1
- package/dist/chunk-XMUXVBF2.cjs.map +1 -1
- package/dist/chunk-XX5NP5VA.cjs.map +1 -1
- package/dist/chunk-Y6NKJM35.cjs.map +1 -1
- package/dist/chunk-YEP2NVSS.js +2 -0
- package/dist/chunk-YEP2NVSS.js.map +1 -0
- package/dist/{chunk-PRTEIKN2.js → chunk-YO6FIHXC.js} +1 -1
- package/dist/chunk-YO6FIHXC.js.map +1 -0
- package/dist/chunk-ZBG4FI7E.cjs.map +1 -1
- package/dist/chunk-ZEDMMWJI.cjs.map +1 -1
- package/dist/chunk-ZEQQVU3K.cjs.map +1 -1
- package/dist/chunk-ZJQITDTA.cjs.map +1 -1
- package/dist/common/assert.cjs.map +1 -1
- package/dist/common/bin/index.cjs.map +1 -1
- package/dist/common/bin/lib0/binary.cjs.map +1 -1
- package/dist/common/bin/lib0/buffer.cjs.map +1 -1
- package/dist/common/bin/lib0/create.cjs.map +1 -1
- package/dist/common/bin/lib0/decoding.cjs.map +1 -1
- package/dist/common/bin/lib0/encoding.cjs.map +1 -1
- package/dist/common/bin/lib0/string.cjs.map +1 -1
- package/dist/common/crypto/aes-sealed.cjs.map +1 -1
- package/dist/common/crypto/crypto.cjs.map +1 -1
- package/dist/common/crypto/index.cjs.map +1 -1
- package/dist/common/crypto/xaes.cjs.map +1 -1
- package/dist/common/csv.cjs.map +1 -1
- package/dist/common/data/array.cjs.map +1 -1
- package/dist/common/data/basex-secure.cjs.map +1 -1
- package/dist/common/data/basex.cjs.map +1 -1
- package/dist/common/data/bin-types.cjs.map +1 -1
- package/dist/common/data/bin.cjs.map +1 -1
- package/dist/common/data/camelcase.cjs.map +1 -1
- package/dist/common/data/convert.cjs.map +1 -1
- package/dist/common/data/datauri.cjs.map +1 -1
- package/dist/common/data/day-legacy.cjs +1 -1
- package/dist/common/data/day-legacy.cjs.map +1 -1
- package/dist/common/data/day-legacy.js +1 -1
- package/dist/common/data/day.cjs +1 -1
- package/dist/common/data/day.cjs.map +1 -1
- package/dist/common/data/day.d.cts +19 -1
- package/dist/common/data/day.d.ts +19 -1
- package/dist/common/data/day.js +1 -1
- package/dist/common/data/decimal.cjs.map +1 -1
- package/dist/common/data/deep.cjs.map +1 -1
- package/dist/common/data/diff.cjs.map +1 -1
- package/dist/common/data/distributed.cjs.map +1 -1
- package/dist/common/data/format.cjs.map +1 -1
- package/dist/common/data/html.cjs.map +1 -1
- package/dist/common/data/index.cjs +1 -1
- package/dist/common/data/index.cjs.map +1 -1
- package/dist/common/data/index.d.cts +1 -1
- package/dist/common/data/index.d.ts +1 -1
- package/dist/common/data/index.js +1 -1
- package/dist/common/data/is.cjs.map +1 -1
- package/dist/common/data/json.cjs.map +1 -1
- package/dist/common/data/list.cjs.map +1 -1
- package/dist/common/data/lru.cjs.map +1 -1
- package/dist/common/data/math.cjs.map +1 -1
- package/dist/common/data/message.cjs.map +1 -1
- package/dist/common/data/object-changes.cjs.map +1 -1
- package/dist/common/data/object.cjs.map +1 -1
- package/dist/common/data/orderby.cjs.map +1 -1
- package/dist/common/data/path.cjs.map +1 -1
- package/dist/common/data/regexp.cjs.map +1 -1
- package/dist/common/data/rounding.cjs.map +1 -1
- package/dist/common/data/signal.cjs.map +1 -1
- package/dist/common/data/sortable.cjs.map +1 -1
- package/dist/common/data/sorted.cjs.map +1 -1
- package/dist/common/data/string-deburr.cjs.map +1 -1
- package/dist/common/data/string-hash-fnv.cjs.map +1 -1
- package/dist/common/data/string-hash-pool.cjs.map +1 -1
- package/dist/common/data/url.cjs.map +1 -1
- package/dist/common/data/utils.cjs.map +1 -1
- package/dist/common/data/wordlist.cjs.map +1 -1
- package/dist/common/data/xrx.cjs.map +1 -1
- package/dist/common/dispose-defer.cjs.map +1 -1
- package/dist/common/dispose-types.cjs.map +1 -1
- package/dist/common/dispose-utils.cjs.map +1 -1
- package/dist/common/exec/index.cjs +1 -1
- package/dist/common/exec/index.cjs.map +1 -1
- package/dist/common/exec/index.js +1 -1
- package/dist/common/exec/mutex.cjs.map +1 -1
- package/dist/common/exec/pool.cjs +1 -1
- package/dist/common/exec/pool.cjs.map +1 -1
- package/dist/common/exec/pool.js +1 -1
- package/dist/common/exec/progress.cjs.map +1 -1
- package/dist/common/exec/promise.cjs.map +1 -1
- package/dist/common/exec/queue.cjs.map +1 -1
- package/dist/common/exec/throttle-debounce.cjs.map +1 -1
- package/dist/common/global.cjs.map +1 -1
- package/dist/common/index.cjs +1 -1
- package/dist/common/index.cjs.map +1 -1
- package/dist/common/index.d.cts +1 -1
- package/dist/common/index.d.ts +1 -1
- package/dist/common/index.js +1 -1
- package/dist/common/localhost.cjs.map +1 -1
- package/dist/common/log/index.cjs.map +1 -1
- package/dist/common/log/log-base.cjs.map +1 -1
- package/dist/common/log/log-colors.cjs.map +1 -1
- package/dist/common/log/log-config.cjs.map +1 -1
- package/dist/common/log/log-console-capture.cjs.map +1 -1
- package/dist/common/log/log-console-original.cjs.map +1 -1
- package/dist/common/log/log-console.cjs.map +1 -1
- package/dist/common/log/log-context.cjs.map +1 -1
- package/dist/common/log/log-filter.cjs.map +1 -1
- package/dist/common/log/log-memory.cjs.map +1 -1
- package/dist/common/log/log-noop.cjs.map +1 -1
- package/dist/common/log/log.cjs.map +1 -1
- package/dist/common/msg/channel-debug.cjs.map +1 -1
- package/dist/common/msg/channel-local.cjs.map +1 -1
- package/dist/common/msg/channel-resilient.cjs.map +1 -1
- package/dist/common/msg/channel-wkwebview.cjs +2 -0
- package/dist/common/msg/channel-wkwebview.cjs.map +1 -0
- package/dist/common/msg/channel-wkwebview.d.cts +22 -0
- package/dist/common/msg/channel-wkwebview.d.ts +22 -0
- package/dist/common/msg/channel-wkwebview.js +2 -0
- package/dist/common/msg/channel-wkwebview.js.map +1 -0
- package/dist/common/msg/channel.cjs.map +1 -1
- package/dist/common/msg/emitter.cjs.map +1 -1
- package/dist/common/msg/encoder.cjs.map +1 -1
- package/dist/common/msg/index.cjs.map +1 -1
- package/dist/common/msg/messages.cjs.map +1 -1
- package/dist/common/msg/pipe.cjs.map +1 -1
- package/dist/common/msg/pubsub.cjs.map +1 -1
- package/dist/common/msg/rpc.cjs.map +1 -1
- package/dist/common/network.cjs.map +1 -1
- package/dist/common/platform.cjs.map +1 -1
- package/dist/common/schema/_sandbox/sandbox-inherit.cjs +1 -0
- package/dist/common/schema/_sandbox/sandbox-inherit.cjs.map +1 -0
- package/dist/common/schema/_sandbox/sandbox-inherit.d.cts +2 -0
- package/dist/common/schema/_sandbox/sandbox-inherit.d.ts +2 -0
- package/dist/common/schema/_sandbox/sandbox-inherit.js +1 -0
- package/dist/common/schema/_sandbox/sandbox-inherit.js.map +1 -0
- package/dist/common/schema/_sandbox/sandbox.cjs +1 -0
- package/dist/common/schema/_sandbox/sandbox.cjs.map +1 -0
- package/dist/common/schema/_sandbox/sandbox.d.cts +2 -0
- package/dist/common/schema/_sandbox/sandbox.d.ts +2 -0
- package/dist/common/schema/_sandbox/sandbox.js +1 -0
- package/dist/common/schema/_sandbox/sandbox.js.map +1 -0
- package/dist/common/schema/_sandbox/sandbox.xspec.cjs +1 -0
- package/dist/common/schema/_sandbox/sandbox.xspec.cjs.map +1 -0
- package/dist/common/schema/_sandbox/sandbox.xspec.d.cts +2 -0
- package/dist/common/schema/_sandbox/sandbox.xspec.d.ts +2 -0
- package/dist/common/schema/_sandbox/sandbox.xspec.js +1 -0
- package/dist/common/schema/_sandbox/sandbox.xspec.js.map +1 -0
- package/dist/common/schema/export-json-schema.cjs +1 -1
- package/dist/common/schema/export-json-schema.cjs.map +1 -1
- package/dist/common/schema/export-json-schema.js +1 -1
- package/dist/common/schema/export-swift.cjs +1 -1
- package/dist/common/schema/export-swift.cjs.map +1 -1
- package/dist/common/schema/export-swift.js +1 -1
- package/dist/common/schema/export-typescript.cjs.map +1 -1
- package/dist/common/schema/index.cjs +1 -1
- package/dist/common/schema/index.cjs.map +1 -1
- package/dist/common/schema/index.js +1 -1
- package/dist/common/schema/parse-args.cjs +1 -1
- package/dist/common/schema/parse-args.cjs.map +1 -1
- package/dist/common/schema/parse-args.js +1 -1
- package/dist/common/schema/parse-env.cjs +1 -1
- package/dist/common/schema/parse-env.cjs.map +1 -1
- package/dist/common/schema/parse-env.js +1 -1
- package/dist/common/schema/parse-object.cjs +1 -1
- package/dist/common/schema/parse-object.cjs.map +1 -1
- package/dist/common/schema/parse-object.js +1 -1
- package/dist/common/schema/schema-standard.cjs.map +1 -1
- package/dist/common/schema/schema.cjs.map +1 -1
- package/dist/common/schema/serialize.cjs.map +1 -1
- package/dist/common/schema/type-test.cjs.map +1 -1
- package/dist/common/schema/utils.cjs.map +1 -1
- package/dist/common/schema/z-collection.cjs.map +1 -1
- package/dist/common/schema/z.cjs.map +1 -1
- package/dist/common/storage/index.cjs.map +1 -1
- package/dist/common/storage/memstorage.cjs.map +1 -1
- package/dist/common/test.cjs +1 -1
- package/dist/common/test.cjs.map +1 -1
- package/dist/common/test.js +1 -1
- package/dist/common/time.cjs.map +1 -1
- package/dist/common/timeout.cjs.map +1 -1
- package/dist/common/types.cjs.map +1 -1
- package/dist/common/utils.cjs.map +1 -1
- package/dist/common/uuid.cjs.map +1 -1
- package/dist/index.all.cjs +1 -1
- package/dist/index.all.cjs.map +1 -1
- package/dist/index.all.d.cts +1 -1
- package/dist/index.all.d.ts +1 -1
- package/dist/index.all.js +1 -1
- package/dist/index.browser.cjs +1 -1
- package/dist/index.browser.cjs.map +1 -1
- package/dist/index.browser.d.cts +1 -1
- package/dist/index.browser.d.ts +1 -1
- package/dist/index.browser.js +1 -1
- package/dist/index.jsr.cjs.map +1 -1
- package/dist/index.node.cjs +1 -1
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.d.cts +1 -1
- package/dist/index.node.d.ts +1 -1
- package/dist/index.node.js +1 -1
- package/dist/node/args.cjs.map +1 -1
- package/dist/node/clipboard.cjs.map +1 -1
- package/dist/node/crypto.cjs.map +1 -1
- package/dist/node/env.cjs.map +1 -1
- package/dist/node/files-async.cjs.map +1 -1
- package/dist/node/files.cjs.map +1 -1
- package/dist/node/filestorage.cjs.map +1 -1
- package/dist/node/fs.cjs.map +1 -1
- package/dist/node/glob.cjs.map +1 -1
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.cjs.map +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/log/index.cjs +1 -1
- package/dist/node/log/index.cjs.map +1 -1
- package/dist/node/log/index.js +1 -1
- package/dist/node/log/log-context-node.cjs +1 -1
- package/dist/node/log/log-context-node.cjs.map +1 -1
- package/dist/node/log/log-context-node.js +1 -1
- package/dist/node/log/log-file-rotation.cjs +1 -1
- package/dist/node/log/log-file-rotation.cjs.map +1 -1
- package/dist/node/log/log-file-rotation.js +1 -1
- package/dist/node/log/log-file.cjs +1 -1
- package/dist/node/log/log-file.cjs.map +1 -1
- package/dist/node/log/log-file.js +1 -1
- package/dist/node/log/log-node.cjs.map +1 -1
- package/dist/node/log/log-rotation.cjs.map +1 -1
- package/dist/node/log/log-util.cjs.map +1 -1
- package/dist/node/open-browser.cjs.map +1 -1
- package/dist/shim-window.d.cjs.map +1 -1
- package/package.json +16 -15
- package/src/common/data/day.spec.ts +20 -1
- package/src/common/data/day.ts +44 -0
- package/src/common/exec/pool.ts +1 -1
- package/src/common/msg/channel-wkwebview.ts +47 -0
- package/src/common/schema/_sandbox/sandbox-inherit.ts +13 -0
- package/src/common/schema/_sandbox/sandbox.ts +42 -0
- package/src/common/schema/_sandbox/sandbox.xspec.ts +45 -0
- package/src/common/schema/parse-object.ts +1 -3
- package/src/common/time.spec.ts +3 -4
- package/dist/chunk-5BA3O5XZ.cjs.map +0 -1
- package/dist/chunk-AUYYYDRM.cjs.map +0 -1
- package/dist/chunk-BRQSQXKK.js.map +0 -1
- package/dist/chunk-DAD3M2IM.cjs.map +0 -1
- package/dist/chunk-ETMFCGHO.cjs.map +0 -1
- package/dist/chunk-IMM23TO5.cjs.map +0 -1
- package/dist/chunk-KHK37DTS.cjs +0 -2
- package/dist/chunk-KHK37DTS.cjs.map +0 -1
- package/dist/chunk-L5OF6DSH.cjs.map +0 -1
- package/dist/chunk-LXFL3VYA.cjs.map +0 -1
- package/dist/chunk-PRTEIKN2.js.map +0 -1
- package/dist/chunk-TSNDVQHW.js +0 -2
- package/dist/chunk-TSNDVQHW.js.map +0 -1
- package/dist/chunk-X7RJP4DR.cjs.map +0 -1
- /package/dist/{chunk-RZPIAOGG.js.map → chunk-BPPN3ZNV.js.map} +0 -0
- /package/dist/{chunk-AH3LPY2A.js.map → chunk-DBXJFUZ7.js.map} +0 -0
- /package/dist/{chunk-LI2YWV3G.js.map → chunk-KWFFSQMW.js.map} +0 -0
- /package/dist/{chunk-UFYY2K4G.js.map → chunk-MV2F4DQ6.js.map} +0 -0
- /package/dist/{chunk-LTEGKVQQ.js.map → chunk-W4M6PGBQ.js.map} +0 -0
- /package/dist/{chunk-4X7UJTXJ.js.map → chunk-WH4WW45N.js.map} +0 -0
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }var _chunkLONV4KUScjs = require('./chunk-LONV4KUS.cjs');var _chunk7UA33BQWcjs = require('./chunk-7UA33BQW.cjs');var _chunkP7XCQ7WVcjs = require('./chunk-P7XCQ7WV.cjs');var o=class e{static{_chunkP7XCQ7WVcjs.a.call(void 0, this,"Day")}get value(){return this.days}constructor(t){if(typeof t=="number"){this.days=t;return}if(t!=null&&(t=_optionalChain([e, 'access', _ => _.from, 'call', _2 => _2(t), 'optionalAccess', _3 => _3.days])),t==null){let r=new Date;this.days=r.getFullYear()*1e4+(r.getMonth()+1)*100+r.getDate()}else this.days=t}static fromNumber(t){return new e(t)}static fromString(t){return e.from(+t.replace(/\D/g,"").slice(0,8))}static fromDate(t,r=!1){return r?e.fromString(t.toISOString().substr(0,10)):e.from(t.getFullYear()*1e4+(t.getMonth()+1)*100+t.getDate())}static fromDateUTC(t){return e.fromDate(t,!0)}static fromDateGMT(t){return e.fromDate(t,!0)}static from(t,r=!1){if(typeof t=="number")return t<100?void 0:new e(t);if(typeof t=="string")return e.fromString(t);if(Array.isArray(t)&&t.length===3){let[a,n=1,s=1]=t;return n<1||n>12||s<1||s>31?void 0:new e(a*1e4+n*100+s)}else{if(t instanceof Date)return e.fromDate(t,r);if(t instanceof e)return t}}toNumber(){return this.days}toJson(){return this.days}toString(t="-"){let r=String(this.days);return r.slice(0,4)+t+r.slice(4,6)+t+r.slice(6,8)}toDate(t=!1){return t?new Date(`${this.toString()}T00:00:00.000Z`):new Date(this.days/1e4,this.days/100%100-1,this.days%100)}toDateUTC(){return this.toDate(!0)}toDateGMT(){return this.toDate(!0)}get year(){return Math.floor(this.days/1e4)}get month(){return Math.floor(this.days/100%100)}get day(){return Math.floor(this.days%100)}dayOffset(t){return e.fromDateUTC(new Date(this.toDateUTC().getTime()+t*_chunkLONV4KUScjs.b))}monthStart(){return e.from([this.year,this.month,1])}yearStart(){return e.from([this.year,1,1])}monthOffset(t){let r=this.month+t,a=Math.floor((r-1)%12)+1;a===0&&(a=12);let n=Math.floor((r-1)/12);return e.from([this.year+n,a,this.day])}daysUntil(t){return Math.round((_optionalChain([new e(t), 'optionalAccess', _4 => _4.toDateUTC, 'call', _5 => _5(), 'access', _6 => _6.getTime, 'call', _7 => _7()])-this.toDateUTC().getTime())/_chunkLONV4KUScjs.b)}yesterday(){return this.dayOffset(-1)}tomorrow(){return this.dayOffset(1)}};async function m(e,t,r){let a=o.from(e),n=o.from(t);for(;a&&n&&_optionalChain([a, 'optionalAccess', _8 => _8.days])<=_optionalChain([n, 'optionalAccess', _9 => _9.days]);){let s=r(a);_chunk7UA33BQWcjs.h.call(void 0, s)&&await s,a=a.dayOffset(1)}}_chunkP7XCQ7WVcjs.a.call(void 0, m,"forEachDay");function h(){return new o}_chunkP7XCQ7WVcjs.a.call(void 0, h,"today");function c(e){return new o(e)}_chunkP7XCQ7WVcjs.a.call(void 0, c,"day");function g(e){return o.fromDate(new Date(e)).days}_chunkP7XCQ7WVcjs.a.call(void 0, g,"dateStringToDays");exports.a = o; exports.b = m; exports.c = h; exports.d = c; exports.e = g;
|
|
2
|
+
//# sourceMappingURL=chunk-V3A7ZIGT.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-V3A7ZIGT.cjs","../src/common/data/day-legacy.ts"],"names":["Day","_Day","__name","days","date","n","dateString","utc","value","year","month","day","sep","baseString"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-V3A7ZIGT.cjs","sourcesContent":[null,"import { isPromise } from '../exec/promise'\nimport type { DayInput, DayValue } from './day'\nimport { DAY_MS } from './day'\n\n// See also and alternatives:\n// https://blog.openreplay.com/is-it-time-for-the-javascript-temporal-api\n// https://github.com/iamkun/dayjs\n// https://github.com/date-fns/date-fns\n\nexport type DayInputLegacy = DayInput | Day\n\n/**\n * Date represented as positive integer value. Years smaller 0 are not supported.\n * @deprecated\n */\nexport class Day {\n days: DayValue\n\n get value() {\n return this.days\n }\n\n constructor(days?: DayInputLegacy) {\n if (typeof days === 'number') {\n this.days = days\n return\n }\n\n if (days != null)\n days = Day.from(days)?.days\n\n if (days == null) {\n const date = new Date()\n this.days\n = date.getFullYear() * 10000\n + (date.getMonth() + 1) * 100\n + date.getDate()\n }\n else {\n this.days = days\n }\n }\n\n static fromNumber(n: number): Day {\n return new Day(n)\n }\n\n static fromString(dateString: string): Day | undefined {\n return Day.from(+dateString.replace(/\\D/g, '').slice(0, 8))\n }\n\n static fromDate(date: Date, utc = false): Day {\n return (\n utc\n ? Day.fromString(date.toISOString().substr(0, 10))\n : Day.from(\n date.getFullYear() * 10000\n + (date.getMonth() + 1) * 100\n + date.getDate(),\n )\n ) as Day\n }\n\n static fromDateUTC(date: Date): Day {\n return Day.fromDate(date, true)\n }\n\n /** @deprecated use fromDateUTC */\n static fromDateGMT(date: Date): Day {\n return Day.fromDate(date, true)\n }\n\n static from(value: DayInputLegacy, utc = false): Day | undefined {\n if (typeof value === 'number') {\n if (value < 100)\n return\n return new Day(value)\n }\n else if (typeof value === 'string') {\n return Day.fromString(value)\n }\n else if (Array.isArray(value) && value.length === 3) {\n const [year, month = 1, day = 1] = value\n if (month < 1 || month > 12 || day < 1 || day > 31)\n return\n return new Day(year * 10000 + month * 100 + day)\n }\n else if (value instanceof Date) {\n return Day.fromDate(value, utc)\n }\n else if (value instanceof Day) {\n return value\n }\n }\n\n toNumber(): number {\n return this.days\n }\n\n // Transformer\n\n /** Just for future extensions */\n toJson() {\n return this.days\n }\n\n toString(sep = '-') {\n const baseString = String(this.days)\n return (\n baseString.slice(0, 4)\n + sep\n + baseString.slice(4, 6)\n + sep\n + baseString.slice(6, 8)\n )\n }\n\n toDate(utc = false): Date {\n return utc\n ? new Date(`${this.toString()}T00:00:00.000Z`)\n : new Date(\n this.days / 10000, // year\n ((this.days / 100) % 100) - 1, // month\n this.days % 100, // day\n )\n }\n\n toDateUTC() {\n return this.toDate(true)\n }\n\n /** @deprecated use toDateUTC */\n toDateGMT() {\n return this.toDate(true)\n }\n\n get year() {\n return Math.floor(this.days / 10000)\n }\n\n get month() {\n return Math.floor((this.days / 100) % 100)\n }\n\n get day() {\n return Math.floor(this.days % 100)\n }\n\n // Calculations\n\n dayOffset(offset: number): Day {\n // Important! Don't use local time here due to summer/winter time days can\n // be longer or shorter!\n return Day.fromDateUTC(\n new Date(this.toDateUTC().getTime() + offset * DAY_MS),\n )\n }\n\n monthStart(): Day {\n return Day.from([this.year, this.month, 1])!\n }\n\n yearStart(): Day {\n return Day.from([this.year, 1, 1])!\n }\n\n /** Very stupid approach, only works for days <= 28 */\n monthOffset(offset: number): Day {\n const m = this.month + offset\n let mm = Math.floor((m - 1) % 12) + 1\n if (mm === 0)\n mm = 12\n const yy = Math.floor((m - 1) / 12)\n // log(\"calc\", m, mm, yy, [this.year + yy, mm, this.day])\n return Day.from([this.year + yy, mm, this.day])!\n }\n\n daysUntil(otherDay: DayInputLegacy): number {\n return Math.round(\n (new Day(otherDay)?.toDateUTC().getTime() - this.toDateUTC().getTime())\n / DAY_MS,\n )\n }\n\n // Shortcuts\n\n yesterday() {\n return this.dayOffset(-1)\n }\n\n tomorrow() {\n return this.dayOffset(+1)\n }\n}\n\nexport async function forEachDay(\n from: DayInputLegacy,\n to: DayInputLegacy,\n handler: (date: Day) => Promise<void> | void,\n) {\n let start = Day.from(from)\n const end = Day.from(to)\n // eslint-disable-next-line no-unmodified-loop-condition\n while (start && end && start?.days <= end?.days) {\n const result = handler(start)\n if (isPromise(result))\n await result\n start = start.dayOffset(+1)\n }\n}\n\nexport function today(): Day {\n return new Day()\n}\n\n/** @deprecated */\nexport function day(days?: DayInputLegacy): Day {\n return new Day(days)\n}\n\nexport function dateStringToDays(dateString: string): number {\n return Day.fromDate(new Date(dateString)).days\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-VMGJFJIM.cjs"],"names":[],"mappings":"AAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-VMGJFJIM.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/zeed/zeed/dist/chunk-VR7T3I5N.cjs","../src/common/bin/lib0/encoding.ts"],"names":["BinEncoder","__name","createBinEncoder","length","encoder","len","encodeToUint8Array","uint8arr","curPos","i","d","createUint8ArrayViewFromArrayBuffer","verifyLen","bufferLen","write","num","set","pos","buffer","b","writeUint8","setUint8","writeUint16","setUint16","writeUint32","writeUint32BigEndian","setUint32","writeVarUint","isNegativeZero","n","writeVarInt","isNegative","writeUint8Array","uint8Array","cpos","leftCopyLen","rightCopyLen","writeVarUint8Array","_strBuffer","_maxStrBSize","_writeVarStringNative","str","written","getUtf8TextEncoder","encodeUtf8","_writeVarStringPolyfill","encodedString","writeVarString","writeBinaryEncoder","append","writeOnDataView","dview","writeFloat32","writeFloat64","writeBigInt64","writeBigUint64","floatTestBed","isFloat32","writeAny","data","keys","key"],"mappings":"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","file":"/home/runner/work/zeed/zeed/dist/chunk-VR7T3I5N.cjs","sourcesContent":[null,"/**\n * Original at https://github.com/dmonad/lib0\n *\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = new encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = new decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n */\n\nimport { BIT7, BIT8, BITS6, BITS7, BITS8, BITS31 } from './binary'\nimport { createUint8ArrayViewFromArrayBuffer } from './create'\nimport { encodeUtf8, getUtf8TextEncoder } from './string'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class BinEncoder {\n cpos: number\n cbuf: Uint8Array\n bufs: Uint8Array[]\n\n constructor() {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n this.bufs = []\n }\n}\n\nexport function createBinEncoder(): BinEncoder {\n return new BinEncoder()\n}\n\n/**\n * The current length of the encoded data.\n */\nexport function length(encoder: BinEncoder): number {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++)\n len += encoder.bufs[i].length\n\n return len\n}\n\n/**\n * Transform to Uint8Array.\n */\nexport function encodeToUint8Array(encoder: BinEncoder): Uint8Array {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n */\nexport function verifyLen(encoder: BinEncoder, len: number) {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(Math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n */\nexport function write(encoder: BinEncoder, num: number) {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n */\nexport function set(encoder: BinEncoder, pos: number, num: number) {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length)\n buffer = b // found buffer\n\n else\n pos -= b.length\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n */\nexport function writeUint16(encoder: BinEncoder, num: number) {\n write(encoder, num & BITS8)\n write(encoder, (num >>> 8) & BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n */\nexport function setUint16(encoder: BinEncoder, pos: number, num: number) {\n set(encoder, pos, num & BITS8)\n set(encoder, pos + 1, (num >>> 8) & BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n */\nexport function writeUint32(encoder: BinEncoder, num: number) {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n */\nexport function writeUint32BigEndian(encoder: BinEncoder, num: number) {\n for (let i = 3; i >= 0; i--)\n write(encoder, (num >>> (8 * i)) & BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n */\nexport function setUint32(encoder: BinEncoder, pos: number, num: number) {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n */\nexport function writeVarUint(encoder: BinEncoder, num: number) {\n while (num > BITS7) {\n write(encoder, BIT8 | (BITS7 & num))\n num = Math.floor(num / 128) // shift >>> 7\n }\n write(encoder, BITS7 & num)\n}\n\nexport function isNegativeZero(n: number) {\n return n !== 0 ? n < 0 : 1 / n < 0\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n */\nexport function writeVarInt(encoder: BinEncoder, num: number) {\n const isNegative = isNegativeZero(num)\n if (isNegative)\n num = -num\n\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > BITS6 ? BIT8 : 0) | (isNegative ? BIT7 : 0) | (BITS6 & num))\n num = Math.floor(num / 64) // shift >>> 6\n\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > BITS7 ? BIT8 : 0) | (BITS7 & num))\n num = Math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n */\nexport function writeUint8Array(encoder: BinEncoder, uint8Array: Uint8Array) {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = Math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(Math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to BinEncoder.\n */\nexport function writeVarUint8Array(encoder: BinEncoder, uint8Array: Uint8Array): void {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * A cache to store strings temporarily\n */\nlet _strBuffer: Uint8Array\nlet _maxStrBSize: number\n\n/**\n * Write a variable length string.\n */\nfunction _writeVarStringNative(encoder: BinEncoder, str: string) {\n if (_strBuffer == null) {\n _strBuffer = new Uint8Array(30000)\n _maxStrBSize = _strBuffer.length / 3\n }\n\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n const written = getUtf8TextEncoder()!.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++)\n write(encoder, _strBuffer[i])\n }\n else {\n writeVarUint8Array(encoder, encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n */\nfunction _writeVarStringPolyfill(encoder: BinEncoder, str: string) {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++)\n write(encoder, (encodedString.codePointAt(i) as number))\n}\n\n/**\n * Write a variable length string.\n */\nexport function writeVarString(encoder: BinEncoder, str: string) {\n return getUtf8TextEncoder()?.encodeInto\n ? _writeVarStringNative(encoder, str)\n : _writeVarStringPolyfill(encoder, str)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n */\nexport function writeBinaryEncoder(encoder: BinEncoder, append: BinEncoder) {\n return writeUint8Array(encoder, encodeToUint8Array(append))\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n */\nexport function writeOnDataView(encoder: BinEncoder, len: number): DataView {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\nexport function writeFloat32(encoder: BinEncoder, num: number) {\n return writeOnDataView(encoder, 4).setFloat32(0, num, false)\n}\n\nexport function writeFloat64(encoder: BinEncoder, num: number) {\n return writeOnDataView(encoder, 8).setFloat64(0, num, false)\n}\n\nexport function writeBigInt64(encoder: BinEncoder, num: bigint) {\n return (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n}\n\nexport function writeBigUint64(encoder: BinEncoder, num: bigint) {\n return (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n}\n\nlet floatTestBed: DataView\n\n/**\n * Check if a number can be encoded as a 32 bit float.\n */\nfunction isFloat32(num: number): boolean {\n if (floatTestBed == null)\n floatTestBed = new DataView(new ArrayBuffer(4))\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object<string,any> | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array<any> | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n */\nexport function writeAny(encoder: BinEncoder, data: undefined | null | number | bigint | boolean | string | { [s: string]: any } | Array<any> | Uint8Array) {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (Number.isInteger(data) && Math.abs(data) <= BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n }\n else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n }\n else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n }\n else if (Array.isArray(data)) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++)\n writeAny(encoder, data[i])\n }\n else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n }\n else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n keys.sort() // guarantee comparability and consistency\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-VR7T3I5N.cjs","../src/common/bin/lib0/encoding.ts"],"names":["BinEncoder","__name","createBinEncoder","length","encoder","len","encodeToUint8Array","uint8arr","curPos","i","d","createUint8ArrayViewFromArrayBuffer","verifyLen","bufferLen","write","num","set","pos","buffer","b","writeUint8","setUint8","writeUint16","setUint16","writeUint32","writeUint32BigEndian","setUint32","writeVarUint","isNegativeZero","n","writeVarInt","isNegative","writeUint8Array","uint8Array","cpos","leftCopyLen","rightCopyLen","writeVarUint8Array","_strBuffer","_maxStrBSize","_writeVarStringNative","str","written","getUtf8TextEncoder","encodeUtf8","_writeVarStringPolyfill","encodedString","writeVarString","writeBinaryEncoder","append","writeOnDataView","dview","writeFloat32","writeFloat64","writeBigInt64","writeBigUint64","floatTestBed","isFloat32","writeAny","data","keys","key"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-VR7T3I5N.cjs","sourcesContent":[null,"/**\n * Original at https://github.com/dmonad/lib0\n *\n * Efficient schema-less binary encoding with support for variable length encoding.\n *\n * Use [lib0/encoding] with [lib0/decoding]. Every encoding function has a corresponding decoding function.\n *\n * Encodes numbers in little-endian order (least to most significant byte order)\n * and is compatible with Golang's binary encoding (https://golang.org/pkg/encoding/binary/)\n * which is also used in Protocol Buffers.\n *\n * ```js\n * // encoding step\n * const encoder = new encoding.createEncoder()\n * encoding.writeVarUint(encoder, 256)\n * encoding.writeVarString(encoder, 'Hello world!')\n * const buf = encoding.toUint8Array(encoder)\n * ```\n *\n * ```js\n * // decoding step\n * const decoder = new decoding.createDecoder(buf)\n * decoding.readVarUint(decoder) // => 256\n * decoding.readVarString(decoder) // => 'Hello world!'\n * decoding.hasContent(decoder) // => false - all data is read\n * ```\n */\n\nimport { BIT7, BIT8, BITS6, BITS7, BITS8, BITS31 } from './binary'\nimport { createUint8ArrayViewFromArrayBuffer } from './create'\nimport { encodeUtf8, getUtf8TextEncoder } from './string'\n\n/**\n * A BinaryEncoder handles the encoding to an Uint8Array.\n */\nexport class BinEncoder {\n cpos: number\n cbuf: Uint8Array\n bufs: Uint8Array[]\n\n constructor() {\n this.cpos = 0\n this.cbuf = new Uint8Array(100)\n this.bufs = []\n }\n}\n\nexport function createBinEncoder(): BinEncoder {\n return new BinEncoder()\n}\n\n/**\n * The current length of the encoded data.\n */\nexport function length(encoder: BinEncoder): number {\n let len = encoder.cpos\n for (let i = 0; i < encoder.bufs.length; i++)\n len += encoder.bufs[i].length\n\n return len\n}\n\n/**\n * Transform to Uint8Array.\n */\nexport function encodeToUint8Array(encoder: BinEncoder): Uint8Array {\n const uint8arr = new Uint8Array(length(encoder))\n let curPos = 0\n for (let i = 0; i < encoder.bufs.length; i++) {\n const d = encoder.bufs[i]\n uint8arr.set(d, curPos)\n curPos += d.length\n }\n uint8arr.set(createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos), curPos)\n return uint8arr\n}\n\n/**\n * Verify that it is possible to write `len` bytes wtihout checking. If\n * necessary, a new Buffer with the required length is attached.\n */\nexport function verifyLen(encoder: BinEncoder, len: number) {\n const bufferLen = encoder.cbuf.length\n if (bufferLen - encoder.cpos < len) {\n encoder.bufs.push(createUint8ArrayViewFromArrayBuffer(encoder.cbuf.buffer, 0, encoder.cpos))\n encoder.cbuf = new Uint8Array(Math.max(bufferLen, len) * 2)\n encoder.cpos = 0\n }\n}\n\n/**\n * Write one byte to the encoder.\n */\nexport function write(encoder: BinEncoder, num: number) {\n const bufferLen = encoder.cbuf.length\n if (encoder.cpos === bufferLen) {\n encoder.bufs.push(encoder.cbuf)\n encoder.cbuf = new Uint8Array(bufferLen * 2)\n encoder.cpos = 0\n }\n encoder.cbuf[encoder.cpos++] = num\n}\n\n/**\n * Write one byte at a specific position.\n * Position must already be written (i.e. encoder.length > pos)\n */\nexport function set(encoder: BinEncoder, pos: number, num: number) {\n let buffer = null\n // iterate all buffers and adjust position\n for (let i = 0; i < encoder.bufs.length && buffer === null; i++) {\n const b = encoder.bufs[i]\n if (pos < b.length)\n buffer = b // found buffer\n\n else\n pos -= b.length\n }\n if (buffer === null) {\n // use current buffer\n buffer = encoder.cbuf\n }\n buffer[pos] = num\n}\n\n/**\n * Write one byte as an unsigned integer.\n */\nexport const writeUint8 = write\n\n/**\n * Write one byte as an unsigned Integer at a specific location.\n */\nexport const setUint8 = set\n\n/**\n * Write two bytes as an unsigned integer.\n */\nexport function writeUint16(encoder: BinEncoder, num: number) {\n write(encoder, num & BITS8)\n write(encoder, (num >>> 8) & BITS8)\n}\n/**\n * Write two bytes as an unsigned integer at a specific location.\n */\nexport function setUint16(encoder: BinEncoder, pos: number, num: number) {\n set(encoder, pos, num & BITS8)\n set(encoder, pos + 1, (num >>> 8) & BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer\n */\nexport function writeUint32(encoder: BinEncoder, num: number) {\n for (let i = 0; i < 4; i++) {\n write(encoder, num & BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write two bytes as an unsigned integer in big endian order.\n * (most significant byte first)\n */\nexport function writeUint32BigEndian(encoder: BinEncoder, num: number) {\n for (let i = 3; i >= 0; i--)\n write(encoder, (num >>> (8 * i)) & BITS8)\n}\n\n/**\n * Write two bytes as an unsigned integer at a specific location.\n */\nexport function setUint32(encoder: BinEncoder, pos: number, num: number) {\n for (let i = 0; i < 4; i++) {\n set(encoder, pos + i, num & BITS8)\n num >>>= 8\n }\n}\n\n/**\n * Write a variable length unsigned integer. Max encodable integer is 2^53.\n */\nexport function writeVarUint(encoder: BinEncoder, num: number) {\n while (num > BITS7) {\n write(encoder, BIT8 | (BITS7 & num))\n num = Math.floor(num / 128) // shift >>> 7\n }\n write(encoder, BITS7 & num)\n}\n\nexport function isNegativeZero(n: number) {\n return n !== 0 ? n < 0 : 1 / n < 0\n}\n\n/**\n * Write a variable length integer.\n *\n * We use the 7th bit instead for signaling that this is a negative number.\n */\nexport function writeVarInt(encoder: BinEncoder, num: number) {\n const isNegative = isNegativeZero(num)\n if (isNegative)\n num = -num\n\n // |- whether to continue reading |- whether is negative |- number\n write(encoder, (num > BITS6 ? BIT8 : 0) | (isNegative ? BIT7 : 0) | (BITS6 & num))\n num = Math.floor(num / 64) // shift >>> 6\n\n // We don't need to consider the case of num === 0 so we can use a different\n // pattern here than above.\n while (num > 0) {\n write(encoder, (num > BITS7 ? BIT8 : 0) | (BITS7 & num))\n num = Math.floor(num / 128) // shift >>> 7\n }\n}\n\n/**\n * Append fixed-length Uint8Array to the encoder.\n */\nexport function writeUint8Array(encoder: BinEncoder, uint8Array: Uint8Array) {\n const bufferLen = encoder.cbuf.length\n const cpos = encoder.cpos\n const leftCopyLen = Math.min(bufferLen - cpos, uint8Array.length)\n const rightCopyLen = uint8Array.length - leftCopyLen\n encoder.cbuf.set(uint8Array.subarray(0, leftCopyLen), cpos)\n encoder.cpos += leftCopyLen\n if (rightCopyLen > 0) {\n // Still something to write, write right half..\n // Append new buffer\n encoder.bufs.push(encoder.cbuf)\n // must have at least size of remaining buffer\n encoder.cbuf = new Uint8Array(Math.max(bufferLen * 2, rightCopyLen))\n // copy array\n encoder.cbuf.set(uint8Array.subarray(leftCopyLen))\n encoder.cpos = rightCopyLen\n }\n}\n\n/**\n * Append an Uint8Array to BinEncoder.\n */\nexport function writeVarUint8Array(encoder: BinEncoder, uint8Array: Uint8Array): void {\n writeVarUint(encoder, uint8Array.byteLength)\n writeUint8Array(encoder, uint8Array)\n}\n\n/**\n * A cache to store strings temporarily\n */\nlet _strBuffer: Uint8Array\nlet _maxStrBSize: number\n\n/**\n * Write a variable length string.\n */\nfunction _writeVarStringNative(encoder: BinEncoder, str: string) {\n if (_strBuffer == null) {\n _strBuffer = new Uint8Array(30000)\n _maxStrBSize = _strBuffer.length / 3\n }\n\n if (str.length < _maxStrBSize) {\n // We can encode the string into the existing buffer\n const written = getUtf8TextEncoder()!.encodeInto(str, _strBuffer).written || 0\n writeVarUint(encoder, written)\n for (let i = 0; i < written; i++)\n write(encoder, _strBuffer[i])\n }\n else {\n writeVarUint8Array(encoder, encodeUtf8(str))\n }\n}\n\n/**\n * Write a variable length string.\n */\nfunction _writeVarStringPolyfill(encoder: BinEncoder, str: string) {\n const encodedString = unescape(encodeURIComponent(str))\n const len = encodedString.length\n writeVarUint(encoder, len)\n for (let i = 0; i < len; i++)\n write(encoder, (encodedString.codePointAt(i) as number))\n}\n\n/**\n * Write a variable length string.\n */\nexport function writeVarString(encoder: BinEncoder, str: string) {\n return getUtf8TextEncoder()?.encodeInto\n ? _writeVarStringNative(encoder, str)\n : _writeVarStringPolyfill(encoder, str)\n}\n\n/**\n * Write the content of another Encoder.\n *\n * @TODO: can be improved!\n * - Note: Should consider that when appending a lot of small Encoders, we should rather clone than referencing the old structure.\n * Encoders start with a rather big initial buffer.\n */\nexport function writeBinaryEncoder(encoder: BinEncoder, append: BinEncoder) {\n return writeUint8Array(encoder, encodeToUint8Array(append))\n}\n\n/**\n * Create an DataView of the next `len` bytes. Use it to write data after\n * calling this function.\n *\n * ```js\n * // write float32 using DataView\n * const dv = writeOnDataView(encoder, 4)\n * dv.setFloat32(0, 1.1)\n * // read float32 using DataView\n * const dv = readFromDataView(encoder, 4)\n * dv.getFloat32(0) // => 1.100000023841858 (leaving it to the reader to find out why this is the correct result)\n * ```\n */\nexport function writeOnDataView(encoder: BinEncoder, len: number): DataView {\n verifyLen(encoder, len)\n const dview = new DataView(encoder.cbuf.buffer, encoder.cpos, len)\n encoder.cpos += len\n return dview\n}\n\nexport function writeFloat32(encoder: BinEncoder, num: number) {\n return writeOnDataView(encoder, 4).setFloat32(0, num, false)\n}\n\nexport function writeFloat64(encoder: BinEncoder, num: number) {\n return writeOnDataView(encoder, 8).setFloat64(0, num, false)\n}\n\nexport function writeBigInt64(encoder: BinEncoder, num: bigint) {\n return (writeOnDataView(encoder, 8)).setBigInt64(0, num, false)\n}\n\nexport function writeBigUint64(encoder: BinEncoder, num: bigint) {\n return (writeOnDataView(encoder, 8)).setBigUint64(0, num, false)\n}\n\nlet floatTestBed: DataView\n\n/**\n * Check if a number can be encoded as a 32 bit float.\n */\nfunction isFloat32(num: number): boolean {\n if (floatTestBed == null)\n floatTestBed = new DataView(new ArrayBuffer(4))\n floatTestBed.setFloat32(0, num)\n return floatTestBed.getFloat32(0) === num\n}\n\n/**\n * Encode data with efficient binary format.\n *\n * Differences to JSON:\n * • Transforms data to a binary format (not to a string)\n * • Encodes undefined, NaN, and ArrayBuffer (these can't be represented in JSON)\n * • Numbers are efficiently encoded either as a variable length integer, as a\n * 32 bit float, as a 64 bit float, or as a 64 bit bigint.\n *\n * Encoding table:\n *\n * | Data Type | Prefix | Encoding Method | Comment |\n * | ------------------- | -------- | ------------------ | ------- |\n * | undefined | 127 | | Functions, symbol, and everything that cannot be identified is encoded as undefined |\n * | null | 126 | | |\n * | integer | 125 | writeVarInt | Only encodes 32 bit signed integers |\n * | float32 | 124 | writeFloat32 | |\n * | float64 | 123 | writeFloat64 | |\n * | bigint | 122 | writeBigInt64 | |\n * | boolean (false) | 121 | | True and false are different data types so we save the following byte |\n * | boolean (true) | 120 | | - 0b01111000 so the last bit determines whether true or false |\n * | string | 119 | writeVarString | |\n * | object<string,any> | 118 | custom | Writes {length} then {length} key-value pairs |\n * | array<any> | 117 | custom | Writes {length} then {length} json values |\n * | Uint8Array | 116 | writeVarUint8Array | We use Uint8Array for any kind of binary data |\n *\n * Reasons for the decreasing prefix:\n * We need the first bit for extendability (later we may want to encode the\n * prefix with writeVarUint). The remaining 7 bits are divided as follows:\n * [0-30] the beginning of the data range is used for custom purposes\n * (defined by the function that uses this library)\n * [31-127] the end of the data range is used for data encoding by\n * lib0/encoding.js\n */\nexport function writeAny(encoder: BinEncoder, data: undefined | null | number | bigint | boolean | string | { [s: string]: any } | Array<any> | Uint8Array) {\n switch (typeof data) {\n case 'string':\n // TYPE 119: STRING\n write(encoder, 119)\n writeVarString(encoder, data)\n break\n case 'number':\n if (Number.isInteger(data) && Math.abs(data) <= BITS31) {\n // TYPE 125: INTEGER\n write(encoder, 125)\n writeVarInt(encoder, data)\n }\n else if (isFloat32(data)) {\n // TYPE 124: FLOAT32\n write(encoder, 124)\n writeFloat32(encoder, data)\n }\n else {\n // TYPE 123: FLOAT64\n write(encoder, 123)\n writeFloat64(encoder, data)\n }\n break\n case 'bigint':\n // TYPE 122: BigInt\n write(encoder, 122)\n writeBigInt64(encoder, data)\n break\n case 'object':\n if (data === null) {\n // TYPE 126: null\n write(encoder, 126)\n }\n else if (Array.isArray(data)) {\n // TYPE 117: Array\n write(encoder, 117)\n writeVarUint(encoder, data.length)\n for (let i = 0; i < data.length; i++)\n writeAny(encoder, data[i])\n }\n else if (data instanceof Uint8Array) {\n // TYPE 116: ArrayBuffer\n write(encoder, 116)\n writeVarUint8Array(encoder, data)\n }\n else {\n // TYPE 118: Object\n write(encoder, 118)\n const keys = Object.keys(data)\n keys.sort() // guarantee comparability and consistency\n writeVarUint(encoder, keys.length)\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i]\n writeVarString(encoder, key)\n writeAny(encoder, data[key])\n }\n }\n break\n case 'boolean':\n // TYPE 120/121: boolean (true/false)\n write(encoder, data ? 120 : 121)\n break\n default:\n // TYPE 127: undefined\n write(encoder, 127)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-VWJZWXTJ.cjs","../src/common/data/list.ts"],"names":["listQuery","list","filters","mappers","o","a","m","__name","listGroupBy","key","result","currentValue","groupValue","listDistinctUnion","listOfKey","item"],"mappings":"AAAA,iIAAwC,SCIxBA,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAC,CAAAA,CAA+B,CAAC,CAAA,CACrB,CACX,OAAOF,CAAAA,CACJ,MAAA,CAAQG,CAAAA,EAAS,CAACF,CAAAA,CAAQ,IAAA,CAAKG,CAAAA,EAAK,CAACA,CAAAA,CAAED,CAAC,CAAC,CAAC,CAAA,CAC1C,GAAA,CAAKA,CAAAA,EAAM,CACV,GAAA,CAAA,IAAWE,EAAAA,GAAKH,CAAAA,CACdC,CAAAA,CAAIE,CAAAA,CAAEF,CAAC,CAAA,CACT,OAAOA,CACT,CAAC,CAAA,CACA,MAAA,CAAOA,CAAAA,EAAKA,CAAAA,EAAK,IAAI,CAC1B,CAbgBG,iCAAAA,CAAAP,CAAA,WAAA,CAAA,CAgBT,SAASQ,CAAAA,CACdP,CAAAA,CACAQ,CAAAA,CACqB,CACrB,OAAOR,CAAAA,CAAK,MAAA,CAAO,CAACS,CAAAA,CAAaC,CAAAA,CAAAA,EAAoB,CACnD,IAAMC,CAAAA,CAAa,MAAA,CAAOD,CAAAA,CAAaF,CAAG,CAAC,CAAA,CAC1C,MAAA,CAACC,CAAAA,CAAOE,CAAU,CAAA,CAAIF,CAAAA,CAAOE,CAAU,CAAA,EAAK,CAAC,CAAA,CAAA,CAAG,IAAA,CAAKD,CAAY,CAAA,CAC3DD,CACT,CAAA,CAAG,CAAC,CAAC,CACP,CATgBH,iCAAAA,CAAAC,CAAA,aAAA,CAAA,CAYT,SAASK,CAAAA,CACdZ,CAAAA,CACAQ,CAAAA,CACO,CACP,OAAO,KAAA,CAAM,IAAA,CACXR,CAAAA,CAAK,MAAA,CACH,CAACS,CAAAA,CAAkBC,CAAAA,CAAAA,EAAoBD,CAAAA,CAAO,GAAA,CAAIC,CAAAA,CAAaF,CAAG,CAAC,CAAA,CACnE,IAAI,GACN,CACF,CACF,CAVgBF,iCAAAA,CAAAM,CAAA,mBAAA,CAAA,CAaT,SAASC,CAAAA,CACdb,CAAAA,CACAQ,CAAAA,CACO,CACP,OAAOR,CAAAA,CAAK,GAAA,CAAIc,CAAAA,EAAQA,CAAAA,CAAKN,CAAG,CAAC,CACnC,CALgBF,iCAAAA,CAAAO,CAAA,WAAA,CAAA,CAAA,2DAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-VWJZWXTJ.cjs","sourcesContent":[null,"export type FilterFunction<T> = (o: T) => boolean\nexport type MapperFunction<T> = (o: T) => any\n\n/** Apply multiple filters, optionally transform through mappers, filter null/undefined items. */\nexport function listQuery<T>(\n list: T[],\n filters: FilterFunction<T>[],\n mappers: MapperFunction<T>[] = [],\n): T | any[] {\n return list\n .filter((o: T) => !filters.some(a => !a(o)))\n .map((o) => {\n for (const m of mappers)\n o = m(o)\n return o\n })\n .filter(o => o != null)\n}\n\n/** Split up a list by `key` resulting in a Record of `key` and sub-list. */\nexport function listGroupBy<T extends Record<string, any>>(\n list: T[],\n key: keyof T,\n): Record<string, T[]> {\n return list.reduce((result: any, currentValue: T) => {\n const groupValue = String(currentValue[key])\n ;(result[groupValue] = result[groupValue] || []).push(currentValue)\n return result\n }, {})\n}\n\n/** Returns a list of values of a certain `key`. No duplicates. */\nexport function listDistinctUnion<T extends Record<string, any>>(\n list: T[],\n key: keyof T,\n): any[] {\n return Array.from(\n list.reduce(\n (result: Set<any>, currentValue: T) => result.add(currentValue[key]),\n new Set(),\n ),\n )\n}\n\n/** Returns a list of values of a certain `key`. */\nexport function listOfKey<T extends Record<string, any>>(\n list: T[],\n key: keyof T,\n): any[] {\n return list.map(item => item[key])\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-VX3R7DUJ.cjs","../src/common/log/log.ts"],"names":["globalLogger","getLoggerContext","setup","logger","LoggerContext","LoggerConsoleHandler","__name","getGlobalLogger","gcontext","getGlobalContext","getGlobalConsole","getGlobalLoggerIfExists","DefaultLogger","name","level"],"mappings":"AAAA,qoBAAwC,wDAAoC,wDAAyC,wDAAyC,wDAAyC,ICQnMA,CAAAA,CAQJ,SAASC,CAAAA,CAAiBC,CAAAA,CAAmD,CAC3E,IAAMC,CAAAA,CAASC,iCAAAA,CAAc,CAC7B,OAAIF,CAAAA,CACFA,CAAAA,CAAMC,CAAM,CAAA,CAEZA,CAAAA,CAAO,WAAA,CAAY,CAACE,iCAAAA,CAAsB,CAAC,CAAA,CACtCF,CACT,CAPSG,iCAAAA,CAAAL,CAAA,kBAAA,CAAA,CAUF,SAASM,CAAAA,CAAgBL,CAAAA,CAA2E,CACzG,EAAA,CAAIF,CAAAA,EAAgB,IAAA,CAClB,GAAI,CACF,IAAMQ,CAAAA,CAAWC,iCAAAA,CAAiB,CAC9BD,CAAAA,EAAY,IAAA,CAAA,CACdE,iCAAAA,CAAiB,iBAEbF,CAAAA,2BAAU,QAAA,EAAU,IAAA,CAAA,CACtBR,CAAAA,CAAeC,CAAAA,CAAiBC,CAAK,CAAA,CACrCM,CAAAA,CAAS,MAAA,CAASR,CAAAA,CAAAA,CAGlBA,CAAAA,CAAeQ,CAAAA,CAAS,MAAA,CAAA,CAI1BR,CAAAA,CAAeC,CAAAA,CAAiBC,CAAK,CAEzC,CAAA,UACU,CACRF,CAAAA,CAAeC,CAAAA,CAAiBC,CAAK,CACvC,CAEF,OAAOF,CACT,CAxBgBM,iCAAAA,CAAAC,CAAA,iBAAA,CAAA,CA2BT,SAASI,CAAAA,CAAAA,CAA0B,CACxC,EAAA,CAAIX,CAAAA,EAAgB,IAAA,CAClB,OAAOA,CAAAA,CAET,GAAI,CACF,IAAMQ,CAAAA,CAAWC,iCAAAA,CAAiB,CAClC,EAAA,iBAAID,CAAAA,6BAAU,QAAA,EAAU,IAAA,CACtB,OAAOA,CAAAA,CAAS,MACpB,CAAA,UACU,CAAE,CACd,CAVgBF,iCAAAA,CAAAK,CAAA,yBAAA,CAAA,CAYT,SAASC,CAAAA,CAAcC,CAAAA,CAAeC,CAAAA,CAA4C,CACvF,OAAOP,CAAAA,CAAgB,CAAA,CAAEM,CAAAA,CAAMC,CAAK,CACtC,CAFgBR,iCAAAA,CAAAM,CAAA,eAAA,CAAA,CAAA,4CAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-VX3R7DUJ.cjs","sourcesContent":[null,"import type { LoggerContextInterface, LoggerInterface, LogLevelAliasType } from './log-base'\nimport { getGlobalContext } from '../global'\nimport { LoggerConsoleHandler } from './log-console'\nimport { getGlobalConsole } from './log-console-original'\nimport { LoggerContext } from './log-context'\n\n// Global logger to guarantee all submodules use the same logger instance\n\nlet globalLogger: LoggerContextInterface\n\ndeclare global {\n interface ZeedGlobalContext {\n logger?: any // Should be LoggerContextInterface, but avoid compiler issues this way\n }\n}\n\nfunction getLoggerContext(setup?: (context: LoggerContextInterface) => void) {\n const logger = LoggerContext()\n if (setup)\n setup(logger)\n else\n logger.setHandlers([LoggerConsoleHandler()])\n return logger\n}\n\n/** Get or create global logger instance */\nexport function getGlobalLogger(setup?: (context: LoggerContextInterface) => void): LoggerContextInterface {\n if (globalLogger == null) {\n try {\n const gcontext = getGlobalContext()\n if (gcontext != null) {\n getGlobalConsole()\n\n if (gcontext?.logger == null) {\n globalLogger = getLoggerContext(setup)\n gcontext.logger = globalLogger\n }\n else {\n globalLogger = gcontext.logger\n }\n }\n else {\n globalLogger = getLoggerContext(setup)\n }\n }\n catch (e) {\n globalLogger = getLoggerContext(setup)\n }\n }\n return globalLogger\n}\n\n/** Can be used for lazy usage e.g. inside of Zeed */\nexport function getGlobalLoggerIfExists() {\n if (globalLogger != null)\n return globalLogger\n\n try {\n const gcontext = getGlobalContext()\n if (gcontext?.logger != null)\n return gcontext.logger\n }\n catch (e) { }\n}\n\nexport function DefaultLogger(name?: string, level?: LogLevelAliasType): LoggerInterface {\n return getGlobalLogger()(name, level)\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{b as y}from"./chunk-
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
import{b as y}from"./chunk-YEP2NVSS.js";import{h as f}from"./chunk-6EQDC7VW.js";import{a as i}from"./chunk-5NKC2EQJ.js";var o=class e{static{i(this,"Day")}days;get value(){return this.days}constructor(t){if(typeof t=="number"){this.days=t;return}if(t!=null&&(t=e.from(t)?.days),t==null){let r=new Date;this.days=r.getFullYear()*1e4+(r.getMonth()+1)*100+r.getDate()}else this.days=t}static fromNumber(t){return new e(t)}static fromString(t){return e.from(+t.replace(/\D/g,"").slice(0,8))}static fromDate(t,r=!1){return r?e.fromString(t.toISOString().substr(0,10)):e.from(t.getFullYear()*1e4+(t.getMonth()+1)*100+t.getDate())}static fromDateUTC(t){return e.fromDate(t,!0)}static fromDateGMT(t){return e.fromDate(t,!0)}static from(t,r=!1){if(typeof t=="number")return t<100?void 0:new e(t);if(typeof t=="string")return e.fromString(t);if(Array.isArray(t)&&t.length===3){let[a,n=1,s=1]=t;return n<1||n>12||s<1||s>31?void 0:new e(a*1e4+n*100+s)}else{if(t instanceof Date)return e.fromDate(t,r);if(t instanceof e)return t}}toNumber(){return this.days}toJson(){return this.days}toString(t="-"){let r=String(this.days);return r.slice(0,4)+t+r.slice(4,6)+t+r.slice(6,8)}toDate(t=!1){return t?new Date(`${this.toString()}T00:00:00.000Z`):new Date(this.days/1e4,this.days/100%100-1,this.days%100)}toDateUTC(){return this.toDate(!0)}toDateGMT(){return this.toDate(!0)}get year(){return Math.floor(this.days/1e4)}get month(){return Math.floor(this.days/100%100)}get day(){return Math.floor(this.days%100)}dayOffset(t){return e.fromDateUTC(new Date(this.toDateUTC().getTime()+t*y))}monthStart(){return e.from([this.year,this.month,1])}yearStart(){return e.from([this.year,1,1])}monthOffset(t){let r=this.month+t,a=Math.floor((r-1)%12)+1;a===0&&(a=12);let n=Math.floor((r-1)/12);return e.from([this.year+n,a,this.day])}daysUntil(t){return Math.round((new e(t)?.toDateUTC().getTime()-this.toDateUTC().getTime())/y)}yesterday(){return this.dayOffset(-1)}tomorrow(){return this.dayOffset(1)}};async function m(e,t,r){let a=o.from(e),n=o.from(t);for(;a&&n&&a?.days<=n?.days;){let s=r(a);f(s)&&await s,a=a.dayOffset(1)}}i(m,"forEachDay");function h(){return new o}i(h,"today");function c(e){return new o(e)}i(c,"day");function g(e){return o.fromDate(new Date(e)).days}i(g,"dateStringToDays");export{o as a,m as b,h as c,c as d,g as e};
|
|
2
|
+
//# sourceMappingURL=chunk-W4M6PGBQ.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-WAK73JNG.cjs","../src/common/msg/channel-debug.ts"],"names":["DebugChannel","Channel","__name","data"],"mappings":"AAAA,6IAAwC,wDAAyC,ICGpEA,CAAAA,WAAN,MAAA,QAA2BC,mBAAQ,6EAH1C,MAG0C,CAAAC,iCAAAA,IAAA,CAAA,cAAA,CAAA,gBACxC,QAAA,CAAoC,CAAC,EAAA,WAOrC,CAAYC,CAAAA,CAAiC,CAC3C,IAAA,CAAK,QAAA,CAAS,IAAA,CAAKA,CAAI,CACzB,CAEA,IAAI,WAAA,CAAA,CAAc,CAChB,MAAO,CAAA,CACT,CACF,UAAA,CAAA,cAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-WAK73JNG.cjs","sourcesContent":[null,"import { Channel } from './channel'\n\n/** Just track messages posted for debug purposes */\nexport class DebugChannel extends Channel {\n messages: (Uint8Array | string)[] = []\n\n // constructor() {\n // super()\n // this.emit('connect', )\n // }\n\n postMessage(data: Uint8Array | string): void {\n this.messages.push(data)\n }\n\n get isConnected() {\n return true\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-WCOWHFZD.cjs","../src/common/data/regexp.ts"],"names":["rxEscape","escapeRegExp","value","__name"],"mappings":"AAAA,iIAAwC,ICAlCA,CAAAA,CAAW,wBAAA,CAEV,SAASC,CAAAA,CAAaC,CAAAA,CAAgC,CAC3D,OAAKA,CAAAA,CAEDA,EAAAA,WAAiB,MAAA,CACZA,CAAAA,CAAM,MAAA,CACRA,CAAAA,CAAM,OAAA,CAAQF,CAAAA,CAAU,MAAM,CAAA,CAH5B,EAIX,CANgBG,iCAAAA,CAAAF,CAAA,cAAA,CAAA,CAAA,cAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-WCOWHFZD.cjs","sourcesContent":[null,"const rxEscape = /[\\\\\\-[\\]/{}()*+?.^$|]/g // Finds: \\ - [ ] / { } ( ) * + ? . ^ $ |\n\nexport function escapeRegExp(value: RegExp | string): string {\n if (!value)\n return ''\n if (value instanceof RegExp)\n return value.source\n return value.replace(rxEscape, '\\\\$&')\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-WEF4N7J4.cjs","../src/common/dispose-defer.ts"],"names":["polyfillUsing","__name","callDisposer","disposable","result","isPromise","useDispose","opt","isString","name","log","DefaultLogger","disposed","tracked","untrack","arrayFilterInPlace","el","track","obj","dispose","strictSync","promises","fn"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-WEF4N7J4.cjs","sourcesContent":[null,"import type { Disposer, DisposerFunction } from './dispose-types'\nimport type { LoggerInterface } from './log/log-base'\nimport { arrayFilterInPlace } from './data/array'\nimport { isString } from './data/is'\nimport { isPromise } from './exec/promise'\nimport { DefaultLogger } from './log/log'\n\nexport function polyfillUsing() {\n try {\n // @ts-expect-error just a polyfill\n Symbol.dispose ??= Symbol('Symbol.dispose')\n // @ts-expect-error just a polyfill\n Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n }\n catch (err) { }\n}\n\n// Symbol.dispose ??= Symbol('Symbol.dispose')\n// Symbol.asyncDispose ??= Symbol('Symbol.asyncDispose')\n\n/** Different kinds of implementations have grown, this should unify them */\nfunction callDisposer(disposable: Disposer): Promise<void> | void {\n let result\n\n if (typeof disposable === 'function')\n result = disposable()\n else if (isPromise(disposable))\n result = disposable\n else if (typeof disposable.dispose === 'function')\n result = disposable.dispose()\n else if (isPromise(disposable.dispose))\n result = disposable.dispose\n\n if (isPromise(result))\n return result\n}\n\nexport interface UseDisposeConfig {\n name?: string\n log?: LoggerInterface\n}\n\nexport function useDispose(opt?: string | UseDisposeConfig | LoggerInterface) {\n if (opt != null) {\n if (isString(opt))\n opt = { name: opt }\n else if ('debug' in opt && 'label' in opt)\n opt = { name: opt.label, log: opt }\n }\n\n polyfillUsing()\n\n const name = opt?.name\n const log = opt?.log ?? DefaultLogger('zeed:dispose')\n\n let disposed = 0\n\n const tracked: Disposer[] = []\n\n function untrack(disposable: Disposer): Promise<void> | void {\n if (disposable != null && tracked.includes(disposable)) {\n arrayFilterInPlace(tracked, el => el !== disposable)\n const result = callDisposer(disposable)\n if (isPromise(result))\n return result\n }\n }\n\n function track(obj?: Disposer): DisposerFunction | undefined {\n if (obj == null)\n return\n tracked.unshift(obj) // LIFO\n return () => untrack(obj)\n }\n\n /** Dispose all tracked entries */\n function dispose(strictSync = false): Promise<any> | void {\n if (name)\n log.debug(`dispose \"${name}\": ${tracked.length} entries`)\n\n disposed += 1\n\n const promises: any[] = []\n while (tracked.length > 0) {\n const fn = tracked[0]\n const result = untrack(fn) // LIFO\n if (isPromise(result)) {\n if (strictSync)\n throw new Error(`Async disposable found: ${fn} -> ${result}`)\n else\n promises.push(result)\n }\n }\n\n if (promises.length > 0)\n return Promise.all(promises)\n }\n\n /** Dispose all tracked entries in synchronous way. */\n function disposeSync(): void {\n void dispose(true)\n }\n\n return Object.assign(dispose, {\n /** Counter that incremends, each time dispose has been called */\n disposed,\n\n add: track,\n remove: untrack,\n\n /** @deprecated use add */\n track,\n\n /** @deprecated use remove */\n untrack,\n\n dispose,\n disposeSync,\n sync: disposeSync,\n\n /** @deprecated use dispose */\n exec: dispose,\n getSize() {\n return tracked.length\n },\n isDisposed() {\n return tracked.length <= 0\n },\n\n [Symbol.dispose]() {\n return dispose()\n },\n\n async [Symbol.asyncDispose]() {\n return await dispose()\n },\n\n })\n}\n\nexport type UseDispose = ReturnType<typeof useDispose>\n\nexport function useDefer(\n config: {\n mode?: 'lifo' | 'fifo'\n } = {},\n) {\n const { mode = 'fifo' } = config\n const steps: Disposer[] = []\n\n polyfillUsing()\n\n /**\n * Excutes all steps. If all steps are not Promises, they are executed immediately,\n * otherwise a Promise is returned\n */\n const exec = async (expectSync = false) => {\n while (steps.length > 0) {\n const step = steps[0]\n arrayFilterInPlace(steps, el => el !== step)\n if (typeof step === 'function') {\n const result = step()\n if (isPromise(result)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await result\n }\n }\n else if (isPromise(step)) {\n if (expectSync) {\n throw new Error(\n `Expected sync only function, but found async: ${step}`,\n )\n }\n await step\n }\n else {\n throw new Error(`Unhandled disposable: ${step}`)\n }\n }\n }\n\n const add = (obj: Disposer) => {\n if (mode === 'lifo')\n steps.unshift(obj)\n else\n steps.push(obj)\n }\n\n return Object.assign(exec, {\n add,\n exec,\n getSize() {\n return steps.length\n },\n })\n}\n\nexport type UseDefer = ReturnType<typeof useDefer>\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{b as d}from"./chunk-KIKHNNKK.js";import{c as L}from"./chunk-DTFGASVV.js";import{b as g}from"./chunk-ACQZBCFF.js";import{b as f,d as p}from"./chunk-D3NCJPFL.js";import{c as k,d as H,e as W}from"./chunk-RZR3ECDT.js";import{a as m}from"./chunk-5NKC2EQJ.js";import{createWriteStream as x,mkdirSync as I}from"fs";import{basename as M,dirname as N,resolve as D}from"path";import E from"process";var u={};function B(e,v={}){let{level:y=void 0,filter:O=void 0,time:R=!0,pretty:S=!1,rotation:$}=v;e=D(E.cwd(),e);let l=N(e);I(l,{recursive:!0});let i=d($),a;i?(i.path=l,a=L(M(e),i)):a=x(e,{flags:"a"});let b=f(O),w=p(y);return t=>{if(!w(t.level)||!b(t.name))return;let o=R?`${new Date().toISOString()} `:"",s=t.name||"",c=u[s||""];c==null&&(u[s]=c);let r=[`[${s||"*"}]`,g(t.messages,{pretty:S})];function n(...F){a.write(`${F.join(" ")}
|
|
2
2
|
`)}switch(m(n,"write"),t.level){case 1:n(`${o}I|* `,...r);break;case 2:n(`${o}W|** `,...r);break;case 3:n(`${o}E|***`,...r);break;default:n(`${o}D| `,...r);break}}}m(B,"LoggerFileHandler");export{B as a};
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# sourceMappingURL=chunk-WH4WW45N.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-WHJI4PQ2.cjs"],"names":[],"mappings":"AAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-WHJI4PQ2.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/zeed/zeed/dist/chunk-WK6DXBUD.cjs","../src/node/log/log-rotation.ts"],"names":["exists","filename","resolve","access","constants","error","__name","RotatingFileStreamError","RotatingFileStream","Writable","generator","options","encoding","history","maxFiles","maxSize","path","createGzip","exec","createReadStream","createWriteStream","open","readFile","stat","unlink","process"],"mappings":"AAAA,6OAAwC,8CCMnB,wBACkD,uCACA,4BACnD,oFACA,gCACK,gCACE,4BACC,4BACD,MAE3B,SAAeA,CAAAA,CAAOC,CAAAA,CAAoC,CACxD,OAAO,IAAI,OAAA,CAAQC,CAAAA,EAAWC,wBAAAA,CAAOF,CAAUG,aAAAA,CAAU,IAAA,CAAMC,CAAAA,EAASH,CAAAA,CAAQ,CAACG,CAAK,CAAC,CAAC,CAC1F,CAFeC,iCAAAA,CAAAN,CAAA,QAAA,CAAA,CAIR,IAAMO,CAAAA,WAAN,MAAA,QAAsC,KAAM,CApBnD,MAoBmD,CAAAD,iCAAAA,IAAA,CAAA,yBAAA,CAAA,gBAC1C,IAAA,CAAO,eAAA,WAEd,CAAA,CAAc,CACZ,KAAA,CAAM,oCAAoC,qCAC5C,CACF,UAAA,CAgEaE,CAAAA,aAAN,MAAA,QAAiCC,gBAAS,CA1FjD,MA0FiD,CAAAH,iCAAAA,IAAA,CAAA,oBAAA,CAAA,CACvC,WAwBR,CAAYI,CAAAA,CAA8BC,CAAAA,CAAe,CACvD,GAAM,CAAE,QAAA,CAAAC,CAAAA,CAAU,OAAA,CAAAC,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAU,OAAA,CAAAC,CAAAA,CAAS,IAAA,CAAAC,CAAK,CAAA,CAAIL,CAAAA,CAEvD,KAAA,CAAM,CAAE,aAAA,CAAe,CAAA,CAAA,CAAM,eAAA,CAAiBC,CAAS,CAAC,CAAA,CAExD,IAAA,CAAK,UAAA,CAAaK,gBAAAA,CAClB,IAAA,CAAK,IAAA,CAAOC,mBAAAA,CACZ,IAAA,CAAK,QAAA,CAAA,CAAYF,CAAAA,EAAQ,EAAA,CAAA,CAAMN,CAAAA,CAAU,IAAI,CAAA,CAC7C,IAAA,CAAK,kBAAA,CAAqBS,oBAAAA,CAC1B,IAAA,CAAK,mBAAA,CAAsBC,qBAAAA,CAC3B,IAAA,CAAK,MAAA,CAASC,cAAAA,CACd,IAAA,CAAK,UAAA,CAAaC,kBAAAA,CAClB,IAAA,CAAK,MAAA,CAASC,cAAAA,CACd,IAAA,CAAK,QAAA,CAAWC,gBAAAA,CAChB,IAAA,CAAK,SAAA,CAAYd,CAAAA,CACjB,IAAA,CAAK,UAAA,CAAa,UAAA,CAClB,IAAA,CAAK,OAAA,CAAUC,CAAAA,CACf,IAAA,CAAK,MAAA,CAASc,iBAAAA,CAAQ,MAAA,CACtB,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,WAAA,CAAc,IAAA,CACnB,IAAA,CAAK,OAAA,CAAU,IAAA,CACf,IAAA,CAAK,cAAA,CAAiB,IAAA,CACtB,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,QAAA,CAAW,IAAA,CAChB,IAAA,CAAK,IAAA,CAAO,EAAA,CACZ,IAAA,CAAK,QAAA,CAAW,CAAA,CAAA,CAChB,IAAA,CAAK,IAAA,CAAO,CAAA,CAAA,CAERX,CAAAA,EAAYC,CAAAA,CAAAA,EAAAA,CACdJ,CAAAA,CAAQ,OAAA,CAAA,CAAWK,CAAAA,EAAQ,EAAA,CAAA,CAAA,CAAOH,CAAAA,EAAW,CAAA,EAAA;AAucS;AAAK;AAsG7C","file":"/home/runner/work/zeed/zeed/dist/chunk-WK6DXBUD.cjs","sourcesContent":[null,"// MIT https://github.com/iccicci/rotating-file-stream\n\nimport type { Buffer } from 'node:buffer'\nimport type { Stats } from 'node:fs'\nimport type { FileHandle } from 'node:fs/promises'\nimport type { Gzip } from 'node:zlib'\nimport { exec } from 'node:child_process'\nimport { access, constants, createReadStream, createWriteStream } from 'node:fs'\nimport { mkdir, open, readFile, rename, stat, unlink, writeFile } from 'node:fs/promises'\nimport { sep } from 'node:path'\nimport process from 'node:process'\nimport { Writable } from 'node:stream'\nimport { setTimeout } from 'node:timers'\nimport { TextDecoder } from 'node:util'\nimport { createGzip } from 'node:zlib'\n\nasync function exists(filename: string): Promise<boolean> {\n return new Promise(resolve => access(filename, constants.F_OK, error => resolve(!error)))\n}\n\nexport class RotatingFileStreamError extends Error {\n public code = 'RFS-TOO-MANY'\n\n constructor() {\n super('Too many destination file attempts')\n }\n}\n\nexport type RotationCompressor = (source: string, dest: string) => string\nexport type RotationGenerator = (time: number | Date | null, index?: number) => string\n\n// Flattened event signatures are available via 'RotatingFileStreamEvents' above.\n\nexport type RotationIntervalUnit = 'M' | 'd' | 'h' | 'm' | 's'\nexport type RotationInterval = `${number}${RotationIntervalUnit}`\n\nexport type RotationFileSizeUnit = 'B' | 'K' | 'M' | 'G'\nexport type RotationFileSize = `${number}${RotationFileSizeUnit}`\n\nexport interface RotationOptions {\n compress?: boolean | 'gzip' | RotationCompressor\n encoding?: BufferEncoding\n history?: string\n immutable?: boolean\n initialRotation?: boolean\n interval?: RotationInterval\n intervalBoundary?: boolean\n intervalUTC?: boolean\n maxFiles?: number\n maxSize?: RotationFileSize\n mode?: number\n omitExtension?: boolean\n path?: string\n rotate?: number\n size?: RotationFileSize\n teeToStdout?: boolean\n}\n\ninterface Opts {\n compress?: boolean | 'gzip' | RotationCompressor\n encoding?: BufferEncoding\n history?: string\n immutable?: boolean\n initialRotation?: boolean\n interval?: { num: number, unit: RotationIntervalUnit }\n intervalBoundary?: boolean\n intervalUTC?: boolean\n maxFiles?: number\n maxSize?: number\n mode?: number\n omitExtension?: boolean\n path?: string\n rotate?: number\n size?: number\n teeToStdout?: boolean\n}\n\ntype RotationCallback = (error?: Error) => void\n\ninterface RotationChunk {\n chunk: Buffer\n encoding: BufferEncoding\n}\n\ninterface RotationHistory {\n name: string\n size: number\n time: number\n}\n\nexport class RotatingFileStream extends Writable {\n private createGzip: () => Gzip\n private exec: typeof exec\n private file: FileHandle | null\n private filename: string\n private finished: boolean\n private fsCreateReadStream: typeof createReadStream\n private fsCreateWriteStream: typeof createWriteStream\n private fsOpen: typeof open\n private fsReadFile: typeof readFile\n private fsStat: typeof stat\n private fsUnlink: typeof unlink\n private generator: RotationGenerator\n private last: string\n private maxTimeout: number\n private next: number | null\n private options: Opts\n private size: number\n private stdout: typeof process.stdout\n private prev: number | null\n private rotation: Date | null\n private initPromise: Promise<void> | null\n private timeout: NodeJS.Timeout | null\n private timeoutPromise: Promise<void> | null\n\n constructor(generator: RotationGenerator, options: Opts) {\n const { encoding, history, maxFiles, maxSize, path } = options\n\n super({ decodeStrings: true, defaultEncoding: encoding })\n\n this.createGzip = createGzip\n this.exec = exec\n this.filename = (path || '') + generator(null)\n this.fsCreateReadStream = createReadStream\n this.fsCreateWriteStream = createWriteStream\n this.fsOpen = open\n this.fsReadFile = readFile\n this.fsStat = stat\n this.fsUnlink = unlink\n this.generator = generator\n this.maxTimeout = 2147483640\n this.options = options\n this.stdout = process.stdout\n this.file = null\n this.initPromise = null\n this.timeout = null\n this.timeoutPromise = null\n this.prev = null\n this.next = null\n this.rotation = null\n this.last = ''\n this.finished = false\n this.size = 0\n\n if (maxFiles || maxSize)\n options.history = (path || '') + (history || `${this.generator(null)}.txt`)\n\n this.on('close', () => (this.finished ? null : this.emit('finish')))\n this.on('finish', () => (this.finished = this.clear()));\n\n // In v15 was introduced the _constructor method to delay any _write(), _final() and _destroy() calls\n // Until v16 will be not deprecated we still need this.initPromise\n // https://nodejs.org/api/stream.html#stream_writable_construct_callback\n\n (async () => {\n try {\n this.initPromise = this.init()\n\n await this.initPromise\n this.initPromise = null\n }\n catch (e: any) {}\n })()\n }\n\n _destroy(error: Error, callback: RotationCallback): void {\n this.refinal(error, callback)\n }\n\n _final(callback: RotationCallback): void {\n this.refinal(undefined, callback)\n }\n\n _write(chunk: Buffer, encoding: BufferEncoding, callback: RotationCallback): void {\n this.rewrite([{ chunk, encoding }], 0, callback)\n }\n\n _writev(chunks: RotationChunk[], callback: RotationCallback): void {\n this.rewrite(chunks, 0, callback)\n }\n\n private async refinal(error: Error | undefined, callback: RotationCallback): Promise<void> {\n try {\n this.clear()\n\n if (this.initPromise)\n await this.initPromise\n if (this.timeoutPromise)\n await this.timeoutPromise\n\n await this.reclose()\n }\n catch (e: any) {\n return callback(error || e)\n }\n\n callback(error)\n }\n\n private async rewrite(chunks: RotationChunk[], index: number, callback: RotationCallback): Promise<void> {\n const { size, teeToStdout } = this.options\n\n try {\n if (this.initPromise)\n await this.initPromise\n\n for (let i = 0; i < chunks.length; ++i) {\n const { chunk } = chunks[i]\n\n this.size += chunk.length\n if (this.timeoutPromise)\n await this.timeoutPromise\n await this.file!.write(chunk)\n\n if (teeToStdout && !this.stdout.destroyed)\n this.stdout.write(chunk)\n if (size && this.size >= size)\n await this.rotate()\n }\n }\n catch (e: any) {\n return callback(e)\n }\n\n callback()\n }\n\n private async init(): Promise<void> {\n const { immutable, initialRotation, interval, size } = this.options\n\n // In v15 was introduced the _constructor method to delay any _write(), _final() and _destroy() calls\n // Once v16 will be deprecated we can restore only following line\n // if(immutable) return this.immutate(true);\n if (immutable)\n return new Promise<void>((resolve, reject) => process.nextTick(() => this.immutate(true).then(resolve).catch((err: any) => reject(err))))\n\n let stats: Stats\n\n try {\n stats = await stat(this.filename)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n return this.reopen(0)\n }\n\n if (!stats.isFile())\n throw new Error(`Can't write on: ${this.filename} (it is not a file)`)\n\n if (initialRotation) {\n this.intervalBounds(this.now())\n const prev = this.prev\n this.intervalBounds(new Date(stats.mtime.getTime()))\n\n if (prev !== this.prev)\n return this.rotate()\n }\n\n this.size = stats.size\n if (!size || stats.size < size)\n return this.reopen(stats.size)\n if (interval)\n this.intervalBounds(this.now())\n\n return this.rotate()\n }\n\n private async makePath(name: string): Promise<string> {\n await mkdir(name.split(sep).slice(0, -1).join(sep), { recursive: true })\n return name\n }\n\n private async reopen(size: number): Promise<void> {\n let file: FileHandle\n\n try {\n file = await open(this.filename, 'a', this.options.mode)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n await this.makePath(this.filename)\n file = await open(this.filename, 'a', this.options.mode)\n }\n\n this.file = file\n this.size = size\n this.interval()\n this.emit('open', this.filename)\n }\n\n private async reclose(): Promise<void> {\n const { file } = this\n\n if (!file)\n return\n\n this.file = null\n return file.close()\n }\n\n private now(): Date {\n return new Date()\n }\n\n private async rotate(): Promise<void> {\n const { immutable, rotate } = this.options\n\n this.size = 0\n this.rotation = this.now()\n\n this.clear()\n this.emit('rotation')\n await this.reclose()\n\n if (rotate)\n return this.classical()\n if (immutable)\n return this.immutate(false)\n\n return this.move()\n }\n\n private async findName(): Promise<string> {\n const { interval, path, intervalBoundary } = this.options\n\n for (let index = 1; index < 1000; ++index) {\n const filename = (path || '') + this.generator(interval && intervalBoundary ? new Date(this.prev as number) : this.rotation, index)\n\n if (!(await exists(filename)))\n return filename\n }\n\n throw new RotatingFileStreamError()\n }\n\n private async move(): Promise<void> {\n const { compress } = this.options\n\n const filename = await this.findName()\n await this.touch(filename)\n\n if (compress)\n await this.compress(filename)\n else await rename(this.filename, filename)\n\n return this.rotated(filename)\n }\n\n private async touch(filename: string): Promise<void> {\n let file: FileHandle\n\n try {\n file = await this.fsOpen(filename, 'a')\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n await this.makePath(filename)\n file = await open(filename, 'a')\n }\n\n await file.close()\n return this.unlink(filename)\n }\n\n private async classical(): Promise<void> {\n const { compress, path, rotate = 0 } = this.options\n let rotatedName = ''\n\n for (let count = rotate; count > 0; --count) {\n const currName = path + this.generator(count)\n const prevName = count === 1 ? this.filename : path + this.generator(count - 1)\n\n if (!(await exists(prevName)))\n continue\n if (!rotatedName)\n rotatedName = currName\n\n if (count === 1 && compress) {\n await this.compress(currName)\n }\n else {\n try {\n await rename(prevName, currName)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n await this.makePath(currName)\n await rename(prevName, currName)\n }\n }\n }\n\n return this.rotated(rotatedName)\n }\n\n private clear(): boolean {\n if (this.timeout) {\n clearTimeout(this.timeout as NodeJS.Timeout)\n this.timeout = null\n }\n\n return true\n }\n\n private intervalBoundsBig(now: Date): void {\n const year = this.options.intervalUTC ? now.getUTCFullYear() : now.getFullYear()\n let month = this.options.intervalUTC ? now.getUTCMonth() : now.getMonth()\n let day = this.options.intervalUTC ? now.getUTCDate() : now.getDate()\n let hours = this.options.intervalUTC ? now.getUTCHours() : now.getHours()\n const { num, unit } = this.options.interval!\n\n if (unit === 'M') {\n day = 1\n hours = 0\n }\n else if (unit === 'd') {\n hours = 0\n }\n else {\n hours = Number.parseInt((hours / num) as unknown as string, 10) * num\n }\n\n this.prev = new Date(year, month, day, hours, 0, 0, 0).getTime()\n\n if (unit === 'M')\n month += num\n else if (unit === 'd')\n day += num\n else hours += num\n\n this.next = new Date(year, month, day, hours, 0, 0, 0).getTime()\n }\n\n private intervalBounds(now: Date): Date {\n const unit = this.options.interval!.unit\n\n if (unit === 'M' || unit === 'd' || unit === 'h') {\n this.intervalBoundsBig(now)\n }\n else {\n let period = 1000 * this.options.interval!.num\n\n if (unit === 'm')\n period *= 60\n\n this.prev = Number.parseInt(String(now.getTime() / period), 10) * period\n this.next = this.prev + period\n }\n\n // this.prev is guaranteed to be a number here\n return new Date(this.prev as number)\n }\n\n private interval(): void {\n if (!this.options.interval)\n return\n\n this.intervalBounds(this.now())\n\n const set = async (): Promise<void> => {\n const next = this.next as number\n const time = next - this.now().getTime()\n\n if (time <= 0) {\n try {\n this.timeoutPromise = this.rotate()\n\n await this.timeoutPromise\n this.timeoutPromise = null\n }\n catch (e: any) {}\n }\n else {\n this.timeout = setTimeout(set, time > this.maxTimeout ? this.maxTimeout : time)\n if (this.timeout && typeof (this.timeout as any).unref === 'function')\n (this.timeout as any).unref()\n }\n }\n\n set()\n }\n\n private async compress(filename: string): Promise<void> {\n const { compress } = this.options\n\n if (typeof compress === 'function') {\n await new Promise<void>((resolve, reject) => {\n this.exec(compress(this.filename, filename), (error, stdout, stderr) => {\n this.emit('external', stdout, stderr)\n error ? reject(error) : resolve()\n })\n })\n }\n else {\n await this.gzip(filename)\n }\n\n return this.unlink(this.filename)\n }\n\n private async gzip(filename: string): Promise<void> {\n const { mode } = this.options\n const options = mode ? { mode } : {}\n const inp = this.fsCreateReadStream(this.filename, {})\n const out = this.fsCreateWriteStream(filename, options)\n const zip = this.createGzip()\n\n return new Promise((resolve, reject) => {\n inp.once('error', reject)\n out.once('error', reject)\n zip.once('error', reject)\n out.once('finish', resolve)\n inp.pipe(zip).pipe(out)\n })\n }\n\n private async rotated(filename: string): Promise<void> {\n const { maxFiles, maxSize } = this.options\n\n if (maxFiles || maxSize)\n await this.history(filename)\n\n this.emit('rotated', filename)\n\n return this.reopen(0)\n }\n\n private async history(filename: string): Promise<void> {\n const { history, maxFiles, maxSize } = this.options\n const res: RotationHistory[] = []\n let files = [filename]\n\n try {\n if (history) {\n const content = await this.fsReadFile(history, 'utf8')\n\n files = [...content.toString().split('\\n'), filename]\n }\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n }\n\n for (const file of files) {\n if (file) {\n try {\n const stats = await this.fsStat(file)\n\n if (stats.isFile()) {\n res.push({\n name: file,\n size: stats.size,\n time: stats.mtime.getTime(),\n })\n }\n else {\n this.emit('warning', new Error(`File '${file}' contained in history is not a regular file`))\n }\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n }\n }\n }\n\n res.sort((a, b) => a.time - b.time)\n\n if (maxFiles) {\n while (res.length > maxFiles) {\n const file = res.shift()\n\n if (file)\n await this.unlink(file.name)\n if (file)\n this.emit('removed', file.name, true)\n }\n }\n\n if (maxSize) {\n while (res.reduce((size, file) => size + file.size, 0) > maxSize) {\n const file = res.shift()\n\n if (file)\n await this.unlink(file.name)\n if (file)\n this.emit('removed', file.name, false)\n }\n }\n\n if (history)\n await writeFile(history, `${res.map(e => e.name).join('\\n')}\\n`, 'utf-8')\n this.emit('history')\n }\n\n private async immutate(first: boolean): Promise<void> {\n const { size } = this.options\n const now = this.now()\n\n for (let index = 1; index < 1000; ++index) {\n let fileSize = 0\n let stats: Stats | undefined\n\n this.filename = this.options.path + this.generator(now, index)\n\n try {\n const s = await this.fsStat(this.filename)\n stats = s\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n }\n\n if (stats) {\n fileSize = stats.size\n\n if (!stats.isFile())\n throw new Error(`Can't write on: '${this.filename}' (it is not a file)`)\n if (size && fileSize >= size)\n continue\n }\n\n if (first) {\n this.last = this.filename\n\n return this.reopen(fileSize)\n }\n\n await this.rotated(this.last)\n this.last = this.filename\n\n return\n }\n\n throw new RotatingFileStreamError()\n }\n\n private async unlink(filename: string): Promise<void> {\n try {\n await this.fsUnlink(filename)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n this.emit('warning', e)\n }\n }\n}\n\nfunction buildNumberCheck(field: string): (type: string, options: Opts, value: number) => void {\n return (type: string, options: Opts, value: number): void => {\n const converted: number = Number.parseInt(String(value), 10)\n\n if (type !== 'number' || Number.isNaN(converted) || converted <= 0)\n throw new Error(`'${field}' option must be a positive integer number`)\n }\n}\n\nfunction buildStringCheck(field: keyof Opts, check: (value: string) => any) {\n return (type: string, options: Opts, value: string): void => {\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.${String(field)}' type: ${type}`)\n\n options[field] = check(value) as never\n }\n}\n\nfunction checkMeasure(value: string, what: string, units: any): any {\n const ret: any = {}\n\n ret.num = Number.parseInt(value, 10)\n\n if (Number.isNaN(ret.num))\n throw new Error(`Unknown 'options.${what}' format: ${value}`)\n if (ret.num <= 0)\n throw new Error(`A positive integer number is expected for 'options.${what}'`)\n\n ret.unit = value.replace(/^[ 0]*/g, '').substr((`${ret.num}`).length, 1)\n\n if (ret.unit.length === 0)\n throw new Error(`Missing unit for 'options.${what}'`)\n if (!units[ret.unit])\n throw new Error(`Unknown 'options.${what}' unit: ${ret.unit}`)\n\n return ret\n}\n\nconst intervalUnits: any = { M: true, d: true, h: true, m: true, s: true }\n\nfunction checkIntervalUnit(ret: any, unit: string, amount: number): void {\n if (Number.parseInt((amount / ret.num) as unknown as string, 10) * ret.num !== amount)\n throw new Error(`An integer divider of ${amount} is expected as ${unit} for 'options.interval'`)\n}\n\nfunction checkInterval(value: string): any {\n const ret = checkMeasure(value, 'interval', intervalUnits)\n\n switch (ret.unit) {\n case 'h':\n checkIntervalUnit(ret, 'hours', 24)\n break\n\n case 'm':\n checkIntervalUnit(ret, 'minutes', 60)\n break\n\n case 's':\n checkIntervalUnit(ret, 'seconds', 60)\n break\n }\n\n return ret\n}\n\nconst sizeUnits: any = { B: true, G: true, K: true, M: true }\n\nfunction checkSize(value: string): any {\n const ret = checkMeasure(value, 'size', sizeUnits)\n\n if (ret.unit === 'K')\n return ret.num * 1024\n if (ret.unit === 'M')\n return ret.num * 1048576\n if (ret.unit === 'G')\n return ret.num * 1073741824\n\n return ret.num\n}\n\nconst checks: any = {\n encoding: (type: string, options: Opts, value: string): any => new TextDecoder(value),\n immutable: (): void => {},\n initialRotation: (): void => {},\n interval: buildStringCheck('interval', checkInterval),\n intervalBoundary: (): void => {},\n intervalUTC: (): void => {},\n maxFiles: buildNumberCheck('maxFiles'),\n maxSize: buildStringCheck('maxSize', checkSize),\n mode: (): void => {},\n omitExtension: (): void => {},\n rotate: buildNumberCheck('rotate'),\n size: buildStringCheck('size', checkSize),\n teeToStdout: (): void => {},\n ...{\n compress: (type: string, options: Opts, value: boolean | string | RotationCompressor): any => {\n if (value === false)\n return\n if (!value)\n throw new Error('A value for \\'options.compress\\' must be specified')\n if (type === 'boolean')\n return (options.compress = (source: string, dest: string): string => `cat ${source} | gzip -c9 > ${dest}`)\n if (type === 'function')\n return\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.compress' type: ${type}`)\n if ((value as unknown as string) !== 'gzip')\n throw new Error(`Don't know how to handle compression method: ${value}`)\n },\n history: (type: string): void => {\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.history' type: ${type}`)\n },\n path: (type: string, options: Opts, value: string): void => {\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.path' type: ${type}`)\n if (value[value.length - 1] !== sep)\n options.path = value + sep\n },\n },\n}\n\nfunction checkOpts(options: RotationOptions): Opts {\n const ret: Opts = {}\n for (const k of Object.keys(options)) {\n const opt = k as keyof RotationOptions\n const value = options[opt]\n const type = typeof value\n\n // assign raw value first\n ;(ret as any)[opt as string] = value as any\n\n if (!(opt in checks))\n throw new Error(`Unknown option: ${opt}`)\n\n checks[opt](type, ret, value as any)\n }\n\n if (!ret.path)\n ret.path = ''\n\n if (!ret.interval) {\n delete ret.immutable\n delete ret.initialRotation\n delete ret.intervalBoundary\n delete ret.intervalUTC\n }\n\n if (ret.rotate) {\n delete ret.history\n delete ret.immutable\n delete ret.maxFiles\n delete ret.maxSize\n delete ret.intervalBoundary\n delete ret.intervalUTC\n }\n\n if (ret.immutable)\n delete ret.compress\n if (!ret.intervalBoundary)\n delete ret.initialRotation\n\n return ret\n}\n\nfunction createClassical(filename: string, compress: boolean, omitExtension: boolean): RotationGenerator {\n return (time: number | Date | null, index?: number): string => {\n const idx = index || 0\n return (idx ? `${filename}.${idx}${compress && !omitExtension ? '.gz' : ''}` : filename)\n }\n}\n\nfunction createGenerator(filename: string, compress: boolean, omitExtension: boolean): RotationGenerator {\n const pad = (num: number): string => (num > 9 ? '' : '0') + num\n\n return (time: number | Date | null, index?: number): string => {\n if (!time)\n return filename\n\n const t = typeof time === 'number' ? new Date(time) : time\n\n const month = `${t.getFullYear()}${pad(t.getMonth() + 1)}`\n const day = pad(t.getDate())\n const hour = pad(t.getHours())\n const minute = pad(t.getMinutes())\n\n return `${month + day}-${hour}${minute}-${pad(index || 0)}-${filename}${compress && !omitExtension ? '.gz' : ''}`\n }\n}\n\nexport function createRotationStream(filename: string | RotationGenerator, options?: RotationOptions): RotatingFileStream {\n if (typeof options === 'undefined')\n options = {}\n else if (typeof options !== 'object')\n throw new Error(`The \"options\" argument must be of type object. Received type ${typeof options}`)\n\n const opts = checkOpts(options)\n const { compress, omitExtension } = opts\n let generator: RotationGenerator\n\n if (typeof filename === 'string')\n generator = (opts.rotate ? createClassical(filename, !!compress, !!omitExtension) : createGenerator(filename, !!compress, !!omitExtension))\n else if (typeof filename === 'function')\n generator = filename\n else throw new Error(`The \"filename\" argument must be one of type string or function. Received type ${typeof filename}`)\n\n return new RotatingFileStream(generator, opts)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-WK6DXBUD.cjs","../src/node/log/log-rotation.ts"],"names":["exists","filename","resolve","access","constants","error","__name","RotatingFileStreamError","RotatingFileStream","Writable","generator","options","encoding","history","maxFiles","maxSize","path","createGzip","exec","createReadStream","createWriteStream","open","readFile","stat","unlink","process"],"mappings":"AAAA,6OAAwC,8CCMnB,wBACkD,uCACA,4BACnD,oFACA,gCACK,gCACE,4BACC,4BACD,MAE3B,SAAeA,CAAAA,CAAOC,CAAAA,CAAoC,CACxD,OAAO,IAAI,OAAA,CAAQC,CAAAA,EAAWC,wBAAAA,CAAOF,CAAUG,aAAAA,CAAU,IAAA,CAAMC,CAAAA,EAASH,CAAAA,CAAQ,CAACG,CAAK,CAAC,CAAC,CAC1F,CAFeC,iCAAAA,CAAAN,CAAA,QAAA,CAAA,CAIR,IAAMO,CAAAA,WAAN,MAAA,QAAsC,KAAM,CApBnD,MAoBmD,CAAAD,iCAAAA,IAAA,CAAA,yBAAA,CAAA,gBAC1C,IAAA,CAAO,eAAA,WAEd,CAAA,CAAc,CACZ,KAAA,CAAM,oCAAoC,qCAC5C,CACF,UAAA,CAgEaE,CAAAA,aAAN,MAAA,QAAiCC,gBAAS,CA1FjD,MA0FiD,CAAAH,iCAAAA,IAAA,CAAA,oBAAA,CAAA,CACvC,WAwBR,CAAYI,CAAAA,CAA8BC,CAAAA,CAAe,CACvD,GAAM,CAAE,QAAA,CAAAC,CAAAA,CAAU,OAAA,CAAAC,CAAAA,CAAS,QAAA,CAAAC,CAAAA,CAAU,OAAA,CAAAC,CAAAA,CAAS,IAAA,CAAAC,CAAK,CAAA,CAAIL,CAAAA,CAEvD,KAAA,CAAM,CAAE,aAAA,CAAe,CAAA,CAAA,CAAM,eAAA,CAAiBC,CAAS,CAAC,CAAA,CAExD,IAAA,CAAK,UAAA,CAAaK,gBAAAA,CAClB,IAAA,CAAK,IAAA,CAAOC,mBAAAA,CACZ,IAAA,CAAK,QAAA,CAAA,CAAYF,CAAAA,EAAQ,EAAA,CAAA,CAAMN,CAAAA,CAAU,IAAI,CAAA,CAC7C,IAAA,CAAK,kBAAA,CAAqBS,oBAAAA,CAC1B,IAAA,CAAK,mBAAA,CAAsBC,qBAAAA,CAC3B,IAAA,CAAK,MAAA,CAASC,cAAAA,CACd,IAAA,CAAK,UAAA,CAAaC,kBAAAA,CAClB,IAAA,CAAK,MAAA,CAASC,cAAAA,CACd,IAAA,CAAK,QAAA,CAAWC,gBAAAA,CAChB,IAAA,CAAK,SAAA,CAAYd,CAAAA,CACjB,IAAA,CAAK,UAAA,CAAa,UAAA,CAClB,IAAA,CAAK,OAAA,CAAUC,CAAAA,CACf,IAAA,CAAK,MAAA,CAASc,iBAAAA,CAAQ,MAAA,CACtB,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,WAAA,CAAc,IAAA,CACnB,IAAA,CAAK,OAAA,CAAU,IAAA,CACf,IAAA,CAAK,cAAA,CAAiB,IAAA,CACtB,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,IAAA,CAAO,IAAA,CACZ,IAAA,CAAK,QAAA,CAAW,IAAA,CAChB,IAAA,CAAK,IAAA,CAAO,EAAA,CACZ,IAAA,CAAK,QAAA,CAAW,CAAA,CAAA,CAChB,IAAA,CAAK,IAAA,CAAO,CAAA,CAAA,CAERX,CAAAA,EAAYC,CAAAA,CAAAA,EAAAA,CACdJ,CAAAA,CAAQ,OAAA,CAAA,CAAWK,CAAAA,EAAQ,EAAA,CAAA,CAAA,CAAOH,CAAAA,EAAW,CAAA,EAAA;AAucS;AAAK;AAsG7C","file":"/Users/dirk/work/github-zeed/dist/chunk-WK6DXBUD.cjs","sourcesContent":[null,"// MIT https://github.com/iccicci/rotating-file-stream\n\nimport type { Buffer } from 'node:buffer'\nimport type { Stats } from 'node:fs'\nimport type { FileHandle } from 'node:fs/promises'\nimport type { Gzip } from 'node:zlib'\nimport { exec } from 'node:child_process'\nimport { access, constants, createReadStream, createWriteStream } from 'node:fs'\nimport { mkdir, open, readFile, rename, stat, unlink, writeFile } from 'node:fs/promises'\nimport { sep } from 'node:path'\nimport process from 'node:process'\nimport { Writable } from 'node:stream'\nimport { setTimeout } from 'node:timers'\nimport { TextDecoder } from 'node:util'\nimport { createGzip } from 'node:zlib'\n\nasync function exists(filename: string): Promise<boolean> {\n return new Promise(resolve => access(filename, constants.F_OK, error => resolve(!error)))\n}\n\nexport class RotatingFileStreamError extends Error {\n public code = 'RFS-TOO-MANY'\n\n constructor() {\n super('Too many destination file attempts')\n }\n}\n\nexport type RotationCompressor = (source: string, dest: string) => string\nexport type RotationGenerator = (time: number | Date | null, index?: number) => string\n\n// Flattened event signatures are available via 'RotatingFileStreamEvents' above.\n\nexport type RotationIntervalUnit = 'M' | 'd' | 'h' | 'm' | 's'\nexport type RotationInterval = `${number}${RotationIntervalUnit}`\n\nexport type RotationFileSizeUnit = 'B' | 'K' | 'M' | 'G'\nexport type RotationFileSize = `${number}${RotationFileSizeUnit}`\n\nexport interface RotationOptions {\n compress?: boolean | 'gzip' | RotationCompressor\n encoding?: BufferEncoding\n history?: string\n immutable?: boolean\n initialRotation?: boolean\n interval?: RotationInterval\n intervalBoundary?: boolean\n intervalUTC?: boolean\n maxFiles?: number\n maxSize?: RotationFileSize\n mode?: number\n omitExtension?: boolean\n path?: string\n rotate?: number\n size?: RotationFileSize\n teeToStdout?: boolean\n}\n\ninterface Opts {\n compress?: boolean | 'gzip' | RotationCompressor\n encoding?: BufferEncoding\n history?: string\n immutable?: boolean\n initialRotation?: boolean\n interval?: { num: number, unit: RotationIntervalUnit }\n intervalBoundary?: boolean\n intervalUTC?: boolean\n maxFiles?: number\n maxSize?: number\n mode?: number\n omitExtension?: boolean\n path?: string\n rotate?: number\n size?: number\n teeToStdout?: boolean\n}\n\ntype RotationCallback = (error?: Error) => void\n\ninterface RotationChunk {\n chunk: Buffer\n encoding: BufferEncoding\n}\n\ninterface RotationHistory {\n name: string\n size: number\n time: number\n}\n\nexport class RotatingFileStream extends Writable {\n private createGzip: () => Gzip\n private exec: typeof exec\n private file: FileHandle | null\n private filename: string\n private finished: boolean\n private fsCreateReadStream: typeof createReadStream\n private fsCreateWriteStream: typeof createWriteStream\n private fsOpen: typeof open\n private fsReadFile: typeof readFile\n private fsStat: typeof stat\n private fsUnlink: typeof unlink\n private generator: RotationGenerator\n private last: string\n private maxTimeout: number\n private next: number | null\n private options: Opts\n private size: number\n private stdout: typeof process.stdout\n private prev: number | null\n private rotation: Date | null\n private initPromise: Promise<void> | null\n private timeout: NodeJS.Timeout | null\n private timeoutPromise: Promise<void> | null\n\n constructor(generator: RotationGenerator, options: Opts) {\n const { encoding, history, maxFiles, maxSize, path } = options\n\n super({ decodeStrings: true, defaultEncoding: encoding })\n\n this.createGzip = createGzip\n this.exec = exec\n this.filename = (path || '') + generator(null)\n this.fsCreateReadStream = createReadStream\n this.fsCreateWriteStream = createWriteStream\n this.fsOpen = open\n this.fsReadFile = readFile\n this.fsStat = stat\n this.fsUnlink = unlink\n this.generator = generator\n this.maxTimeout = 2147483640\n this.options = options\n this.stdout = process.stdout\n this.file = null\n this.initPromise = null\n this.timeout = null\n this.timeoutPromise = null\n this.prev = null\n this.next = null\n this.rotation = null\n this.last = ''\n this.finished = false\n this.size = 0\n\n if (maxFiles || maxSize)\n options.history = (path || '') + (history || `${this.generator(null)}.txt`)\n\n this.on('close', () => (this.finished ? null : this.emit('finish')))\n this.on('finish', () => (this.finished = this.clear()));\n\n // In v15 was introduced the _constructor method to delay any _write(), _final() and _destroy() calls\n // Until v16 will be not deprecated we still need this.initPromise\n // https://nodejs.org/api/stream.html#stream_writable_construct_callback\n\n (async () => {\n try {\n this.initPromise = this.init()\n\n await this.initPromise\n this.initPromise = null\n }\n catch (e: any) {}\n })()\n }\n\n _destroy(error: Error, callback: RotationCallback): void {\n this.refinal(error, callback)\n }\n\n _final(callback: RotationCallback): void {\n this.refinal(undefined, callback)\n }\n\n _write(chunk: Buffer, encoding: BufferEncoding, callback: RotationCallback): void {\n this.rewrite([{ chunk, encoding }], 0, callback)\n }\n\n _writev(chunks: RotationChunk[], callback: RotationCallback): void {\n this.rewrite(chunks, 0, callback)\n }\n\n private async refinal(error: Error | undefined, callback: RotationCallback): Promise<void> {\n try {\n this.clear()\n\n if (this.initPromise)\n await this.initPromise\n if (this.timeoutPromise)\n await this.timeoutPromise\n\n await this.reclose()\n }\n catch (e: any) {\n return callback(error || e)\n }\n\n callback(error)\n }\n\n private async rewrite(chunks: RotationChunk[], index: number, callback: RotationCallback): Promise<void> {\n const { size, teeToStdout } = this.options\n\n try {\n if (this.initPromise)\n await this.initPromise\n\n for (let i = 0; i < chunks.length; ++i) {\n const { chunk } = chunks[i]\n\n this.size += chunk.length\n if (this.timeoutPromise)\n await this.timeoutPromise\n await this.file!.write(chunk)\n\n if (teeToStdout && !this.stdout.destroyed)\n this.stdout.write(chunk)\n if (size && this.size >= size)\n await this.rotate()\n }\n }\n catch (e: any) {\n return callback(e)\n }\n\n callback()\n }\n\n private async init(): Promise<void> {\n const { immutable, initialRotation, interval, size } = this.options\n\n // In v15 was introduced the _constructor method to delay any _write(), _final() and _destroy() calls\n // Once v16 will be deprecated we can restore only following line\n // if(immutable) return this.immutate(true);\n if (immutable)\n return new Promise<void>((resolve, reject) => process.nextTick(() => this.immutate(true).then(resolve).catch((err: any) => reject(err))))\n\n let stats: Stats\n\n try {\n stats = await stat(this.filename)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n return this.reopen(0)\n }\n\n if (!stats.isFile())\n throw new Error(`Can't write on: ${this.filename} (it is not a file)`)\n\n if (initialRotation) {\n this.intervalBounds(this.now())\n const prev = this.prev\n this.intervalBounds(new Date(stats.mtime.getTime()))\n\n if (prev !== this.prev)\n return this.rotate()\n }\n\n this.size = stats.size\n if (!size || stats.size < size)\n return this.reopen(stats.size)\n if (interval)\n this.intervalBounds(this.now())\n\n return this.rotate()\n }\n\n private async makePath(name: string): Promise<string> {\n await mkdir(name.split(sep).slice(0, -1).join(sep), { recursive: true })\n return name\n }\n\n private async reopen(size: number): Promise<void> {\n let file: FileHandle\n\n try {\n file = await open(this.filename, 'a', this.options.mode)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n await this.makePath(this.filename)\n file = await open(this.filename, 'a', this.options.mode)\n }\n\n this.file = file\n this.size = size\n this.interval()\n this.emit('open', this.filename)\n }\n\n private async reclose(): Promise<void> {\n const { file } = this\n\n if (!file)\n return\n\n this.file = null\n return file.close()\n }\n\n private now(): Date {\n return new Date()\n }\n\n private async rotate(): Promise<void> {\n const { immutable, rotate } = this.options\n\n this.size = 0\n this.rotation = this.now()\n\n this.clear()\n this.emit('rotation')\n await this.reclose()\n\n if (rotate)\n return this.classical()\n if (immutable)\n return this.immutate(false)\n\n return this.move()\n }\n\n private async findName(): Promise<string> {\n const { interval, path, intervalBoundary } = this.options\n\n for (let index = 1; index < 1000; ++index) {\n const filename = (path || '') + this.generator(interval && intervalBoundary ? new Date(this.prev as number) : this.rotation, index)\n\n if (!(await exists(filename)))\n return filename\n }\n\n throw new RotatingFileStreamError()\n }\n\n private async move(): Promise<void> {\n const { compress } = this.options\n\n const filename = await this.findName()\n await this.touch(filename)\n\n if (compress)\n await this.compress(filename)\n else await rename(this.filename, filename)\n\n return this.rotated(filename)\n }\n\n private async touch(filename: string): Promise<void> {\n let file: FileHandle\n\n try {\n file = await this.fsOpen(filename, 'a')\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n await this.makePath(filename)\n file = await open(filename, 'a')\n }\n\n await file.close()\n return this.unlink(filename)\n }\n\n private async classical(): Promise<void> {\n const { compress, path, rotate = 0 } = this.options\n let rotatedName = ''\n\n for (let count = rotate; count > 0; --count) {\n const currName = path + this.generator(count)\n const prevName = count === 1 ? this.filename : path + this.generator(count - 1)\n\n if (!(await exists(prevName)))\n continue\n if (!rotatedName)\n rotatedName = currName\n\n if (count === 1 && compress) {\n await this.compress(currName)\n }\n else {\n try {\n await rename(prevName, currName)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n await this.makePath(currName)\n await rename(prevName, currName)\n }\n }\n }\n\n return this.rotated(rotatedName)\n }\n\n private clear(): boolean {\n if (this.timeout) {\n clearTimeout(this.timeout as NodeJS.Timeout)\n this.timeout = null\n }\n\n return true\n }\n\n private intervalBoundsBig(now: Date): void {\n const year = this.options.intervalUTC ? now.getUTCFullYear() : now.getFullYear()\n let month = this.options.intervalUTC ? now.getUTCMonth() : now.getMonth()\n let day = this.options.intervalUTC ? now.getUTCDate() : now.getDate()\n let hours = this.options.intervalUTC ? now.getUTCHours() : now.getHours()\n const { num, unit } = this.options.interval!\n\n if (unit === 'M') {\n day = 1\n hours = 0\n }\n else if (unit === 'd') {\n hours = 0\n }\n else {\n hours = Number.parseInt((hours / num) as unknown as string, 10) * num\n }\n\n this.prev = new Date(year, month, day, hours, 0, 0, 0).getTime()\n\n if (unit === 'M')\n month += num\n else if (unit === 'd')\n day += num\n else hours += num\n\n this.next = new Date(year, month, day, hours, 0, 0, 0).getTime()\n }\n\n private intervalBounds(now: Date): Date {\n const unit = this.options.interval!.unit\n\n if (unit === 'M' || unit === 'd' || unit === 'h') {\n this.intervalBoundsBig(now)\n }\n else {\n let period = 1000 * this.options.interval!.num\n\n if (unit === 'm')\n period *= 60\n\n this.prev = Number.parseInt(String(now.getTime() / period), 10) * period\n this.next = this.prev + period\n }\n\n // this.prev is guaranteed to be a number here\n return new Date(this.prev as number)\n }\n\n private interval(): void {\n if (!this.options.interval)\n return\n\n this.intervalBounds(this.now())\n\n const set = async (): Promise<void> => {\n const next = this.next as number\n const time = next - this.now().getTime()\n\n if (time <= 0) {\n try {\n this.timeoutPromise = this.rotate()\n\n await this.timeoutPromise\n this.timeoutPromise = null\n }\n catch (e: any) {}\n }\n else {\n this.timeout = setTimeout(set, time > this.maxTimeout ? this.maxTimeout : time)\n if (this.timeout && typeof (this.timeout as any).unref === 'function')\n (this.timeout as any).unref()\n }\n }\n\n set()\n }\n\n private async compress(filename: string): Promise<void> {\n const { compress } = this.options\n\n if (typeof compress === 'function') {\n await new Promise<void>((resolve, reject) => {\n this.exec(compress(this.filename, filename), (error, stdout, stderr) => {\n this.emit('external', stdout, stderr)\n error ? reject(error) : resolve()\n })\n })\n }\n else {\n await this.gzip(filename)\n }\n\n return this.unlink(this.filename)\n }\n\n private async gzip(filename: string): Promise<void> {\n const { mode } = this.options\n const options = mode ? { mode } : {}\n const inp = this.fsCreateReadStream(this.filename, {})\n const out = this.fsCreateWriteStream(filename, options)\n const zip = this.createGzip()\n\n return new Promise((resolve, reject) => {\n inp.once('error', reject)\n out.once('error', reject)\n zip.once('error', reject)\n out.once('finish', resolve)\n inp.pipe(zip).pipe(out)\n })\n }\n\n private async rotated(filename: string): Promise<void> {\n const { maxFiles, maxSize } = this.options\n\n if (maxFiles || maxSize)\n await this.history(filename)\n\n this.emit('rotated', filename)\n\n return this.reopen(0)\n }\n\n private async history(filename: string): Promise<void> {\n const { history, maxFiles, maxSize } = this.options\n const res: RotationHistory[] = []\n let files = [filename]\n\n try {\n if (history) {\n const content = await this.fsReadFile(history, 'utf8')\n\n files = [...content.toString().split('\\n'), filename]\n }\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n }\n\n for (const file of files) {\n if (file) {\n try {\n const stats = await this.fsStat(file)\n\n if (stats.isFile()) {\n res.push({\n name: file,\n size: stats.size,\n time: stats.mtime.getTime(),\n })\n }\n else {\n this.emit('warning', new Error(`File '${file}' contained in history is not a regular file`))\n }\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n }\n }\n }\n\n res.sort((a, b) => a.time - b.time)\n\n if (maxFiles) {\n while (res.length > maxFiles) {\n const file = res.shift()\n\n if (file)\n await this.unlink(file.name)\n if (file)\n this.emit('removed', file.name, true)\n }\n }\n\n if (maxSize) {\n while (res.reduce((size, file) => size + file.size, 0) > maxSize) {\n const file = res.shift()\n\n if (file)\n await this.unlink(file.name)\n if (file)\n this.emit('removed', file.name, false)\n }\n }\n\n if (history)\n await writeFile(history, `${res.map(e => e.name).join('\\n')}\\n`, 'utf-8')\n this.emit('history')\n }\n\n private async immutate(first: boolean): Promise<void> {\n const { size } = this.options\n const now = this.now()\n\n for (let index = 1; index < 1000; ++index) {\n let fileSize = 0\n let stats: Stats | undefined\n\n this.filename = this.options.path + this.generator(now, index)\n\n try {\n const s = await this.fsStat(this.filename)\n stats = s\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n }\n\n if (stats) {\n fileSize = stats.size\n\n if (!stats.isFile())\n throw new Error(`Can't write on: '${this.filename}' (it is not a file)`)\n if (size && fileSize >= size)\n continue\n }\n\n if (first) {\n this.last = this.filename\n\n return this.reopen(fileSize)\n }\n\n await this.rotated(this.last)\n this.last = this.filename\n\n return\n }\n\n throw new RotatingFileStreamError()\n }\n\n private async unlink(filename: string): Promise<void> {\n try {\n await this.fsUnlink(filename)\n }\n catch (e: any) {\n if (e.code !== 'ENOENT')\n throw e\n\n this.emit('warning', e)\n }\n }\n}\n\nfunction buildNumberCheck(field: string): (type: string, options: Opts, value: number) => void {\n return (type: string, options: Opts, value: number): void => {\n const converted: number = Number.parseInt(String(value), 10)\n\n if (type !== 'number' || Number.isNaN(converted) || converted <= 0)\n throw new Error(`'${field}' option must be a positive integer number`)\n }\n}\n\nfunction buildStringCheck(field: keyof Opts, check: (value: string) => any) {\n return (type: string, options: Opts, value: string): void => {\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.${String(field)}' type: ${type}`)\n\n options[field] = check(value) as never\n }\n}\n\nfunction checkMeasure(value: string, what: string, units: any): any {\n const ret: any = {}\n\n ret.num = Number.parseInt(value, 10)\n\n if (Number.isNaN(ret.num))\n throw new Error(`Unknown 'options.${what}' format: ${value}`)\n if (ret.num <= 0)\n throw new Error(`A positive integer number is expected for 'options.${what}'`)\n\n ret.unit = value.replace(/^[ 0]*/g, '').substr((`${ret.num}`).length, 1)\n\n if (ret.unit.length === 0)\n throw new Error(`Missing unit for 'options.${what}'`)\n if (!units[ret.unit])\n throw new Error(`Unknown 'options.${what}' unit: ${ret.unit}`)\n\n return ret\n}\n\nconst intervalUnits: any = { M: true, d: true, h: true, m: true, s: true }\n\nfunction checkIntervalUnit(ret: any, unit: string, amount: number): void {\n if (Number.parseInt((amount / ret.num) as unknown as string, 10) * ret.num !== amount)\n throw new Error(`An integer divider of ${amount} is expected as ${unit} for 'options.interval'`)\n}\n\nfunction checkInterval(value: string): any {\n const ret = checkMeasure(value, 'interval', intervalUnits)\n\n switch (ret.unit) {\n case 'h':\n checkIntervalUnit(ret, 'hours', 24)\n break\n\n case 'm':\n checkIntervalUnit(ret, 'minutes', 60)\n break\n\n case 's':\n checkIntervalUnit(ret, 'seconds', 60)\n break\n }\n\n return ret\n}\n\nconst sizeUnits: any = { B: true, G: true, K: true, M: true }\n\nfunction checkSize(value: string): any {\n const ret = checkMeasure(value, 'size', sizeUnits)\n\n if (ret.unit === 'K')\n return ret.num * 1024\n if (ret.unit === 'M')\n return ret.num * 1048576\n if (ret.unit === 'G')\n return ret.num * 1073741824\n\n return ret.num\n}\n\nconst checks: any = {\n encoding: (type: string, options: Opts, value: string): any => new TextDecoder(value),\n immutable: (): void => {},\n initialRotation: (): void => {},\n interval: buildStringCheck('interval', checkInterval),\n intervalBoundary: (): void => {},\n intervalUTC: (): void => {},\n maxFiles: buildNumberCheck('maxFiles'),\n maxSize: buildStringCheck('maxSize', checkSize),\n mode: (): void => {},\n omitExtension: (): void => {},\n rotate: buildNumberCheck('rotate'),\n size: buildStringCheck('size', checkSize),\n teeToStdout: (): void => {},\n ...{\n compress: (type: string, options: Opts, value: boolean | string | RotationCompressor): any => {\n if (value === false)\n return\n if (!value)\n throw new Error('A value for \\'options.compress\\' must be specified')\n if (type === 'boolean')\n return (options.compress = (source: string, dest: string): string => `cat ${source} | gzip -c9 > ${dest}`)\n if (type === 'function')\n return\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.compress' type: ${type}`)\n if ((value as unknown as string) !== 'gzip')\n throw new Error(`Don't know how to handle compression method: ${value}`)\n },\n history: (type: string): void => {\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.history' type: ${type}`)\n },\n path: (type: string, options: Opts, value: string): void => {\n if (type !== 'string')\n throw new Error(`Don't know how to handle 'options.path' type: ${type}`)\n if (value[value.length - 1] !== sep)\n options.path = value + sep\n },\n },\n}\n\nfunction checkOpts(options: RotationOptions): Opts {\n const ret: Opts = {}\n for (const k of Object.keys(options)) {\n const opt = k as keyof RotationOptions\n const value = options[opt]\n const type = typeof value\n\n // assign raw value first\n ;(ret as any)[opt as string] = value as any\n\n if (!(opt in checks))\n throw new Error(`Unknown option: ${opt}`)\n\n checks[opt](type, ret, value as any)\n }\n\n if (!ret.path)\n ret.path = ''\n\n if (!ret.interval) {\n delete ret.immutable\n delete ret.initialRotation\n delete ret.intervalBoundary\n delete ret.intervalUTC\n }\n\n if (ret.rotate) {\n delete ret.history\n delete ret.immutable\n delete ret.maxFiles\n delete ret.maxSize\n delete ret.intervalBoundary\n delete ret.intervalUTC\n }\n\n if (ret.immutable)\n delete ret.compress\n if (!ret.intervalBoundary)\n delete ret.initialRotation\n\n return ret\n}\n\nfunction createClassical(filename: string, compress: boolean, omitExtension: boolean): RotationGenerator {\n return (time: number | Date | null, index?: number): string => {\n const idx = index || 0\n return (idx ? `${filename}.${idx}${compress && !omitExtension ? '.gz' : ''}` : filename)\n }\n}\n\nfunction createGenerator(filename: string, compress: boolean, omitExtension: boolean): RotationGenerator {\n const pad = (num: number): string => (num > 9 ? '' : '0') + num\n\n return (time: number | Date | null, index?: number): string => {\n if (!time)\n return filename\n\n const t = typeof time === 'number' ? new Date(time) : time\n\n const month = `${t.getFullYear()}${pad(t.getMonth() + 1)}`\n const day = pad(t.getDate())\n const hour = pad(t.getHours())\n const minute = pad(t.getMinutes())\n\n return `${month + day}-${hour}${minute}-${pad(index || 0)}-${filename}${compress && !omitExtension ? '.gz' : ''}`\n }\n}\n\nexport function createRotationStream(filename: string | RotationGenerator, options?: RotationOptions): RotatingFileStream {\n if (typeof options === 'undefined')\n options = {}\n else if (typeof options !== 'object')\n throw new Error(`The \"options\" argument must be of type object. Received type ${typeof options}`)\n\n const opts = checkOpts(options)\n const { compress, omitExtension } = opts\n let generator: RotationGenerator\n\n if (typeof filename === 'string')\n generator = (opts.rotate ? createClassical(filename, !!compress, !!omitExtension) : createGenerator(filename, !!compress, !!omitExtension))\n else if (typeof filename === 'function')\n generator = filename\n else throw new Error(`The \"filename\" argument must be one of type string or function. Received type ${typeof filename}`)\n\n return new RotatingFileStream(generator, opts)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-WPWV7ZEM.cjs"],"names":[],"mappings":"AAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-WPWV7ZEM.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-WSRQ3X55.cjs","../src/common/schema/utils.ts"],"names":["isSchemaObject","schema","__name","isSchemaOptional","isSchemaDefault","isSchemaPrimitive","isSchemaObjectFlat"],"mappings":"AAAA,iIAAwC,SCExBA,CAAAA,CAAeC,CAAAA,CAA4B,CACzD,OAAOA,CAAAA,CAAO,OAAA,EAAW,IAC3B,CAFgBC,iCAAAA,CAAAF,CAAA,gBAAA,CAAA,CAIT,SAASG,CAAAA,CAAiBF,CAAAA,CAA4B,CAC3D,OAAOA,CAAAA,CAAO,SAAA,GAAc,CAAA,CAC9B,CAFgBC,iCAAAA,CAAAC,CAAA,kBAAA,CAAA,CAIT,SAASC,CAAAA,CAAgBH,CAAAA,CAA4B,CAC1D,OAAOA,CAAAA,CAAO,QAAA,EAAY,IAC5B,CAFgBC,iCAAAA,CAAAE,CAAA,iBAAA,CAAA,CAIT,SAASC,CAAAA,CAAkBJ,CAAAA,CAA4B,CAC5D,MAAO,CAACD,CAAAA,CAAeC,CAAM,CAC/B,CAFgBC,iCAAAA,CAAAG,CAAA,mBAAA,CAAA,CAIT,SAASC,CAAAA,CAAmBL,CAAAA,CAA4B,CAC7D,OAAOD,CAAAA,CAAeC,CAAM,CAAA,EAAK,MAAA,CAAO,MAAA,CAAOA,CAAAA,CAAO,OAAQ,CAAA,CAAE,KAAA,CAAMI,CAAwB,CAChG,CAFgBH,iCAAAA,CAAAI,CAAA,oBAAA,CAAA,CAAA,0EAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-WSRQ3X55.cjs","sourcesContent":[null,"import type { Type } from './schema'\n\nexport function isSchemaObject(schema: Type<any>): boolean {\n return schema._object != null\n}\n\nexport function isSchemaOptional(schema: Type<any>): boolean {\n return schema._optional === true\n}\n\nexport function isSchemaDefault(schema: Type<any>): boolean {\n return schema._default != null\n}\n\nexport function isSchemaPrimitive(schema: Type<any>): boolean {\n return !isSchemaObject(schema) // todo\n}\n\nexport function isSchemaObjectFlat(schema: Type<any>): boolean {\n return isSchemaObject(schema) && Object.values(schema._object!).every(isSchemaPrimitive as any) // todo\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-X6SZNPFL.cjs","../src/node/log/log-util.ts"],"names":["getStackLlocationList","stack","rawLine","m","line","isNotNull","__name","pathStripCwd","path","fileURL","cwd","resolve","process","home"],"mappings":"AAAA,y0BAAwC,wDAAyC,4BCAzD,oFACJ,SAGJA,CAAAA,CAAsBC,CAAAA,CAAyB,CAC7D,OAAI,OAAOA,CAAAA,EAAU,QAAA,CACZ,CAAC,CAAA,kCAGRA,CAAAA,2BAAO,KAAA,mBAAM,CAAA;AAAA,CAAI,CAAA,qBAAE,GAAA,mBAAKC,CAAAA,EAAY,CAClC,IAAMC,CAAAA,CAAID,CAAAA,CAAQ,KAAA,CAEhB,kDACF,CAAA,CACA,EAAA,CAAIC,CAAAA,CAAG,CACL,IAAIC,CAAAA,CAAOD,CAAAA,CAAE,CAAC,CAAA,EAAKA,CAAAA,CAAE,CAAC,CAAA,EAAKA,CAAAA,CAAE,CAAC,CAAA,CAC9B,OAAIC,CAAAA,CAAK,QAAA,CAAS,GAAG,CAAA,EAAA,CACnBA,CAAAA,CAAOA,CAAAA,CAAK,KAAA,CAAM,CAAA,CAAG,CAAA,CAAE,CAAA,CAAA,CAClBA,CACT,CAEF,CAAC,CAAA,6BAAG,MAAA,mBAAOC,mBAAS,GAAA,SAAK,CAAC,GAE9B,CAnBgBC,iCAAAA,CAAAN,CAAA,uBAAA,CAAA,CAqBhB,SAASO,CAAAA,CAAaC,CAAAA,CAAc,CAClC,EAAA,CAAIA,CAAAA,CAAK,QAAA,CAAS,gBAAgB,CAAA,CAChC,MAAO,EAAA,CAET,IAAMC,CAAAA,CAAU,SAAA,CAChB,EAAA,CAAID,CAAAA,CAAK,UAAA,CAAWC,CAAO,CAAA,CACzB,OAAOD,CAAAA,CAAK,MAAA,CAAOC,CAAAA,CAAQ,MAAM,CAAA,CAEnC,IAAMC,CAAAA,CAAMC,2BAAAA,iBAAQC,CAAQ,GAAA,CAAI,CAAC,CAAA,CACjC,EAAA,CAAIF,CAAAA,EAAOF,CAAAA,CAAK,UAAA,CAAWE,CAAG,CAAA,CAC5B,OAAOF,CAAAA,CAAK,MAAA,CAAOE,CAAAA,CAAI,MAAA,CAAS,CAAC,CAAA,CAEnC,IAAMG,CAAAA,iBAAOD,iBAAAA,qBAAQ,GAAA,6BAAK,MAAA,CAAOD,2BAAAA,gBAAQC,iBAAAA,qBAAQ,GAAA,+BAAK,MAAI,CAAA,CAAI,EAAA,CAC9D,OAAIC,CAAAA,EAAQL,CAAAA,CAAK,UAAA,CAAWK,CAAI,CAAA,EAAA,CAC9BL,CAAAA,CAAO,CAAA,EAAA,EAAKA,CAAAA,CAAK,MAAA,CAAOK,CAAAA,CAAK,MAAA,CAAS,CAAC,CAAC,CAAA,CAAA;AAqC5B","file":"/Users/dirk/work/github-zeed/dist/chunk-X6SZNPFL.cjs","sourcesContent":[null,"import { resolve } from 'node:path'\nimport process from 'node:process'\nimport { isNotNull } from '../../common/data/is'\n\nexport function getStackLlocationList(stack: string): string[] {\n if (typeof stack !== 'string')\n return []\n // console.log(\"stack\", stack)\n return (\n stack?.split('\\n').map((rawLine) => {\n const m = rawLine.match(\n // eslint-disable-next-line regexp/no-super-linear-backtracking\n /^\\s+at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/,\n )\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(')'))\n line = line.slice(0, -1)\n return line\n }\n return undefined\n })?.filter(isNotNull) ?? []\n )\n}\n\nfunction pathStripCwd(path: string) {\n if (path.includes('/node_modules/'))\n return ''\n\n const fileURL = 'file://'\n if (path.startsWith(fileURL))\n return path.substr(fileURL.length)\n\n const cwd = resolve(process.cwd())\n if (cwd && path.startsWith(cwd))\n return path.substr(cwd.length + 1)\n\n const home = process.env?.HOME ? resolve(process.env?.HOME) : ''\n if (home && path.startsWith(home))\n path = `~/${path.substr(home.length + 1)}`\n\n return path\n}\n\nfunction extractFileInfo(stackLine: string): string {\n // eslint-disable-next-line regexp/no-super-linear-backtracking\n const m = stackLine.match(/^\\s*at.*(\\((.*)\\)|file:\\/\\/(.*)$)|\\s*at\\s(\\/.*)$/)\n if (m) {\n let line = m[3] || m[2] || m[4]\n if (line.endsWith(')'))\n line = line.slice(0, -1)\n return line\n }\n return ''\n}\n\n/**\n * Get the source code location of the caller\n * https://stackoverflow.com/a/47296370/140927\n *\n * @param level Number of levels to go down the stack trace\n * @param stripCwd Strip the current working directory, only reasonable for Node.js environment\n */\nexport function getSourceLocation(level = 2, stripCwd = true): string {\n const stack = new Error('stack').stack || ''\n let line: string | undefined = getStackLlocationList(stack)?.[level]\n if (line && stripCwd)\n line = pathStripCwd(line)\n\n return line || ''\n}\n\nexport function getStack(): string {\n return new Error('stack').stack || ''\n}\n\nexport function getSourceLocationByPrecedingPattern(\n patterns: string[],\n stripCwd = true,\n) {\n let line = ''\n const stack = new Error('stack').stack || ''\n if (typeof stack === 'string') {\n const lines = stack.split('\\n').map(l => l.trim())\n // console.log(lines)\n const index = lines.findIndex(l => patterns.some(p => l.startsWith(p)))\n line = lines[index + 1]\n if (line)\n line = extractFileInfo(line)\n\n if (line && stripCwd)\n line = pathStripCwd(line)\n }\n return line\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-X764QBCC.cjs","../src/common/data/html.ts"],"names":["escapeHTML","s","__name","unescapeHTML"],"mappings":"AAAA,iIAAwC,SCAxBA,CAAAA,CAAWC,CAAAA,CAAmB,CAC5C,OAAOA,CAAAA,CACJ,OAAA,CAAQ,IAAA,CAAM,OAAO,CAAA,CACrB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,MAAM,CAAA,CACpB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAAA,CACtB,OAAA,CAAQ,IAAA,CAAM,QAAQ,CAC3B,CAPgBC,iCAAAA,CAAAF,CAAA,YAAA,CAAA,CAST,SAASG,CAAAA,CAAaF,CAAAA,CAAmB,CAC9C,OAAOA,CAAAA,CACJ,OAAA,CAAQ,QAAA,CAAU,GAAG,CAAA,CACrB,OAAA,CAAQ,QAAA,CAAU,GAAG,CAAA,CACrB,OAAA,CAAQ,UAAA,CAAY,GAAG,CAAA,CACvB,OAAA,CAAQ,UAAA,CAAY,GAAI,CAAA,CACxB,OAAA,CAAQ,SAAA,CAAW,GAAG,CAC3B,CAPgBC,iCAAAA,CAAAC,CAAA,cAAA,CAAA,CAAA,6BAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-X764QBCC.cjs","sourcesContent":[null,"export function escapeHTML(s: string): string {\n return s\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n}\n\nexport function unescapeHTML(s: string): string {\n return s\n .replace(/</gi, '<')\n .replace(/>/gi, '>')\n .replace(/"/gi, '\"')\n .replace(/'/gi, '\\'')\n .replace(/&/gi, '&')\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }var _chunkSHOLGUSOcjs = require('./chunk-SHOLGUSO.cjs');var _chunkWK6DXBUDcjs = require('./chunk-WK6DXBUD.cjs');var _chunk47GAJHNOcjs = require('./chunk-47GAJHNO.cjs');var _chunkDLVWYIS2cjs = require('./chunk-DLVWYIS2.cjs');var _chunkSEQAFKIVcjs = require('./chunk-SEQAFKIV.cjs');var _chunkP7XCQ7WVcjs = require('./chunk-P7XCQ7WV.cjs');var _fs = require('fs');var _path = require('path');var _process = require('process'); var _process2 = _interopRequireDefault(_process);var u={};function B(e,v={}){let{level:y=void 0,filter:O=void 0,time:R=!0,pretty:S=!1,rotation:$}=v;e=_path.resolve.call(void 0, _process2.default.cwd(),e);let l=_path.dirname.call(void 0, e);_fs.mkdirSync.call(void 0, l,{recursive:!0});let i=_chunkSHOLGUSOcjs.b.call(void 0, $),a;i?(i.path=l,a=_chunkWK6DXBUDcjs.c.call(void 0, _path.basename.call(void 0, e),i)):a=_fs.createWriteStream.call(void 0, e,{flags:"a"});let b=_chunkDLVWYIS2cjs.b.call(void 0, O),w=_chunkDLVWYIS2cjs.d.call(void 0, y);return t=>{if(!w(t.level)||!b(t.name))return;let o=R?`${new Date().toISOString()} `:"",s=t.name||"",c=u[s||""];c==null&&(u[s]=c);let r=[`[${s||"*"}]`,_chunk47GAJHNOcjs.b.call(void 0, t.messages,{pretty:S})];function n(...F){a.write(`${F.join(" ")}
|
|
2
2
|
`)}switch(_chunkP7XCQ7WVcjs.a.call(void 0, n,"write"),t.level){case 1:n(`${o}I|* `,...r);break;case 2:n(`${o}W|** `,...r);break;case 3:n(`${o}E|***`,...r);break;default:n(`${o}D| `,...r);break}}}_chunkP7XCQ7WVcjs.a.call(void 0, B,"LoggerFileHandler");exports.a = B;
|
|
3
|
-
//# sourceMappingURL=chunk-
|
|
3
|
+
//# sourceMappingURL=chunk-XAU2ICXA.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-XAU2ICXA.cjs","../src/node/log/log-file.ts"],"names":["namespaces","LoggerFileHandler","path","opt","level","filter","time","pretty","rotation","resolve","process","pathFolder","dirname","mkdirSync","rotationOpts","getLogRotationConfig","stream","createRotationStream","basename","createWriteStream","matchesNamespace","useNamespaceFilter","matchesLevel","useLevelFilter","msg","timeNow"],"mappings":"AAAA,iOAAwC,wDAAyC,wDAAyC,wDAAgD,wDAAuD,wDAAyC,wBCE7N,4BACF,oFACvB,IAOdA,CAAAA,CAAkC,CAAC,CAAA,CAoBlC,SAASC,CAAAA,CAAkBC,CAAAA,CAAcC,CAAAA,CAA6B,CAAC,CAAA,CAAG,CAC/E,GAAM,CACJ,KAAA,CAAAC,CAAAA,CAAQ,KAAA,CAAA,CACR,MAAA,CAAAC,CAAAA,CAAS,KAAA,CAAA,CACT,IAAA,CAAAC,CAAAA,CAAO,CAAA,CAAA,CACP,MAAA,CAAAC,CAAAA,CAAS,CAAA,CAAA,CACT,QAAA,CAAAC,CACF,CAAA,CAAIL,CAAAA,CAEJD,CAAAA,CAAOO,2BAAAA,iBAAQC,CAAQ,GAAA,CAAI,CAAA,CAAGR,CAAI,CAAA,CAClC,IAAMS,CAAAA,CAAaC,2BAAAA,CAAY,CAAA,CAC/BC,2BAAAA,CAAUF,CAAY,CAAE,SAAA,CAAW,CAAA,CAAK,CAAC,CAAA,CAGzC,IAAMG,CAAAA,CAAeC,iCAAAA,CAA6B,CAAA,CAE9CC,CAAAA,CACAF,CAAAA,CAAAA,CAEFA,CAAAA,CAAa,IAAA,CAAOH,CAAAA,CACpBK,CAAAA,CAASC,iCAAAA,4BAAqBC,CAAa,CAAA,CAAGJ,CAAY,CAAA,CAAA,CAG1DE,CAAAA,CAASG,mCAAAA,CAAkBjB,CAAM,CAAE,KAAA,CAAO,GAAI,CAAC,CAAA,CAGjD,IAAMkB,CAAAA,CAAmBC,iCAAAA,CAAyB,CAAA,CAC5CC,CAAAA,CAAeC,iCAAAA,CAAoB,CAAA,CACzC,OAAQC,CAAAA,EAAoB,CAG1B,EAAA,CAFI,CAACF,CAAAA,CAAaE,CAAAA,CAAI,KAAK,CAAA,EAEvB,CAACJ,CAAAA,CAAiBI,CAAAA,CAAI,IAAI,CAAA,CAC5B,MAAA,CAEF,IAAMC,CAAAA,CAAUnB,CAAAA,CAAO,CAAA,EAAA;AAlCX","file":"/Users/dirk/work/github-zeed/dist/chunk-XAU2ICXA.cjs","sourcesContent":[null,"import type { LogHandlerOptions, LogMessage } from '../../common/log/log-base'\nimport type { LogRotationOptions } from './log-file-rotation'\nimport { createWriteStream, mkdirSync } from 'node:fs'\nimport { basename, dirname, resolve } from 'node:path'\nimport process from 'node:process'\nimport { renderMessages } from '../../common/data/message'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } from '../../common/log/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../../common/log/log-filter'\nimport { getLogRotationConfig } from './log-file-rotation'\nimport { createRotationStream } from './log-rotation'\n\nconst namespaces: Record<string, any> = {}\n\nexport interface LogFileHandlerOptions extends LogHandlerOptions {\n /**\n * Optional rotation options for log files. When provided, enables automatic log rotation.\n * Can be:\n * - `true`: Use default rotation settings (10MB size, 5 files, gzip compression)\n * - Rotation options object: Customize rotation behavior\n * - Shortcut strings: 'daily' | 'weekly' | 'monthly' | 'size'\n *\n * Examples:\n * - Enable with defaults: { rotation: true }\n * - Rotate daily: { rotation: { interval: '1d' } }\n * - Rotate when file reaches 10MB: { rotation: { size: '10M' } }\n * - Keep max 5 files: { rotation: { maxFiles: 5 } }\n * - Compress rotated files: { rotation: { compress: 'gzip' } }\n */\n rotation?: LogRotationOptions\n}\n\nexport function LoggerFileHandler(path: string, opt: LogFileHandlerOptions = {}) {\n const {\n level = undefined,\n filter = undefined,\n time = true,\n pretty = false,\n rotation,\n } = opt\n\n path = resolve(process.cwd(), path)\n const pathFolder = dirname(path)\n mkdirSync(pathFolder, { recursive: true })\n\n // Use rotating stream if rotation options are provided\n const rotationOpts = getLogRotationConfig(rotation)\n\n let stream: ReturnType<typeof createWriteStream> | ReturnType<typeof createRotationStream>\n if (rotationOpts) {\n // ensure rotation writes into the same folder\n rotationOpts.path = pathFolder\n stream = createRotationStream(basename(path), rotationOpts)\n }\n else {\n stream = createWriteStream(path, { flags: 'a' })\n }\n\n const matchesNamespace = useNamespaceFilter(filter)\n const matchesLevel = useLevelFilter(level)\n return (msg: LogMessage) => {\n if (!matchesLevel(msg.level))\n return\n if (!matchesNamespace(msg.name))\n return\n\n const timeNow = time ? `${new Date().toISOString()} ` : ''\n const name = msg.name || ''\n const ninfo = namespaces[name || '']\n if (ninfo == null)\n namespaces[name] = ninfo\n\n const args: string[] = [\n `[${name || '*'}]`,\n renderMessages(msg.messages, { pretty }),\n ]\n\n function write(...args: string[]): void {\n stream.write(`${args.join('\\t')}\\n`)\n }\n\n switch (msg.level) {\n case LogLevelInfo:\n write(`${timeNow}I|* `, ...args)\n break\n case LogLevelWarn:\n write(`${timeNow}W|** `, ...args)\n break\n case LogLevelError:\n write(`${timeNow}E|***`, ...args)\n break\n default:\n write(`${timeNow}D| `, ...args)\n break\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-XH7UHZOF.cjs","../src/common/data/camelcase.ts"],"names":["toCamelCase","s","$0","$1","__name","toCapitalize","toCapitalizeWords","fromCamelCase","str","separator"],"mappings":"AAAA,iIAAwC,SCUxBA,CAAAA,CAAYC,CAAAA,CAAW,CAErC,OAAIA,CAAAA,CAAE,MAAA,CAAS,CAAA,EAAA,CACT,iBAAA,CAAkB,IAAA,CAAKA,CAAC,CAAA,EAAA,CAC1BA,CAAAA,CAAIA,CAAAA,CAAE,WAAA,CAAY,CAAA,CAAA,CAEpBA,CAAAA,CAAIA,CAAAA,CAED,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CACtB,OAAA,CAAQ,UAAA,CAAY,EAAE,CAAA,CAEtB,OAAA,CAAQ,oBAAA,CAAsB,CAACC,CAAAA,CAAIC,CAAAA,CAAAA,EAAOA,CAAAA,CAAG,WAAA,CAAY,CAAC,CAAA,CAE7DF,CAAAA,CAAIA,CAAAA,CAAE,CAAC,CAAA,CAAE,WAAA,CAAY,CAAA,CAAIA,CAAAA,CAAE,SAAA,CAAU,CAAC,CAAA,CAAA,CAEjCA,CACT,CAhBgBG,iCAAAA,CAAAJ,CAAA,aAAA,CAAA,CAmBT,SAASK,CAAAA,CAAaJ,CAAAA,CAAW,CACtC,OAAOA,CAAAA,CAAE,MAAA,CAAO,CAAC,CAAA,CAAE,WAAA,CAAY,CAAA,CAAIA,CAAAA,CAAE,WAAA,CAAY,CAAA,CAAE,KAAA,CAAM,CAAC,CAC5D,CAFgBG,iCAAAA,CAAAC,CAAA,cAAA,CAAA,CAKT,SAASC,CAAAA,CAAkBL,CAAAA,CAAW,CAC3C,OAAOA,CAAAA,CAAE,OAAA,CAAQ,QAAA,CAAUI,CAAY,CACzC,CAFgBD,iCAAAA,CAAAE,CAAA,mBAAA,CAAA,CAaT,SAASC,CAAAA,CAAcC,CAAAA,CAAaC,CAAAA,CAAY,GAAA,CAAK,CAC1D,OAAAA,CAAAA,CAAY,OAAOA,CAAAA,CAAc,GAAA,CAAc,GAAA,CAAMA,CAAAA,CAC9CD,CAAAA,CACJ,OAAA,CAAQ,mBAAA,CAAqB,CAAA,EAAA,EAAKC,CAAS,CAAA,EAAA,CAAI,CAAA,CAC/C,OAAA,CAAQ,0BAAA,CAA4B,CAAA,EAAA,EAAKA,CAAS,CAAA,EAAA,CAAI,CAAA,CACtD,WAAA,CAAY,CACjB,CANgBL,iCAAAA,CAAAG,CAAA,eAAA,CAAA,CAAA,2DAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-XH7UHZOF.cjs","sourcesContent":[null,"/*\nhttps://matthiashager.com/converting-snake-case-to-camel-case-object-keys-with-javascript\n\ncamelCase\nsnake_case\nkebab-case\nPascalCase // I won't be using this here, but it's only one small step further if you want to use it\n*/\n\n/// Convert a string to camelCase from snake_case, kebab-case or pascalCase\nexport function toCamelCase(s: string) {\n // if only capital letters, convert to lower case\n if (s.length > 0) {\n if (/^[A-Z0-9_\\- ]*$/.test(s))\n s = s.toLowerCase()\n\n s = s\n // strip trailing non chars\n .replace(/^[-_ ]+/g, '')\n .replace(/[-_ ]+$/g, '')\n // strip separators and upper case first char\n .replace(/[-_ ]+([a-z0-9])/gi, ($0, $1) => $1.toUpperCase())\n // lower case first char\n s = s[0].toLowerCase() + s.substring(1)\n }\n return s\n}\n\n/// Capitalize the first letter of a string.\nexport function toCapitalize(s: string) {\n return s.charAt(0).toUpperCase() + s.toLowerCase().slice(1)\n}\n\n/// Capitalize the first letter of each word in a string.\nexport function toCapitalizeWords(s: string) {\n return s.replace(/\\w\\S*/g, toCapitalize)\n}\n\n// export function camelize(str: string) {\n// return str\n// .replace(/(?:^\\w|[A-Z]|\\b\\w)/g, (word: string, index: number) =>\n// index === 0 ? word.toLowerCase() : word.toUpperCase()\n// )\n// .replace(/\\s+/g, \"\")\n// }\n\n/// Convert a string from camelCase to snake_case or kebab-case\nexport function fromCamelCase(str: string, separator = '-') {\n separator = typeof separator === 'undefined' ? '_' : separator\n return str\n .replace(/([a-z\\d])([A-Z])/g, `$1${separator}$2`)\n .replace(/([A-Z]+)([A-Z][a-z\\d]+)/g, `$1${separator}$2`)\n .toLowerCase()\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-XICDURQQ.cjs"],"names":[],"mappings":"AAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-XICDURQQ.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-XMUXVBF2.cjs","../src/common/localhost.ts"],"names":["isLocalHost","hostname","__name"],"mappings":"AAAA,yuBAAwC,SCAxBA,CAAAA,CACdC,CAAAA,kCAAmB,UAAA,2BAAY,QAAA,6BAAU,UAAA,SAAY,IAAA,CAC5C,CACT,MACE,CAAC,kBAAA,CAAoB,WAAA,CAAa,WAAA,CAAa,EAAA,CAAI,KAAA,CAAO,IAAI,CAAA,CAAE,QAAA,CAC9DA,CACF,CAAA,EACGA,CAAAA,CAAS,UAAA,CAAW,UAAU,CAAA,EAC9BA,CAAAA,CAAS,UAAA,CAAW,OAAO,CAAA,EAC3BA,CAAAA,CAAS,QAAA,CAAS,QAAQ,CAEjC,CAXgBC,iCAAAA,CAAAF,CAAA,aAAA,CAAA,CAAA,cAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-XMUXVBF2.cjs","sourcesContent":[null,"export function isLocalHost(\n hostname: string = globalThis?.location?.hostname ?? '',\n): boolean {\n return (\n ['::ffff:127.0.0.1', 'localhost', '127.0.0.1', '', '::1', '::'].includes(\n hostname,\n )\n || hostname.startsWith('192.168.')\n || hostname.startsWith('10.0.')\n || hostname.endsWith('.local')\n )\n}\n"]}
|