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 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-4ATJXWZH.cjs","../src/common/exec/queue.ts"],"names":["SerialQueue","Emitter","__name","opt","name","uname","logLevel","DefaultLogger"],"mappings":"AAAA,qvBAAwC,wDAAyC,wDAAyC,wDAAyC,wDAAyC,IC6B/LA,CAAAA,WAAN,MAAA,QAA0BC,mBAAoB,CA7BrD,MA6BqD,CAAAC,iCAAAA,IAAA,CAAA,aAAA,CAAA,gBAC3C,KAAA,CAAoB,CAAC,EAAA,gBACrB,YAAA,CAA+B,CAAC,EAAA,gBAGhC,QAAA,CAAW,EAAA,gBACX,aAAA,CAAgB,EAAA,gBAEhB,MAAA,CAAS,CAAA,EAAA,WAIjB,CAAYC,CAAAA,CAA8C,CAAC,CAAA,CAAG,CAC5D,KAAA,CAAM,qLAAA,CACN,GAAM,CAAE,IAAA,CAAAC,CAAAA,CAAOC,iCAAAA,OAAa,CAAA,CAAG,QAAA,CAAAC,CAAS,CAAA,CAAIH,CAAAA,CAC5C,IAAA,CAAK,IAAA,CAAOC,CAAAA,CACZ,IAAA,CAAK,GAAA,CAAMG,iCAAAA,CAAc,WAAA,EAAcH,CAAI,CAAA,CAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-4ATJXWZH.cjs","sourcesContent":[null,"// Can learn from here https://github.com/sindresorhus/p-queue\n\nimport type { LoggerInterface, LogLevel } from '../log/log-base'\nimport { DefaultLogger } from '../log/log'\nimport { LogLevelOff } from '../log/log-base'\nimport { Emitter } from '../msg/emitter'\nimport { uname } from '../uuid'\n\ntype TaskResolver = any\n\nexport type TaskFn<T = any> = () => Promise<T>\n\ninterface TaskInfo {\n name: string\n task: TaskFn\n resolve: TaskResolver\n}\n\nexport interface TaskEvents {\n didUpdate: (max: number, resolved: number) => void\n didStart: (max: number) => void\n didCancel: () => void\n didFinish: () => void\n // didResolve(value: any): void\n // didReject(error: any): void\n // didPause(max: number): void\n}\n\n/** Guarentee serial execution of tasks. Able to wait, pause, resume and cancel all. */\nexport class SerialQueue extends Emitter<TaskEvents> {\n private queue: TaskInfo[] = []\n private waitToFinish: TaskResolver[] = []\n private currentTask?: Promise<any>\n private log: LoggerInterface\n private countMax = 0\n private countResolved = 0\n\n private paused = false\n\n name: string\n\n constructor(opt: { name?: string, logLevel?: LogLevel } = {}) {\n super()\n const { name = uname('queue'), logLevel } = opt\n this.name = name\n this.log = DefaultLogger(`zeed:queue:${name}`, logLevel ?? LogLevelOff)\n }\n\n private async performNext() {\n this.log('performNext, queue.length =', this.queue.length)\n\n if (this.currentTask != null) {\n this.log('performNext => skip while another task is running')\n return\n }\n\n if (this.paused) {\n this.log('performNext => skip while is paused')\n return\n }\n\n while (this.currentTask == null && !this.paused) {\n const info = this.queue.shift()\n this.log(`performNext => ${info?.name}`)\n\n if (info == null)\n break\n\n if (this.countResolved === 0)\n void this.emit('didStart', this.countMax)\n\n const { name, task, resolve } = info\n this.currentTask = task()\n let result\n try {\n this.log.info(`start task ${name}`)\n result = await this.currentTask\n this.log(`finished task ${name} with result =`, result)\n }\n catch (err) {\n this.log.warn('Error performing task', err)\n }\n\n resolve(result)\n this.currentTask = undefined\n\n this.countResolved += 1\n void this.emit('didUpdate', this.countMax, this.countResolved)\n }\n\n if (this.queue.length === 0) {\n void this.emit('didFinish')\n this.countMax = 0\n this.countResolved = 0\n }\n\n while (this.waitToFinish.length > 0)\n this.waitToFinish.shift()()\n }\n\n /** Enqueue task to be executed when all other tasks are done. Except `immediate = true`. */\n async enqueue<T>(\n task: TaskFn<T>,\n opt: { immediate?: boolean, name?: string } = {},\n ): Promise<T> {\n const { immediate = false, name = uname(this.name) } = opt\n if (immediate) {\n this.log.info(`immediate execution ${name}`)\n return await task()\n }\n\n this.log(`enqueue ${name}`)\n return new Promise((resolve) => {\n this.queue.push({\n name,\n task,\n resolve,\n })\n\n this.countMax += 1\n void this.emit('didUpdate', this.countMax, this.countResolved)\n\n void this.performNext()\n })\n }\n\n /** If a task is already performing, execute immediately. Otherwise enqueue as usual. */\n async enqueueReentrant<T>(\n task: TaskFn<T>,\n opt: { name?: string } = {},\n ): Promise<T> {\n return this.enqueue(task, {\n immediate: this.currentTask != null,\n name: opt.name,\n })\n }\n\n /** Remove all tasks from queue that are not yet executing. */\n async cancelAll(_unblock = true) {\n this.log('cancelAll')\n void this.emit('didCancel')\n const resolver = this.queue.map(task => task.resolve)\n this.queue = []\n resolver.forEach(r => r(undefined))\n await this.wait()\n }\n\n /** Pause execution after current task is finished. */\n async pause() {\n this.log('pause')\n this.paused = true\n await this.wait()\n }\n\n /** Resume paused queue. */\n resume() {\n this.log('resume')\n this.paused = false\n void this.performNext()\n }\n\n /** Wait for all tasks to finish */\n async wait() {\n this.log('wait')\n if (this.currentTask == null && (this.queue.length === 0 || this.paused))\n return\n\n return new Promise((resolve) => {\n this.waitToFinish.push(resolve)\n })\n }\n\n public get isPaused(): boolean {\n return this.paused\n }\n\n public get hasTasks(): boolean {\n return this.queue.length !== 0\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-4B2XCWGL.cjs"],"names":[],"mappings":"AAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-4B2XCWGL.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-4M4EUXUS.cjs","../src/common/csv.ts"],"names":["defaultSeparator","csvStringify","data","opt","separator","body","i"],"mappings":"AAAA,qOAAwC,wDAAuD,wDAAyC,wDAAyC,ICI3KA,CAAAA,CAAmB,GAAA,CAElB,SAASC,CAAAA,CAAaC,CAAAA,CAAaC,CAAAA,CAItC,CAAC,CAAA,CAAW,CACd,GAAM,CAAE,SAAA,CAAAC,CAAAA,CAAYJ,CAAiB,CAAA,CAAIG,CAAAA,CACrCE,CAAAA,CAAO,EAAA,CACPF,CAAAA,CAAI,MAAA,EAAA,CACNE,CAAAA,CAAO,QAAA,CAAA,CAOT,GAAA,CAAA,IAASC,CAAAA,CAAI,CAAA,CAAGA,CAAAA,CAAIJ,CAAAA,CAAK,MAAA,CAAQI,CAAAA,EAAAA,CAC/BD,CAAAA,EAAQ,CAAA,EAAA;AAWU;AAkBiB;AAAY;AAOlC;AAQD","file":"/Users/dirk/work/github-zeed/dist/chunk-4M4EUXUS.cjs","sourcesContent":[null,"import { isArray, isBoolean, isRecord } from './data/is'\nimport { jsonStringifySafe } from './data/json'\nimport { escapeRegExp } from './data/regexp'\n\nconst defaultSeparator = ','\n\nexport function csvStringify(data: any[], opt: {\n // header?: string[]\n separator?: string\n addBom?: boolean // option to add byte order mark for improved Excel support\n} = {}): string {\n const { separator = defaultSeparator } = opt\n let body = ''\n if (opt.addBom)\n body = '\\uFEFF'\n\n // Append the header row to the response if requested\n // if (header)\n // body = `${header.join(separator)}\\n`\n\n // Convert the data to a CSV-like structure\n for (let i = 0; i < data.length; i++) {\n body += `${data[i].map((field: string) => {\n if (field == null || field === '')\n return ''\n if (isBoolean(field))\n return field ? 1 : 0\n let s = String(field)\n if (isRecord(field) || isArray(field))\n s = jsonStringifySafe(field)\n if (s.includes('\"') || s.includes('\\n') || s.includes(separator))\n return `\"${s.replace(/\"/g, '\"\"')}\"`\n return s\n }).join(separator)}\\n`\n }\n\n return body\n}\n\nexport function csvParse(raw: string, opt: {\n separator?: string\n} = {}) {\n // https://regex101.com/r/BCpKyV/1\n // eslint-disable-next-line regexp/no-unused-capturing-group, regexp/no-super-linear-backtracking, regexp/no-dupe-disjunctions, regexp/no-useless-non-capturing-group\n let rxOneValueWithSeparator = /(\"((?:(?:[^\"]*?)(?:\"\")?)*)\"|([^,;\\t\\n]*))([,;\\t\\n]|\\r\\n)/g\n if (opt.separator)\n rxOneValueWithSeparator = new RegExp(rxOneValueWithSeparator.source.replace(/',;\\\\t/g, escapeRegExp(opt.separator)), rxOneValueWithSeparator.flags)\n\n const lines: any[][] = []\n let row: any[] = []\n let m: any\n const text = `${raw.replace(/\\r\\n/g, '\\n').trim()}\\n`\n\n // eslint-disable-next-line no-cond-assign\n while (m = rxOneValueWithSeparator.exec(text)) {\n let value = m[2] ?? m[3] ?? ''\n value = value.replace(/\"\"/g, '\"')\n row.push(value)\n if (m[4] === '\\n') {\n lines.push(row)\n row = []\n }\n }\n return lines\n}\n\nexport function csvParseToObjects(raw: string, opt: {\n separator?: string\n} = {}) {\n const lines = csvParse(raw, opt)\n const header = lines[0]\n return lines.slice(1).map(l =>\n Object.fromEntries (l.map((v, i) => [header[i], v])),\n )\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-4TLMJAZB.cjs","../src/common/bin/lib0/create.ts"],"names":["createUint8ArrayViewFromArrayBuffer","buffer","byteOffset","length","__name","createUint8ArrayFromArrayBuffer"],"mappings":"AAAA,iIAAwC,SCSxBA,CAAAA,CAAoCC,CAAAA,CAAyBC,CAAAA,CAAoBC,CAAAA,CAAgB,CAC/G,OAAO,IAAI,UAAA,CAAWF,CAAAA,CAAQC,CAAAA,CAAYC,CAAM,CAClD,CAFgBC,iCAAAA,CAAAJ,CAAA,qCAAA,CAAA,CAOT,SAASK,CAAAA,CAAgCJ,CAAAA,CAAqB,CACnE,OAAO,IAAI,UAAA,CAAWA,CAAM,CAC9B,CAFgBG,iCAAAA,CAAAC,CAAA,iCAAA,CAAA,CAAA,6BAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-4TLMJAZB.cjs","sourcesContent":[null,"/**\n * Original at https://github.com/dmonad/lib0\n *\n * Utility functions to work with buffers (Uint8Array).\n */\n\n/**\n * Create Uint8Array with initial content from buffer\n */\nexport function createUint8ArrayViewFromArrayBuffer(buffer: ArrayBufferLike, byteOffset: number, length: number) {\n return new Uint8Array(buffer, byteOffset, length)\n}\n\n/**\n * Create Uint8Array with initial content from buffer\n */\nexport function createUint8ArrayFromArrayBuffer(buffer: ArrayBuffer) {\n return new Uint8Array(buffer)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-5RHVNJKM.cjs","../src/common/data/json.ts"],"names":["_sortedReplacer","__name","key","value","sorted","jsonStringifySorted","obj","indent","serializer","replacer","cycleReplacer","stack","keys","_key","thisPos","jsonStringifySafe","spaces","jsonStringify","suspectProtoRx","suspectConstructorRx","JsonSigRx","jsonParseTransform","jsonParse","val","_lval"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-5RHVNJKM.cjs","sourcesContent":[null,"// From https://github.com/moll/json-stringify-safe License ISC\n\nconst _sortedReplacer: JsonEntryProcessor = (key: string, value: any) =>\n (value instanceof Object && !(Array.isArray(value)))\n ? Object.keys(value)\n .sort()\n // .filter((key) => value[key] != null) // Remove null and undefined\n .reduce((sorted: any, key: string) => {\n // Sorted copy\n sorted[key] = value[key]\n return sorted\n }, {})\n : value\n\n// https://gist.github.com/davidfurlong/463a83a33b70a3b6618e97ec9679e490\nexport function jsonStringifySorted(\n obj: any,\n indent: number | undefined = undefined,\n) {\n return JSON.stringify(obj, _sortedReplacer, indent)\n}\n\n//\n\nexport type JsonEntryProcessor = (key: string, value: any) => any\n\nfunction serializer(replacer?: JsonEntryProcessor, cycleReplacer?: JsonEntryProcessor) {\n const stack: any[] = []\n const keys: string[] = []\n\n if (cycleReplacer == null) {\n cycleReplacer = function (_key, value) {\n if (stack[0] === value)\n return '[Circular ~]'\n return (\n `[Circular ~.${keys.slice(0, stack.indexOf(value)).join('.')}]`\n )\n }\n }\n\n return function (this: JsonEntryProcessor, key: string, value: any): any {\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this)\n // eslint-disable-next-line ts/no-unused-expressions\n ~thisPos ? stack.splice(thisPos + 1) : stack.push(this)\n // eslint-disable-next-line ts/no-unused-expressions\n ~thisPos ? keys.splice(thisPos, Number.POSITIVE_INFINITY, key) : keys.push(key)\n if (~stack.indexOf(value))\n value = cycleReplacer?.call(this, key, value)\n }\n else {\n stack.push(value)\n }\n\n try {\n return replacer == null ? value : replacer.call(this, key, value)\n }\n catch (err) { }\n return String(value)\n }\n}\n\n/**\n * Similar to JSON.stringify but can handle circular references.\n * NOT SORTED!\n * From https://github.com/moll/json-stringify-safe/blob/master/stringify.js\n * License ISC\n */\nexport function jsonStringifySafe(\n obj: any,\n replacer?: JsonEntryProcessor | null | undefined,\n spaces?: string | number | null,\n cycleReplacer?: JsonEntryProcessor,\n): string {\n return JSON.stringify(\n obj,\n serializer(replacer ?? undefined, cycleReplacer),\n spaces ?? undefined,\n )\n}\n\nexport const jsonStringify = jsonStringifySafe\n\n//\n\n// From https://github.com/unjs/destr MIT\n// https://github.com/fastify/secure-json-parse\n// https://github.com/hapijs/bourne\nconst suspectProtoRx = /\"(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])(?:p|\\\\u0070)(?:r|\\\\u0072)(?:o|\\\\u006[Ff])(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:_|\\\\u005[Ff])(?:_|\\\\u005[Ff])\"\\s*:/\nconst suspectConstructorRx = /\"(?:c|\\\\u0063)(?:o|\\\\u006[Ff])(?:n|\\\\u006[Ee])(?:s|\\\\u0073)(?:t|\\\\u0074)(?:r|\\\\u0072)(?:u|\\\\u0075)(?:c|\\\\u0063)(?:t|\\\\u0074)(?:o|\\\\u006[Ff])(?:r|\\\\u0072)\"\\s*:/\n\nconst JsonSigRx = /^[\"{[]|^-?\\d[0-9.]{0,14}$/\n\nfunction jsonParseTransform(key: string, value: any): any {\n if (key === '__proto__' || key === 'constructor')\n return\n\n return value\n}\n \n/// Sage JSON parsing protecting against __proto__ and the like\nexport function jsonParse(val: string): any {\n if (typeof val !== 'string')\n return val\n\n const _lval = val.toLowerCase()\n if (_lval === 'true')\n return true\n\n if (_lval === 'false')\n return false\n\n if (_lval === 'null')\n return null\n\n if (_lval === 'nan')\n return Number.NaN\n\n if (_lval === 'infinity')\n return Number.POSITIVE_INFINITY\n\n if (_lval === 'undefined')\n return undefined\n\n if (!JsonSigRx.test(val))\n return val\n\n try {\n if (suspectProtoRx.test(val) || suspectConstructorRx.test(val))\n return JSON.parse(val, jsonParseTransform)\n\n return JSON.parse(val)\n }\n catch (_e) {\n return val\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/zeed/zeed/dist/chunk-5RJ6XORD.cjs","../src/common/schema/schema.ts"],"names":["Type","_Type","__name","name","options","value","isFunction"],"mappings":"AAAA,yuBAAkF,wDAAyC,ICgB9GA,CAAAA,CAAN,MAAMC,CAAkB,CAhB/B,MAgB+B,CAAAC,iCAAAA,IAAA,CAAA,MAAA,CAAA,CACpB,WAgBT,CAAYC,CAAAA,CAAcC,CAAAA,CAA4B,CAAC,CAAA,CAAG,CACxD,IAAA,CAAK,IAAA,CAAOD,CAAAA,CACZ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAMC,CAAO,CAC7B,CAMA,GAAI,WAAA,CAAA,CAAmB,CACrB,MAAO,CACL,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,MAAA,CACR,QAAA,CAAUF,iCAAAA,CAACG,EACF,IAAA,CAAK,QAAA,CAASA,CAAK,CAAA,CADlB,UAAA,CAAA,CAGV,KAAA,CAAO,CACL,KAAA,CAAO,KAAA,CAAA,CACP,MAAA,CAAQ,KAAA,CACV,CACF,CACF,CAKA,QAAA,CAASA,CAAAA,CAAiB,CAIxB,EAAA,CAAIA,CAAAA,EAAS,IAAA,CACX,OAAI,IAAA,CAAK,SAAA,CACA,CAAE,KAAA,CAAO,KAAA,CAAsB,CAAA,CAEpC,IAAA,CAAK,QAAA,GAAa,KAAA,CAAA,CAEb,CAAE,KAAA,CADYC,iCAAAA,IAAW,CAAK,QAAQ,CAAA,CAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAI,IAAA,CAAK,QAC/C,CAAA,CAExB,CACL,MAAA,CAAQ,CAAC,CACP,OAAA,CAAS,2BAAA,CACT,IAAA,CAAM,CAAC,CACT,CAAC,CACH,CAAA,CAIF,EAAA,CAAI,IAAA,CAAK,IAAA,GAAS,SAAA,EAAa,IAAA,CAAK,QAAA,GAAaD,CAAAA,CAC/C,MAAO,CACL,MAAA,CAAQ,CAAC,CACP,OAAA,CAAS,CAAA,uBAAA,EAA0B,IAAA,CAAK,QAAQ,CAAA,MAAA,EAASA,CAAK,CAAA,CAAA","file":"/home/runner/work/zeed/zeed/dist/chunk-5RJ6XORD.cjs","sourcesContent":[null,"// With many, many inspiration from https://github.com/badrap/valita MIT License as of 2024-09-10\n\nimport type { StandardSchemaV1 } from './schema-standard'\nimport { isArray, isBoolean, isFunction, isInteger, isNumber, isObject, isString } from '../data/is'\n\n/**\n * Metadata interface for type descriptions and additional properties\n */\nexport interface TypeMeta {\n desc?: string\n}\n\n/**\n * Core Type class for schema validation and type inference\n * Implements StandardSchemaV1 for cross-library compatibility\n */\nexport class Type<T = unknown> {\n readonly type: string\n\n _default?: any\n _optional?: boolean\n _meta?: TypeMeta\n _check?: (obj: any) => boolean\n _object?: any\n _type?: any\n _union?: any\n _enumValues?: any\n _args?: any\n _ret?: any\n _info?: any\n\n // [key: `_${string}`]: any // Allow only optional dynamic properties starting with an underscore\n\n constructor(name: string, options: Partial<Type<T>> = {}) {\n this.type = name\n Object.assign(this, options)\n }\n\n /**\n * Standard Schema V1 compliance property\n * Provides a standard interface for validation and type inference\n */\n get '~standard'(): any {\n return {\n version: 1,\n vendor: 'zeed',\n validate: (value: unknown): StandardSchemaV1.Result<T> => {\n return this.validate(value)\n },\n types: {\n input: undefined as any as T,\n output: undefined as any as T,\n },\n }\n }\n\n /**\n * Validation method for standard-schema compliance\n */\n validate(value: any): any {\n // const messages: Array<{ path: string, message: string, type: string, valid: boolean }> = []\n\n // Handle null/undefined cases\n if (value == null) {\n if (this._optional) {\n return { value: undefined as any as T }\n }\n if (this._default !== undefined) {\n const defaultValue = isFunction(this._default) ? this._default(this) : this._default\n return { value: defaultValue }\n }\n return {\n issues: [{\n message: `Required value is missing`,\n path: [],\n }],\n }\n }\n\n // Handle literal types\n if (this.type === 'literal' && this._default !== value) {\n return {\n issues: [{\n message: `Expected literal value ${this._default}, got ${value}`,\n path: [],\n }],\n }\n }\n\n // Handle string literals (enums)\n if (this._enumValues && Array.isArray(this._enumValues)) {\n if (!this._enumValues.includes(value)) {\n return {\n issues: [{\n message: `Expected one of [${this._enumValues.join(', ')}], got ${value}`,\n path: [],\n }],\n }\n }\n }\n\n // Handle union types\n if (this._union && Array.isArray(this._union)) {\n for (const option of this._union) {\n const result = (option as Type<any>).validate(value)\n if (!result.issues) {\n return result\n }\n }\n return {\n issues: [{\n message: `Value does not match any union variant`,\n path: [],\n }],\n }\n }\n\n // Handle array types\n if (this.type === 'array' || this.type === 'tuple') {\n if (!Array.isArray(value)) {\n return {\n issues: [{\n message: `Expected array, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n if (this.type === 'tuple' && this._type) {\n const items = this._type as Type<any>[]\n if (value.length !== items.length) {\n return {\n issues: [{\n message: `Expected tuple of length ${items.length}, got ${value.length}`,\n path: [],\n }],\n }\n }\n\n const issues: StandardSchemaV1.Issue[] = []\n for (let i = 0; i < items.length; i++) {\n const itemResult = items[i].validate(value[i])\n if (itemResult.issues) {\n for (const issue of itemResult.issues) {\n issues.push({\n message: issue.message,\n path: [i, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n }\n else if (this._type) {\n // Regular array with item type\n const itemType = this._type as Type<any>\n const issues: StandardSchemaV1.Issue[] = []\n\n for (let i = 0; i < value.length; i++) {\n const itemResult = itemType.validate(value[i])\n if (itemResult.issues) {\n for (const issue of itemResult.issues) {\n issues.push({\n message: issue.message,\n path: [i, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n }\n }\n\n // Handle object types\n if (this._object) {\n if (!isObject(value)) {\n return {\n issues: [{\n message: `Expected object, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n const issues: StandardSchemaV1.Issue[] = []\n const obj = value as Record<string, any>\n\n for (const key in this._object) {\n const propSchema = this._object[key] as Type<any>\n const propValue = obj[key]\n const propResult = propSchema.validate(propValue)\n\n if (propResult.issues) {\n for (const issue of propResult.issues) {\n issues.push({\n message: issue.message,\n path: [key, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n\n return { value: value as T, issues: undefined }\n }\n\n // Handle record types\n if (this.type === 'record' && this._type) {\n if (!isObject(value)) {\n return {\n issues: [{\n message: `Expected object, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n const valueType = this._type as Type<any>\n const issues: StandardSchemaV1.Issue[] = []\n const obj = value as Record<string, any>\n\n for (const key in obj) {\n const propResult = valueType.validate(obj[key])\n if (propResult.issues) {\n for (const issue of propResult.issues) {\n issues.push({\n message: issue.message,\n path: [key, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n }\n\n // Check primitive types\n if (this._check && !this._check(value)) {\n return {\n issues: [{\n message: `Expected ${this.type}, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n // Success - return the value\n return { value: value as T }\n }\n\n /**\n * Creates a copy of the type with new properties merged\n */\n private _cloneWithProps<U = T>(newProps: Partial<Type<any>> = {}): Type<U> {\n const cloned = new Type<U>(this.type)\n // Copy all existing properties\n const propertiesToCopy = ['_default', '_optional', '_meta', '_check', '_object', '_type', '_union', '_enumValues', '_args', '_ret', '_info']\n for (const prop of propertiesToCopy) {\n if ((this as any)[prop] !== undefined) {\n (cloned as any)[prop] = (this as any)[prop]\n }\n }\n // Apply new properties\n Object.assign(cloned, newProps)\n return cloned\n }\n\n /**\n * Helper to copy type properties when creating new type instances\n */\n private static _copyTypeProperties(source: Type<any>, target: Type<any>): void {\n const properties = ['_check', '_default', '_meta', '_object', '_type', '_enumValues']\n for (const prop of properties) {\n if ((source as any)[prop] !== undefined) {\n (target as any)[prop] = (source as any)[prop]\n }\n }\n }\n\n /**\n * Marks the type as optional, meaning it can be undefined\n * This is useful for properties that are not required.\n */\n optional(): Type<T | undefined> {\n return this._cloneWithProps<T | undefined>({ _optional: true })\n }\n\n /**\n * Sets a default value for the type, which will be used if the value is not provided\n * The default value can be a function that receives the schema as argument, or a static value.\n */\n default(value: T | ((schema?: this) => T)): Type<T> {\n return this._cloneWithProps<T>({ _default: value })\n }\n\n /**\n * Props / Metadata for the type, like description or other properties\n */\n meta(meta: TypeMeta): Type<T> {\n return this._cloneWithProps<T>({ _meta: meta })\n }\n\n /**\n * Sets the `desc` property for the type, which is a human-readable description\n */\n describe(msg: string): Type<T> {\n const meta = this._meta || {}\n meta.desc = msg\n return this._cloneWithProps<T>({ _meta: meta })\n }\n\n /**\n * Extends the type with an object, merging the properties\n */\n extend<O>(obj: O): Type<T & TypeObject<O>> {\n if (!this._object) {\n throw new Error('extend() can only be used on object schemas')\n }\n const newObj = { ...this._object, ...obj }\n return object(newObj) as any\n }\n\n /**\n * Picks certain keys from an object schema\n */\n pick<K extends keyof T>(keys: Record<K, true>): Type<Pick<T, K>> {\n if (!this._object) {\n throw new Error('pick() can only be used on object schemas')\n }\n const pickedObj: any = {}\n for (const key of Object.keys(keys)) {\n if (key in this._object) {\n pickedObj[key] = (this._object as any)[key]\n }\n }\n return object(pickedObj) as any\n }\n\n /**\n * Omits certain keys from an object schema\n */\n omit<K extends keyof T>(keys: Record<K, true>): Type<Omit<T, K>> {\n if (!this._object) {\n throw new Error('omit() can only be used on object schemas')\n }\n const omittedObj: any = { ...this._object }\n for (const key of Object.keys(keys)) {\n delete omittedObj[key]\n }\n return object(omittedObj) as any\n }\n\n /**\n * Helper method to modify object properties with a transformation function\n */\n private _transformObjectProperties(\n transform: (key: string, type: Type<any>, shouldTransform: boolean) => Type<any>,\n keys?: Record<string, true>,\n ): any {\n if (!this._object) {\n throw new Error('This operation can only be used on object schemas')\n }\n\n const transformedObj: any = {}\n const originalObj = this._object as any\n\n for (const [key, typeInstance] of Object.entries(originalObj)) {\n const shouldTransform = !keys || key in keys\n transformedObj[key] = transform(key, typeInstance as Type<any>, shouldTransform)\n }\n\n return object(transformedObj)\n }\n\n /**\n * Makes some or all properties of an object schema optional\n */\n partial(): Type<Partial<T>>\n partial<K extends keyof T>(keys: Record<K, true>): Type<Partial<Pick<T, K>> & Omit<T, K>>\n partial<K extends keyof T>(keys?: Record<K, true>): Type<Partial<T> | (Partial<Pick<T, K>> & Omit<T, K>)> {\n if (!this._object) {\n throw new Error('partial() can only be used on object schemas')\n }\n return this._transformObjectProperties((key, type, shouldTransform) => {\n if (!shouldTransform)\n return type\n return Type._cloneTypeWithOptional(type, true)\n }, keys)\n }\n\n /**\n * Makes some or all properties of an object schema required\n */\n required(): Type<Required<T>>\n required<K extends keyof T>(keys: Record<K, true>): Type<Required<Pick<T, K>> & Omit<T, K>>\n required<K extends keyof T>(keys?: Record<K, true>): Type<Required<T> | (Required<Pick<T, K>> & Omit<T, K>)> {\n if (!this._object) {\n throw new Error('required() can only be used on object schemas')\n }\n return this._transformObjectProperties((key, type, shouldTransform) => {\n if (!shouldTransform)\n return type\n return Type._cloneTypeWithOptional(type, false)\n }, keys)\n }\n\n /**\n * Helper method to clone a type with optional flag\n */\n private static _cloneTypeWithOptional(originalType: Type<any>, optional: boolean): Type<any> {\n const newType = new Type(originalType.type)\n Type._copyTypeProperties(originalType, newType)\n newType._optional = optional\n return newType\n }\n}\n\n/**\n * Type inference utility for extracting the TypeScript type from a schema Type\n */\nexport type Infer<T> = T extends Type<infer TT> ? TT : never\n\n// =============================================================================\n// Primitive Types\n// =============================================================================\n\n/**\n * Creates a string type validator\n */\nexport function string(): Type<string> {\n return new Type('string', {\n _check: isString,\n })\n}\n\n/**\n * Creates a number type validator\n */\nexport function number(): Type<number> {\n return new Type('number', {\n _check: isNumber,\n })\n}\n\n/**\n * Creates an integer type validator\n */\nexport function int(): Type<number> {\n return new Type('int', {\n _check: isInteger,\n })\n}\n\n/**\n * Creates a boolean type validator\n */\nexport function boolean(): Type<boolean> {\n return new Type('boolean', {\n _check: isBoolean,\n })\n}\n\n/**\n * Creates a none type validator (undefined | null)\n * Like undefined | null in TS and nil in Swift\n */\nexport function none(): Type<undefined> {\n return new Type('none', {\n _check: (v: any) => v == null,\n _optional: true,\n })\n}\n\n/**\n * Creates an any type validator that accepts any non-null value\n */\nexport function any<T = any>(): Type<T> {\n return new Type('any', {\n _check: (v: any) => v != null,\n })\n}\n\n// Aliases for number types\nexport const float = number\nexport const double = number\nexport const real = number\n\n// =============================================================================\n// Object Types\n// =============================================================================\n\n/**\n * Utility type to make object properties optional if their value type includes undefined.\n * @category Schema\n */\nexport type TypeObjectFixOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: T[K] & {}\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K] & {}\n}\n\n/**\n * Utility type for pretty-printing object types\n */\ntype TypeObjectPretty<V> = Extract<{ [K in keyof V]: V[K] }, unknown>\n\n/**\n * Main object type utility\n */\ntype TypeObject<T> = TypeObjectPretty<TypeObjectFixOptional<{\n [K in keyof T]: Infer<T[K]>\n}>>\n\n/**\n * Creates an object type validator with specified properties\n */\nexport function object<T>(tobj: T): Type<TypeObject<T>> {\n return new Type('object', {\n _check: isObject,\n _object: tobj,\n })\n}\n\n/**\n * Creates a record type validator (object with string keys and uniform value type)\n */\nexport function record<T extends Type>(valueType: T): Type<Record<string, Infer<T>>> {\n return new Type('record', {\n _check: isObject,\n _type: valueType,\n })\n}\n\n// =============================================================================\n// Union Types\n// =============================================================================\n\n/**\n * Utility type for union of types.\n * @category Schema\n */\nexport type TypeUnion<T extends Type<any>[]> = {\n [K in keyof T]: T[K] extends Type<infer U> ? U : never\n}[number]\n\n/**\n * Creates a union type validator (like `string | number | boolean`)\n */\nexport function union<T extends Type<any>[]>(options: T): Type<TypeUnion<T>> {\n return new Type('union', {\n _check: (v: any) => options.some(option => option._check?.(v) ?? false),\n _union: options,\n })\n}\n\n// =============================================================================\n// Literal Types\n// =============================================================================\n\n/**\n * Utility type for literal types.\n * @category Schema\n */\nexport type TypeLiterals = string | number | bigint | boolean\n\n/**\n * Creates a literal value validator\n */\nexport function literal<T extends TypeLiterals>(value: T): Type<T> {\n return new Type('literal', {\n _check: (v: any) => v === value,\n _default: value,\n })\n}\n\n/**\n * Creates a string literal union validator (like `\"a\" | \"b\" | \"c\"`)\n */\nexport function stringLiterals<const T extends readonly string[]>(values: T): Type<T[number]> {\n return new Type('string', {\n _check: (v: any) => typeof v === 'string' && (values as readonly string[]).includes(v),\n _enumValues: values,\n })\n}\n\n// =============================================================================\n// Collection Types\n// =============================================================================\n\n/**\n * Utility type for tuple types.\n * @category Schema\n */\nexport type TypeTuple<T extends readonly Type[]> = {\n -readonly [K in keyof T]: T[K] extends Type<infer U> ? U : never\n}\n\n/**\n * Output type for TypeArray.\n * @category Schema\n */\nexport type TypeArrayOutput<Head extends Type[], Rest extends Type | undefined> = [\n ...TypeTuple<Head>,\n ...(Rest extends Type ? Infer<Rest>[] : []),\n]\n\n/**\n * Utility type for array types.\n * @category Schema\n */\nexport type TypeArray<Head extends Type[] = Type[], Rest extends Type | undefined = Type | undefined> = Type<TypeArrayOutput<Head, Rest>>\n\n/**\n * Creates a tuple type validator with fixed length and types e.g. [string, number, boolean]\n */\nexport function tuple<const T extends readonly Type[]>(items: T): Type<TypeTuple<T>> {\n return new Type('tuple', {\n _check: (v: any) => Array.isArray(v) && v.length === items.length && items.every((item, i) => (item as Type)._check?.(v[i]) ?? false),\n _type: items,\n })\n}\n\n/**\n * Creates an array type validator for a specific item type\n */\nexport function array<T>(itemType: Type<T>): Type<T[]> {\n return new Type('array', {\n _check: isArray,\n _type: itemType,\n })\n}\n\n// =============================================================================\n// Function Types\n// =============================================================================\n\n/**\n * Creates a regular function type validator\n */\nexport function func<\n TypeFuncArgs extends [Type<unknown>, ...Type<any>[]] | [],\n TypeFuncRet = Type,\n T = (...args: TypeTuple<TypeFuncArgs>) => Infer<TypeFuncRet>,\n>(args: TypeFuncArgs, ret: TypeFuncRet): Type<T> {\n return new Type('function', {\n _check: isFunction,\n _args: args,\n _ret: ret,\n })\n}\n\n/**\n * Creates an RPC function type validator that takes one argument and returns a promise\n */\nexport function rpc<\n TypeRpcInfo extends Type<unknown> | undefined = undefined,\n TypeRpcRet extends Type<unknown> = Type<void>,\n T = TypeRpcInfo extends undefined\n ? () => Infer<TypeRpcRet>\n : (info: Infer<TypeRpcInfo>) => Infer<TypeRpcRet> | Promise<Infer<TypeRpcRet>>,\n>(info?: TypeRpcInfo, ret?: TypeRpcRet): Type<T> {\n return new Type('rpc', {\n _check: isFunction,\n _info: info,\n _ret: ret ?? none(),\n })\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-5RJ6XORD.cjs","../src/common/schema/schema.ts"],"names":["Type","_Type","__name","name","options","value","isFunction"],"mappings":"AAAA,yuBAAkF,wDAAyC,ICgB9GA,CAAAA,CAAN,MAAMC,CAAkB,CAhB/B,MAgB+B,CAAAC,iCAAAA,IAAA,CAAA,MAAA,CAAA,CACpB,WAgBT,CAAYC,CAAAA,CAAcC,CAAAA,CAA4B,CAAC,CAAA,CAAG,CACxD,IAAA,CAAK,IAAA,CAAOD,CAAAA,CACZ,MAAA,CAAO,MAAA,CAAO,IAAA,CAAMC,CAAO,CAC7B,CAMA,GAAI,WAAA,CAAA,CAAmB,CACrB,MAAO,CACL,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,MAAA,CACR,QAAA,CAAUF,iCAAAA,CAACG,EACF,IAAA,CAAK,QAAA,CAASA,CAAK,CAAA,CADlB,UAAA,CAAA,CAGV,KAAA,CAAO,CACL,KAAA,CAAO,KAAA,CAAA,CACP,MAAA,CAAQ,KAAA,CACV,CACF,CACF,CAKA,QAAA,CAASA,CAAAA,CAAiB,CAIxB,EAAA,CAAIA,CAAAA,EAAS,IAAA,CACX,OAAI,IAAA,CAAK,SAAA,CACA,CAAE,KAAA,CAAO,KAAA,CAAsB,CAAA,CAEpC,IAAA,CAAK,QAAA,GAAa,KAAA,CAAA,CAEb,CAAE,KAAA,CADYC,iCAAAA,IAAW,CAAK,QAAQ,CAAA,CAAI,IAAA,CAAK,QAAA,CAAS,IAAI,CAAA,CAAI,IAAA,CAAK,QAC/C,CAAA,CAExB,CACL,MAAA,CAAQ,CAAC,CACP,OAAA,CAAS,2BAAA,CACT,IAAA,CAAM,CAAC,CACT,CAAC,CACH,CAAA,CAIF,EAAA,CAAI,IAAA,CAAK,IAAA,GAAS,SAAA,EAAa,IAAA,CAAK,QAAA,GAAaD,CAAAA,CAC/C,MAAO,CACL,MAAA,CAAQ,CAAC,CACP,OAAA,CAAS,CAAA,uBAAA,EAA0B,IAAA,CAAK,QAAQ,CAAA,MAAA,EAASA,CAAK,CAAA,CAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-5RJ6XORD.cjs","sourcesContent":[null,"// With many, many inspiration from https://github.com/badrap/valita MIT License as of 2024-09-10\n\nimport type { StandardSchemaV1 } from './schema-standard'\nimport { isArray, isBoolean, isFunction, isInteger, isNumber, isObject, isString } from '../data/is'\n\n/**\n * Metadata interface for type descriptions and additional properties\n */\nexport interface TypeMeta {\n desc?: string\n}\n\n/**\n * Core Type class for schema validation and type inference\n * Implements StandardSchemaV1 for cross-library compatibility\n */\nexport class Type<T = unknown> {\n readonly type: string\n\n _default?: any\n _optional?: boolean\n _meta?: TypeMeta\n _check?: (obj: any) => boolean\n _object?: any\n _type?: any\n _union?: any\n _enumValues?: any\n _args?: any\n _ret?: any\n _info?: any\n\n // [key: `_${string}`]: any // Allow only optional dynamic properties starting with an underscore\n\n constructor(name: string, options: Partial<Type<T>> = {}) {\n this.type = name\n Object.assign(this, options)\n }\n\n /**\n * Standard Schema V1 compliance property\n * Provides a standard interface for validation and type inference\n */\n get '~standard'(): any {\n return {\n version: 1,\n vendor: 'zeed',\n validate: (value: unknown): StandardSchemaV1.Result<T> => {\n return this.validate(value)\n },\n types: {\n input: undefined as any as T,\n output: undefined as any as T,\n },\n }\n }\n\n /**\n * Validation method for standard-schema compliance\n */\n validate(value: any): any {\n // const messages: Array<{ path: string, message: string, type: string, valid: boolean }> = []\n\n // Handle null/undefined cases\n if (value == null) {\n if (this._optional) {\n return { value: undefined as any as T }\n }\n if (this._default !== undefined) {\n const defaultValue = isFunction(this._default) ? this._default(this) : this._default\n return { value: defaultValue }\n }\n return {\n issues: [{\n message: `Required value is missing`,\n path: [],\n }],\n }\n }\n\n // Handle literal types\n if (this.type === 'literal' && this._default !== value) {\n return {\n issues: [{\n message: `Expected literal value ${this._default}, got ${value}`,\n path: [],\n }],\n }\n }\n\n // Handle string literals (enums)\n if (this._enumValues && Array.isArray(this._enumValues)) {\n if (!this._enumValues.includes(value)) {\n return {\n issues: [{\n message: `Expected one of [${this._enumValues.join(', ')}], got ${value}`,\n path: [],\n }],\n }\n }\n }\n\n // Handle union types\n if (this._union && Array.isArray(this._union)) {\n for (const option of this._union) {\n const result = (option as Type<any>).validate(value)\n if (!result.issues) {\n return result\n }\n }\n return {\n issues: [{\n message: `Value does not match any union variant`,\n path: [],\n }],\n }\n }\n\n // Handle array types\n if (this.type === 'array' || this.type === 'tuple') {\n if (!Array.isArray(value)) {\n return {\n issues: [{\n message: `Expected array, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n if (this.type === 'tuple' && this._type) {\n const items = this._type as Type<any>[]\n if (value.length !== items.length) {\n return {\n issues: [{\n message: `Expected tuple of length ${items.length}, got ${value.length}`,\n path: [],\n }],\n }\n }\n\n const issues: StandardSchemaV1.Issue[] = []\n for (let i = 0; i < items.length; i++) {\n const itemResult = items[i].validate(value[i])\n if (itemResult.issues) {\n for (const issue of itemResult.issues) {\n issues.push({\n message: issue.message,\n path: [i, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n }\n else if (this._type) {\n // Regular array with item type\n const itemType = this._type as Type<any>\n const issues: StandardSchemaV1.Issue[] = []\n\n for (let i = 0; i < value.length; i++) {\n const itemResult = itemType.validate(value[i])\n if (itemResult.issues) {\n for (const issue of itemResult.issues) {\n issues.push({\n message: issue.message,\n path: [i, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n }\n }\n\n // Handle object types\n if (this._object) {\n if (!isObject(value)) {\n return {\n issues: [{\n message: `Expected object, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n const issues: StandardSchemaV1.Issue[] = []\n const obj = value as Record<string, any>\n\n for (const key in this._object) {\n const propSchema = this._object[key] as Type<any>\n const propValue = obj[key]\n const propResult = propSchema.validate(propValue)\n\n if (propResult.issues) {\n for (const issue of propResult.issues) {\n issues.push({\n message: issue.message,\n path: [key, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n\n return { value: value as T, issues: undefined }\n }\n\n // Handle record types\n if (this.type === 'record' && this._type) {\n if (!isObject(value)) {\n return {\n issues: [{\n message: `Expected object, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n const valueType = this._type as Type<any>\n const issues: StandardSchemaV1.Issue[] = []\n const obj = value as Record<string, any>\n\n for (const key in obj) {\n const propResult = valueType.validate(obj[key])\n if (propResult.issues) {\n for (const issue of propResult.issues) {\n issues.push({\n message: issue.message,\n path: [key, ...(issue.path || [])],\n })\n }\n }\n }\n\n if (issues.length > 0) {\n return { issues }\n }\n }\n\n // Check primitive types\n if (this._check && !this._check(value)) {\n return {\n issues: [{\n message: `Expected ${this.type}, got ${typeof value}`,\n path: [],\n }],\n }\n }\n\n // Success - return the value\n return { value: value as T }\n }\n\n /**\n * Creates a copy of the type with new properties merged\n */\n private _cloneWithProps<U = T>(newProps: Partial<Type<any>> = {}): Type<U> {\n const cloned = new Type<U>(this.type)\n // Copy all existing properties\n const propertiesToCopy = ['_default', '_optional', '_meta', '_check', '_object', '_type', '_union', '_enumValues', '_args', '_ret', '_info']\n for (const prop of propertiesToCopy) {\n if ((this as any)[prop] !== undefined) {\n (cloned as any)[prop] = (this as any)[prop]\n }\n }\n // Apply new properties\n Object.assign(cloned, newProps)\n return cloned\n }\n\n /**\n * Helper to copy type properties when creating new type instances\n */\n private static _copyTypeProperties(source: Type<any>, target: Type<any>): void {\n const properties = ['_check', '_default', '_meta', '_object', '_type', '_enumValues']\n for (const prop of properties) {\n if ((source as any)[prop] !== undefined) {\n (target as any)[prop] = (source as any)[prop]\n }\n }\n }\n\n /**\n * Marks the type as optional, meaning it can be undefined\n * This is useful for properties that are not required.\n */\n optional(): Type<T | undefined> {\n return this._cloneWithProps<T | undefined>({ _optional: true })\n }\n\n /**\n * Sets a default value for the type, which will be used if the value is not provided\n * The default value can be a function that receives the schema as argument, or a static value.\n */\n default(value: T | ((schema?: this) => T)): Type<T> {\n return this._cloneWithProps<T>({ _default: value })\n }\n\n /**\n * Props / Metadata for the type, like description or other properties\n */\n meta(meta: TypeMeta): Type<T> {\n return this._cloneWithProps<T>({ _meta: meta })\n }\n\n /**\n * Sets the `desc` property for the type, which is a human-readable description\n */\n describe(msg: string): Type<T> {\n const meta = this._meta || {}\n meta.desc = msg\n return this._cloneWithProps<T>({ _meta: meta })\n }\n\n /**\n * Extends the type with an object, merging the properties\n */\n extend<O>(obj: O): Type<T & TypeObject<O>> {\n if (!this._object) {\n throw new Error('extend() can only be used on object schemas')\n }\n const newObj = { ...this._object, ...obj }\n return object(newObj) as any\n }\n\n /**\n * Picks certain keys from an object schema\n */\n pick<K extends keyof T>(keys: Record<K, true>): Type<Pick<T, K>> {\n if (!this._object) {\n throw new Error('pick() can only be used on object schemas')\n }\n const pickedObj: any = {}\n for (const key of Object.keys(keys)) {\n if (key in this._object) {\n pickedObj[key] = (this._object as any)[key]\n }\n }\n return object(pickedObj) as any\n }\n\n /**\n * Omits certain keys from an object schema\n */\n omit<K extends keyof T>(keys: Record<K, true>): Type<Omit<T, K>> {\n if (!this._object) {\n throw new Error('omit() can only be used on object schemas')\n }\n const omittedObj: any = { ...this._object }\n for (const key of Object.keys(keys)) {\n delete omittedObj[key]\n }\n return object(omittedObj) as any\n }\n\n /**\n * Helper method to modify object properties with a transformation function\n */\n private _transformObjectProperties(\n transform: (key: string, type: Type<any>, shouldTransform: boolean) => Type<any>,\n keys?: Record<string, true>,\n ): any {\n if (!this._object) {\n throw new Error('This operation can only be used on object schemas')\n }\n\n const transformedObj: any = {}\n const originalObj = this._object as any\n\n for (const [key, typeInstance] of Object.entries(originalObj)) {\n const shouldTransform = !keys || key in keys\n transformedObj[key] = transform(key, typeInstance as Type<any>, shouldTransform)\n }\n\n return object(transformedObj)\n }\n\n /**\n * Makes some or all properties of an object schema optional\n */\n partial(): Type<Partial<T>>\n partial<K extends keyof T>(keys: Record<K, true>): Type<Partial<Pick<T, K>> & Omit<T, K>>\n partial<K extends keyof T>(keys?: Record<K, true>): Type<Partial<T> | (Partial<Pick<T, K>> & Omit<T, K>)> {\n if (!this._object) {\n throw new Error('partial() can only be used on object schemas')\n }\n return this._transformObjectProperties((key, type, shouldTransform) => {\n if (!shouldTransform)\n return type\n return Type._cloneTypeWithOptional(type, true)\n }, keys)\n }\n\n /**\n * Makes some or all properties of an object schema required\n */\n required(): Type<Required<T>>\n required<K extends keyof T>(keys: Record<K, true>): Type<Required<Pick<T, K>> & Omit<T, K>>\n required<K extends keyof T>(keys?: Record<K, true>): Type<Required<T> | (Required<Pick<T, K>> & Omit<T, K>)> {\n if (!this._object) {\n throw new Error('required() can only be used on object schemas')\n }\n return this._transformObjectProperties((key, type, shouldTransform) => {\n if (!shouldTransform)\n return type\n return Type._cloneTypeWithOptional(type, false)\n }, keys)\n }\n\n /**\n * Helper method to clone a type with optional flag\n */\n private static _cloneTypeWithOptional(originalType: Type<any>, optional: boolean): Type<any> {\n const newType = new Type(originalType.type)\n Type._copyTypeProperties(originalType, newType)\n newType._optional = optional\n return newType\n }\n}\n\n/**\n * Type inference utility for extracting the TypeScript type from a schema Type\n */\nexport type Infer<T> = T extends Type<infer TT> ? TT : never\n\n// =============================================================================\n// Primitive Types\n// =============================================================================\n\n/**\n * Creates a string type validator\n */\nexport function string(): Type<string> {\n return new Type('string', {\n _check: isString,\n })\n}\n\n/**\n * Creates a number type validator\n */\nexport function number(): Type<number> {\n return new Type('number', {\n _check: isNumber,\n })\n}\n\n/**\n * Creates an integer type validator\n */\nexport function int(): Type<number> {\n return new Type('int', {\n _check: isInteger,\n })\n}\n\n/**\n * Creates a boolean type validator\n */\nexport function boolean(): Type<boolean> {\n return new Type('boolean', {\n _check: isBoolean,\n })\n}\n\n/**\n * Creates a none type validator (undefined | null)\n * Like undefined | null in TS and nil in Swift\n */\nexport function none(): Type<undefined> {\n return new Type('none', {\n _check: (v: any) => v == null,\n _optional: true,\n })\n}\n\n/**\n * Creates an any type validator that accepts any non-null value\n */\nexport function any<T = any>(): Type<T> {\n return new Type('any', {\n _check: (v: any) => v != null,\n })\n}\n\n// Aliases for number types\nexport const float = number\nexport const double = number\nexport const real = number\n\n// =============================================================================\n// Object Types\n// =============================================================================\n\n/**\n * Utility type to make object properties optional if their value type includes undefined.\n * @category Schema\n */\nexport type TypeObjectFixOptional<T> = {\n [K in keyof T as undefined extends T[K] ? K : never]?: T[K] & {}\n} & {\n [K in keyof T as undefined extends T[K] ? never : K]: T[K] & {}\n}\n\n/**\n * Utility type for pretty-printing object types\n */\ntype TypeObjectPretty<V> = Extract<{ [K in keyof V]: V[K] }, unknown>\n\n/**\n * Main object type utility\n */\ntype TypeObject<T> = TypeObjectPretty<TypeObjectFixOptional<{\n [K in keyof T]: Infer<T[K]>\n}>>\n\n/**\n * Creates an object type validator with specified properties\n */\nexport function object<T>(tobj: T): Type<TypeObject<T>> {\n return new Type('object', {\n _check: isObject,\n _object: tobj,\n })\n}\n\n/**\n * Creates a record type validator (object with string keys and uniform value type)\n */\nexport function record<T extends Type>(valueType: T): Type<Record<string, Infer<T>>> {\n return new Type('record', {\n _check: isObject,\n _type: valueType,\n })\n}\n\n// =============================================================================\n// Union Types\n// =============================================================================\n\n/**\n * Utility type for union of types.\n * @category Schema\n */\nexport type TypeUnion<T extends Type<any>[]> = {\n [K in keyof T]: T[K] extends Type<infer U> ? U : never\n}[number]\n\n/**\n * Creates a union type validator (like `string | number | boolean`)\n */\nexport function union<T extends Type<any>[]>(options: T): Type<TypeUnion<T>> {\n return new Type('union', {\n _check: (v: any) => options.some(option => option._check?.(v) ?? false),\n _union: options,\n })\n}\n\n// =============================================================================\n// Literal Types\n// =============================================================================\n\n/**\n * Utility type for literal types.\n * @category Schema\n */\nexport type TypeLiterals = string | number | bigint | boolean\n\n/**\n * Creates a literal value validator\n */\nexport function literal<T extends TypeLiterals>(value: T): Type<T> {\n return new Type('literal', {\n _check: (v: any) => v === value,\n _default: value,\n })\n}\n\n/**\n * Creates a string literal union validator (like `\"a\" | \"b\" | \"c\"`)\n */\nexport function stringLiterals<const T extends readonly string[]>(values: T): Type<T[number]> {\n return new Type('string', {\n _check: (v: any) => typeof v === 'string' && (values as readonly string[]).includes(v),\n _enumValues: values,\n })\n}\n\n// =============================================================================\n// Collection Types\n// =============================================================================\n\n/**\n * Utility type for tuple types.\n * @category Schema\n */\nexport type TypeTuple<T extends readonly Type[]> = {\n -readonly [K in keyof T]: T[K] extends Type<infer U> ? U : never\n}\n\n/**\n * Output type for TypeArray.\n * @category Schema\n */\nexport type TypeArrayOutput<Head extends Type[], Rest extends Type | undefined> = [\n ...TypeTuple<Head>,\n ...(Rest extends Type ? Infer<Rest>[] : []),\n]\n\n/**\n * Utility type for array types.\n * @category Schema\n */\nexport type TypeArray<Head extends Type[] = Type[], Rest extends Type | undefined = Type | undefined> = Type<TypeArrayOutput<Head, Rest>>\n\n/**\n * Creates a tuple type validator with fixed length and types e.g. [string, number, boolean]\n */\nexport function tuple<const T extends readonly Type[]>(items: T): Type<TypeTuple<T>> {\n return new Type('tuple', {\n _check: (v: any) => Array.isArray(v) && v.length === items.length && items.every((item, i) => (item as Type)._check?.(v[i]) ?? false),\n _type: items,\n })\n}\n\n/**\n * Creates an array type validator for a specific item type\n */\nexport function array<T>(itemType: Type<T>): Type<T[]> {\n return new Type('array', {\n _check: isArray,\n _type: itemType,\n })\n}\n\n// =============================================================================\n// Function Types\n// =============================================================================\n\n/**\n * Creates a regular function type validator\n */\nexport function func<\n TypeFuncArgs extends [Type<unknown>, ...Type<any>[]] | [],\n TypeFuncRet = Type,\n T = (...args: TypeTuple<TypeFuncArgs>) => Infer<TypeFuncRet>,\n>(args: TypeFuncArgs, ret: TypeFuncRet): Type<T> {\n return new Type('function', {\n _check: isFunction,\n _args: args,\n _ret: ret,\n })\n}\n\n/**\n * Creates an RPC function type validator that takes one argument and returns a promise\n */\nexport function rpc<\n TypeRpcInfo extends Type<unknown> | undefined = undefined,\n TypeRpcRet extends Type<unknown> = Type<void>,\n T = TypeRpcInfo extends undefined\n ? () => Infer<TypeRpcRet>\n : (info: Infer<TypeRpcInfo>) => Infer<TypeRpcRet> | Promise<Infer<TypeRpcRet>>,\n>(info?: TypeRpcInfo, ret?: TypeRpcRet): Type<T> {\n return new Type('rpc', {\n _check: isFunction,\n _info: info,\n _ret: ret ?? none(),\n })\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-5VHLMAKU.cjs"],"names":[],"mappings":"AAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-5VHLMAKU.cjs"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-75LG3YTX.cjs","../src/common/log/log-noop.ts"],"names":["LoggerHandlerNoop","noop","__name","log"],"mappings":"AAAA,iIAAwC,SCExBA,CAAAA,CAAAA,CAAqC,CACnD,IAAMC,CAAAA,CAAYC,iCAAAA,CAAA,CAAA,EAAM,CAAC,CAAA,CAAP,MAAA,CAAA,CACZC,CAAAA,CAAOD,iCAAAA,CAAA,CAAA,CAAA,EAAM,CAAC,CAAA,CAAA,CAAP,KAAA,CAAA,CACb,OAAAC,CAAAA,CAAI,KAAA,CAAQF,CAAAA,CACZE,CAAAA,CAAI,IAAA,CAAOF,CAAAA,CACXE,CAAAA,CAAI,IAAA,CAAOF,CAAAA,CACXE,CAAAA,CAAI,KAAA,CAAQF,CAAAA,CACZE,CAAAA,CAAI,MAAA,CAASF,CAAAA,CACbE,CAAAA,CAAI,KAAA,CAAQF,CAAAA,CACLE,CACT,CAVgBD,iCAAAA,CAAAF,CAAA,mBAAA,CAAA,CAAA,cAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-75LG3YTX.cjs","sourcesContent":[null,"import type { LoggerInterface } from './log-base'\n\nexport function LoggerHandlerNoop(): LoggerInterface {\n const noop: any = () => {}\n const log = (() => {}) as LoggerInterface\n log.debug = noop\n log.info = noop\n log.warn = noop\n log.error = noop\n log.assert = noop\n log.fatal = noop\n return log\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-7HXAZLZN.cjs","../src/common/data/sortable.ts"],"names":["startSortWeight","items","acc","item","getSecureRandomIfPossible","__name","endSortWeight","moveSortWeight","newIndex","oldIndex","count","moveLower","sortedItems","step","lower","distance","middle","fuzzy","a","b"],"mappings":"AAAA,iIAAwC,wDAAyC,SCSjEA,CAAAA,CAAgBC,CAAAA,CAA+B,CAC7D,OACEA,CAAAA,CAAM,MAAA,CAAO,CAACC,CAAAA,CAAKC,CAAAA,CAAAA,EAAS,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAKC,CAAAA,CAAK,WAAA,EAAe,CAAC,CAAA,CAAG,CAAC,CAAA,CACjE,CAAA,CACAC,iCAAAA,CAEN,CANgBC,iCAAAA,CAAAL,CAAA,iBAAA,CAAA,CAST,SAASM,CAAAA,CAAcL,CAAAA,CAA+B,CAC3D,OACEA,CAAAA,CAAM,MAAA,CAAO,CAACC,CAAAA,CAAKC,CAAAA,CAAAA,EAAS,IAAA,CAAK,GAAA,CAAID,CAAAA,CAAKC,CAAAA,CAAK,WAAA,EAAe,CAAC,CAAA,CAAG,CAAC,CAAA,CACjE,CAAA,CACAC,iCAAAA,CAEN,CANgBC,iCAAAA,CAAAC,CAAA,eAAA,CAAA,CAST,SAASC,CAAAA,CACdC,CAAAA,CACAC,CAAAA,CACAR,CAAAA,CACQ,CACR,IAAMS,CAAAA,CAAQT,CAAAA,CAAM,MAAA,CAEdU,CAAAA,CAAYH,CAAAA,CAAWC,CAAAA,CAC7B,EAAA,CAAIC,CAAAA,EAAS,CAAA,EAAKF,CAAAA,EAAYE,CAAAA,CAAQ,CAAA,CACpC,OAAOJ,CAAAA,CAAcL,CAAK,CAAA,CAE5B,EAAA,CAAIO,CAAAA,EAAY,CAAA,CACd,OAAOR,CAAAA,CAAgBC,CAAK,CAAA,CAG9BA,CAAAA,CAAQW,CAAAA,CAAY,CAAC,GAAGX,CAAK,CAAC,CAAA,CAE9B,IAAMY,CAAAA,CAAOF,CAAAA,CAAY,CAAA,CAAA,CAAK,CAAA,CACxBG,CAAAA,CAAQb,CAAAA,CAAMO,CAAAA,CAAWK,CAAI,CAAA,CAAE,WAAA,EAAe,CAAA,CAE9CE,CAAAA,CAAAA,CADQd,CAAAA,CAAMO,CAAAA,CAAWK,CAAAA,CAAO,CAAC,CAAA,CAAE,WAAA,EAAe,CAAA,CAAA,CAC/BC,CAAAA,CACzB,EAAA,CAAIC,CAAAA,GAAa,CAAA,CAEf,OAAIJ,CAAAA,CACKX,CAAAA,CAAgBC,CAAK,CAAA,CAEvBK,CAAAA,CAAcL,CAAK,CAAA,CAE5B,IAAMe,CAAAA,CAASF,CAAAA,CAAQC,CAAAA,CAAW,CAAA,CAC5BE,CAAAA,CAAQF,CAAAA,CAAW,GAAA,CAAA,CAAQX,iCAAAA,CAA0B,CAAI,EAAA,CAAA,CAC/D,OAAOY,CAAAA,CAASC,CAClB,CA/BgBZ,iCAAAA,CAAAE,CAAA,gBAAA,CAAA,CAiCT,SAASK,CAAAA,CAAoCX,CAAAA,CAAiB,CACnE,OAAAA,CAAAA,CAAM,IAAA,CAAK,CAACiB,CAAAA,CAAGC,CAAAA,CAAAA,EAAAA,CAAOD,CAAAA,CAAE,WAAA,EAAe,CAAA,CAAA,CAAA,CAAMC,CAAAA,CAAE,WAAA,EAAe,CAAA,CAAE,CAAA,CACzDlB,CACT,CAHgBI,iCAAAA,CAAAO,CAAA,aAAA,CAAA,CAAA,2DAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-7HXAZLZN.cjs","sourcesContent":[null,"import { getSecureRandomIfPossible } from './math'\n\n// Get a sort_weight suitable for adding to top of list\n// Original idea https://holtwick.de/en/blog/smart-table-reordering\n\nexport interface SortableItem {\n sort_weight: number\n}\n\nexport function startSortWeight(items: SortableItem[]): number {\n return (\n items.reduce((acc, item) => Math.min(acc, item.sort_weight || 0), 0)\n - 1\n - getSecureRandomIfPossible()\n )\n}\n\n// Get a sort_weight suitable for adding to end of list\nexport function endSortWeight(items: SortableItem[]): number {\n return (\n items.reduce((acc, item) => Math.max(acc, item.sort_weight || 0), 0)\n + 1\n + getSecureRandomIfPossible()\n )\n}\n\n// The real magic\nexport function moveSortWeight(\n newIndex: number,\n oldIndex: number,\n items: SortableItem[],\n): number {\n const count = items.length\n\n const moveLower = newIndex < oldIndex\n if (count <= 0 || newIndex >= count - 1)\n return endSortWeight(items)\n\n if (newIndex <= 0)\n return startSortWeight(items)\n\n // Make sure they are sorted\n items = sortedItems([...items])\n\n const step = moveLower ? -1 : 0 // use Math.sign(?) for performance?\n const lower = items[newIndex + step].sort_weight || 0\n const upper = items[newIndex + step + 1].sort_weight || 0\n const distance = upper - lower\n if (distance === 0) {\n // Ugly list with no presets, make the best guess\n if (moveLower)\n return startSortWeight(items)\n\n return endSortWeight(items)\n }\n const middle = lower + distance / 2\n const fuzzy = distance * 0.01 * (getSecureRandomIfPossible() - 0.5) // 1% fuzziness to avoid conflicts\n return middle + fuzzy\n}\n\nexport function sortedItems<T extends SortableItem>(items: T[]): T[] {\n items.sort((a, b) => (a.sort_weight || 0) - (b.sort_weight || 0))\n return items\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-7UA33BQW.cjs","../src/common/exec/promise.ts"],"names":["createPromise","resolve","reject","_resolve","_reject","__name","sleep","milliSeconds","immediate","timeout","promise","timeoutValue","done","result","err","isTimeout","value","tryTimeout","waitOn","obj","event","timeoutMS","fn","timer","isPromise","promisify"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-7UA33BQW.cjs","sourcesContent":[null,"/* eslint-disable ts/no-use-before-define */\n\n/**\n * Promise to be used with `await`. Example:\n *\n * ```\n * const [promise, resolve, reject] = createPromise()\n * setTimeout(() => {\n * resolve(5)\n * }, 50)\n * const result = await promise\n * ```\n */\nexport function createPromise<T>(): [Promise<T>, any, any] {\n let resolve, reject\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve\n reject = _reject\n })\n return [promise, resolve, reject]\n}\n\n/** Sleep for `milliSeconds`. Example 1s: `await sleep(1000)` */\nexport async function sleep(milliSeconds: number): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, milliSeconds))\n}\n\n/** Same as `await sleep(0)`, just let the event loop execute. */\nexport async function immediate(): Promise<void> {\n return new Promise(resolve => setTimeout(resolve, 0))\n}\n\n// type Unwrap<T> = T extends Promise<infer U>\n// ? U\n// : T extends (...args: any) => Promise<infer U>\n// ? U\n// : T extends (...args: any) => infer U\n// ? U\n// : T\n\nexport async function timeout<T>(\n promise: Promise<T>,\n milliSeconds: number,\n timeoutValue = 'timeoutReached',\n): Promise<T | typeof timeoutValue> {\n return new Promise((resolve, reject) => {\n let done = false\n\n const timeout = setTimeout(() => {\n done = true\n resolve(timeoutValue)\n }, milliSeconds)\n\n promise\n .then((result) => {\n clearTimeout(timeout)\n if (!done)\n resolve(result)\n })\n .catch((err) => {\n clearTimeout(timeout)\n if (!done)\n reject(err)\n })\n })\n}\n\nexport function isTimeout(value: any): boolean {\n return value === 'timeoutReached' || value?.name === 'Timeout reached'\n}\n\nexport async function tryTimeout<T>(\n promise: Promise<T>,\n milliSeconds: number,\n): Promise<T | undefined> {\n if (milliSeconds <= 0)\n return await promise\n\n return new Promise((resolve, reject) => {\n let done = false\n\n const timeout = setTimeout(() => {\n done = true\n reject(new Error('Timeout reached'))\n }, milliSeconds)\n\n promise\n .then((result) => {\n clearTimeout(timeout)\n if (!done)\n resolve(result)\n })\n .catch((err) => {\n clearTimeout(timeout)\n if (!done)\n reject(err)\n })\n })\n}\n\n/**\n * @deprecated use emitter.waitOn\n * Wait for `event` on `obj` to emit. Resolve with result or reject on `timeout`\n */\nexport function waitOn(\n obj: any,\n event: string,\n timeoutMS = 1000,\n): Promise<any> {\n return new Promise((resolve, reject) => {\n const fn = (value: any) => {\n if (timer) {\n clearTimeout(timer)\n done()\n resolve(value)\n }\n }\n\n let done = () => {\n timer = null\n if (obj.off)\n obj.off(event, fn)\n else if (obj.removeEventListener)\n obj.removeEventListener(event, fn)\n // else\n // log.warn('No remove listener method found for', obj, event)\n }\n\n let timer: any = setTimeout(() => {\n done()\n reject(new Error('Did not response in time'))\n }, timeoutMS)\n\n if (obj.on)\n obj.on(event, fn)\n else if (obj.addEventListener)\n obj.addEventListener(event, fn)\n // else\n // log.warn('No listener method found for', obj)\n })\n}\n\nexport function isPromise<T>(value: Promise<T> | T): value is Promise<T> {\n return Boolean(value && (value instanceof Promise || typeof (value as any).then === 'function'))\n}\n\n/** This is exactly what Prose.resolve(x) is supposed to be: return a Promise no matter what type x is */\nexport function promisify<T>(value: Promise<T> | T): Promise<T> {\n return Promise.resolve(value)\n}\n\n// // https://github.com/unjs/items-promise\n\n// /**\n// * Run tasks one by one by calling fn(task, previous) in a promise chain.\n// * Return value is of type Promise<*> which resolves to the last fn result.\n// */\n// export async function serial(tasks: any, fn: any) {\n// return tasks.reduce(\n// (promise: Promise<any>, task: any) =>\n// promise.then((previous) => fn(task, previous)),\n// Promise.resolve(null)\n// )\n// }\n\n// /**\n// * Run all tasks in parallel by calling fn(tasks) and await using Promise.all.\n// * Return value is of type Promise<*[]> which resolves to results of all fns in an array.\n// */\n// export async function parallel(tasks: any[], fn: any): Promise<any[]> {\n// return Promise.all(tasks.map((task) => fn(task)))\n// }\n\n//\n\n/**\n * Like ReturnType but for async functions.\n * From https://www.jpwilliams.dev/how-to-unpack-the-return-type-of-a-promise-in-typescript\n */\nexport type AsyncReturnType<T extends (...args: any) => any> = T extends (\n ...args: any\n) => Promise<infer U>\n ? U\n : T extends (...args: any) => infer U\n ? U\n : any\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-7XE6IQ4X.cjs","../src/browser/log/log-browser-factory.ts"],"names":["LoggerBrowserSetupDebugFactory","opt","filter","styleFont","styleDefault"],"mappings":"AAAA,qOAAwC,wDAAyC,wDAAyC,wDAAyC,wDAAgD,wDAAmF,wDAAyC,SCa/TA,CAAAA,CAA+BC,CAAAA,CAAyB,CAAC,CAAA,CAAG,CAC1E,IAAMC,CAAAA,kBAASD,CAAAA,CAAI,MAAA,SAAA,CACjB,OAAO,YAAA,CAAiB,GAAA,kBACnB,YAAA,CAAa,IAAA,SAAQ,YAAA,CAAa,OAAA,CACnC,KAAA,CAAA,GAAA,CAEAE,CAAAA,CAAY,wDAAA,CACZC,CAAAA,CAAe,CAAA,EAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-7XE6IQ4X.cjs","sourcesContent":[null,"import type { LoggerInterface, LogHandlerOptions, LogLevel, LogLevelAliasType } from '../../common/log/log-base'\nimport { LogLevelAll, LogLevelDebug, LogLevelError, LogLevelFatal, LogLevelInfo, LogLevelOff, LogLevelWarn } from '../../common/log/log-base'\nimport { browserSelectColorByName } from '../../common/log/log-colors'\nimport { getGlobalConsole } from '../../common/log/log-console-original'\nimport { parseLogLevel, useNamespaceFilter } from '../../common/log/log-filter'\nimport { LoggerHandlerNoop } from '../../common/log/log-noop'\nimport { browserSupportsColors } from './log-colors'\n\n/**\n * Directly use console calls, this has the advantage to show the original source of the call\n * i.e. it is possible to jump right into the code from the browser console logs. But other\n * loggers will not work any more.\n */\nexport function LoggerBrowserSetupDebugFactory(opt: LogHandlerOptions = {}) {\n const filter = opt.filter ?? (\n typeof localStorage !== 'undefined'\n ? (localStorage.zeed ?? localStorage.debug)\n : undefined)\n\n const styleFont = 'font-family: \"JetBrains Mono\", Menlo; font-size: 11px;'\n const styleDefault = `${styleFont}`\n const styleBold = `font-weight: 600; ${styleFont}`\n const useColors = browserSupportsColors()\n\n // logCaptureConsole will override the console methods, so we need to get the original ones\n const originalConsole = getGlobalConsole()\n\n /**\n * The trick is, that console called directly provides a reference to the source code.\n * For the regular implementation this information is lost. But this approach has other\n * drawbacks, therefore only use it in the Browser when actively debugging.\n */\n return function LoggerBrowserDebugFactory(\n name = '',\n logLevel?: LogLevelAliasType,\n ): LoggerInterface {\n let log: LoggerInterface\n\n const matches = useNamespaceFilter(filter)\n const level = parseLogLevel(logLevel ?? LogLevelAll)\n\n if (matches(name) && level !== LogLevelOff && originalConsole) {\n const fixedArgs: string[] = []\n if (useColors) {\n const color = browserSelectColorByName(name)\n fixedArgs.push(`%c${name.padEnd(16, ' ')}%c \\t%s`)\n fixedArgs.push(`color:${color}; ${styleBold}`)\n fixedArgs.push(styleDefault)\n }\n else {\n fixedArgs.push(`[${name}] \\t%s`)\n }\n\n function defineForLogLevel(fnLevel: LogLevel, fn: any) {\n if (level <= fnLevel)\n return fn\n return () => {}\n }\n\n log = defineForLogLevel(LogLevelDebug, originalConsole.debug.bind(originalConsole.console, ...fixedArgs) as LoggerInterface)\n log.debug = defineForLogLevel(LogLevelDebug, originalConsole.debug.bind(originalConsole.console, ...fixedArgs))\n log.info = defineForLogLevel(LogLevelInfo, originalConsole.info.bind(originalConsole.console, ...fixedArgs))\n log.warn = defineForLogLevel(LogLevelWarn, originalConsole.warn.bind(originalConsole.console, ...fixedArgs))\n log.error = defineForLogLevel(LogLevelError, originalConsole.error.bind(originalConsole.console, ...fixedArgs))\n\n // /**\n // * Takes log level as argument, but will fail to show all the debug info\n // * as the others do like file name and line number of the originating call\n // */\n // log.generic = (logLevel: LogLevel, ...args) => {\n // if (level <= logLevel) {\n // if (logLevel === LogLevelError)\n // originalConsole.error(...fixedArgs, ...args)\n // else if (logLevel === LogLevelWarn)\n // originalConsole.warn(...fixedArgs, ...args)\n // else if (logLevel === LogLevelInfo)\n // originalConsole.info(...fixedArgs, ...args)\n // else\n // originalConsole.debug(...fixedArgs, ...args)\n // }\n // }\n\n log.fatal = defineForLogLevel(LogLevelFatal, (...args: any) => {\n log.error(...args)\n throw new Error(`${args.map(String).join(' ')}`)\n })\n\n log.assert = defineForLogLevel(LogLevelFatal, (condition: unknown, ...args: any) => {\n if (condition == null || (typeof condition === 'number' && Number.isNaN(condition)) || !condition)\n log.fatal(...args)\n })\n }\n else {\n log = LoggerHandlerNoop()\n }\n\n log.extend = (subName: string) => {\n return LoggerBrowserDebugFactory(name ? `${name}:${subName}` : subName)\n }\n\n log.label = name\n\n return log\n }\n}\n\n// /** @deprecated This output is default for initial use of Logger in browser environments. */\n// export function activateConsoleDebug(_opt: LogHandlerOptions = {}) {\n// console.info('activateConsoleDebug is activated by default in browsers')\n// // Logger.setHandlers([LoggerBrowserHandler(opt)]) // Fallback for previously registered Loggers\n// // Logger.setFactory(LoggerBrowserSetupDebugFactory(opt))\n// }\n\n// let klass = console\n// let debug = console.debug.bind(window.console, klass.toString() + \": \")\n\n// debug(\"test\")\n// console.debug(\"test2\")\n\n// let dd\n// if (Function.prototype.bind) {\n// dd = Function.prototype.bind.call(console.log, console)\n// } else {\n// dd = function () {\n// Function.prototype.apply.call(console.log, console, arguments)\n// }\n// }\n\n// dd(\"dd\")\n\n// let c = 1\n// Object.defineProperty(window, \"log2\", {\n// get: () => {\n// return console.log.bind(\n// window.console,\n// \"%c[log]%c %s\" + c++,\n// \"color:red\",\n// \"\"\n// )\n// },\n// })\n\n// // usage:\n// log2(\"Back to the future\")\n// log2(\"Back to the future\")\n\n// let plog = new Proxy(console.debug, {\n// apply: function (target, that, args) {\n// target.apply(that, args)\n// // base.apply(that, args);\n// },\n// })\n\n// let cons = console.debug\n// let plog = (...args) => {\n// cons.apply(window.console, [\"|\", ...args])\n// }\n\n// plog(\"xxx\")\n\n// function a() {\n// var err = new Error()\n// var caller_line = err.stack.split(\"\\n\")[2]\n// var index = caller_line.indexOf(\"at \")\n// var clean = caller_line.slice(index + 2, caller_line.length)\n// clean = clean.replace(/\\?t=\\d+/, \"\").replace(\"@fs/\", \"\")\n// console.log(clean)\n// console.log(\n// \"http://localhost:8080/Users/dirk/work/viidoo/lib/src/browser/log-browser.ts:188:1 log-browser.ts:291:10\"\n// )\n// }\n// function b() {\n// a()\n// }\n// b()\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/zeed/zeed/dist/chunk-A6DSKTWF.cjs","../src/common/crypto/xaes.ts"],"names":["aesBlock","key","data","xor","block","__name","halfKey","index","iv","k1","m","ensureUint8Array","deriveKeyNonce","ivBytes","msb","kxBytes","encryptXAES","params","derived","decryptXAES","generateKeyXAES","extractable","importKeyXAES","format","keyData","exportKeyXAES"],"mappings":"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","file":"/home/runner/work/zeed/zeed/dist/chunk-A6DSKTWF.cjs","sourcesContent":[null,"// Original at https://github.com/dchest/xaes MIT License as of 2024-07-02\n// More at https://words.filippo.io/dispatches/xaes-256-gcm/\n\nimport { ensureUint8Array } from '../data/bin'\n\n/**\n * Implementation of XAES-256-GCM as defined in https://c2sp.org/XAES-256-GCM\n * based on the Web Cryptography API (https://www.w3.org/TR/WebCryptoAPI/).\n *\n * It uses a 256-bit AES-CBC CryptoKey and a 192-bit nonce to derive\n * a 256-bit key and a 96-bit nonce for AES-GCM.\n *\n * Due to the use of the standard CryptoKey and Web Cryptography API operations,\n * this implementation is fully compatible with other parts of the Web Cryptography API.\n * For example, keys can be stored in IndexedDB and be non-extractable. The only\n * additional requirement is that the key must have 'encrypt' usage even for decryption,\n * however, there's no real distinction between encryption and decryption operations\n * for AES-GCM anyway (you can simulate decryption by encrypting the ciphertext).\n */\n\n/**\n * Generates an AES block using the given key and data xored with the given xor.\n */\nasync function aesBlock(key: CryptoKey, data: BufferSource, xor: BufferSource): Promise<Uint8Array> {\n const block = await crypto.subtle.encrypt(\n { name: 'AES-CBC', iv: xor },\n key,\n data,\n )\n return new Uint8Array(block, 0, 16)\n}\n\n/**\n * Derives a half key.\n */\nasync function halfKey(index: number, key: CryptoKey, iv: Uint8Array, k1: Uint8Array): Promise<Uint8Array> {\n const m = new Uint8Array(16)\n m[1] = index\n m[2] = 0x58 // 'X'\n m.set(ensureUint8Array(iv.subarray(0, 12)), 4)\n return await aesBlock(key, m, ensureUint8Array(k1))\n}\n\n/**\n * Derives a 256-bit key and 96-bit nonce from the given 256-bit key and a 192-bit nonce.\n */\nasync function deriveKeyNonce(key: CryptoKey, iv: BufferSource): Promise<{ key: CryptoKey, iv: Uint8Array }> {\n if (key.algorithm.name !== 'AES-CBC') {\n throw new Error('key must be for AES-CBC')\n }\n if (!key.usages.includes('encrypt')) {\n throw new Error('key must have \\'encrypt\\' usage')\n }\n // @ts-expect-error todo\n if (key.algorithm.length !== 256) {\n throw new Error('key must be 256 bits')\n }\n if (iv == null || iv.byteLength !== 24) {\n throw new Error('iv must be 24 bytes')\n }\n const ivBytes = ArrayBuffer.isView(iv)\n ? new Uint8Array(iv.buffer, iv.byteOffset, iv.byteLength)\n : new Uint8Array(iv)\n const k1 = await aesBlock(key, new Uint8Array(16), new Uint8Array(16))\n\n let msb = 0\n for (let i = k1.length - 1; i >= 0; i--) {\n [msb, k1[i]] = [(k1[i] >>> 7) & 0xFF, ((k1[i] << 1) | msb) & 0xFF]\n }\n k1[k1.length - 1] ^= (msb * 0b10000111) & 0xFF\n\n const kxBytes = new Uint8Array(32)\n kxBytes.set(await halfKey(0x01, key, ivBytes, k1), 0)\n kxBytes.set(await halfKey(0x02, key, ivBytes, k1), 16)\n\n const kx = await crypto.subtle.importKey(\n 'raw',\n kxBytes,\n { name: 'AES-GCM', length: 256 },\n false,\n [...key.usages],\n )\n return {\n key: kx,\n iv: ensureUint8Array(ivBytes.subarray(12)),\n }\n}\n/**\n * Encrypts data using XAES-256-GCM with the given key and iv.\n * Key must be a 256-bit AES-CBC CryptoKey with 'encrypt' usage.\n */\nexport async function encryptXAES(params: {\n iv: BufferSource\n additionalData?: BufferSource\n}, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n const derived = await deriveKeyNonce(key, params.iv)\n return await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: derived.iv as BufferSource,\n tagLength: 128,\n additionalData: params.additionalData ?? new Uint8Array(),\n },\n derived.key,\n data,\n )\n}\n\n/**\n * Decrypts data using XAES-256-GCM with the given key and iv.\n * Key must be a 256-bit AES-CBC CryptoKey with 'encrypt' and 'decrypt' usages.\n */\nexport async function decryptXAES(params: {\n iv: BufferSource\n additionalData?: BufferSource\n}, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n const derived = await deriveKeyNonce(key, params.iv)\n return await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: derived.iv as BufferSource,\n tagLength: 128,\n additionalData: params.additionalData ?? new Uint8Array(),\n },\n derived.key,\n data,\n )\n}\n\n/**\n * Generate a random key suitable for XAES-256-GCM.\n * The actual key is an AES-CBC CryptoKey with 256-bit length.\n *\n * This function is not necessary, as you can use crypto.subtle.generateKey with AES-CBC directly.\n */\nexport async function generateKeyXAES(extractable?: boolean): Promise<CryptoKey> {\n return await crypto.subtle.generateKey(\n {\n name: 'AES-CBC',\n // @ts-expect-error todo\n length: 256,\n },\n extractable,\n ['encrypt', 'decrypt'],\n )\n}\n\n/**\n * Import a key suitable for XAES-256-GCM.\n * The actual key must be an AES-CBC CryptoKey with 256-bit length.\n *\n * This function is not necessary, as you can use crypto.subtle.importKey with AES-CBC directly.\n */\nexport async function importKeyXAES(format: 'jwk' | 'raw' | 'pkcs8' | 'spki', keyData: BufferSource | JsonWebKey, extractable?: boolean): Promise<CryptoKey> {\n return await crypto.subtle.importKey( // @ts-expect-error-next-line\n format,\n keyData,\n { name: 'AES-CBC', length: 256 },\n extractable,\n ['encrypt', 'decrypt'],\n )\n}\n\n/**\n * Export a key.\n * The resulting export will have AES-CBC algorithm specified.\n *\n * This function is not necessary, as you can use crypto.subtle.exportKey directly.\n */\nexport async function exportKeyXAES(format: 'jwk' | 'pkcs8' | 'raw' | 'spki', key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n return await crypto.subtle.exportKey(format, key)\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-A6DSKTWF.cjs","../src/common/crypto/xaes.ts"],"names":["aesBlock","key","data","xor","block","__name","halfKey","index","iv","k1","m","ensureUint8Array","deriveKeyNonce","ivBytes","msb","kxBytes","encryptXAES","params","derived","decryptXAES","generateKeyXAES","extractable","importKeyXAES","format","keyData","exportKeyXAES"],"mappings":"AAAA,qOAAwC,wDAAoC,MCuB5E,SAAeA,CAAAA,CAASC,CAAAA,CAAgBC,CAAAA,CAAoBC,CAAAA,CAAwC,CAClG,IAAMC,CAAAA,CAAQ,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CAChC,CAAE,IAAA,CAAM,SAAA,CAAW,EAAA,CAAID,CAAI,CAAA,CAC3BF,CAAAA,CACAC,CACF,CAAA,CACA,OAAO,IAAI,UAAA,CAAWE,CAAAA,CAAO,CAAA,CAAG,EAAE,CACpC,CAPeC,iCAAAA,CAAAL,CAAA,UAAA,CAAA,CAYf,MAAA,SAAeM,CAAAA,CAAQC,CAAAA,CAAeN,CAAAA,CAAgBO,CAAAA,CAAgBC,CAAAA,CAAqC,CACzG,IAAMC,CAAAA,CAAI,IAAI,UAAA,CAAW,EAAE,CAAA,CAC3B,OAAAA,CAAAA,CAAE,CAAC,CAAA,CAAIH,CAAAA,CACPG,CAAAA,CAAE,CAAC,CAAA,CAAI,EAAA,CACPA,CAAAA,CAAE,GAAA,CAAIC,iCAAAA,CAAiBH,CAAG,QAAA,CAAS,CAAA,CAAG,EAAE,CAAC,CAAA,CAAG,CAAC,CAAA,CACtC,MAAMR,CAAAA,CAASC,CAAAA,CAAKS,CAAAA,CAAGC,iCAAAA,CAAmB,CAAC,CACpD,CANeN,iCAAAA,CAAAC,CAAA,SAAA,CAAA,CAWf,MAAA,SAAeM,CAAAA,CAAeX,CAAAA,CAAgBO,CAAAA,CAA+D,CAC3G,EAAA,CAAIP,CAAAA,CAAI,SAAA,CAAU,IAAA,GAAS,SAAA,CACzB,MAAM,IAAI,KAAA,CAAM,yBAAyB,CAAA,CAE3C,EAAA,CAAI,CAACA,CAAAA,CAAI,MAAA,CAAO,QAAA,CAAS,SAAS,CAAA,CAChC,MAAM,IAAI,KAAA,CAAM,+BAAiC,CAAA,CAGnD,EAAA,CAAIA,CAAAA,CAAI,SAAA,CAAU,MAAA,GAAW,GAAA,CAC3B,MAAM,IAAI,KAAA,CAAM,sBAAsB,CAAA,CAExC,EAAA,CAAIO,CAAAA,EAAM,IAAA,EAAQA,CAAAA,CAAG,UAAA,GAAe,EAAA,CAClC,MAAM,IAAI,KAAA,CAAM,qBAAqB,CAAA,CAEvC,IAAMK,CAAAA,CAAU,WAAA,CAAY,MAAA,CAAOL,CAAE,CAAA,CACjC,IAAI,UAAA,CAAWA,CAAAA,CAAG,MAAA,CAAQA,CAAAA,CAAG,UAAA,CAAYA,CAAAA,CAAG,UAAU,CAAA,CACtD,IAAI,UAAA,CAAWA,CAAE,CAAA,CACfC,CAAAA,CAAK,MAAMT,CAAAA,CAASC,CAAAA,CAAK,IAAI,UAAA,CAAW,EAAE,CAAA,CAAG,IAAI,UAAA,CAAW,EAAE,CAAC,CAAA,CAEjEa,CAAAA,CAAM,CAAA,CACV,GAAA,CAAA,IAAS,CAAA,CAAIL,CAAAA,CAAG,MAAA,CAAS,CAAA,CAAG,CAAA,EAAK,CAAA,CAAG,CAAA,EAAA,CAClC,CAACK,CAAAA,CAAKL,CAAAA,CAAG,CAAC,CAAC,CAAA,CAAI,CAAEA,CAAAA,CAAG,CAAC,CAAA,GAAM,CAAA,CAAK,GAAA,CAAA,CAAQA,CAAAA,CAAG,CAAC,CAAA,EAAK,CAAA,CAAKK,CAAAA,CAAAA,CAAO,GAAI,CAAA,CAEnEL,CAAAA,CAAGA,CAAAA,CAAG,MAAA,CAAS,CAAC,CAAA,EAAMK,CAAAA,CAAM,GAAA,CAAc,GAAA,CAE1C,IAAMC,CAAAA,CAAU,IAAI,UAAA,CAAW,EAAE,CAAA,CACjC,OAAAA,CAAAA,CAAQ,GAAA,CAAI,MAAMT,CAAAA,CAAQ,CAAA,CAAML,CAAAA,CAAKY,CAAAA,CAASJ,CAAE,CAAA,CAAG,CAAC,CAAA,CACpDM,CAAAA,CAAQ,GAAA,CAAI,MAAMT,CAAAA,CAAQ,CAAA,CAAML,CAAAA,CAAKY,CAAAA,CAASJ,CAAE,CAAA,CAAG,EAAE,CAAA,CAS9C,CACL,GAAA,CARS,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CAC7B,KAAA,CACAM,CAAAA,CACA,CAAE,IAAA,CAAM,SAAA,CAAW,MAAA,CAAQ,GAAI,CAAA,CAC/B,CAAA,CAAA,CACA,CAAC,GAAGd,CAAAA,CAAI,MAAM,CAChB,CAAA,CAGE,EAAA,CAAIU,iCAAAA,CAAiBE,CAAQ,QAAA,CAAS,EAAE,CAAC,CAC3C,CACF,CAxCeR,iCAAAA,CAAAO,CAAA,gBAAA,CAAA,CA6Cf,MAAA,SAAsBI,CAAAA,CAAYC,CAAAA,CAG/BhB,CAAAA,CAAgBC,CAAAA,CAA0C,CAC3D,IAAMgB,CAAAA,CAAU,MAAMN,CAAAA,CAAeX,CAAAA,CAAKgB,CAAAA,CAAO,EAAE,CAAA,CACnD,OAAO,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CACzB,CACE,IAAA,CAAM,SAAA,CACN,EAAA,CAAIC,CAAAA,CAAQ,EAAA,CACZ,SAAA,CAAW,GAAA,CACX,cAAA,kBAAgBD,CAAAA,CAAO,cAAA,SAAkB,IAAI,YAC/C,CAAA,CACAC,CAAAA,CAAQ,GAAA,CACRhB,CACF,CACF,CAfsBG,iCAAAA,CAAAW,CAAA,aAAA,CAAA,CAqBtB,MAAA,SAAsBG,CAAAA,CAAYF,CAAAA,CAG/BhB,CAAAA,CAAgBC,CAAAA,CAA0C,CAC3D,IAAMgB,CAAAA,CAAU,MAAMN,CAAAA,CAAeX,CAAAA,CAAKgB,CAAAA,CAAO,EAAE,CAAA,CACnD,OAAO,MAAM,MAAA,CAAO,MAAA,CAAO,OAAA,CACzB,CACE,IAAA,CAAM,SAAA,CACN,EAAA,CAAIC,CAAAA,CAAQ,EAAA,CACZ,SAAA,CAAW,GAAA,CACX,cAAA,kBAAgBD,CAAAA,CAAO,cAAA,SAAkB,IAAI,YAC/C,CAAA,CACAC,CAAAA,CAAQ,GAAA,CACRhB,CACF,CACF,CAfsBG,iCAAAA,CAAAc,CAAA,aAAA,CAAA,CAuBtB,MAAA,SAAsBC,CAAAA,CAAgBC,CAAAA,CAA2C,CAC/E,OAAO,MAAM,MAAA,CAAO,MAAA,CAAO,WAAA,CACzB,CACE,IAAA,CAAM,SAAA,CAEN,MAAA,CAAQ,GACV,CAAA,CACAA,CAAAA,CACA,CAAC,SAAA,CAAW,SAAS,CACvB,CACF,CAVsBhB,iCAAAA,CAAAe,CAAA,iBAAA,CAAA,CAkBtB,MAAA,SAAsBE,CAAAA,CAAcC,CAAAA,CAA0CC,CAAAA,CAAoCH,CAAAA,CAA2C,CAC3J,OAAO,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CACzBE,CAAAA,CACAC,CAAAA,CACA,CAAE,IAAA,CAAM,SAAA,CAAW,MAAA,CAAQ,GAAI,CAAA,CAC/BH,CAAAA,CACA,CAAC,SAAA,CAAW,SAAS,CACvB,CACF,CARsBhB,iCAAAA,CAAAiB,CAAA,eAAA,CAAA,CAgBtB,MAAA,SAAsBG,CAAAA,CAAcF,CAAAA,CAA0CtB,CAAAA,CAAmD,CAC/H,OAAO,MAAM,MAAA,CAAO,MAAA,CAAO,SAAA,CAAUsB,CAAAA,CAAQtB,CAAG,CAClD,CAFsBI,iCAAAA,CAAAoB,CAAA,eAAA,CAAA,CAAA,0EAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-A6DSKTWF.cjs","sourcesContent":[null,"// Original at https://github.com/dchest/xaes MIT License as of 2024-07-02\n// More at https://words.filippo.io/dispatches/xaes-256-gcm/\n\nimport { ensureUint8Array } from '../data/bin'\n\n/**\n * Implementation of XAES-256-GCM as defined in https://c2sp.org/XAES-256-GCM\n * based on the Web Cryptography API (https://www.w3.org/TR/WebCryptoAPI/).\n *\n * It uses a 256-bit AES-CBC CryptoKey and a 192-bit nonce to derive\n * a 256-bit key and a 96-bit nonce for AES-GCM.\n *\n * Due to the use of the standard CryptoKey and Web Cryptography API operations,\n * this implementation is fully compatible with other parts of the Web Cryptography API.\n * For example, keys can be stored in IndexedDB and be non-extractable. The only\n * additional requirement is that the key must have 'encrypt' usage even for decryption,\n * however, there's no real distinction between encryption and decryption operations\n * for AES-GCM anyway (you can simulate decryption by encrypting the ciphertext).\n */\n\n/**\n * Generates an AES block using the given key and data xored with the given xor.\n */\nasync function aesBlock(key: CryptoKey, data: BufferSource, xor: BufferSource): Promise<Uint8Array> {\n const block = await crypto.subtle.encrypt(\n { name: 'AES-CBC', iv: xor },\n key,\n data,\n )\n return new Uint8Array(block, 0, 16)\n}\n\n/**\n * Derives a half key.\n */\nasync function halfKey(index: number, key: CryptoKey, iv: Uint8Array, k1: Uint8Array): Promise<Uint8Array> {\n const m = new Uint8Array(16)\n m[1] = index\n m[2] = 0x58 // 'X'\n m.set(ensureUint8Array(iv.subarray(0, 12)), 4)\n return await aesBlock(key, m, ensureUint8Array(k1))\n}\n\n/**\n * Derives a 256-bit key and 96-bit nonce from the given 256-bit key and a 192-bit nonce.\n */\nasync function deriveKeyNonce(key: CryptoKey, iv: BufferSource): Promise<{ key: CryptoKey, iv: Uint8Array }> {\n if (key.algorithm.name !== 'AES-CBC') {\n throw new Error('key must be for AES-CBC')\n }\n if (!key.usages.includes('encrypt')) {\n throw new Error('key must have \\'encrypt\\' usage')\n }\n // @ts-expect-error todo\n if (key.algorithm.length !== 256) {\n throw new Error('key must be 256 bits')\n }\n if (iv == null || iv.byteLength !== 24) {\n throw new Error('iv must be 24 bytes')\n }\n const ivBytes = ArrayBuffer.isView(iv)\n ? new Uint8Array(iv.buffer, iv.byteOffset, iv.byteLength)\n : new Uint8Array(iv)\n const k1 = await aesBlock(key, new Uint8Array(16), new Uint8Array(16))\n\n let msb = 0\n for (let i = k1.length - 1; i >= 0; i--) {\n [msb, k1[i]] = [(k1[i] >>> 7) & 0xFF, ((k1[i] << 1) | msb) & 0xFF]\n }\n k1[k1.length - 1] ^= (msb * 0b10000111) & 0xFF\n\n const kxBytes = new Uint8Array(32)\n kxBytes.set(await halfKey(0x01, key, ivBytes, k1), 0)\n kxBytes.set(await halfKey(0x02, key, ivBytes, k1), 16)\n\n const kx = await crypto.subtle.importKey(\n 'raw',\n kxBytes,\n { name: 'AES-GCM', length: 256 },\n false,\n [...key.usages],\n )\n return {\n key: kx,\n iv: ensureUint8Array(ivBytes.subarray(12)),\n }\n}\n/**\n * Encrypts data using XAES-256-GCM with the given key and iv.\n * Key must be a 256-bit AES-CBC CryptoKey with 'encrypt' usage.\n */\nexport async function encryptXAES(params: {\n iv: BufferSource\n additionalData?: BufferSource\n}, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n const derived = await deriveKeyNonce(key, params.iv)\n return await crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv: derived.iv as BufferSource,\n tagLength: 128,\n additionalData: params.additionalData ?? new Uint8Array(),\n },\n derived.key,\n data,\n )\n}\n\n/**\n * Decrypts data using XAES-256-GCM with the given key and iv.\n * Key must be a 256-bit AES-CBC CryptoKey with 'encrypt' and 'decrypt' usages.\n */\nexport async function decryptXAES(params: {\n iv: BufferSource\n additionalData?: BufferSource\n}, key: CryptoKey, data: BufferSource): Promise<ArrayBuffer> {\n const derived = await deriveKeyNonce(key, params.iv)\n return await crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv: derived.iv as BufferSource,\n tagLength: 128,\n additionalData: params.additionalData ?? new Uint8Array(),\n },\n derived.key,\n data,\n )\n}\n\n/**\n * Generate a random key suitable for XAES-256-GCM.\n * The actual key is an AES-CBC CryptoKey with 256-bit length.\n *\n * This function is not necessary, as you can use crypto.subtle.generateKey with AES-CBC directly.\n */\nexport async function generateKeyXAES(extractable?: boolean): Promise<CryptoKey> {\n return await crypto.subtle.generateKey(\n {\n name: 'AES-CBC',\n // @ts-expect-error todo\n length: 256,\n },\n extractable,\n ['encrypt', 'decrypt'],\n )\n}\n\n/**\n * Import a key suitable for XAES-256-GCM.\n * The actual key must be an AES-CBC CryptoKey with 256-bit length.\n *\n * This function is not necessary, as you can use crypto.subtle.importKey with AES-CBC directly.\n */\nexport async function importKeyXAES(format: 'jwk' | 'raw' | 'pkcs8' | 'spki', keyData: BufferSource | JsonWebKey, extractable?: boolean): Promise<CryptoKey> {\n return await crypto.subtle.importKey( // @ts-expect-error-next-line\n format,\n keyData,\n { name: 'AES-CBC', length: 256 },\n extractable,\n ['encrypt', 'decrypt'],\n )\n}\n\n/**\n * Export a key.\n * The resulting export will have AES-CBC algorithm specified.\n *\n * This function is not necessary, as you can use crypto.subtle.exportKey directly.\n */\nexport async function exportKeyXAES(format: 'jwk' | 'pkcs8' | 'raw' | 'spki', key: CryptoKey): Promise<ArrayBuffer | JsonWebKey> {\n return await crypto.subtle.exportKey(format, key)\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/home/runner/work/zeed/zeed/dist/chunk-ABCQXAMV.cjs","../src/common/msg/emitter.ts"],"names":["Emitter","__name","DefaultLogger","target","name","args","event","subscribers","fn","all","err","results","opt","priority","slen","sobj","pos","i","s","handlers","handler","listener","onceListener","f","timeoutMS","resolve","reject","disposeTimer","disposeListener","value","safeTimeout","getGlobalEmitter","emitter","getGlobalContext"],"mappings":"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","file":"/home/runner/work/zeed/zeed/dist/chunk-ABCQXAMV.cjs","sourcesContent":[null,"import type { DisposerFunction } from '../dispose-types'\nimport { getGlobalContext } from '../global'\nimport { DefaultLogger } from '../log/log'\nimport { safeTimeout } from '../timeout'\n\nexport type EmitterHandler = (...objs: any[]) => void\nexport type EmitterAllHandler<T = string> = (key: T, ...objs: any[]) => void\n\n// For magic see https://www.npmjs.com/package/tiny-typed-emitter / License MIT\n// https://stackoverflow.com/a/61609010/140927\n// https://basarat.gitbook.io/typescript/main-1/typed-event\n// https://github.com/andywer/typed-emitter#extending-an-emitter\n\n// TODO: Allow symbols? https://github.com/sindresorhus/emittery\n\nexport declare type ListenerSignature<L> = {\n [E in keyof L]: (...args: any[]) => any\n}\n\nexport declare interface DefaultListener {\n [k: string]: (...args: any[]) => any\n}\n\ninterface EmitterSubscriber {\n fn: EmitterHandler // (...args: any[]) => any\n priority: number\n}\n\nexport interface EmitterSubscriberOptions {\n priority?: number\n}\n\nexport class Emitter<\n RemoteListener extends ListenerSignature<RemoteListener> = DefaultListener,\n LocalListener extends ListenerSignature<LocalListener> = DefaultListener,\n> {\n private subscribers: Record<any, EmitterSubscriber[]> = {}\n private subscribersOnAny: any[] = []\n\n _logEmitter = DefaultLogger('zeed:emitter', 'warn')\n\n /** RPC like emitting of events. */\n call: RemoteListener = new Proxy<RemoteListener>({} as any, {\n get:\n (target: any, name: any) =>\n async (...args: any): Promise<boolean> =>\n await this.emit(name, ...args),\n })\n\n /**\n * Emits an event to all subscribers and executes their corresponding event handlers.\n *\n * @param event - The event to emit.\n * @param args - The arguments to pass to the event handlers.\n * @returns A promise that resolves to an array of results from all subscribers, or undefined if no subscribers are present.\n */\n public async getAll<U extends keyof RemoteListener>(event: U, ...args: Parameters<RemoteListener[U]>): Promise<ReturnType<RemoteListener[U]>[] | undefined> {\n try {\n const subscribers = (this.subscribers[event] || []) as EmitterSubscriber[]\n this._logEmitter.debug('emit', this?.constructor?.name, event, ...args, subscribers)\n\n this.subscribersOnAny.forEach(fn => fn(event, ...args))\n\n if (subscribers.length > 0) {\n const all = subscribers.map(({ fn }) => {\n try {\n return Promise.resolve(fn(...args))\n }\n catch (err) {\n this._logEmitter.warn('emit warning:', err)\n }\n return null\n }).filter(fn => fn != null)\n return (await Promise.all(all)) as any[]\n }\n }\n catch (err) {\n this._logEmitter.error('emit exception', err)\n }\n return undefined\n }\n\n /**\n * Emits an event to all subscribers and executes their corresponding event handlers.\n *\n * @param event - The event to emit.\n * @param args - The arguments to pass to the event handlers.\n * @returns A promise that resolves to the result of the first subscriber's handler, or undefined if no subscribers are present.\n */\n public async get<U extends keyof RemoteListener>(event: U, ...args: Parameters<RemoteListener[U]>): Promise<ReturnType<RemoteListener[U]> | undefined> {\n const results = await this.getAll(event, ...args)\n if (results && results.length > 0) {\n return results[0] // Return first result\n }\n return undefined\n }\n\n /**\n * Emits an event to all subscribers and executes their corresponding event handlers.\n *\n * @param event - The event to emit.\n * @param args - The arguments to pass to the event handlers.\n * @returns A promise that resolves to a boolean indicating whether the event was successfully emitted.\n */\n public async emit<U extends keyof RemoteListener>(event: U, ...args: Parameters<RemoteListener[U]>): Promise<boolean> {\n const result = await this.getAll(event, ...args)\n return result != null\n }\n\n public onAny(fn: EmitterHandler) {\n this.subscribersOnAny.push(fn)\n }\n\n public on<U extends keyof LocalListener>(\n event: U,\n fn: LocalListener[U],\n opt: EmitterSubscriberOptions = {},\n ): DisposerFunction {\n const { priority = 0 } = opt\n const subscribers = (this.subscribers[event] || [])\n const slen = subscribers.length\n const sobj = { fn, priority }\n if (slen <= 0) {\n this.subscribers[event] = [sobj]\n }\n else {\n let pos = slen\n for (let i = subscribers.length - 1; i >= 0; i--) {\n const s = subscribers[i]\n // Insert after last entry of same priority\n if (priority <= s.priority)\n break\n pos -= 1\n }\n subscribers.splice(pos, 0, sobj) // in place\n }\n return () => {\n this.off(event, fn)\n }\n }\n\n public onCall(handlers: Partial<LocalListener>) {\n for (const [name, handler] of Object.entries(handlers))\n this.on(name as any, handler as any)\n }\n\n public once<U extends keyof LocalListener>(\n event: U,\n listener: LocalListener[U],\n ): DisposerFunction {\n const onceListener = async (...args: any[]) => {\n this.off(event, onceListener as any)\n return await Promise.resolve(listener(...args))\n }\n this.on(event, onceListener as any)\n return () => {\n this.off(event, listener)\n }\n }\n\n public off<U extends keyof LocalListener>(\n event: U,\n listener: LocalListener[U],\n ): this {\n // log(\"off\", key)\n this.subscribers[event] = (this.subscribers[event] || []).filter(f => listener && f.fn !== listener)\n return this\n }\n\n public removeAllListeners(): this {\n this.subscribers = {}\n return this\n }\n\n public hasListeners(event: keyof LocalListener): boolean {\n return !!this.subscribers[event] && this.subscribers[event].length > 0\n }\n\n ///\n\n waitOn<U extends keyof LocalListener, R = Parameters<LocalListener[U]>[0]>(\n event: U,\n timeoutMS = 1000,\n ): Promise<R> {\n return new Promise((resolve, reject) => {\n let disposeTimer: any\n\n const disposeListener = this.once(event, ((value): void => {\n disposeTimer?.()\n resolve(value)\n }) as LocalListener[U])\n\n disposeTimer = safeTimeout(() => {\n disposeListener()\n reject(new Error('Did not respond in time'))\n }, timeoutMS)\n })\n }\n\n // For compatibility reasons: provide explicitly typed wrapper methods so\n // documentation generator (TypeDoc) can resolve signatures/URLs correctly.\n public addEventListener<U extends keyof LocalListener>(\n event: U,\n fn: LocalListener[U],\n opt: EmitterSubscriberOptions = {},\n ): DisposerFunction {\n return this.on(event, fn, opt)\n }\n\n public removeEventListener<U extends keyof LocalListener>(\n event: U,\n listener: LocalListener[U],\n ): this {\n return this.off(event, listener)\n }\n}\n\ndeclare global {\n interface ZeedGlobalContext {\n emitter?: Emitter\n }\n\n /**\n * Global emitter interface for Zeed, used for cross-module event emission.\n * @category Global\n */\n interface ZeedGlobalEmitter {}\n}\n\n/** Global emitter that will listen even across modules */\nexport function getGlobalEmitter<T extends ListenerSignature<T> = ZeedGlobalEmitter>(): Emitter<T> {\n let emitter = getGlobalContext().emitter\n if (!emitter) {\n emitter = new Emitter()\n getGlobalContext().emitter = emitter\n }\n return emitter as any\n}\n\n// Public alias so typedoc lists the global emitter under an Emitter-prefixed name\nexport interface ZeedGlobalEmitter extends DefaultListener {}\n"]}
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-ABCQXAMV.cjs","../src/common/msg/emitter.ts"],"names":["Emitter","__name","DefaultLogger","target","name","args","event","subscribers","fn","all","err","results","opt","priority","slen","sobj","pos","i","s","handlers","handler","listener","onceListener","f","timeoutMS","resolve","reject","disposeTimer","disposeListener","value","safeTimeout","getGlobalEmitter","emitter","getGlobalContext"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-ABCQXAMV.cjs","sourcesContent":[null,"import type { DisposerFunction } from '../dispose-types'\nimport { getGlobalContext } from '../global'\nimport { DefaultLogger } from '../log/log'\nimport { safeTimeout } from '../timeout'\n\nexport type EmitterHandler = (...objs: any[]) => void\nexport type EmitterAllHandler<T = string> = (key: T, ...objs: any[]) => void\n\n// For magic see https://www.npmjs.com/package/tiny-typed-emitter / License MIT\n// https://stackoverflow.com/a/61609010/140927\n// https://basarat.gitbook.io/typescript/main-1/typed-event\n// https://github.com/andywer/typed-emitter#extending-an-emitter\n\n// TODO: Allow symbols? https://github.com/sindresorhus/emittery\n\nexport declare type ListenerSignature<L> = {\n [E in keyof L]: (...args: any[]) => any\n}\n\nexport declare interface DefaultListener {\n [k: string]: (...args: any[]) => any\n}\n\ninterface EmitterSubscriber {\n fn: EmitterHandler // (...args: any[]) => any\n priority: number\n}\n\nexport interface EmitterSubscriberOptions {\n priority?: number\n}\n\nexport class Emitter<\n RemoteListener extends ListenerSignature<RemoteListener> = DefaultListener,\n LocalListener extends ListenerSignature<LocalListener> = DefaultListener,\n> {\n private subscribers: Record<any, EmitterSubscriber[]> = {}\n private subscribersOnAny: any[] = []\n\n _logEmitter = DefaultLogger('zeed:emitter', 'warn')\n\n /** RPC like emitting of events. */\n call: RemoteListener = new Proxy<RemoteListener>({} as any, {\n get:\n (target: any, name: any) =>\n async (...args: any): Promise<boolean> =>\n await this.emit(name, ...args),\n })\n\n /**\n * Emits an event to all subscribers and executes their corresponding event handlers.\n *\n * @param event - The event to emit.\n * @param args - The arguments to pass to the event handlers.\n * @returns A promise that resolves to an array of results from all subscribers, or undefined if no subscribers are present.\n */\n public async getAll<U extends keyof RemoteListener>(event: U, ...args: Parameters<RemoteListener[U]>): Promise<ReturnType<RemoteListener[U]>[] | undefined> {\n try {\n const subscribers = (this.subscribers[event] || []) as EmitterSubscriber[]\n this._logEmitter.debug('emit', this?.constructor?.name, event, ...args, subscribers)\n\n this.subscribersOnAny.forEach(fn => fn(event, ...args))\n\n if (subscribers.length > 0) {\n const all = subscribers.map(({ fn }) => {\n try {\n return Promise.resolve(fn(...args))\n }\n catch (err) {\n this._logEmitter.warn('emit warning:', err)\n }\n return null\n }).filter(fn => fn != null)\n return (await Promise.all(all)) as any[]\n }\n }\n catch (err) {\n this._logEmitter.error('emit exception', err)\n }\n return undefined\n }\n\n /**\n * Emits an event to all subscribers and executes their corresponding event handlers.\n *\n * @param event - The event to emit.\n * @param args - The arguments to pass to the event handlers.\n * @returns A promise that resolves to the result of the first subscriber's handler, or undefined if no subscribers are present.\n */\n public async get<U extends keyof RemoteListener>(event: U, ...args: Parameters<RemoteListener[U]>): Promise<ReturnType<RemoteListener[U]> | undefined> {\n const results = await this.getAll(event, ...args)\n if (results && results.length > 0) {\n return results[0] // Return first result\n }\n return undefined\n }\n\n /**\n * Emits an event to all subscribers and executes their corresponding event handlers.\n *\n * @param event - The event to emit.\n * @param args - The arguments to pass to the event handlers.\n * @returns A promise that resolves to a boolean indicating whether the event was successfully emitted.\n */\n public async emit<U extends keyof RemoteListener>(event: U, ...args: Parameters<RemoteListener[U]>): Promise<boolean> {\n const result = await this.getAll(event, ...args)\n return result != null\n }\n\n public onAny(fn: EmitterHandler) {\n this.subscribersOnAny.push(fn)\n }\n\n public on<U extends keyof LocalListener>(\n event: U,\n fn: LocalListener[U],\n opt: EmitterSubscriberOptions = {},\n ): DisposerFunction {\n const { priority = 0 } = opt\n const subscribers = (this.subscribers[event] || [])\n const slen = subscribers.length\n const sobj = { fn, priority }\n if (slen <= 0) {\n this.subscribers[event] = [sobj]\n }\n else {\n let pos = slen\n for (let i = subscribers.length - 1; i >= 0; i--) {\n const s = subscribers[i]\n // Insert after last entry of same priority\n if (priority <= s.priority)\n break\n pos -= 1\n }\n subscribers.splice(pos, 0, sobj) // in place\n }\n return () => {\n this.off(event, fn)\n }\n }\n\n public onCall(handlers: Partial<LocalListener>) {\n for (const [name, handler] of Object.entries(handlers))\n this.on(name as any, handler as any)\n }\n\n public once<U extends keyof LocalListener>(\n event: U,\n listener: LocalListener[U],\n ): DisposerFunction {\n const onceListener = async (...args: any[]) => {\n this.off(event, onceListener as any)\n return await Promise.resolve(listener(...args))\n }\n this.on(event, onceListener as any)\n return () => {\n this.off(event, listener)\n }\n }\n\n public off<U extends keyof LocalListener>(\n event: U,\n listener: LocalListener[U],\n ): this {\n // log(\"off\", key)\n this.subscribers[event] = (this.subscribers[event] || []).filter(f => listener && f.fn !== listener)\n return this\n }\n\n public removeAllListeners(): this {\n this.subscribers = {}\n return this\n }\n\n public hasListeners(event: keyof LocalListener): boolean {\n return !!this.subscribers[event] && this.subscribers[event].length > 0\n }\n\n ///\n\n waitOn<U extends keyof LocalListener, R = Parameters<LocalListener[U]>[0]>(\n event: U,\n timeoutMS = 1000,\n ): Promise<R> {\n return new Promise((resolve, reject) => {\n let disposeTimer: any\n\n const disposeListener = this.once(event, ((value): void => {\n disposeTimer?.()\n resolve(value)\n }) as LocalListener[U])\n\n disposeTimer = safeTimeout(() => {\n disposeListener()\n reject(new Error('Did not respond in time'))\n }, timeoutMS)\n })\n }\n\n // For compatibility reasons: provide explicitly typed wrapper methods so\n // documentation generator (TypeDoc) can resolve signatures/URLs correctly.\n public addEventListener<U extends keyof LocalListener>(\n event: U,\n fn: LocalListener[U],\n opt: EmitterSubscriberOptions = {},\n ): DisposerFunction {\n return this.on(event, fn, opt)\n }\n\n public removeEventListener<U extends keyof LocalListener>(\n event: U,\n listener: LocalListener[U],\n ): this {\n return this.off(event, listener)\n }\n}\n\ndeclare global {\n interface ZeedGlobalContext {\n emitter?: Emitter\n }\n\n /**\n * Global emitter interface for Zeed, used for cross-module event emission.\n * @category Global\n */\n interface ZeedGlobalEmitter {}\n}\n\n/** Global emitter that will listen even across modules */\nexport function getGlobalEmitter<T extends ListenerSignature<T> = ZeedGlobalEmitter>(): Emitter<T> {\n let emitter = getGlobalContext().emitter\n if (!emitter) {\n emitter = new Emitter()\n getGlobalContext().emitter = emitter\n }\n return emitter as any\n}\n\n// Public alias so typedoc lists the global emitter under an Emitter-prefixed name\nexport interface ZeedGlobalEmitter extends DefaultListener {}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-AERHWWDH.cjs","../src/common/data/rounding.ts"],"names":["isHalf","value","__name","isEven","roundUp","roundDown","roundHalfUp","roundHalfOdd","rounded","roundHalfAwayFromZero","roundHalfDown","roundHalfEven","roundHalfTowardsZero","roundArrayOfNumbersToMatchSum","ipt","max","decimalPlaces","iptPercents","length","out","total","sum","powDecimalPlaces","pow100","check100","i","totalDiff","roundGrain","grainCount","diffs","_","idx","maxDiff","n","roundArrayOfObjectsToMatchSum","arr","name","o"],"mappings":"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","file":"/Users/dirk/work/github-zeed/dist/chunk-AERHWWDH.cjs","sourcesContent":[null,"// From https://v2.dinerojs.com/docs/api/formatting/to-unit MIT\n\nimport { sum } from './math'\n\nexport type RoundingMode = (value: number) => number\n\nexport function isHalf(value: number): boolean {\n return Math.abs(value) % 1 === 0.5\n}\nexport function isEven(value: number): boolean {\n return value % 2 === 0\n}\n\nexport const roundUp: RoundingMode = value => Math.ceil(value)\nexport const roundDown: RoundingMode = value => Math.floor(value)\nexport const roundHalfUp: RoundingMode = value => Math.round(value)\n\n/**\n * Round a number with half values to nearest odd integer.\n */\nexport const roundHalfOdd: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded - 1 : rounded\n}\n\n/**\n * Round a number with half values to nearest integer farthest from zero.\n */\nexport const roundHalfAwayFromZero: RoundingMode = (value) => {\n return isHalf(value)\n ? Math.sign(value) * Math.ceil(Math.abs(value))\n : Math.round(value)\n}\n\n/**\n * Round a number with half values down.\n */\nexport const roundHalfDown: RoundingMode = value =>\n isHalf(value) ? Math.floor(value) : Math.round(value)\n\n/**\n * Round a number with half values to nearest even integer.\n * https://wiki.c2.com/?BankersRounding\n */\nexport const roundHalfEven: RoundingMode = (value) => {\n const rounded = Math.round(value)\n if (!isHalf(value))\n return rounded\n\n return isEven(rounded) ? rounded : rounded - 1\n}\n\n/**\n * Round a number with half values to nearest integer closest to zero.\n */\nexport const roundHalfTowardsZero: RoundingMode = value =>\n isHalf(value)\n ? Math.sign(value) * Math.floor(Math.abs(value))\n : Math.round(value)\n\n/**\n * This is useful for percentages that should sum up to 100.\n * But can also be fine tuned.\n *\n * Original from https://github.com/super-ienien/percent-round\n */\nexport function roundArrayOfNumbersToMatchSum(ipt: number[], max = 100, decimalPlaces = 0) {\n const iptPercents: number[] = [...ipt]\n const length = ipt.length\n const out: number[] = []\n out.fill(0, length)\n\n const total = sum(iptPercents)\n\n if (total !== 0) {\n const powDecimalPlaces = 10 ** decimalPlaces\n const pow100 = max * powDecimalPlaces\n let check100 = 0\n for (let i = length - 1; i >= 0; i--) {\n iptPercents[i] = max * iptPercents[i] / total\n check100 += out[i] = Math.round(iptPercents[i] * powDecimalPlaces)\n }\n\n if (check100 !== pow100) {\n const totalDiff = (check100 - pow100)\n const roundGrain = 1\n let grainCount = Math.abs(totalDiff)\n const diffs = iptPercents.map((_, i) => Math.abs(out[i] - iptPercents[i] * powDecimalPlaces))\n\n while (grainCount > 0) {\n let idx = 0\n let maxDiff = diffs[0]\n for (let i = 1; i < length; i++) {\n if (maxDiff < diffs[i]) {\n // avoid negative result\n if (check100 > pow100 && out[i] - roundGrain < 0)\n continue\n idx = i\n maxDiff = diffs[i]\n }\n }\n if (check100 > pow100)\n out[idx] -= roundGrain\n else\n out[idx] += roundGrain\n\n diffs[idx] -= roundGrain\n grainCount--\n }\n }\n\n if (powDecimalPlaces > 1)\n return out.map(n => +((n / powDecimalPlaces).toFixed(decimalPlaces)))\n }\n\n return out\n}\n\nexport function roundArrayOfObjectsToMatchSum<T extends Record<string, any>>(arr: T[], name: string, max = 100, decimalPlaces = 0): T[] {\n return roundArrayOfNumbersToMatchSum(arr.map(o => o[name]), max, decimalPlaces)\n .map((o, i) => ({\n ...arr[i],\n [name]: o,\n }))\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-AH7ZMSSE.cjs","../src/browser/log/log-colors.ts"],"names":["browserSupportsColors","__name"],"mappings":"AAAA,iIAAwC,SCIxBA,CAAAA,CAAAA,CAAiC,CAI/C,OACE,OAAO,MAAA,CAAW,GAAA,EACf,MAAA,CAAO,OAAA,EAAA,CAEN,MAAA,CAAO,OAAA,CAAQ,IAAA,GAAS,UAAA,EAAc,MAAA,CAAO,OAAA,CAAQ,MAAA,CAAA,CAElD,CAAA,CAAA,CAKP,OAAO,SAAA,CAAc,GAAA,EAClB,SAAA,CAAU,SAAA,EACV,SAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,KAAA,CAAM,uBAAuB,CAAA,CAE3D,CAAA,CAAA,CAMN,OAAO,QAAA,CAAa,GAAA,EAChB,QAAA,CAAS,eAAA,EACT,QAAA,CAAS,eAAA,CAAgB,KAAA,EAEzB,QAAA,CAAS,eAAA,CAAgB,KAAA,CAAM,gBAAA,EAEhC,OAAO,MAAA,CAAW,GAAA,EACjB,MAAA,CAAO,OAAA,EAAA,CAEN,MAAA,CAAO,OAAA,CAAQ,OAAA,EAGb,MAAA,CAAO,OAAA,CAAQ,SAAA,EAAa,MAAA,CAAO,OAAA,CAAQ,KAAA,CAAA,EAG7C,OAAO,SAAA,CAAc,GAAA,EACpB,SAAA,CAAU,SAAA,EACV,SAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA,EAExD,MAAA,CAAO,QAAA,CAAS,MAAA,CAAO,EAAA,CAAI,EAAE,CAAA,EAAK,EAAA,EAEnC,OAAO,SAAA,CAAc,GAAA,EACpB,SAAA,CAAU,SAAA,EACV,SAAA,CAAU,SAAA,CAAU,WAAA,CAAY,CAAA,CAAE,KAAA,CAAM,oBAAoB,CAEvE,CAlDgBC,iCAAAA,CAAAD,CAAA,uBAAA,CAAA,CAAA,cAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-AH7ZMSSE.cjs","sourcesContent":[null,"/* eslint-disable node/prefer-global/process */\n\n// Taken from https://github.com/visionmedia/debug/blob/master/src/browser.js#L27\n\nexport function browserSupportsColors(): boolean {\n // NB: In an Electron preload script, document will be defined but not fully\n // initialized. Since we know we're in Chrome, we'll just detect this case\n // explicitly\n if (\n typeof window !== 'undefined'\n && window.process\n // @ts-expect-error xxx\n && (window.process.type === 'renderer' || window.process.__nwjs)\n ) {\n return true\n }\n\n // Internet Explorer and Edge do not support colors.\n if (\n typeof navigator !== 'undefined'\n && navigator.userAgent\n && navigator.userAgent.toLowerCase().match(/(edge|trident)\\/(\\d+)/)\n ) {\n return false\n }\n\n // Is webkit? http://stackoverflow.com/a/16459606/376773\n // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632\n return (\n (typeof document !== 'undefined'\n && document.documentElement\n && document.documentElement.style\n // @ts-expect-error xxx\n && document.documentElement.style.WebkitAppearance)\n // Is firebug? http://stackoverflow.com/a/398120/376773\n || (typeof window !== 'undefined'\n && window.console\n // @ts-expect-error xxx\n && (window.console.firebug\n // @ts-expect-error xxx\n\n || (window.console.exception && window.console.table)))\n // Is firefox >= v31?\n // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages\n || (typeof navigator !== 'undefined'\n && navigator.userAgent\n && navigator.userAgent.toLowerCase().match(/firefox\\/(\\d+)/)\n // eslint-disable-next-line regexp/no-legacy-features\n && Number.parseInt(RegExp.$1, 10) >= 31)\n // Double check webkit in userAgent just in case we are in a worker\n || (typeof navigator !== 'undefined'\n && navigator.userAgent\n && navigator.userAgent.toLowerCase().match(/applewebkit\\/(\\d+)/))\n )\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["/
|
|
1
|
+
{"version":3,"sources":["/Users/dirk/work/github-zeed/dist/chunk-B2XPF5R4.cjs","../src/common/data/orderby.ts"],"names":["parseOrderby","value","field","orderby","__name","composeOrderby","asc"],"mappings":"AAAA,iIAAwC,SCAxBA,CAAAA,CAAaC,CAAAA,CAAQ,EAAA,CAKnC,CACA,GAAI,CAACC,CAAAA,CAAQ,EAAA,CAAIC,CAAAA,CAAU,KAAK,CAAA,CAAIF,CAAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CACnD,OAAAE,CAAAA,CAAUA,CAAAA,CAAQ,WAAA,CAAY,CAAA,CACvB,CACL,KAAA,CAAAD,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,GAAA,CAAKA,CAAAA,GAAY,MAAA,CACjB,IAAA,CAAMA,CAAAA,GAAY,MACpB,CACF,CAdgBC,iCAAAA,CAAAJ,CAAA,cAAA,CAAA,CAgBT,SAASK,CAAAA,CAAeH,CAAAA,CAAeI,CAAAA,CAAM,CAAA,CAAA,CAAc,CAChE,MAAO,CAAA,EAAA","file":"/Users/dirk/work/github-zeed/dist/chunk-B2XPF5R4.cjs","sourcesContent":[null,"export function parseOrderby(value = ''): {\n field: string\n orderby: string\n asc: boolean\n desc: boolean\n} {\n let [field = '', orderby = 'asc'] = value.split(' ')\n orderby = orderby.toLowerCase()\n return {\n field,\n orderby,\n asc: orderby !== 'desc',\n desc: orderby === 'desc',\n }\n}\n\nexport function composeOrderby(field: string, asc = true): string {\n return `${field} ${asc ? 'asc' : 'desc'}`\n}\n\n// Classic compare function with direction flag\nexport function cmp(a: any, b: any, asc = true): -1 | 0 | 1 {\n const aa = a || 0\n const bb = b || 0\n return aa > bb ? (asc ? 1 : -1) : aa < bb ? (asc ? -1 : 1) : 0 // use Math.sign(?) for performance?\n}\n\n// todo: support localeCompare()\nexport function sortedOrderby<T>(values: T[], ...orderby: string[]): T[] {\n if (orderby.length > 0) {\n const orderByList = orderby.map(parseOrderby)\n // let { field, asc } = parseOrderby(orderby)\n // if (field != null && typeof field === \"string\") {\n // let bigger = asc ? 1 : -1\n // let smaller = asc ? -1 : 1\n const sortValues = Array.from(values)\n sortValues.sort((a: any, b: any): number => {\n for (const { field, asc } of orderByList) {\n const result = cmp(a[field], b[field], asc)\n if (result !== 0)\n return result\n }\n return 0\n // const aa = a[field] || 0\n // const bb = b[field] || 0\n // return aa > bb ? bigger : aa < bb ? smaller : 0\n })\n return sortValues\n }\n return values\n}\n"]}
|