zeed 1.3.0 → 1.4.0
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 +50 -211
- package/README.md +16 -0
- package/dist/_experiments/bitcask.cjs +243 -1
- package/dist/_experiments/bitcask.cjs.map +1 -1
- package/dist/_experiments/bitcask.mjs +230 -1
- package/dist/_experiments/bitcask.mjs.map +1 -1
- package/dist/bin-BAoS4qtm.mjs +593 -0
- package/dist/{bin-SPdenYkw.mjs.map → bin-BAoS4qtm.mjs.map} +1 -1
- package/dist/bin-Ddaz2lxM.cjs +862 -0
- package/dist/{bin-Ce3i6ABn.cjs.map → bin-Ddaz2lxM.cjs.map} +1 -1
- package/dist/browser/base64.cjs +14 -1
- package/dist/browser/base64.cjs.map +1 -1
- package/dist/browser/base64.mjs +12 -1
- package/dist/browser/base64.mjs.map +1 -1
- package/dist/browser/gravatar.cjs +186 -1
- package/dist/browser/gravatar.cjs.map +1 -1
- package/dist/browser/gravatar.mjs +184 -1
- package/dist/browser/gravatar.mjs.map +1 -1
- package/dist/browser/index.cjs +14 -1
- package/dist/browser/index.mjs +8 -1
- package/dist/browser/localstorage.cjs +46 -1
- package/dist/browser/localstorage.cjs.map +1 -1
- package/dist/browser/localstorage.mjs +45 -1
- package/dist/browser/localstorage.mjs.map +1 -1
- package/dist/browser/log/index.cjs +8 -1
- package/dist/browser/log/index.mjs +5 -1
- package/dist/browser/log/log-browser-factory.cjs +65 -1
- package/dist/browser/log/log-browser-factory.cjs.map +1 -1
- package/dist/browser/log/log-browser-factory.mjs +64 -1
- package/dist/browser/log/log-browser-factory.mjs.map +1 -1
- package/dist/browser/log/log-browser.cjs +72 -1
- package/dist/browser/log/log-browser.cjs.map +1 -1
- package/dist/browser/log/log-browser.mjs +71 -1
- package/dist/browser/log/log-browser.mjs.map +1 -1
- package/dist/browser/log/log-colors.cjs +11 -1
- package/dist/browser/log/log-colors.cjs.map +1 -1
- package/dist/browser/log/log-colors.mjs +9 -1
- package/dist/browser/log/log-colors.mjs.map +1 -1
- package/dist/browser/log/log-context-browser.cjs +25 -1
- package/dist/browser/log/log-context-browser.cjs.map +1 -1
- package/dist/browser/log/log-context-browser.mjs +23 -1
- package/dist/browser/log/log-context-browser.mjs.map +1 -1
- package/dist/chunk-DQk6qfdC.mjs +18 -0
- package/dist/chunk-uaV2rQ02.cjs +53 -0
- package/dist/common/assert.cjs +22 -1
- package/dist/common/assert.cjs.map +1 -1
- package/dist/common/assert.mjs +19 -1
- package/dist/common/assert.mjs.map +1 -1
- package/dist/common/bin/index.cjs +106 -1
- package/dist/common/bin/index.cjs.map +1 -1
- package/dist/common/bin/index.mjs +98 -1
- package/dist/common/bin/index.mjs.map +1 -1
- package/dist/common/bin/lib0/binary.cjs +146 -1
- package/dist/common/bin/lib0/binary.cjs.map +1 -1
- package/dist/common/bin/lib0/binary.mjs +80 -1
- package/dist/common/bin/lib0/binary.mjs.map +1 -1
- package/dist/common/bin/lib0/buffer.cjs +42 -1
- package/dist/common/bin/lib0/buffer.cjs.map +1 -1
- package/dist/common/bin/lib0/buffer.mjs +38 -1
- package/dist/common/bin/lib0/buffer.mjs.map +1 -1
- package/dist/common/bin/lib0/create.cjs +24 -1
- package/dist/common/bin/lib0/create.cjs.map +1 -1
- package/dist/common/bin/lib0/create.mjs +21 -1
- package/dist/common/bin/lib0/create.mjs.map +1 -1
- package/dist/common/bin/lib0/decoding.cjs +325 -1
- package/dist/common/bin/lib0/decoding.cjs.map +1 -1
- package/dist/common/bin/lib0/decoding.mjs +298 -1
- package/dist/common/bin/lib0/decoding.mjs.map +1 -1
- package/dist/common/bin/lib0/encoding.cjs +404 -1
- package/dist/common/bin/lib0/encoding.cjs.map +1 -1
- package/dist/common/bin/lib0/encoding.mjs +377 -1
- package/dist/common/bin/lib0/encoding.mjs.map +1 -1
- package/dist/common/bin/lib0/string.cjs +81 -1
- package/dist/common/bin/lib0/string.cjs.map +1 -1
- package/dist/common/bin/lib0/string.mjs +71 -1
- package/dist/common/bin/lib0/string.mjs.map +1 -1
- package/dist/common/crypto/aes-sealed.cjs +34 -1
- package/dist/common/crypto/aes-sealed.cjs.map +1 -1
- package/dist/common/crypto/aes-sealed.mjs +32 -1
- package/dist/common/crypto/aes-sealed.mjs.map +1 -1
- package/dist/common/crypto/crypto.cjs +91 -1
- package/dist/common/crypto/crypto.cjs.map +1 -1
- package/dist/common/crypto/crypto.mjs +80 -1
- package/dist/common/crypto/crypto.mjs.map +1 -1
- package/dist/common/crypto/index.cjs +23 -1
- package/dist/common/crypto/index.mjs +5 -1
- package/dist/common/crypto/xaes.cjs +128 -1
- package/dist/common/crypto/xaes.cjs.map +1 -1
- package/dist/common/crypto/xaes.mjs +123 -1
- package/dist/common/crypto/xaes.mjs.map +1 -1
- package/dist/common/csv.cjs +49 -4
- package/dist/common/csv.cjs.map +1 -1
- package/dist/common/csv.mjs +46 -4
- package/dist/common/csv.mjs.map +1 -1
- package/dist/common/data/array.cjs +299 -1
- package/dist/common/data/array.cjs.map +1 -1
- package/dist/common/data/array.mjs +274 -1
- package/dist/common/data/array.mjs.map +1 -1
- package/dist/common/data/basex-secure.cjs +30 -1
- package/dist/common/data/basex-secure.mjs +3 -1
- package/dist/common/data/basex.cjs +163 -1
- package/dist/common/data/basex.cjs.map +1 -1
- package/dist/common/data/basex.mjs +152 -1
- package/dist/common/data/basex.mjs.map +1 -1
- package/dist/common/data/bin-types.mjs +1 -1
- package/dist/common/data/bin.cjs +21 -1
- package/dist/common/data/bin.mjs +3 -1
- package/dist/common/data/camelcase.cjs +27 -1
- package/dist/common/data/camelcase.cjs.map +1 -1
- package/dist/common/data/camelcase.mjs +22 -1
- package/dist/common/data/camelcase.mjs.map +1 -1
- package/dist/common/data/convert.cjs +104 -1
- package/dist/common/data/convert.cjs.map +1 -1
- package/dist/common/data/convert.mjs +88 -1
- package/dist/common/data/convert.mjs.map +1 -1
- package/dist/common/data/datauri.cjs +32 -1
- package/dist/common/data/datauri.cjs.map +1 -1
- package/dist/common/data/datauri.mjs +27 -1
- package/dist/common/data/datauri.mjs.map +1 -1
- package/dist/common/data/day-legacy.cjs +148 -1
- package/dist/common/data/day-legacy.cjs.map +1 -1
- package/dist/common/data/day-legacy.mjs +143 -1
- package/dist/common/data/day-legacy.mjs.map +1 -1
- package/dist/common/data/day.cjs +335 -1
- package/dist/common/data/day.cjs.map +1 -1
- package/dist/common/data/day.mjs +305 -1
- package/dist/common/data/day.mjs.map +1 -1
- package/dist/common/data/decimal.cjs +28 -1
- package/dist/common/data/decimal.cjs.map +1 -1
- package/dist/common/data/decimal.mjs +23 -1
- package/dist/common/data/decimal.mjs.map +1 -1
- package/dist/common/data/deep.cjs +57 -1
- package/dist/common/data/deep.cjs.map +1 -1
- package/dist/common/data/deep.mjs +54 -1
- package/dist/common/data/deep.mjs.map +1 -1
- package/dist/common/data/diff.cjs +62 -1
- package/dist/common/data/diff.cjs.map +1 -1
- package/dist/common/data/diff.mjs +60 -1
- package/dist/common/data/diff.mjs.map +1 -1
- package/dist/common/data/distributed.cjs +24 -1
- package/dist/common/data/distributed.cjs.map +1 -1
- package/dist/common/data/distributed.mjs +22 -1
- package/dist/common/data/distributed.mjs.map +1 -1
- package/dist/common/data/format.cjs +63 -1
- package/dist/common/data/format.cjs.map +1 -1
- package/dist/common/data/format.mjs +59 -1
- package/dist/common/data/format.mjs.map +1 -1
- package/dist/common/data/html.cjs +13 -1
- package/dist/common/data/html.cjs.map +1 -1
- package/dist/common/data/html.mjs +10 -1
- package/dist/common/data/html.mjs.map +1 -1
- package/dist/common/data/index.cjs +296 -1
- package/dist/common/data/index.mjs +37 -1
- package/dist/common/data/is.cjs +106 -1
- package/dist/common/data/is.cjs.map +1 -1
- package/dist/common/data/is.mjs +85 -1
- package/dist/common/data/is.mjs.map +1 -1
- package/dist/common/data/json.cjs +70 -1
- package/dist/common/data/json.cjs.map +1 -1
- package/dist/common/data/json.mjs +65 -1
- package/dist/common/data/json.mjs.map +1 -1
- package/dist/common/data/list.cjs +32 -1
- package/dist/common/data/list.cjs.map +1 -1
- package/dist/common/data/list.mjs +27 -1
- package/dist/common/data/list.mjs.map +1 -1
- package/dist/common/data/lru.mjs +1 -1
- package/dist/common/data/math.cjs +79 -1
- package/dist/common/data/math.cjs.map +1 -1
- package/dist/common/data/math.mjs +65 -1
- package/dist/common/data/math.mjs.map +1 -1
- package/dist/common/data/message.cjs +30 -1
- package/dist/common/data/message.cjs.map +1 -1
- package/dist/common/data/message.mjs +28 -1
- package/dist/common/data/message.mjs.map +1 -1
- package/dist/common/data/object-changes.cjs +66 -1
- package/dist/common/data/object-changes.cjs.map +1 -1
- package/dist/common/data/object-changes.mjs +63 -1
- package/dist/common/data/object-changes.mjs.map +1 -1
- package/dist/common/data/object.cjs +112 -1
- package/dist/common/data/object.cjs.map +1 -1
- package/dist/common/data/object.mjs +104 -1
- package/dist/common/data/object.mjs.map +1 -1
- package/dist/common/data/orderby.cjs +42 -1
- package/dist/common/data/orderby.cjs.map +1 -1
- package/dist/common/data/orderby.mjs +37 -1
- package/dist/common/data/orderby.mjs.map +1 -1
- package/dist/common/data/path.cjs +26 -1
- package/dist/common/data/path.cjs.map +1 -1
- package/dist/common/data/path.mjs +25 -1
- package/dist/common/data/path.mjs.map +1 -1
- package/dist/common/data/regexp.cjs +12 -1
- package/dist/common/data/regexp.cjs.map +1 -1
- package/dist/common/data/regexp.mjs +10 -1
- package/dist/common/data/regexp.mjs.map +1 -1
- package/dist/common/data/rounding.cjs +107 -1
- package/dist/common/data/rounding.cjs.map +1 -1
- package/dist/common/data/rounding.mjs +95 -1
- package/dist/common/data/rounding.mjs.map +1 -1
- package/dist/common/data/signal.cjs +39 -1
- package/dist/common/data/signal.cjs.map +1 -1
- package/dist/common/data/signal.mjs +38 -1
- package/dist/common/data/signal.mjs.map +1 -1
- package/dist/common/data/sortable.cjs +35 -1
- package/dist/common/data/sortable.cjs.map +1 -1
- package/dist/common/data/sortable.mjs +31 -1
- package/dist/common/data/sortable.mjs.map +1 -1
- package/dist/common/data/sorted.cjs +54 -1
- package/dist/common/data/sorted.cjs.map +1 -1
- package/dist/common/data/sorted.mjs +53 -1
- package/dist/common/data/sorted.mjs.map +1 -1
- package/dist/common/data/string-deburr.cjs +240 -1
- package/dist/common/data/string-deburr.cjs.map +1 -1
- package/dist/common/data/string-deburr.mjs +238 -1
- package/dist/common/data/string-deburr.mjs.map +1 -1
- package/dist/common/data/string-hash-fnv.cjs +69 -1
- package/dist/common/data/string-hash-fnv.cjs.map +1 -1
- package/dist/common/data/string-hash-fnv.mjs +67 -1
- package/dist/common/data/string-hash-fnv.mjs.map +1 -1
- package/dist/common/data/string-hash-pool.cjs +28 -1
- package/dist/common/data/string-hash-pool.cjs.map +1 -1
- package/dist/common/data/string-hash-pool.mjs +27 -1
- package/dist/common/data/string-hash-pool.mjs.map +1 -1
- package/dist/common/data/url.cjs +98 -2
- package/dist/common/data/url.cjs.map +1 -1
- package/dist/common/data/url.mjs +91 -2
- package/dist/common/data/url.mjs.map +1 -1
- package/dist/common/data/utils.cjs +118 -1
- package/dist/common/data/utils.cjs.map +1 -1
- package/dist/common/data/utils.mjs +107 -1
- package/dist/common/data/utils.mjs.map +1 -1
- package/dist/common/data/wordlist.cjs +531 -1
- package/dist/common/data/wordlist.cjs.map +1 -1
- package/dist/common/data/wordlist.mjs +529 -1
- package/dist/common/data/wordlist.mjs.map +1 -1
- package/dist/common/data/xrx.cjs +96 -1
- package/dist/common/data/xrx.cjs.map +1 -1
- package/dist/common/data/xrx.mjs +92 -1
- package/dist/common/data/xrx.mjs.map +1 -1
- package/dist/common/dispose-defer.cjs +133 -1
- package/dist/common/dispose-defer.cjs.map +1 -1
- package/dist/common/dispose-defer.mjs +130 -1
- package/dist/common/dispose-defer.mjs.map +1 -1
- package/dist/common/dispose-types.mjs +1 -1
- package/dist/common/dispose-utils.cjs +113 -1
- package/dist/common/dispose-utils.cjs.map +1 -1
- package/dist/common/dispose-utils.mjs +106 -1
- package/dist/common/dispose-utils.mjs.map +1 -1
- package/dist/common/exec/index.cjs +24 -1
- package/dist/common/exec/index.d.cts +1 -1
- package/dist/common/exec/index.d.mts +1 -1
- package/dist/common/exec/index.mjs +8 -1
- package/dist/common/exec/mutex.cjs +44 -1
- package/dist/common/exec/mutex.cjs.map +1 -1
- package/dist/common/exec/mutex.mjs +42 -1
- package/dist/common/exec/mutex.mjs.map +1 -1
- package/dist/common/exec/pool.cjs +181 -1
- package/dist/common/exec/pool.cjs.map +1 -1
- package/dist/common/exec/pool.d.cts +1 -1
- package/dist/common/exec/pool.d.mts +1 -1
- package/dist/common/exec/pool.mjs +180 -1
- package/dist/common/exec/pool.mjs.map +1 -1
- package/dist/common/exec/progress.cjs +149 -1
- package/dist/common/exec/progress.cjs.map +1 -1
- package/dist/common/exec/progress.d.cts +1 -1
- package/dist/common/exec/progress.d.mts +1 -1
- package/dist/common/exec/progress.mjs +148 -1
- package/dist/common/exec/progress.mjs.map +1 -1
- package/dist/common/exec/promise.cjs +113 -1
- package/dist/common/exec/promise.cjs.map +1 -1
- package/dist/common/exec/promise.mjs +103 -1
- package/dist/common/exec/promise.mjs.map +1 -1
- package/dist/common/exec/queue.cjs +125 -1
- package/dist/common/exec/queue.cjs.map +1 -1
- package/dist/common/exec/queue.d.cts +1 -1
- package/dist/common/exec/queue.d.mts +1 -1
- package/dist/common/exec/queue.mjs +124 -1
- package/dist/common/exec/queue.mjs.map +1 -1
- package/dist/common/exec/throttle-debounce.cjs +114 -1
- package/dist/common/exec/throttle-debounce.cjs.map +1 -1
- package/dist/common/exec/throttle-debounce.mjs +112 -1
- package/dist/common/exec/throttle-debounce.mjs.map +1 -1
- package/dist/common/global.cjs +22 -1
- package/dist/common/global.cjs.map +1 -1
- package/dist/common/global.mjs +19 -1
- package/dist/common/global.mjs.map +1 -1
- package/dist/common/index.cjs +559 -1
- package/dist/common/index.d.cts +1 -1
- package/dist/common/index.d.mts +1 -1
- package/dist/common/index.mjs +89 -1
- package/dist/common/localhost.cjs +16 -1
- package/dist/common/localhost.cjs.map +1 -1
- package/dist/common/localhost.mjs +14 -1
- package/dist/common/localhost.mjs.map +1 -1
- package/dist/common/log/index.cjs +34 -1
- package/dist/common/log/index.mjs +11 -1
- package/dist/common/log/log-base.cjs +40 -1
- package/dist/common/log/log-base.cjs.map +1 -1
- package/dist/common/log/log-base.mjs +31 -1
- package/dist/common/log/log-base.mjs.map +1 -1
- package/dist/common/log/log-colors.cjs +92 -1
- package/dist/common/log/log-colors.cjs.map +1 -1
- package/dist/common/log/log-colors.mjs +90 -1
- package/dist/common/log/log-colors.mjs.map +1 -1
- package/dist/common/log/log-config.cjs +15 -1
- package/dist/common/log/log-config.cjs.map +1 -1
- package/dist/common/log/log-config.mjs +14 -1
- package/dist/common/log/log-config.mjs.map +1 -1
- package/dist/common/log/log-console-capture.cjs +33 -1
- package/dist/common/log/log-console-capture.cjs.map +1 -1
- package/dist/common/log/log-console-capture.mjs +32 -1
- package/dist/common/log/log-console-capture.mjs.map +1 -1
- package/dist/common/log/log-console-original.cjs +27 -1
- package/dist/common/log/log-console-original.cjs.map +1 -1
- package/dist/common/log/log-console-original.mjs +26 -1
- package/dist/common/log/log-console-original.mjs.map +1 -1
- package/dist/common/log/log-console.cjs +39 -1
- package/dist/common/log/log-console.cjs.map +1 -1
- package/dist/common/log/log-console.mjs +38 -1
- package/dist/common/log/log-console.mjs.map +1 -1
- package/dist/common/log/log-context.cjs +109 -1
- package/dist/common/log/log-context.cjs.map +1 -1
- package/dist/common/log/log-context.mjs +108 -1
- package/dist/common/log/log-context.mjs.map +1 -1
- package/dist/common/log/log-filter.cjs +80 -1
- package/dist/common/log/log-filter.cjs.map +1 -1
- package/dist/common/log/log-filter.mjs +75 -1
- package/dist/common/log/log-filter.mjs.map +1 -1
- package/dist/common/log/log-memory.cjs +45 -1
- package/dist/common/log/log-memory.cjs.map +1 -1
- package/dist/common/log/log-memory.mjs +43 -1
- package/dist/common/log/log-memory.mjs.map +1 -1
- package/dist/common/log/log-noop.cjs +17 -1
- package/dist/common/log/log-noop.cjs.map +1 -1
- package/dist/common/log/log-noop.mjs +15 -1
- package/dist/common/log/log-noop.mjs.map +1 -1
- package/dist/common/log/log.cjs +46 -1
- package/dist/common/log/log.cjs.map +1 -1
- package/dist/common/log/log.mjs +43 -1
- package/dist/common/log/log.mjs.map +1 -1
- package/dist/common/msg/channel-debug.cjs +17 -1
- package/dist/common/msg/channel-debug.cjs.map +1 -1
- package/dist/common/msg/channel-debug.d.cts +1 -1
- package/dist/common/msg/channel-debug.d.mts +1 -1
- package/dist/common/msg/channel-debug.mjs +16 -1
- package/dist/common/msg/channel-debug.mjs.map +1 -1
- package/dist/common/msg/channel-local.cjs +28 -1
- package/dist/common/msg/channel-local.cjs.map +1 -1
- package/dist/common/msg/channel-local.d.cts +1 -1
- package/dist/common/msg/channel-local.d.mts +1 -1
- package/dist/common/msg/channel-local.mjs +26 -1
- package/dist/common/msg/channel-local.mjs.map +1 -1
- package/dist/common/msg/channel-resilient.cjs +63 -1
- package/dist/common/msg/channel-resilient.cjs.map +1 -1
- package/dist/common/msg/channel-resilient.d.cts +1 -1
- package/dist/common/msg/channel-resilient.d.mts +1 -1
- package/dist/common/msg/channel-resilient.mjs +62 -1
- package/dist/common/msg/channel-resilient.mjs.map +1 -1
- package/dist/common/msg/channel-wkwebview.cjs +35 -1
- package/dist/common/msg/channel-wkwebview.cjs.map +1 -1
- package/dist/common/msg/channel-wkwebview.d.cts +2 -1
- package/dist/common/msg/channel-wkwebview.d.mts +2 -1
- package/dist/common/msg/channel-wkwebview.mjs +34 -1
- package/dist/common/msg/channel-wkwebview.mjs.map +1 -1
- package/dist/common/msg/channel.cjs +23 -1
- package/dist/common/msg/channel.cjs.map +1 -1
- package/dist/common/msg/channel.d.cts +1 -1
- package/dist/common/msg/channel.d.mts +1 -1
- package/dist/common/msg/channel.mjs +22 -1
- package/dist/common/msg/channel.mjs.map +1 -1
- package/dist/common/msg/emitter.cjs +141 -1
- package/dist/common/msg/emitter.cjs.map +1 -1
- package/dist/common/msg/emitter.d.cts +1 -1
- package/dist/common/msg/emitter.d.mts +1 -1
- package/dist/common/msg/emitter.mjs +139 -1
- package/dist/common/msg/emitter.mjs.map +1 -1
- package/dist/common/msg/encoder.cjs +38 -1
- package/dist/common/msg/encoder.cjs.map +1 -1
- package/dist/common/msg/encoder.mjs +35 -1
- package/dist/common/msg/encoder.mjs.map +1 -1
- package/dist/common/msg/index.cjs +28 -1
- package/dist/common/msg/index.d.cts +1 -1
- package/dist/common/msg/index.d.mts +1 -1
- package/dist/common/msg/index.mjs +11 -1
- package/dist/common/msg/messages.cjs +135 -1
- package/dist/common/msg/messages.cjs.map +1 -1
- package/dist/common/msg/messages.d.cts +1 -1
- package/dist/common/msg/messages.d.mts +1 -1
- package/dist/common/msg/messages.mjs +133 -1
- package/dist/common/msg/messages.mjs.map +1 -1
- package/dist/common/msg/pipe.mjs +1 -1
- package/dist/common/msg/pubsub.cjs +78 -1
- package/dist/common/msg/pubsub.cjs.map +1 -1
- package/dist/common/msg/pubsub.d.cts +1 -1
- package/dist/common/msg/pubsub.d.mts +1 -1
- package/dist/common/msg/pubsub.mjs +76 -1
- package/dist/common/msg/pubsub.mjs.map +1 -1
- package/dist/common/msg/rpc.cjs +142 -1
- package/dist/common/msg/rpc.cjs.map +1 -1
- package/dist/common/msg/rpc.mjs +139 -1
- package/dist/common/msg/rpc.mjs.map +1 -1
- package/dist/common/network.cjs +129 -1
- package/dist/common/network.cjs.map +1 -1
- package/dist/common/network.mjs +122 -1
- package/dist/common/network.mjs.map +1 -1
- package/dist/common/platform.cjs +92 -1
- package/dist/common/platform.cjs.map +1 -1
- package/dist/common/platform.mjs +84 -1
- package/dist/common/platform.mjs.map +1 -1
- package/dist/common/schema/_sandbox/sandbox-inherit.mjs +1 -1
- package/dist/common/schema/_sandbox/sandbox.mjs +1 -1
- package/dist/common/schema/_sandbox/sandbox.xspec.mjs +1 -1
- package/dist/common/schema/export-json-schema.cjs +54 -1
- package/dist/common/schema/export-json-schema.cjs.map +1 -1
- package/dist/common/schema/export-json-schema.mjs +52 -1
- package/dist/common/schema/export-json-schema.mjs.map +1 -1
- package/dist/common/schema/export-swift.cjs +30 -2
- package/dist/common/schema/export-swift.cjs.map +1 -1
- package/dist/common/schema/export-swift.mjs +29 -2
- package/dist/common/schema/export-swift.mjs.map +1 -1
- package/dist/common/schema/export-typescript.cjs +20 -2
- package/dist/common/schema/export-typescript.cjs.map +1 -1
- package/dist/common/schema/export-typescript.mjs +19 -2
- package/dist/common/schema/export-typescript.mjs.map +1 -1
- package/dist/common/schema/index.cjs +55 -1
- package/dist/common/schema/index.mjs +12 -1
- package/dist/common/schema/parse-args.cjs +62 -2
- package/dist/common/schema/parse-args.cjs.map +1 -1
- package/dist/common/schema/parse-args.mjs +60 -2
- package/dist/common/schema/parse-args.mjs.map +1 -1
- package/dist/common/schema/parse-env.cjs +48 -3
- package/dist/common/schema/parse-env.cjs.map +1 -1
- package/dist/common/schema/parse-env.mjs +46 -3
- package/dist/common/schema/parse-env.mjs.map +1 -1
- package/dist/common/schema/parse-object.cjs +122 -1
- package/dist/common/schema/parse-object.cjs.map +1 -1
- package/dist/common/schema/parse-object.mjs +119 -1
- package/dist/common/schema/parse-object.mjs.map +1 -1
- package/dist/common/schema/schema-standard.mjs +1 -1
- package/dist/common/schema/schema.cjs +423 -1
- package/dist/common/schema/schema.cjs.map +1 -1
- package/dist/common/schema/schema.mjs +404 -1
- package/dist/common/schema/schema.mjs.map +1 -1
- package/dist/common/schema/serialize.cjs +109 -1
- package/dist/common/schema/serialize.cjs.map +1 -1
- package/dist/common/schema/serialize.mjs +107 -1
- package/dist/common/schema/serialize.mjs.map +1 -1
- package/dist/common/schema/type-test.mjs +1 -1
- package/dist/common/schema/utils.cjs +25 -1
- package/dist/common/schema/utils.cjs.map +1 -1
- package/dist/common/schema/utils.mjs +19 -1
- package/dist/common/schema/utils.mjs.map +1 -1
- package/dist/common/schema/z-collection.cjs +51 -1
- package/dist/common/schema/z-collection.mjs +27 -1
- package/dist/common/schema/z.cjs +9 -1
- package/dist/common/schema/z.mjs +3 -1
- package/dist/common/storage/index.cjs +4 -1
- package/dist/common/storage/index.mjs +3 -1
- package/dist/common/storage/memstorage.cjs +26 -1
- package/dist/common/storage/memstorage.cjs.map +1 -1
- package/dist/common/storage/memstorage.mjs +25 -1
- package/dist/common/storage/memstorage.mjs.map +1 -1
- package/dist/common/test.cjs +14 -1
- package/dist/common/test.cjs.map +1 -1
- package/dist/common/test.mjs +13 -1
- package/dist/common/test.mjs.map +1 -1
- package/dist/common/time.cjs +220 -1
- package/dist/common/time.cjs.map +1 -1
- package/dist/common/time.mjs +194 -1
- package/dist/common/time.mjs.map +1 -1
- package/dist/common/timeout.cjs +27 -1
- package/dist/common/timeout.cjs.map +1 -1
- package/dist/common/timeout.mjs +25 -1
- package/dist/common/timeout.mjs.map +1 -1
- package/dist/common/types.mjs +1 -1
- package/dist/common/utils.cjs +7 -1
- package/dist/common/utils.cjs.map +1 -1
- package/dist/common/utils.mjs +5 -1
- package/dist/common/utils.mjs.map +1 -1
- package/dist/common/uuid.cjs +307 -1
- package/dist/common/uuid.cjs.map +1 -1
- package/dist/common/uuid.mjs +284 -1
- package/dist/common/uuid.mjs.map +1 -1
- package/dist/{index-DHXVOH8h.d.cts → index-CFkMqHvX.d.cts} +1 -2
- package/dist/{index-DMaPyx9O.d.mts → index-C_3Y_s6f.d.mts} +1 -2
- package/dist/index.all.cjs +641 -1
- package/dist/index.all.d.cts +1 -1
- package/dist/index.all.d.mts +1 -1
- package/dist/index.all.mjs +113 -1
- package/dist/index.browser.cjs +576 -1
- package/dist/index.browser.d.cts +1 -1
- package/dist/index.browser.d.mts +1 -1
- package/dist/index.browser.mjs +98 -1
- package/dist/index.jsr.cjs +57 -1
- package/dist/index.jsr.mjs +6 -1
- package/dist/index.node.cjs +628 -1
- package/dist/index.node.d.cts +1 -1
- package/dist/index.node.d.mts +1 -1
- package/dist/index.node.mjs +106 -1
- package/dist/node/args.cjs +56 -1
- package/dist/node/args.cjs.map +1 -1
- package/dist/node/args.mjs +53 -1
- package/dist/node/args.mjs.map +1 -1
- package/dist/node/clipboard.cjs +18 -1
- package/dist/node/clipboard.cjs.map +1 -1
- package/dist/node/clipboard.mjs +16 -1
- package/dist/node/clipboard.mjs.map +1 -1
- package/dist/node/crypto.cjs +28 -1
- package/dist/node/crypto.cjs.map +1 -1
- package/dist/node/crypto.mjs +24 -1
- package/dist/node/crypto.mjs.map +1 -1
- package/dist/node/env.cjs +100 -4
- package/dist/node/env.cjs.map +1 -1
- package/dist/node/env.mjs +90 -4
- package/dist/node/env.mjs.map +1 -1
- package/dist/node/files-async.cjs +66 -1
- package/dist/node/files-async.cjs.map +1 -1
- package/dist/node/files-async.mjs +60 -1
- package/dist/node/files-async.mjs.map +1 -1
- package/dist/node/files.cjs +52 -1
- package/dist/node/files.cjs.map +1 -1
- package/dist/node/files.mjs +46 -1
- package/dist/node/files.mjs.map +1 -1
- package/dist/node/filestorage.cjs +100 -1
- package/dist/node/filestorage.cjs.map +1 -1
- package/dist/node/filestorage.mjs +97 -1
- package/dist/node/filestorage.mjs.map +1 -1
- package/dist/node/fs.cjs +119 -1
- package/dist/node/fs.cjs.map +1 -1
- package/dist/node/fs.mjs +101 -1
- package/dist/node/fs.mjs.map +1 -1
- package/dist/node/glob.cjs +75 -1
- package/dist/node/glob.cjs.map +1 -1
- package/dist/node/glob.mjs +73 -1
- package/dist/node/glob.mjs.map +1 -1
- package/dist/node/index.cjs +66 -1
- package/dist/node/index.mjs +16 -1
- package/dist/node/log/index.cjs +20 -1
- package/dist/node/log/index.mjs +7 -1
- package/dist/node/log/log-context-node.cjs +39 -1
- package/dist/node/log/log-context-node.cjs.map +1 -1
- package/dist/node/log/log-context-node.mjs +35 -1
- package/dist/node/log/log-context-node.mjs.map +1 -1
- package/dist/node/log/log-file-rotation.cjs +71 -1
- package/dist/node/log/log-file-rotation.cjs.map +1 -1
- package/dist/node/log/log-file-rotation.mjs +68 -1
- package/dist/node/log/log-file-rotation.mjs.map +1 -1
- package/dist/node/log/log-file.cjs +57 -1
- package/dist/node/log/log-file.cjs.map +1 -1
- package/dist/node/log/log-file.mjs +54 -1
- package/dist/node/log/log-file.mjs.map +1 -1
- package/dist/node/log/log-node.cjs +162 -1
- package/dist/node/log/log-node.cjs.map +1 -1
- package/dist/node/log/log-node.mjs +155 -1
- package/dist/node/log/log-node.mjs.map +1 -1
- package/dist/node/log/log-rotation.cjs +543 -3
- package/dist/node/log/log-rotation.cjs.map +1 -1
- package/dist/node/log/log-rotation.mjs +538 -3
- package/dist/node/log/log-rotation.mjs.map +1 -1
- package/dist/node/log/log-util.cjs +69 -3
- package/dist/node/log/log-util.cjs.map +1 -1
- package/dist/node/log/log-util.mjs +63 -3
- package/dist/node/log/log-util.mjs.map +1 -1
- package/dist/node/open-browser.cjs +20 -1
- package/dist/node/open-browser.cjs.map +1 -1
- package/dist/node/open-browser.mjs +18 -1
- package/dist/node/open-browser.mjs.map +1 -1
- package/package.json +15 -15
- package/src/common/schema/README.md +247 -66
- package/src/eslint-defaults.js +4 -0
- package/src/index.spec.ts +6 -6
- package/dist/bin-Ce3i6ABn.cjs +0 -3
- package/dist/bin-SPdenYkw.mjs +0 -3
- package/dist/chunk-0Lt9GpW0.mjs +0 -1
- package/dist/chunk-D-qHiVGv.cjs +0 -1
- package/src/common/schema/README-SCHEMA.md +0 -0
package/AGENTS.md
CHANGED
|
@@ -1,233 +1,72 @@
|
|
|
1
1
|
# AGENTS.md
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Guidance for coding agents working on the zeed repository. For end-user documentation see [README.md](README.md).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Project
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- Zero runtime dependencies (all integrations are vendored or optional)
|
|
9
|
-
- Strict TypeScript with full type inference
|
|
10
|
-
- Tree-shakable ESM with CommonJS fallback
|
|
11
|
-
- Platform-specific code split between `src/browser/`, `src/node/`, and `src/common/`
|
|
7
|
+
Zero-dependency TypeScript utility library for universal JavaScript (browser, Node, Deno, Bun).
|
|
12
8
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
# Build the library (ESM + CJS with minification and types)
|
|
18
|
-
pnpm build
|
|
19
|
-
|
|
20
|
-
# Type checking without compilation
|
|
21
|
-
pnpm check
|
|
22
|
-
|
|
23
|
-
# Watch mode for development
|
|
24
|
-
pnpm watch
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
### Testing
|
|
28
|
-
```bash
|
|
29
|
-
# Run all tests (Node.js + common)
|
|
30
|
-
pnpm test
|
|
31
|
-
|
|
32
|
-
# Run tests with coverage report
|
|
33
|
-
pnpm coverage
|
|
9
|
+
- Zero runtime dependencies
|
|
10
|
+
- Strict TypeScript, full type inference
|
|
11
|
+
- Tree-shakable ESM with CJS fallback
|
|
12
|
+
- Platform split: `src/browser/`, `src/node/`, `src/common/`
|
|
34
13
|
|
|
35
|
-
|
|
36
|
-
pnpm test <filename>.spec.ts
|
|
14
|
+
## Commands
|
|
37
15
|
|
|
38
|
-
|
|
39
|
-
pnpm test:browser # Chromium with preview
|
|
40
|
-
pnpm test:chromium # Chromium via playwright
|
|
41
|
-
pnpm test:firefox # Firefox via playwright
|
|
42
|
-
pnpm test:webkit # WebKit via playwright
|
|
43
|
-
```
|
|
16
|
+
Package manager: `pnpm` (>= 10). Node >= 20. `nr` is a binary from `@antfu/ni` that runs `package.json` scripts.
|
|
44
17
|
|
|
45
|
-
### Linting
|
|
46
18
|
```bash
|
|
47
|
-
#
|
|
48
|
-
pnpm
|
|
49
|
-
|
|
50
|
-
#
|
|
19
|
+
pnpm build # tsdown build (ESM + CJS + types)
|
|
20
|
+
pnpm check # tsc --noEmit
|
|
21
|
+
pnpm watch # incremental build
|
|
22
|
+
pnpm test # type check + vitest run (node + common)
|
|
23
|
+
pnpm coverage # vitest with coverage
|
|
24
|
+
pnpm vitest run path/to/file.spec.ts # single test file
|
|
25
|
+
pnpm test:chromium # browser tests via playwright (also :firefox, :webkit)
|
|
26
|
+
pnpm test:browser # browser tests with preview UI
|
|
27
|
+
pnpm lint # eslint
|
|
51
28
|
pnpm lint:fix
|
|
29
|
+
pnpm build:docs # typedoc -> docs/
|
|
52
30
|
```
|
|
53
31
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
1. **`src/common/`** - Platform-agnostic utilities
|
|
67
|
-
- Core functionality that works everywhere (browser, Node.js, Deno, Bun)
|
|
68
|
-
- Includes: schema validation, messaging, data utilities, logging foundation, etc.
|
|
69
|
-
|
|
70
|
-
2. **`src/browser/`** - Browser-specific utilities
|
|
71
|
-
- DOM interactions, LocalStorage, browser-specific logging handlers
|
|
72
|
-
- Example: `log-browser-factory.ts` provides colorful console output for browsers
|
|
73
|
-
|
|
74
|
-
3. **`src/node/`** - Node.js/Deno/Bun-specific utilities
|
|
75
|
-
- File system operations, process env handling, Node-specific features
|
|
76
|
-
- Example: `env.ts` for environment variable management
|
|
77
|
-
|
|
78
|
-
### Entry Points
|
|
79
|
-
|
|
80
|
-
The library uses conditional exports for platform-specific builds:
|
|
81
|
-
|
|
82
|
-
- **`src/index.all.ts`** - Full universal export (browser + node + common)
|
|
83
|
-
- **`src/index.browser.ts`** - Browser-only build (re-exports browser + common)
|
|
84
|
-
- **`src/index.node.ts`** - Node-only build (re-exports node + common)
|
|
85
|
-
- **`src/index.jsr.ts`** - JSR registry specific export
|
|
86
|
-
|
|
87
|
-
The `package.json` exports field automatically selects the right build:
|
|
88
|
-
```json
|
|
89
|
-
{
|
|
90
|
-
"exports": {
|
|
91
|
-
".": {
|
|
92
|
-
"types": "./dist/index.all.d.mts",
|
|
93
|
-
"require": "./dist/index.node.cjs",
|
|
94
|
-
"node": "./dist/index.node.mjs",
|
|
95
|
-
"default": "./dist/index.browser.mjs"
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Key Subsystems
|
|
102
|
-
|
|
103
|
-
#### Messaging (`src/common/msg/`)
|
|
104
|
-
|
|
105
|
-
A layered messaging architecture for cross-context communication. See `src/common/msg/README.md` for full details.
|
|
106
|
-
|
|
107
|
-
- **Emitter** - Type-safe, async event emitter for in-app communication
|
|
108
|
-
- **Channel** - Uniform `postMessage` abstraction for data transport (WebSocket, WebRTC, WebWorker, etc.)
|
|
109
|
-
- **PubSub** - Event-like messages over a Channel with type safety
|
|
110
|
-
- **Messages** - RPC-like interface with Promise-based responses, timeouts, and retries
|
|
111
|
-
- **Encoder** - Transform data for transport (JSON, encryption, etc.)
|
|
112
|
-
|
|
113
|
-
Example:
|
|
114
|
-
```typescript
|
|
115
|
-
interface MyMessages {
|
|
116
|
-
echo: (data: any) => Promise<any>
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
const hub = useMessageHub({ channel }).send<MyMessages>()
|
|
120
|
-
await hub.echo({ hello: 'world' })
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
#### Schema Validation (`src/common/schema/`)
|
|
124
|
-
|
|
125
|
-
Type-safe runtime validation with [Standard Schema](https://github.com/standard-schema/standard-schema) compatibility. Works with tRPC, TanStack Form/Router, Hono, and 40+ other libraries.
|
|
126
|
-
|
|
127
|
-
- Import via `z` namespace: `import { z } from 'zeed'`
|
|
128
|
-
- All schemas support `.parse()`, `.optional()`, `.default()`, type inference
|
|
129
|
-
- Standard Schema interface available via `schema['~standard']`
|
|
130
|
-
- Supports serialization/deserialization for network transport
|
|
131
|
-
|
|
132
|
-
Example:
|
|
133
|
-
```typescript
|
|
134
|
-
const userSchema = z.object({
|
|
135
|
-
name: z.string(),
|
|
136
|
-
email: z.string(),
|
|
137
|
-
role: z.stringLiterals(['admin', 'user']),
|
|
138
|
-
})
|
|
139
|
-
|
|
140
|
-
type User = z.infer<typeof userSchema>
|
|
141
|
-
const user = userSchema.parse(data)
|
|
142
|
-
```
|
|
143
|
-
|
|
144
|
-
#### Logging (`src/common/log/`, `src/browser/log/`, `src/node/log/`)
|
|
145
|
-
|
|
146
|
-
Universal logging system with platform-specific handlers:
|
|
147
|
-
|
|
148
|
-
- **Configuration**: `ZEED=*` or `DEBUG=*` to enable logs (ZEED supersedes DEBUG)
|
|
149
|
-
- **Level filtering**: `ZEED_LEVEL=info` to hide debug logs
|
|
150
|
-
- **Log to file**: `ZEED_LOG=/path/to/file.log`
|
|
151
|
-
- **Handlers**: `LoggerConsoleHandler`, `LoggerBrowserHandler`, `LoggerNodeHandler`, `LoggerFileHandler`
|
|
152
|
-
|
|
153
|
-
Usage:
|
|
154
|
-
```typescript
|
|
155
|
-
import { Logger } from 'zeed'
|
|
156
|
-
|
|
157
|
-
const log = Logger('my-module')
|
|
158
|
-
log('message')
|
|
159
|
-
log.info('info')
|
|
160
|
-
log.warn('warning')
|
|
161
|
-
log.error('error')
|
|
32
|
+
## Layout
|
|
33
|
+
|
|
34
|
+
```text
|
|
35
|
+
src/
|
|
36
|
+
common/ platform-agnostic (schema, msg, data, log core, ...)
|
|
37
|
+
browser/ DOM, LocalStorage, browser log handler
|
|
38
|
+
node/ fs, env, node log handler
|
|
39
|
+
index.all.ts universal entry
|
|
40
|
+
index.browser.ts browser build
|
|
41
|
+
index.node.ts node build
|
|
42
|
+
index.jsr.ts JSR registry entry
|
|
162
43
|
```
|
|
163
44
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
Extensive collection of data manipulation utilities:
|
|
167
|
-
- **Array operations**: `arrayUnique`, `arrayShuffle`, `arrayGroupBy`
|
|
168
|
-
- **String utilities**: `camelCase`, `snakeCase`, `slugify`
|
|
169
|
-
- **Binary encoding**: `useBase(62)` for Base62 encoding/decoding
|
|
170
|
-
- **Object operations**: `deepEqual`, `deepMerge`, `objectFilter`, `objectPluck`
|
|
171
|
-
- **CRDT sorting**: `sortedItems` for conflict-free replicated data
|
|
172
|
-
|
|
173
|
-
## Development Conventions
|
|
174
|
-
|
|
175
|
-
### Code Style
|
|
176
|
-
|
|
177
|
-
- **Indentation**: Always use 2 spaces (not tabs)
|
|
178
|
-
- **TypeScript**: Strict mode enabled, use explicit types where inference isn't clear
|
|
179
|
-
- **Imports**: Use relative imports within the same major module, exported symbols for cross-module
|
|
180
|
-
|
|
181
|
-
### Testing
|
|
182
|
-
|
|
183
|
-
- All test files must end with `.spec.ts`
|
|
184
|
-
- Tests live side-by-side with the code they test (e.g., `array.ts` → `array.spec.ts`)
|
|
185
|
-
- Use Vitest with globals enabled (`describe`, `it`, `expect` available globally)
|
|
186
|
-
- Aim for 100% test coverage for new utilities
|
|
187
|
-
- Browser tests require explicit environment: `pnpm test:browser`
|
|
45
|
+
Conditional exports in `package.json` route consumers to the right build. Ignore `_archive/`, `dist/`, `docs/`, `demos/`.
|
|
188
46
|
|
|
189
|
-
|
|
47
|
+
## Subsystems
|
|
190
48
|
|
|
191
|
-
-
|
|
192
|
-
-
|
|
193
|
-
-
|
|
194
|
-
-
|
|
49
|
+
- **`common/schema/`** - Standard Schema compatible runtime validation, exposed as `z`. `z.object`, `z.string`, `z.stringLiterals`, `.parse`, `.optional`, `.default`, `z.infer`. `schema['~standard']` exposes the Standard Schema interface.
|
|
50
|
+
- **`common/msg/`** - Layered messaging: `Emitter` (typed events), `Channel` (postMessage abstraction), `PubSub`, `Messages` (RPC with Promise/timeout/retry), `Encoder`. See `src/common/msg/README.md`.
|
|
51
|
+
- **`common/log/`** + platform handlers - `Logger('name')`, levels `info`/`warn`/`error`. Env: `ZEED=*` or `DEBUG=*` (ZEED wins), `ZEED_LEVEL=info`, `ZEED_LOG=/path/file.log`. Handlers: `LoggerConsoleHandler`, `LoggerBrowserHandler`, `LoggerNodeHandler`, `LoggerFileHandler`.
|
|
52
|
+
- **`common/data/`** - `arrayUnique`, `arrayShuffle`, `arrayGroupBy`, `camelCase`, `snakeCase`, `slugify`, `useBase(62)`, `deepEqual`, `deepMerge`, `objectFilter`, `objectPluck`, `sortedItems` (CRDT).
|
|
195
53
|
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
**Use the `Type` class for runtime validation:**
|
|
199
|
-
```typescript
|
|
200
|
-
// Define schema
|
|
201
|
-
const schema = z.object({ name: z.string() })
|
|
202
|
-
|
|
203
|
-
// Infer TypeScript type
|
|
204
|
-
type Schema = z.infer<typeof schema>
|
|
205
|
-
|
|
206
|
-
// Parse/validate at runtime
|
|
207
|
-
const data = schema.parse(input)
|
|
208
|
-
```
|
|
209
|
-
|
|
210
|
-
**Event emitters should use typed interfaces:**
|
|
211
|
-
```typescript
|
|
212
|
-
interface MyEvents {
|
|
213
|
-
inc: (count: number) => number
|
|
214
|
-
}
|
|
215
|
-
|
|
216
|
-
const e = new Emitter<MyEvents>()
|
|
217
|
-
e.on('inc', async count => count + 1)
|
|
218
|
-
```
|
|
54
|
+
## Conventions
|
|
219
55
|
|
|
220
|
-
|
|
56
|
+
- 2-space indent, no tabs.
|
|
57
|
+
- Strict TS. Explicit types only where inference is unclear.
|
|
58
|
+
- Relative imports within a module, barrel imports across modules.
|
|
59
|
+
- Tests live next to code: `array.ts` + `array.spec.ts`. Vitest globals enabled.
|
|
60
|
+
- New utilities: aim for 100% coverage.
|
|
61
|
+
- Browser-only code in `src/browser/`, node-only in `src/node/`, everything else in `src/common/`.
|
|
62
|
+
- Each module has an `index.ts` barrel.
|
|
221
63
|
|
|
222
|
-
|
|
223
|
-
- **Output**: ESM + CJS in `dist/` with `.mjs` / `.cjs` entry files and TypeScript declarations
|
|
224
|
-
- **Target**: ES2022
|
|
225
|
-
- **Features**: Tree-shaking, minification, source maps, code splitting
|
|
64
|
+
## Build
|
|
226
65
|
|
|
227
|
-
|
|
66
|
+
- Bundler: `tsdown` (rolldown-based). Config in `tsdown.config.ts`.
|
|
67
|
+
- Output: `dist/` with `.mjs`, `.cjs`, and `.d.mts`/`.d.cts` declarations per entry (e.g. `dist/index.all.d.mts`, `dist/index.node.d.cts`).
|
|
68
|
+
- Features: tree-shaking, minification, source maps, code splitting.
|
|
228
69
|
|
|
229
|
-
##
|
|
70
|
+
## Release
|
|
230
71
|
|
|
231
|
-
-
|
|
232
|
-
- Node.js >= 20 required
|
|
233
|
-
- The `nr` alias in scripts refers to `ni run` from `@antfu/ni` package
|
|
72
|
+
`pnpm prep` runs lint-fix, type check, full test suite, and doc upload. `pnpm npm:release` publishes to npm. `pnpm build:docs` generates typedoc into `docs/` (published to <https://zeed.holtwick.de/>).
|
package/README.md
CHANGED
|
@@ -24,24 +24,30 @@
|
|
|
24
24
|
<td width="50%">
|
|
25
25
|
|
|
26
26
|
### 🎯 **Type-Safe**
|
|
27
|
+
|
|
27
28
|
Strict TypeScript with full type inference
|
|
28
29
|
|
|
29
30
|
### 📦 **Zero Dependencies**
|
|
31
|
+
|
|
30
32
|
Lightweight and completely tree-shakable
|
|
31
33
|
|
|
32
34
|
### 🌍 **Universal**
|
|
35
|
+
|
|
33
36
|
Works in browsers, Node.js, Deno, and Bun
|
|
34
37
|
|
|
35
38
|
</td>
|
|
36
39
|
<td width="50%">
|
|
37
40
|
|
|
38
41
|
### ⚡ **Modern ESM**
|
|
42
|
+
|
|
39
43
|
ES Modules with CommonJS fallback
|
|
40
44
|
|
|
41
45
|
### ✅ **Well Tested**
|
|
46
|
+
|
|
42
47
|
Comprehensive test coverage
|
|
43
48
|
|
|
44
49
|
### 🔌 **Standard Schema**
|
|
50
|
+
|
|
45
51
|
Compatible with tRPC, TanStack, Hono & more
|
|
46
52
|
|
|
47
53
|
</td>
|
|
@@ -93,11 +99,13 @@ log.error('Error')
|
|
|
93
99
|
By default, logs are muted. Enable them with filters:
|
|
94
100
|
|
|
95
101
|
**Browser:**
|
|
102
|
+
|
|
96
103
|
```ts
|
|
97
104
|
localStorage.zeed = '*'
|
|
98
105
|
```
|
|
99
106
|
|
|
100
107
|
**Node.js:**
|
|
108
|
+
|
|
101
109
|
```sh
|
|
102
110
|
ZEED=* node myapp.js
|
|
103
111
|
```
|
|
@@ -116,6 +124,7 @@ Write to file: `ZEED_LOG=/path/to/file.log`
|
|
|
116
124
|
- `LoggerFileHandler(path, opt)` - File output with optional rotation
|
|
117
125
|
|
|
118
126
|
**Log Rotation Example:**
|
|
127
|
+
|
|
119
128
|
```ts
|
|
120
129
|
import { LoggerFileHandler } from 'zeed'
|
|
121
130
|
|
|
@@ -270,6 +279,7 @@ else {
|
|
|
270
279
|
```
|
|
271
280
|
|
|
272
281
|
**Features:**
|
|
282
|
+
|
|
273
283
|
- Primitives: `string()`, `number()`, `int()`, `boolean()`, `any()`
|
|
274
284
|
- Objects: `object()`, `record()`, `pick()`, `omit()`, `extend()`, `partial()`, `required()`
|
|
275
285
|
- Arrays & Tuples: `array()`, `tuple()`
|
|
@@ -289,6 +299,7 @@ else {
|
|
|
289
299
|
<td width="50%">
|
|
290
300
|
|
|
291
301
|
**🔄 CRDT Sorting**
|
|
302
|
+
|
|
292
303
|
```ts
|
|
293
304
|
interface Row extends SortedItem {
|
|
294
305
|
id: string
|
|
@@ -298,6 +309,7 @@ sortedItems(rows)
|
|
|
298
309
|
```
|
|
299
310
|
|
|
300
311
|
**🔐 Binary Encoding**
|
|
312
|
+
|
|
301
313
|
```ts
|
|
302
314
|
const { encode, decode } = useBase(62)
|
|
303
315
|
decode(encode(data)) === data
|
|
@@ -307,12 +319,14 @@ decode(encode(data)) === data
|
|
|
307
319
|
<td width="50%">
|
|
308
320
|
|
|
309
321
|
**🔍 Deep Object Utils**
|
|
322
|
+
|
|
310
323
|
```ts
|
|
311
324
|
deepEqual(obj1, obj2)
|
|
312
325
|
deepMerge(obj1, obj2)
|
|
313
326
|
```
|
|
314
327
|
|
|
315
328
|
**🧹 Resource Disposal**
|
|
329
|
+
|
|
316
330
|
```ts
|
|
317
331
|
const dispose = useDispose()
|
|
318
332
|
dispose.add(cleanup)
|
|
@@ -332,10 +346,12 @@ Zeed includes many more utilities - explore the [full API documentation](https:/
|
|
|
332
346
|
## 🤝 Related Projects
|
|
333
347
|
|
|
334
348
|
**By the same author:**
|
|
349
|
+
|
|
335
350
|
- [zeed-dom](https://github.com/holtwick/zeed-dom) - DOM manipulation utilities
|
|
336
351
|
- [zerva](https://github.com/holtwick/zerva) - Modular server framework
|
|
337
352
|
|
|
338
353
|
**Similar utility libraries:**
|
|
354
|
+
|
|
339
355
|
- [lib0](https://github.com/dmonad/lib0) - Fundamental utility functions
|
|
340
356
|
- [antfu/utils](https://github.com/antfu/utils) - Collection of common utilities
|
|
341
357
|
- [vueuse](https://vueuse.org/) - Vue composition utilities
|
|
@@ -1,2 +1,244 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_chunk = require('../chunk-uaV2rQ02.cjs');
|
|
3
|
+
let fs = require("fs");
|
|
4
|
+
fs = require_chunk.__toESM(fs, 1);
|
|
5
|
+
let path = require("path");
|
|
6
|
+
path = require_chunk.__toESM(path, 1);
|
|
7
|
+
let fs_promises = require("fs/promises");
|
|
8
|
+
|
|
9
|
+
//#region src/_experiments/bitcask.ts
|
|
10
|
+
const ENTRY_HEADER_SIZE = 17;
|
|
11
|
+
var Bitcask = class {
|
|
12
|
+
dirname;
|
|
13
|
+
readWrite;
|
|
14
|
+
syncOnPut;
|
|
15
|
+
keydir = /* @__PURE__ */ new Map();
|
|
16
|
+
activeFile = null;
|
|
17
|
+
activeFileId = 0;
|
|
18
|
+
activeOffset = 0;
|
|
19
|
+
openFiles = /* @__PURE__ */ new Map();
|
|
20
|
+
constructor(dirname, opts = {}) {
|
|
21
|
+
this.dirname = dirname;
|
|
22
|
+
this.readWrite = opts.readWrite !== false;
|
|
23
|
+
this.syncOnPut = opts.syncOnPut === true;
|
|
24
|
+
if (!fs.existsSync(dirname)) fs.mkdirSync(dirname, { recursive: true });
|
|
25
|
+
this.loadFiles();
|
|
26
|
+
if (this.readWrite) this.rollover();
|
|
27
|
+
}
|
|
28
|
+
listDataFiles() {
|
|
29
|
+
return fs.readdirSync(this.dirname).filter((f) => f.endsWith(".data")).sort();
|
|
30
|
+
}
|
|
31
|
+
loadFiles() {
|
|
32
|
+
for (const fname of this.listDataFiles()) {
|
|
33
|
+
const fileId = parseInt(fname.split(".")[0], 10);
|
|
34
|
+
const filePath = path.join(this.dirname, fname);
|
|
35
|
+
const fd = fs.openSync(filePath, "r");
|
|
36
|
+
let offset = 0;
|
|
37
|
+
while (true) {
|
|
38
|
+
const header = Buffer.alloc(ENTRY_HEADER_SIZE);
|
|
39
|
+
if (fs.readSync(fd, header, 0, ENTRY_HEADER_SIZE, offset) < ENTRY_HEADER_SIZE) break;
|
|
40
|
+
const keySize = header.readUInt32BE(0);
|
|
41
|
+
const valueSize = header.readUInt32BE(4);
|
|
42
|
+
const tombstone = header.readUInt8(8) === 1;
|
|
43
|
+
const timestamp = header.readBigUInt64BE(9);
|
|
44
|
+
const key = Buffer.alloc(keySize);
|
|
45
|
+
fs.readSync(fd, key, 0, keySize, offset + ENTRY_HEADER_SIZE);
|
|
46
|
+
const entrySize = ENTRY_HEADER_SIZE + keySize + valueSize;
|
|
47
|
+
this.keydir.set(key.toString("binary"), {
|
|
48
|
+
fileId,
|
|
49
|
+
offset,
|
|
50
|
+
size: entrySize,
|
|
51
|
+
timestamp,
|
|
52
|
+
tombstone
|
|
53
|
+
});
|
|
54
|
+
offset += entrySize;
|
|
55
|
+
}
|
|
56
|
+
fs.closeSync(fd);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
rollover() {
|
|
60
|
+
const fileIds = this.listDataFiles().map((f) => parseInt(f.split(".")[0], 10));
|
|
61
|
+
const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1;
|
|
62
|
+
const fname = `${nextId.toString().padStart(8, "0")}.data`;
|
|
63
|
+
const filePath = path.join(this.dirname, fname);
|
|
64
|
+
this.activeFile = fs.createWriteStream(filePath, { flags: "a" });
|
|
65
|
+
this.activeFileId = nextId;
|
|
66
|
+
this.activeOffset = fs.existsSync(filePath) ? fs.statSync(filePath).size : 0;
|
|
67
|
+
}
|
|
68
|
+
async put(key, value) {
|
|
69
|
+
if (!this.readWrite) throw new Error("Read-only mode");
|
|
70
|
+
const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key);
|
|
71
|
+
const valueBuf = Buffer.isBuffer(value) ? value : Buffer.from(value);
|
|
72
|
+
const timestamp = BigInt(Date.now());
|
|
73
|
+
const tombstone = 0;
|
|
74
|
+
const header = Buffer.alloc(ENTRY_HEADER_SIZE);
|
|
75
|
+
header.writeUInt32BE(keyBuf.length, 0);
|
|
76
|
+
header.writeUInt32BE(valueBuf.length, 4);
|
|
77
|
+
header.writeUInt8(tombstone, 8);
|
|
78
|
+
header.writeBigUInt64BE(timestamp, 9);
|
|
79
|
+
const entry = Buffer.concat([
|
|
80
|
+
header,
|
|
81
|
+
keyBuf,
|
|
82
|
+
valueBuf
|
|
83
|
+
]);
|
|
84
|
+
const offset = this.activeOffset;
|
|
85
|
+
await new Promise((resolve, reject) => {
|
|
86
|
+
this.activeFile.write(entry, (err) => err ? reject(err) : resolve());
|
|
87
|
+
});
|
|
88
|
+
if (this.syncOnPut && this.activeFile) fs.fsyncSync(this.activeFile.fd);
|
|
89
|
+
this.keydir.set(keyBuf.toString("binary"), {
|
|
90
|
+
fileId: this.activeFileId,
|
|
91
|
+
offset,
|
|
92
|
+
size: entry.length,
|
|
93
|
+
timestamp,
|
|
94
|
+
tombstone: false
|
|
95
|
+
});
|
|
96
|
+
this.activeOffset += entry.length;
|
|
97
|
+
if (this.activeOffset > 32 * 1024 * 1024) {
|
|
98
|
+
this.activeFile.close();
|
|
99
|
+
this.rollover();
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async get(key) {
|
|
103
|
+
const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key);
|
|
104
|
+
const meta = this.keydir.get(keyBuf.toString("binary"));
|
|
105
|
+
if (!meta || meta.tombstone) return null;
|
|
106
|
+
let fh = this.openFiles.get(meta.fileId);
|
|
107
|
+
if (!fh) {
|
|
108
|
+
fh = await (0, fs_promises.open)(path.join(this.dirname, `${meta.fileId.toString().padStart(8, "0")}.data`), "r");
|
|
109
|
+
this.openFiles.set(meta.fileId, fh);
|
|
110
|
+
}
|
|
111
|
+
const header = Buffer.alloc(ENTRY_HEADER_SIZE);
|
|
112
|
+
await fh.read(header, 0, ENTRY_HEADER_SIZE, meta.offset);
|
|
113
|
+
const keySize = header.readUInt32BE(0);
|
|
114
|
+
const valueSize = header.readUInt32BE(4);
|
|
115
|
+
const keyRead = Buffer.alloc(keySize);
|
|
116
|
+
await fh.read(keyRead, 0, keySize, meta.offset + ENTRY_HEADER_SIZE);
|
|
117
|
+
const value = Buffer.alloc(valueSize);
|
|
118
|
+
await fh.read(value, 0, valueSize, meta.offset + ENTRY_HEADER_SIZE + keySize);
|
|
119
|
+
return value;
|
|
120
|
+
}
|
|
121
|
+
async delete(key) {
|
|
122
|
+
if (!this.readWrite) throw new Error("Read-only mode");
|
|
123
|
+
const keyBuf = Buffer.isBuffer(key) ? key : Buffer.from(key);
|
|
124
|
+
const timestamp = BigInt(Date.now());
|
|
125
|
+
const tombstone = 1;
|
|
126
|
+
const header = Buffer.alloc(ENTRY_HEADER_SIZE);
|
|
127
|
+
header.writeUInt32BE(keyBuf.length, 0);
|
|
128
|
+
header.writeUInt32BE(0, 4);
|
|
129
|
+
header.writeUInt8(tombstone, 8);
|
|
130
|
+
header.writeBigUInt64BE(timestamp, 9);
|
|
131
|
+
const entry = Buffer.concat([header, keyBuf]);
|
|
132
|
+
const offset = this.activeOffset;
|
|
133
|
+
await new Promise((resolve, reject) => {
|
|
134
|
+
this.activeFile.write(entry, (err) => err ? reject(err) : resolve());
|
|
135
|
+
});
|
|
136
|
+
if (this.syncOnPut && this.activeFile) fs.fsyncSync(this.activeFile.fd);
|
|
137
|
+
this.keydir.set(keyBuf.toString("binary"), {
|
|
138
|
+
fileId: this.activeFileId,
|
|
139
|
+
offset,
|
|
140
|
+
size: entry.length,
|
|
141
|
+
timestamp,
|
|
142
|
+
tombstone: true
|
|
143
|
+
});
|
|
144
|
+
this.activeOffset += entry.length;
|
|
145
|
+
if (this.activeOffset > 32 * 1024 * 1024) {
|
|
146
|
+
this.activeFile.close();
|
|
147
|
+
this.rollover();
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
listKeys() {
|
|
151
|
+
return Array.from(this.keydir.entries()).filter(([_, v]) => !v.tombstone).map(([k, _]) => k);
|
|
152
|
+
}
|
|
153
|
+
async fold(fn, acc0) {
|
|
154
|
+
for (const [k, meta] of this.keydir.entries()) if (!meta.tombstone) acc0 = fn(k, await this.get(k), acc0);
|
|
155
|
+
return acc0;
|
|
156
|
+
}
|
|
157
|
+
async merge() {
|
|
158
|
+
const live = /* @__PURE__ */ new Map();
|
|
159
|
+
for (const [k, meta] of this.keydir.entries()) if (!meta.tombstone) live.set(k, meta);
|
|
160
|
+
const fileIds = this.listDataFiles().map((f) => parseInt(f.split(".")[0], 10));
|
|
161
|
+
const nextId = fileIds.length ? Math.max(...fileIds) + 1 : 1;
|
|
162
|
+
const fname = `${nextId.toString().padStart(8, "0")}.data`;
|
|
163
|
+
const filePath = path.join(this.dirname, fname);
|
|
164
|
+
const f = fs.createWriteStream(filePath, { flags: "a" });
|
|
165
|
+
for (const [k, meta] of live.entries()) {
|
|
166
|
+
const v = await this.get(k);
|
|
167
|
+
const keyBuf = Buffer.from(k, "binary");
|
|
168
|
+
const header = Buffer.alloc(ENTRY_HEADER_SIZE);
|
|
169
|
+
header.writeUInt32BE(keyBuf.length, 0);
|
|
170
|
+
header.writeUInt32BE(v.length, 4);
|
|
171
|
+
header.writeUInt8(0, 8);
|
|
172
|
+
header.writeBigUInt64BE(meta.timestamp, 9);
|
|
173
|
+
const entry = Buffer.concat([
|
|
174
|
+
header,
|
|
175
|
+
keyBuf,
|
|
176
|
+
v
|
|
177
|
+
]);
|
|
178
|
+
await new Promise((resolve, reject) => {
|
|
179
|
+
f.write(entry, (err) => err ? reject(err) : resolve());
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
f.close();
|
|
183
|
+
for (const fid of fileIds) if (fid !== this.activeFileId && fid !== nextId) try {
|
|
184
|
+
fs.unlinkSync(path.join(this.dirname, `${fid.toString().padStart(8, "0")}.data`));
|
|
185
|
+
} catch {}
|
|
186
|
+
this.loadFiles();
|
|
187
|
+
}
|
|
188
|
+
sync() {
|
|
189
|
+
if (this.activeFile) fs.fsyncSync(this.activeFile.fd);
|
|
190
|
+
}
|
|
191
|
+
async close() {
|
|
192
|
+
if (this.activeFile) this.activeFile.end();
|
|
193
|
+
for (const fh of this.openFiles.values()) await fh.close();
|
|
194
|
+
this.openFiles.clear();
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
function open(dirname, opts) {
|
|
198
|
+
return new Bitcask(dirname, opts);
|
|
199
|
+
}
|
|
200
|
+
async function get(handle, key) {
|
|
201
|
+
const v = await handle.get(key);
|
|
202
|
+
return v === null ? "not found" : v;
|
|
203
|
+
}
|
|
204
|
+
async function put(handle, key, value) {
|
|
205
|
+
await handle.put(key, value);
|
|
206
|
+
return "ok";
|
|
207
|
+
}
|
|
208
|
+
async function del(handle, key) {
|
|
209
|
+
await handle.delete(key);
|
|
210
|
+
return "ok";
|
|
211
|
+
}
|
|
212
|
+
function listKeys(handle) {
|
|
213
|
+
return handle.listKeys();
|
|
214
|
+
}
|
|
215
|
+
async function fold(handle, fn, acc0) {
|
|
216
|
+
return await handle.fold(fn, acc0);
|
|
217
|
+
}
|
|
218
|
+
async function merge(dirname) {
|
|
219
|
+
const h = new Bitcask(dirname, { readWrite: true });
|
|
220
|
+
await h.merge();
|
|
221
|
+
h.close();
|
|
222
|
+
return "ok";
|
|
223
|
+
}
|
|
224
|
+
function sync(handle) {
|
|
225
|
+
handle.sync();
|
|
226
|
+
return "ok";
|
|
227
|
+
}
|
|
228
|
+
async function close(handle) {
|
|
229
|
+
await handle.close();
|
|
230
|
+
return "ok";
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
//#endregion
|
|
234
|
+
exports.Bitcask = Bitcask;
|
|
235
|
+
exports.close = close;
|
|
236
|
+
exports.del = del;
|
|
237
|
+
exports.fold = fold;
|
|
238
|
+
exports.get = get;
|
|
239
|
+
exports.listKeys = listKeys;
|
|
240
|
+
exports.merge = merge;
|
|
241
|
+
exports.open = open;
|
|
242
|
+
exports.put = put;
|
|
243
|
+
exports.sync = sync;
|
|
2
244
|
//# sourceMappingURL=bitcask.cjs.map
|