@design-edito/tools 0.4.5 → 0.4.6
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.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 +2 -2
- package/agnostic/colors/index.js +2 -2
- 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.js +37 -50
- package/agnostic/css/scale/index.test.js +71 -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 +18 -18
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +18 -18
- 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 +1 -1
- package/agnostic/html/hyper-json/smart-tags/isolated/index.js +1 -1
- 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 +6 -6
- package/agnostic/index.js +6 -6
- 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/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 +2 -2
- package/agnostic/objects/index.js +2 -2
- 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/index.d.ts +1 -1
- package/agnostic/optim/index.js +1 -1
- 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/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/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 +5 -5
- package/components/index.js +5 -5
- 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 +2 -2
- package/node/@aws-s3/storage/directory/index.js +2 -2
- 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 +2 -2
- package/node/@google-cloud/storage/file/index.js +2 -2
- 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 +5 -5
- package/node/images/transform/operations/index.js +5 -5
- 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 +5 -5
- package/node/index.js +5 -5
- 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 +1 -1
- package/node/sftp/file/index.js +1 -1
- 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
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
/* Video element triggers */
|
|
2
|
+
export const muteAttributeWorkaround = (video, shouldMute, setIsSoundOn) => {
|
|
3
|
+
if (video === null)
|
|
4
|
+
return;
|
|
5
|
+
if (!shouldMute)
|
|
6
|
+
return;
|
|
7
|
+
const currentMuted = video.getAttribute('muted');
|
|
8
|
+
if (currentMuted !== null)
|
|
9
|
+
return;
|
|
10
|
+
video.setAttribute('muted', '');
|
|
11
|
+
video.load();
|
|
12
|
+
setIsSoundOn(false);
|
|
13
|
+
};
|
|
14
|
+
export const forceMute = (video, setIsSoundOn) => {
|
|
15
|
+
if (video === null)
|
|
16
|
+
return;
|
|
17
|
+
video.muted = true;
|
|
18
|
+
setIsSoundOn(false);
|
|
19
|
+
};
|
|
20
|
+
export const forceLoud = (video, setIsSoundOn) => {
|
|
21
|
+
if (video === null)
|
|
22
|
+
return;
|
|
23
|
+
video.muted = false;
|
|
24
|
+
setIsSoundOn(true);
|
|
25
|
+
};
|
|
26
|
+
export const forceVolume = (video, volumePercent, setVolume) => {
|
|
27
|
+
if (video === null)
|
|
28
|
+
return;
|
|
29
|
+
const volume = volumePercent / 100;
|
|
30
|
+
video.volume = volume;
|
|
31
|
+
setVolume(volume);
|
|
32
|
+
};
|
|
33
|
+
export const forceCurrentTime = (video, time, setCurrentTime) => {
|
|
34
|
+
if (video === null)
|
|
35
|
+
return;
|
|
36
|
+
video.currentTime = time;
|
|
37
|
+
setCurrentTime(time);
|
|
38
|
+
};
|
|
39
|
+
export const forcePlay = async (video, shouldDisclaimerBeOn, setIsPlaying) => {
|
|
40
|
+
if (shouldDisclaimerBeOn) {
|
|
41
|
+
setIsPlaying(false);
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
if (video === null)
|
|
45
|
+
return;
|
|
46
|
+
try {
|
|
47
|
+
await video.play();
|
|
48
|
+
setIsPlaying(true);
|
|
49
|
+
}
|
|
50
|
+
catch (e) {
|
|
51
|
+
console.error(e);
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
export const forcePause = (video, setIsPlaying) => {
|
|
55
|
+
if (video === null) {
|
|
56
|
+
setIsPlaying(false);
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
try {
|
|
60
|
+
video.pause();
|
|
61
|
+
setIsPlaying(false);
|
|
62
|
+
}
|
|
63
|
+
catch (e) {
|
|
64
|
+
console.error(e);
|
|
65
|
+
}
|
|
66
|
+
};
|
|
67
|
+
export const forcePlaybackRate = (video, rate, setPlaybackRate) => {
|
|
68
|
+
if (video === null)
|
|
69
|
+
return;
|
|
70
|
+
video.playbackRate = rate;
|
|
71
|
+
setPlaybackRate(rate);
|
|
72
|
+
};
|
|
73
|
+
export const forceFullScreen = async (video, shouldDisclaimerBeOn, setIsFullscreen) => {
|
|
74
|
+
if (shouldDisclaimerBeOn)
|
|
75
|
+
return;
|
|
76
|
+
if (video === null) {
|
|
77
|
+
setIsFullscreen(false);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
await video.requestFullscreen();
|
|
82
|
+
setIsFullscreen(true);
|
|
83
|
+
}
|
|
84
|
+
catch (e) {
|
|
85
|
+
setIsFullscreen(false);
|
|
86
|
+
console.error(e);
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
export const forceExitFullScreen = async (video, setIsFullscreen) => {
|
|
90
|
+
if (video === null || document.fullscreenElement !== video) {
|
|
91
|
+
setIsFullscreen(false);
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
try {
|
|
95
|
+
await document.exitFullscreen();
|
|
96
|
+
setIsFullscreen(false);
|
|
97
|
+
}
|
|
98
|
+
catch (e) {
|
|
99
|
+
console.error(e);
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
/* Time & formats */
|
|
103
|
+
export function secondsToMs(seconds) {
|
|
104
|
+
return seconds * 1000;
|
|
105
|
+
}
|
|
106
|
+
export function formatTime(ms, format, fps = 25) {
|
|
107
|
+
const totalSeconds = Math.floor(ms / 1000);
|
|
108
|
+
const hours = Math.floor(totalSeconds / 3600);
|
|
109
|
+
const minutes = Math.floor((totalSeconds % 3600) / 60);
|
|
110
|
+
const seconds = Math.floor(totalSeconds % 60);
|
|
111
|
+
const frames = Math.floor(((ms % 1000) / 1000) * fps);
|
|
112
|
+
const msRest = Math.floor(ms % 1000);
|
|
113
|
+
const tokens = {
|
|
114
|
+
hh: String(hours).padStart(2, '0'),
|
|
115
|
+
mm: String(minutes).padStart(2, '0'),
|
|
116
|
+
ss: String(seconds).padStart(2, '0'),
|
|
117
|
+
frame: String(frames).padStart(2, '0'),
|
|
118
|
+
ms: String(msRest).padStart(3, '0'),
|
|
119
|
+
h: hours,
|
|
120
|
+
m: minutes,
|
|
121
|
+
s: seconds,
|
|
122
|
+
f: frames
|
|
123
|
+
};
|
|
124
|
+
const result = Object
|
|
125
|
+
.keys(tokens)
|
|
126
|
+
.sort((a, b) => b.length - a.length)
|
|
127
|
+
.reduce((acc, t) => acc.replace(new RegExp(t, 'g'), String(tokens[t])), format);
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
export const getTimelineClickProgress = (event, timeline, video) => {
|
|
131
|
+
if (video === null || timeline === null)
|
|
132
|
+
return 0;
|
|
133
|
+
const timelineRect = event.currentTarget.getBoundingClientRect();
|
|
134
|
+
const position = event.clientX - timelineRect.left;
|
|
135
|
+
const progress = Math.min(1, Math.max(0, position / timelineRect.width));
|
|
136
|
+
return progress;
|
|
137
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/components/index.d.ts
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export * as beforeAfter from './BeforeAfter/index.js'
|
|
2
|
-
export * as disclaimer from './Disclaimer/index.js'
|
|
3
2
|
export * as drawer from './Drawer/index.js'
|
|
3
|
+
export * as eventListener from './EventListener/index.js'
|
|
4
|
+
export * as disclaimer from './Disclaimer/index.js'
|
|
5
|
+
export * as gallery from './Gallery/index.js'
|
|
6
|
+
export * as image from './Image/index.js'
|
|
4
7
|
export * as intersectionObserver from './IntersectionObserver/index.js'
|
|
5
8
|
export * as overlayer from './Overlayer/index.js'
|
|
6
9
|
export * as paginator from './Paginator/index.js'
|
|
7
|
-
export * as gallery from './Gallery/index.js'
|
|
8
|
-
export * as image from './Image/index.js'
|
|
9
10
|
export * as resizeObserver from './ResizeObserver/index.js'
|
|
10
11
|
export * as scrollListener from './ScrollListener/index.js'
|
|
11
|
-
export * as
|
|
12
|
+
export * as scrllgngn from './Scrllgngn/index.js'
|
|
12
13
|
export * as sequencer from './Sequencer/index.js'
|
|
13
14
|
export * as shadowRoot from './ShadowRoot/index.js'
|
|
14
|
-
export * as scrllgngn from './Scrllgngn/index.js'
|
|
15
15
|
export * as subtitles from './Subtitles/index.js'
|
|
16
16
|
export * as theatre from './Theatre/index.js'
|
|
17
17
|
export * as uiModule from './UIModule/index.js'
|
package/components/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
export * as beforeAfter from './BeforeAfter/index.js'
|
|
2
|
-
export * as disclaimer from './Disclaimer/index.js'
|
|
3
2
|
export * as drawer from './Drawer/index.js'
|
|
3
|
+
export * as eventListener from './EventListener/index.js'
|
|
4
|
+
export * as disclaimer from './Disclaimer/index.js'
|
|
5
|
+
export * as gallery from './Gallery/index.js'
|
|
6
|
+
export * as image from './Image/index.js'
|
|
4
7
|
export * as intersectionObserver from './IntersectionObserver/index.js'
|
|
5
8
|
export * as overlayer from './Overlayer/index.js'
|
|
6
9
|
export * as paginator from './Paginator/index.js'
|
|
7
|
-
export * as gallery from './Gallery/index.js'
|
|
8
|
-
export * as image from './Image/index.js'
|
|
9
10
|
export * as resizeObserver from './ResizeObserver/index.js'
|
|
10
11
|
export * as scrollListener from './ScrollListener/index.js'
|
|
11
|
-
export * as
|
|
12
|
+
export * as scrllgngn from './Scrllgngn/index.js'
|
|
12
13
|
export * as sequencer from './Sequencer/index.js'
|
|
13
14
|
export * as shadowRoot from './ShadowRoot/index.js'
|
|
14
|
-
export * as scrllgngn from './Scrllgngn/index.js'
|
|
15
15
|
export * as subtitles from './Subtitles/index.js'
|
|
16
16
|
export * as theatre from './Theatre/index.js'
|
|
17
17
|
export * as uiModule from './UIModule/index.js'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const beforeAfter = 'dsed-before-after';
|
|
2
|
+
export const disclaimer = 'dsed-disclaimer';
|
|
3
|
+
export const drawer = 'dsed-drawer';
|
|
4
|
+
export const eventListener = 'dsed-event-listener';
|
|
5
|
+
export const gallery = 'dsed-gallery';
|
|
6
|
+
export const image = 'dsed-image';
|
|
7
|
+
export const intersectionObserver = 'dsed-intersection-observer';
|
|
8
|
+
export const overlayer = 'dsed-overlayer';
|
|
9
|
+
export const paginator = 'dsed-paginator';
|
|
10
|
+
export const resizeObserver = 'dsed-resize-observer';
|
|
11
|
+
export const scrllgngn = 'dsed-scrllgngn';
|
|
12
|
+
export const scrollListener = 'dsed-scroll-listener';
|
|
13
|
+
export const sequencer = 'dsed-sequencer';
|
|
14
|
+
export const shadowRoot = 'dsed-shadow-root';
|
|
15
|
+
export const subtitles = 'dsed-subtitles';
|
|
16
|
+
export const theatre = 'dsed-theatre';
|
|
17
|
+
export const uiModule = 'dsed-ui-module';
|
|
18
|
+
export const video = 'dsed-video';
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
export function mergeClassNames(...names) {
|
|
2
|
+
return names.map(name => {
|
|
3
|
+
if (typeof name !== 'string' && !Array.isArray(name))
|
|
4
|
+
return false;
|
|
5
|
+
if (Array.isArray(name))
|
|
6
|
+
return mergeClassNames(...name);
|
|
7
|
+
if (name.trim() === '')
|
|
8
|
+
return false;
|
|
9
|
+
return name.trim();
|
|
10
|
+
}).filter((name) => typeof name === 'string')
|
|
11
|
+
.join(' ');
|
|
9
12
|
}
|
|
10
|
-
export {
|
|
11
|
-
mergeClassNames
|
|
12
|
-
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,74 +1,68 @@
|
|
|
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
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
1
|
+
import { ListObjectsV2Command, CopyObjectCommand, 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
|
+
* Recursively copies every object under `sourceDir` to the same relative path
|
|
6
|
+
* beneath `targetDir` in a single S3 bucket (AWS SDK v3).
|
|
7
|
+
*
|
|
8
|
+
* @param {S3Client} client - The v3 S3 client instance.
|
|
9
|
+
* @param {string} bucketName - The name of the S3 bucket.
|
|
10
|
+
* @param {string} sourceDir - The source directory prefix to copy from.
|
|
11
|
+
* @param {string} targetDir - The target directory prefix to copy to.
|
|
12
|
+
* @param {CopyDirOptions} [options] - Optional copy‑behaviour configuration.
|
|
13
|
+
* @param {Omit<ListObjectsV2CommandInput,'Bucket'|'Prefix'>} [options.listObjectsOptions] - Extra list parameters.
|
|
14
|
+
* @param {Omit<CopyObjectCommandInput,'Bucket'|'Key'|'CopySource'>} [options.copyOptions] - Extra copy parameters.
|
|
15
|
+
* @param {boolean} [options.overwrite=false] - Whether to overwrite existing files at target.
|
|
16
|
+
* @returns {Promise<Outcome.Either<true, string>>}
|
|
17
|
+
* - Success: `Outcome.makeSuccess(true)` if every object is copied.
|
|
18
|
+
* - Failure: `Outcome.makeFailure(errStr)` on error.
|
|
19
|
+
*/
|
|
20
|
+
export async function copyDir(client, bucketName, sourceDir, targetDir, options) {
|
|
21
|
+
const { listObjectsOptions, copyOptions, overwrite = false } = options ?? {};
|
|
22
|
+
const from = sourceDir.endsWith('/') ? sourceDir : `${sourceDir}/`;
|
|
23
|
+
const to = targetDir.endsWith('/') ? targetDir : `${targetDir}/`;
|
|
24
|
+
try {
|
|
25
|
+
let token;
|
|
26
|
+
do {
|
|
27
|
+
const listResp = await client.send(new ListObjectsV2Command({
|
|
28
|
+
Bucket: bucketName,
|
|
29
|
+
Prefix: from,
|
|
30
|
+
ContinuationToken: token,
|
|
31
|
+
...listObjectsOptions
|
|
32
|
+
}));
|
|
33
|
+
for (const obj of listResp.Contents ?? []) {
|
|
34
|
+
if (obj.Key === undefined)
|
|
35
|
+
continue;
|
|
36
|
+
const rel = obj.Key.substring(from.length);
|
|
37
|
+
const dest = `${to}${rel}`;
|
|
38
|
+
if (!overwrite) {
|
|
39
|
+
try {
|
|
40
|
+
await client.send(new HeadObjectCommand({ Bucket: bucketName, Key: dest }));
|
|
41
|
+
// If headObject succeeds, file exists - skip copy
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
catch (err) {
|
|
45
|
+
const code = err?.name ?? err?.$metadata?.httpStatusCode;
|
|
46
|
+
if (code !== 'NotFound' && code !== 404) {
|
|
47
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
48
|
+
}
|
|
49
|
+
// Not found, proceed with copy
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
await client.send(new CopyObjectCommand({
|
|
53
|
+
Bucket: bucketName,
|
|
54
|
+
Key: dest,
|
|
55
|
+
CopySource: `${bucketName}/${obj.Key}`,
|
|
56
|
+
...copyOptions
|
|
57
|
+
}));
|
|
53
58
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
);
|
|
64
|
-
}
|
|
65
|
-
token = listResp.IsTruncated === true ? listResp.NextContinuationToken : void 0;
|
|
66
|
-
} while (token !== void 0);
|
|
67
|
-
return makeSuccess(true);
|
|
68
|
-
} catch (err) {
|
|
69
|
-
return makeFailure(unknownToString(err));
|
|
70
|
-
}
|
|
59
|
+
token = listResp.IsTruncated === true
|
|
60
|
+
? listResp.NextContinuationToken
|
|
61
|
+
: undefined;
|
|
62
|
+
} while (token !== undefined);
|
|
63
|
+
return Outcome.makeSuccess(true);
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
67
|
+
}
|
|
71
68
|
}
|
|
72
|
-
export {
|
|
73
|
-
copyDir
|
|
74
|
-
};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * as list from './list/index.js'
|
|
2
1
|
export * as copyDir from './copy-dir/index.js'
|
|
3
|
-
export * as
|
|
2
|
+
export * as list from './list/index.js'
|
|
4
3
|
export * as removeDir from './remove-dir/index.js'
|
|
4
|
+
export * as moveDir from './move-dir/index.js'
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export * as list from './list/index.js'
|
|
2
1
|
export * as copyDir from './copy-dir/index.js'
|
|
3
|
-
export * as
|
|
2
|
+
export * as list from './list/index.js'
|
|
4
3
|
export * as removeDir from './remove-dir/index.js'
|
|
4
|
+
export * as moveDir from './move-dir/index.js'
|
|
@@ -1,43 +1,33 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
1
|
+
import { ListObjectsV2Command } 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
|
+
* Lists all direct‑child object keys under a given directory prefix in an S3
|
|
6
|
+
* bucket (AWS SDK v3). The listing is **non‑recursive**.
|
|
7
|
+
*
|
|
8
|
+
* @param {S3Client} client - The v3 S3 client used to list objects.
|
|
9
|
+
* @param {string} bucketName - The name of the S3 bucket.
|
|
10
|
+
* @param {string} directoryPath - The directory prefix to list.
|
|
11
|
+
* @param {ListOptions} [options] - Additional parameters for `ListObjectsV2`.
|
|
12
|
+
* @returns {Promise<Outcome.Either<string[], string>>}
|
|
13
|
+
* - Success: `Outcome.makeSuccess(keys)` where `keys` is an array of object keys.
|
|
14
|
+
* - Failure: `Outcome.makeFailure(errStr)` if the list operation fails.
|
|
15
|
+
*/
|
|
16
|
+
export async function list(client, bucketName, directoryPath, options) {
|
|
17
|
+
const prefix = directoryPath.endsWith('/') ? directoryPath : `${directoryPath}/`;
|
|
18
|
+
try {
|
|
19
|
+
const response = await client.send(new ListObjectsV2Command({
|
|
20
|
+
Bucket: bucketName,
|
|
21
|
+
Prefix: prefix,
|
|
22
|
+
Delimiter: '/',
|
|
23
|
+
...options
|
|
24
|
+
}));
|
|
25
|
+
const keys = (response.Contents ?? [])
|
|
26
|
+
.map(obj => obj.Key)
|
|
27
|
+
.filter((e) => e !== undefined);
|
|
28
|
+
return Outcome.makeSuccess(keys);
|
|
29
|
+
}
|
|
30
|
+
catch (err) {
|
|
31
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
32
|
+
}
|
|
9
33
|
}
|
|
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/directory/list/index.ts
|
|
24
|
-
async function list(client, bucketName, directoryPath, options) {
|
|
25
|
-
const prefix = directoryPath.endsWith("/") ? directoryPath : `${directoryPath}/`;
|
|
26
|
-
try {
|
|
27
|
-
const response = await client.send(
|
|
28
|
-
new ListObjectsV2Command({
|
|
29
|
-
Bucket: bucketName,
|
|
30
|
-
Prefix: prefix,
|
|
31
|
-
Delimiter: "/",
|
|
32
|
-
...options
|
|
33
|
-
})
|
|
34
|
-
);
|
|
35
|
-
const keys = (response.Contents ?? []).map((obj) => obj.Key).filter((e) => e !== void 0);
|
|
36
|
-
return makeSuccess(keys);
|
|
37
|
-
} catch (err) {
|
|
38
|
-
return makeFailure(unknownToString(err));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
export {
|
|
42
|
-
list
|
|
43
|
-
};
|
|
@@ -1,87 +1,69 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
1
|
+
import { ListObjectsV2Command, CopyObjectCommand, DeleteObjectCommand, 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
|
+
* Recursively moves every object under `sourceDir` to the corresponding path
|
|
6
|
+
* under `targetDir` within the same S3 bucket (AWS SDK v3).
|
|
7
|
+
*
|
|
8
|
+
* Behaviour when `overwrite` is **false** (default): abort if *any* destination
|
|
9
|
+
* key already exists.
|
|
10
|
+
*
|
|
11
|
+
* @param {S3Client} client - The v3 S3 client instance.
|
|
12
|
+
* @param {string} bucketName - The name of the S3 bucket.
|
|
13
|
+
* @param {string} sourceDir - The source directory prefix to move from.
|
|
14
|
+
* @param {string} targetDir - The target directory prefix to move to.
|
|
15
|
+
* @param {MoveDirOptions} [options] - Optional configuration.
|
|
16
|
+
* @returns {Promise<Outcome.Either<true, string>>}
|
|
17
|
+
* - On success: `Outcome.makeSuccess(true)`.
|
|
18
|
+
* - On failure: `Outcome.makeFailure(errStr)`.
|
|
19
|
+
*/
|
|
20
|
+
export async function moveDir(client, bucketName, sourceDir, targetDir, options) {
|
|
21
|
+
const { listObjectsOptions, copyOptions, deleteOptions, overwrite = false } = options ?? {};
|
|
22
|
+
const from = sourceDir.endsWith('/') ? sourceDir : `${sourceDir}/`;
|
|
23
|
+
const to = targetDir.endsWith('/') ? targetDir : `${targetDir}/`;
|
|
24
|
+
try {
|
|
25
|
+
let token;
|
|
26
|
+
do {
|
|
27
|
+
const listResp = await client.send(new ListObjectsV2Command({
|
|
28
|
+
Bucket: bucketName,
|
|
29
|
+
Prefix: from,
|
|
30
|
+
ContinuationToken: token,
|
|
31
|
+
...listObjectsOptions
|
|
32
|
+
}));
|
|
33
|
+
for (const obj of listResp.Contents ?? []) {
|
|
34
|
+
if (obj.Key === undefined)
|
|
35
|
+
continue;
|
|
36
|
+
const rel = obj.Key.substring(from.length);
|
|
37
|
+
const dest = `${to}${rel}`;
|
|
38
|
+
if (!overwrite) {
|
|
39
|
+
try {
|
|
40
|
+
await client.send(new HeadObjectCommand({ Bucket: bucketName, Key: dest }));
|
|
41
|
+
throw new Error(`Object already exists at ${dest}.`);
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
if (err.$metadata?.httpStatusCode !== 404 && err.name !== 'NotFound')
|
|
45
|
+
throw err;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
await client.send(new CopyObjectCommand({
|
|
49
|
+
Bucket: bucketName,
|
|
50
|
+
Key: dest,
|
|
51
|
+
CopySource: `${bucketName}/${obj.Key}`,
|
|
52
|
+
...copyOptions
|
|
53
|
+
}));
|
|
54
|
+
await client.send(new DeleteObjectCommand({
|
|
55
|
+
Bucket: bucketName,
|
|
56
|
+
Key: obj.Key,
|
|
57
|
+
...deleteOptions
|
|
58
|
+
}));
|
|
59
|
+
}
|
|
60
|
+
token = listResp.IsTruncated === true
|
|
61
|
+
? listResp.NextContinuationToken
|
|
62
|
+
: undefined;
|
|
63
|
+
} while (token !== undefined);
|
|
64
|
+
return Outcome.makeSuccess(true);
|
|
65
|
+
}
|
|
66
|
+
catch (err) {
|
|
67
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
68
|
+
}
|
|
12
69
|
}
|
|
13
|
-
function makeFailure(error) {
|
|
14
|
-
return { success: false, error };
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
// src/agnostic/errors/unknown-to-string/index.ts
|
|
18
|
-
function unknownToString(unk, encoding) {
|
|
19
|
-
if (unk instanceof Error) return unk.message;
|
|
20
|
-
if (unk instanceof Buffer) return unk.toString(encoding ?? "utf-8");
|
|
21
|
-
if (typeof unk === "string") return unk;
|
|
22
|
-
if (typeof unk === "object" && unk !== null) return JSON.stringify(unk);
|
|
23
|
-
return `${unk}`;
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
// src/node/@aws-s3/storage/directory/move-dir/index.ts
|
|
27
|
-
async function moveDir(client, bucketName, sourceDir, targetDir, options) {
|
|
28
|
-
const {
|
|
29
|
-
listObjectsOptions,
|
|
30
|
-
copyOptions,
|
|
31
|
-
deleteOptions,
|
|
32
|
-
overwrite = false
|
|
33
|
-
} = options ?? {};
|
|
34
|
-
const from = sourceDir.endsWith("/") ? sourceDir : `${sourceDir}/`;
|
|
35
|
-
const to = targetDir.endsWith("/") ? targetDir : `${targetDir}/`;
|
|
36
|
-
try {
|
|
37
|
-
let token;
|
|
38
|
-
do {
|
|
39
|
-
const listResp = await client.send(
|
|
40
|
-
new ListObjectsV2Command({
|
|
41
|
-
Bucket: bucketName,
|
|
42
|
-
Prefix: from,
|
|
43
|
-
ContinuationToken: token,
|
|
44
|
-
...listObjectsOptions
|
|
45
|
-
})
|
|
46
|
-
);
|
|
47
|
-
for (const obj of listResp.Contents ?? []) {
|
|
48
|
-
if (obj.Key === void 0) continue;
|
|
49
|
-
const rel = obj.Key.substring(from.length);
|
|
50
|
-
const dest = `${to}${rel}`;
|
|
51
|
-
if (!overwrite) {
|
|
52
|
-
try {
|
|
53
|
-
await client.send(
|
|
54
|
-
new HeadObjectCommand({ Bucket: bucketName, Key: dest })
|
|
55
|
-
);
|
|
56
|
-
throw new Error(`Object already exists at ${dest}.`);
|
|
57
|
-
} catch (err) {
|
|
58
|
-
if (err.$metadata?.httpStatusCode !== 404 && err.name !== "NotFound")
|
|
59
|
-
throw err;
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
await client.send(
|
|
63
|
-
new CopyObjectCommand({
|
|
64
|
-
Bucket: bucketName,
|
|
65
|
-
Key: dest,
|
|
66
|
-
CopySource: `${bucketName}/${obj.Key}`,
|
|
67
|
-
...copyOptions
|
|
68
|
-
})
|
|
69
|
-
);
|
|
70
|
-
await client.send(
|
|
71
|
-
new DeleteObjectCommand({
|
|
72
|
-
Bucket: bucketName,
|
|
73
|
-
Key: obj.Key,
|
|
74
|
-
...deleteOptions
|
|
75
|
-
})
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
token = listResp.IsTruncated === true ? listResp.NextContinuationToken : void 0;
|
|
79
|
-
} while (token !== void 0);
|
|
80
|
-
return makeSuccess(true);
|
|
81
|
-
} catch (err) {
|
|
82
|
-
return makeFailure(unknownToString(err));
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
export {
|
|
86
|
-
moveDir
|
|
87
|
-
};
|