Compare commits

..

8 Commits

Author SHA1 Message Date
99c3935d0c 3.0.21 2024-07-04 18:39:28 +02:00
05523dc7a1 fix(test): Update endpoint configuration in tests to use environment variable 2024-07-04 18:39:27 +02:00
dc99cfa229 3.0.20 2024-06-19 18:28:53 +02:00
23f8dc55d0 fix(core): update 2024-06-19 18:28:52 +02:00
ffaf0fc97a 3.0.19 2024-06-18 18:44:59 +02:00
2a0425ff54 fix(delete functions): ensure more consistency between methods and trash behaviour 2024-06-18 18:44:58 +02:00
9adcdee0a0 3.0.18 2024-06-17 20:00:58 +02:00
786f8d4365 fix(core): update 2024-06-17 20:00:57 +02:00
12 changed files with 648 additions and 552 deletions

56
changelog.md Normal file
View File

@ -0,0 +1,56 @@
# Changelog
## 2024-07-04 - 3.0.21 - fix(test)
Update endpoint configuration in tests to use environment variable
- Modified `qenv.yml` to include `S3_ENDPOINT` as a required environment variable.
- Updated test files to fetch `S3_ENDPOINT` from environment instead of hardcoding.
## 2024-06-19 - 3.0.20 - Fix and Stability Updates
Improved overall stability and consistency.
## 2024-06-18 - 3.0.18 - Delete Functions Consistency
Ensured more consistency between delete methods and trash behavior.
## 2024-06-17 - 3.0.17 to 3.0.16 - Fix and Update
Routine updates and fixes performed.
## 2024-06-11 - 3.0.15 to 3.0.14 - Fix and Update
Routine updates and fixes performed.
## 2024-06-10 - 3.0.13 - Trash Feature Completion
Finished work on trash feature.
## 2024-06-09 - 3.0.12 - Fix and Update
Routine updates and fixes performed.
## 2024-06-08 - 3.0.11 to 3.0.10 - Fix and Update
Routine updates and fixes performed.
## 2024-06-03 - 3.0.10 - Fix and Update
Routine updates and fixes performed.
## 2024-05-29 - 3.0.9 - Update Description
Updated project description.
## 2024-05-27 - 3.0.8 to 3.0.6 - Pathing and Core Updates
Routine updates and fixes performed.
- S3 paths' pathing differences now correctly handled with a reducePath method.
## 2024-05-21 - 3.0.5 to 3.0.4 - Fix and Update
Routine updates and fixes performed.
## 2024-05-17 - 3.0.3 to 3.0.2 - Fix and Update
Routine updates and fixes performed.
## 2024-05-17 - 3.0.0 - Major Release
Introduced breaking changes in core and significant improvements.
## 2024-05-05 - 2.0.5 - Breaking Changes
Introduced breaking changes in core functionality.
## 2024-04-14 - 2.0.4 - TSConfig Update
Updated TypeScript configuration.
## 2024-01-01 - 2.0.2 - Organization Scheme Update
Switched to the new organizational scheme.

4
package-lock.json generated
View File

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

View File

