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
package/AGENTS.md
CHANGED
|
@@ -1,25 +1,232 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
2
|
|
|
3
|
-
##
|
|
3
|
+
## Project Overview
|
|
4
4
|
|
|
5
|
-
-
|
|
6
|
-
- Run `pnpm build` to build the library (runs `tsup` with ESM/CJS, minification, and type generation).
|
|
7
|
-
- Check `package.json` for available scripts.
|
|
8
|
-
- Read JSDoc comments in source files (`src/**/*.ts`) for inline API documentation and usage examples.
|
|
9
|
-
- Run and examine test specs (`src/**/*.spec.ts`) to understand functionality, expected behavior, and integration patterns.
|
|
10
|
-
- Check `README.md` for project overview, architecture, and usage patterns.
|
|
11
|
-
- See `docs/` folder for generated API documentation (run `pnpm build:docs` to update).
|
|
5
|
+
Zeed is a zero-dependency TypeScript utility library designed for universal JavaScript (browsers, Node.js, Deno, and Bun). It provides core utilities for logging, messaging, schema validation, event handling, async operations, and more.
|
|
12
6
|
|
|
13
|
-
|
|
7
|
+
**Key characteristics:**
|
|
8
|
+
- Zero runtime dependencies (all integrations are vendored or optional)
|
|
9
|
+
- Strict TypeScript with full type inference
|
|
10
|
+
- Tree-shakable ESM with CommonJS fallback
|
|
11
|
+
- Platform-specific code split between `src/browser/`, `src/node/`, and `src/common/`
|
|
14
12
|
|
|
15
|
-
|
|
16
|
-
- Run `pnpm coverage` to check test coverage (aim for 100%).
|
|
17
|
-
- Run `pnpm lint` to check linting with ESLint.
|
|
18
|
-
- Run `pnpm lint:fix` to auto-fix linting issues.
|
|
19
|
-
- Fix any test or type errors until the whole suite is green.
|
|
20
|
-
- Add or update tests for the code you change, even if nobody asked.
|
|
13
|
+
## Commands
|
|
21
14
|
|
|
22
|
-
|
|
15
|
+
### Building and Development
|
|
16
|
+
```bash
|
|
17
|
+
# Build the library (ESM + CJS with minification and types)
|
|
18
|
+
pnpm build
|
|
23
19
|
|
|
24
|
-
|
|
25
|
-
|
|
20
|
+
# Type checking without compilation
|
|
21
|
+
pnpm check
|
|
22
|
+
|
|
23
|
+
# Watch mode for development
|
|
24
|
+
pnpm watch
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### Testing
|
|
28
|
+
```bash
|
|
29
|
+
# Run all tests (Node.js + common)
|
|
30
|
+
pnpm test
|
|
31
|
+
|
|
32
|
+
# Run tests with coverage report
|
|
33
|
+
pnpm coverage
|
|
34
|
+
|
|
35
|
+
# Run specific test file
|
|
36
|
+
pnpm test <filename>.spec.ts
|
|
37
|
+
|
|
38
|
+
# Run browser tests in different browsers
|
|
39
|
+
pnpm test:browser # Chromium with preview
|
|
40
|
+
pnpm test:chromium # Chromium via playwright
|
|
41
|
+
pnpm test:firefox # Firefox via playwright
|
|
42
|
+
pnpm test:webkit # WebKit via playwright
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Linting
|
|
46
|
+
```bash
|
|
47
|
+
# Check for linting issues
|
|
48
|
+
pnpm lint
|
|
49
|
+
|
|
50
|
+
# Auto-fix linting issues
|
|
51
|
+
pnpm lint:fix
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
### Documentation
|
|
55
|
+
```bash
|
|
56
|
+
# Generate API documentation (published to https://zeed.holtwick.de/)
|
|
57
|
+
pnpm build:docs
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
## Architecture
|
|
61
|
+
|
|
62
|
+
### Module Structure
|
|
63
|
+
|
|
64
|
+
The codebase is organized into three main areas:
|
|
65
|
+
|
|
66
|
+
1. **`src/common/`** - Platform-agnostic utilities
|
|
67
|
+
- Core functionality that works everywhere (browser, Node.js, Deno, Bun)
|
|
68
|
+
- Includes: schema validation, messaging, data utilities, logging foundation, etc.
|
|
69
|
+
|
|
70
|
+
2. **`src/browser/`** - Browser-specific utilities
|
|
71
|
+
- DOM interactions, LocalStorage, browser-specific logging handlers
|
|
72
|
+
- Example: `log-browser-factory.ts` provides colorful console output for browsers
|
|
73
|
+
|
|
74
|
+
3. **`src/node/`** - Node.js/Deno/Bun-specific utilities
|
|
75
|
+
- File system operations, process env handling, Node-specific features
|
|
76
|
+
- Example: `env.ts` for environment variable management
|
|
77
|
+
|
|
78
|
+
### Entry Points
|
|
79
|
+
|
|
80
|
+
The library uses conditional exports for platform-specific builds:
|
|
81
|
+
|
|
82
|
+
- **`src/index.all.ts`** - Full universal export (browser + node + common)
|
|
83
|
+
- **`src/index.browser.ts`** - Browser-only build (re-exports browser + common)
|
|
84
|
+
- **`src/index.node.ts`** - Node-only build (re-exports node + common)
|
|
85
|
+
- **`src/index.jsr.ts`** - JSR registry specific export
|
|
86
|
+
|
|
87
|
+
The `package.json` exports field automatically selects the right build:
|
|
88
|
+
```json
|
|
89
|
+
{
|
|
90
|
+
"exports": {
|
|
91
|
+
".": {
|
|
92
|
+
"types": "./dist/index.all.d.ts",
|
|
93
|
+
"node": "./dist/index.node.js",
|
|
94
|
+
"default": "./dist/index.browser.js"
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Key Subsystems
|
|
101
|
+
|
|
102
|
+
#### Messaging (`src/common/msg/`)
|
|
103
|
+
|
|
104
|
+
A layered messaging architecture for cross-context communication. See `src/common/msg/README.md` for full details.
|
|
105
|
+
|
|
106
|
+
- **Emitter** - Type-safe, async event emitter for in-app communication
|
|
107
|
+
- **Channel** - Uniform `postMessage` abstraction for data transport (WebSocket, WebRTC, WebWorker, etc.)
|
|
108
|
+
- **PubSub** - Event-like messages over a Channel with type safety
|
|
109
|
+
- **Messages** - RPC-like interface with Promise-based responses, timeouts, and retries
|
|
110
|
+
- **Encoder** - Transform data for transport (JSON, encryption, etc.)
|
|
111
|
+
|
|
112
|
+
Example:
|
|
113
|
+
```typescript
|
|
114
|
+
interface MyMessages {
|
|
115
|
+
echo: (data: any) => Promise<any>
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
const hub = useMessageHub({ channel }).send<MyMessages>()
|
|
119
|
+
await hub.echo({ hello: 'world' })
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
#### Schema Validation (`src/common/schema/`)
|
|
123
|
+
|
|
124
|
+
Type-safe runtime validation with [Standard Schema](https://github.com/standard-schema/standard-schema) compatibility. Works with tRPC, TanStack Form/Router, Hono, and 40+ other libraries.
|
|
125
|
+
|
|
126
|
+
- Import via `z` namespace: `import { z } from 'zeed'`
|
|
127
|
+
- All schemas support `.parse()`, `.optional()`, `.default()`, type inference
|
|
128
|
+
- Standard Schema interface available via `schema['~standard']`
|
|
129
|
+
- Supports serialization/deserialization for network transport
|
|
130
|
+
|
|
131
|
+
Example:
|
|
132
|
+
```typescript
|
|
133
|
+
const userSchema = z.object({
|
|
134
|
+
name: z.string(),
|
|
135
|
+
email: z.string(),
|
|
136
|
+
role: z.stringLiterals(['admin', 'user']),
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
type User = z.infer<typeof userSchema>
|
|
140
|
+
const user = userSchema.parse(data)
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
#### Logging (`src/common/log/`, `src/browser/log/`, `src/node/log/`)
|
|
144
|
+
|
|
145
|
+
Universal logging system with platform-specific handlers:
|
|
146
|
+
|
|
147
|
+
- **Configuration**: `ZEED=*` or `DEBUG=*` to enable logs (ZEED supersedes DEBUG)
|
|
148
|
+
- **Level filtering**: `ZEED_LEVEL=info` to hide debug logs
|
|
149
|
+
- **Log to file**: `ZEED_LOG=/path/to/file.log`
|
|
150
|
+
- **Handlers**: `LoggerConsoleHandler`, `LoggerBrowserHandler`, `LoggerNodeHandler`, `LoggerFileHandler`
|
|
151
|
+
|
|
152
|
+
Usage:
|
|
153
|
+
```typescript
|
|
154
|
+
import { Logger } from 'zeed'
|
|
155
|
+
|
|
156
|
+
const log = Logger('my-module')
|
|
157
|
+
log('message')
|
|
158
|
+
log.info('info')
|
|
159
|
+
log.warn('warning')
|
|
160
|
+
log.error('error')
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
#### Data Utilities (`src/common/data/`)
|
|
164
|
+
|
|
165
|
+
Extensive collection of data manipulation utilities:
|
|
166
|
+
- **Array operations**: `arrayUnique`, `arrayShuffle`, `arrayGroupBy`
|
|
167
|
+
- **String utilities**: `camelCase`, `snakeCase`, `slugify`
|
|
168
|
+
- **Binary encoding**: `useBase(62)` for Base62 encoding/decoding
|
|
169
|
+
- **Object operations**: `deepEqual`, `deepMerge`, `objectFilter`, `objectPluck`
|
|
170
|
+
- **CRDT sorting**: `sortedItems` for conflict-free replicated data
|
|
171
|
+
|
|
172
|
+
## Development Conventions
|
|
173
|
+
|
|
174
|
+
### Code Style
|
|
175
|
+
|
|
176
|
+
- **Indentation**: Always use 2 spaces (not tabs)
|
|
177
|
+
- **TypeScript**: Strict mode enabled, use explicit types where inference isn't clear
|
|
178
|
+
- **Imports**: Use relative imports within the same major module, exported symbols for cross-module
|
|
179
|
+
|
|
180
|
+
### Testing
|
|
181
|
+
|
|
182
|
+
- All test files must end with `.spec.ts`
|
|
183
|
+
- Tests live side-by-side with the code they test (e.g., `array.ts` → `array.spec.ts`)
|
|
184
|
+
- Use Vitest with globals enabled (`describe`, `it`, `expect` available globally)
|
|
185
|
+
- Aim for 100% test coverage for new utilities
|
|
186
|
+
- Browser tests require explicit environment: `pnpm test:browser`
|
|
187
|
+
|
|
188
|
+
### File Organization
|
|
189
|
+
|
|
190
|
+
- Platform-specific code goes in `src/browser/` or `src/node/`
|
|
191
|
+
- Shared code goes in `src/common/`
|
|
192
|
+
- Each module exports through an `index.ts` barrel file
|
|
193
|
+
- Ignore `_archive/`, `dist/`, `docs/`, and `demos/` folders
|
|
194
|
+
|
|
195
|
+
### Type System Patterns
|
|
196
|
+
|
|
197
|
+
**Use the `Type` class for runtime validation:**
|
|
198
|
+
```typescript
|
|
199
|
+
// Define schema
|
|
200
|
+
const schema = z.object({ name: z.string() })
|
|
201
|
+
|
|
202
|
+
// Infer TypeScript type
|
|
203
|
+
type Schema = z.infer<typeof schema>
|
|
204
|
+
|
|
205
|
+
// Parse/validate at runtime
|
|
206
|
+
const data = schema.parse(input)
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
**Event emitters should use typed interfaces:**
|
|
210
|
+
```typescript
|
|
211
|
+
interface MyEvents {
|
|
212
|
+
inc: (count: number) => number
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
const e = new Emitter<MyEvents>()
|
|
216
|
+
e.on('inc', async count => count + 1)
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
## Build System
|
|
220
|
+
|
|
221
|
+
- **Bundler**: tsup (esbuild-based)
|
|
222
|
+
- **Output**: ESM + CJS in `dist/` with TypeScript declarations
|
|
223
|
+
- **Target**: ES2022
|
|
224
|
+
- **Features**: Tree-shaking, minification, source maps, code splitting
|
|
225
|
+
|
|
226
|
+
The build creates multiple entry points but maintains a single type definition file (`dist/index.all.d.ts`) for simplicity.
|
|
227
|
+
|
|
228
|
+
## Package Management
|
|
229
|
+
|
|
230
|
+
- Uses `pnpm` (v10.18.0+)
|
|
231
|
+
- Node.js >= 20 required
|
|
232
|
+
- The `nr` alias in scripts refers to `ni run` from `@antfu/ni` package
|
package/README.md
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/zeed/zeed/dist/_experiments/bitcask.cjs","../../src/_experiments/bitcask.ts"],"names":["ENTRY_HEADER_SIZE","Bitcask","__name","dirname","opts","f","fname","fileId","filePath","fd","offset","header","keySize","valueSize","tombstone","timestamp","key","entrySize","fileIds","nextId"],"mappings":"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","file":"/home/runner/work/zeed/zeed/dist/_experiments/bitcask.cjs","sourcesContent":[null,"// Bitcask-inspired key-value store (minimal, single-process, single-writer)\n// Copyright 2024\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { FileHandle, open as openFile } from 'fs/promises'\n\nconst ENTRY_HEADER_SIZE = 17 // 4 (key) + 4 (value) + 1 (tombstone) + 8 (timestamp)\n\ninterface KeyDirEntry {\n fileId: number\n offset: number\n size: number\n timestamp: bigint\n tombstone: boolean\n}\n\nexport class Bitcask {\n private dirname: string\n private readWrite: boolean\n private syncOnPut: boolean\n private keydir: Map<string, KeyDirEntry> = new Map();\n private activeFile: fs.WriteStream | null = null;\n private activeFileId: number = 0;\n private activeOffset: number = 0;\n private openFiles: Map<number, FileHandle> = new Map();\n\n constructor(dirname: string, opts: { readWrite?: boolean; syncOnPut?: boolean } = {}) {\n this.dirname = dirname\n this.readWrite = opts.readWrite !== false\n this.syncOnPut = opts.syncOnPut === true\n if (!fs.existsSync(dirname)) fs.mkdirSync(dirname, { recursive: true })\n this.loadFiles()\n if (this.readWrite) this.rollover()\n }\n\n private listDataFiles(): string[] {\n return fs.readdirSync(this.dirname).filter(f => f.endsWith('.data')).sort()\n }\n\n private loadFiles() {\n for (const fname of this.listDataFiles()) {\n const fileId = parseInt(fname.split('.')[0], 10)\n const filePath = path.join(this.dirname, fname)\n const fd = fs.openSync(filePath, 'r')\n let offset = 0\n while (true) {\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n const bytesRead = fs.readSync(fd, header, 0, ENTRY_HEADER_SIZE, offset)\n if (bytesRead < ENTRY_HEADER_SIZE) break\n const keySize = header.readUInt32BE(0)\n const valueSize = header.readUInt32BE(4)\n const tombstone = header.readUInt8(8) === 1\n const timestamp = header.readBigUInt64BE(9)\n const key = Buffer.alloc(keySize)\n fs.readSync(fd, key, 0, keySize, offset + ENTRY_HEADER_SIZE)\n // skip value\n const entrySize = ENTRY_HEADER_SIZE + keySize + valueSize\n this.keydir.set(key.toString('binary'), {\n fileId,\n offset,\n size: entrySize,\n timestamp,\n tombstone,\n })\n offset += entrySize\n }\n fs.closeSync(fd)\n }\n }\n\n private rollover() {\n const fileIds = this.listDataFiles().map(f => parseInt(f.split('.')[0], 10))\n const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1\n const fname = `${nextId.toString().padStart(8, '0')}.data`\n const filePath = path.join(this.dirname, fname)\n this.activeFile = fs.createWriteStream(filePath, { flags: 'a' })\n this.activeFileId = nextId\n this.activeOffset = fs.existsSync(filePath) ? fs.statSync(filePath).size : 0\n }\n\n async put(key: string | Buffer, value: string | Buffer) {\n if (!this.readWrite) throw new Error('Read-only mode')\n const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key)\n const valueBuf = Buffer.isBuffer(value) ? value : Buffer.from(value)\n const timestamp = BigInt(Date.now())\n const tombstone = 0\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n header.writeUInt32BE(keyBuf.length, 0)\n header.writeUInt32BE(valueBuf.length, 4)\n header.writeUInt8(tombstone, 8)\n header.writeBigUInt64BE(timestamp, 9)\n const entry = Buffer.concat([header, keyBuf, valueBuf])\n const offset = this.activeOffset\n await new Promise<void>((resolve, reject) => {\n this.activeFile!.write(entry, err => (err ? reject(err) : resolve()))\n })\n if (this.syncOnPut && this.activeFile) {\n fs.fsyncSync((this.activeFile as any).fd)\n }\n this.keydir.set(keyBuf.toString('binary'), {\n fileId: this.activeFileId,\n offset,\n size: entry.length,\n timestamp,\n tombstone: false,\n })\n this.activeOffset += entry.length\n if (this.activeOffset > 32 * 1024 * 1024) {\n this.activeFile!.close()\n this.rollover()\n }\n }\n\n async get(key: string | Buffer): Promise<Buffer | null> {\n const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key)\n const meta = this.keydir.get(keyBuf.toString('binary'))\n if (!meta || meta.tombstone) return null\n let fh = this.openFiles.get(meta.fileId)\n if (!fh) {\n const fname = path.join(this.dirname, `${meta.fileId.toString().padStart(8, '0')}.data`)\n fh = await openFile(fname, 'r')\n this.openFiles.set(meta.fileId, fh)\n }\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n await fh.read(header, 0, ENTRY_HEADER_SIZE, meta.offset)\n const keySize = header.readUInt32BE(0)\n const valueSize = header.readUInt32BE(4)\n const keyRead = Buffer.alloc(keySize)\n await fh.read(keyRead, 0, keySize, meta.offset + ENTRY_HEADER_SIZE)\n const value = Buffer.alloc(valueSize)\n await fh.read(value, 0, valueSize, meta.offset + ENTRY_HEADER_SIZE + keySize)\n return value\n }\n\n async delete(key: string | Buffer) {\n if (!this.readWrite) throw new Error('Read-only mode')\n const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key)\n const timestamp = BigInt(Date.now())\n const tombstone = 1\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n header.writeUInt32BE(keyBuf.length, 0)\n header.writeUInt32BE(0, 4)\n header.writeUInt8(tombstone, 8)\n header.writeBigUInt64BE(timestamp, 9)\n const entry = Buffer.concat([header, keyBuf])\n const offset = this.activeOffset\n await new Promise<void>((resolve, reject) => {\n this.activeFile!.write(entry, err => (err ? reject(err) : resolve()))\n })\n if (this.syncOnPut && this.activeFile) {\n fs.fsyncSync((this.activeFile as any).fd)\n }\n this.keydir.set(keyBuf.toString('binary'), {\n fileId: this.activeFileId,\n offset,\n size: entry.length,\n timestamp,\n tombstone: true,\n })\n this.activeOffset += entry.length\n if (this.activeOffset > 32 * 1024 * 1024) {\n this.activeFile!.close()\n this.rollover()\n }\n }\n\n listKeys(): string[] {\n return Array.from(this.keydir.entries()).filter(([_, v]) => !v.tombstone).map(([k, _]) => k)\n }\n\n async fold<T>(fn: (k: string, v: Buffer, acc: T) => T, acc0: T): Promise<T> {\n for (const [k, meta] of this.keydir.entries()) {\n if (!meta.tombstone) {\n const v = await this.get(k)\n acc0 = fn(k, v!, acc0)\n }\n }\n return acc0\n }\n\n async merge() {\n // Compact all but active file\n const live: Map<string, KeyDirEntry> = new Map()\n for (const [k, meta] of this.keydir.entries()) {\n if (!meta.tombstone) live.set(k, meta)\n }\n const fileIds = this.listDataFiles().map(f => parseInt(f.split('.')[0], 10))\n const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1\n const fname = `${nextId.toString().padStart(8, '0')}.data`\n const filePath = path.join(this.dirname, fname)\n const f = fs.createWriteStream(filePath, { flags: 'a' })\n for (const [k, meta] of live.entries()) {\n const v = await this.get(k)\n const keyBuf = Buffer.from(k, 'binary')\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n header.writeUInt32BE(keyBuf.length, 0)\n header.writeUInt32BE(v!.length, 4)\n header.writeUInt8(0, 8)\n header.writeBigUInt64BE(meta.timestamp, 9)\n const entry = Buffer.concat([header, keyBuf, v!])\n await new Promise<void>((resolve, reject) => {\n f.write(entry, err => (err ? reject(err) : resolve()))\n })\n }\n f.close()\n for (const fid of fileIds) {\n if (fid !== this.activeFileId && fid !== nextId) {\n try {\n fs.unlinkSync(path.join(this.dirname, `${fid.toString().padStart(8, '0')}.data`))\n } catch { }\n }\n }\n this.loadFiles()\n }\n\n sync() {\n if (this.activeFile) fs.fsyncSync((this.activeFile as any).fd)\n }\n\n async close() {\n if (this.activeFile) this.activeFile.end()\n for (const fh of this.openFiles.values()) await fh.close()\n this.openFiles.clear()\n }\n}\n\n// API functions\nexport function open(dirname: string, opts?: { readWrite?: boolean; syncOnPut?: boolean }) {\n return new Bitcask(dirname, opts)\n}\nexport async function get(handle: Bitcask, key: string | Buffer) {\n const v = await handle.get(key)\n return v === null ? 'not found' : v\n}\nexport async function put(handle: Bitcask, key: string | Buffer, value: string | Buffer) {\n await handle.put(key, value)\n return 'ok'\n}\nexport async function del(handle: Bitcask, key: string | Buffer) {\n await handle.delete(key)\n return 'ok'\n}\nexport function listKeys(handle: Bitcask) {\n return handle.listKeys()\n}\nexport async function fold<T>(handle: Bitcask, fn: (k: string, v: Buffer, acc: T) => T, acc0: T) {\n return await handle.fold(fn, acc0)\n}\nexport async function merge(dirname: string) {\n const h = new Bitcask(dirname, { readWrite: true })\n await h.merge()\n h.close()\n return 'ok'\n}\nexport function sync(handle: Bitcask) {\n handle.sync()\n return 'ok'\n}\nexport async function close(handle: Bitcask) {\n await handle.close()\n return 'ok'\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/_experiments/bitcask.cjs","../../src/_experiments/bitcask.ts"],"names":["ENTRY_HEADER_SIZE","Bitcask","__name","dirname","opts","f","fname","fileId","filePath","fd","offset","header","keySize","valueSize","tombstone","timestamp","key","entrySize","fileIds","nextId"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/_experiments/bitcask.cjs","sourcesContent":[null,"// Bitcask-inspired key-value store (minimal, single-process, single-writer)\n// Copyright 2024\nimport * as fs from 'fs'\nimport * as path from 'path'\nimport { FileHandle, open as openFile } from 'fs/promises'\n\nconst ENTRY_HEADER_SIZE = 17 // 4 (key) + 4 (value) + 1 (tombstone) + 8 (timestamp)\n\ninterface KeyDirEntry {\n fileId: number\n offset: number\n size: number\n timestamp: bigint\n tombstone: boolean\n}\n\nexport class Bitcask {\n private dirname: string\n private readWrite: boolean\n private syncOnPut: boolean\n private keydir: Map<string, KeyDirEntry> = new Map();\n private activeFile: fs.WriteStream | null = null;\n private activeFileId: number = 0;\n private activeOffset: number = 0;\n private openFiles: Map<number, FileHandle> = new Map();\n\n constructor(dirname: string, opts: { readWrite?: boolean; syncOnPut?: boolean } = {}) {\n this.dirname = dirname\n this.readWrite = opts.readWrite !== false\n this.syncOnPut = opts.syncOnPut === true\n if (!fs.existsSync(dirname)) fs.mkdirSync(dirname, { recursive: true })\n this.loadFiles()\n if (this.readWrite) this.rollover()\n }\n\n private listDataFiles(): string[] {\n return fs.readdirSync(this.dirname).filter(f => f.endsWith('.data')).sort()\n }\n\n private loadFiles() {\n for (const fname of this.listDataFiles()) {\n const fileId = parseInt(fname.split('.')[0], 10)\n const filePath = path.join(this.dirname, fname)\n const fd = fs.openSync(filePath, 'r')\n let offset = 0\n while (true) {\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n const bytesRead = fs.readSync(fd, header, 0, ENTRY_HEADER_SIZE, offset)\n if (bytesRead < ENTRY_HEADER_SIZE) break\n const keySize = header.readUInt32BE(0)\n const valueSize = header.readUInt32BE(4)\n const tombstone = header.readUInt8(8) === 1\n const timestamp = header.readBigUInt64BE(9)\n const key = Buffer.alloc(keySize)\n fs.readSync(fd, key, 0, keySize, offset + ENTRY_HEADER_SIZE)\n // skip value\n const entrySize = ENTRY_HEADER_SIZE + keySize + valueSize\n this.keydir.set(key.toString('binary'), {\n fileId,\n offset,\n size: entrySize,\n timestamp,\n tombstone,\n })\n offset += entrySize\n }\n fs.closeSync(fd)\n }\n }\n\n private rollover() {\n const fileIds = this.listDataFiles().map(f => parseInt(f.split('.')[0], 10))\n const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1\n const fname = `${nextId.toString().padStart(8, '0')}.data`\n const filePath = path.join(this.dirname, fname)\n this.activeFile = fs.createWriteStream(filePath, { flags: 'a' })\n this.activeFileId = nextId\n this.activeOffset = fs.existsSync(filePath) ? fs.statSync(filePath).size : 0\n }\n\n async put(key: string | Buffer, value: string | Buffer) {\n if (!this.readWrite) throw new Error('Read-only mode')\n const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key)\n const valueBuf = Buffer.isBuffer(value) ? value : Buffer.from(value)\n const timestamp = BigInt(Date.now())\n const tombstone = 0\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n header.writeUInt32BE(keyBuf.length, 0)\n header.writeUInt32BE(valueBuf.length, 4)\n header.writeUInt8(tombstone, 8)\n header.writeBigUInt64BE(timestamp, 9)\n const entry = Buffer.concat([header, keyBuf, valueBuf])\n const offset = this.activeOffset\n await new Promise<void>((resolve, reject) => {\n this.activeFile!.write(entry, err => (err ? reject(err) : resolve()))\n })\n if (this.syncOnPut && this.activeFile) {\n fs.fsyncSync((this.activeFile as any).fd)\n }\n this.keydir.set(keyBuf.toString('binary'), {\n fileId: this.activeFileId,\n offset,\n size: entry.length,\n timestamp,\n tombstone: false,\n })\n this.activeOffset += entry.length\n if (this.activeOffset > 32 * 1024 * 1024) {\n this.activeFile!.close()\n this.rollover()\n }\n }\n\n async get(key: string | Buffer): Promise<Buffer | null> {\n const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key)\n const meta = this.keydir.get(keyBuf.toString('binary'))\n if (!meta || meta.tombstone) return null\n let fh = this.openFiles.get(meta.fileId)\n if (!fh) {\n const fname = path.join(this.dirname, `${meta.fileId.toString().padStart(8, '0')}.data`)\n fh = await openFile(fname, 'r')\n this.openFiles.set(meta.fileId, fh)\n }\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n await fh.read(header, 0, ENTRY_HEADER_SIZE, meta.offset)\n const keySize = header.readUInt32BE(0)\n const valueSize = header.readUInt32BE(4)\n const keyRead = Buffer.alloc(keySize)\n await fh.read(keyRead, 0, keySize, meta.offset + ENTRY_HEADER_SIZE)\n const value = Buffer.alloc(valueSize)\n await fh.read(value, 0, valueSize, meta.offset + ENTRY_HEADER_SIZE + keySize)\n return value\n }\n\n async delete(key: string | Buffer) {\n if (!this.readWrite) throw new Error('Read-only mode')\n const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key)\n const timestamp = BigInt(Date.now())\n const tombstone = 1\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n header.writeUInt32BE(keyBuf.length, 0)\n header.writeUInt32BE(0, 4)\n header.writeUInt8(tombstone, 8)\n header.writeBigUInt64BE(timestamp, 9)\n const entry = Buffer.concat([header, keyBuf])\n const offset = this.activeOffset\n await new Promise<void>((resolve, reject) => {\n this.activeFile!.write(entry, err => (err ? reject(err) : resolve()))\n })\n if (this.syncOnPut && this.activeFile) {\n fs.fsyncSync((this.activeFile as any).fd)\n }\n this.keydir.set(keyBuf.toString('binary'), {\n fileId: this.activeFileId,\n offset,\n size: entry.length,\n timestamp,\n tombstone: true,\n })\n this.activeOffset += entry.length\n if (this.activeOffset > 32 * 1024 * 1024) {\n this.activeFile!.close()\n this.rollover()\n }\n }\n\n listKeys(): string[] {\n return Array.from(this.keydir.entries()).filter(([_, v]) => !v.tombstone).map(([k, _]) => k)\n }\n\n async fold<T>(fn: (k: string, v: Buffer, acc: T) => T, acc0: T): Promise<T> {\n for (const [k, meta] of this.keydir.entries()) {\n if (!meta.tombstone) {\n const v = await this.get(k)\n acc0 = fn(k, v!, acc0)\n }\n }\n return acc0\n }\n\n async merge() {\n // Compact all but active file\n const live: Map<string, KeyDirEntry> = new Map()\n for (const [k, meta] of this.keydir.entries()) {\n if (!meta.tombstone) live.set(k, meta)\n }\n const fileIds = this.listDataFiles().map(f => parseInt(f.split('.')[0], 10))\n const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1\n const fname = `${nextId.toString().padStart(8, '0')}.data`\n const filePath = path.join(this.dirname, fname)\n const f = fs.createWriteStream(filePath, { flags: 'a' })\n for (const [k, meta] of live.entries()) {\n const v = await this.get(k)\n const keyBuf = Buffer.from(k, 'binary')\n const header = Buffer.alloc(ENTRY_HEADER_SIZE)\n header.writeUInt32BE(keyBuf.length, 0)\n header.writeUInt32BE(v!.length, 4)\n header.writeUInt8(0, 8)\n header.writeBigUInt64BE(meta.timestamp, 9)\n const entry = Buffer.concat([header, keyBuf, v!])\n await new Promise<void>((resolve, reject) => {\n f.write(entry, err => (err ? reject(err) : resolve()))\n })\n }\n f.close()\n for (const fid of fileIds) {\n if (fid !== this.activeFileId && fid !== nextId) {\n try {\n fs.unlinkSync(path.join(this.dirname, `${fid.toString().padStart(8, '0')}.data`))\n } catch { }\n }\n }\n this.loadFiles()\n }\n\n sync() {\n if (this.activeFile) fs.fsyncSync((this.activeFile as any).fd)\n }\n\n async close() {\n if (this.activeFile) this.activeFile.end()\n for (const fh of this.openFiles.values()) await fh.close()\n this.openFiles.clear()\n }\n}\n\n// API functions\nexport function open(dirname: string, opts?: { readWrite?: boolean; syncOnPut?: boolean }) {\n return new Bitcask(dirname, opts)\n}\nexport async function get(handle: Bitcask, key: string | Buffer) {\n const v = await handle.get(key)\n return v === null ? 'not found' : v\n}\nexport async function put(handle: Bitcask, key: string | Buffer, value: string | Buffer) {\n await handle.put(key, value)\n return 'ok'\n}\nexport async function del(handle: Bitcask, key: string | Buffer) {\n await handle.delete(key)\n return 'ok'\n}\nexport function listKeys(handle: Bitcask) {\n return handle.listKeys()\n}\nexport async function fold<T>(handle: Bitcask, fn: (k: string, v: Buffer, acc: T) => T, acc0: T) {\n return await handle.fold(fn, acc0)\n}\nexport async function merge(dirname: string) {\n const h = new Bitcask(dirname, { readWrite: true })\n await h.merge()\n h.close()\n return 'ok'\n}\nexport function sync(handle: Bitcask) {\n handle.sync()\n return 'ok'\n}\nexport async function close(handle: Bitcask) {\n await handle.close()\n return 'ok'\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/base64.cjs"],"names":[],"mappings":"AAAA,kIAAoC,iCAA8B,oDAAmC","file":"/Users/dirk/work/github-zeed/dist/browser/base64.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/gravatar.cjs"],"names":[],"mappings":"AAAA,kIAAoC,iCAA8B,iDAAgC","file":"/Users/dirk/work/github-zeed/dist/browser/gravatar.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/index.cjs"],"names":[],"mappings":"AAAA,0GAA6B,iCAA8B,yDAA0C,iCAA8B,yDAA0C,yDAA0C,yDAA0C,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,iCAA8B,yDAAqC,yDAA0C,iCAA8B,yTAAsK","file":"/Users/dirk/work/github-zeed/dist/browser/index.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/localstorage.cjs"],"names":[],"mappings":"AAAA,kIAAoC,iCAA8B,iCAA8B,2CAA0B","file":"/Users/dirk/work/github-zeed/dist/browser/localstorage.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/log/index.cjs"],"names":[],"mappings":"AAAA,6GAAgC,4DAA6C,oCAAiC,4DAA6C,4DAAwC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,sKAAiG","file":"/Users/dirk/work/github-zeed/dist/browser/log/index.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/log/log-browser-factory.cjs"],"names":[],"mappings":"AAAA,qIAAuC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,6DAA4C","file":"/Users/dirk/work/github-zeed/dist/browser/log/log-browser-factory.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/log/log-browser.cjs"],"names":[],"mappings":"AAAA,qIAAuC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,mDAAkC","file":"/Users/dirk/work/github-zeed/dist/browser/log/log-browser.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/log/log-colors.cjs"],"names":[],"mappings":"AAAA,qIAAuC,oCAAiC,oDAAmC","file":"/Users/dirk/work/github-zeed/dist/browser/log/log-colors.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/browser/log/log-context-browser.cjs"],"names":[],"mappings":"AAAA,qIAAyC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,oCAAiC,qFAA0C","file":"/Users/dirk/work/github-zeed/dist/browser/log/log-context-browser.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-2TNLYCZH.cjs","../src/common/data/string-hash-pool.ts"],"names":["useStringHashPool","hashToString","stringToHash","hash","s","v","stringHashFNV1a"],"mappings":"AAAA,iIAAwC,wDAAyC,SCEjEA,CAAAA,CAAAA,CAAoB,CAClC,IAAMC,CAAAA,CAAoC,IAAI,GAAA,CACxCC,CAAAA,CAAoC,IAAI,GAAA,CAE9C,SAASC,CAAAA,CAAKC,CAAAA,CAAW,CACvB,IAAIC,CAAAA,CAAwBH,CAAAA,CAAa,GAAA,CAAIE,CAAC,CAAA,CAC9C,EAAA,CAAIC,CAAAA,EAAK,IAAA,CAAM,CAEb,EAAA,CADAA,CAAAA,CAAIC,iCAAAA,CAAiB,CAAA,CACjBL,CAAAA,CAAa,GAAA,CAAII,CAAC,CAAA,CACpB,MAAM,IAAI,KAAA,CAAM,CAAA,UAAA,EAAaD,CAAC,CAAA,yBAAA,EAA4BH,CAAAA,CAAa,GAAA,CAAII,CAAC,CAAC,CAAA,CAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-2TNLYCZH.cjs","sourcesContent":[null,"import { stringHashFNV1a } from './string-hash-fnv'\n\nexport function useStringHashPool() {\n const hashToString: Map<number, string> = new Map()\n const stringToHash: Map<string, number> = new Map()\n\n function hash(s: string) {\n let v: number | undefined = stringToHash.get(s)\n if (v == null) {\n v = stringHashFNV1a(s)\n if (hashToString.has(v))\n throw new Error(`Hash for '${s}' is already in use for '${hashToString.get(v)}`)\n hashToString.set(v, s)\n stringToHash.set(s, v)\n }\n return v\n }\n\n function stringForHash(v: number) {\n return hashToString.get(v)\n }\n\n return {\n hash,\n stringForHash,\n }\n}\n\nexport type UseStringHashPool = ReturnType<typeof useStringHashPool>\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-2UQU3IBA.cjs","../src/common/data/string-hash-fnv.ts"],"names":["stringHashFNV1a","str","l","c","t0","v0","t1","v1","__name"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-2UQU3IBA.cjs","sourcesContent":[null,"// Why FNV-1a (32-bit) https://softwareengineering.stackexchange.com/a/250750/366573\n// A simple implementation https://gist.github.com/vaiorabbit/5657561\n// This implementation https://github.com/tjwebb/fnv-plus/blob/master/index.js#L341\n// Alternative implementation https://github.com/sindresorhus/fnv1a\n\nexport function stringHashFNV1a(str: string): number {\n const l = str.length\n let c: number\n let i: number\n let t0 = 0\n let v0 = 0x9DC5\n let t1 = 0\n let v1 = 0x811C\n\n for (i = 0; i < l; i++) {\n c = str.charCodeAt(i)\n if (c < 128) {\n v0 ^= c\n }\n else if (c < 2048) {\n v0 ^= (c >> 6) | 192\n t0 = v0 * 403\n t1 = v1 * 403\n t1 += v0 << 8\n v1 = (t1 + (t0 >>> 16)) & 65535\n v0 = t0 & 65535\n v0 ^= (c & 63) | 128\n }\n else if (((c & 64512) === 55296) && (i + 1) < l && ((str.charCodeAt(i + 1) & 64512) === 56320)) {\n c = 65536 + ((c & 1023) << 10) + (str.charCodeAt(++i) & 1023)\n v0 ^= (c >> 18) | 240\n t0 = v0 * 403\n t1 = v1 * 403\n t1 += v0 << 8\n v1 = (t1 + (t0 >>> 16)) & 65535\n v0 = t0 & 65535\n v0 ^= ((c >> 12) & 63) | 128\n t0 = v0 * 403\n t1 = v1 * 403\n t1 += v0 << 8\n v1 = (t1 + (t0 >>> 16)) & 65535\n v0 = t0 & 65535\n v0 ^= ((c >> 6) & 63) | 128\n t0 = v0 * 403\n t1 = v1 * 403\n t1 += v0 << 8\n v1 = (t1 + (t0 >>> 16)) & 65535\n v0 = t0 & 65535\n v0 ^= (c & 63) | 128\n }\n else {\n v0 ^= (c >> 12) | 224\n t0 = v0 * 403\n t1 = v1 * 403\n t1 += v0 << 8\n v1 = (t1 + (t0 >>> 16)) & 65535\n v0 = t0 & 65535\n v0 ^= ((c >> 6) & 63) | 128\n t0 = v0 * 403\n t1 = v1 * 403\n t1 += v0 << 8\n v1 = (t1 + (t0 >>> 16)) & 65535\n v0 = t0 & 65535\n v0 ^= (c & 63) | 128\n }\n t0 = v0 * 403\n t1 = v1 * 403\n t1 += v0 << 8\n v1 = (t1 + (t0 >>> 16)) & 65535\n v0 = t0 & 65535\n }\n\n return ((v1 << 16) >>> 0) + v0\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-32B4KRI6.cjs","../src/common/data/xrx.ts"],"names":["RX_WHITESPACE","RX_REAL_GROUPS","RX_LOOK_BEHIND","regExpString","rx","__name","regExpEscape","str","XRX","pattern","flags","_flags","_rx","r","index","name","parts"],"mappings":"AAAA,iPAAwC,ICElCA,CAAAA,CAAgB,sBAAA,CAChBC,CAAAA,CAAiB,yCAAA,CAEjBC,CAAAA,CAAiB,+CAAA,CAEhB,SAASC,CAAAA,CAAaC,CAAAA,CAA6B,CACxD,OAAO,OAAOA,CAAAA,EAAO,QAAA,CAAWA,CAAAA,CAAMA,CAAAA,CAAG,MAAA,EAAU,EACrD,CAFgBC,iCAAAA,CAAAF,CAAA,cAAA,CAAA,CAIT,SAASG,CAAAA,CAAaC,CAAAA,CAAqB,CAChD,OAAOA,CAAAA,CAAI,OAAA,CAAQ,0BAAA,CAA4B,MAAM,CACvD,CAFgBF,iCAAAA,CAAAC,CAAA,cAAA,CAAA,CAIT,IAAME,CAAAA,WAAN,KAAU,CAfjB,MAeiB,CAAAH,iCAAAA,IAAA,CAAA,KAAA,CAAA,CACf,eACA,WAAA,CAAsC,CAAC,EAAA,gBACvC,KAAA,CAAkB,CAAC,EAAA,WAGnB,CAAYI,CAAAA,CAA0BC,CAAAA,CAAgB,yEACpD,IAAIC,CAAAA,kBAAiBD,CAAAA,SAAS,IAAA,CAC1BE,CAAAA,CAuBJ,EAAA,CArBIH,EAAAA,WAAmB,MAAA,CAAA,CACjBC,CAAAA,EAAS,IAAA,EAAA,CACXC,CAAAA,CAASF,CAAAA,CAAQ,KAAA,CAAA,CAEnBG,CAAAA,CAAMH,CAAAA,CAAQ,MAAA,CAAA,CAGdG,CAAAA,CAAMH,CAAAA,CAISE,CAAAA,EAAUA,CAAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAA,CAE5CA,CAAAA,CAASA,CAAAA,CAAO,OAAA,CAAQ,GAAA,CAAK,EAAE,CAAA,CAC/BC,CAAAA,CAAMA,CAAAA,CAAI,OAAA,CAAQZ,CAAAA,CAAgBa,CAAAA,EAEzBA,CAAAA,CAAE,CAAC,CAAA,GAAM,IAAA,CAAOA,CAAAA,CAAI,EAC5B,CAAA,CAAA,CAIC,CAAA,CAAEJ,EAAAA,WAAmB,MAAA,CAAA,CAAS,CAChC,IAAIK,CAAAA,CAAQ,CAAA,CACZF,CAAAA,CAAMA,CAAAA,CAAI,OAAA,CAAQX,CAAAA,CAAgB,CAACM,CAAAA,CAAKQ,CAAAA,CAAAA,EAAAA,CAEtCD,CAAAA,EAAS,CAAA,CACLC,CAAAA,CAAAA,CAEAA,CAAAA,GAAS,OAAA,EACNA,CAAAA,GAAS,QAAA,EACT,CAAC,IAAA,CAAK,WAAA,CAAYA,CAAI,CAAA,EAAA,CAEzB,IAAA,CAAK,WAAA,CAAYA,CAAI,CAAA,CAAID,CAAAA,CAAAA,CAKpB,GAAA,CAAA,CAEFP,CAAAA,CACR,CAAA,CACD,IAAA,CAAK,KAAA,CAAQ,MAAA,CAAO,IAAA,CAAK,IAAA,CAAK,WAAW,CAC3C,CAIAK,CAAAA,CAAMT,CAAAA,CAAaS,CAAG,CAAA,CACtBV,CAAAA,CAAe,SAAA,CAAY,CAAA,CAC3B,IAAMc,CAAAA,CAAQd,CAAAA,CAAe,IAAA,CAAKU,CAAG,CAAA,CACjCI,CAAAA,EAAAA,CACF,IAAA,CAAK,UAAA,CAAa,CAChB,EAAA,CAAI,IAAI,MAAA,CAAO,CAAA,EAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-32B4KRI6.cjs","sourcesContent":[null,"/* eslint-disable no-cond-assign */\n\nconst RX_WHITESPACE = /\\\\\\s|\\s+|#[^\\n]*\\n?/g\nconst RX_REAL_GROUPS = /\\(\\?P?<(\\w{2,})>|\\((?!\\?([:!=]|<=|<!))/g\n// eslint-disable-next-line regexp/no-unused-capturing-group\nconst RX_LOOK_BEHIND = /^((?:\\(\\?[\\w$]+\\))?)\\(\\?<([=!])([\\s\\S]*?)\\)/gm\n\nexport function regExpString(rx: string | RegExp): string {\n return typeof rx === 'string' ? rx : (rx.source || '')\n}\n\nexport function regExpEscape(str: string): string {\n return str.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, '\\\\$&')\n}\n\nexport class XRX {\n lookBehind:any\n namedGroups: Record<string, number> = {}\n names: string[] = []\n rx: RegExp\n\n constructor(pattern: string | RegExp, flags?: string) {\n let _flags: string = flags ?? ''\n let _rx: string\n\n if (pattern instanceof RegExp) {\n if (flags == null)\n _flags = pattern.flags\n\n _rx = pattern.source\n }\n else {\n _rx = pattern\n }\n\n // eXtended / Ignore Whitespace\n const extended = _flags && _flags.includes('x')\n if (extended) {\n _flags = _flags.replace('x', '')\n _rx = _rx.replace(RX_WHITESPACE, (r) => {\n // log('rp', r)\n return r[0] === '\\\\' ? r : ''\n })\n }\n\n // Named Groups\n if (!(pattern instanceof RegExp)) {\n let index = 0\n _rx = _rx.replace(RX_REAL_GROUPS, (str, name) => {\n // log('>>>', name)\n index += 1\n if (name) {\n if (\n name !== 'index'\n && name !== 'length'\n && !this.namedGroups[name]\n ) {\n this.namedGroups[name] = index\n }\n // else\n // log.error(`Unallowed or duplicate group name: ${name}`)\n\n return '('\n }\n return str\n })\n this.names = Object.keys(this.namedGroups)\n }\n\n // http://www.rexegg.com/regex-best-trick.html\n\n _rx = regExpString(_rx)\n RX_LOOK_BEHIND.lastIndex = 0\n const parts = RX_LOOK_BEHIND.exec(_rx)\n if (parts) {\n this.lookBehind = {\n rx: new RegExp(`${parts[3]}$(?!\\\\s)`),\n expect: parts ? parts[2] === '=' : !parts,\n }\n _rx = _rx.substr(parts[0].length)\n }\n\n this.rx = new RegExp(_rx, _flags)\n }\n\n // flagsString() {\n // let hash = this.rx.toString() + '/'\n // if (this.rx.global) {\n // hash += 'g'\n // }\n // if (this.rx.multiline) {\n // hash += 'm'\n // }\n // if (this.rx.ignoreCase) {\n // hash += 'i'\n // }\n // if (this.rx.unicode) {\n // hash += 'u'\n // }\n // if (this.rx.sticky) {\n // hash += 'y'\n // }\n // }\n\n get lastIndex(): number {\n return this.rx.lastIndex\n }\n\n set lastIndex(index: number) {\n this.rx.lastIndex = index\n }\n\n _handleMatch(m: any) {\n if (this.lookBehind) {\n const leftContext = m.input.slice(0, m.index)\n if (this.lookBehind.expect !== this.lookBehind.rx.test(leftContext))\n return null\n }\n for (const name of this.names)\n m[name] = m[this.namedGroups[name]]\n\n return m\n }\n\n exec(str: string) {\n let m\n while ((m = this.rx.exec(str))) {\n if (this.rx.lastIndex === m.index)\n this.rx.lastIndex++\n m = this._handleMatch(m)\n if (m != null)\n return m\n }\n }\n\n execAll(str: string) {\n const matches = []\n let m\n this.rx.lastIndex = 0\n while ((m = this.exec(str)))\n matches.push(m)\n\n this.rx.lastIndex = 0\n // log('execAll:', matches)\n return matches\n }\n\n replace(str: string, replacement: string | ((m: string) => string)) {\n const fn = typeof replacement === 'function' ? replacement : () => replacement\n return str.replace(this.rx, (m) => {\n // m = this._handleMatch(m)\n return fn(m)\n })\n }\n}\n"]}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var
|
|
2
|
-
//# sourceMappingURL=chunk-
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }var _chunkXAU2ICXAcjs = require('./chunk-XAU2ICXA.cjs');var _chunkSHOLGUSOcjs = require('./chunk-SHOLGUSO.cjs');var _chunk3ZBLU4D6cjs = require('./chunk-3ZBLU4D6.cjs');var _chunkIA2OMOCBcjs = require('./chunk-IA2OMOCB.cjs');var _chunkGFMSFYKEcjs = require('./chunk-GFMSFYKE.cjs');var _chunk3P4XRJ23cjs = require('./chunk-3P4XRJ23.cjs');var _chunkVX3R7DUJcjs = require('./chunk-VX3R7DUJ.cjs');var _chunkP7XCQ7WVcjs = require('./chunk-P7XCQ7WV.cjs');var _process = require('process'); var _process2 = _interopRequireDefault(_process);function T(e,r){return _chunkVX3R7DUJcjs.a.call(void 0, t=>{let i=[_chunk3ZBLU4D6cjs.d.call(void 0, {padding:32,nameBrackets:!1})],m=_nullishCoalesce(_process2.default.env.ZEED_LOG, () => (_process2.default.env.LOG)),c=_chunk3P4XRJ23cjs.f.call(void 0, _process2.default.env.ZEED_TIME,!0),E=_chunk3P4XRJ23cjs.f.call(void 0, _process2.default.env.ZEED_PRETTY,!1),v=_chunkSHOLGUSOcjs.a.call(void 0, _process2.default.env.ZEED_ROTATE);m&&i.unshift(_chunkXAU2ICXAcjs.a.call(void 0, _chunkIA2OMOCBcjs.e.call(void 0, m),{time:c,pretty:E,rotation:v})),t.setHandlers(i)})(e,r)}_chunkP7XCQ7WVcjs.a.call(void 0, T,"Logger");function F(e,r,t){return _chunkGFMSFYKEcjs.a.call(void 0, T,e,r,t)}_chunkP7XCQ7WVcjs.a.call(void 0, F,"LoggerFromConfig");exports.a = T; exports.b = F;
|
|
2
|
+
//# sourceMappingURL=chunk-344WNUEK.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-344WNUEK.cjs","../src/node/log/log-context-node.ts"],"names":["Logger","name","level","getGlobalLogger","context","handlers","LoggerNodeHandler","logFilePath","process","time","valueToBoolean","pretty","rotation","parseLogRotationConfigEnv","LoggerFileHandler","toPath","__name","LoggerFromConfig","config","_LoggerFromConfig"],"mappings":"AAAA,qUAAwC,wDAAyC,wDAAyC,wDAAyC,wDAAoC,wDAAyC,wDAAyC,wDAAyC,oFCE9S,SASJA,CAAAA,CAAOC,CAAAA,CAAeC,CAAAA,CAA4C,CAChF,OAAOC,iCAAAA,CAAiBC,EAAY,CAClC,IAAMC,CAAAA,CAAW,CACfC,iCAAAA,CACE,OAAA,CAAS,EAAA,CACT,YAAA,CAAc,CAAA,CAEhB,CAAC,CACH,CAAA,CAEMC,CAAAA,kBAAcC,iBAAAA,CAAQ,GAAA,CAAI,QAAA,SAAYA,iBAAAA,CAAQ,GAAA,CAAI,KAAA,CAClDC,CAAAA,CAAOC,iCAAAA,iBAAeF,CAAQ,GAAA,CAAI,SAAA,CAAW,CAAA,CAAI,CAAA,CACjDG,CAAAA,CAASD,iCAAAA,iBAAeF,CAAQ,GAAA,CAAI,WAAA,CAAa,CAAA,CAAK,CAAA,CACtDI,CAAAA,CAAWC,iCAAAA,iBAA0BL,CAAQ,GAAA,CAAI,WAAW,CAAA,CAC9DD,CAAAA,EACFF,CAAAA,CAAS,OAAA,CAAQS,iCAAAA,iCAAkBC,CAAkB,CAAA,CAAG,CAAE,IAAA,CAAAN,CAAAA,CAAM,MAAA,CAAAE,CAAAA,CAAQ,QAAA,CAAAC,CAAS,CAAC,CAAC,CAAA,CAErFR,CAAAA,CAAQ,WAAA,CAAYC,CAAQ,CAC9B,CAAC,CAAA,CAAEJ,CAAAA,CAAMC,CAAK,CAChB,CAnBgBc,iCAAAA,CAAAhB,CAAA,QAAA,CAAA,CAsBT,SAASiB,CAAAA,CAAiBC,CAAAA,CAAmBjB,CAAAA,CAAcC,CAAAA,CAA4C,CAC5G,OAAOiB,iCAAAA,CAAkBnB,CAAQkB,CAAAA,CAAQjB,CAAAA,CAAMC,CAAK,CACtD,CAFgBc,iCAAAA,CAAAC,CAAA,kBAAA,CAAA,CAAA,6BAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-344WNUEK.cjs","sourcesContent":[null,"import type { LoggerInterface, LogLevelAliasType } from '../../common/log/log-base'\nimport type { LogConfig } from '../../common/log/log-config'\nimport process from 'node:process'\nimport { valueToBoolean } from '../../common/data/convert'\nimport { getGlobalLogger } from '../../common/log/log'\nimport { _LoggerFromConfig } from '../../common/log/log-config'\nimport { toPath } from '../env'\nimport { LoggerFileHandler } from './log-file'\nimport { parseLogRotationConfigEnv } from './log-file-rotation'\nimport { LoggerNodeHandler } from './log-node'\n\nexport function Logger(name?: string, level?: LogLevelAliasType): LoggerInterface {\n return getGlobalLogger((context) => {\n const handlers = [\n LoggerNodeHandler({\n padding: 32,\n nameBrackets: false,\n // levelHelper: false,\n }),\n ]\n\n const logFilePath = process.env.ZEED_LOG ?? process.env.LOG\n const time = valueToBoolean(process.env.ZEED_TIME, true)\n const pretty = valueToBoolean(process.env.ZEED_PRETTY, false)\n const rotation = parseLogRotationConfigEnv(process.env.ZEED_ROTATE)\n if (logFilePath)\n handlers.unshift(LoggerFileHandler(toPath(logFilePath), { time, pretty, rotation }))\n\n context.setHandlers(handlers)\n })(name, level)\n}\n\n/** See LogConfig */\nexport function LoggerFromConfig(config: LogConfig, name: string, level?: LogLevelAliasType): LoggerInterface {\n return _LoggerFromConfig(Logger, config, name, level)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-36N7ZI6A.cjs","../src/node/filestorage.ts"],"names":["FileStorage","__name","opt","resolve","process"],"mappings":"AAAA,iVAAwC,wDAAyC,wDAAyC,wDAAoC,gCCCvI,wBACiE,4BACvD,oFACb,IAcPA,CAAAA,WAAN,KAAwD,CAlB/D,MAkB+D,CAAAC,iCAAAA,IAAA,CAAA,aAAA,CAAA,gBACrD,KAAA,CAAkC,CAAC,EAAA,gBAEnC,QAAA,CAAsB,KAAA,EAAA,gBACtB,MAAA,CAAS,CAAA,EAAA,WAOjB,CAAYC,CAAAA,CAA0B,CAAC,CAAA,CAAG,6GACxC,IAAA,CAAK,OAAA,CAAUC,2BAAAA,iBAAQC,CAAQ,GAAA,CAAI,CAAA,kBAAGF,CAAAA,CAAI,IAAA,SAAQ,gBAAc,CAAA,CAChE,IAAA,CAAK,MAAA,CAAS,CAAC,CAACA,CAAAA,CAAI,MAAA,CACpB,IAAA,CAAK,SAAA,kBAAYA,CAAAA,CAAI,SAAA,SAAa,SAAA,CAE9BA,CAAAA,CAAI,SAAA,EAAa,CAAC,IAAA,CAAK,SAAA,CAAU,UAAA,CAAW,GAAG,CAAA,EAAA,CACjD,IAAA,CAAK,SAAA,CAAY,CAAA,CAAA,EAAI,IAAA,CAAK,SAAS,CAAA,CAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-36N7ZI6A.cjs","sourcesContent":[null,"import type { Json, ObjectStorage } from '../common/types'\nimport { Buffer } from 'node:buffer'\nimport { mkdirSync, readdirSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport process from 'node:process'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path ?? '.fileStorage')\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? '.json'\n\n if (opt.extension && !this.extension.startsWith('.'))\n this.extension = `.${this.extension}`\n\n this.extensionLength = this.extension.length\n\n this.objectToString = opt.objectToString ?? ((data: any): string => {\n return this.pretty\n ? jsonStringifySafe(data, null, 2)\n : jsonStringifySafe(data)\n })\n\n this.objectFromString = opt.objectFromString ?? ((data: string) => {\n try {\n return JSON.parse(data)\n }\n catch (err) {\n // log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, 'utf8')\n }\n catch (err) {\n // log.error('setItem error', err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): any {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n const value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null)\n return\n\n if (value != null)\n return cloneObject(value) // this.objectFromString(value)\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, 'utf8')\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n }\n catch (err) {\n // log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1)\n this.fileKeys.splice(index, 1)\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n }\n catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys\n = readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n item =>\n !item.isDirectory() && item.name.endsWith(this.extension),\n )\n .map(item => item.name.slice(0, -this.extensionLength)) || []\n }\n catch (err) {}\n }\n const keys = [...(this.fileKeys || [])]\n for (const key of Object.keys(this.store)) {\n if (!keys.includes(key))\n keys.push(key)\n }\n keys.sort()\n return keys\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-3P4XRJ23.cjs","../src/common/data/convert.ts"],"names":["TRUE_VALUES_LIST","FALSE_VALUES_LIST","parseFloat","value","parsed","__name","parseInt","radix","stringToBoolean","defaultValue","stringToInteger","stringToFloat","valueToBoolean","valueToBooleanNotFalse","valueToInteger","valueToFloat","valueToString","toFloat","toInt","toString","toBool","fixBrokenUtf8String","brokenString"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-3P4XRJ23.cjs","sourcesContent":[null,"\n// import { jsonStringify } from './json'\n\nconst TRUE_VALUES_LIST = ['1', 'true', 'yes', 'y', 'on']\nconst FALSE_VALUES_LIST = ['0', 'false', 'no', 'n', 'off']\n\n/** Like Number.parseFloat, but returning `undefined` instead of `NaN` */\nexport function parseFloat(value: any): number | undefined {\n try {\n const parsed = Number.parseFloat(value)\n return Number.isNaN(parsed) ? undefined : parsed\n } catch (e) {\n return undefined\n }\n}\n\n/** Like Number.parseInt, but returning `undefined` instead of `NaN` */\nexport function parseInt(value: any, radix = 10): number | undefined {\n try {\n const parsed = Number.parseInt(value, radix)\n return Number.isNaN(parsed) ? undefined : parsed\n } catch (e) {\n return undefined\n }\n}\n\n\nexport function stringToBoolean(value?: string, defaultValue = false): boolean {\n if (value == null || typeof value !== 'string')\n return defaultValue\n return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())\n}\n\nexport function stringToInteger(value?: string, defaultValue = 0): number {\n if (value == null || typeof value !== 'string')\n return defaultValue\n return parseInt(value.trim(), 10) ?? defaultValue\n}\n\nexport function stringToFloat(value?: string, defaultValue = 0.0): number {\n if (value == null || typeof value !== 'string')\n return defaultValue\n return parseFloat(value.trim()) ?? defaultValue\n}\n\n/** `true` is a number != 0, a string stating `true`. Otherwise false. */\nexport function valueToBoolean(value?: any, defaultValue = false): boolean {\n if (value == null)\n return defaultValue\n if (typeof value === 'boolean')\n return value\n if (typeof value === 'number')\n return value !== 0\n return TRUE_VALUES_LIST.includes(String(value).trim().toLowerCase())\n}\n\n/** Explicitly has to have a `false` value to become `false`, otherwise `true` */\nexport function valueToBooleanNotFalse(value?: any, defaultValue = true): boolean {\n if (value == null)\n return defaultValue\n if (typeof value === 'boolean')\n return value\n if (typeof value === 'number')\n return value !== 0\n return !(FALSE_VALUES_LIST.includes(String(value).trim().toLowerCase()))\n}\n\nexport function valueToInteger(value?: any, defaultValue = 0): number {\n if (value == null)\n return defaultValue\n if (typeof value === 'boolean')\n return value ? 1 : 0\n if (typeof value === 'number')\n return Math.floor(value)\n return parseInt(String(value).trim(), 10) ?? defaultValue\n}\n\nexport function valueToFloat(value?: any, defaultValue = 0.0): number {\n if (value == null)\n return defaultValue\n if (typeof value === 'boolean')\n return value ? 1 : 0\n if (typeof value === 'number')\n return Math.floor(value)\n return parseFloat(String(value).trim()) ?? defaultValue\n}\n\nexport function valueToString(value?: any, defaultValue = ''): string {\n if (value == null)\n return defaultValue\n // if (value == \"\") return defaultValue // ???\n return String(value) ?? defaultValue\n}\n\n// todo: toDate, toTimestamp, toData(value, base=64)\n\n// export function mapToObject<T>(map: Map<string, T>): { [key: string]: T } {\n// return Object.fromEntries(map)\n// }\n\n// export function objectToMap<T>(obj: { [key: string]: T }): Map<string, T> {\n// return new Map(Object.entries(obj))\n// }\n\n// Shortcuts\n\nexport const toFloat = valueToFloat\nexport const toInt = valueToInteger\nexport const toString = valueToString\nexport const toBool = valueToBoolean\n\n\n// Awesome trick from https://stackoverflow.com/a/5396742/140927\nexport function fixBrokenUtf8String(brokenString: string): string {\n try {\n return decodeURIComponent(escape(brokenString))\n }\n catch (e) {\n // log.debug(\"fixString failed for\", s)\n }\n return brokenString\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-3TNVJY4F.cjs"],"names":[],"mappings":"AAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-3TNVJY4F.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-3ZBLU4D6.cjs","../src/node/log/log-node.ts"],"names":["shouldUseColor","valueToBoolean","process","tty","__name","defaultUseColor","colors","nodeSelectColorByName","namespace","hash","i","namespaces","startTime","log","args"],"mappings":"AAAA,quBAAsD,wDAAyC,wDAAyC,wDAAgD,wDAAuD,wDAAgD,wDAAyC,oFCCpT,oEACJ,SAQPA,CAAAA,CAAAA,CAA0B,CACjC,GAAI,CACF,OAAOC,iCAAAA,iBAAeC,CAAQ,GAAA,CAAI,UAAA,CAAYC,aAAAA,CAAI,MAAA,CAAOD,iBAAAA,CAAQ,MAAA,CAAO,EAAE,CAAC,CAC7E,CAAA,UACY,CAAC,CACb,MAAO,CAAA,CACT,CANSE,iCAAAA,CAAAJ,CAAA,gBAAA,CAAA,CAQT,IAAIK,CAAAA,CAEEC,CAAAA,CAAS,CAAC,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAA,CAAG,CAAC,CAAA,CAEhC,SAASC,CAAAA,CAAsBC,CAAAA,CAAmB,CAChD,IAAIC,CAAAA,CAAO,CAAA,CACX,GAAA,CAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIF,CAAAA,CAAU,MAAA,CAAQE,CAAAA,EAAAA,CACpCD,CAAAA,CAAAA,CAAQA,CAAAA,EAAQ,CAAA,CAAA,CAAKA,CAAAA,CAAOD,CAAAA,CAAU,UAAA,CAAWE,CAAC,CAAA,CAClDD,CAAAA,EAAQ,CAAA,CAEV,OAAOH,CAAAA,CAAO,IAAA,CAAK,GAAA,CAAIG,CAAI,CAAA,CAAIH,CAAAA,CAAO,MAAM,CAC9C,CAPSF,iCAAAA,CAAAG,CAAA,uBAAA,CAAA,CAST,IAAMI,CAAAA,CAAkC,CAAC,CAAA,CAErCC,CAAAA,CAEJ,SAASC,CAAAA,CAAAA,GAAOC,CAAAA,CAAa,CAC3BZ,iBAAAA,CAAQ,MAAA,CAAO,KAAA,CAAM,CAAA,EAAA;AAmFnBU","file":"/Users/dirk/work/github-zeed/dist/chunk-3ZBLU4D6.cjs","sourcesContent":[null,"import type { LogHandler, LogHandlerOptions, LogMessage } from '../../common/log/log-base'\nimport process from 'node:process'\nimport tty from 'node:tty'\nimport { valueToBoolean } from '../../common/data/convert'\nimport { renderMessages } from '../../common/data/message'\nimport { LogLevelError, LogLevelInfo, LogLevelWarn } from '../../common/log/log-base'\nimport { useLevelFilter, useNamespaceFilter } from '../../common/log/log-filter'\nimport { formatMilliseconds, getTimestamp } from '../../common/time'\nimport { getSourceLocation, getSourceLocationByPrecedingPattern, getStack } from './log-util'\n\nfunction shouldUseColor(): boolean {\n try {\n return valueToBoolean(process.env.ZEED_COLOR, tty.isatty(process.stdout.fd))\n }\n catch (err) {}\n return false\n}\n\nlet defaultUseColor: boolean | undefined\n\nconst colors = [6, 2, 3, 4, 5, 1]\n\nfunction nodeSelectColorByName(namespace: string) {\n let hash = 0\n for (let i = 0; i < namespace.length; i++) {\n hash = (hash << 5) - hash + namespace.charCodeAt(i)\n hash |= 0 // Convert to 32bit integer\n }\n return colors[Math.abs(hash) % colors.length]\n}\n\nconst namespaces: Record<string, any> = {}\n\nlet startTime: number | undefined\n\nfunction log(...args: any[]) {\n process.stdout.write(`${renderMessages(args)}\\n`)\n}\n\n// const _browserStyleMap = {\n// [BOLD]: { \"font-weight\": \"bold\" },\n// [UNBOLD]: { \"font-weight\": \"normal\" },\n// [BLUE]: { color: \"blue\" },\n// [GREEN]: { color: \"green\" },\n// [GREY]: { color: \"grey\" },\n// [RED]: { color: \"red\" },\n// [PURPLE]: { color: \"purple\" },\n// [ORANGE]: { color: \"orange\" },\n// [UNCOLOR]: { color: \"black\" },\n// }\n\nconst TTY_STYLE = {\n BOLD: '\\u001B[1m',\n UNBOLD: '\\u001B[2m',\n RED: '\\u001B[31m',\n GREEN: '\\u001B[32m',\n BLUE: '\\u001B[34m',\n PURPLE: '\\u001B[35m',\n GRAY: '\\u001B[37m',\n ORANGE: '\\u001B[38;5;208m',\n UNCOLOR: '\\u001B[0m',\n}\n\nenum COLOR {\n RED = 1,\n GREEN = 2,\n BLUE = 4,\n PURPLE = 5,\n GRAY = 7,\n ORANGE = 8,\n}\n\nconst colorEnd = '\\u001B[0m'\n\nexport function colorString(text: string, colorCode: number) {\n const colorStart = colorCode === COLOR.ORANGE\n ? TTY_STYLE.ORANGE\n : `\\u001B[3${colorCode < 8 ? colorCode : `8;5;${colorCode}`}m`\n return `${colorStart}${text}${colorEnd}`\n}\n\nexport function colorStringList(\n list: Array<any>,\n style: string,\n bold = true,\n) {\n return list.map((value) => {\n if (typeof value !== 'string')\n return value\n let start = style\n let end = colorEnd\n if (bold) {\n start = `${TTY_STYLE.BOLD}${start}`\n end = `${end}${TTY_STYLE.BOLD}`\n }\n return `${start}${value}${end}`\n })\n}\n\nfunction shouldUseStack(): boolean {\n try {\n return valueToBoolean(process.env.ZEED_STACK, false)\n }\n catch (err) {}\n return false\n}\n\nlet defaultUseStack: boolean | undefined\n\nexport const loggerStackTraceDebug = 'loggerStackTraceDebug-7d38e5a9214b58d29734374cdb9521fd964d7485'\n\nexport function LoggerNodeHandler(opt: LogHandlerOptions = {}): LogHandler {\n if (defaultUseColor == null)\n defaultUseColor = shouldUseColor()\n\n if (defaultUseStack == null)\n defaultUseStack = shouldUseStack()\n\n if (startTime == null)\n startTime = getTimestamp()\n\n const {\n level = undefined,\n filter = undefined,\n colors = defaultUseColor,\n levelHelper = true,\n nameBrackets = true,\n padding = 0,\n fill = 0,\n stack = defaultUseStack,\n time = true,\n } = opt\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 const timeNow = getTimestamp()\n const name = msg.name || ''\n let ninfo = namespaces[name || '']\n if (ninfo == null) {\n ninfo = {\n color: nodeSelectColorByName(name),\n // time: timeNow\n }\n namespaces[name] = ninfo\n }\n const timeDiffString = formatMilliseconds(timeNow - startTime!)\n\n let args: string[]\n\n let displayName = nameBrackets ? `[${name}]` : name\n\n if (padding > 0)\n displayName = displayName.padStart(padding, ' ')\n\n if (fill > 0)\n displayName = displayName.padEnd(fill, ' ')\n\n if (colors) {\n const c = ninfo.color\n args = [`${colorString(displayName, c)} | `] // nameBrackets ? [`%c[${name}]`] : [`%c${name}`]\n if (msg.level === LogLevelWarn)\n args.push(...colorStringList(msg.messages, TTY_STYLE.ORANGE))\n else if (msg.level === LogLevelError)\n args.push(...colorStringList(msg.messages, TTY_STYLE.RED))\n else\n args.push(...msg.messages)\n if (time)\n args.push(colorString(`+${timeDiffString}`, c))\n }\n else {\n args = [displayName, ...msg.messages]\n if (time)\n args.push(`+${timeDiffString}`)\n }\n\n if (msg.messages?.[0] === loggerStackTraceDebug) {\n try {\n // eslint-disable-next-line no-console\n console.log(getStack())\n }\n catch (err) { }\n }\n\n // Probably time consuming\n if (stack) {\n let line = ''\n if (typeof stack === 'boolean') {\n line = getSourceLocationByPrecedingPattern(\n ['at Function.', 'at null.log (', 'at log ('],\n true,\n )\n if (!line)\n line = getSourceLocation(0, true)\n }\n else {\n const depth = typeof stack === 'number' ? stack : 3\n line = getSourceLocation(depth, true)\n }\n if (line)\n args.push(colorString(`(${line})`, COLOR.GRAY))\n }\n\n const sep = '|'\n const charLevel = '.'\n\n switch (msg.level) {\n case LogLevelInfo:\n if (levelHelper)\n args[0] = `I${sep}${charLevel} ${args[0]}`\n log(...args)\n break\n case LogLevelWarn:\n if (levelHelper) {\n args[0] = (colors\n ? colorString(`W${sep}${charLevel}${charLevel} `, COLOR.ORANGE)\n : `W${sep}${charLevel}${charLevel} `) + args[0]\n }\n log(...args)\n break\n case LogLevelError:\n if (levelHelper) {\n args[0] = (colors\n ? colorString(`E${sep}${charLevel}${charLevel}${charLevel} `, COLOR.RED)\n : `E${sep}${charLevel}${charLevel}${charLevel} `) + args[0]\n }\n log(...args)\n break\n default:\n if (levelHelper)\n args[0] = `D${sep} ${args[0]}`\n log(...args)\n break\n }\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-47GAJHNO.cjs","../src/common/data/message.ts"],"names":["formatMessages","messages","opt","trace","pretty","obj","Uint8ArrayToHexDump","ensureUint8Array"],"mappings":"AAAA,iIAAwC,wDAAyC,wDAAgD,wDAAyC,SCS1JA,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CAA6B,CAAC,CAAA,CACvB,CACP,GAAM,CAAE,KAAA,CAAAC,CAAAA,CAAQ,CAAA,CAAA,CAAM,MAAA,CAAAC,CAAAA,CAAS,CAAA,CAAK,CAAA,CAAIF,CAAAA,CACxC,OAAOD,CAAAA,CAAS,GAAA,CAAKI,CAAAA,EAAQ,CAC3B,EAAA,CAAIA,CAAAA,EAAO,OAAOA,CAAAA,EAAQ,QAAA,CAAU,CAClC,EAAA,CAAID,CAAAA,EAAAA,CAAWC,EAAAA,WAAe,UAAA,EAAcA,EAAAA,WAAe,WAAA,CAAA,CACzD,MAAO,CAAA;AAAA,EAAKC,iCAAAA,iCAAoBC,EAAiBF,WAAe,WAAA,CAAc,IAAI,UAAA,CAAWA,CAAG,CAAA,CAAIA,CAAG,CAAC,CAAC,CAAA;AAAA,CAAA,CAE3G,EAAA,CAAIA,EAAAA,WAAe,KAAA,CACjB,MAAO,CAAA,EAAA;AAEE;AAGP;AAGcA;AAKEA","file":"/Users/dirk/work/github-zeed/dist/chunk-47GAJHNO.cjs","sourcesContent":[null,"import { ensureUint8Array, Uint8ArrayToHexDump } from './bin'\nimport { isArray } from './is'\nimport { objectPlain } from './object'\n\nexport interface RenderMessagesOptions {\n trace?: boolean // = true\n pretty?: boolean // = true\n}\n\nexport function formatMessages(\n messages: any[],\n opt: RenderMessagesOptions = {},\n): any[] {\n const { trace = true, pretty = true } = opt\n return messages.map((obj) => {\n if (obj && typeof obj === 'object') {\n if (pretty && (obj instanceof Uint8Array || obj instanceof ArrayBuffer))\n return `\\n${Uint8ArrayToHexDump(ensureUint8Array(obj instanceof ArrayBuffer ? new Uint8Array(obj) : obj))}\\n`\n \n if (obj instanceof Error) {\n return `${obj.name}: ${obj.message}` + (trace ? `\\n${obj.stack}` : '')\n }\n if (typeof ErrorEvent !== 'undefined' && obj instanceof ErrorEvent) {\n return `${obj.error.name || 'ErrorEvent'}: ${obj.error.message}` + (trace ? `\\n${obj.error.stack}` : '')\n }\n if (typeof DOMException !== 'undefined' && obj instanceof DOMException) {\n return `${obj.name || 'DOMException'}: ${obj.message}` + (trace ? `\\n${obj.stack}` : '')\n }\n if (obj && typeof obj === 'object' && 'reason' in obj) {\n return `PromiseRejection ${obj.type}: ${obj.reason}` + (trace ? `\\n${obj.stack}` : '')\n }\n \n try {\n obj = objectPlain(obj)\n return pretty ? JSON.stringify(obj, null, 2) : JSON.stringify(obj)\n }\n catch (err) {}\n }\n return String(obj)\n })\n}\n\nexport function renderMessages(\n messages: any | any[],\n opt: RenderMessagesOptions = {},\n): string {\n return formatMessages(isArray(messages) ? messages : [messages], opt).join(' ')\n}\n"]}
|