@design-edito/tools 0.4.4 → 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 -9
- package/agnostic/arrays/dedupe/index.test.js +24 -0
- package/agnostic/arrays/find-duplicates/index.js +34 -24
- package/agnostic/arrays/find-duplicates/index.test.js +31 -0
- package/agnostic/arrays/index.d.ts +1 -1
- package/agnostic/arrays/index.js +1 -1
- 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 -8
- package/agnostic/arrays/make/index.test.js +10 -0
- package/agnostic/arrays/random-pick/index.js +40 -9
- package/agnostic/arrays/random-pick/index.test.js +23 -0
- package/agnostic/arrays/shuffle/index.js +15 -13
- package/agnostic/arrays/shuffle/index.test.js +14 -0
- package/agnostic/booleans/is-falsy/index.js +26 -12
- package/agnostic/booleans/is-falsy/index.test.js +26 -0
- package/agnostic/colors/channels/index.js +145 -19
- package/agnostic/colors/channels/index.test.js +64 -0
- package/agnostic/colors/contrast/index.js +23 -30
- package/agnostic/colors/contrast/index.test.js +21 -0
- package/agnostic/colors/convert/index.js +839 -46
- package/agnostic/colors/convert/index.test.js +98 -0
- package/agnostic/colors/cssColorsMap.js +153 -0
- package/agnostic/colors/distance/index.js +65 -53
- package/agnostic/colors/distance/index.test.js +21 -0
- package/agnostic/colors/grayscale/index.js +96 -137
- package/agnostic/colors/grayscale/index.test.js +34 -0
- package/agnostic/colors/invert/index.js +33 -44
- package/agnostic/colors/invert/index.test.js +31 -0
- package/agnostic/colors/lerp/index.js +74 -88
- package/agnostic/colors/lerp/index.test.js +55 -0
- package/agnostic/colors/luminance/index.js +19 -13
- package/agnostic/colors/luminance/index.test.js +30 -0
- package/agnostic/colors/palette/index.js +80 -87
- package/agnostic/colors/palette/index.test.js +35 -0
- package/agnostic/colors/rotate/index.js +41 -14
- package/agnostic/colors/rotate/index.test.js +45 -0
- package/agnostic/colors/tidy/index.js +80 -12
- package/agnostic/colors/tidy/index.test.js +45 -0
- package/agnostic/colors/typechecks/index.js +196 -25
- package/agnostic/colors/typechecks/index.test.js +113 -0
- package/agnostic/colors/types.js +1 -0
- package/agnostic/css/bem/index.js +135 -160
- package/agnostic/css/clss/index.js +66 -7
- package/agnostic/css/clss/index.test.js +60 -0
- package/agnostic/css/generate-nice-color/index.js +26 -73
- package/agnostic/css/generate-nice-color/index.test.js +8 -0
- package/agnostic/css/index.d.ts +1 -1
- package/agnostic/css/index.js +1 -1
- package/agnostic/css/is-valid-css-class-name/index.js +15 -9
- package/agnostic/css/is-valid-css-class-name/index.test.js +36 -0
- package/agnostic/css/scale/index.js +37 -37
- package/agnostic/css/scale/index.test.js +71 -0
- package/agnostic/css/styles-set/index.js +151 -169
- package/agnostic/errors/register/index.js +45 -51
- package/agnostic/errors/unknown-to-string/index.js +18 -7
- package/agnostic/errors/unknown-to-string/index.test.js +35 -0
- package/agnostic/html/get-node-ancestors/index.js +31 -8
- package/agnostic/html/get-node-ancestors/index.test.js +58 -0
- package/agnostic/html/get-position-inside-parent/index.js +13 -10
- package/agnostic/html/get-position-inside-parent/index.test.js +56 -0
- package/agnostic/html/hyper-json/cast/index.js +137 -24
- package/agnostic/html/hyper-json/index.js +23 -50
- package/agnostic/html/hyper-json/method/index.js +10 -7
- package/agnostic/html/hyper-json/serialize/index.js +91 -11
- package/agnostic/html/hyper-json/smart-tags/coalesced/add/index.js +16 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/addclass/index.js +30 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/and/index.js +15 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/append/index.js +36 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/at/index.js +47 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/call/index.js +50 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/clone/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/deleteproperties/index.js +49 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/equals/index.js +24 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/getattribute/index.js +28 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperties/index.js +21 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/getproperty/index.js +73 -26
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjparse/index.js +24 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/hjstringify/index.js +93 -28
- package/agnostic/html/hyper-json/smart-tags/coalesced/if/index.js +22 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.d.ts +14 -14
- package/agnostic/html/hyper-json/smart-tags/coalesced/index.js +14 -14
- package/agnostic/html/hyper-json/smart-tags/coalesced/initialize/index.js +39 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/join/index.js +18 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/length/index.js +23 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/map/index.js +33 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/negate/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/notrailing/index.js +35 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/or/index.js +15 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/pickrandom/index.js +19 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/populate/index.js +61 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/print/index.js +25 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/push/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/pusheach/index.js +28 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/recordtoarray/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeattribute/index.js +58 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/removeclass/index.js +30 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/renameproperty/index.js +34 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/replace/index.js +56 -26
- package/agnostic/html/hyper-json/smart-tags/coalesced/select/index.js +34 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/set/index.js +31 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/setattribute/index.js +58 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/setproperty/index.js +237 -26
- package/agnostic/html/hyper-json/smart-tags/coalesced/sorton/index.js +93 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/split/index.js +22 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/spread/index.js +24 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toarray/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toboolean/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toelement/index.js +19 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toggleclass/index.js +30 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonodelist/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonull/index.js +11 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tonumber/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/torecord/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/toref/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/tostring/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/totext/index.js +12 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/transformselected/index.js +86 -24
- package/agnostic/html/hyper-json/smart-tags/coalesced/trim/index.js +16 -24
- package/agnostic/html/hyper-json/smart-tags/index.js +31 -10
- package/agnostic/html/hyper-json/smart-tags/isolated/any/index.js +14 -11
- package/agnostic/html/hyper-json/smart-tags/isolated/array/index.js +14 -11
- package/agnostic/html/hyper-json/smart-tags/isolated/boolean/index.js +13 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/element/index.js +26 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/get/index.js +20 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/guess/index.js +59 -24
- 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 +20 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/null/index.js +10 -11
- package/agnostic/html/hyper-json/smart-tags/isolated/number/index.js +18 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/record/index.js +14 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/ref/index.js +45 -25
- package/agnostic/html/hyper-json/smart-tags/isolated/string/index.js +18 -24
- package/agnostic/html/hyper-json/smart-tags/isolated/text/index.js +20 -24
- package/agnostic/html/hyper-json/transformer/index.js +113 -9
- package/agnostic/html/hyper-json/tree/index.js +423 -24
- package/agnostic/html/hyper-json/types/index.js +28 -7
- package/agnostic/html/hyper-json/utils/index.js +516 -24
- package/agnostic/html/index.d.ts +2 -2
- package/agnostic/html/index.js +2 -2
- package/agnostic/html/insert-node/index.js +28 -7
- package/agnostic/html/insert-node/index.test.js +73 -0
- package/agnostic/html/placeholders/index.js +26 -31
- package/agnostic/html/replace-in-element/index.js +31 -25
- package/agnostic/html/replace-in-element/index.test.js +80 -0
- package/agnostic/html/selector-to-element/index.js +53 -33
- package/agnostic/html/selector-to-element/index.test.js +69 -0
- package/agnostic/html/string-to-nodes/index.js +24 -19
- package/agnostic/html/string-to-nodes/index.test.js +54 -0
- package/agnostic/index.d.ts +1 -1
- package/agnostic/index.js +1 -1
- package/agnostic/misc/assert/index.js +60 -58
- package/agnostic/misc/cast/index.js +132 -23
- package/agnostic/misc/cast/index.test.js +134 -0
- package/agnostic/misc/connection/index.js +55 -30
- package/agnostic/misc/connection/index.test.js +143 -0
- package/agnostic/misc/crawler/index.js +68 -44
- package/agnostic/misc/crawler/index.test.js +56 -0
- package/agnostic/misc/crossenv/detect-runtime/index.js +41 -16
- package/agnostic/misc/crossenv/detect-runtime/index.test.js +24 -0
- package/agnostic/misc/crossenv/types.js +21 -7
- package/agnostic/misc/crossenv/window/index.js +49 -13
- package/agnostic/misc/crossenv/window/index.test.js +24 -0
- package/agnostic/misc/data-size/index.js +182 -296
- 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 +1 -1
- package/agnostic/misc/index.js +1 -1
- package/agnostic/misc/is-constructor-function/index.js +13 -7
- package/agnostic/misc/is-constructor-function/index.test.js +36 -0
- package/agnostic/misc/is-nullish/index.js +26 -11
- package/agnostic/misc/is-nullish/index.test.js +44 -0
- package/agnostic/misc/logs/logger/index.js +115 -142
- package/agnostic/misc/logs/make-text-block/index.js +14 -7
- package/agnostic/misc/logs/styles/index.js +30 -7
- package/agnostic/misc/lorem-ipsum/index.js +51 -186
- package/agnostic/misc/lorem-ipsum/index.test.js +49 -0
- package/agnostic/misc/normalize-extension/index.js +99 -90
- package/agnostic/misc/normalize-extension/index.test.js +40 -0
- package/agnostic/misc/outcome/index.js +21 -11
- package/agnostic/misc/outcome/index.test.js +40 -0
- package/agnostic/numbers/absolute-modulo/index.js +10 -7
- package/agnostic/numbers/absolute-modulo/index.test.js +23 -0
- package/agnostic/numbers/approximate-rational/index.js +86 -71
- package/agnostic/numbers/approximate-rational/index.test.js +90 -0
- package/agnostic/numbers/clamp/index.js +13 -7
- package/agnostic/numbers/clamp/index.test.js +24 -0
- package/agnostic/numbers/geometric-progressions/index.js +26 -7
- package/agnostic/numbers/geometric-progressions/index.test.js +45 -0
- package/agnostic/numbers/index.d.ts +1 -1
- package/agnostic/numbers/index.js +1 -1
- package/agnostic/numbers/interpolate/index.js +25 -12
- package/agnostic/numbers/interpolate/index.test.js +40 -0
- package/agnostic/numbers/round/index.js +33 -11
- package/agnostic/numbers/round/index.test.js +56 -0
- package/agnostic/objects/deep-get-property/index.js +30 -26
- package/agnostic/objects/deep-get-property/index.test.js +59 -0
- package/agnostic/objects/enums/is-in-enum/index.js +18 -7
- package/agnostic/objects/enums/is-in-enum/index.test.js +100 -0
- package/agnostic/objects/flatten-getters/index.js +15 -16
- package/agnostic/objects/flatten-getters/index.test.js +78 -0
- package/agnostic/objects/index.d.ts +3 -3
- package/agnostic/objects/index.js +3 -3
- package/agnostic/objects/is-object/index.js +18 -9
- package/agnostic/objects/is-object/index.test.js +60 -0
- package/agnostic/objects/is-record/index.js +13 -7
- package/agnostic/objects/is-record/index.test.js +48 -0
- package/agnostic/objects/record-format/index.js +18 -14
- package/agnostic/objects/record-format/index.test.js +92 -0
- package/agnostic/objects/record-map/index.js +18 -7
- package/agnostic/objects/record-map/index.test.js +56 -0
- package/agnostic/objects/sort-keys/index.js +15 -13
- package/agnostic/objects/sort-keys/index.test.js +37 -0
- package/agnostic/objects/validation/index.js +21 -10
- 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 -18
- package/agnostic/optim/memoize/index.test.js +30 -0
- package/agnostic/optim/throttle-debounce/index.js +120 -104
- 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 +9 -9
- 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 +19 -9
- package/agnostic/random/random/index.test.js +73 -0
- package/agnostic/random/uuid/index.js +31 -12
- package/agnostic/random/uuid/index.test.js +45 -0
- package/agnostic/regexps/index.js +126 -86
- package/agnostic/regexps/index.test.js +108 -0
- package/agnostic/sanitization/file-name/index.js +25 -7
- package/agnostic/sanitization/file-name/index.test.js +23 -0
- package/agnostic/sanitization/html/index.js +172 -116
- package/agnostic/sanitization/path/index.js +23 -13
- package/agnostic/sanitization/path/index.test.js +18 -0
- package/agnostic/sanitization/types.js +1 -0
- package/agnostic/sanitization/user-input/index.js +36 -26
- package/agnostic/sanitization/user-input/index.test.js +31 -0
- package/agnostic/strings/char-codes/index.js +123 -57
- package/agnostic/strings/matches/index.js +38 -11
- package/agnostic/strings/normalize-indent/index.js +34 -18
- package/agnostic/strings/parse-table/index.js +153 -84
- package/agnostic/strings/replace-all/index.js +36 -17
- package/agnostic/strings/to-alphanum/index.js +23 -10
- package/agnostic/strings/trim/index.js +24 -9
- package/agnostic/time/dates/format-date/index.js +140 -74
- package/agnostic/time/duration/index.js +106 -142
- package/agnostic/time/timeout/index.js +24 -18
- package/agnostic/time/transitions/index.js +200 -156
- package/agnostic/time/wait/index.js +11 -7
- package/agnostic/typescript/types.js +1 -0
- package/components/BeforeAfter/index.controlled.js +95 -0
- package/components/BeforeAfter/index.js +54 -152
- package/components/BeforeAfter/utils.js +9 -0
- package/components/Disclaimer/index.js +50 -9
- package/components/Drawer/index.js +82 -88
- package/components/EventListener/index.js +29 -47
- package/components/Gallery/index.js +146 -190
- package/components/Gallery/utils.js +12 -0
- package/components/Image/index.js +67 -106
- package/components/IntersectionObserver/index.js +62 -9
- package/components/Overlayer/index.js +59 -66
- package/components/Paginator/index.js +125 -9
- package/components/ResizeObserver/index.js +68 -9
- package/components/ResizeObserver/style.module.css +0 -0
- package/components/Scrllgngn/index.js +176 -183
- package/components/ScrollListener/index.js +97 -171
- package/components/ScrollListener/utils.js +51 -0
- package/components/Sequencer/index.controlled.js +67 -0
- package/components/Sequencer/index.js +105 -160
- package/components/ShadowRoot/index.js +42 -63
- package/components/Subtitles/index.js +107 -13
- package/components/Subtitles/types.js +1 -0
- package/components/Subtitles/utils.js +102 -0
- package/components/Theatre/index.js +89 -9
- package/components/UIModule/index.js +156 -146
- package/components/Video/index.d.ts +10 -0
- package/components/Video/index.js +292 -503
- 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 +2 -2
- package/components/index.js +2 -2
- package/components/public-classnames.js +18 -0
- package/components/utils/index.js +12 -7
- package/components/utils/types.js +1 -0
- package/index.d.ts +1 -2
- package/index.js +1 -2
- package/node/@aws-s3/index.test.js +6 -0
- package/node/@aws-s3/storage/directory/copy-dir/index.js +68 -9
- 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 +33 -9
- package/node/@aws-s3/storage/directory/move-dir/index.js +69 -9
- package/node/@aws-s3/storage/directory/remove-dir/index.js +59 -9
- package/node/@aws-s3/storage/file/copy/index.js +43 -9
- package/node/@aws-s3/storage/file/download/index.js +30 -9
- package/node/@aws-s3/storage/file/exists/index.js +37 -9
- 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 +60 -9
- package/node/@aws-s3/storage/file/remove/index.js +38 -9
- package/node/@aws-s3/storage/file/stat/index.js +34 -9
- package/node/@aws-s3/storage/file/upload/index.js +55 -9
- package/node/@design-edito/index.js +1 -0
- package/node/@express/@multer/index.js +61 -45
- package/node/@google-cloud/storage/bucket/get-metadata/index.js +25 -21
- package/node/@google-cloud/storage/directory/copy-dir/index.js +38 -9
- package/node/@google-cloud/storage/directory/list/index.js +29 -9
- package/node/@google-cloud/storage/directory/move-dir/index.js +45 -9
- package/node/@google-cloud/storage/directory/remove-dir/index.js +36 -9
- package/node/@google-cloud/storage/file/copy/index.js +37 -9
- package/node/@google-cloud/storage/file/download/index.js +28 -9
- package/node/@google-cloud/storage/file/exists/index.js +26 -9
- package/node/@google-cloud/storage/file/generate-signed-url/index.js +33 -27
- package/node/@google-cloud/storage/file/get-metadata/index.js +28 -23
- package/node/@google-cloud/storage/file/get-permissions/index.js +25 -23
- package/node/@google-cloud/storage/file/index.d.ts +1 -1
- package/node/@google-cloud/storage/file/index.js +1 -1
- package/node/@google-cloud/storage/file/move/index.js +40 -9
- package/node/@google-cloud/storage/file/remove/index.js +36 -9
- package/node/@google-cloud/storage/file/revoke-signed-urls/index.js +32 -29
- package/node/@google-cloud/storage/file/stat/index.js +35 -9
- package/node/@google-cloud/storage/file/update-metadata/index.js +30 -23
- package/node/@google-cloud/storage/file/upload/index.js +47 -9
- package/node/cloud-storage/clients/index.js +35 -13
- package/node/cloud-storage/operations/copy-dir/index.js +30 -34
- package/node/cloud-storage/operations/copy-file/index.js +30 -34
- package/node/cloud-storage/operations/download-file/index.js +30 -34
- package/node/cloud-storage/operations/exists-file/index.js +30 -34
- package/node/cloud-storage/operations/list-dir/index.js +29 -34
- package/node/cloud-storage/operations/move-dir/index.js +30 -34
- package/node/cloud-storage/operations/move-file/index.js +30 -34
- package/node/cloud-storage/operations/remove-dir/index.js +29 -34
- package/node/cloud-storage/operations/remove-file/index.js +29 -34
- package/node/cloud-storage/operations/stat-file/index.js +29 -34
- package/node/cloud-storage/operations/upload-file/index.js +30 -34
- package/node/encryption/@aes-256-gcm/buffer/index.js +31 -26
- package/node/encryption/@aes-256-gcm/index.d.ts +1 -1
- package/node/encryption/@aes-256-gcm/index.js +1 -1
- package/node/encryption/@aes-256-gcm/uint8-array/index.js +57 -11
- package/node/encryption/key/index.js +19 -14
- package/node/files/is-in-directory/index.js +11 -10
- package/node/files/read-write/index.js +11 -17
- package/node/files/subpaths/index.js +156 -113
- package/node/ftps/directory/copy-dir/index.js +58 -9
- package/node/ftps/directory/index.d.ts +1 -1
- package/node/ftps/directory/index.js +1 -1
- package/node/ftps/directory/list/index.js +25 -9
- package/node/ftps/directory/move-dir/index.js +41 -9
- package/node/ftps/directory/remove-dir/index.js +42 -9
- package/node/ftps/file/copy/index.js +45 -9
- package/node/ftps/file/download/index.js +30 -9
- package/node/ftps/file/exists/index.js +39 -9
- package/node/ftps/file/index.d.ts +1 -1
- package/node/ftps/file/index.js +1 -1
- package/node/ftps/file/move/index.js +49 -9
- package/node/ftps/file/remove/index.js +40 -9
- package/node/ftps/file/stat/index.js +31 -9
- package/node/ftps/file/upload/index.js +44 -9
- package/node/images/create/index.js +10 -18
- package/node/images/format/index.js +264 -251
- package/node/images/index.d.ts +1 -1
- package/node/images/index.js +1 -1
- package/node/images/metadata/index.js +10 -18
- package/node/images/transform/index.js +168 -203
- package/node/images/transform/operations/blur/index.js +12 -10
- package/node/images/transform/operations/brighten/index.js +12 -10
- package/node/images/transform/operations/extend/index.js +26 -17
- package/node/images/transform/operations/extract/index.js +17 -10
- package/node/images/transform/operations/flatten/index.js +21 -17
- package/node/images/transform/operations/flip/index.js +3 -7
- package/node/images/transform/operations/flop/index.js +3 -7
- package/node/images/transform/operations/hue/index.js +14 -10
- package/node/images/transform/operations/index.d.ts +2 -2
- package/node/images/transform/operations/index.js +2 -2
- package/node/images/transform/operations/level/index.js +15 -10
- package/node/images/transform/operations/lighten/index.js +14 -10
- package/node/images/transform/operations/normalize/index.js +15 -10
- package/node/images/transform/operations/overlay/index.js +90 -17
- package/node/images/transform/operations/resize/index.js +47 -17
- package/node/images/transform/operations/rotate/index.js +21 -17
- package/node/images/transform/operations/saturate/index.js +16 -10
- package/node/images/types.js +34 -9
- package/node/images/utils/index.js +85 -19
- package/node/index.d.ts +3 -3
- package/node/index.js +3 -3
- package/node/process/on-exit/index.js +45 -28
- package/node/process/prompt-continue/index.js +29 -16
- package/node/process/spawner/index.js +104 -80
- package/node/sftp/directory/copy-dir/index.js +55 -9
- package/node/sftp/directory/list/index.js +23 -9
- package/node/sftp/directory/move-dir/index.js +38 -9
- package/node/sftp/directory/remove-dir/index.js +42 -9
- package/node/sftp/file/copy/index.js +40 -9
- package/node/sftp/file/download/index.js +27 -9
- package/node/sftp/file/exists/index.js +30 -9
- package/node/sftp/file/index.d.ts +2 -2
- package/node/sftp/file/index.js +2 -2
- package/node/sftp/file/move/index.js +42 -9
- package/node/sftp/file/remove/index.js +33 -9
- package/node/sftp/file/stat/index.js +28 -9
- package/node/sftp/file/upload/index.js +36 -9
- package/package.json +1 -8
- package/chunks/chunk-2FNCUXAX.js +0 -27
- package/chunks/chunk-2GJSPEO4.js +0 -31
- package/chunks/chunk-2IGP6V77.js +0 -22
- package/chunks/chunk-3QI2MSDK.js +0 -34
- package/chunks/chunk-3RNLPW7B.js +0 -101
- package/chunks/chunk-3RZMW72G.js +0 -33
- package/chunks/chunk-4KLCJX2T.js +0 -36
- package/chunks/chunk-4LTN4SCD.js +0 -55
- package/chunks/chunk-4Q4T7QQO.js +0 -27
- package/chunks/chunk-4Q5TKOIG.js +0 -53
- package/chunks/chunk-57YKZBJR.js +0 -29
- package/chunks/chunk-5H3IRSOB.js +0 -8
- package/chunks/chunk-5NTPCRFH.js +0 -32
- package/chunks/chunk-5TM235Z3.js +0 -40
- package/chunks/chunk-5WVGUZL5.js +0 -35
- package/chunks/chunk-6XL25OZX.js +0 -12
- package/chunks/chunk-75BICI4L.js +0 -20
- package/chunks/chunk-77SWZUHV.js +0 -31
- package/chunks/chunk-AC4UMIWM.js +0 -124
- package/chunks/chunk-AG4VERYN.js +0 -25
- package/chunks/chunk-AP3VYSVF.js +0 -36
- package/chunks/chunk-ASXK7XCC.js +0 -18
- package/chunks/chunk-AVIMGMTP.js +0 -17
- package/chunks/chunk-B4HGXMP3.js +0 -20
- package/chunks/chunk-B5V7D2ZL.js +0 -77
- package/chunks/chunk-B6653QJD.js +0 -37
- package/chunks/chunk-BCX4HPD7.js +0 -33
- package/chunks/chunk-CVMYA5XK.js +0 -632
- package/chunks/chunk-DMWGHBIL.js +0 -25
- package/chunks/chunk-DNIOWD7K.js +0 -8
- package/chunks/chunk-E2ZY3SEW.js +0 -26
- package/chunks/chunk-E6MSDKON.js +0 -13
- package/chunks/chunk-E7BBN5JC.js +0 -22
- package/chunks/chunk-EX2QKFY5.js +0 -41
- package/chunks/chunk-EYYNCLVR.js +0 -33
- package/chunks/chunk-F2YJXIT7.js +0 -78
- package/chunks/chunk-FSNNEPY5.js +0 -37
- package/chunks/chunk-GG4EFNMU.js +0 -89
- package/chunks/chunk-GQBFMP6N.js +0 -32
- package/chunks/chunk-H3HRQ52T.js +0 -32
- package/chunks/chunk-H4PP6AHP.js +0 -15
- package/chunks/chunk-HC6ZOHCS.js +0 -14
- package/chunks/chunk-HMMPT3UM.js +0 -47
- package/chunks/chunk-HQLRJ7XW.js +0 -12
- package/chunks/chunk-HYGUIF2O.js +0 -23
- package/chunks/chunk-HYPEWMYZ.js +0 -10
- package/chunks/chunk-I5MRXMHR.js +0 -32
- package/chunks/chunk-I6ZP5T5V.js +0 -10
- package/chunks/chunk-IEZ3O5OF.js +0 -40
- package/chunks/chunk-IPRWXI27.js +0 -31
- package/chunks/chunk-IRKZUMWZ.js +0 -38
- package/chunks/chunk-ISJONMNA.js +0 -16
- package/chunks/chunk-JB27MAKY.js +0 -22
- package/chunks/chunk-JZ6GM444.js +0 -43
- package/chunks/chunk-K5UF634H.js +0 -25
- package/chunks/chunk-LEBGVBYD.js +0 -138
- package/chunks/chunk-LJ5MGLLU.js +0 -56
- package/chunks/chunk-LUAYN7VJ.js +0 -27
- package/chunks/chunk-MDVGDZU6.js +0 -25
- package/chunks/chunk-ML22TIBW.js +0 -37
- package/chunks/chunk-MO4TRYNI.js +0 -29
- package/chunks/chunk-MSU7JU63.js +0 -49
- package/chunks/chunk-NIBRPZJD.js +0 -58
- package/chunks/chunk-O32IRXDX.js +0 -78
- package/chunks/chunk-OAX7GS7C.js +0 -36
- package/chunks/chunk-OBSTP7YR.js +0 -257
- package/chunks/chunk-OFCSIK6J.js +0 -13
- package/chunks/chunk-OFYGPRWE.js +0 -21
- package/chunks/chunk-OGBUSUE6.js +0 -12
- package/chunks/chunk-OSAXBA7G.js +0 -10
- package/chunks/chunk-OT7QXCH6.js +0 -23
- package/chunks/chunk-P4J6S2WQ.js +0 -64
- package/chunks/chunk-PUQUSA6S.js +0 -12
- package/chunks/chunk-PYJKFOMV.js +0 -193
- package/chunks/chunk-QHEWBOQI.js +0 -19
- package/chunks/chunk-QXAJXTXV.js +0 -19
- package/chunks/chunk-R3AWQXMY.js +0 -20
- package/chunks/chunk-R66GH2MQ.js +0 -38
- package/chunks/chunk-RART44AF.js +0 -21
- package/chunks/chunk-REXSJULD.js +0 -28
- package/chunks/chunk-RJRNYRPM.js +0 -23
- package/chunks/chunk-RKX6KLPQ.js +0 -47
- package/chunks/chunk-RW7VAKJW.js +0 -15
- package/chunks/chunk-RZOR7ZC3.js +0 -35
- package/chunks/chunk-S2UZ3HZR.js +0 -31
- package/chunks/chunk-SYH5LYQC.js +0 -28
- package/chunks/chunk-TAXFCVFE.js +0 -30
- package/chunks/chunk-TNZGRXKJ.js +0 -24
- package/chunks/chunk-TRFZSKNB.js +0 -32
- package/chunks/chunk-U664BT44.js +0 -45
- package/chunks/chunk-U6SGKHHA.js +0 -32
- package/chunks/chunk-UTQNGKGQ.js +0 -60
- package/chunks/chunk-VPBZS3S4.js +0 -27
- package/chunks/chunk-W5A2TON3.js +0 -10
- package/chunks/chunk-W7PJ5NQQ.js +0 -23
- package/chunks/chunk-WGRQXVBK.js +0 -207
- package/chunks/chunk-WIFHP4X7.js +0 -56
- package/chunks/chunk-WL4WNJ2Y.js +0 -39
- package/chunks/chunk-WNDMYNDU.js +0 -8
- package/chunks/chunk-WSFCRVEQ.js +0 -9
- package/chunks/chunk-WZS4Q3G3.js +0 -36
- package/chunks/chunk-X4YSGOKG.js +0 -2673
- package/chunks/chunk-XA4HVHJ4.js +0 -18
- package/chunks/chunk-XEQ2PBT2.js +0 -20
- package/chunks/chunk-XFB4PUXO.js +0 -78
- package/chunks/chunk-XIIJYVJZ.js +0 -15
- package/chunks/chunk-XNF5MLCQ.js +0 -14
- package/chunks/chunk-XQUMWHCH.js +0 -25
- package/chunks/chunk-YA2YCZUF.js +0 -8
- package/chunks/chunk-YDIBNEGA.js +0 -9
- package/chunks/chunk-YHMR7IBA.js +0 -24
- package/chunks/chunk-YWSXCFYY.js +0 -61
- package/chunks/chunk-YY3TSU22.js +0 -48
- package/chunks/chunk-ZAP3ELDE.js +0 -40
- package/chunks/chunk-ZJNQRKEJ.js +0 -105
- package/chunks/chunk-ZJR5ASR3.js +0 -26
- package/chunks/index.d.ts +0 -1
- package/chunks/index.js +0 -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,15 +1,15 @@
|
|
|
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'
|
|
4
3
|
export * as eventListener from './EventListener/index.js'
|
|
4
|
+
export * as disclaimer from './Disclaimer/index.js'
|
|
5
5
|
export * as gallery from './Gallery/index.js'
|
|
6
6
|
export * as image from './Image/index.js'
|
|
7
7
|
export * as intersectionObserver from './IntersectionObserver/index.js'
|
|
8
8
|
export * as overlayer from './Overlayer/index.js'
|
|
9
9
|
export * as paginator from './Paginator/index.js'
|
|
10
10
|
export * as resizeObserver from './ResizeObserver/index.js'
|
|
11
|
-
export * as scrllgngn from './Scrllgngn/index.js'
|
|
12
11
|
export * as scrollListener from './ScrollListener/index.js'
|
|
12
|
+
export * as scrllgngn from './Scrllgngn/index.js'
|
|
13
13
|
export * as sequencer from './Sequencer/index.js'
|
|
14
14
|
export * as shadowRoot from './ShadowRoot/index.js'
|
|
15
15
|
export * as subtitles from './Subtitles/index.js'
|
package/components/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
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'
|
|
4
3
|
export * as eventListener from './EventListener/index.js'
|
|
4
|
+
export * as disclaimer from './Disclaimer/index.js'
|
|
5
5
|
export * as gallery from './Gallery/index.js'
|
|
6
6
|
export * as image from './Image/index.js'
|
|
7
7
|
export * as intersectionObserver from './IntersectionObserver/index.js'
|
|
8
8
|
export * as overlayer from './Overlayer/index.js'
|
|
9
9
|
export * as paginator from './Paginator/index.js'
|
|
10
10
|
export * as resizeObserver from './ResizeObserver/index.js'
|
|
11
|
-
export * as scrllgngn from './Scrllgngn/index.js'
|
|
12
11
|
export * as scrollListener from './ScrollListener/index.js'
|
|
12
|
+
export * as scrllgngn from './Scrllgngn/index.js'
|
|
13
13
|
export * as sequencer from './Sequencer/index.js'
|
|
14
14
|
export * as shadowRoot from './ShadowRoot/index.js'
|
|
15
15
|
export * as subtitles from './Subtitles/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,7 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
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(' ');
|
|
12
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/index.d.ts
CHANGED
package/index.js
CHANGED
|
@@ -1,9 +1,68 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
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
|
+
}));
|
|
58
|
+
}
|
|
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
|
+
}
|
|
68
|
+
}
|
|
@@ -1,9 +1,33 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
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
|
+
}
|
|
33
|
+
}
|
|
@@ -1,9 +1,69 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
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
|
+
}
|
|
69
|
+
}
|
|
@@ -1,9 +1,59 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
1
|
+
import { ListObjectsV2Command, DeleteObjectsCommand } 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 deletes all objects under a directory prefix in an S3 bucket
|
|
6
|
+
* using the AWS SDK v3 client. Handles pagination and the 1 000‑key limit of
|
|
7
|
+
* `DeleteObjects`.
|
|
8
|
+
*
|
|
9
|
+
* @param {S3Client} client - The v3 S3 client instance.
|
|
10
|
+
* @param {string} bucketName - The name of the S3 bucket.
|
|
11
|
+
* @param {string} directoryPath - The “directory” prefix to delete.
|
|
12
|
+
* @param {RemoveDirOptions} [options] - Optional listing/deletion configuration.
|
|
13
|
+
* @returns {Promise<Outcome.Either<true, string>>}
|
|
14
|
+
* - On success: `Outcome.makeSuccess(true)` – deletion succeeded, or prefix
|
|
15
|
+
* absent and `ignoreMissing` is true.
|
|
16
|
+
* - On failure: `Outcome.makeFailure(errStr)` if deletion fails, or prefix
|
|
17
|
+
* absent and `ignoreMissing` is false.
|
|
18
|
+
*/
|
|
19
|
+
export async function removeDir(client, bucketName, directoryPath, options) {
|
|
20
|
+
const { listObjectsOptions, deleteObjectsOptions, ignoreMissing = true } = options ?? {};
|
|
21
|
+
const prefix = directoryPath.endsWith('/') ? directoryPath : `${directoryPath}/`;
|
|
22
|
+
let continuationToken;
|
|
23
|
+
let anyFound = false;
|
|
24
|
+
try {
|
|
25
|
+
do {
|
|
26
|
+
const listResp = await client.send(new ListObjectsV2Command({
|
|
27
|
+
Bucket: bucketName,
|
|
28
|
+
Prefix: prefix,
|
|
29
|
+
ContinuationToken: continuationToken,
|
|
30
|
+
...listObjectsOptions
|
|
31
|
+
}));
|
|
32
|
+
const keys = (listResp.Contents ?? [])
|
|
33
|
+
.map(o => o.Key)
|
|
34
|
+
.filter(e => e !== undefined);
|
|
35
|
+
if (keys.length > 0) {
|
|
36
|
+
anyFound = true;
|
|
37
|
+
// Delete in batches of ≤ 1 000 keys
|
|
38
|
+
for (let i = 0; i < keys.length; i += 1000) {
|
|
39
|
+
const chunk = keys.slice(i, i + 1000);
|
|
40
|
+
await client.send(new DeleteObjectsCommand({
|
|
41
|
+
Bucket: bucketName,
|
|
42
|
+
Delete: { Objects: chunk.map(Key => ({ Key })) },
|
|
43
|
+
...deleteObjectsOptions
|
|
44
|
+
}));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
continuationToken = listResp.IsTruncated === true
|
|
48
|
+
? listResp.NextContinuationToken
|
|
49
|
+
: undefined;
|
|
50
|
+
} while (continuationToken !== undefined);
|
|
51
|
+
if (!anyFound && !ignoreMissing) {
|
|
52
|
+
return Outcome.makeFailure(`No objects found for prefix "${prefix}".`);
|
|
53
|
+
}
|
|
54
|
+
return Outcome.makeSuccess(true);
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
@@ -1,9 +1,43 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
1
|
+
import { 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
|
+
* Copies an object from one key to another within the same S3 bucket.
|
|
6
|
+
*
|
|
7
|
+
* @param {S3Client} client - The v3 S3 client instance.
|
|
8
|
+
* @param {string} bucketName - The name of the S3 bucket.
|
|
9
|
+
* @param {string} sourcePath - The key of the source object.
|
|
10
|
+
* @param {string} targetPath - The key where the object will be copied.
|
|
11
|
+
* @param {CopyOptions} [options] - Optional copy configuration.
|
|
12
|
+
* @param {Omit<CopyObjectCommandInput,'Bucket'|'Key'|'CopySource'>} [options.copyOptions] - Extra copy params.
|
|
13
|
+
* @param {boolean} [options.overwrite=false] - Whether to overwrite an existing object.
|
|
14
|
+
* @returns {Promise<Outcome.Either<true, string>>}
|
|
15
|
+
* - On success: `Outcome.makeSuccess(true)`.
|
|
16
|
+
* - On failure: `Outcome.makeFailure(errStr)`.
|
|
17
|
+
*/
|
|
18
|
+
export async function copy(client, bucketName, sourcePath, targetPath, options) {
|
|
19
|
+
const { copyOptions, overwrite = false } = options ?? {};
|
|
20
|
+
try {
|
|
21
|
+
if (!overwrite) {
|
|
22
|
+
try {
|
|
23
|
+
await client.send(new HeadObjectCommand({ Bucket: bucketName, Key: targetPath }));
|
|
24
|
+
return Outcome.makeFailure(`Object already exists at ${targetPath}.`);
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
const notFound = err.$metadata?.httpStatusCode === 404 || err.name === 'NotFound';
|
|
28
|
+
if (!notFound)
|
|
29
|
+
throw err; // propagate unexpected errors
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
await client.send(new CopyObjectCommand({
|
|
33
|
+
Bucket: bucketName,
|
|
34
|
+
Key: targetPath,
|
|
35
|
+
CopySource: `${bucketName}/${sourcePath}`,
|
|
36
|
+
...copyOptions
|
|
37
|
+
}));
|
|
38
|
+
return Outcome.makeSuccess(true);
|
|
39
|
+
}
|
|
40
|
+
catch (err) {
|
|
41
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
@@ -1,9 +1,30 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
} from
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
}
|
|
1
|
+
import { GetObjectCommand } 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
|
+
* Downloads a file from a specified Amazon S3 bucket.
|
|
6
|
+
*
|
|
7
|
+
* The function streams the object’s content back as a Node `Readable`.
|
|
8
|
+
*
|
|
9
|
+
* @param {S3Client} client - The v3 S3 client instance.
|
|
10
|
+
* @param {string} bucketName - The name of the S3 bucket.
|
|
11
|
+
* @param {string} sourcePath - The key of the object to download.
|
|
12
|
+
* @param {DownloadOptions} [options] - Extra parameters for the download.
|
|
13
|
+
* @returns {Promise<Outcome.Either<Readable, string>>}
|
|
14
|
+
* - On success: `Outcome.makeSuccess(stream)` containing the file content.
|
|
15
|
+
* - On failure: `Outcome.makeFailure(errStr)`.
|
|
16
|
+
*/
|
|
17
|
+
export async function download(client, bucketName, sourcePath, options) {
|
|
18
|
+
try {
|
|
19
|
+
const response = await client.send(new GetObjectCommand({
|
|
20
|
+
Bucket: bucketName,
|
|
21
|
+
Key: sourcePath,
|
|
22
|
+
...options
|
|
23
|
+
}));
|
|
24
|
+
const stream = response.Body;
|
|
25
|
+
return Outcome.makeSuccess(stream);
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
return Outcome.makeFailure(unknownToString(err));
|
|
29
|
+
}
|
|
30
|
+
}
|