@devbro/neko-storage 0.1.3 → 0.1.5

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.
Files changed (42) hide show
  1. package/README.md +104 -7
  2. package/dist/Storage.d.mts +14 -13
  3. package/dist/Storage.mjs +30 -8
  4. package/dist/Storage.mjs.map +1 -1
  5. package/dist/StorageProviderFactory.d.mts +15 -0
  6. package/dist/StorageProviderFactory.mjs +19 -0
  7. package/dist/StorageProviderFactory.mjs.map +1 -0
  8. package/dist/StorageProviderInterface.d.mts +18 -0
  9. package/dist/StorageProviderInterface.mjs +1 -0
  10. package/dist/StorageProviderInterface.mjs.map +1 -0
  11. package/dist/index.d.mts +11 -4
  12. package/dist/index.js +609 -221
  13. package/dist/index.js.map +1 -1
  14. package/dist/index.mjs +8 -3
  15. package/dist/index.mjs.map +1 -1
  16. package/dist/{AWSS3Storage.d.mts → providers/AWSS3StorageProvider.d.mts} +7 -7
  17. package/dist/providers/AWSS3StorageProvider.mjs +108 -0
  18. package/dist/providers/AWSS3StorageProvider.mjs.map +1 -0
  19. package/dist/providers/AzureBlobStorageProvider.d.mts +23 -0
  20. package/dist/providers/AzureBlobStorageProvider.mjs +116 -0
  21. package/dist/providers/AzureBlobStorageProvider.mjs.map +1 -0
  22. package/dist/providers/FTPStorageProvider.d.mts +22 -0
  23. package/dist/providers/FTPStorageProvider.mjs +124 -0
  24. package/dist/providers/FTPStorageProvider.mjs.map +1 -0
  25. package/dist/providers/GCPStorageProvider.d.mts +22 -0
  26. package/dist/providers/GCPStorageProvider.mjs +82 -0
  27. package/dist/providers/GCPStorageProvider.mjs.map +1 -0
  28. package/dist/{LocalStorage.d.mts → providers/LocalStorageProvider.d.mts} +7 -6
  29. package/dist/providers/LocalStorageProvider.mjs +84 -0
  30. package/dist/providers/LocalStorageProvider.mjs.map +1 -0
  31. package/dist/providers/SFTPStorageProvider.d.mts +22 -0
  32. package/dist/providers/SFTPStorageProvider.mjs +124 -0
  33. package/dist/providers/SFTPStorageProvider.mjs.map +1 -0
  34. package/dist/types.d.mts +32 -6
  35. package/package.json +10 -6
  36. package/dist/AWSS3Storage.mjs +0 -154
  37. package/dist/AWSS3Storage.mjs.map +0 -1
  38. package/dist/LocalStorage.mjs +0 -129
  39. package/dist/LocalStorage.mjs.map +0 -1
  40. package/dist/StorageFactory.d.mts +0 -13
  41. package/dist/StorageFactory.mjs +0 -24
  42. package/dist/StorageFactory.mjs.map +0 -1
package/README.md CHANGED
@@ -39,22 +39,119 @@ let is_file_deleted = await storage.delete('path/to/file/filename.ext');
39
39
 
40
40
  ## available drivers
41
41
 
42
- local
42
+ ### Local Storage
43
+
44
+ Store files on the local file system.
43
45
 
44
46
  ```ts
45
- import { Storage, StorageFactory } from '@devbro/neko-storage';
47
+ import { LocalStorageProvider, Storage } from '@devbro/neko-storage';
46
48
 
47
49
  const basePath = path.resolve(os.tmpdir(), `test-storage-${randomUUID()}`);
48
- const storage: Storage = StorageFactory.create({ engine: 'local', basePath });
50
+ const provider = new LocalStorageProvider({ engine: 'local', basePath });
51
+ const storage = new Storage(provider);
49
52
  ```
50
53
 
51
- AWS S3
54
+ ### AWS S3
55
+
56
+ Store files in Amazon S3 buckets.
52
57
 
