Compare commits

..

9 Commits

Author SHA1 Message Date
559e3da47b 3.0.11 2024-06-08 19:13:25 +02:00
a7ac870e05 fix(core): update 2024-06-08 19:13:24 +02:00
d48c5e229a 3.0.10 2024-06-03 21:35:08 +02:00
b9c384dd08 fix(core): update 2024-06-03 21:35:08 +02:00
91c04b2364 update description 2024-05-29 14:11:54 +02:00
b5dcc131e2 3.0.9 2024-05-27 17:34:27 +02:00
cb0ab2c9db fix(core): update 2024-05-27 17:34:26 +02:00
2a17ee542e 3.0.8 2024-05-27 14:34:13 +02:00
95e9d2f0ff fix(core): update 2024-05-27 14:34:12 +02:00
11 changed files with 222 additions and 107 deletions

View File

@ -8,29 +8,27 @@
"githost": "code.foss.global", "githost": "code.foss.global",
"gitscope": "push.rocks", "gitscope": "push.rocks",
"gitrepo": "smartbucket", "gitrepo": "smartbucket",
"description": "A TypeScript library for cloud-independent object storage, providing features like bucket creation, file and directory management, and data streaming.", "description": "A TypeScript library offering simple and cloud-agnostic object storage with advanced features like bucket creation, file and directory management, and data streaming.",
"npmPackagename": "@push.rocks/smartbucket", "npmPackagename": "@push.rocks/smartbucket",
"license": "MIT", "license": "MIT",
"keywords": [ "keywords": [
"TypeScript",
"cloud storage", "cloud storage",
"object storage", "object storage",
"TypeScript", "bucket creation",
"S3",
"minio",
"file management", "file management",
"directory management", "directory management",
"bucket creation",
"data streaming", "data streaming",
"multi-cloud", "multi-cloud",
"API", "API",
"unified storage", "unified storage",
"S3",
"minio",
"file locking",
"metadata",
"buffer handling", "buffer handling",
"access key", "access key",
"secret key", "secret key",
"metadata",
"file locking",
"file streaming",
"directory listing",
"cloud agnostic" "cloud agnostic"
] ]
} }

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "@push.rocks/smartbucket", "name": "@push.rocks/smartbucket",
"version": "3.0.7", "version": "3.0.11",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@push.rocks/smartbucket", "name": "@push.rocks/smartbucket",
"version": "3.0.7", "version": "3.0.11",
"license": "UNLICENSED", "license": "UNLICENSED",
"dependencies": { "dependencies": {
"@push.rocks/smartpath": "^5.0.18", "@push.rocks/smartpath": "^5.0.18",

View File

@ -1,7 +1,7 @@
{ {
"name": "@push.rocks/smartbucket", "name": "@push.rocks/smartbucket",
"version": "3.0.7", "version": "3.0.11",
"description": "A TypeScript library for cloud-independent object storage, providing features like bucket creation, file and directory management, and data streaming.", "description": "A TypeScript library offering simple and cloud-agnostic object storage with advanced features like bucket creation, file and directory management, and data streaming.",
"main": "dist_ts/index.js", "main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts", "typings": "dist_ts/index.d.ts",
"type": "module", "type": "module",
@ -19,12 +19,13 @@
"@push.rocks/tapbundle": "^5.0.23" "@push.rocks/tapbundle": "^5.0.23"
}, },
"dependencies": { "dependencies": {
"@push.rocks/smartmime": "^2.0.0", "@push.rocks/smartmime": "^2.0.2",
"@push.rocks/smartpath": "^5.0.18", "@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartpromise": "^4.0.3", "@push.rocks/smartpromise": "^4.0.3",
"@push.rocks/smartrx": "^3.0.7", "@push.rocks/smartrx": "^3.0.7",
"@push.rocks/smartstream": "^3.0.38", "@push.rocks/smartstream": "^3.0.44",
"@tsclass/tsclass": "^4.0.54", "@push.rocks/smartunique": "^3.0.9",
"@tsclass/tsclass": "^4.0.55",
"minio": "^8.0.0" "minio": "^8.0.0"
}, },
"private": false, "private": false,
@ -44,25 +45,28 @@
"last 1 chrome versions" "last 1 chrome versions"
], ],
"keywords": [ "keywords": [
"TypeScript",
"cloud storage", "cloud storage",
"object storage", "object storage",
"TypeScript", "bucket creation",
"S3",
"minio",
"file management", "file management",
"directory management", "directory management",
"bucket creation",
"data streaming", "data streaming",
"multi-cloud", "multi-cloud",
"API", "API",
"unified storage", "unified storage",
"S3",
"minio",
"file locking",
"metadata",
"buffer handling", "buffer handling",
"access key", "access key",
"secret key", "secret key",
"metadata",
"file locking",
"file streaming",
"directory listing",
"cloud agnostic" "cloud agnostic"
] ],
"homepage": "https://code.foss.global/push.rocks/smartbucket",
"repository": {
"type": "git",
"url": "https://code.foss.global/push.rocks/smartbucket.git"
}
} }