@ -1,6 +1,6 @@
{
"name": "@push.rocks/smartbucket",
"version": "3.0.17",
"version": "3.0.21",
"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",
"typings": "dist_ts/index.d.ts",
@ -19,7 +19,7 @@
"@push.rocks/tapbundle": "^5.0.23"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.598.0",
"@aws-sdk/client-s3": "^3.600.0",
"@push.rocks/smartmime": "^2.0.2",
"@push.rocks/smartpath": "^5.0.18",
"@push.rocks/smartpromise": "^4.0.3",
@ -27,7 +27,7 @@
"@push.rocks/smartstream": "^3.0.44",
"@push.rocks/smartstring": "^4.0.15",
"@push.rocks/smartunique": "^3.0.9",
"@tsclass/tsclass": "^4.0.59"
"@tsclass/tsclass": "^4.0.60"
},
"private": false,
"files": [

1035
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,4 @@
required:
- S3_KEY
- S3_SECRET
- S3_SECRET
- S3_ENDPOINT

24
test/test.trash.ts Normal file
View File

@ -0,0 +1,24 @@
import { expect, expectAsync, tap } from '@push.rocks/tapbundle';
import { Qenv } from '@push.rocks/qenv';
import * as smartbucket from '../ts/index.js';
const testQenv = new Qenv('./', './.nogit/');
let testSmartbucket: smartbucket.SmartBucket;
let myBucket: smartbucket.Bucket;
let baseDirectory: smartbucket.Directory;
tap.test('should create a valid smartbucket', async () => {
testSmartbucket = new smartbucket.SmartBucket({
accessKey: await testQenv.getEnvVarOnDemand('S3_KEY'),
accessSecret: await testQenv.getEnvVarOnDemand('S3_SECRET'),
endpoint: await testQenv.getEnvVarOnDemand('S3_ENDPOINT'),
});
expect(testSmartbucket).toBeInstanceOf(smartbucket.SmartBucket);
myBucket = await testSmartbucket.getBucketByName('testzone');
expect(myBucket).toBeInstanceOf(smartbucket.Bucket);
expect(myBucket.name).toEqual('testzone');
});
export default tap.start();

View File

@ -13,24 +13,22 @@ tap.test('should create a valid smartbucket', async () => {
testSmartbucket = new smartbucket.SmartBucket({
accessKey: await testQenv.getEnvVarOnDemand('S3_KEY'),
accessSecret: await testQenv.getEnvVarOnDemand('S3_SECRET'),
endpoint: 's3.eu-central-1.wasabisys.com',
endpoint: await testQenv.getEnvVarOnDemand('S3_ENDPOINT'),
});
});
tap.skip.test('should create testbucket', async () => {
// await testSmartbucket.createBucket('testzone');
});
tap.skip.test('should remove testbucket', async () => {
// await testSmartbucket.removeBucket('testzone');
});
tap.test('should get a bucket', async () => {
expect(testSmartbucket).toBeInstanceOf(smartbucket.SmartBucket);
myBucket = await testSmartbucket.getBucketByName('testzone');
expect(myBucket).toBeInstanceOf(smartbucket.Bucket);
expect(myBucket.name).toEqual('testzone');
});
tap.skip.test('should create testbucket', async () => {
// await testSmartbucket.createBucket('testzone2');
});
tap.skip.test('should remove testbucket', async () => {
// await testSmartbucket.removeBucket('testzone2');
});
// Fast operations
tap.test('should store data in bucket fast', async () => {
await myBucket.fastPut({

View File

@ -1,8 +1,8 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
* autocreated commitinfo by @push.rocks/commitinfo
*/
export const commitinfo = {
name: '@push.rocks/smartbucket',
version: '3.0.17',
version: '3.0.21',
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

@ -66,13 +66,13 @@ export class Directory {
* gets a file by name
*/
public async getFile(optionsArg: {
name: string;
path: string;
createWithContents?: string | Buffer;
getFromTrash?: boolean;
}): Promise<File> {
const pathDescriptor = {
directory: this,
path: optionsArg.name,
path: optionsArg.path,
};
const exists = await this.bucketRef.fastExists({
path: await helpers.reducePathDescriptorToPath(pathDescriptor),
@ -88,13 +88,13 @@ export class Directory {
if (!exists && optionsArg.createWithContents) {
await File.create({
directory: this,
name: optionsArg.name,
name: optionsArg.path,
contents: optionsArg.createWithContents,
});
}
return new File({
directoryRefArg: this,
fileName: optionsArg.name,
fileName: optionsArg.path,
});
}
@ -283,19 +283,30 @@ export class Directory {
/**
* removes a file within the directory
* uses file class to make sure effects for metadata etc. are handled correctly
* @param optionsArg
*/
public async fastRemove(optionsArg: { path: string }) {
const path = plugins.path.join(this.getBasePath(), optionsArg.path);
await this.bucketRef.fastRemove({
path,
public async fastRemove(optionsArg: {
path: string
/**
* wether the file should be placed into trash. Default is false.
*/
mode?: 'permanent' | 'trash';
}) {
const file = await this.getFile({
path: optionsArg.path,
});
await file.delete({
mode: optionsArg.mode ? optionsArg.mode : 'permanent',
});
}
/**
* deletes the directory with all its contents
*/
public async delete() {
public async delete(optionsArg: {
mode?: 'permanent' | 'trash';
}) {
const deleteDirectory = async (directoryArg: Directory) => {
const childDirectories = await directoryArg.listDirectories();
if (childDirectories.length === 0) {
@ -307,9 +318,9 @@ export class Directory {
}
const files = await directoryArg.listFiles();
for (const file of files) {
await directoryArg.fastRemove({
path: file.name,
});
await file.delete({
mode: optionsArg.mode ? optionsArg.mode : 'permanent',
})
}
};
await deleteDirectory(this);

View File

@ -10,7 +10,7 @@ export class MetaData {
// lets find the existing metadata file
metaData.metadataFile = await metaData.fileRef.parentDirectoryRef.getFile({
name: metaData.fileRef.name + '.metadata',
path: metaData.fileRef.name + '.metadata',
createWithContents: '{}',
});

View File

@ -14,11 +14,12 @@ export class SmartBucket {
/**
* the constructor of SmartBucket
*/
constructor(configArg: IS3Descriptor) {
constructor(configArg: plugins.tsclass.storage.IS3Descriptor) {
this.config = configArg;
const protocol = configArg.useSsl === false ? 'http' : 'https';
const endpoint = `${protocol}://${configArg.endpoint}`;
const port = configArg.port ? `:${configArg.port}` : '';
const endpoint = `${protocol}://${configArg.endpoint}${port}`;
this.s3Client = new plugins.s3.S3Client({
endpoint,
@ -43,4 +44,4 @@ export class SmartBucket {
public async getBucketByName(bucketName: string) {
return Bucket.getBucketByName(this, bucketName);
}
}
}

View File

@ -21,7 +21,7 @@ export class Trash {
const trashDir = await this.getTrashDir();
const originalPath = await helpers.reducePathDescriptorToPath(pathDescriptor);
const trashKey = await this.getTrashKeyByOriginalBasePath(originalPath);
return trashDir.getFile({ name: trashKey });
return trashDir.getFile({ path: trashKey });
}
public async getTrashKeyByOriginalBasePath (originalPath: string): Promise<string> {