53
58
  ```ts
54
- import { Storage, StorageFactory } from '@devbro/neko-storage';
59
+ import { AWSS3StorageProvider, Storage } from '@devbro/neko-storage';
60
+
61
+ const provider = new AWSS3StorageProvider({
62
+ engine: 's3',
63
+ bucket: 'your-bucket-name',
64
+ s3Config: {
65
+ region: 'us-east-1',
66
+ credentials: {
67
+ accessKeyId: 'YOUR_ACCESS_KEY',
68
+ secretAccessKey: 'YOUR_SECRET_KEY',
69
+ },
70
+ },
71
+ });
72
+ const storage = new Storage(provider);
73
+ ```
74
+
75
+ ### Google Cloud Storage (GCP)
76
+
77
+ Store files in Google Cloud Storage buckets.
78
+
79
+ ```ts
80
+ import { GCPStorageProvider, Storage } from '@devbro/neko-storage';
81
+
82
+ const provider = new GCPStorageProvider({
83
+ engine: 'gcp',
84
+ bucket: 'your-bucket-name',
85
+ gcpConfig: {
86
+ projectId: 'your-project-id',
87
+ keyFilename: '/path/to/service-account-key.json',
88
+ // Or use credentials object directly
89
+ // credentials: {...}
90
+ },
91
+ });
92
+ const storage = new Storage(provider);
93
+ ```
94
+
95
+ ### Azure Blob Storage
96
+
97
+ Store files in Azure Blob Storage containers.
55
98
 
56
- const s3Config : AWSS3Config = ???;
57
- const storage: Storage = StorageFactory.create({ engine: 's3', { s3Config } });
99
+ ```ts
100
+ import { AzureBlobStorageProvider, Storage } from '@devbro/neko-storage';
101
+
102
+ const provider = new AzureBlobStorageProvider({
103
+ engine: 'azure',
104
+ azureConfig: {
105
+ accountName: 'your-storage-account',
106
+ accountKey: 'YOUR_ACCOUNT_KEY', // Or use sasToken instead
107
+ containerName: 'your-container-name',
108
+ },
109
+ });
110
+ const storage = new Storage(provider);
111
+ ```
112
+
113
+ ### FTP
114
+
115
+ Store files on FTP servers.
116
+
117
+ ```ts
118
+ import { FTPStorageProvider, Storage } from '@devbro/neko-storage';
119
+
120
+ const provider = new FTPStorageProvider({
121
+ engine: 'ftp',
122
+ basePath: '/remote/path',
123
+ ftpConfig: {
124
+ host: 'ftp.example.com',
125
+ port: 21,
126
+ user: 'username',
127
+ password: 'password',
128
+ secure: false, // Set to true for FTPS
129
+ },
130
+ });
131
+ const storage = new Storage(provider);
132
+ ```
133
+
134
+ ### SFTP
135
+
136
+ Store files on SFTP servers via SSH.
137
+
138
+ ```ts
139
+ import { SFTPStorageProvider, Storage } from '@devbro/neko-storage';
140
+
141
+ const provider = new SFTPStorageProvider({
142
+ engine: 'sftp',
143
+ basePath: '/remote/path',
144
+ sftpConfig: {
145
+ host: 'sftp.example.com',
146
+ port: 22,
147
+ username: 'username',
148
+ password: 'password',
149
+ // Or use private key authentication
150
+ // privateKey: fs.readFileSync('/path/to/private-key'),
151
+ // passphrase: 'key-passphrase',
152
+ },
153
+ });
154
+ const storage = new Storage(provider);
58
155
  ```
59
156
 
60
157
  More driver available upon request or through PR.
@@ -1,20 +1,21 @@
1
1
  import { ReadStream } from 'fs';
2
2
  import { Stream } from 'stream';
3
- import { StorageConfig, Metadata } from './types.mjs';
3
+ import { Metadata } from './types.mjs';
4
+ import { StorageProviderInterface } from './StorageProviderInterface.mjs';
4
5
  import '@aws-sdk/client-s3';
6
+ import '@google-cloud/storage';
5
7
 
