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/dist/node/files.mjs
CHANGED
|
@@ -1,2 +1,47 @@
|
|
|
1
|
-
import{isHiddenPath
|
|
1
|
+
import { isHiddenPath } from "./fs.mjs";
|
|
2
|
+
import { globToRegExp } from "./glob.mjs";
|
|
3
|
+
import process from "node:process";
|
|
4
|
+
import { readdirSync, statSync } from "node:fs";
|
|
5
|
+
import { join, resolve } from "node:path";
|
|
6
|
+
|
|
7
|
+
//#region src/node/files.ts
|
|
8
|
+
function getStat(path) {
|
|
9
|
+
try {
|
|
10
|
+
return statSync(path);
|
|
11
|
+
} catch (err) {}
|
|
12
|
+
}
|
|
13
|
+
function getFingerprint(path) {
|
|
14
|
+
const { mtimeMs, size } = getStat(path) ?? {};
|
|
15
|
+
return `${path}|${mtimeMs}|${size}`;
|
|
16
|
+
}
|
|
17
|
+
function walkSync(rootFolder, subFolder = "", ignoreHidden = true) {
|
|
18
|
+
let resultPaths = [];
|
|
19
|
+
const paths = readdirSync(resolve(rootFolder, subFolder));
|
|
20
|
+
if (paths != null && paths.length > 0) for (let file of paths) {
|
|
21
|
+
file = join(subFolder, file);
|
|
22
|
+
if (ignoreHidden && isHiddenPath(file)) continue;
|
|
23
|
+
const stat = getStat(join(rootFolder, file));
|
|
24
|
+
if (stat && stat.isDirectory()) resultPaths = [...resultPaths, ...walkSync(rootFolder, file) || []];
|
|
25
|
+
else resultPaths.push(file);
|
|
26
|
+
}
|
|
27
|
+
return resultPaths;
|
|
28
|
+
}
|
|
29
|
+
function files(opt = {}) {
|
|
30
|
+
let { pattern, filter, basePath = process.cwd(), ignoreHidden = false } = opt;
|
|
31
|
+
let paths = walkSync(basePath, "", ignoreHidden);
|
|
32
|
+
paths = paths.filter((path) => !(ignoreHidden && (path.startsWith(".") || path.includes("/."))));
|
|
33
|
+
if (pattern) {
|
|
34
|
+
if (typeof pattern === "string") pattern = globToRegExp(pattern);
|
|
35
|
+
if (pattern instanceof RegExp) {
|
|
36
|
+
const rx = pattern;
|
|
37
|
+
rx.lastIndex = 0;
|
|
38
|
+
paths = paths.filter((path) => rx.test(path));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
if (filter) paths = paths.filter(filter);
|
|
42
|
+
return paths;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
//#endregion
|
|
46
|
+
export { files, getFingerprint, getStat, walkSync };
|
|
2
47
|
//# sourceMappingURL=files.mjs.map
|
package/dist/node/files.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.mjs","names":[],"sources":["../../src/node/files.ts"],"sourcesContent":["import { readdirSync, statSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport function getStat(path: string): any {\n try {\n return statSync(path)\n }\n catch (err) { }\n}\n\nexport function getFingerprint(path: string) {\n const { mtimeMs, size } = getStat(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport function walkSync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = readdirSync(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = getStat(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...walkSync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport function files(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = walkSync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"files.mjs","names":[],"sources":["../../src/node/files.ts"],"sourcesContent":["import { readdirSync, statSync } from 'node:fs'\nimport { join, resolve } from 'node:path'\nimport process from 'node:process'\nimport { isHiddenPath } from './fs'\nimport { globToRegExp } from './glob'\n\nexport function getStat(path: string): any {\n try {\n return statSync(path)\n }\n catch (err) { }\n}\n\nexport function getFingerprint(path: string) {\n const { mtimeMs, size } = getStat(path) ?? {}\n return `${path}|${mtimeMs}|${size}`\n}\n\nexport function walkSync(rootFolder: string, subFolder = '', ignoreHidden = true) {\n let resultPaths: string[] = []\n const paths = readdirSync(resolve(rootFolder, subFolder))\n if (paths != null && paths.length > 0) {\n for (let file of paths) {\n file = join(subFolder, file)\n if (ignoreHidden && isHiddenPath(file))\n continue\n const realFile = join(rootFolder, file)\n const stat = getStat(realFile)\n if (stat && stat.isDirectory())\n resultPaths = [...resultPaths, ...walkSync(rootFolder, file) || []]\n else\n resultPaths.push(file)\n }\n }\n return resultPaths\n}\n\nexport function files(opt: {\n basePath?: string\n pattern?: string | RegExp\n filter?: (name: string) => boolean\n ignoreHidden?: boolean\n} = {}) {\n let {\n pattern,\n filter,\n basePath = process.cwd(),\n ignoreHidden = false,\n } = opt\n\n let paths = walkSync(basePath, '', ignoreHidden)\n\n paths = paths.filter(\n path =>\n !(ignoreHidden && (path.startsWith('.') || path.includes('/.'))),\n )\n\n if (pattern) {\n if (typeof pattern === 'string')\n pattern = globToRegExp(pattern)\n if (pattern instanceof RegExp) {\n const rx = pattern\n rx.lastIndex = 0\n paths = paths.filter(path => rx.test(path))\n }\n }\n\n if (filter)\n paths = paths.filter(filter)\n\n return paths\n}\n"],"mappings":";;;;;;;AAMA,SAAgB,QAAQ,MAAmB;AACzC,KAAI;AACF,SAAO,SAAS,KAAK;UAEhB,KAAK;;AAGd,SAAgB,eAAe,MAAc;CAC3C,MAAM,EAAE,SAAS,SAAS,QAAQ,KAAK,IAAI,EAAE;AAC7C,QAAO,GAAG,KAAK,GAAG,QAAQ,GAAG;;AAG/B,SAAgB,SAAS,YAAoB,YAAY,IAAI,eAAe,MAAM;CAChF,IAAI,cAAwB,EAAE;CAC9B,MAAM,QAAQ,YAAY,QAAQ,YAAY,UAAU,CAAC;AACzD,KAAI,SAAS,QAAQ,MAAM,SAAS,EAClC,MAAK,IAAI,QAAQ,OAAO;AACtB,SAAO,KAAK,WAAW,KAAK;AAC5B,MAAI,gBAAgB,aAAa,KAAK,CACpC;EAEF,MAAM,OAAO,QADI,KAAK,YAAY,KAAK,CACT;AAC9B,MAAI,QAAQ,KAAK,aAAa,CAC5B,eAAc,CAAC,GAAG,aAAa,GAAG,SAAS,YAAY,KAAK,IAAI,EAAE,CAAC;MAEnE,aAAY,KAAK,KAAK;;AAG5B,QAAO;;AAGT,SAAgB,MAAM,MAKlB,EAAE,EAAE;CACN,IAAI,EACF,SACA,QACA,WAAW,QAAQ,KAAK,EACxB,eAAe,UACb;CAEJ,IAAI,QAAQ,SAAS,UAAU,IAAI,aAAa;AAEhD,SAAQ,MAAM,QACZ,SACE,EAAE,iBAAiB,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,KAAK,GACjE;AAED,KAAI,SAAS;AACX,MAAI,OAAO,YAAY,SACrB,WAAU,aAAa,QAAQ;AACjC,MAAI,mBAAmB,QAAQ;GAC7B,MAAM,KAAK;AACX,MAAG,YAAY;AACf,WAAQ,MAAM,QAAO,SAAQ,GAAG,KAAK,KAAK,CAAC;;;AAI/C,KAAI,OACF,SAAQ,MAAM,OAAO,OAAO;AAE9B,QAAO"}
|
|
@@ -1,2 +1,101 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_chunk = require('../chunk-uaV2rQ02.cjs');
|
|
3
|
+
const require_common_data_json = require('../common/data/json.cjs');
|
|
4
|
+
const require_common_data_utils = require('../common/data/utils.cjs');
|
|
5
|
+
const require_common_data_path = require('../common/data/path.cjs');
|
|
6
|
+
let node_process = require("node:process");
|
|
7
|
+
node_process = require_chunk.__toESM(node_process, 1);
|
|
8
|
+
let node_fs = require("node:fs");
|
|
9
|
+
let node_path = require("node:path");
|
|
10
|
+
let node_buffer = require("node:buffer");
|
|
11
|
+
|
|
12
|
+
//#region src/node/filestorage.ts
|
|
13
|
+
var FileStorage = class {
|
|
14
|
+
store = {};
|
|
15
|
+
dirname;
|
|
16
|
+
fileKeys = void 0;
|
|
17
|
+
pretty = false;
|
|
18
|
+
extension;
|
|
19
|
+
extensionLength;
|
|
20
|
+
objectFromString;
|
|
21
|
+
objectToString;
|
|
22
|
+
keyToFilename;
|
|
23
|
+
constructor(opt = {}) {
|
|
24
|
+
this.dirname = (0, node_path.resolve)(node_process.default.cwd(), opt.path ?? ".fileStorage");
|
|
25
|
+
this.pretty = !!opt.pretty;
|
|
26
|
+
this.extension = opt.extension ?? ".json";
|
|
27
|
+
if (opt.extension && !this.extension.startsWith(".")) this.extension = `.${this.extension}`;
|
|
28
|
+
this.extensionLength = this.extension.length;
|
|
29
|
+
this.objectToString = opt.objectToString ?? ((data) => {
|
|
30
|
+
return this.pretty ? require_common_data_json.jsonStringifySafe(data, null, 2) : require_common_data_json.jsonStringifySafe(data);
|
|
31
|
+
});
|
|
32
|
+
this.objectFromString = opt.objectFromString ?? ((data) => {
|
|
33
|
+
try {
|
|
34
|
+
return JSON.parse(data);
|
|
35
|
+
} catch (err) {}
|
|
36
|
+
});
|
|
37
|
+
this.keyToFilename = opt.keyToFilename ?? require_common_data_path.toValidFilename;
|
|
38
|
+
}
|
|
39
|
+
setItem(key, value) {
|
|
40
|
+
this.store[key] = require_common_data_utils.cloneObject(value);
|
|
41
|
+
try {
|
|
42
|
+
const data = this.objectToString(value);
|
|
43
|
+
const path = this.getPath(key);
|
|
44
|
+
(0, node_fs.mkdirSync)((0, node_path.dirname)(path), { recursive: true });
|
|
45
|
+
(0, node_fs.writeFileSync)(path, data, "utf8");
|
|
46
|
+
} catch (err) {}
|
|
47
|
+
}
|
|
48
|
+
getPath(key) {
|
|
49
|
+
return (0, node_path.resolve)(this.dirname, this.keyToFilename(key) + this.extension);
|
|
50
|
+
}
|
|
51
|
+
getBuffer(key) {
|
|
52
|
+
const path = this.getPath(key);
|
|
53
|
+
return node_buffer.Buffer.from((0, node_fs.readFileSync)(path));
|
|
54
|
+
}
|
|
55
|
+
getItem(key) {
|
|
56
|
+
const value = this.store[key];
|
|
57
|
+
if (value === null) return;
|
|
58
|
+
if (value != null) return require_common_data_utils.cloneObject(value);
|
|
59
|
+
try {
|
|
60
|
+
const data = (0, node_fs.readFileSync)(this.getPath(key), "utf8");
|
|
61
|
+
if (data != null) {
|
|
62
|
+
const value = this.objectFromString(data);
|
|
63
|
+
this.store[key] = value;
|
|
64
|
+
return value;
|
|
65
|
+
}
|
|
66
|
+
} catch (err) {
|
|
67
|
+
this.store[key] = null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
removeItem(key) {
|
|
71
|
+
delete this.store[key];
|
|
72
|
+
if (this.fileKeys != null) {
|
|
73
|
+
const index = this.fileKeys.indexOf(key);
|
|
74
|
+
if (index !== -1) this.fileKeys.splice(index, 1);
|
|
75
|
+
}
|
|
76
|
+
try {
|
|
77
|
+
(0, node_fs.unlinkSync)(this.getPath(key));
|
|
78
|
+
} catch (err) {}
|
|
79
|
+
}
|
|
80
|
+
clear() {
|
|
81
|
+
this.fileKeys = [];
|
|
82
|
+
this.store = {};
|
|
83
|
+
(0, node_fs.rmSync)(this.dirname, {
|
|
84
|
+
recursive: true,
|
|
85
|
+
force: true
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
allKeys() {
|
|
89
|
+
if (this.fileKeys == null) try {
|
|
90
|
+
this.fileKeys = (0, node_fs.readdirSync)(this.dirname, { withFileTypes: true }).filter((item) => !item.isDirectory() && item.name.endsWith(this.extension)).map((item) => item.name.slice(0, -this.extensionLength)) || [];
|
|
91
|
+
} catch (err) {}
|
|
92
|
+
const keys = [...this.fileKeys || []];
|
|
93
|
+
for (const key of Object.keys(this.store)) if (!keys.includes(key)) keys.push(key);
|
|
94
|
+
keys.sort();
|
|
95
|
+
return keys;
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
//#endregion
|
|
100
|
+
exports.FileStorage = FileStorage;
|
|
2
101
|
//# sourceMappingURL=filestorage.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filestorage.cjs","names":["process","jsonStringifySafe","toValidFilename","cloneObject","Buffer"],"sources":["../../src/node/filestorage.ts"],"sourcesContent":["import type { Json, ObjectStorage } from '../common/types'\nimport { Buffer } from 'node:buffer'\nimport { mkdirSync, readdirSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport process from 'node:process'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path ?? '.fileStorage')\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? '.json'\n\n if (opt.extension && !this.extension.startsWith('.'))\n this.extension = `.${this.extension}`\n\n this.extensionLength = this.extension.length\n\n this.objectToString = opt.objectToString ?? ((data: any): string => {\n return this.pretty\n ? jsonStringifySafe(data, null, 2)\n : jsonStringifySafe(data)\n })\n\n this.objectFromString = opt.objectFromString ?? ((data: string) => {\n try {\n return JSON.parse(data)\n }\n catch (err) {\n // log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, 'utf8')\n }\n catch (err) {\n // log.error('setItem error', err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): any {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n const value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null)\n return\n\n if (value != null)\n return cloneObject(value) // this.objectFromString(value)\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, 'utf8')\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n }\n catch (err) {\n // log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1)\n this.fileKeys.splice(index, 1)\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n }\n catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys\n = readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n item =>\n !item.isDirectory() && item.name.endsWith(this.extension),\n )\n .map(item => item.name.slice(0, -this.extensionLength)) || []\n }\n catch (err) {}\n }\n const keys = [...(this.fileKeys || [])]\n for (const key of Object.keys(this.store)) {\n if (!keys.includes(key))\n keys.push(key)\n }\n keys.sort()\n return keys\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"filestorage.cjs","names":["process","jsonStringifySafe","toValidFilename","cloneObject","Buffer"],"sources":["../../src/node/filestorage.ts"],"sourcesContent":["import type { Json, ObjectStorage } from '../common/types'\nimport { Buffer } from 'node:buffer'\nimport { mkdirSync, readdirSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport process from 'node:process'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path ?? '.fileStorage')\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? '.json'\n\n if (opt.extension && !this.extension.startsWith('.'))\n this.extension = `.${this.extension}`\n\n this.extensionLength = this.extension.length\n\n this.objectToString = opt.objectToString ?? ((data: any): string => {\n return this.pretty\n ? jsonStringifySafe(data, null, 2)\n : jsonStringifySafe(data)\n })\n\n this.objectFromString = opt.objectFromString ?? ((data: string) => {\n try {\n return JSON.parse(data)\n }\n catch (err) {\n // log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, 'utf8')\n }\n catch (err) {\n // log.error('setItem error', err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): any {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n const value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null)\n return\n\n if (value != null)\n return cloneObject(value) // this.objectFromString(value)\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, 'utf8')\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n }\n catch (err) {\n // log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1)\n this.fileKeys.splice(index, 1)\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n }\n catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys\n = readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n item =>\n !item.isDirectory() && item.name.endsWith(this.extension),\n )\n .map(item => item.name.slice(0, -this.extensionLength)) || []\n }\n catch (err) {}\n }\n const keys = [...(this.fileKeys || [])]\n for (const key of Object.keys(this.store)) {\n if (!keys.includes(key))\n keys.push(key)\n }\n keys.sort()\n return keys\n }\n}\n"],"mappings":";;;;;;;;;;;;AAkBA,IAAa,cAAb,MAA+D;CAC7D,AAAQ,QAAkC,EAAE;CAC5C,AAAQ;CACR,AAAQ,WAAsB;CAC9B,AAAQ,SAAS;CACjB,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,MAA0B,EAAE,EAAE;AACxC,OAAK,iCAAkBA,qBAAQ,KAAK,EAAE,IAAI,QAAQ,eAAe;AACjE,OAAK,SAAS,CAAC,CAAC,IAAI;AACpB,OAAK,YAAY,IAAI,aAAa;AAElC,MAAI,IAAI,aAAa,CAAC,KAAK,UAAU,WAAW,IAAI,CAClD,MAAK,YAAY,IAAI,KAAK;AAE5B,OAAK,kBAAkB,KAAK,UAAU;AAEtC,OAAK,iBAAiB,IAAI,oBAAoB,SAAsB;AAClE,UAAO,KAAK,SACRC,2CAAkB,MAAM,MAAM,EAAE,GAChCA,2CAAkB,KAAK;;AAG7B,OAAK,mBAAmB,IAAI,sBAAsB,SAAiB;AACjE,OAAI;AACF,WAAO,KAAK,MAAM,KAAK;YAElB,KAAK;;AAKd,OAAK,gBAAgB,IAAI,iBAAiBC;;CAG5C,QAAQ,KAAa,OAAgB;AACnC,OAAK,MAAM,OAAOC,sCAAY,MAAM;AACpC,MAAI;GACF,MAAM,OAAO,KAAK,eAAe,MAAM;GACvC,MAAM,OAAO,KAAK,QAAQ,IAAI;AAC9B,iDAAkB,KAAK,EAAE,EAAE,WAAW,MAAM,CAAC;AAC7C,8BAAc,MAAM,MAAM,OAAO;WAE5B,KAAK;;CAKd,QAAQ,KAAqB;AAC3B,gCAAe,KAAK,SAAS,KAAK,cAAc,IAAI,GAAG,KAAK,UAAU;;CAGxE,UAAU,KAAkB;EAC1B,MAAM,OAAO,KAAK,QAAQ,IAAI;AAC9B,SAAOC,mBAAO,+BAAkB,KAAK,CAAC;;CAGxC,QAAQ,KAA4B;EAClC,MAAM,QAAQ,KAAK,MAAM;AAGzB,MAAI,UAAU,KACZ;AAEF,MAAI,SAAS,KACX,QAAOD,sCAAY,MAAM;AAE3B,MAAI;GAEF,MAAM,iCADO,KAAK,QAAQ,IAAI,EACE,OAAO;AACvC,OAAI,QAAQ,MAAM;IAChB,MAAM,QAAQ,KAAK,iBAAiB,KAAK;AACzC,SAAK,MAAM,OAAO;AAClB,WAAO;;WAGJ,KAAK;AAEV,QAAK,MAAM,OAAO;;;CAItB,WAAW,KAAmB;AAC5B,SAAO,KAAK,MAAM;AAClB,MAAI,KAAK,YAAY,MAAM;GACzB,MAAM,QAAgB,KAAK,SAAS,QAAQ,IAAI;AAChD,OAAI,UAAU,GACZ,MAAK,SAAS,OAAO,OAAO,EAAE;;AAElC,MAAI;AAEF,2BADa,KAAK,QAAQ,IAAI,CACd;WAEX,KAAK;;CAGd,QAAc;AACZ,OAAK,WAAW,EAAE;AAClB,OAAK,QAAQ,EAAE;AACf,sBAAO,KAAK,SAAS;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC;;CAGxD,UAAoB;AAClB,MAAI,KAAK,YAAY,KACnB,KAAI;AACF,QAAK,oCACW,KAAK,SAAS,EAAE,eAAe,MAAM,CAAC,CACjD,QACC,SACE,CAAC,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS,KAAK,UAAU,CAC5D,CACA,KAAI,SAAQ,KAAK,KAAK,MAAM,GAAG,CAAC,KAAK,gBAAgB,CAAC,IAAI,EAAE;WAE5D,KAAK;EAEd,MAAM,OAAO,CAAC,GAAI,KAAK,YAAY,EAAE,CAAE;AACvC,OAAK,MAAM,OAAO,OAAO,KAAK,KAAK,MAAM,CACvC,KAAI,CAAC,KAAK,SAAS,IAAI,CACrB,MAAK,KAAK,IAAI;AAElB,OAAK,MAAM;AACX,SAAO"}
|
|
@@ -1,2 +1,98 @@
|
|
|
1
|
-
import{jsonStringifySafe
|
|
1
|
+
import { jsonStringifySafe } from "../common/data/json.mjs";
|
|
2
|
+
import { cloneObject } from "../common/data/utils.mjs";
|
|
3
|
+
import { toValidFilename } from "../common/data/path.mjs";
|
|
4
|
+
import process from "node:process";
|
|
5
|
+
import { mkdirSync, readFileSync, readdirSync, rmSync, unlinkSync, writeFileSync } from "node:fs";
|
|
6
|
+
import { dirname, resolve } from "node:path";
|
|
7
|
+
import { Buffer } from "node:buffer";
|
|
8
|
+
|
|
9
|
+
//#region src/node/filestorage.ts
|
|
10
|
+
var FileStorage = class {
|
|
11
|
+
store = {};
|
|
12
|
+
dirname;
|
|
13
|
+
fileKeys = void 0;
|
|
14
|
+
pretty = false;
|
|
15
|
+
extension;
|
|
16
|
+
extensionLength;
|
|
17
|
+
objectFromString;
|
|
18
|
+
objectToString;
|
|
19
|
+
keyToFilename;
|
|
20
|
+
constructor(opt = {}) {
|
|
21
|
+
this.dirname = resolve(process.cwd(), opt.path ?? ".fileStorage");
|
|
22
|
+
this.pretty = !!opt.pretty;
|
|
23
|
+
this.extension = opt.extension ?? ".json";
|
|
24
|
+
if (opt.extension && !this.extension.startsWith(".")) this.extension = `.${this.extension}`;
|
|
25
|
+
this.extensionLength = this.extension.length;
|
|
26
|
+
this.objectToString = opt.objectToString ?? ((data) => {
|
|
27
|
+
return this.pretty ? jsonStringifySafe(data, null, 2) : jsonStringifySafe(data);
|
|
28
|
+
});
|
|
29
|
+
this.objectFromString = opt.objectFromString ?? ((data) => {
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(data);
|
|
32
|
+
} catch (err) {}
|
|
33
|
+
});
|
|
34
|
+
this.keyToFilename = opt.keyToFilename ?? toValidFilename;
|
|
35
|
+
}
|
|
36
|
+
setItem(key, value) {
|
|
37
|
+
this.store[key] = cloneObject(value);
|
|
38
|
+
try {
|
|
39
|
+
const data = this.objectToString(value);
|
|
40
|
+
const path = this.getPath(key);
|
|
41
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
42
|
+
writeFileSync(path, data, "utf8");
|
|
43
|
+
} catch (err) {}
|
|
44
|
+
}
|
|
45
|
+
getPath(key) {
|
|
46
|
+
return resolve(this.dirname, this.keyToFilename(key) + this.extension);
|
|
47
|
+
}
|
|
48
|
+
getBuffer(key) {
|
|
49
|
+
const path = this.getPath(key);
|
|
50
|
+
return Buffer.from(readFileSync(path));
|
|
51
|
+
}
|
|
52
|
+
getItem(key) {
|
|
53
|
+
const value = this.store[key];
|
|
54
|
+
if (value === null) return;
|
|
55
|
+
if (value != null) return cloneObject(value);
|
|
56
|
+
try {
|
|
57
|
+
const data = readFileSync(this.getPath(key), "utf8");
|
|
58
|
+
if (data != null) {
|
|
59
|
+
const value = this.objectFromString(data);
|
|
60
|
+
this.store[key] = value;
|
|
61
|
+
return value;
|
|
62
|
+
}
|
|
63
|
+
} catch (err) {
|
|
64
|
+
this.store[key] = null;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
removeItem(key) {
|
|
68
|
+
delete this.store[key];
|
|
69
|
+
if (this.fileKeys != null) {
|
|
70
|
+
const index = this.fileKeys.indexOf(key);
|
|
71
|
+
if (index !== -1) this.fileKeys.splice(index, 1);
|
|
72
|
+
}
|
|
73
|
+
try {
|
|
74
|
+
unlinkSync(this.getPath(key));
|
|
75
|
+
} catch (err) {}
|
|
76
|
+
}
|
|
77
|
+
clear() {
|
|
78
|
+
this.fileKeys = [];
|
|
79
|
+
this.store = {};
|
|
80
|
+
rmSync(this.dirname, {
|
|
81
|
+
recursive: true,
|
|
82
|
+
force: true
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
allKeys() {
|
|
86
|
+
if (this.fileKeys == null) try {
|
|
87
|
+
this.fileKeys = readdirSync(this.dirname, { withFileTypes: true }).filter((item) => !item.isDirectory() && item.name.endsWith(this.extension)).map((item) => item.name.slice(0, -this.extensionLength)) || [];
|
|
88
|
+
} catch (err) {}
|
|
89
|
+
const keys = [...this.fileKeys || []];
|
|
90
|
+
for (const key of Object.keys(this.store)) if (!keys.includes(key)) keys.push(key);
|
|
91
|
+
keys.sort();
|
|
92
|
+
return keys;
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
//#endregion
|
|
97
|
+
export { FileStorage };
|
|
2
98
|
//# sourceMappingURL=filestorage.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filestorage.mjs","names":[],"sources":["../../src/node/filestorage.ts"],"sourcesContent":["import type { Json, ObjectStorage } from '../common/types'\nimport { Buffer } from 'node:buffer'\nimport { mkdirSync, readdirSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport process from 'node:process'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path ?? '.fileStorage')\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? '.json'\n\n if (opt.extension && !this.extension.startsWith('.'))\n this.extension = `.${this.extension}`\n\n this.extensionLength = this.extension.length\n\n this.objectToString = opt.objectToString ?? ((data: any): string => {\n return this.pretty\n ? jsonStringifySafe(data, null, 2)\n : jsonStringifySafe(data)\n })\n\n this.objectFromString = opt.objectFromString ?? ((data: string) => {\n try {\n return JSON.parse(data)\n }\n catch (err) {\n // log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, 'utf8')\n }\n catch (err) {\n // log.error('setItem error', err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): any {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n const value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null)\n return\n\n if (value != null)\n return cloneObject(value) // this.objectFromString(value)\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, 'utf8')\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n }\n catch (err) {\n // log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1)\n this.fileKeys.splice(index, 1)\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n }\n catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys\n = readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n item =>\n !item.isDirectory() && item.name.endsWith(this.extension),\n )\n .map(item => item.name.slice(0, -this.extensionLength)) || []\n }\n catch (err) {}\n }\n const keys = [...(this.fileKeys || [])]\n for (const key of Object.keys(this.store)) {\n if (!keys.includes(key))\n keys.push(key)\n }\n keys.sort()\n return keys\n }\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"filestorage.mjs","names":[],"sources":["../../src/node/filestorage.ts"],"sourcesContent":["import type { Json, ObjectStorage } from '../common/types'\nimport { Buffer } from 'node:buffer'\nimport { mkdirSync, readdirSync, readFileSync, rmSync, unlinkSync, writeFileSync } from 'node:fs'\nimport { dirname, resolve } from 'node:path'\nimport process from 'node:process'\nimport { jsonStringifySafe } from '../common/data/json'\nimport { toValidFilename } from '../common/data/path'\nimport { cloneObject } from '../common/data/utils'\n\nexport interface FileStorageOptions {\n pretty?: boolean\n path?: string\n extension?: string\n objectFromString?: (data: string) => any\n objectToString?: (data: any) => string\n keyToFilename?: (key: string) => string\n}\n\nexport class FileStorage<T = Json> implements ObjectStorage<T> {\n private store: Record<string, T | null> = {}\n private dirname: string\n private fileKeys?: string[] = undefined\n private pretty = false\n private extension: string\n private extensionLength: number\n private objectFromString: (data: string) => any\n private objectToString: (data: any) => string\n private keyToFilename: (key: string) => string\n\n constructor(opt: FileStorageOptions = {}) {\n this.dirname = resolve(process.cwd(), opt.path ?? '.fileStorage')\n this.pretty = !!opt.pretty\n this.extension = opt.extension ?? '.json'\n\n if (opt.extension && !this.extension.startsWith('.'))\n this.extension = `.${this.extension}`\n\n this.extensionLength = this.extension.length\n\n this.objectToString = opt.objectToString ?? ((data: any): string => {\n return this.pretty\n ? jsonStringifySafe(data, null, 2)\n : jsonStringifySafe(data)\n })\n\n this.objectFromString = opt.objectFromString ?? ((data: string) => {\n try {\n return JSON.parse(data)\n }\n catch (err) {\n // log.warn(`fileStorage parse error '${err}' in`, data)\n }\n })\n\n this.keyToFilename = opt.keyToFilename ?? toValidFilename\n }\n\n setItem(key: string, value: T): void {\n this.store[key] = cloneObject(value)\n try {\n const data = this.objectToString(value)\n const path = this.getPath(key)\n mkdirSync(dirname(path), { recursive: true })\n writeFileSync(path, data, 'utf8')\n }\n catch (err) {\n // log.error('setItem error', err)\n }\n }\n\n getPath(key: string): string {\n return resolve(this.dirname, this.keyToFilename(key) + this.extension)\n }\n\n getBuffer(key: string): any {\n const path = this.getPath(key)\n return Buffer.from(readFileSync(path))\n }\n\n getItem(key: string): T | undefined {\n const value = this.store[key]\n\n // null is an indicator for not existing!\n if (value === null)\n return\n\n if (value != null)\n return cloneObject(value) // this.objectFromString(value)\n\n try {\n const path = this.getPath(key)\n const data = readFileSync(path, 'utf8')\n if (data != null) {\n const value = this.objectFromString(data)\n this.store[key] = value\n return value\n }\n }\n catch (err) {\n // log.warn(\"getItem error\", err)\n this.store[key] = null // do not retry next time\n }\n }\n\n removeItem(key: string): void {\n delete this.store[key]\n if (this.fileKeys != null) {\n const index: number = this.fileKeys.indexOf(key)\n if (index !== -1)\n this.fileKeys.splice(index, 1)\n }\n try {\n const path = this.getPath(key)\n unlinkSync(path)\n }\n catch (err) {}\n }\n\n clear(): void {\n this.fileKeys = []\n this.store = {}\n rmSync(this.dirname, { recursive: true, force: true })\n }\n\n allKeys(): string[] {\n if (this.fileKeys == null) {\n try {\n this.fileKeys\n = readdirSync(this.dirname, { withFileTypes: true })\n .filter(\n item =>\n !item.isDirectory() && item.name.endsWith(this.extension),\n )\n .map(item => item.name.slice(0, -this.extensionLength)) || []\n }\n catch (err) {}\n }\n const keys = [...(this.fileKeys || [])]\n for (const key of Object.keys(this.store)) {\n if (!keys.includes(key))\n keys.push(key)\n }\n keys.sort()\n return keys\n }\n}\n"],"mappings":";;;;;;;;;AAkBA,IAAa,cAAb,MAA+D;CAC7D,AAAQ,QAAkC,EAAE;CAC5C,AAAQ;CACR,AAAQ,WAAsB;CAC9B,AAAQ,SAAS;CACjB,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CACR,AAAQ;CAER,YAAY,MAA0B,EAAE,EAAE;AACxC,OAAK,UAAU,QAAQ,QAAQ,KAAK,EAAE,IAAI,QAAQ,eAAe;AACjE,OAAK,SAAS,CAAC,CAAC,IAAI;AACpB,OAAK,YAAY,IAAI,aAAa;AAElC,MAAI,IAAI,aAAa,CAAC,KAAK,UAAU,WAAW,IAAI,CAClD,MAAK,YAAY,IAAI,KAAK;AAE5B,OAAK,kBAAkB,KAAK,UAAU;AAEtC,OAAK,iBAAiB,IAAI,oBAAoB,SAAsB;AAClE,UAAO,KAAK,SACR,kBAAkB,MAAM,MAAM,EAAE,GAChC,kBAAkB,KAAK;;AAG7B,OAAK,mBAAmB,IAAI,sBAAsB,SAAiB;AACjE,OAAI;AACF,WAAO,KAAK,MAAM,KAAK;YAElB,KAAK;;AAKd,OAAK,gBAAgB,IAAI,iBAAiB;;CAG5C,QAAQ,KAAa,OAAgB;AACnC,OAAK,MAAM,OAAO,YAAY,MAAM;AACpC,MAAI;GACF,MAAM,OAAO,KAAK,eAAe,MAAM;GACvC,MAAM,OAAO,KAAK,QAAQ,IAAI;AAC9B,aAAU,QAAQ,KAAK,EAAE,EAAE,WAAW,MAAM,CAAC;AAC7C,iBAAc,MAAM,MAAM,OAAO;WAE5B,KAAK;;CAKd,QAAQ,KAAqB;AAC3B,SAAO,QAAQ,KAAK,SAAS,KAAK,cAAc,IAAI,GAAG,KAAK,UAAU;;CAGxE,UAAU,KAAkB;EAC1B,MAAM,OAAO,KAAK,QAAQ,IAAI;AAC9B,SAAO,OAAO,KAAK,aAAa,KAAK,CAAC;;CAGxC,QAAQ,KAA4B;EAClC,MAAM,QAAQ,KAAK,MAAM;AAGzB,MAAI,UAAU,KACZ;AAEF,MAAI,SAAS,KACX,QAAO,YAAY,MAAM;AAE3B,MAAI;GAEF,MAAM,OAAO,aADA,KAAK,QAAQ,IAAI,EACE,OAAO;AACvC,OAAI,QAAQ,MAAM;IAChB,MAAM,QAAQ,KAAK,iBAAiB,KAAK;AACzC,SAAK,MAAM,OAAO;AAClB,WAAO;;WAGJ,KAAK;AAEV,QAAK,MAAM,OAAO;;;CAItB,WAAW,KAAmB;AAC5B,SAAO,KAAK,MAAM;AAClB,MAAI,KAAK,YAAY,MAAM;GACzB,MAAM,QAAgB,KAAK,SAAS,QAAQ,IAAI;AAChD,OAAI,UAAU,GACZ,MAAK,SAAS,OAAO,OAAO,EAAE;;AAElC,MAAI;AAEF,cADa,KAAK,QAAQ,IAAI,CACd;WAEX,KAAK;;CAGd,QAAc;AACZ,OAAK,WAAW,EAAE;AAClB,OAAK,QAAQ,EAAE;AACf,SAAO,KAAK,SAAS;GAAE,WAAW;GAAM,OAAO;GAAM,CAAC;;CAGxD,UAAoB;AAClB,MAAI,KAAK,YAAY,KACnB,KAAI;AACF,QAAK,WACD,YAAY,KAAK,SAAS,EAAE,eAAe,MAAM,CAAC,CACjD,QACC,SACE,CAAC,KAAK,aAAa,IAAI,KAAK,KAAK,SAAS,KAAK,UAAU,CAC5D,CACA,KAAI,SAAQ,KAAK,KAAK,MAAM,GAAG,CAAC,KAAK,gBAAgB,CAAC,IAAI,EAAE;WAE5D,KAAK;EAEd,MAAM,OAAO,CAAC,GAAI,KAAK,YAAY,EAAE,CAAE;AACvC,OAAK,MAAM,OAAO,OAAO,KAAK,KAAK,MAAM,CACvC,KAAI,CAAC,KAAK,SAAS,IAAI,CACrB,MAAK,KAAK,IAAI;AAElB,OAAK,MAAM;AACX,SAAO"}
|
package/dist/node/fs.cjs
CHANGED
|
@@ -1,2 +1,120 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,
|
|
1
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
2
|
+
const require_chunk = require('../chunk-uaV2rQ02.cjs');
|
|
3
|
+
const require_common_data_json = require('../common/data/json.cjs');
|
|
4
|
+
const require_common_data_is = require('../common/data/is.cjs');
|
|
5
|
+
const require_bin = require('../bin-Ddaz2lxM.cjs');
|
|
6
|
+
let node_process = require("node:process");
|
|
7
|
+
node_process = require_chunk.__toESM(node_process, 1);
|
|
8
|
+
let node_path = require("node:path");
|
|
9
|
+
let node_fs_promises = require("node:fs/promises");
|
|
10
|
+
|
|
11
|
+
//#region src/node/fs.ts
|
|
12
|
+
/** Try to use `~` for HOME folder if possible */
|
|
13
|
+
function toHumanReadableFilePath(path) {
|
|
14
|
+
const p = (0, node_path.normalize)(path);
|
|
15
|
+
const h = node_process.default.env.HOME;
|
|
16
|
+
if (h && p.startsWith(h)) return `~${p.slice(h.length)}`;
|
|
17
|
+
return p;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Tests whether a value is a valid file path. Attention! Also folders are valid file paths.
|
|
21
|
+
* @deprecated
|
|
22
|
+
*/
|
|
23
|
+
async function exists(path) {
|
|
24
|
+
try {
|
|
25
|
+
await (0, node_fs_promises.stat)(path);
|
|
26
|
+
} catch (err) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
async function isFile(path) {
|
|
32
|
+
try {
|
|
33
|
+
return (await (0, node_fs_promises.stat)(path)).isFile();
|
|
34
|
+
} catch (err) {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
async function isFolder(path) {
|
|
39
|
+
try {
|
|
40
|
+
return (await (0, node_fs_promises.stat)(path)).isDirectory();
|
|
41
|
+
} catch (err) {
|
|
42
|
+
return false;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function isHiddenPath(path) {
|
|
46
|
+
return path.startsWith(".") || path.includes("/.");
|
|
47
|
+
}
|
|
48
|
+
/** Create missing folders e.g. `/a/b/c` will create folders `/a/b/c` */
|
|
49
|
+
async function ensureFolder(...parts) {
|
|
50
|
+
const path = (0, node_path.join)(...parts);
|
|
51
|
+
if (!await isFolder(path)) await (0, node_fs_promises.mkdir)(path, { recursive: true });
|
|
52
|
+
return path;
|
|
53
|
+
}
|
|
54
|
+
/** Create missing folder to file location e.g. `/a/b/c/s.txt` will create folders `/a/b/c` */
|
|
55
|
+
async function ensureFolderForFile(...parts) {
|
|
56
|
+
const path = (0, node_path.dirname)((0, node_path.join)(...parts));
|
|
57
|
+
if (!await isFolder(path)) await (0, node_fs_promises.mkdir)(path, { recursive: true });
|
|
58
|
+
return path;
|
|
59
|
+
}
|
|
60
|
+
async function removeFolder(...parts) {
|
|
61
|
+
const path = (0, node_path.join)(...parts);
|
|
62
|
+
if (await isFolder(path)) await (0, node_fs_promises.rm)(path, { recursive: true });
|
|
63
|
+
return path;
|
|
64
|
+
}
|
|
65
|
+
async function readText(...parts) {
|
|
66
|
+
const path = (0, node_path.join)(...parts);
|
|
67
|
+
if (await isFile(path)) return await (0, node_fs_promises.readFile)(path, "utf-8");
|
|
68
|
+
}
|
|
69
|
+
async function readJson(...parts) {
|
|
70
|
+
const content = await readText(...parts);
|
|
71
|
+
if (content != null) try {
|
|
72
|
+
return JSON.parse(content);
|
|
73
|
+
} catch (err) {}
|
|
74
|
+
}
|
|
75
|
+
async function readBin(...parts) {
|
|
76
|
+
const path = (0, node_path.join)(...parts);
|
|
77
|
+
if (await isFile(path)) return require_bin.toUint8Array(await (0, node_fs_promises.readFile)(path));
|
|
78
|
+
}
|
|
79
|
+
/** @deprecated use readJson or readBin */
|
|
80
|
+
async function readData(...parts) {
|
|
81
|
+
const path = (0, node_path.join)(...parts);
|
|
82
|
+
if (await isFile(path)) return await (0, node_fs_promises.readFile)(path);
|
|
83
|
+
}
|
|
84
|
+
async function writeText(path, content, createFolders = false) {
|
|
85
|
+
if (createFolders) await ensureFolderForFile(path);
|
|
86
|
+
await (0, node_fs_promises.writeFile)(path, content, "utf-8");
|
|
87
|
+
}
|
|
88
|
+
/** @deprecated use writeBin or writeJson */
|
|
89
|
+
async function writeData(path, content, createFolders = false) {
|
|
90
|
+
if (createFolders) await ensureFolderForFile(path);
|
|
91
|
+
await (0, node_fs_promises.writeFile)(path, require_common_data_is.isUint8Array(content) ? content : JSON.stringify(content));
|
|
92
|
+
}
|
|
93
|
+
async function writeBin(path, content, info = {}) {
|
|
94
|
+
const { createFolders = false } = info;
|
|
95
|
+
if (createFolders) await ensureFolderForFile(path);
|
|
96
|
+
await (0, node_fs_promises.writeFile)(path, content);
|
|
97
|
+
}
|
|
98
|
+
async function writeJson(path, content, info = {}) {
|
|
99
|
+
const { createFolders = false, pretty = false } = info;
|
|
100
|
+
await writeText(path, require_common_data_json.jsonStringifySorted(content, pretty ? 2 : void 0), createFolders);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
//#endregion
|
|
104
|
+
exports.ensureFolder = ensureFolder;
|
|
105
|
+
exports.ensureFolderForFile = ensureFolderForFile;
|
|
106
|
+
exports.exists = exists;
|
|
107
|
+
exports.isFile = isFile;
|
|
108
|
+
exports.isFolder = isFolder;
|
|
109
|
+
exports.isHiddenPath = isHiddenPath;
|
|
110
|
+
exports.readBin = readBin;
|
|
111
|
+
exports.readData = readData;
|
|
112
|
+
exports.readJson = readJson;
|
|
113
|
+
exports.readText = readText;
|
|
114
|
+
exports.removeFolder = removeFolder;
|
|
115
|
+
exports.toHumanReadableFilePath = toHumanReadableFilePath;
|
|
116
|
+
exports.writeBin = writeBin;
|
|
117
|
+
exports.writeData = writeData;
|
|
118
|
+
exports.writeJson = writeJson;
|
|
119
|
+
exports.writeText = writeText;
|
|
2
120
|
//# sourceMappingURL=fs.cjs.map
|
package/dist/node/fs.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs.cjs","names":["process","toUint8Array","isUint8Array","jsonStringifySorted"],"sources":["../../src/node/fs.ts"],"sourcesContent":["import { mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { dirname, join as joinPath, normalize } from 'node:path'\nimport process from 'node:process'\nimport { toUint8Array } from '../common/data/bin'\nimport { isUint8Array } from '../common/data/is'\nimport { jsonStringifySorted } from '../common/data/json'\n\n/** Try to use `~` for HOME folder if possible */\nexport function toHumanReadableFilePath(path: string) {\n const p = normalize(path)\n const h = process.env.HOME\n if (h && p.startsWith(h))\n return `~${p.slice(h.length)}`\n\n return p\n}\n\n/**\n * Tests whether a value is a valid file path. Attention! Also folders are valid file paths.\n * @deprecated\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n }\n catch (err) {\n return false\n }\n return true\n}\n\nexport async function isFile(path: string) {\n try {\n const s = await stat(path)\n return s.isFile()\n }\n catch (err) {\n return false\n }\n}\n\nexport async function isFolder(path: string) {\n try {\n const s = await stat(path)\n return s.isDirectory()\n }\n catch (err) {\n return false\n }\n}\n\nexport function isHiddenPath(path: string): boolean {\n return path.startsWith('.') || path.includes('/.')\n}\n\n/** Create missing folders e.g. `/a/b/c` will create folders `/a/b/c` */\nexport async function ensureFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (!(await isFolder(path)))\n await mkdir(path, { recursive: true })\n return path\n}\n\n/** Create missing folder to file location e.g. `/a/b/c/s.txt` will create folders `/a/b/c` */\nexport async function ensureFolderForFile(...parts: string[]): Promise<string> {\n const path = dirname(joinPath(...parts))\n if (!(await isFolder(path)))\n await mkdir(path, { recursive: true })\n return path\n}\n\nexport async function removeFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (await isFolder(path))\n await rm(path, { recursive: true })\n return path\n}\n\nexport async function readText(...parts: string[]): Promise<string | undefined> {\n const path = joinPath(...parts)\n if (await isFile(path))\n return await readFile(path, 'utf-8')\n}\n\nexport async function readJson<T = object>(...parts: string[]): Promise<T | undefined> {\n const content = await readText(...parts)\n if (content != null) {\n try {\n return JSON.parse(content)\n }\n catch (err) { }\n }\n}\n\nexport async function readBin(...parts: string[]): Promise<Uint8Array | undefined> {\n const path = joinPath(...parts)\n if (await isFile(path))\n return toUint8Array(await readFile(path))\n}\n\n/** @deprecated use readJson or readBin */\nexport async function readData(...parts: string[]): Promise<Uint8Array | undefined> {\n const path = joinPath(...parts)\n if (await isFile(path))\n return await readFile(path)\n}\n\nexport async function writeText(path: string, content: string, createFolders = false): Promise<void> {\n if (createFolders)\n await ensureFolderForFile(path)\n await writeFile(path, content, 'utf-8')\n}\n\n/** @deprecated use writeBin or writeJson */\nexport async function writeData(path: string, content: object | Uint8Array, createFolders = false): Promise<void> {\n if (createFolders)\n await ensureFolderForFile(path)\n const data = isUint8Array(content) ? content : JSON.stringify(content)\n await writeFile(path, data)\n}\n\nexport async function writeBin(path: string, content: Uint8Array, info: {\n createFolders?: boolean\n} = {}): Promise<void> {\n const { createFolders = false } = info\n if (createFolders)\n await ensureFolderForFile(path)\n await writeFile(path, content)\n}\n\nexport async function writeJson<T = object>(path: string, content: T, info: {\n createFolders?: boolean\n pretty?: boolean\n} = {}): Promise<void> {\n const { createFolders = false, pretty = false } = info\n await writeText(path, jsonStringifySorted(content, pretty ? 2 : undefined), createFolders)\n}\n"],"mappings":"
|
|
1
|
+
{"version":3,"file":"fs.cjs","names":["process","toUint8Array","isUint8Array","jsonStringifySorted"],"sources":["../../src/node/fs.ts"],"sourcesContent":["import { mkdir, readFile, rm, stat, writeFile } from 'node:fs/promises'\nimport { dirname, join as joinPath, normalize } from 'node:path'\nimport process from 'node:process'\nimport { toUint8Array } from '../common/data/bin'\nimport { isUint8Array } from '../common/data/is'\nimport { jsonStringifySorted } from '../common/data/json'\n\n/** Try to use `~` for HOME folder if possible */\nexport function toHumanReadableFilePath(path: string) {\n const p = normalize(path)\n const h = process.env.HOME\n if (h && p.startsWith(h))\n return `~${p.slice(h.length)}`\n\n return p\n}\n\n/**\n * Tests whether a value is a valid file path. Attention! Also folders are valid file paths.\n * @deprecated\n */\nexport async function exists(path: string): Promise<boolean> {\n try {\n await stat(path)\n }\n catch (err) {\n return false\n }\n return true\n}\n\nexport async function isFile(path: string) {\n try {\n const s = await stat(path)\n return s.isFile()\n }\n catch (err) {\n return false\n }\n}\n\nexport async function isFolder(path: string) {\n try {\n const s = await stat(path)\n return s.isDirectory()\n }\n catch (err) {\n return false\n }\n}\n\nexport function isHiddenPath(path: string): boolean {\n return path.startsWith('.') || path.includes('/.')\n}\n\n/** Create missing folders e.g. `/a/b/c` will create folders `/a/b/c` */\nexport async function ensureFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (!(await isFolder(path)))\n await mkdir(path, { recursive: true })\n return path\n}\n\n/** Create missing folder to file location e.g. `/a/b/c/s.txt` will create folders `/a/b/c` */\nexport async function ensureFolderForFile(...parts: string[]): Promise<string> {\n const path = dirname(joinPath(...parts))\n if (!(await isFolder(path)))\n await mkdir(path, { recursive: true })\n return path\n}\n\nexport async function removeFolder(...parts: string[]): Promise<string> {\n const path = joinPath(...parts)\n if (await isFolder(path))\n await rm(path, { recursive: true })\n return path\n}\n\nexport async function readText(...parts: string[]): Promise<string | undefined> {\n const path = joinPath(...parts)\n if (await isFile(path))\n return await readFile(path, 'utf-8')\n}\n\nexport async function readJson<T = object>(...parts: string[]): Promise<T | undefined> {\n const content = await readText(...parts)\n if (content != null) {\n try {\n return JSON.parse(content)\n }\n catch (err) { }\n }\n}\n\nexport async function readBin(...parts: string[]): Promise<Uint8Array | undefined> {\n const path = joinPath(...parts)\n if (await isFile(path))\n return toUint8Array(await readFile(path))\n}\n\n/** @deprecated use readJson or readBin */\nexport async function readData(...parts: string[]): Promise<Uint8Array | undefined> {\n const path = joinPath(...parts)\n if (await isFile(path))\n return await readFile(path)\n}\n\nexport async function writeText(path: string, content: string, createFolders = false): Promise<void> {\n if (createFolders)\n await ensureFolderForFile(path)\n await writeFile(path, content, 'utf-8')\n}\n\n/** @deprecated use writeBin or writeJson */\nexport async function writeData(path: string, content: object | Uint8Array, createFolders = false): Promise<void> {\n if (createFolders)\n await ensureFolderForFile(path)\n const data = isUint8Array(content) ? content : JSON.stringify(content)\n await writeFile(path, data)\n}\n\nexport async function writeBin(path: string, content: Uint8Array, info: {\n createFolders?: boolean\n} = {}): Promise<void> {\n const { createFolders = false } = info\n if (createFolders)\n await ensureFolderForFile(path)\n await writeFile(path, content)\n}\n\nexport async function writeJson<T = object>(path: string, content: T, info: {\n createFolders?: boolean\n pretty?: boolean\n} = {}): Promise<void> {\n const { createFolders = false, pretty = false } = info\n await writeText(path, jsonStringifySorted(content, pretty ? 2 : undefined), createFolders)\n}\n"],"mappings":";;;;;;;;;;;;AAQA,SAAgB,wBAAwB,MAAc;CACpD,MAAM,6BAAc,KAAK;CACzB,MAAM,IAAIA,qBAAQ,IAAI;AACtB,KAAI,KAAK,EAAE,WAAW,EAAE,CACtB,QAAO,IAAI,EAAE,MAAM,EAAE,OAAO;AAE9B,QAAO;;;;;;AAOT,eAAsB,OAAO,MAAgC;AAC3D,KAAI;AACF,mCAAW,KAAK;UAEX,KAAK;AACV,SAAO;;AAET,QAAO;;AAGT,eAAsB,OAAO,MAAc;AACzC,KAAI;AAEF,UADU,iCAAW,KAAK,EACjB,QAAQ;UAEZ,KAAK;AACV,SAAO;;;AAIX,eAAsB,SAAS,MAAc;AAC3C,KAAI;AAEF,UADU,iCAAW,KAAK,EACjB,aAAa;UAEjB,KAAK;AACV,SAAO;;;AAIX,SAAgB,aAAa,MAAuB;AAClD,QAAO,KAAK,WAAW,IAAI,IAAI,KAAK,SAAS,KAAK;;;AAIpD,eAAsB,aAAa,GAAG,OAAkC;CACtE,MAAM,2BAAgB,GAAG,MAAM;AAC/B,KAAI,CAAE,MAAM,SAAS,KAAK,CACxB,mCAAY,MAAM,EAAE,WAAW,MAAM,CAAC;AACxC,QAAO;;;AAIT,eAAsB,oBAAoB,GAAG,OAAkC;CAC7E,MAAM,kDAAwB,GAAG,MAAM,CAAC;AACxC,KAAI,CAAE,MAAM,SAAS,KAAK,CACxB,mCAAY,MAAM,EAAE,WAAW,MAAM,CAAC;AACxC,QAAO;;AAGT,eAAsB,aAAa,GAAG,OAAkC;CACtE,MAAM,2BAAgB,GAAG,MAAM;AAC/B,KAAI,MAAM,SAAS,KAAK,CACtB,gCAAS,MAAM,EAAE,WAAW,MAAM,CAAC;AACrC,QAAO;;AAGT,eAAsB,SAAS,GAAG,OAA8C;CAC9E,MAAM,2BAAgB,GAAG,MAAM;AAC/B,KAAI,MAAM,OAAO,KAAK,CACpB,QAAO,qCAAe,MAAM,QAAQ;;AAGxC,eAAsB,SAAqB,GAAG,OAAyC;CACrF,MAAM,UAAU,MAAM,SAAS,GAAG,MAAM;AACxC,KAAI,WAAW,KACb,KAAI;AACF,SAAO,KAAK,MAAM,QAAQ;UAErB,KAAK;;AAIhB,eAAsB,QAAQ,GAAG,OAAkD;CACjF,MAAM,2BAAgB,GAAG,MAAM;AAC/B,KAAI,MAAM,OAAO,KAAK,CACpB,QAAOC,yBAAa,qCAAe,KAAK,CAAC;;;AAI7C,eAAsB,SAAS,GAAG,OAAkD;CAClF,MAAM,2BAAgB,GAAG,MAAM;AAC/B,KAAI,MAAM,OAAO,KAAK,CACpB,QAAO,qCAAe,KAAK;;AAG/B,eAAsB,UAAU,MAAc,SAAiB,gBAAgB,OAAsB;AACnG,KAAI,cACF,OAAM,oBAAoB,KAAK;AACjC,uCAAgB,MAAM,SAAS,QAAQ;;;AAIzC,eAAsB,UAAU,MAAc,SAA8B,gBAAgB,OAAsB;AAChH,KAAI,cACF,OAAM,oBAAoB,KAAK;AAEjC,uCAAgB,MADHC,oCAAa,QAAQ,GAAG,UAAU,KAAK,UAAU,QAAQ,CAC3C;;AAG7B,eAAsB,SAAS,MAAc,SAAqB,OAE9D,EAAE,EAAiB;CACrB,MAAM,EAAE,gBAAgB,UAAU;AAClC,KAAI,cACF,OAAM,oBAAoB,KAAK;AACjC,uCAAgB,MAAM,QAAQ;;AAGhC,eAAsB,UAAsB,MAAc,SAAY,OAGlE,EAAE,EAAiB;CACrB,MAAM,EAAE,gBAAgB,OAAO,SAAS,UAAU;AAClD,OAAM,UAAU,MAAMC,6CAAoB,SAAS,SAAS,IAAI,OAAU,EAAE,cAAc"}
|
package/dist/node/fs.mjs
CHANGED
|
@@ -1,2 +1,102 @@
|
|
|
1
|
-
import{jsonStringifySorted
|
|
1
|
+
import { jsonStringifySorted } from "../common/data/json.mjs";
|
|
2
|
+
import { isUint8Array } from "../common/data/is.mjs";
|
|
3
|
+
import { v as toUint8Array } from "../bin-BAoS4qtm.mjs";
|
|
4
|
+
import process from "node:process";
|
|
5
|
+
import { dirname, join, normalize } from "node:path";
|
|
6
|
+
import { mkdir, readFile, rm, stat, writeFile } from "node:fs/promises";
|
|
7
|
+
|
|
8
|
+
//#region src/node/fs.ts
|
|
9
|
+
/** Try to use `~` for HOME folder if possible */
|
|
10
|
+
function toHumanReadableFilePath(path) {
|
|
11
|
+
const p = normalize(path);
|
|
12
|
+
const h = process.env.HOME;
|
|
13
|
+
if (h && p.startsWith(h)) return `~${p.slice(h.length)}`;
|
|
14
|
+
return p;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Tests whether a value is a valid file path. Attention! Also folders are valid file paths.
|
|
18
|
+
* @deprecated
|
|
19
|
+
*/
|
|
20
|
+
async function exists(path) {
|
|
21
|
+
try {
|
|
22
|
+
await stat(path);
|
|
23
|
+
} catch (err) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
async function isFile(path) {
|
|
29
|
+
try {
|
|
30
|
+
return (await stat(path)).isFile();
|
|
31
|
+
} catch (err) {
|
|
32
|
+
return false;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
async function isFolder(path) {
|
|
36
|
+
try {
|
|
37
|
+
return (await stat(path)).isDirectory();
|
|
38
|
+
} catch (err) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
function isHiddenPath(path) {
|
|
43
|
+
return path.startsWith(".") || path.includes("/.");
|
|
44
|
+
}
|
|
45
|
+
/** Create missing folders e.g. `/a/b/c` will create folders `/a/b/c` */
|
|
46
|
+
async function ensureFolder(...parts) {
|
|
47
|
+
const path = join(...parts);
|
|
48
|
+
if (!await isFolder(path)) await mkdir(path, { recursive: true });
|
|
49
|
+
return path;
|
|
50
|
+
}
|
|
51
|
+
/** Create missing folder to file location e.g. `/a/b/c/s.txt` will create folders `/a/b/c` */
|
|
52
|
+
async function ensureFolderForFile(...parts) {
|
|
53
|
+
const path = dirname(join(...parts));
|
|
54
|
+
if (!await isFolder(path)) await mkdir(path, { recursive: true });
|
|
55
|
+
return path;
|
|
56
|
+
}
|
|
57
|
+
async function removeFolder(...parts) {
|
|
58
|
+
const path = join(...parts);
|
|
59
|
+
if (await isFolder(path)) await rm(path, { recursive: true });
|
|
60
|
+
return path;
|
|
61
|
+
}
|
|
62
|
+
async function readText(...parts) {
|
|
63
|
+
const path = join(...parts);
|
|
64
|
+
if (await isFile(path)) return await readFile(path, "utf-8");
|
|
65
|
+
}
|
|
66
|
+
async function readJson(...parts) {
|
|
67
|
+
const content = await readText(...parts);
|
|
68
|
+
if (content != null) try {
|
|
69
|
+
return JSON.parse(content);
|
|
70
|
+
} catch (err) {}
|
|
71
|
+
}
|
|
72
|
+
async function readBin(...parts) {
|
|
73
|
+
const path = join(...parts);
|
|
74
|
+
if (await isFile(path)) return toUint8Array(await readFile(path));
|
|
75
|
+
}
|
|
76
|
+
/** @deprecated use readJson or readBin */
|
|
77
|
+
async function readData(...parts) {
|
|
78
|
+
const path = join(...parts);
|
|
79
|
+
if (await isFile(path)) return await readFile(path);
|
|
80
|
+
}
|
|
81
|
+
async function writeText(path, content, createFolders = false) {
|
|
82
|
+
if (createFolders) await ensureFolderForFile(path);
|
|
83
|
+
await writeFile(path, content, "utf-8");
|
|
84
|
+
}
|
|
85
|
+
/** @deprecated use writeBin or writeJson */
|
|
86
|
+
async function writeData(path, content, createFolders = false) {
|
|
87
|
+
if (createFolders) await ensureFolderForFile(path);
|
|
88
|
+
await writeFile(path, isUint8Array(content) ? content : JSON.stringify(content));
|
|
89
|
+
}
|
|
90
|
+
async function writeBin(path, content, info = {}) {
|
|
91
|
+
const { createFolders = false } = info;
|
|
92
|
+
if (createFolders) await ensureFolderForFile(path);
|
|
93
|
+
await writeFile(path, content);
|
|
94
|
+
}
|
|
95
|
+
async function writeJson(path, content, info = {}) {
|
|
96
|
+
const { createFolders = false, pretty = false } = info;
|
|
97
|
+
await writeText(path, jsonStringifySorted(content, pretty ? 2 : void 0), createFolders);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
//#endregion
|
|
101
|
+
export { ensureFolder, ensureFolderForFile, exists, isFile, isFolder, isHiddenPath, readBin, readData, readJson, readText, removeFolder, toHumanReadableFilePath, writeBin, writeData, writeJson, writeText };
|
|
2
102
|
//# sourceMappingURL=fs.mjs.map
|