@spinajs/fs-s3 2.0.292 → 2.0.293
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/lib/cjs/index.d.ts +12 -3
- package/lib/cjs/index.d.ts.map +1 -1
- package/lib/cjs/index.js +56 -5
- package/lib/cjs/index.js.map +1 -1
- package/lib/mjs/index.d.ts +12 -3
- package/lib/mjs/index.d.ts.map +1 -1
- package/lib/mjs/index.js +57 -6
- package/lib/mjs/index.js.map +1 -1
- package/lib/tsconfig.cjs.tsbuildinfo +1 -1
- package/lib/tsconfig.mjs.tsbuildinfo +1 -1
- package/package.json +5 -5
package/lib/cjs/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" />
|
|
3
3
|
/// <reference types="node" />
|
|
4
4
|
import { Log } from '@spinajs/log-common';
|
|
5
|
-
import { fs, IStat, IZipResult, FileInfoService } from '@spinajs/fs';
|
|
5
|
+
import { fs, IStat, IZipResult, FileInfoService, IFileInfo } from '@spinajs/fs';
|
|
6
6
|
import { S3Client, S3ClientConfig } from '@aws-sdk/client-s3';
|
|
7
7
|
import { Readable } from 'stream';
|
|
8
8
|
export interface IS3Config {
|
|
@@ -57,7 +57,7 @@ export declare class fsS3 extends fs {
|
|
|
57
57
|
/**
|
|
58
58
|
* Write to file string or buffer
|
|
59
59
|
*/
|
|
60
|
-
write(path: string, data: string |
|
|
60
|
+
write(path: string, data: string | Uint8Array, encoding?: BufferEncoding): Promise<void>;
|
|
61
61
|
/**
|
|
62
62
|
* NOTE: append on s3 downloads file, appends to it, then uploads it again
|
|
63
63
|
* so it can be slow on large files
|
|
@@ -66,7 +66,16 @@ export declare class fsS3 extends fs {
|
|
|
66
66
|
* @param data
|
|
67
67
|
* @param encoding
|
|
68
68
|
*/
|
|
69
|
-
append(path: string, data: string |
|
|
69
|
+
append(path: string, data: string | Uint8Array, encoding?: BufferEncoding): Promise<void>;
|
|
70
|
+
metadata(path: string): Promise<IFileInfo>;
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
* Returns hash of file
|
|
74
|
+
*
|
|
75
|
+
* @param srcPath file to calculate hash
|
|
76
|
+
* @param algo optional hash alghoritm, default is md5
|
|
77
|
+
*/
|
|
78
|
+
hash(path: string, algo?: string): Promise<string>;
|
|
70
79
|
upload(srcPath: string, destPath?: string): Promise<void>;
|
|
71
80
|
/**
|
|
72
81
|
*
|
package/lib/cjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,OAAO,EAAE,GAAG,EAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAc,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/cjs/index.js
CHANGED
|
@@ -139,6 +139,11 @@ let fsS3 = class fsS3 extends fs_1.fs {
|
|
|
139
139
|
* Write to file string or buffer
|
|
140
140
|
*/
|
|
141
141
|
async write(path, data, encoding) {
|
|
142
|
+
const fInfo = await this.FileInfo.getInfo(this.resolvePath(path));
|
|
143
|
+
// calculate from physycal file hash
|
|
144
|
+
// s3 hash gets from metadata
|
|
145
|
+
const shaHash = await super.hash(path, 'sha256');
|
|
146
|
+
delete fInfo.Raw;
|
|
142
147
|
const upload = new lib_storage_1.Upload({
|
|
143
148
|
client: this.S3,
|
|
144
149
|
params: {
|
|
@@ -146,6 +151,11 @@ let fsS3 = class fsS3 extends fs_1.fs {
|
|
|
146
151
|
Key: path,
|
|
147
152
|
Body: data,
|
|
148
153
|
ContentEncoding: encoding,
|
|
154
|
+
// add metadata to file
|
|
155
|
+
Metadata: Object.fromEntries(Object.entries({
|
|
156
|
+
...fInfo,
|
|
157
|
+
hash: shaHash,
|
|
158
|
+
}).map(([key, value]) => [key, String(value)])),
|
|
149
159
|
},
|
|
150
160
|
});
|
|
151
161
|
await upload.done();
|
|
@@ -167,14 +177,47 @@ let fsS3 = class fsS3 extends fs_1.fs {
|
|
|
167
177
|
await this.TempFs.append(fLocal, data, encoding);
|
|
168
178
|
await this.upload(fLocal, path);
|
|
169
179
|
}
|
|
180
|
+
async metadata(path) {
|
|
181
|
+
const command = new client_s3_1.HeadObjectCommand({
|
|
182
|
+
Bucket: this.Options.bucket,
|
|
183
|
+
Key: path,
|
|
184
|
+
});
|
|
185
|
+
const result = await this.S3.send(command);
|
|
186
|
+
// NOTE:
|
|
187
|
+
// allow this cast, becouse s3 metadata is serialized IFileInfo struct
|
|
188
|
+
return result.Metadata;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
*
|
|
192
|
+
* Returns hash of file
|
|
193
|
+
*
|
|
194
|
+
* @param srcPath file to calculate hash
|
|
195
|
+
* @param algo optional hash alghoritm, default is md5
|
|
196
|
+
*/
|
|
197
|
+
async hash(path, algo) {
|
|
198
|
+
if (algo) {
|
|
199
|
+
throw new exceptions_1.InvalidArgument(`Hash alghoritm is not supported in s3 filesystem`);
|
|
200
|
+
}
|
|
201
|
+
const command = new client_s3_1.HeadObjectCommand({
|
|
202
|
+
Bucket: this.Options.bucket,
|
|
203
|
+
Key: path,
|
|
204
|
+
});
|
|
205
|
+
const result = await this.S3.send(command);
|
|
206
|
+
return result.Metadata['hash'];
|
|
207
|
+
}
|
|
170
208
|
async upload(srcPath, destPath) {
|
|
171
209
|
if (!(0, fs_2.existsSync)(srcPath)) {
|
|
172
210
|
throw new exceptions_1.IOFail(`file ${srcPath} does not exists`);
|
|
173
211
|
}
|
|
174
212
|
const dPath = destPath ?? (0, path_1.basename)(srcPath);
|
|
175
213
|
const rStream = (0, fs_2.createReadStream)(srcPath);
|
|
176
|
-
|
|
214
|
+
// calculate from physycal file hash
|
|
215
|
+
// s3 hash gets from metadata
|
|
216
|
+
const hash = await super.hash(srcPath, 'md5');
|
|
217
|
+
const shaHash = await super.hash(srcPath, 'sha256');
|
|
177
218
|
const fInfo = await this.FileInfo.getInfo(this.resolvePath(srcPath));
|
|
219
|
+
// delete raw information from exif
|
|
220
|
+
delete fInfo.Raw;
|
|
178
221
|
const upload = new lib_storage_1.Upload({
|
|
179
222
|
client: this.S3,
|
|
180
223
|
params: {
|
|
@@ -184,7 +227,10 @@ let fsS3 = class fsS3 extends fs_1.fs {
|
|
|
184
227
|
// content md5 header is always base64 encoded
|
|
185
228
|
ContentMD5: Buffer.from(hash, 'hex').toString('base64'),
|
|
186
229
|
// convert all metadata values to string, and back to object with key-value pair of strings
|
|
187
|
-
Metadata: Object.fromEntries(Object.entries(
|
|
230
|
+
Metadata: Object.fromEntries(Object.entries({
|
|
231
|
+
...fInfo,
|
|
232
|
+
hash: shaHash,
|
|
233
|
+
}).map(([key, value]) => [key, String(value)])),
|
|
188
234
|
},
|
|
189
235
|
});
|
|
190
236
|
await upload.done();
|
|
@@ -235,7 +281,8 @@ let fsS3 = class fsS3 extends fs_1.fs {
|
|
|
235
281
|
return true;
|
|
236
282
|
}
|
|
237
283
|
async dirExists() {
|
|
238
|
-
|
|
284
|
+
// always true, s3 does not have concept od directories
|
|
285
|
+
return Promise.resolve(true);
|
|
239
286
|
}
|
|
240
287
|
/**
|
|
241
288
|
* Copy file to another location
|
|
@@ -291,10 +338,14 @@ let fsS3 = class fsS3 extends fs_1.fs {
|
|
|
291
338
|
*
|
|
292
339
|
*/
|
|
293
340
|
async mkdir() {
|
|
294
|
-
|
|
341
|
+
// some users makes dir if not exists in fs
|
|
342
|
+
// as s3 does not make use of directories always return true
|
|
343
|
+
return Promise.resolve();
|
|
295
344
|
}
|
|
296
345
|
async isDir(_path) {
|
|
297
|
-
|
|
346
|
+
// some users makes dir if not exists in fs
|
|
347
|
+
// as s3 does not make use of directories always return false for simplicity
|
|
348
|
+
return Promise.resolve(false);
|
|
298
349
|
}
|
|
299
350
|
/**
|
|
300
351
|
* Returns file statistics, not all fields may be accesible
|
package/lib/cjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,oCAAuE;AACvE,oDAAkD;AAClD,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
/// <reference types="node" resolution-mode="require"/>
|
|
3
3
|
/// <reference types="node" resolution-mode="require"/>
|
|
4
4
|
import { Log } from '@spinajs/log-common';
|
|
5
|
-
import { fs, IStat, IZipResult, FileInfoService } from '@spinajs/fs';
|
|
5
|
+
import { fs, IStat, IZipResult, FileInfoService, IFileInfo } from '@spinajs/fs';
|
|
6
6
|
import { S3Client, S3ClientConfig } from '@aws-sdk/client-s3';
|
|
7
7
|
import { Readable } from 'stream';
|
|
8
8
|
export interface IS3Config {
|
|
@@ -57,7 +57,7 @@ export declare class fsS3 extends fs {
|
|
|
57
57
|
/**
|
|
58
58
|
* Write to file string or buffer
|
|
59
59
|
*/
|
|
60
|
-
write(path: string, data: string |
|
|
60
|
+
write(path: string, data: string | Uint8Array, encoding?: BufferEncoding): Promise<void>;
|
|
61
61
|
/**
|
|
62
62
|
* NOTE: append on s3 downloads file, appends to it, then uploads it again
|
|
63
63
|
* so it can be slow on large files
|
|
@@ -66,7 +66,16 @@ export declare class fsS3 extends fs {
|
|
|
66
66
|
* @param data
|
|
67
67
|
* @param encoding
|
|
68
68
|
*/
|
|
69
|
-
append(path: string, data: string |
|
|
69
|
+
append(path: string, data: string | Uint8Array, encoding?: BufferEncoding): Promise<void>;
|
|
70
|
+
metadata(path: string): Promise<IFileInfo>;
|
|
71
|
+
/**
|
|
72
|
+
*
|
|
73
|
+
* Returns hash of file
|
|
74
|
+
*
|
|
75
|
+
* @param srcPath file to calculate hash
|
|
76
|
+
* @param algo optional hash alghoritm, default is md5
|
|
77
|
+
*/
|
|
78
|
+
hash(path: string, algo?: string): Promise<string>;
|
|
70
79
|
upload(srcPath: string, destPath?: string): Promise<void>;
|
|
71
80
|
/**
|
|
72
81
|
*
|
package/lib/mjs/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;AACA,OAAO,EAAE,GAAG,EAAU,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,UAAU,EAAc,eAAe,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/mjs/index.js
CHANGED
|
@@ -14,7 +14,7 @@ import { S3Client, HeadObjectCommand, CopyObjectCommand, DeleteObjectCommand, Li
|
|
|
14
14
|
import { Upload } from '@aws-sdk/lib-storage';
|
|
15
15
|
import { Config } from '@spinajs/configuration';
|
|
16
16
|
import path, { basename } from 'path';
|
|
17
|
-
import { IOFail, MethodNotImplemented } from '@spinajs/exceptions';
|
|
17
|
+
import { InvalidArgument, IOFail, MethodNotImplemented } from '@spinajs/exceptions';
|
|
18
18
|
import { createReadStream, existsSync } from 'fs';
|
|
19
19
|
import { DateTime } from 'luxon';
|
|
20
20
|
import { Readable } from 'stream';
|
|
@@ -110,6 +110,11 @@ let fsS3 = class fsS3 extends fs {
|
|
|
110
110
|
* Write to file string or buffer
|
|
111
111
|
*/
|
|
112
112
|
async write(path, data, encoding) {
|
|
113
|
+
const fInfo = await this.FileInfo.getInfo(this.resolvePath(path));
|
|
114
|
+
// calculate from physycal file hash
|
|
115
|
+
// s3 hash gets from metadata
|
|
116
|
+
const shaHash = await super.hash(path, 'sha256');
|
|
117
|
+
delete fInfo.Raw;
|
|
113
118
|
const upload = new Upload({
|
|
114
119
|
client: this.S3,
|
|
115
120
|
params: {
|
|
@@ -117,6 +122,11 @@ let fsS3 = class fsS3 extends fs {
|
|
|
117
122
|
Key: path,
|
|
118
123
|
Body: data,
|
|
119
124
|
ContentEncoding: encoding,
|
|
125
|
+
// add metadata to file
|
|
126
|
+
Metadata: Object.fromEntries(Object.entries({
|
|
127
|
+
...fInfo,
|
|
128
|
+
hash: shaHash,
|
|
129
|
+
}).map(([key, value]) => [key, String(value)])),
|
|
120
130
|
},
|
|
121
131
|
});
|
|
122
132
|
await upload.done();
|
|
@@ -138,14 +148,47 @@ let fsS3 = class fsS3 extends fs {
|
|
|
138
148
|
await this.TempFs.append(fLocal, data, encoding);
|
|
139
149
|
await this.upload(fLocal, path);
|
|
140
150
|
}
|
|
151
|
+
async metadata(path) {
|
|
152
|
+
const command = new HeadObjectCommand({
|
|
153
|
+
Bucket: this.Options.bucket,
|
|
154
|
+
Key: path,
|
|
155
|
+
});
|
|
156
|
+
const result = await this.S3.send(command);
|
|
157
|
+
// NOTE:
|
|
158
|
+
// allow this cast, becouse s3 metadata is serialized IFileInfo struct
|
|
159
|
+
return result.Metadata;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
*
|
|
163
|
+
* Returns hash of file
|
|
164
|
+
*
|
|
165
|
+
* @param srcPath file to calculate hash
|
|
166
|
+
* @param algo optional hash alghoritm, default is md5
|
|
167
|
+
*/
|
|
168
|
+
async hash(path, algo) {
|
|
169
|
+
if (algo) {
|
|
170
|
+
throw new InvalidArgument(`Hash alghoritm is not supported in s3 filesystem`);
|
|
171
|
+
}
|
|
172
|
+
const command = new HeadObjectCommand({
|
|
173
|
+
Bucket: this.Options.bucket,
|
|
174
|
+
Key: path,
|
|
175
|
+
});
|
|
176
|
+
const result = await this.S3.send(command);
|
|
177
|
+
return result.Metadata['hash'];
|
|
178
|
+
}
|
|
141
179
|
async upload(srcPath, destPath) {
|
|
142
180
|
if (!existsSync(srcPath)) {
|
|
143
181
|
throw new IOFail(`file ${srcPath} does not exists`);
|
|
144
182
|
}
|
|
145
183
|
const dPath = destPath ?? basename(srcPath);
|
|
146
184
|
const rStream = createReadStream(srcPath);
|
|
147
|
-
|
|
185
|
+
// calculate from physycal file hash
|
|
186
|
+
// s3 hash gets from metadata
|
|
187
|
+
const hash = await super.hash(srcPath, 'md5');
|
|
188
|
+
const shaHash = await super.hash(srcPath, 'sha256');
|
|
148
189
|
const fInfo = await this.FileInfo.getInfo(this.resolvePath(srcPath));
|
|
190
|
+
// delete raw information from exif
|
|
191
|
+
delete fInfo.Raw;
|
|
149
192
|
const upload = new Upload({
|
|
150
193
|
client: this.S3,
|
|
151
194
|
params: {
|
|
@@ -155,7 +198,10 @@ let fsS3 = class fsS3 extends fs {
|
|
|
155
198
|
// content md5 header is always base64 encoded
|
|
156
199
|
ContentMD5: Buffer.from(hash, 'hex').toString('base64'),
|
|
157
200
|
// convert all metadata values to string, and back to object with key-value pair of strings
|
|
158
|
-
Metadata: Object.fromEntries(Object.entries(
|
|
201
|
+
Metadata: Object.fromEntries(Object.entries({
|
|
202
|
+
...fInfo,
|
|
203
|
+
hash: shaHash,
|
|
204
|
+
}).map(([key, value]) => [key, String(value)])),
|
|
159
205
|
},
|
|
160
206
|
});
|
|
161
207
|
await upload.done();
|
|
@@ -206,7 +252,8 @@ let fsS3 = class fsS3 extends fs {
|
|
|
206
252
|
return true;
|
|
207
253
|
}
|
|
208
254
|
async dirExists() {
|
|
209
|
-
|
|
255
|
+
// always true, s3 does not have concept od directories
|
|
256
|
+
return Promise.resolve(true);
|
|
210
257
|
}
|
|
211
258
|
/**
|
|
212
259
|
* Copy file to another location
|
|
@@ -262,10 +309,14 @@ let fsS3 = class fsS3 extends fs {
|
|
|
262
309
|
*
|
|
263
310
|
*/
|
|
264
311
|
async mkdir() {
|
|
265
|
-
|
|
312
|
+
// some users makes dir if not exists in fs
|
|
313
|
+
// as s3 does not make use of directories always return true
|
|
314
|
+
return Promise.resolve();
|
|
266
315
|
}
|
|
267
316
|
async isDir(_path) {
|
|
268
|
-
|
|
317
|
+
// some users makes dir if not exists in fs
|
|
318
|
+
// as s3 does not make use of directories always return false for simplicity
|
|
319
|
+
return Promise.resolve(false);
|
|
269
320
|
}
|
|
270
321
|
/**
|
|
271
322
|
* Returns file statistics, not all fields may be accesible
|
package/lib/mjs/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,EAAE,EAAqB,UAAU,EAAE,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|