6
- declare abstract class Storage {
7
- protected config: StorageConfig;
8
- constructor(config: StorageConfig);
9
- static canHandle(config: StorageConfig): boolean;
10
- abstract exists(path: string): Promise<boolean>;
11
- abstract put(path: string, content: string | object | Stream | Buffer): Promise<boolean>;
12
- abstract getJson(path: string): Promise<object>;
13
- abstract getString(path: string): Promise<string>;
14
- abstract getBuffer(path: string): Promise<Buffer>;
15
- abstract getStream(path: string): Promise<ReadStream>;
16
- abstract delete(path: string): Promise<boolean>;
17
- abstract metadata(path: string): Promise<Metadata>;
8
+ declare class Storage {
9
+ protected provider: StorageProviderInterface;
10
+ constructor(provider: StorageProviderInterface);
11
+ exists(path: string): Promise<boolean>;
12
+ put(path: string, content: string | object | Stream | Buffer): Promise<boolean>;
13
+ getJson(path: string): Promise<object>;
14
+ getString(path: string): Promise<string>;
15
+ getBuffer(path: string): Promise<Buffer>;
16
+ getStream(path: string): Promise<ReadStream>;
17
+ delete(path: string): Promise<boolean>;
18
+ metadata(path: string): Promise<Metadata>;
18
19
  }
19
20
 
20
21
  export { Storage };
package/dist/Storage.mjs CHANGED
@@ -1,15 +1,37 @@
1
1
  var __defProp = Object.defineProperty;
2
2
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
- const _Storage = class _Storage {
4
- constructor(config) {
5
- this.config = config;
3
+ class Storage {
4
+ constructor(provider) {
5
+ this.provider = provider;
6
6
  }
7
- static canHandle(config) {
8
- throw new Error("Method not implemented.");
7
+ static {
8
+ __name(this, "Storage");
9
9
  }
10
- };
11
- __name(_Storage, "Storage");
12
- let Storage = _Storage;
10
+ exists(path) {
11
+ return this.provider.exists(path);
12
+ }
13
+ put(path, content) {
14
+ return this.provider.put(path, content);
15
+ }
16
+ getJson(path) {
17
+ return this.provider.getJson(path);
18
+ }
19
+ getString(path) {
20
+ return this.provider.getString(path);
21
+ }
22
+ getBuffer(path) {
23
+ return this.provider.getBuffer(path);
24
+ }
25
+ getStream(path) {
26
+ return this.provider.getStream(path);
27
+ }
28
+ delete(path) {
29
+ return this.provider.delete(path);
30
+ }
31
+ metadata(path) {
32
+ return this.provider.metadata(path);
33
+ }
34
+ }
13
35
  export {
14
36
  Storage
15
37
  };
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/Storage.mts"],"sourcesContent":["import { ReadStream } from 'fs';\nimport { Stream } from 'stream';\nimport { Metadata } from './types.mjs';\nimport { StorageConfig } from './types.mjs';\n\nexport abstract class Storage {\n constructor(protected config: StorageConfig) {}\n\n static canHandle(config: StorageConfig): boolean {\n throw new Error('Method not implemented.');\n }\n\n abstract exists(path: string): Promise<boolean>;\n abstract put(path: string, content: string | object | Stream | Buffer): Promise<boolean>;\n abstract getJson(path: string): Promise<object>;\n abstract getString(path: string): Promise<string>;\n abstract getBuffer(path: string): Promise<Buffer>;\n abstract getStream(path: string): Promise<ReadStream>;\n abstract delete(path: string): Promise<boolean>;\n abstract metadata(path: string): Promise<Metadata>;\n}\n"],"mappings":";;AAKO,MAAe,WAAf,MAAe,SAAQ;AAAA,EAC5B,YAAsB,QAAuB;AAAvB;AAAA,EAAwB;AAAA,EAE9C,OAAO,UAAU,QAAgC;AAC/C,UAAM,IAAI,MAAM,yBAAyB;AAAA,EAC3C;AAUF;AAf8B;AAAvB,IAAe,UAAf;","names":[]}
1
+ {"version":3,"sources":["../src/Storage.mts"],"sourcesContent":["import { ReadStream } from 'fs';\nimport { Stream } from 'stream';\nimport { Metadata } from './types.mjs';\nimport { StorageConfig } from './types.mjs';\nimport { StorageProviderInterface } from './StorageProviderInterface.mjs';\n\nexport class Storage {\n constructor(protected provider: StorageProviderInterface) {}\n\n exists(path: string): Promise<boolean> {\n return this.provider.exists(path);\n }\n\n put(path: string, content: string | object | Stream | Buffer): Promise<boolean> {\n return this.provider.put(path, content);\n }\n\n getJson(path: string): Promise<object> {\n return this.provider.getJson(path);\n }\n\n getString(path: string): Promise<string> {\n return this.provider.getString(path);\n }\n\n getBuffer(path: string): Promise<Buffer> {\n return this.provider.getBuffer(path);\n }\n\n getStream(path: string): Promise<ReadStream> {\n return this.provider.getStream(path);\n }\n\n delete(path: string): Promise<boolean> {\n return this.provider.delete(path);\n }\n\n metadata(path: string): Promise<Metadata> {\n return this.provider.metadata(path);\n }\n}\n"],"mappings":";;AAMO,MAAM,QAAQ;AAAA,EACnB,YAAsB,UAAoC;AAApC;AAAA,EAAqC;AAAA,EAP7D,OAMqB;AAAA;AAAA;AAAA,EAGnB,OAAO,MAAgC;AACrC,WAAO,KAAK,SAAS,OAAO,IAAI;AAAA,EAClC;AAAA,EAEA,IAAI,MAAc,SAA8D;AAC9E,WAAO,KAAK,SAAS,IAAI,MAAM,OAAO;AAAA,EACxC;AAAA,EAEA,QAAQ,MAA+B;AACrC,WAAO,KAAK,SAAS,QAAQ,IAAI;AAAA,EACnC;AAAA,EAEA,UAAU,MAA+B;AACvC,WAAO,KAAK,SAAS,UAAU,IAAI;AAAA,EACrC;AAAA,EAEA,UAAU,MAA+B;AACvC,WAAO,KAAK,SAAS,UAAU,IAAI;AAAA,EACrC;AAAA,EAEA,UAAU,MAAmC;AAC3C,WAAO,KAAK,SAAS,UAAU,IAAI;AAAA,EACrC;AAAA,EAEA,OAAO,MAAgC;AACrC,WAAO,KAAK,SAAS,OAAO,IAAI;AAAA,EAClC;AAAA,EAEA,SAAS,MAAiC;AACxC,WAAO,KAAK,SAAS,SAAS,IAAI;AAAA,EACpC;AACF;","names":[]}
@@ -0,0 +1,15 @@
1
+ import { FlexibleFactory } from '@devbro/neko-helper';
2
+ import { StorageProviderInterface } from './StorageProviderInterface.mjs';
3
+ import 'fs';
4
+ import 'stream';
5
+ import './types.mjs';
6
+ import '@aws-sdk/client-s3';
7
+ import '@google-cloud/storage';
8
+
9
+ declare class StorageProviderFactory {
10
+ static instance: FlexibleFactory<StorageProviderInterface>;
11
+ static register(key: string, factory: (...args: any[]) => StorageProviderInterface): void;
12
+ static create<T>(key: string, ...args: any[]): StorageProviderInterface;
13
+ }
14
+
15
+ export { StorageProviderFactory };
@@ -0,0 +1,19 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+ import { FlexibleFactory } from "@devbro/neko-helper";
4
+ class StorageProviderFactory {
5
+ static {
6
+ __name(this, "StorageProviderFactory");
7
+ }
8
+ static instance = new FlexibleFactory();
9
+ static register(key, factory) {
10
+ StorageProviderFactory.instance.register(key, factory);
11
+ }
12
+ static create(key, ...args) {
13
+ return StorageProviderFactory.instance.create(key, ...args);
14
+ }
15
+ }
16
+ export {
17
+ StorageProviderFactory
18
+ };
19
+ //# sourceMappingURL=StorageProviderFactory.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/StorageProviderFactory.mts"],"sourcesContent":["import { Storage } from './Storage.mjs';\nimport { FlexibleFactory } from '@devbro/neko-helper';\nimport { StorageProviderInterface } from './StorageProviderInterface.mjs';\n\nexport class StorageProviderFactory {\n static instance: FlexibleFactory<StorageProviderInterface> =\n new FlexibleFactory<StorageProviderInterface>();\n\n static register(key: string, factory: (...args: any[]) => StorageProviderInterface): void {\n StorageProviderFactory.instance.register(key, factory);\n }\n\n static create<T>(key: string, ...args: any[]): StorageProviderInterface {\n return StorageProviderFactory.instance.create(key, ...args);\n }\n}\n"],"mappings":";;AACA,SAAS,uBAAuB;AAGzB,MAAM,uBAAuB;AAAA,EAJpC,OAIoC;AAAA;AAAA;AAAA,EAClC,OAAO,WACL,IAAI,gBAA0C;AAAA,EAEhD,OAAO,SAAS,KAAa,SAA6D;AACxF,2BAAuB,SAAS,SAAS,KAAK,OAAO;AAAA,EACvD;AAAA,EAEA,OAAO,OAAU,QAAgB,MAAuC;AACtE,WAAO,uBAAuB,SAAS,OAAO,KAAK,GAAG,IAAI;AAAA,EAC5D;AACF;","names":[]}
@@ -0,0 +1,18 @@
1
+ import { ReadStream } from 'fs';
2
+ import { Stream } from 'stream';
3
+ import { Metadata } from './types.mjs';
4
+ import '@aws-sdk/client-s3';
5
+ import '@google-cloud/storage';
6
+
7
+ interface StorageProviderInterface {
8
+ exists(path: string): Promise<boolean>;
9
+ put(path: string, content: string | object | Stream | Buffer): Promise<boolean>;
10
+ getJson(path: string): Promise<object>;
11
+ getString(path: string): Promise<string>;
12
+ getBuffer(path: string): Promise<Buffer>;
13
+ getStream(path: string): Promise<ReadStream>;
14
+ delete(path: string): Promise<boolean>;
15
+ metadata(path: string): Promise<Metadata>;
16
+ }
17
+
18
+ export type { StorageProviderInterface };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=StorageProviderInterface.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/index.d.mts CHANGED
@@ -1,8 +1,15 @@
1
- export { Metadata, StorageConfig } from './types.mjs';
1
+ export { AzureStorageConfig, FTPConfig, GCPStorageConfig, LocalStorageConfig, Metadata, S3ClientConfig, SFTPConfig, StorageConfig } from './types.mjs';
2
2
  export { Storage } from './Storage.mjs';
3
- export { AWSS3Storage } from './AWSS3Storage.mjs';
4
- export { LocalStorage } from './LocalStorage.mjs';
5
- export { StorageFactory } from './StorageFactory.mjs';
3
+ export { AWSS3StorageProvider } from './providers/AWSS3StorageProvider.mjs';
4
+ export { LocalStorageProvider } from './providers/LocalStorageProvider.mjs';
5
+ export { GCPStorageProvider } from './providers/GCPStorageProvider.mjs';
6
+ export { AzureBlobStorageProvider } from './providers/AzureBlobStorageProvider.mjs';
7
+ export { FTPStorageProvider } from './providers/FTPStorageProvider.mjs';
8
+ export { SFTPStorageProvider } from './providers/SFTPStorageProvider.mjs';
9
+ export { StorageProviderFactory } from './StorageProviderFactory.mjs';
10
+ export { StorageProviderInterface } from './StorageProviderInterface.mjs';
6
11
  import '@aws-sdk/client-s3';
12
+ import '@google-cloud/storage';
7
13
  import 'fs';
8
14
  import 'stream';
15
+ import '@devbro/neko-helper';