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
|
@@ -1,4 +1,539 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import process from "node:process";
|
|
2
|
+
import { access, constants, createReadStream, createWriteStream } from "node:fs";
|
|
3
|
+
import { sep } from "node:path";
|
|
4
|
+
import { mkdir, open, readFile, rename, stat, unlink, writeFile } from "node:fs/promises";
|
|
5
|
+
import { exec } from "node:child_process";
|
|
6
|
+
import { Writable } from "node:stream";
|
|
7
|
+
import { setTimeout } from "node:timers";
|
|
8
|
+
import { TextDecoder } from "node:util";
|
|
9
|
+
import { createGzip } from "node:zlib";
|
|
10
|
+
|
|
11
|
+
//#region src/node/log/log-rotation.ts
|
|
12
|
+
async function exists(filename) {
|
|
13
|
+
return new Promise((resolve) => access(filename, constants.F_OK, (error) => resolve(!error)));
|
|
14
|
+
}
|
|
15
|
+
var RotatingFileStreamError = class extends Error {
|
|
16
|
+
code = "RFS-TOO-MANY";
|
|
17
|
+
constructor() {
|
|
18
|
+
super("Too many destination file attempts");
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
var RotatingFileStream = class extends Writable {
|
|
22
|
+
createGzip;
|
|
23
|
+
exec;
|
|
24
|
+
file;
|
|
25
|
+
filename;
|
|
26
|
+
finished;
|
|
27
|
+
fsCreateReadStream;
|
|
28
|
+
fsCreateWriteStream;
|
|
29
|
+
fsOpen;
|
|
30
|
+
fsReadFile;
|
|
31
|
+
fsStat;
|
|
32
|
+
fsUnlink;
|
|
33
|
+
generator;
|
|
34
|
+
last;
|
|
35
|
+
maxTimeout;
|
|
36
|
+
next;
|
|
37
|
+
options;
|
|
38
|
+
size;
|
|
39
|
+
stdout;
|
|
40
|
+
prev;
|
|
41
|
+
rotation;
|
|
42
|
+
initPromise;
|
|
43
|
+
timeout;
|
|
44
|
+
timeoutPromise;
|
|
45
|
+
constructor(generator, options) {
|
|
46
|
+
const { encoding, history, maxFiles, maxSize, path } = options;
|
|
47
|
+
super({
|
|
48
|
+
decodeStrings: true,
|
|
49
|
+
defaultEncoding: encoding
|
|
50
|
+
});
|
|
51
|
+
this.createGzip = createGzip;
|
|
52
|
+
this.exec = exec;
|
|
53
|
+
this.filename = (path || "") + generator(null);
|
|
54
|
+
this.fsCreateReadStream = createReadStream;
|
|
55
|
+
this.fsCreateWriteStream = createWriteStream;
|
|
56
|
+
this.fsOpen = open;
|
|
57
|
+
this.fsReadFile = readFile;
|
|
58
|
+
this.fsStat = stat;
|
|
59
|
+
this.fsUnlink = unlink;
|
|
60
|
+
this.generator = generator;
|
|
61
|
+
this.maxTimeout = 2147483640;
|
|
62
|
+
this.options = options;
|
|
63
|
+
this.stdout = process.stdout;
|
|
64
|
+
this.file = null;
|
|
65
|
+
this.initPromise = null;
|
|
66
|
+
this.timeout = null;
|
|
67
|
+
this.timeoutPromise = null;
|
|
68
|
+
this.prev = null;
|
|
69
|
+
this.next = null;
|
|
70
|
+
this.rotation = null;
|
|
71
|
+
this.last = "";
|
|
72
|
+
this.finished = false;
|
|
73
|
+
this.size = 0;
|
|
74
|
+
if (maxFiles || maxSize) options.history = (path || "") + (history || `${this.generator(null)}.txt`);
|
|
75
|
+
this.on("close", () => this.finished ? null : this.emit("finish"));
|
|
76
|
+
this.on("finish", () => this.finished = this.clear());
|
|
77
|
+
(async () => {
|
|
78
|
+
try {
|
|
79
|
+
this.initPromise = this.init();
|
|
80
|
+
await this.initPromise;
|
|
81
|
+
this.initPromise = null;
|
|
82
|
+
} catch (e) {}
|
|
83
|
+
})();
|
|
84
|
+
}
|
|
85
|
+
_destroy(error, callback) {
|
|
86
|
+
this.refinal(error, callback);
|
|
87
|
+
}
|
|
88
|
+
_final(callback) {
|
|
89
|
+
this.refinal(void 0, callback);
|
|
90
|
+
}
|
|
91
|
+
_write(chunk, encoding, callback) {
|
|
92
|
+
this.rewrite([{
|
|
93
|
+
chunk,
|
|
94
|
+
encoding
|
|
95
|
+
}], 0, callback);
|
|
96
|
+
}
|
|
97
|
+
_writev(chunks, callback) {
|
|
98
|
+
this.rewrite(chunks, 0, callback);
|
|
99
|
+
}
|
|
100
|
+
async refinal(error, callback) {
|
|
101
|
+
try {
|
|
102
|
+
this.clear();
|
|
103
|
+
if (this.initPromise) await this.initPromise;
|
|
104
|
+
if (this.timeoutPromise) await this.timeoutPromise;
|
|
105
|
+
await this.reclose();
|
|
106
|
+
} catch (e) {
|
|
107
|
+
return callback(error || e);
|
|
108
|
+
}
|
|
109
|
+
callback(error);
|
|
110
|
+
}
|
|
111
|
+
async rewrite(chunks, index, callback) {
|
|
112
|
+
const { size, teeToStdout } = this.options;
|
|
113
|
+
try {
|
|
114
|
+
if (this.initPromise) await this.initPromise;
|
|
115
|
+
for (let i = 0; i < chunks.length; ++i) {
|
|
116
|
+
const { chunk } = chunks[i];
|
|
117
|
+
this.size += chunk.length;
|
|
118
|
+
if (this.timeoutPromise) await this.timeoutPromise;
|
|
119
|
+
await this.file.write(chunk);
|
|
120
|
+
if (teeToStdout && !this.stdout.destroyed) this.stdout.write(chunk);
|
|
121
|
+
if (size && this.size >= size) await this.rotate();
|
|
122
|
+
}
|
|
123
|
+
} catch (e) {
|
|
124
|
+
return callback(e);
|
|
125
|
+
}
|
|
126
|
+
callback();
|
|
127
|
+
}
|
|
128
|
+
async init() {
|
|
129
|
+
const { immutable, initialRotation, interval, size } = this.options;
|
|
130
|
+
if (immutable) return new Promise((resolve, reject) => process.nextTick(() => this.immutate(true).then(resolve).catch((err) => reject(err))));
|
|
131
|
+
let stats;
|
|
132
|
+
try {
|
|
133
|
+
stats = await stat(this.filename);
|
|
134
|
+
} catch (e) {
|
|
135
|
+
if (e.code !== "ENOENT") throw e;
|
|
136
|
+
return this.reopen(0);
|
|
137
|
+
}
|
|
138
|
+
if (!stats.isFile()) throw new Error(`Can't write on: ${this.filename} (it is not a file)`);
|
|
139
|
+
if (initialRotation) {
|
|
140
|
+
this.intervalBounds(this.now());
|
|
141
|
+
const prev = this.prev;
|
|
142
|
+
this.intervalBounds(new Date(stats.mtime.getTime()));
|
|
143
|
+
if (prev !== this.prev) return this.rotate();
|
|
144
|
+
}
|
|
145
|
+
this.size = stats.size;
|
|
146
|
+
if (!size || stats.size < size) return this.reopen(stats.size);
|
|
147
|
+
if (interval) this.intervalBounds(this.now());
|
|
148
|
+
return this.rotate();
|
|
149
|
+
}
|
|
150
|
+
async makePath(name) {
|
|
151
|
+
await mkdir(name.split(sep).slice(0, -1).join(sep), { recursive: true });
|
|
152
|
+
return name;
|
|
153
|
+
}
|
|
154
|
+
async reopen(size) {
|
|
155
|
+
let file;
|
|
156
|
+
try {
|
|
157
|
+
file = await open(this.filename, "a", this.options.mode);
|
|
158
|
+
} catch (e) {
|
|
159
|
+
if (e.code !== "ENOENT") throw e;
|
|
160
|
+
await this.makePath(this.filename);
|
|
161
|
+
file = await open(this.filename, "a", this.options.mode);
|
|
162
|
+
}
|
|
163
|
+
this.file = file;
|
|
164
|
+
this.size = size;
|
|
165
|
+
this.interval();
|
|
166
|
+
this.emit("open", this.filename);
|
|
167
|
+
}
|
|
168
|
+
async reclose() {
|
|
169
|
+
const { file } = this;
|
|
170
|
+
if (!file) return;
|
|
171
|
+
this.file = null;
|
|
172
|
+
return file.close();
|
|
173
|
+
}
|
|
174
|
+
now() {
|
|
175
|
+
return /* @__PURE__ */ new Date();
|
|
176
|
+
}
|
|
177
|
+
async rotate() {
|
|
178
|
+
const { immutable, rotate } = this.options;
|
|
179
|
+
this.size = 0;
|
|
180
|
+
this.rotation = this.now();
|
|
181
|
+
this.clear();
|
|
182
|
+
this.emit("rotation");
|
|
183
|
+
await this.reclose();
|
|
184
|
+
if (rotate) return this.classical();
|
|
185
|
+
if (immutable) return this.immutate(false);
|
|
186
|
+
return this.move();
|
|
187
|
+
}
|
|
188
|
+
async findName() {
|
|
189
|
+
const { interval, path, intervalBoundary } = this.options;
|
|
190
|
+
for (let index = 1; index < 1e3; ++index) {
|
|
191
|
+
const filename = (path || "") + this.generator(interval && intervalBoundary ? new Date(this.prev) : this.rotation, index);
|
|
192
|
+
if (!await exists(filename)) return filename;
|
|
193
|
+
}
|
|
194
|
+
throw new RotatingFileStreamError();
|
|
195
|
+
}
|
|
196
|
+
async move() {
|
|
197
|
+
const { compress } = this.options;
|
|
198
|
+
const filename = await this.findName();
|
|
199
|
+
await this.touch(filename);
|
|
200
|
+
if (compress) await this.compress(filename);
|
|
201
|
+
else await rename(this.filename, filename);
|
|
202
|
+
return this.rotated(filename);
|
|
203
|
+
}
|
|
204
|
+
async touch(filename) {
|
|
205
|
+
let file;
|
|
206
|
+
try {
|
|
207
|
+
file = await this.fsOpen(filename, "a");
|
|
208
|
+
} catch (e) {
|
|
209
|
+
if (e.code !== "ENOENT") throw e;
|
|
210
|
+
await this.makePath(filename);
|
|
211
|
+
file = await open(filename, "a");
|
|
212
|
+
}
|
|
213
|
+
await file.close();
|
|
214
|
+
return this.unlink(filename);
|
|
215
|
+
}
|
|
216
|
+
async classical() {
|
|
217
|
+
const { compress, path, rotate = 0 } = this.options;
|
|
218
|
+
let rotatedName = "";
|
|
219
|
+
for (let count = rotate; count > 0; --count) {
|
|
220
|
+
const currName = path + this.generator(count);
|
|
221
|
+
const prevName = count === 1 ? this.filename : path + this.generator(count - 1);
|
|
222
|
+
if (!await exists(prevName)) continue;
|
|
223
|
+
if (!rotatedName) rotatedName = currName;
|
|
224
|
+
if (count === 1 && compress) await this.compress(currName);
|
|
225
|
+
else try {
|
|
226
|
+
await rename(prevName, currName);
|
|
227
|
+
} catch (e) {
|
|
228
|
+
if (e.code !== "ENOENT") throw e;
|
|
229
|
+
await this.makePath(currName);
|
|
230
|
+
await rename(prevName, currName);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return this.rotated(rotatedName);
|
|
234
|
+
}
|
|
235
|
+
clear() {
|
|
236
|
+
if (this.timeout) {
|
|
237
|
+
clearTimeout(this.timeout);
|
|
238
|
+
this.timeout = null;
|
|
239
|
+
}
|
|
240
|
+
return true;
|
|
241
|
+
}
|
|
242
|
+
intervalBoundsBig(now) {
|
|
243
|
+
const year = this.options.intervalUTC ? now.getUTCFullYear() : now.getFullYear();
|
|
244
|
+
let month = this.options.intervalUTC ? now.getUTCMonth() : now.getMonth();
|
|
245
|
+
let day = this.options.intervalUTC ? now.getUTCDate() : now.getDate();
|
|
246
|
+
let hours = this.options.intervalUTC ? now.getUTCHours() : now.getHours();
|
|
247
|
+
const { num, unit } = this.options.interval;
|
|
248
|
+
if (unit === "M") {
|
|
249
|
+
day = 1;
|
|
250
|
+
hours = 0;
|
|
251
|
+
} else if (unit === "d") hours = 0;
|
|
252
|
+
else hours = Number.parseInt(hours / num, 10) * num;
|
|
253
|
+
this.prev = new Date(year, month, day, hours, 0, 0, 0).getTime();
|
|
254
|
+
if (unit === "M") month += num;
|
|
255
|
+
else if (unit === "d") day += num;
|
|
256
|
+
else hours += num;
|
|
257
|
+
this.next = new Date(year, month, day, hours, 0, 0, 0).getTime();
|
|
258
|
+
}
|
|
259
|
+
intervalBounds(now) {
|
|
260
|
+
const unit = this.options.interval.unit;
|
|
261
|
+
if (unit === "M" || unit === "d" || unit === "h") this.intervalBoundsBig(now);
|
|
262
|
+
else {
|
|
263
|
+
let period = 1e3 * this.options.interval.num;
|
|
264
|
+
if (unit === "m") period *= 60;
|
|
265
|
+
this.prev = Number.parseInt(String(now.getTime() / period), 10) * period;
|
|
266
|
+
this.next = this.prev + period;
|
|
267
|
+
}
|
|
268
|
+
return new Date(this.prev);
|
|
269
|
+
}
|
|
270
|
+
interval() {
|
|
271
|
+
if (!this.options.interval) return;
|
|
272
|
+
this.intervalBounds(this.now());
|
|
273
|
+
const set = async () => {
|
|
274
|
+
const time = this.next - this.now().getTime();
|
|
275
|
+
if (time <= 0) try {
|
|
276
|
+
this.timeoutPromise = this.rotate();
|
|
277
|
+
await this.timeoutPromise;
|
|
278
|
+
this.timeoutPromise = null;
|
|
279
|
+
} catch (e) {}
|
|
280
|
+
else {
|
|
281
|
+
this.timeout = setTimeout(set, time > this.maxTimeout ? this.maxTimeout : time);
|
|
282
|
+
if (this.timeout && typeof this.timeout.unref === "function") this.timeout.unref();
|
|
283
|
+
}
|
|
284
|
+
};
|
|
285
|
+
set();
|
|
286
|
+
}
|
|
287
|
+
async compress(filename) {
|
|
288
|
+
const { compress } = this.options;
|
|
289
|
+
if (typeof compress === "function") await new Promise((resolve, reject) => {
|
|
290
|
+
this.exec(compress(this.filename, filename), (error, stdout, stderr) => {
|
|
291
|
+
this.emit("external", stdout, stderr);
|
|
292
|
+
error ? reject(error) : resolve();
|
|
293
|
+
});
|
|
294
|
+
});
|
|
295
|
+
else await this.gzip(filename);
|
|
296
|
+
return this.unlink(this.filename);
|
|
297
|
+
}
|
|
298
|
+
async gzip(filename) {
|
|
299
|
+
const { mode } = this.options;
|
|
300
|
+
const options = mode ? { mode } : {};
|
|
301
|
+
const inp = this.fsCreateReadStream(this.filename, {});
|
|
302
|
+
const out = this.fsCreateWriteStream(filename, options);
|
|
303
|
+
const zip = this.createGzip();
|
|
304
|
+
return new Promise((resolve, reject) => {
|
|
305
|
+
inp.once("error", reject);
|
|
306
|
+
out.once("error", reject);
|
|
307
|
+
zip.once("error", reject);
|
|
308
|
+
out.once("finish", resolve);
|
|
309
|
+
inp.pipe(zip).pipe(out);
|
|
310
|
+
});
|
|
311
|
+
}
|
|
312
|
+
async rotated(filename) {
|
|
313
|
+
const { maxFiles, maxSize } = this.options;
|
|
314
|
+
if (maxFiles || maxSize) await this.history(filename);
|
|
315
|
+
this.emit("rotated", filename);
|
|
316
|
+
return this.reopen(0);
|
|
317
|
+
}
|
|
318
|
+
async history(filename) {
|
|
319
|
+
const { history, maxFiles, maxSize } = this.options;
|
|
320
|
+
const res = [];
|
|
321
|
+
let files = [filename];
|
|
322
|
+
try {
|
|
323
|
+
if (history) files = [...(await this.fsReadFile(history, "utf8")).toString().split("\n"), filename];
|
|
324
|
+
} catch (e) {
|
|
325
|
+
if (e.code !== "ENOENT") throw e;
|
|
326
|
+
}
|
|
327
|
+
for (const file of files) if (file) try {
|
|
328
|
+
const stats = await this.fsStat(file);
|
|
329
|
+
if (stats.isFile()) res.push({
|
|
330
|
+
name: file,
|
|
331
|
+
size: stats.size,
|
|
332
|
+
time: stats.mtime.getTime()
|
|
333
|
+
});
|
|
334
|
+
else this.emit("warning", /* @__PURE__ */ new Error(`File '${file}' contained in history is not a regular file`));
|
|
335
|
+
} catch (e) {
|
|
336
|
+
if (e.code !== "ENOENT") throw e;
|
|
337
|
+
}
|
|
338
|
+
res.sort((a, b) => a.time - b.time);
|
|
339
|
+
if (maxFiles) while (res.length > maxFiles) {
|
|
340
|
+
const file = res.shift();
|
|
341
|
+
if (file) await this.unlink(file.name);
|
|
342
|
+
if (file) this.emit("removed", file.name, true);
|
|
343
|
+
}
|
|
344
|
+
if (maxSize) while (res.reduce((size, file) => size + file.size, 0) > maxSize) {
|
|
345
|
+
const file = res.shift();
|
|
346
|
+
if (file) await this.unlink(file.name);
|
|
347
|
+
if (file) this.emit("removed", file.name, false);
|
|
348
|
+
}
|
|
349
|
+
if (history) await writeFile(history, `${res.map((e) => e.name).join("\n")}\n`, "utf-8");
|
|
350
|
+
this.emit("history");
|
|
351
|
+
}
|
|
352
|
+
async immutate(first) {
|
|
353
|
+
const { size } = this.options;
|
|
354
|
+
const now = this.now();
|
|
355
|
+
for (let index = 1; index < 1e3; ++index) {
|
|
356
|
+
let fileSize = 0;
|
|
357
|
+
let stats;
|
|
358
|
+
this.filename = this.options.path + this.generator(now, index);
|
|
359
|
+
try {
|
|
360
|
+
stats = await this.fsStat(this.filename);
|
|
361
|
+
} catch (e) {
|
|
362
|
+
if (e.code !== "ENOENT") throw e;
|
|
363
|
+
}
|
|
364
|
+
if (stats) {
|
|
365
|
+
fileSize = stats.size;
|
|
366
|
+
if (!stats.isFile()) throw new Error(`Can't write on: '${this.filename}' (it is not a file)`);
|
|
367
|
+
if (size && fileSize >= size) continue;
|
|
368
|
+
}
|
|
369
|
+
if (first) {
|
|
370
|
+
this.last = this.filename;
|
|
371
|
+
return this.reopen(fileSize);
|
|
372
|
+
}
|
|
373
|
+
await this.rotated(this.last);
|
|
374
|
+
this.last = this.filename;
|
|
375
|
+
return;
|
|
376
|
+
}
|
|
377
|
+
throw new RotatingFileStreamError();
|
|
378
|
+
}
|
|
379
|
+
async unlink(filename) {
|
|
380
|
+
try {
|
|
381
|
+
await this.fsUnlink(filename);
|
|
382
|
+
} catch (e) {
|
|
383
|
+
if (e.code !== "ENOENT") throw e;
|
|
384
|
+
this.emit("warning", e);
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
};
|
|
388
|
+
function buildNumberCheck(field) {
|
|
389
|
+
return (type, options, value) => {
|
|
390
|
+
const converted = Number.parseInt(String(value), 10);
|
|
391
|
+
if (type !== "number" || Number.isNaN(converted) || converted <= 0) throw new Error(`'${field}' option must be a positive integer number`);
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
function buildStringCheck(field, check) {
|
|
395
|
+
return (type, options, value) => {
|
|
396
|
+
if (type !== "string") throw new Error(`Don't know how to handle 'options.${String(field)}' type: ${type}`);
|
|
397
|
+
options[field] = check(value);
|
|
398
|
+
};
|
|
399
|
+
}
|
|
400
|
+
function checkMeasure(value, what, units) {
|
|
401
|
+
const ret = {};
|
|
402
|
+
ret.num = Number.parseInt(value, 10);
|
|
403
|
+
if (Number.isNaN(ret.num)) throw new Error(`Unknown 'options.${what}' format: ${value}`);
|
|
404
|
+
if (ret.num <= 0) throw new Error(`A positive integer number is expected for 'options.${what}'`);
|
|
405
|
+
ret.unit = value.replace(/^[ 0]*/g, "").substr(`${ret.num}`.length, 1);
|
|
406
|
+
if (ret.unit.length === 0) throw new Error(`Missing unit for 'options.${what}'`);
|
|
407
|
+
if (!units[ret.unit]) throw new Error(`Unknown 'options.${what}' unit: ${ret.unit}`);
|
|
408
|
+
return ret;
|
|
409
|
+
}
|
|
410
|
+
const intervalUnits = {
|
|
411
|
+
M: true,
|
|
412
|
+
d: true,
|
|
413
|
+
h: true,
|
|
414
|
+
m: true,
|
|
415
|
+
s: true
|
|
416
|
+
};
|
|
417
|
+
function checkIntervalUnit(ret, unit, amount) {
|
|
418
|
+
if (Number.parseInt(amount / ret.num, 10) * ret.num !== amount) throw new Error(`An integer divider of ${amount} is expected as ${unit} for 'options.interval'`);
|
|
419
|
+
}
|
|
420
|
+
function checkInterval(value) {
|
|
421
|
+
const ret = checkMeasure(value, "interval", intervalUnits);
|
|
422
|
+
switch (ret.unit) {
|
|
423
|
+
case "h":
|
|
424
|
+
checkIntervalUnit(ret, "hours", 24);
|
|
425
|
+
break;
|
|
426
|
+
case "m":
|
|
427
|
+
checkIntervalUnit(ret, "minutes", 60);
|
|
428
|
+
break;
|
|
429
|
+
case "s":
|
|
430
|
+
checkIntervalUnit(ret, "seconds", 60);
|
|
431
|
+
break;
|
|
432
|
+
}
|
|
433
|
+
return ret;
|
|
434
|
+
}
|
|
435
|
+
const sizeUnits = {
|
|
436
|
+
B: true,
|
|
437
|
+
G: true,
|
|
438
|
+
K: true,
|
|
439
|
+
M: true
|
|
440
|
+
};
|
|
441
|
+
function checkSize(value) {
|
|
442
|
+
const ret = checkMeasure(value, "size", sizeUnits);
|
|
443
|
+
if (ret.unit === "K") return ret.num * 1024;
|
|
444
|
+
if (ret.unit === "M") return ret.num * 1048576;
|
|
445
|
+
if (ret.unit === "G") return ret.num * 1073741824;
|
|
446
|
+
return ret.num;
|
|
447
|
+
}
|
|
448
|
+
const checks = {
|
|
449
|
+
encoding: (type, options, value) => new TextDecoder(value),
|
|
450
|
+
immutable: () => {},
|
|
451
|
+
initialRotation: () => {},
|
|
452
|
+
interval: buildStringCheck("interval", checkInterval),
|
|
453
|
+
intervalBoundary: () => {},
|
|
454
|
+
intervalUTC: () => {},
|
|
455
|
+
maxFiles: buildNumberCheck("maxFiles"),
|
|
456
|
+
maxSize: buildStringCheck("maxSize", checkSize),
|
|
457
|
+
mode: () => {},
|
|
458
|
+
omitExtension: () => {},
|
|
459
|
+
rotate: buildNumberCheck("rotate"),
|
|
460
|
+
size: buildStringCheck("size", checkSize),
|
|
461
|
+
teeToStdout: () => {},
|
|
462
|
+
compress: (type, options, value) => {
|
|
463
|
+
if (value === false) return;
|
|
464
|
+
if (!value) throw new Error("A value for 'options.compress' must be specified");
|
|
465
|
+
if (type === "boolean") return options.compress = (source, dest) => `cat ${source} | gzip -c9 > ${dest}`;
|
|
466
|
+
if (type === "function") return;
|
|
467
|
+
if (type !== "string") throw new Error(`Don't know how to handle 'options.compress' type: ${type}`);
|
|
468
|
+
if (value !== "gzip") throw new Error(`Don't know how to handle compression method: ${value}`);
|
|
469
|
+
},
|
|
470
|
+
history: (type) => {
|
|
471
|
+
if (type !== "string") throw new Error(`Don't know how to handle 'options.history' type: ${type}`);
|
|
472
|
+
},
|
|
473
|
+
path: (type, options, value) => {
|
|
474
|
+
if (type !== "string") throw new Error(`Don't know how to handle 'options.path' type: ${type}`);
|
|
475
|
+
if (value.at(-1) !== sep) options.path = value + sep;
|
|
476
|
+
}
|
|
477
|
+
};
|
|
478
|
+
function checkOpts(options) {
|
|
479
|
+
const ret = {};
|
|
480
|
+
for (const k of Object.keys(options)) {
|
|
481
|
+
const opt = k;
|
|
482
|
+
const value = options[opt];
|
|
483
|
+
const type = typeof value;
|
|
484
|
+
ret[opt] = value;
|
|
485
|
+
if (!(opt in checks)) throw new Error(`Unknown option: ${opt}`);
|
|
486
|
+
checks[opt](type, ret, value);
|
|
487
|
+
}
|
|
488
|
+
if (!ret.path) ret.path = "";
|
|
489
|
+
if (!ret.interval) {
|
|
490
|
+
delete ret.immutable;
|
|
491
|
+
delete ret.initialRotation;
|
|
492
|
+
delete ret.intervalBoundary;
|
|
493
|
+
delete ret.intervalUTC;
|
|
494
|
+
}
|
|
495
|
+
if (ret.rotate) {
|
|
496
|
+
delete ret.history;
|
|
497
|
+
delete ret.immutable;
|
|
498
|
+
delete ret.maxFiles;
|
|
499
|
+
delete ret.maxSize;
|
|
500
|
+
delete ret.intervalBoundary;
|
|
501
|
+
delete ret.intervalUTC;
|
|
502
|
+
}
|
|
503
|
+
if (ret.immutable) delete ret.compress;
|
|
504
|
+
if (!ret.intervalBoundary) delete ret.initialRotation;
|
|
505
|
+
return ret;
|
|
506
|
+
}
|
|
507
|
+
function createClassical(filename, compress, omitExtension) {
|
|
508
|
+
return (time, index) => {
|
|
509
|
+
const idx = index || 0;
|
|
510
|
+
return idx ? `${filename}.${idx}${compress && !omitExtension ? ".gz" : ""}` : filename;
|
|
511
|
+
};
|
|
512
|
+
}
|
|
513
|
+
function createGenerator(filename, compress, omitExtension) {
|
|
514
|
+
const pad = (num) => (num > 9 ? "" : "0") + num;
|
|
515
|
+
return (time, index) => {
|
|
516
|
+
if (!time) return filename;
|
|
517
|
+
const t = typeof time === "number" ? new Date(time) : time;
|
|
518
|
+
const month = `${t.getFullYear()}${pad(t.getMonth() + 1)}`;
|
|
519
|
+
const day = pad(t.getDate());
|
|
520
|
+
const hour = pad(t.getHours());
|
|
521
|
+
const minute = pad(t.getMinutes());
|
|
522
|
+
return `${month + day}-${hour}${minute}-${pad(index || 0)}-${filename}${compress && !omitExtension ? ".gz" : ""}`;
|
|
523
|
+
};
|
|
524
|
+
}
|
|
525
|
+
function createRotationStream(filename, options) {
|
|
526
|
+
if (typeof options === "undefined") options = {};
|
|
527
|
+
else if (typeof options !== "object") throw new Error(`The "options" argument must be of type object. Received type ${typeof options}`);
|
|
528
|
+
const opts = checkOpts(options);
|
|
529
|
+
const { compress, omitExtension } = opts;
|
|
530
|
+
let generator;
|
|
531
|
+
if (typeof filename === "string") generator = opts.rotate ? createClassical(filename, !!compress, !!omitExtension) : createGenerator(filename, !!compress, !!omitExtension);
|
|
532
|
+
else if (typeof filename === "function") generator = filename;
|
|
533
|
+
else throw new Error(`The "filename" argument must be one of type string or function. Received type ${typeof filename}`);
|
|
534
|
+
return new RotatingFileStream(generator, opts);
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
//#endregion
|
|
538
|
+
export { RotatingFileStream, RotatingFileStreamError, createRotationStream };
|
|
4
539
|
//# sourceMappingURL=log-rotation.mjs.map
|