@design-edito/tools 0.4.5 → 0.4.11
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/TODO.md +269 -0
- package/agnostic/arrays/dedupe/index.js +9 -7
- package/agnostic/arrays/dedupe/index.test.js +24 -0
- package/agnostic/arrays/find-duplicates/index.js +34 -22
- package/agnostic/arrays/find-duplicates/index.test.js +31 -0
- package/agnostic/arrays/index.d.ts +2 -2
- package/agnostic/arrays/index.js +2 -2
- package/agnostic/arrays/is-array-of/index.js +28 -26
- package/agnostic/arrays/is-array-of/index.test.js +56 -0
- package/agnostic/arrays/make/index.d.ts +1 -1
- package/agnostic/arrays/make/index.js +11 -6
- package/agnostic/arrays/make/index.test.js +10 -0
- package/agnostic/arrays/random-pick/index.js +38 -22
- package/agnostic/arrays/random-pick/index.test.js +23 -0
- package/agnostic/arrays/shuffle/index.js +15 -11
- package/agnostic/arrays/shuffle/index.test.js +14 -0
- package/agnostic/booleans/is-falsy/index.js +24 -15
- package/agnostic/booleans/is-falsy/index.test.js +26 -0
- package/agnostic/colors/channels/index.js +139 -936
- package/agnostic/colors/channels/index.test.js +64 -0
- package/agnostic/colors/contrast/index.js +24 -643
- package/agnostic/colors/contrast/index.test.js +21 -0
- package/agnostic/colors/convert/index.js +811 -837
- package/agnostic/colors/convert/index.test.js +98 -0
- package/agnostic/colors/cssColorsMap.js +153 -0
- package/agnostic/colors/distance/index.js +66 -538
- package/agnostic/colors/distance/index.test.js +21 -0
- package/agnostic/colors/grayscale/index.js +95 -872
- package/agnostic/colors/grayscale/index.test.js +34 -0
- package/agnostic/colors/index.d.ts +4 -4
- package/agnostic/colors/index.js +4 -4
- package/agnostic/colors/invert/index.js +34 -719
- package/agnostic/colors/invert/index.test.js +31 -0
- package/agnostic/colors/lerp/index.js +75 -804
- package/agnostic/colors/lerp/index.test.js +55 -0
- package/agnostic/colors/luminance/index.js +17 -625
- package/agnostic/colors/luminance/index.test.js +30 -0
- package/agnostic/colors/palette/index.js +83 -917
- package/agnostic/colors/palette/index.test.js +35 -0
- package/agnostic/colors/rotate/index.js +35 -835
- package/agnostic/colors/rotate/index.test.js +45 -0
- package/agnostic/colors/tidy/index.js +79 -530
- package/agnostic/colors/tidy/index.test.js +45 -0
- package/agnostic/colors/typechecks/index.js +188 -250
- package/agnostic/colors/typechecks/index.test.js +113 -0
- package/agnostic/colors/types.js +1 -0
- package/agnostic/css/bem/index.js +134 -171
- package/agnostic/css/clss/index.js +64 -29
- package/agnostic/css/clss/index.test.js +60 -0
- package/agnostic/css/generate-nice-color/index.js +26 -71
- package/agnostic/css/generate-nice-color/index.test.js +8 -0
- package/agnostic/css/index.d.ts +2 -2
- package/agnostic/css/index.js +2 -2
- package/agnostic/css/is-valid-css-class-name/index.js +14 -8
- package/agnostic/css/is-valid-css-class-name/index.test.js +36 -0
- package/agnostic/css/scale/index.d.ts +46 -16
- package/agnostic/css/scale/index.js +70 -54
- package/agnostic/css/scale/index.test.js +88 -0
- package/agnostic/css/styles-set/index.js +151 -178
- package/agnostic/errors/index.d.ts +1 -1
- package/agnostic/errors/index.js +1 -1
- package/agnostic/errors/register/index.js +45 -49
- package/agnostic/errors/unknown-to-string/index.js +17 -10
- package/agnostic/errors/unknown-to-string/index.test.js +35 -0
- package/agnostic/html/get-node-ancestors/index.js +29 -29
- package/agnostic/html/get-node-ancestors/index.test.js +58 -0
- package/agnostic/html/get-position-inside-parent/index.js +13 -8
- package/agnostic/html/get-position-inside-parent/index.test.js +56 -0
- package/agnostic/html/hyper-json/cast/index.js +128 -2931
- package/agnostic/html/hyper-json/index.js +23 -2954
- package/agnostic/html/hyper-json/method/index.js +10 -14
- package/agnostic/html/hyper-json/serialize/index.js +88 -222
- package/agnostic/html/hyper-json/smart-tags/coalesced/add/index.js +14 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/addclass/index.js +27 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/and/index.js +13 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/append/index.js +34 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/at/index.js +42 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/call/index.js +47 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/clone/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/deleteproperties/index.js +45 -2936
- package/agnostic/html/hyper-json/smart-tags/coalesced/equals/index.js +22 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/getattribute/index.js +26 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperties/index.js +19 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperty/index.js +67 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjparse/index.js +21 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjstringify/index.js +89 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/if/index.js +20 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +11 -11
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +11 -11
- package/agnostic/html/hyper-json/smart-tags/coalesced/initialize/index.js +37 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/join/index.js +16 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/length/index.js +21 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/map/index.js +31 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/negate/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/notrailing/index.js +33 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/or/index.js +13 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/pickrandom/index.js +17 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/populate/index.js +59 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/print/index.js +23 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/push/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/pusheach/index.js +26 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/recordtoarray/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeattribute/index.js +53 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeclass/index.js +27 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/renameproperty/index.js +31 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/replace/index.js +55 -2940
- package/agnostic/html/hyper-json/smart-tags/coalesced/select/index.js +29 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/set/index.js +29 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/setattribute/index.js +53 -2935
- package/agnostic/html/hyper-json/smart-tags/coalesced/setproperty/index.js +232 -2936
- package/agnostic/html/hyper-json/smart-tags/coalesced/sorton/index.js +89 -2936
- package/agnostic/html/hyper-json/smart-tags/coalesced/split/index.js +20 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/spread/index.js +23 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toarray/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toboolean/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toelement/index.js +17 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/toggleclass/index.js +27 -2937
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonodelist/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonull/index.js +10 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonumber/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/torecord/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/toref/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/tostring/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/totext/index.js +11 -2939
- package/agnostic/html/hyper-json/smart-tags/coalesced/transformselected/index.js +84 -2938
- package/agnostic/html/hyper-json/smart-tags/coalesced/trim/index.js +14 -2938
- package/agnostic/html/hyper-json/smart-tags/index.js +28 -181
- package/agnostic/html/hyper-json/smart-tags/isolated/any/index.js +12 -195
- package/agnostic/html/hyper-json/smart-tags/isolated/array/index.js +12 -195
- package/agnostic/html/hyper-json/smart-tags/isolated/boolean/index.js +12 -2939
- package/agnostic/html/hyper-json/smart-tags/isolated/element/index.js +24 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/get/index.js +18 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/guess/index.js +56 -2937
- package/agnostic/html/hyper-json/smart-tags/isolated/index.d.ts +2 -2
- package/agnostic/html/hyper-json/smart-tags/isolated/index.js +2 -2
- package/agnostic/html/hyper-json/smart-tags/isolated/nodelist/index.js +18 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/null/index.js +9 -193
- package/agnostic/html/hyper-json/smart-tags/isolated/number/index.js +16 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/record/index.js +12 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/ref/index.js +40 -2935
- package/agnostic/html/hyper-json/smart-tags/isolated/string/index.js +16 -2938
- package/agnostic/html/hyper-json/smart-tags/isolated/text/index.js +18 -2938
- package/agnostic/html/hyper-json/transformer/index.js +112 -148
- package/agnostic/html/hyper-json/tree/index.js +411 -2928
- package/agnostic/html/hyper-json/types/index.js +27 -18
- package/agnostic/html/hyper-json/utils/index.js +497 -2921
- package/agnostic/html/index.d.ts +2 -2
- package/agnostic/html/index.js +2 -2
- package/agnostic/html/insert-node/index.js +27 -16
- package/agnostic/html/insert-node/index.test.js +73 -0
- package/agnostic/html/placeholders/index.js +26 -29
- package/agnostic/html/replace-in-element/index.js +31 -48
- package/agnostic/html/replace-in-element/index.test.js +80 -0
- package/agnostic/html/selector-to-element/index.js +53 -39
- package/agnostic/html/selector-to-element/index.test.js +69 -0
- package/agnostic/html/string-to-nodes/index.js +24 -25
- package/agnostic/html/string-to-nodes/index.test.js +54 -0
- package/agnostic/index.d.ts +4 -4
- package/agnostic/index.js +4 -4
- package/agnostic/misc/assert/index.js +60 -66
- package/agnostic/misc/cast/index.js +123 -57
- package/agnostic/misc/cast/index.test.js +134 -0
- package/agnostic/misc/connection/index.js +55 -36
- package/agnostic/misc/connection/index.test.js +143 -0
- package/agnostic/misc/crawler/index.js +68 -46
- package/agnostic/misc/crawler/index.test.js +56 -0
- package/agnostic/misc/crossenv/detect-runtime/index.js +41 -13
- package/agnostic/misc/crossenv/detect-runtime/index.test.js +24 -0
- package/agnostic/misc/crossenv/types.js +21 -14
- package/agnostic/misc/crossenv/window/index.js +45 -24
- package/agnostic/misc/crossenv/window/index.test.js +24 -0
- package/agnostic/misc/data-size/index.js +182 -294
- package/agnostic/misc/data-size/index.test.js +100 -0
- package/agnostic/misc/data-size/types.js +1 -0
- package/agnostic/misc/index.d.ts +5 -5
- package/agnostic/misc/index.js +5 -5
- package/agnostic/misc/is-constructor-function/index.js +12 -6
- package/agnostic/misc/is-constructor-function/index.test.js +36 -0
- package/agnostic/misc/is-nullish/index.js +24 -11
- package/agnostic/misc/is-nullish/index.test.js +44 -0
- package/agnostic/misc/logs/index.d.ts +1 -1
- package/agnostic/misc/logs/index.js +1 -1
- package/agnostic/misc/logs/logger/index.js +115 -140
- package/agnostic/misc/logs/make-text-block/index.js +13 -13
- package/agnostic/misc/logs/styles/index.js +29 -48
- package/agnostic/misc/lorem-ipsum/index.js +51 -201
- package/agnostic/misc/lorem-ipsum/index.test.js +49 -0
- package/agnostic/misc/normalize-extension/index.js +99 -88
- package/agnostic/misc/normalize-extension/index.test.js +40 -0
- package/agnostic/misc/outcome/index.js +20 -14
- package/agnostic/misc/outcome/index.test.js +40 -0
- package/agnostic/numbers/absolute-modulo/index.js +9 -6
- package/agnostic/numbers/absolute-modulo/index.test.js +23 -0
- package/agnostic/numbers/approximate-rational/index.js +86 -69
- package/agnostic/numbers/approximate-rational/index.test.js +90 -0
- package/agnostic/numbers/clamp/index.js +12 -8
- package/agnostic/numbers/clamp/index.test.js +24 -0
- package/agnostic/numbers/geometric-progressions/index.js +25 -16
- package/agnostic/numbers/geometric-progressions/index.test.js +45 -0
- package/agnostic/numbers/index.d.ts +2 -2
- package/agnostic/numbers/index.js +2 -2
- package/agnostic/numbers/interpolate/index.js +25 -10
- package/agnostic/numbers/interpolate/index.test.js +40 -0
- package/agnostic/numbers/round/index.js +30 -15
- package/agnostic/numbers/round/index.test.js +56 -0
- package/agnostic/objects/deep-get-property/index.js +30 -27
- package/agnostic/objects/deep-get-property/index.test.js +59 -0
- package/agnostic/objects/enums/is-in-enum/index.js +17 -11
- package/agnostic/objects/enums/is-in-enum/index.test.js +100 -0
- package/agnostic/objects/flatten-getters/index.js +15 -14
- package/agnostic/objects/flatten-getters/index.test.js +78 -0
- package/agnostic/objects/index.d.ts +4 -4
- package/agnostic/objects/index.js +4 -4
- package/agnostic/objects/is-object/index.js +16 -9
- package/agnostic/objects/is-object/index.test.js +60 -0
- package/agnostic/objects/is-record/index.js +12 -7
- package/agnostic/objects/is-record/index.test.js +48 -0
- package/agnostic/objects/record-format/index.js +18 -12
- package/agnostic/objects/record-format/index.test.js +92 -0
- package/agnostic/objects/record-map/index.js +16 -11
- package/agnostic/objects/record-map/index.test.js +56 -0
- package/agnostic/objects/sort-keys/index.js +15 -11
- package/agnostic/objects/sort-keys/index.test.js +37 -0
- package/agnostic/objects/validation/index.js +21 -8
- package/agnostic/objects/validation/index.test.js +72 -0
- package/agnostic/optim/memoize/index.js +24 -16
- package/agnostic/optim/memoize/index.test.js +30 -0
- package/agnostic/optim/throttle-debounce/index.js +120 -102
- package/agnostic/optim/throttle-debounce/index.test.js +44 -0
- package/agnostic/optim/throttle-debounce/types.js +1 -0
- package/agnostic/random/hex-char/index.js +8 -10
- package/agnostic/random/hex-char/index.test.js +20 -0
- package/agnostic/random/index.d.ts +1 -1
- package/agnostic/random/index.js +1 -1
- package/agnostic/random/random/index.js +17 -14
- package/agnostic/random/random/index.test.js +73 -0
- package/agnostic/random/uuid/index.js +28 -20
- package/agnostic/random/uuid/index.test.js +45 -0
- package/agnostic/regexps/index.js +126 -84
- package/agnostic/regexps/index.test.js +108 -0
- package/agnostic/sanitization/file-name/index.js +24 -8
- package/agnostic/sanitization/file-name/index.test.js +23 -0
- package/agnostic/sanitization/html/index.js +172 -122
- package/agnostic/sanitization/index.d.ts +1 -1
- package/agnostic/sanitization/index.js +1 -1
- package/agnostic/sanitization/path/index.js +23 -15
- package/agnostic/sanitization/path/index.test.js +18 -0
- package/agnostic/sanitization/types.js +1 -0
- package/agnostic/sanitization/user-input/index.js +36 -24
- package/agnostic/sanitization/user-input/index.test.js +31 -0
- package/agnostic/strings/char-codes/index.js +123 -55
- package/agnostic/strings/index.d.ts +1 -1
- package/agnostic/strings/index.js +1 -1
- package/agnostic/strings/matches/index.js +35 -16
- package/agnostic/strings/normalize-indent/index.js +34 -16
- package/agnostic/strings/parse-table/index.js +153 -86
- package/agnostic/strings/replace-all/index.js +36 -15
- package/agnostic/strings/to-alphanum/index.js +23 -8
- package/agnostic/strings/trim/index.js +22 -9
- package/agnostic/time/dates/format-date/index.js +140 -72
- package/agnostic/time/duration/index.js +106 -140
- package/agnostic/time/timeout/index.js +24 -16
- package/agnostic/time/transitions/index.js +200 -158
- package/agnostic/time/wait/index.js +10 -8
- package/agnostic/typescript/types.js +1 -0
- package/components/BeforeAfter/index.controlled.js +95 -0
- package/components/BeforeAfter/index.js +54 -189
- package/components/BeforeAfter/utils.js +9 -0
- package/components/Disclaimer/index.js +50 -110
- package/components/Drawer/index.js +81 -196
- package/components/EventListener/index.js +29 -80
- package/components/Gallery/index.js +146 -221
- package/components/Gallery/utils.js +12 -0
- package/components/Image/index.js +66 -293
- package/components/IntersectionObserver/index.js +62 -110
- package/components/Overlayer/index.js +59 -103
- package/components/Paginator/index.js +124 -155
- package/components/ResizeObserver/index.js +66 -119
- package/components/ResizeObserver/style.module.css +0 -0
- package/components/Scrllgngn/index.js +171 -468
- package/components/ScrollListener/index.js +97 -276
- package/components/ScrollListener/utils.js +51 -0
- package/components/Sequencer/index.controlled.js +67 -0
- package/components/Sequencer/index.js +105 -262
- package/components/ShadowRoot/index.js +42 -96
- package/components/Subtitles/index.js +107 -244
- package/components/Subtitles/types.js +1 -0
- package/components/Subtitles/utils.js +102 -0
- package/components/Theatre/index.js +88 -136
- package/components/UIModule/index.js +156 -199
- package/components/Video/index.js +292 -857
- package/components/Video/utils.js +137 -0
- package/components/_WIP_AudioQuote/index.js +1 -0
- package/components/_WIP_Icon/index.js +1 -0
- package/components/index.d.ts +4 -4
- package/components/index.js +4 -4
- package/components/public-classnames.js +18 -0
- package/components/utils/index.js +11 -11
- package/components/utils/types.js +1 -0
- package/index.d.ts +1 -1
- package/index.js +1 -1
- package/node/@aws-s3/index.test.js +6 -0
- package/node/@aws-s3/storage/directory/copy-dir/index.js +66 -72
- package/node/@aws-s3/storage/directory/index.d.ts +1 -1
- package/node/@aws-s3/storage/directory/index.js +1 -1
- package/node/@aws-s3/storage/directory/list/index.js +32 -42
- package/node/@aws-s3/storage/directory/move-dir/index.js +68 -86
- package/node/@aws-s3/storage/directory/remove-dir/index.js +56 -67
- package/node/@aws-s3/storage/file/copy/index.js +41 -53
- package/node/@aws-s3/storage/file/download/index.js +29 -40
- package/node/@aws-s3/storage/file/exists/index.js +35 -43
- package/node/@aws-s3/storage/file/index.d.ts +1 -1
- package/node/@aws-s3/storage/file/index.js +1 -1
- package/node/@aws-s3/storage/file/move/index.js +57 -63
- package/node/@aws-s3/storage/file/remove/index.js +35 -43
- package/node/@aws-s3/storage/file/stat/index.js +33 -47
- package/node/@aws-s3/storage/file/upload/index.js +52 -63
- package/node/@design-edito/index.js +1 -0
- package/node/@express/@multer/index.js +61 -55
- package/node/@google-cloud/storage/bucket/get-metadata/index.js +25 -29
- package/node/@google-cloud/storage/directory/copy-dir/index.js +35 -41
- package/node/@google-cloud/storage/directory/index.d.ts +1 -1
- package/node/@google-cloud/storage/directory/index.js +1 -1
- package/node/@google-cloud/storage/directory/list/index.js +28 -35
- package/node/@google-cloud/storage/directory/move-dir/index.js +43 -42
- package/node/@google-cloud/storage/directory/remove-dir/index.js +34 -38
- package/node/@google-cloud/storage/file/copy/index.js +35 -40
- package/node/@google-cloud/storage/file/download/index.js +27 -34
- package/node/@google-cloud/storage/file/exists/index.js +25 -31
- package/node/@google-cloud/storage/file/generate-signed-url/index.js +33 -35
- package/node/@google-cloud/storage/file/get-metadata/index.js +28 -31
- package/node/@google-cloud/storage/file/get-permissions/index.js +25 -31
- package/node/@google-cloud/storage/file/index.d.ts +3 -3
- package/node/@google-cloud/storage/file/index.js +3 -3
- package/node/@google-cloud/storage/file/move/index.js +38 -42
- package/node/@google-cloud/storage/file/remove/index.js +34 -35
- package/node/@google-cloud/storage/file/revoke-signed-urls/index.js +32 -95
- package/node/@google-cloud/storage/file/stat/index.js +34 -38
- package/node/@google-cloud/storage/file/update-metadata/index.js +30 -31
- package/node/@google-cloud/storage/file/upload/index.js +44 -46
- package/node/@google-cloud/storage/index.d.ts +1 -1
- package/node/@google-cloud/storage/index.js +1 -1
- package/node/cloud-storage/clients/index.js +35 -15
- package/node/cloud-storage/operations/copy-dir/index.js +30 -203
- package/node/cloud-storage/operations/copy-file/index.js +30 -152
- package/node/cloud-storage/operations/download-file/index.js +30 -103
- package/node/cloud-storage/operations/exists-file/index.js +30 -103
- package/node/cloud-storage/operations/index.d.ts +2 -2
- package/node/cloud-storage/operations/index.js +2 -2
- package/node/cloud-storage/operations/list-dir/index.js +29 -98
- package/node/cloud-storage/operations/move-dir/index.js +30 -169
- package/node/cloud-storage/operations/move-file/index.js +30 -157
- package/node/cloud-storage/operations/remove-dir/index.js +29 -159
- package/node/cloud-storage/operations/remove-file/index.js +29 -121
- package/node/cloud-storage/operations/stat-file/index.js +29 -124
- package/node/cloud-storage/operations/upload-file/index.js +30 -162
- package/node/encryption/@aes-256-gcm/buffer/index.js +31 -72
- package/node/encryption/@aes-256-gcm/uint8-array/index.js +55 -55
- package/node/encryption/key/index.js +19 -12
- package/node/files/index.d.ts +1 -1
- package/node/files/index.js +1 -1
- package/node/files/is-in-directory/index.js +11 -8
- package/node/files/read-write/index.js +11 -15
- package/node/files/subpaths/index.js +156 -121
- package/node/ftps/directory/copy-dir/index.js +55 -62
- package/node/ftps/directory/list/index.js +24 -29
- package/node/ftps/directory/move-dir/index.js +38 -38
- package/node/ftps/directory/remove-dir/index.js +39 -42
- package/node/ftps/file/copy/index.js +42 -47
- package/node/ftps/file/download/index.js +29 -34
- package/node/ftps/file/exists/index.js +38 -36
- package/node/ftps/file/index.d.ts +2 -2
- package/node/ftps/file/index.js +2 -2
- package/node/ftps/file/move/index.js +46 -44
- package/node/ftps/file/remove/index.js +36 -39
- package/node/ftps/file/stat/index.js +30 -38
- package/node/ftps/file/upload/index.js +40 -44
- package/node/images/create/index.js +10 -562
- package/node/images/format/index.js +264 -815
- package/node/images/metadata/index.js +10 -571
- package/node/images/transform/index.js +169 -1022
- package/node/images/transform/operations/blur/index.js +11 -24
- package/node/images/transform/operations/brighten/index.js +11 -24
- package/node/images/transform/operations/extend/index.js +25 -589
- package/node/images/transform/operations/extract/index.js +15 -28
- package/node/images/transform/operations/flatten/index.js +20 -584
- package/node/images/transform/operations/flip/index.js +2 -6
- package/node/images/transform/operations/flop/index.js +2 -6
- package/node/images/transform/operations/hue/index.js +13 -26
- package/node/images/transform/operations/index.d.ts +3 -3
- package/node/images/transform/operations/index.js +3 -3
- package/node/images/transform/operations/level/index.js +14 -30
- package/node/images/transform/operations/lighten/index.js +13 -26
- package/node/images/transform/operations/normalize/index.js +14 -27
- package/node/images/transform/operations/overlay/index.js +89 -673
- package/node/images/transform/operations/resize/index.js +46 -610
- package/node/images/transform/operations/rotate/index.js +20 -584
- package/node/images/transform/operations/saturate/index.js +14 -27
- package/node/images/types.js +34 -31
- package/node/images/utils/index.js +84 -568
- package/node/index.d.ts +2 -2
- package/node/index.js +2 -2
- package/node/process/on-exit/index.js +45 -26
- package/node/process/prompt-continue/index.js +29 -14
- package/node/process/spawner/index.js +104 -134
- package/node/sftp/directory/copy-dir/index.js +52 -60
- package/node/sftp/directory/index.d.ts +1 -1
- package/node/sftp/directory/index.js +1 -1
- package/node/sftp/directory/list/index.js +22 -29
- package/node/sftp/directory/move-dir/index.js +35 -35
- package/node/sftp/directory/remove-dir/index.js +39 -42
- package/node/sftp/file/copy/index.js +37 -45
- package/node/sftp/file/download/index.js +26 -32
- package/node/sftp/file/exists/index.js +29 -29
- package/node/sftp/file/index.d.ts +2 -2
- package/node/sftp/file/index.js +2 -2
- package/node/sftp/file/move/index.js +39 -38
- package/node/sftp/file/remove/index.js +31 -34
- package/node/sftp/file/stat/index.js +26 -37
- package/node/sftp/file/upload/index.js +34 -38
- package/package.json +1 -1
|
@@ -1,48 +1,34 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { HeadObjectCommand } from '@aws-sdk/client-s3';
|
|
2
|
+
import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
|
|
3
|
+
import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Retrieves metadata for a single S3 object.
|
|
6
|
+
*
|
|
7
|
+
* @param {S3Client} client – v3 S3 client.
|
|
8
|
+
* @param {string} bucket – Bucket name.
|
|
9
|
+
* @param {string} key – Object key.
|
|
10
|
+
* @param {StatOptions} [options] – Extra HeadObject params.
|
|
11
|
+
* @returns {Promise<Outcome.Either<Stat, string>>}
|
|
12
|
+
*/
|
|
13
|
+
export async function stat(client, bucket, key, options) {
|
|
14
|
+
const { headObjectOptions } = options ?? {};
|
|
15
|
+
try {
|
|
16
|
+
const res = await client.send(new HeadObjectCommand({ Bucket: bucket, Key: key, ...headObjectOptions }));
|
|
17
|
+
const stat = {
|
|
18
|
+
size: res.ContentLength,
|
|
19
|
+
modifiedAt: res.LastModified,
|
|
20
|
+
checksum: res.ETag?.replace(/"/g, ''),
|
|
21
|
+
contentType: res.ContentType,
|
|
22
|
+
metadata: res.Metadata,
|
|
23
|
+
storageClass: res.StorageClass,
|
|
24
|
+
raw: res
|
|
25
|
+
};
|
|
26
|
+
return Outcome.makeSuccess(stat);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const notFound = err.$metadata?.httpStatusCode === 404 || err.name === 'NotFound';
|
|
30
|
+
if (notFound)
|
|
31
|
+
return Outcome.makeFailure(`Object not found: ${key}`);
|
|
32
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
33
|
+
}
|
|
9
34
|
}
|
|
10
|
-
function makeFailure(error) {
|
|
11
|
-
return { success: false, error };
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
// src/agnostic/errors/unknown-to-string/index.ts
|
|
15
|
-
function unknownToString(unk, encoding) {
|
|
16
|
-
if (unk instanceof Error) return unk.message;
|
|
17
|
-
if (unk instanceof Buffer) return unk.toString(encoding ?? "utf-8");
|
|
18
|
-
if (typeof unk === "string") return unk;
|
|
19
|
-
if (typeof unk === "object" && unk !== null) return JSON.stringify(unk);
|
|
20
|
-
return `${unk}`;
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
// src/node/@aws-s3/storage/file/stat/index.ts
|
|
24
|
-
async function stat(client, bucket, key, options) {
|
|
25
|
-
const { headObjectOptions } = options ?? {};
|
|
26
|
-
try {
|
|
27
|
-
const res = await client.send(
|
|
28
|
-
new HeadObjectCommand({ Bucket: bucket, Key: key, ...headObjectOptions })
|
|
29
|
-
);
|
|
30
|
-
const stat2 = {
|
|
31
|
-
size: res.ContentLength,
|
|
32
|
-
modifiedAt: res.LastModified,
|
|
33
|
-
checksum: res.ETag?.replace(/"/g, ""),
|
|
34
|
-
contentType: res.ContentType,
|
|
35
|
-
metadata: res.Metadata,
|
|
36
|
-
storageClass: res.StorageClass,
|
|
37
|
-
raw: res
|
|
38
|
-
};
|
|
39
|
-
return makeSuccess(stat2);
|
|
40
|
-
} catch (err) {
|
|
41
|
-
const notFound = err.$metadata?.httpStatusCode === 404 || err.name === "NotFound";
|
|
42
|
-
if (notFound) return makeFailure(`Object not found: ${key}`);
|
|
43
|
-
return makeFailure(unknownToString(err));
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
export {
|
|
47
|
-
stat
|
|
48
|
-
};
|
|
@@ -1,66 +1,55 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
} from
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
1
|
+
import { HeadObjectCommand } from '@aws-sdk/client-s3';
|
|
2
|
+
import { Upload } from '@aws-sdk/lib-storage';
|
|
3
|
+
import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
|
|
4
|
+
import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
|
|
5
|
+
/**
|
|
6
|
+
* Uploads a file stream to a specified Amazon S3 bucket using AWS SDK v3.
|
|
7
|
+
*
|
|
8
|
+
* If `overwrite` is false and the target file exists, upload is aborted.
|
|
9
|
+
*
|
|
10
|
+
* @param {S3Client} s3 - The AWS S3 v3 client instance.
|
|
11
|
+
* @param {string} bucketName - The S3 bucket name.
|
|
12
|
+
* @param {string} targetPath - The key to upload the file to.
|
|
13
|
+
* @param {Readable} fileStream - The file content as a stream.
|
|
14
|
+
* @param {UploadOptions} [options] - Optional configuration.
|
|
15
|
+
* @returns {Promise<Outcome.Either<true, string>>}
|
|
16
|
+
*/
|
|
17
|
+
export async function upload(s3, bucketName, targetPath, fileStream, options) {
|
|
18
|
+
const { uploadSettings, fileMetadata, overwrite = false } = options ?? {};
|
|
19
|
+
if (!overwrite) {
|
|
20
|
+
try {
|
|
21
|
+
const headCommand = new HeadObjectCommand({
|
|
22
|
+
Bucket: bucketName,
|
|
23
|
+
Key: targetPath
|
|
24
|
+
});
|
|
25
|
+
await s3.send(headCommand);
|
|
26
|
+
// If no error, object exists
|
|
27
|
+
return Outcome.makeFailure(`File already exists at ${targetPath}.`);
|
|
28
|
+
}
|
|
29
|
+
catch (err) {
|
|
30
|
+
const code = err?.name ?? err?.$metadata?.httpStatusCode;
|
|
31
|
+
if (code !== 'NotFound' && code !== 404) {
|
|
32
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
33
|
+
}
|
|
34
|
+
// Object not found, proceed with upload
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const params = {
|
|
38
|
+
...fileMetadata,
|
|
34
39
|
Bucket: bucketName,
|
|
35
|
-
Key: targetPath
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
Key: targetPath,
|
|
41
|
+
Body: fileStream
|
|
42
|
+
};
|
|
43
|
+
try {
|
|
44
|
+
const upload = new Upload({
|
|
45
|
+
client: s3,
|
|
46
|
+
params,
|
|
47
|
+
...uploadSettings
|
|
48
|
+
});
|
|
49
|
+
await upload.done();
|
|
50
|
+
return Outcome.makeSuccess(true);
|
|
51
|
+
}
|
|
52
|
+
catch (err) {
|
|
53
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
44
54
|
}
|
|
45
|
-
}
|
|
46
|
-
const params = {
|
|
47
|
-
...fileMetadata,
|
|
48
|
-
Bucket: bucketName,
|
|
49
|
-
Key: targetPath,
|
|
50
|
-
Body: fileStream
|
|
51
|
-
};
|
|
52
|
-
try {
|
|
53
|
-
const upload2 = new Upload({
|
|
54
|
-
client: s3,
|
|
55
|
-
params,
|
|
56
|
-
...uploadSettings
|
|
57
|
-
});
|
|
58
|
-
await upload2.done();
|
|
59
|
-
return makeSuccess(true);
|
|
60
|
-
} catch (err) {
|
|
61
|
-
return makeFailure(unknownToString(err));
|
|
62
|
-
}
|
|
63
55
|
}
|
|
64
|
-
export {
|
|
65
|
-
upload
|
|
66
|
-
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,57 +1,63 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
fileFilter
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
middleware
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
1
|
+
import multer from 'multer';
|
|
2
|
+
import * as Outcome from '../../../agnostic/misc/outcome/index.js';
|
|
3
|
+
import { unknownToString } from '../../../agnostic/errors/unknown-to-string/index.js';
|
|
4
|
+
/**
|
|
5
|
+
* Applies multer middleware to an Express request/response pair.
|
|
6
|
+
*
|
|
7
|
+
* The function creates a multer instance based on the provided options and
|
|
8
|
+
* applies the appropriate middleware based on the upload mode. Errors are
|
|
9
|
+
* captured and returned as a structured `WithMulterError` object.
|
|
10
|
+
*
|
|
11
|
+
* @param {Request} req - The Express request object.
|
|
12
|
+
* @param {Response} res - The Express response object.
|
|
13
|
+
* @param {WithMulterOptions} options - Multer configuration and upload mode.
|
|
14
|
+
* @param {multer.StorageEngine} [options.storage] - Storage engine (defaults to memory).
|
|
15
|
+
* @param {multer.Options['limits']} [options.limits] - File size and count limits.
|
|
16
|
+
* @param {multer.Options['fileFilter']} [options.fileFilter] - File filter function.
|
|
17
|
+
* @param {'none'|'any'|'single'|'array'|'fields'} options.mode - Upload mode.
|
|
18
|
+
* @param {string} [options.fieldName] - Field name (required for 'single' and 'array' modes).
|
|
19
|
+
* @param {number} [options.maxCount] - Max file count (for 'array' mode).
|
|
20
|
+
* @param {multer.Field[]} [options.fields] - Field configurations (for 'fields' mode).
|
|
21
|
+
* @returns {Promise<Outcome.Either<true, WithMulterError>>}
|
|
22
|
+
* - On success: `Outcome.makeSuccess(true)`.
|
|
23
|
+
* - On failure: `Outcome.makeFailure(error)` with structured error details.
|
|
24
|
+
*/
|
|
25
|
+
export async function useMulterMiddleware(req, res, options) {
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
27
|
+
const { storage, limits, fileFilter } = options;
|
|
28
|
+
const uploader = multer({
|
|
29
|
+
storage: storage ?? multer.memoryStorage(),
|
|
30
|
+
limits,
|
|
31
|
+
fileFilter
|
|
32
|
+
});
|
|
33
|
+
let middleware;
|
|
34
|
+
if (options.mode === 'none') {
|
|
35
|
+
middleware = uploader.none();
|
|
36
|
+
}
|
|
37
|
+
else if (options.mode === 'single') {
|
|
38
|
+
middleware = uploader.single(options.fieldName);
|
|
39
|
+
}
|
|
40
|
+
else if (options.mode === 'array') {
|
|
41
|
+
middleware = uploader.array(options.fieldName, options.maxCount);
|
|
42
|
+
}
|
|
43
|
+
else if (options.mode === 'fields') {
|
|
44
|
+
middleware = uploader.fields(options.fields);
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
middleware = uploader.any();
|
|
48
|
+
}
|
|
49
|
+
return await new Promise(resolve => middleware(req, res, (err) => {
|
|
50
|
+
if (err instanceof multer.MulterError)
|
|
51
|
+
return resolve(Outcome.makeFailure({
|
|
52
|
+
code: err.code,
|
|
53
|
+
message: err.message,
|
|
54
|
+
field: err.field
|
|
55
|
+
}));
|
|
56
|
+
return resolve(err !== undefined
|
|
57
|
+
? Outcome.makeFailure({
|
|
58
|
+
code: 'UNKNOWN',
|
|
59
|
+
message: unknownToString(err)
|
|
60
|
+
})
|
|
61
|
+
: Outcome.makeSuccess(true));
|
|
46
62
|
}));
|
|
47
|
-
return resolve(
|
|
48
|
-
err !== void 0 ? makeFailure({
|
|
49
|
-
code: "UNKNOWN",
|
|
50
|
-
message: unknownToString(err)
|
|
51
|
-
}) : makeSuccess(true)
|
|
52
|
-
);
|
|
53
|
-
}));
|
|
54
63
|
}
|
|
55
|
-
export {
|
|
56
|
-
useMulterMiddleware
|
|
57
|
-
};
|
|
@@ -1,30 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
1
|
+
import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
|
|
2
|
+
import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Retrieves metadata for a Google Cloud Storage bucket.
|
|
5
|
+
*
|
|
6
|
+
* This function calls the Google Cloud Storage API to get information about the bucket,
|
|
7
|
+
* such as its location, storage class, and other configuration details.
|
|
8
|
+
*
|
|
9
|
+
* @param {Bucket} bucket - The Google Cloud Storage bucket object.
|
|
10
|
+
* @param {GetBucketMetadataOptions} [options] - Optional configuration options to pass to the `getMetadata` method.
|
|
11
|
+
* @returns {Promise<Outcome.Either<BucketMetadata, string>>} A promise that resolves to an `Outcome.Either`.
|
|
12
|
+
* - On success: `Outcome.makeSuccess(metadata)` with the bucket metadata.
|
|
13
|
+
* - On failure: `Outcome.makeFailure(errStr)` with an error message.
|
|
14
|
+
*
|
|
15
|
+
* @throws {Error} Throws an error if the metadata retrieval fails (e.g., network issues, incorrect permissions).
|
|
16
|
+
*/
|
|
17
|
+
export async function getMetadata(bucket, options) {
|
|
18
|
+
try {
|
|
19
|
+
const [metadata] = await bucket.getMetadata(options);
|
|
20
|
+
return Outcome.makeSuccess(metadata);
|
|
21
|
+
}
|
|
22
|
+
catch (err) {
|
|
23
|
+
const errStr = unknownToString(err);
|
|
24
|
+
return Outcome.makeFailure(errStr);
|
|
25
|
+
}
|
|
8
26
|
}
|
|
9
|
-
|
|
10
|
-
// src/agnostic/misc/outcome/index.ts
|
|
11
|
-
function makeSuccess(payload) {
|
|
12
|
-
return { success: true, payload };
|
|
13
|
-
}
|
|
14
|
-
function makeFailure(error) {
|
|
15
|
-
return { success: false, error };
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// src/node/@google-cloud/storage/bucket/get-metadata/index.ts
|
|
19
|
-
async function getMetadata(bucket, options) {
|
|
20
|
-
try {
|
|
21
|
-
const [metadata] = await bucket.getMetadata(options);
|
|
22
|
-
return makeSuccess(metadata);
|
|
23
|
-
} catch (err) {
|
|
24
|
-
const errStr = unknownToString(err);
|
|
25
|
-
return makeFailure(errStr);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
export {
|
|
29
|
-
getMetadata
|
|
30
|
-
};
|
|
@@ -1,44 +1,38 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
continue;
|
|
1
|
+
import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
|
|
2
|
+
import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
|
|
3
|
+
/** Recursively copies every object under `sourceDir` to the same relative path
|
|
4
|
+
* beneath `targetDir` within a single GCS bucket.
|
|
5
|
+
* @param {Bucket} bucket - The GCS bucket instance.
|
|
6
|
+
* @param {string} sourceDir - The source directory path (prefix) to copy from.
|
|
7
|
+
* @param {string} targetDir - The target directory path (prefix) to copy to.
|
|
8
|
+
* @param {CopyDirOptions} [options] - Optional parameters for the operation.
|
|
9
|
+
* @param {boolean} [options.overwrite=false] - Whether to overwrite existing files at target.
|
|
10
|
+
* @returns {Promise<Outcome.Either<true, string>>} A promise that resolves to an `Outcome.Either`:
|
|
11
|
+
* - On success: `Outcome.makeSuccess(true)` indicating the copy was successful.
|
|
12
|
+
* - On failure: `Outcome.makeFailure(errStr)` with an error message if the copy fails.
|
|
13
|
+
* */
|
|
14
|
+
export async function copyDir(bucket, sourceDir, targetDir, options) {
|
|
15
|
+
const { getFileOptions, copyOptions, overwrite = false } = options ?? {};
|
|
16
|
+
const from = sourceDir.endsWith('/') ? sourceDir : `${sourceDir}/`;
|
|
17
|
+
const to = targetDir.endsWith('/') ? targetDir : `${targetDir}/`;
|
|
18
|
+
try {
|
|
19
|
+
const [files] = await bucket.getFiles({ ...getFileOptions, prefix: from });
|
|
20
|
+
for (const f of files) {
|
|
21
|
+
const rel = f.name.substring(from.length);
|
|
22
|
+
const dest = `${to}${rel}`;
|
|
23
|
+
if (!overwrite) {
|
|
24
|
+
const destFile = bucket.file(dest);
|
|
25
|
+
const [exists] = await destFile.exists();
|
|
26
|
+
if (exists) {
|
|
27
|
+
// Skip copy if target exists and overwrite is false
|
|
28
|
+
continue;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
await f.copy(dest, copyOptions);
|
|
33
32
|
}
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
return Outcome.makeSuccess(true);
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
36
37
|
}
|
|
37
|
-
return makeSuccess(true);
|
|
38
|
-
} catch (err) {
|
|
39
|
-
return makeFailure(unknownToString(err));
|
|
40
|
-
}
|
|
41
38
|
}
|
|
42
|
-
export {
|
|
43
|
-
copyDir
|
|
44
|
-
};
|
|
@@ -1,36 +1,29 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
|
|
2
|
+
import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Lists all direct children file paths under a given directory prefix in a GCS bucket.
|
|
5
|
+
*
|
|
6
|
+
* This function returns only the immediate files (not recursive) under the specified directory prefix.
|
|
7
|
+
*
|
|
8
|
+
* @param {Bucket} bucket - The GCS bucket to list files from.
|
|
9
|
+
* @param {string} directoryPath - The directory prefix to list files under.
|
|
10
|
+
* @param {ListOptions} [options] - Optional configuration for the listing.
|
|
11
|
+
* @param {FileOptions} [options.fileOptions] - Additional options for file retrieval.
|
|
12
|
+
* @returns {Promise<Outcome.Either<string[], string>>} Returns either a success with an array of file paths, or a failure with an error message.
|
|
13
|
+
*/
|
|
14
|
+
export async function list(bucket, directoryPath, options) {
|
|
15
|
+
const { fileOptions } = options ?? {};
|
|
16
|
+
try {
|
|
17
|
+
const prefix = directoryPath.endsWith('/') ? directoryPath : `${directoryPath}/`;
|
|
18
|
+
const [files] = await bucket.getFiles({
|
|
19
|
+
prefix,
|
|
20
|
+
delimiter: '/',
|
|
21
|
+
...fileOptions
|
|
22
|
+
});
|
|
23
|
+
const paths = files.map(file => file.name);
|
|
24
|
+
return Outcome.makeSuccess(paths);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
28
|
+
}
|
|
4
29
|
}
|
|
5
|
-
function makeFailure(error) {
|
|
6
|
-
return { success: false, error };
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
// src/agnostic/errors/unknown-to-string/index.ts
|
|
10
|
-
function unknownToString(unk, encoding) {
|
|
11
|
-
if (unk instanceof Error) return unk.message;
|
|
12
|
-
if (unk instanceof Buffer) return unk.toString(encoding ?? "utf-8");
|
|
13
|
-
if (typeof unk === "string") return unk;
|
|
14
|
-
if (typeof unk === "object" && unk !== null) return JSON.stringify(unk);
|
|
15
|
-
return `${unk}`;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
// src/node/@google-cloud/storage/directory/list/index.ts
|
|
19
|
-
async function list(bucket, directoryPath, options) {
|
|
20
|
-
const { fileOptions } = options ?? {};
|
|
21
|
-
try {
|
|
22
|
-
const prefix = directoryPath.endsWith("/") ? directoryPath : `${directoryPath}/`;
|
|
23
|
-
const [files] = await bucket.getFiles({
|
|
24
|
-
prefix,
|
|
25
|
-
delimiter: "/",
|
|
26
|
-
...fileOptions
|
|
27
|
-
});
|
|
28
|
-
const paths = files.map((file) => file.name);
|
|
29
|
-
return makeSuccess(paths);
|
|
30
|
-
} catch (err) {
|
|
31
|
-
return makeFailure(unknownToString(err));
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
export {
|
|
35
|
-
list
|
|
36
|
-
};
|
|
@@ -1,44 +1,45 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
1
|
+
import * as Outcome from '../../../../../agnostic/misc/outcome/index.js';
|
|
2
|
+
import { unknownToString } from '../../../../../agnostic/errors/unknown-to-string/index.js';
|
|
3
|
+
/**
|
|
4
|
+
* Recursively moves every object under `sourceDir` to the corresponding path
|
|
5
|
+
* under `targetDir` within the same bucket.
|
|
6
|
+
*
|
|
7
|
+
* Example: moving `a/b/` to `x/y/` copies
|
|
8
|
+
* `a/b/file.txt` → `x/y/file.txt` and then deletes the original.
|
|
9
|
+
*
|
|
10
|
+
* If `overwrite` is false (default), the operation aborts if any destination file
|
|
11
|
+
* already exists.
|
|
12
|
+
*
|
|
13
|
+
* @param {Bucket} bucket - The GCS bucket instance.
|
|
14
|
+
* @param {string} sourceDir - The source directory prefix to move from.
|
|
15
|
+
* @param {string} targetDir - The target directory prefix to move to.
|
|
16
|
+
* @param {MoveDirOptions} [options] - Optional parameters for the operation.
|
|
17
|
+
* @returns {Promise<Outcome.Either<true, string>>}
|
|
18
|
+
* - On success: `Outcome.makeSuccess(true)`.
|
|
19
|
+
* - On failure: `Outcome.makeFailure(errStr)`.
|
|
20
|
+
*/
|
|
21
|
+
export async function moveDir(bucket, sourceDir, targetDir, options) {
|
|
22
|
+
const { fileOptions, copyOptions, deleteOptions, overwrite = false } = options ?? {};
|
|
23
|
+
const from = sourceDir.endsWith('/') ? sourceDir : `${sourceDir}/`;
|
|
24
|
+
const to = targetDir.endsWith('/') ? targetDir : `${targetDir}/`;
|
|
25
|
+
try {
|
|
26
|
+
const [files] = await bucket.getFiles({ prefix: from });
|
|
27
|
+
for (const f of files) {
|
|
28
|
+
const rel = f.name.substring(from.length);
|
|
29
|
+
const dest = `${to}${rel}`;
|
|
30
|
+
const srcFile = bucket.file(f.name, fileOptions);
|
|
31
|
+
const destFile = bucket.file(dest, fileOptions);
|
|
32
|
+
if (!overwrite) {
|
|
33
|
+
const [exists] = await destFile.exists();
|
|
34
|
+
if (exists)
|
|
35
|
+
throw new Error(`File already exists at ${dest}.`);
|
|
36
|
+
}
|
|
37
|
+
await srcFile.copy(dest, copyOptions);
|
|
38
|
+
await srcFile.delete(deleteOptions);
|
|
39
|
+
}
|
|
40
|
+
return Outcome.makeSuccess(true);
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
36
44
|
}
|
|
37
|
-
return makeSuccess(true);
|
|
38
|
-
} catch (err) {
|
|
39
|
-
return makeFailure(unknownToString(err));
|
|
40
|
-
}
|
|
41
45
|
}
|
|
42
|
-
export {
|
|
43
|
-
moveDir
|
|
44
|
-
};
|