78
pnpm-lock.yaml generated
View File

@ -9,8 +9,8 @@ importers:
.: .:
dependencies: dependencies:
'@push.rocks/smartmime': '@push.rocks/smartmime':
specifier: ^2.0.0 specifier: ^2.0.2
version: 2.0.0 version: 2.0.2
'@push.rocks/smartpath': '@push.rocks/smartpath':
specifier: ^5.0.18 specifier: ^5.0.18
version: 5.0.18 version: 5.0.18
@ -21,11 +21,14 @@ importers:
specifier: ^3.0.7 specifier: ^3.0.7
version: 3.0.7 version: 3.0.7
'@push.rocks/smartstream': '@push.rocks/smartstream':
specifier: ^3.0.38 specifier: ^3.0.44
version: 3.0.38 version: 3.0.44
'@push.rocks/smartunique':
specifier: ^3.0.9
version: 3.0.9
'@tsclass/tsclass': '@tsclass/tsclass':
specifier: ^4.0.54 specifier: ^4.0.55
version: 4.0.54 version: 4.0.55
minio: minio:
specifier: ^8.0.0 specifier: ^8.0.0
version: 8.0.0 version: 8.0.0
@ -35,10 +38,10 @@ importers:
version: 2.1.80 version: 2.1.80
'@git.zone/tsrun': '@git.zone/tsrun':
specifier: ^1.2.46 specifier: ^1.2.46
version: 1.2.46(@types/node@20.12.12) version: 1.2.46(@types/node@20.14.2)
'@git.zone/tstest': '@git.zone/tstest':
specifier: ^1.0.90 specifier: ^1.0.90
version: 1.0.90(@types/node@20.12.12) version: 1.0.90(@types/node@20.14.2)
'@push.rocks/qenv': '@push.rocks/qenv':
specifier: ^6.0.5 specifier: ^6.0.5
version: 6.0.5 version: 6.0.5
@ -412,8 +415,8 @@ packages:
'@push.rocks/smartmime@1.0.6': '@push.rocks/smartmime@1.0.6':
resolution: {integrity: sha512-PHd+I4UcsnOATNg8wjDsSAmmJ4CwQFrQCNzd0HSJMs4ZpiK3Ya91almd6GLpDPU370U4HFh4FaPF4eEAI6vkJQ==} resolution: {integrity: sha512-PHd+I4UcsnOATNg8wjDsSAmmJ4CwQFrQCNzd0HSJMs4ZpiK3Ya91almd6GLpDPU370U4HFh4FaPF4eEAI6vkJQ==}
'@push.rocks/smartmime@2.0.0': '@push.rocks/smartmime@2.0.2':
resolution: {integrity: sha512-yNEYrQzWjxwinCT8djw9eFumpCIvIQQS9KXWLH0LT9COlFoaP/ruk7pogrGYKCo20tFITJyO6NmMCa24402rvA==} resolution: {integrity: sha512-aXH1sFD73q9cEwPdeSeN7Zxd2aoVt9wE97ILFCW5gORylvm85Hgfq7SYkqykjQzEL8IDJKJF3G78+xcL2rALTg==}
'@push.rocks/smartnetwork@3.0.2': '@push.rocks/smartnetwork@3.0.2':
resolution: {integrity: sha512-s6CNGzQ1n/d/6cOKXbxeW6/tO//dr1woLqI01g7XhqTriw0nsm2G2kWaZh2J0VOguGNWBgQVCIpR0LjdRNWb3g==} resolution: {integrity: sha512-s6CNGzQ1n/d/6cOKXbxeW6/tO//dr1woLqI01g7XhqTriw0nsm2G2kWaZh2J0VOguGNWBgQVCIpR0LjdRNWb3g==}
@ -467,8 +470,8 @@ packages:
'@push.rocks/smartstream@2.0.8': '@push.rocks/smartstream@2.0.8':
resolution: {integrity: sha512-GlF/9cCkvBHwKa3DK4DO5wjfSgqkj6gAS4TrY9uD5NMHu9RQv4WiNrElTYj7iCEpnZgUnLO3tzw1JA3NRIMnnA==} resolution: {integrity: sha512-GlF/9cCkvBHwKa3DK4DO5wjfSgqkj6gAS4TrY9uD5NMHu9RQv4WiNrElTYj7iCEpnZgUnLO3tzw1JA3NRIMnnA==}
'@push.rocks/smartstream@3.0.38': '@push.rocks/smartstream@3.0.44':
resolution: {integrity: sha512-Sk9esPURWXldS0ZvgClCtrEyvELjvFnbQgUAelwoXWMfM8pXuB9BX1tE+Z1iBkB9Xyw2p1d9jYelO6waSXg0BQ==} resolution: {integrity: sha512-BZwSUmhVD/CEzRdG/e2UachlyNjshiknqBnwHzIFPIjVKC66UgWX5lYCs2LOwJtuUEpfL1vTMOAYUFNcmPjW9A==}
'@push.rocks/smartstring@4.0.15': '@push.rocks/smartstring@4.0.15':
resolution: {integrity: sha512-NTNeOjWyg+aHtBTiQEyXamr7oTvYZ3wS1fudHo9ua7CLrykpK+i+RxFyJaLg1zB5x9xQF3NLEQecB14HPFX8Cg==} resolution: {integrity: sha512-NTNeOjWyg+aHtBTiQEyXamr7oTvYZ3wS1fudHo9ua7CLrykpK+i+RxFyJaLg1zB5x9xQF3NLEQecB14HPFX8Cg==}
@ -621,8 +624,8 @@ packages:
'@tsclass/tsclass@3.0.48': '@tsclass/tsclass@3.0.48':
resolution: {integrity: sha512-hC65UvDlp9qvsl6OcIZXz0JNiWZ0gyzsTzbXpg215sGxopgbkOLCr6E0s4qCTnweYm95gt2AdY95uP7M7kExaQ==} resolution: {integrity: sha512-hC65UvDlp9qvsl6OcIZXz0JNiWZ0gyzsTzbXpg215sGxopgbkOLCr6E0s4qCTnweYm95gt2AdY95uP7M7kExaQ==}
'@tsclass/tsclass@4.0.54': '@tsclass/tsclass@4.0.55':
resolution: {integrity: sha512-v+Xc7M0BKNT79/kx7S5Jsc17zj+acUuMDxJtKbQgdU4H8ke3aHAHJr2KicXJeXDTcn41ZEbwJPQ1cc+bjy8bZw==} resolution: {integrity: sha512-zg774JF90/3/rJ7xk4LyGgxcUzxdKIQcwtBVxez4LhvegESxvHiFmX42WL105iBpE53ISJ8sctLWlwG1JQZdlA==}
'@tsconfig/node10@1.0.11': '@tsconfig/node10@1.0.11':
resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==}
@ -765,6 +768,9 @@ packages:
'@types/node@20.12.12': '@types/node@20.12.12':
resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==} resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
'@types/node@20.14.2':
resolution: {integrity: sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==}
'@types/parse5@6.0.3': '@types/parse5@6.0.3':
resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==} resolution: {integrity: sha512-SuT16Q1K51EAVPz1K29DJ/sXjhSQ0zjvsypYJ6tlwVsRV9jwW5Adq2ch8Dq8kDBCkYnELS7N7VNCSB5nC56t/g==}
@ -2821,8 +2827,8 @@ packages:
resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==}
engines: {node: '>=12.20'} engines: {node: '>=12.20'}
type-fest@4.18.2: type-fest@4.20.0:
resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} resolution: {integrity: sha512-MBh+PHUHHisjXf4tlx0CFWoMdjx8zCMLJHOjnV1prABYZFHqtFOyauCIK2/7w4oIfwkF8iNhLtnJEfVY2vn3iw==}
engines: {node: '>=16'} engines: {node: '>=16'}
type-is@1.6.18: type-is@1.6.18:
@ -3127,12 +3133,12 @@ snapshots:
'@push.rocks/smartrequest': 2.0.22 '@push.rocks/smartrequest': 2.0.22
'@push.rocks/smartrx': 3.0.7 '@push.rocks/smartrx': 3.0.7
'@push.rocks/smartsitemap': 2.0.3 '@push.rocks/smartsitemap': 2.0.3
'@push.rocks/smartstream': 3.0.38 '@push.rocks/smartstream': 3.0.44
'@push.rocks/smarttime': 4.0.6 '@push.rocks/smarttime': 4.0.6
'@push.rocks/taskbuffer': 3.1.7 '@push.rocks/taskbuffer': 3.1.7
'@push.rocks/webrequest': 3.0.37 '@push.rocks/webrequest': 3.0.37
'@push.rocks/webstore': 2.0.17 '@push.rocks/webstore': 2.0.17
'@tsclass/tsclass': 4.0.54 '@tsclass/tsclass': 4.0.55
'@types/express': 4.17.21 '@types/express': 4.17.21
body-parser: 1.20.2 body-parser: 1.20.2
cors: 2.8.5 cors: 2.8.5
@ -3333,22 +3339,22 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
'@git.zone/tsrun@1.2.46(@types/node@20.12.12)': '@git.zone/tsrun@1.2.46(@types/node@20.14.2)':
dependencies: dependencies:
'@push.rocks/smartfile': 10.0.41 '@push.rocks/smartfile': 10.0.41
'@push.rocks/smartshell': 3.0.5 '@push.rocks/smartshell': 3.0.5
ts-node: 10.9.2(@types/node@20.12.12)(typescript@5.1.6) ts-node: 10.9.2(@types/node@20.14.2)(typescript@5.1.6)
typescript: 5.1.6 typescript: 5.1.6
transitivePeerDependencies: transitivePeerDependencies:
- '@swc/core' - '@swc/core'
- '@swc/wasm' - '@swc/wasm'
- '@types/node' - '@types/node'
'@git.zone/tstest@1.0.90(@types/node@20.12.12)': '@git.zone/tstest@1.0.90(@types/node@20.14.2)':
dependencies: dependencies:
'@api.global/typedserver': 3.0.37 '@api.global/typedserver': 3.0.37
'@git.zone/tsbundle': 2.0.15 '@git.zone/tsbundle': 2.0.15
'@git.zone/tsrun': 1.2.46(@types/node@20.12.12) '@git.zone/tsrun': 1.2.46(@types/node@20.14.2)
'@push.rocks/consolecolor': 2.0.2 '@push.rocks/consolecolor': 2.0.2
'@push.rocks/smartbrowser': 2.0.6 '@push.rocks/smartbrowser': 2.0.6
'@push.rocks/smartdelay': 3.0.5 '@push.rocks/smartdelay': 3.0.5
@ -3597,7 +3603,7 @@ snapshots:
'@push.rocks/smartpath': 5.0.18 '@push.rocks/smartpath': 5.0.18
'@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartrequest': 2.0.22 '@push.rocks/smartrequest': 2.0.22
'@push.rocks/smartstream': 3.0.38 '@push.rocks/smartstream': 3.0.44
'@types/fs-extra': 11.0.4 '@types/fs-extra': 11.0.4
'@types/glob': 8.1.0 '@types/glob': 8.1.0
'@types/js-yaml': 4.0.9 '@types/js-yaml': 4.0.9
@ -3664,7 +3670,7 @@ snapshots:
'@types/mime-types': 2.1.4 '@types/mime-types': 2.1.4
mime-types: 2.1.35 mime-types: 2.1.35
'@push.rocks/smartmime@2.0.0': '@push.rocks/smartmime@2.0.2':
dependencies: dependencies:
'@types/mime-types': 2.1.4 '@types/mime-types': 2.1.4
file-type: 19.0.0 file-type: 19.0.0
@ -3711,7 +3717,7 @@ snapshots:
'@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartpuppeteer': 2.0.2 '@push.rocks/smartpuppeteer': 2.0.2
'@push.rocks/smartunique': 3.0.9 '@push.rocks/smartunique': 3.0.9
'@tsclass/tsclass': 4.0.54 '@tsclass/tsclass': 4.0.55
'@types/express': 4.17.21 '@types/express': 4.17.21
express: 4.19.2 express: 4.19.2
pdf-lib: 1.17.1 pdf-lib: 1.17.1
@ -3769,7 +3775,7 @@ snapshots:
'@push.rocks/smartxml': 1.0.8 '@push.rocks/smartxml': 1.0.8
'@push.rocks/smartyaml': 2.0.5 '@push.rocks/smartyaml': 2.0.5
'@push.rocks/webrequest': 3.0.37 '@push.rocks/webrequest': 3.0.37
'@tsclass/tsclass': 4.0.54 '@tsclass/tsclass': 4.0.55
'@push.rocks/smartsocket@2.0.27': '@push.rocks/smartsocket@2.0.27':
dependencies: dependencies:
@ -3821,12 +3827,12 @@ snapshots:
from2: 2.3.0 from2: 2.3.0
through2: 4.0.2 through2: 4.0.2
'@push.rocks/smartstream@3.0.38': '@push.rocks/smartstream@3.0.44':
dependencies: dependencies:
'@push.rocks/lik': 6.0.15 '@push.rocks/lik': 6.0.15
'@push.rocks/smartenv': 5.0.12
'@push.rocks/smartpromise': 4.0.3 '@push.rocks/smartpromise': 4.0.3
'@push.rocks/smartrx': 3.0.7 '@push.rocks/smartrx': 3.0.7
'@push.rocks/webstream': 1.0.8
'@push.rocks/smartstring@4.0.15': '@push.rocks/smartstring@4.0.15':
dependencies: dependencies:
@ -3903,7 +3909,7 @@ snapshots:
dependencies: dependencies:
'@pushrocks/smartdelay': 3.0.1 '@pushrocks/smartdelay': 3.0.1
'@pushrocks/smartpromise': 4.0.2 '@pushrocks/smartpromise': 4.0.2
'@tsclass/tsclass': 4.0.54 '@tsclass/tsclass': 4.0.55
'@push.rocks/webstore@2.0.17': '@push.rocks/webstore@2.0.17':
dependencies: dependencies:
@ -4083,9 +4089,9 @@ snapshots:
dependencies: dependencies:
type-fest: 2.19.0 type-fest: 2.19.0
'@tsclass/tsclass@4.0.54': '@tsclass/tsclass@4.0.55':
dependencies: dependencies:
type-fest: 4.18.2 type-fest: 4.20.0
'@tsconfig/node10@1.0.11': {} '@tsconfig/node10@1.0.11': {}
@ -4250,6 +4256,10 @@ snapshots:
dependencies: dependencies:
undici-types: 5.26.5 undici-types: 5.26.5
'@types/node@20.14.2':
dependencies:
undici-types: 5.26.5
'@types/parse5@6.0.3': {} '@types/parse5@6.0.3': {}
'@types/ping@0.4.4': {} '@types/ping@0.4.4': {}
@ -6666,14 +6676,14 @@ snapshots:
trough@2.2.0: {} trough@2.2.0: {}
ts-node@10.9.2(@types/node@20.12.12)(typescript@5.1.6): ts-node@10.9.2(@types/node@20.14.2)(typescript@5.1.6):
dependencies: dependencies:
'@cspotcode/source-map-support': 0.8.1 '@cspotcode/source-map-support': 0.8.1
'@tsconfig/node10': 1.0.11 '@tsconfig/node10': 1.0.11
'@tsconfig/node12': 1.0.11 '@tsconfig/node12': 1.0.11
'@tsconfig/node14': 1.0.3 '@tsconfig/node14': 1.0.3
'@tsconfig/node16': 1.0.4 '@tsconfig/node16': 1.0.4
'@types/node': 20.12.12 '@types/node': 20.14.2
acorn: 8.11.3 acorn: 8.11.3
acorn-walk: 8.3.2 acorn-walk: 8.3.2
arg: 4.1.3 arg: 4.1.3
@ -6700,7 +6710,7 @@ snapshots:
type-fest@2.19.0: {} type-fest@2.19.0: {}
type-fest@4.18.2: {} type-fest@4.20.0: {}
type-is@1.6.18: type-is@1.6.18:
dependencies: dependencies:

View File

@ -1,10 +1,10 @@
# @push.rocks/smartbucket # @push.rocks/smartbucket
A TypeScript library that offers simple, cloud-independent object storage with features like bucket creation, file management, and directory management. A TypeScript library for cloud-independent object storage, providing features like bucket creation, file and directory management, and data streaming.
## Install ## Install
To install `@push.rocks/smartbucket`, you need to have Node.js and npm (Node Package Manager) installed on your system. If you have them installed, you can add `@push.rocks/smartbucket` to your project by running the following command in your project's root directory: To install `@push.rocks/smartbucket`, you need to have Node.js and npm (Node Package Manager) installed. If they are installed, you can add `@push.rocks/smartbucket` to your project by running the following command in your project's root directory:
```bash ```bash
npm install @push.rocks/smartbucket --save npm install @push.rocks/smartbucket --save
@ -49,7 +49,7 @@ const mySmartBucket = new SmartBucket({
accessKey: "yourAccessKey", accessKey: "yourAccessKey",
accessSecret: "yourSecretKey", accessSecret: "yourSecretKey",
endpoint: "yourEndpointURL", endpoint: "yourEndpointURL",
port: 443, // Default is 443, could be customized for specific endpoint port: 443, // Default is 443, can be customized for specific endpoint
useSsl: true // Defaults to true useSsl: true // Defaults to true
}); });
``` ```
@ -190,7 +190,7 @@ async function writeFileStream(bucketName: string, filePath: string, readableStr
// Create a readable stream from a string // Create a readable stream from a string
const readable = new Readable(); const readable = new Readable();
readable.push('Hello world streamed as a file!'); readable.push('Hello world streamed as a file!');
readable.push(null); // Indicates end of the stream readable.push(null); // End of stream
// Use the function // Use the function
writeFileStream("exampleBucket", "path/to/streamedObject.txt", readable); writeFileStream("exampleBucket", "path/to/streamedObject.txt", readable);
@ -198,9 +198,9 @@ writeFileStream("exampleBucket", "path/to/streamedObject.txt", readable);
### Working with Directories ### Working with Directories
`@push.rocks/smartbucket` abstracts directories within buckets for easier object management. You can create, list, and delete directories using the `Directory` class. `@push.rocks/smartbucket` offers abstractions for directories within buckets for easier object management. You can create, list, and delete directories using the `Directory` class.
Here's how to list the contents of a directory: To list the contents of a directory:
```typescript ```typescript
async function listDirectoryContents(bucketName: string, directoryPath: string) { async function listDirectoryContents(bucketName: string, directoryPath: string) {
@ -254,11 +254,11 @@ createFileInDirectory("exampleBucket", "some/directory", "newfile.txt", "Hello,
#### Bucket Policies #### Bucket Policies
Manage bucket policies to control access permissions. This feature is dependent on the policies provided by the storage service (e.g., AWS S3, MinIO). Manage bucket policies to control access permissions. This feature depends on the policies provided by the storage service (e.g., AWS S3, MinIO).
#### Object Metadata #### Object Metadata
You can retrieve and modify object metadata. Metadata can be useful for storing additional information about an object. Retrieve and modify object metadata. Metadata can be useful for storing additional information about an object.
To retrieve metadata: To retrieve metadata:
@ -308,8 +308,6 @@ Remember, each cloud provider has specific features and limitations. `@push.rock
This guide covers the basic to advanced scenarios of using `@push.rocks/smartbucket`. For further details, refer to the API documentation and examples. This guide covers the basic to advanced scenarios of using `@push.rocks/smartbucket`. For further details, refer to the API documentation and examples.
## License and Legal Information ## License and Legal Information
This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.

View File

@ -45,7 +45,7 @@ tap.test('should get data in bucket', async () => {
}); });
const fileStringStream = await myBucket.fastGetStream({ const fileStringStream = await myBucket.fastGetStream({
path: 'hithere/socool.txt', path: 'hithere/socool.txt',
}); }, 'nodestream');
console.log(fileString); console.log(fileString);
}); });

View File

@ -3,6 +3,6 @@
*/ */
export const commitinfo = { export const commitinfo = {
name: '@push.rocks/smartbucket', name: '@push.rocks/smartbucket',
version: '3.0.7', version: '3.0.11',
description: 'A TypeScript library for cloud-independent object storage, providing features like bucket creation, file and directory management, and data streaming.' description: 'A TypeScript library offering simple and cloud-agnostic object storage with advanced features like bucket creation, file and directory management, and data streaming.'
} }

View File

@ -107,10 +107,12 @@ export class Bucket {
/** /**
* get file * get file
*/ */
public async fastGet(optionsArg: Parameters<typeof this.fastGetStream>[0]): Promise<Buffer> { public async fastGet(optionsArg: {
path: string
}): Promise<Buffer> {
const done = plugins.smartpromise.defer(); const done = plugins.smartpromise.defer();
let completeFile: Buffer; let completeFile: Buffer;
const replaySubject = await this.fastGetStream(optionsArg); const replaySubject = await this.fastGetReplaySubject(optionsArg);
const subscription = replaySubject.subscribe({ const subscription = replaySubject.subscribe({
next: (chunk) => { next: (chunk) => {
if (completeFile) { if (completeFile) {
@ -131,7 +133,13 @@ export class Bucket {
return completeFile; return completeFile;
} }
public async fastGetStream(optionsArg: { /**
* good when time to first byte is important
* and multiple subscribers are expected
* @param optionsArg
* @returns
*/
public async fastGetReplaySubject(optionsArg: {
path: string; path: string;
}): Promise<plugins.smartrx.rxjs.ReplaySubject<Buffer>> { }): Promise<plugins.smartrx.rxjs.ReplaySubject<Buffer>> {
const fileStream = await this.smartbucketRef.minioClient const fileStream = await this.smartbucketRef.minioClient
@ -161,12 +169,54 @@ export class Bucket {
return replaySubject; return replaySubject;
} }
public fastGetStream(optionsArg: {
path: string;
}, typeArg: 'webstream'): Promise<ReadableStream>
public async fastGetStream(optionsArg: {
path: string;
}, typeArg: 'nodestream'): Promise<plugins.stream.Readable>
/**
* fastGetStream
* @param optionsArg
* @returns
*/
public async fastGetStream(optionsArg: { path: string; }, typeArg: 'webstream' | 'nodestream' = 'nodestream'): Promise<ReadableStream | plugins.stream.Readable>{
const fileStream = await this.smartbucketRef.minioClient
.getObject(this.name, optionsArg.path)
.catch((e) => console.log(e));
const duplexStream = new plugins.smartstream.SmartDuplex<Buffer, Buffer>({
writeFunction: async (chunk) => {
return chunk;
},
finalFunction: async (cb) => {
return null;
}
});
if (!fileStream) {
return null;
}
const smartstream = new plugins.smartstream.StreamWrapper([
fileStream,
duplexStream,
]);
smartstream.run();
if (typeArg === 'nodestream') {
return duplexStream;
};
if (typeArg === 'webstream') {
return (await duplexStream.getWebStreams()).readable;
}
}
/** /**
* store file as stream * store file as stream
*/ */
public async fastPutStream(optionsArg: { public async fastPutStream(optionsArg: {
path: string; path: string;
dataStream: plugins.stream.Readable; dataStream: plugins.stream.Readable | ReadableStream;
nativeMetadata?: { [key: string]: string }; nativeMetadata?: { [key: string]: string };
overwrite?: boolean; overwrite?: boolean;
}): Promise<void> { }): Promise<void> {
@ -183,11 +233,13 @@ export class Bucket {
console.log(`Creating new object at path '${optionsArg.path}' in bucket '${this.name}'.`); console.log(`Creating new object at path '${optionsArg.path}' in bucket '${this.name}'.`);
} }
const streamIntake = await plugins.smartstream.StreamIntake.fromStream<Uint8Array>(optionsArg.dataStream);
// Proceed with putting the object // Proceed with putting the object
await this.smartbucketRef.minioClient.putObject( await this.smartbucketRef.minioClient.putObject(
this.name, this.name,
optionsArg.path, optionsArg.path,
optionsArg.dataStream, streamIntake,
null, null,
...(optionsArg.nativeMetadata ...(optionsArg.nativeMetadata
? (() => { ? (() => {
@ -313,6 +365,13 @@ export class Bucket {
} }
} }
/**
* deletes this bucket
*/
public async delete() {
await this.smartbucketRef.minioClient.removeBucket(this.name);
}
public async fastStat(pathDescriptor: interfaces.IPathDecriptor) { public async fastStat(pathDescriptor: interfaces.IPathDecriptor) {
let checkPath = await helpers.reducePathDescriptorToPath(pathDescriptor); let checkPath = await helpers.reducePathDescriptorToPath(pathDescriptor);
return this.smartbucketRef.minioClient.statObject(this.name, checkPath); return this.smartbucketRef.minioClient.statObject(this.name, checkPath);

View File

@ -234,14 +234,30 @@ export class Directory {
return result; return result;
} }
public async fastGetStream(pathArg: string): Promise<plugins.smartrx.rxjs.ReplaySubject<Buffer>> { public fastGetStream(optionsArg: {
const path = plugins.path.join(this.getBasePath(), pathArg); path: string;
}, typeArg: 'webstream'): Promise<ReadableStream>
public async fastGetStream(optionsArg: {
path: string;
}, typeArg: 'nodestream'): Promise<plugins.stream.Readable>
/**
* fastGetStream
* @param optionsArg
* @returns
*/
public async fastGetStream(optionsArg: { path: string; }, typeArg: 'webstream' | 'nodestream'): Promise<ReadableStream | plugins.stream.Readable>{
const path = plugins.path.join(this.getBasePath(), optionsArg.path);
const result = await this.bucketRef.fastGetStream({ const result = await this.bucketRef.fastGetStream({
path, path
}); }, typeArg as any);
return result; return result;
} }
/**
* removes a file within the directory
* @param optionsArg
*/
public async fastRemove(optionsArg: { path: string }) { public async fastRemove(optionsArg: { path: string }) {
const path = plugins.path.join(this.getBasePath(), optionsArg.path); const path = plugins.path.join(this.getBasePath(), optionsArg.path);
await this.bucketRef.fastRemove({ await this.bucketRef.fastRemove({

View File

@ -4,7 +4,6 @@ import * as interfaces from './interfaces.js';
import { Directory } from './classes.directory.js'; import { Directory } from './classes.directory.js';
import { MetaData } from './classes.metadata.js'; import { MetaData } from './classes.metadata.js';
/** /**
* represents a file in a directory * represents a file in a directory
*/ */
@ -33,7 +32,8 @@ export class File {
directoryRefArg: optionsArg.directory, directoryRefArg: optionsArg.directory,
fileName: optionsArg.name, fileName: optionsArg.name,
}); });
if (contents instanceof plugins.stream.Readable) {} else { if (contents instanceof plugins.stream.Readable) {
} else {
await optionsArg.directory.fastPut({ await optionsArg.directory.fastPut({
path: optionsArg.name, path: optionsArg.name,
contents: contents, contents: contents,
@ -48,7 +48,7 @@ export class File {
public getBasePath(): string { public getBasePath(): string {
return plugins.path.join(this.parentDirectoryRef.getBasePath(), this.name); return plugins.path.join(this.parentDirectoryRef.getBasePath(), this.name);
}; }
constructor(optionsArg: { directoryRefArg: Directory; fileName: string }) { constructor(optionsArg: { directoryRefArg: Directory; fileName: string }) {
this.parentDirectoryRef = optionsArg.directoryRefArg; this.parentDirectoryRef = optionsArg.directoryRefArg;
@ -67,33 +67,59 @@ export class File {
return resultBuffer; return resultBuffer;
} }
public async getReadStream() { public async getReadStream(typeArg: 'webstream'): Promise<ReadableStream>;
const readStream = this.parentDirectoryRef.bucketRef.fastGetStream({ public async getReadStream(typeArg: 'nodestream'): Promise<plugins.stream.Readable>;
path: this.getBasePath(), public async getReadStream(
}); typeArg: 'nodestream' | 'webstream'
): Promise<ReadableStream | plugins.stream.Readable> {
const readStream = this.parentDirectoryRef.bucketRef.fastGetStream(
{
path: this.getBasePath(),
},
typeArg as any
);
return readStream;
} }
/** /**
* removes this file * deletes this file
* for using recycling mechanics use .delete()
*/ */
public async remove() { public async delete(optionsArg?: {
await this.parentDirectoryRef.bucketRef.fastRemove({ mode: 'trash' | 'permanent';
path: this.getBasePath(), }) {
});
if (!this.name.endsWith('.metadata')) { optionsArg = {
... {
mode: 'permanent',
},
...optionsArg,
}
if (optionsArg.mode === 'permanent') {
await this.parentDirectoryRef.bucketRef.fastRemove({ await this.parentDirectoryRef.bucketRef.fastRemove({
path: this.getBasePath() + '.metadata', path: this.getBasePath(),
});
if (!this.name.endsWith('.metadata')) {
const metadata = await this.getMetaData();
await metadata.metadataFile.delete(optionsArg);
}
} else if (optionsArg.mode === 'trash') {
const metadata = await this.getMetaData();
await metadata.storeCustomMetaData({
key: 'recycle',
value: {
deletedAt: Date.now(),
originalPath: this.getBasePath(),
},
});
const trashName = plugins.smartunique.uuid4();
await this.move({
directory: await this.parentDirectoryRef.bucketRef.getBaseDirectory(),
path: plugins.path.join('trash', trashName),
}); });
} }
await this.parentDirectoryRef.listFiles();
}
/** await this.parentDirectoryRef.listFiles();
* deletes the file with recycling mechanics
*/
public async delete() {
await this.remove();
} }
/** /**
@ -125,10 +151,13 @@ export class File {
} }
public async updateWithContents(optionsArg: { public async updateWithContents(optionsArg: {
contents: Buffer | string | plugins.stream.Readable; contents: Buffer | string | plugins.stream.Readable | ReadableStream;
encoding?: 'utf8' | 'binary'; encoding?: 'utf8' | 'binary';
}) { }) {
if (optionsArg.contents instanceof plugins.stream.Readable) { if (
optionsArg.contents instanceof plugins.stream.Readable ||
optionsArg.contents instanceof ReadableStream
) {
await this.parentDirectoryRef.bucketRef.fastPutStream({ await this.parentDirectoryRef.bucketRef.fastPutStream({
path: this.getBasePath(), path: this.getBasePath(),
dataStream: optionsArg.contents, dataStream: optionsArg.contents,

View File

@ -10,8 +10,9 @@ import * as smartpath from '@push.rocks/smartpath';
import * as smartpromise from '@push.rocks/smartpromise'; import * as smartpromise from '@push.rocks/smartpromise';
import * as smartrx from '@push.rocks/smartrx'; import * as smartrx from '@push.rocks/smartrx';
import * as smartstream from '@push.rocks/smartstream'; import * as smartstream from '@push.rocks/smartstream';
import * as smartunique from '@push.rocks/smartunique';
export { smartmime, smartpath, smartpromise, smartrx, smartstream }; export { smartmime, smartpath, smartpromise, smartrx, smartstream, smartunique };
// @tsclass // @tsclass
import * as tsclass from '@tsclass/tsclass'; import * as tsclass from '@tsclass/tsclass';