rac-delta 1.0.8 → 1.0.9
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/dist/core/adapters/storage-adapter.d.ts +2 -2
- package/dist/core/adapters/storage-adapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/azure-blob-storage-adapter.d.ts +1 -1
- package/dist/infrastructure/adapters/azure-blob-storage-adapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/azure-blob-storage-adapter.js +2 -1
- package/dist/infrastructure/adapters/gcs-storage-adapter.d.ts +1 -1
- package/dist/infrastructure/adapters/gcs-storage-adapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/gcs-storage-adapter.js +3 -1
- package/dist/infrastructure/adapters/http-storage-adapter.d.ts +1 -1
- package/dist/infrastructure/adapters/http-storage-adapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/local-storage-adapter.d.ts +1 -1
- package/dist/infrastructure/adapters/local-storage-adapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/local-storage-adapter.js +4 -2
- package/dist/infrastructure/adapters/s3-storage-adapter.d.ts +1 -1
- package/dist/infrastructure/adapters/s3-storage-adapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/ssh-storage-adapter.d.ts +1 -1
- package/dist/infrastructure/adapters/ssh-storage-adapter.d.ts.map +1 -1
- package/dist/infrastructure/adapters/ssh-storage-adapter.js +2 -1
- package/dist/infrastructure/services/hash-wasm-hasher-service.d.ts.map +1 -1
- package/dist/infrastructure/services/hash-wasm-hasher-service.js +21 -16
- package/package.json +1 -1
|
@@ -23,11 +23,11 @@ export declare abstract class HashStorageAdapter extends StorageAdapter {
|
|
|
23
23
|
* Upload a chunk from a readable stream
|
|
24
24
|
*
|
|
25
25
|
* @param hash the hash of the chunk
|
|
26
|
-
* @param data the `Readable` stream
|
|
26
|
+
* @param data the `Readable` stream or Buffer to upload
|
|
27
27
|
* @param opts.overwrite whether to overwrite chunk if exists or not (depends on the implementation)
|
|
28
28
|
* @param opts.size ContentLength of the chunk, sometimes needed for some adapters
|
|
29
29
|
*/
|
|
30
|
-
abstract putChunk(hash: string, data: Readable, opts?: Nullish<{
|
|
30
|
+
abstract putChunk(hash: string, data: Readable | Buffer, opts?: Nullish<{
|
|
31
31
|
overwrite?: Nullish<boolean>;
|
|
32
32
|
size?: Nullish<number>;
|
|
33
33
|
}>): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC5C;AAED,8BAAsB,cAAc;IAClC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IAEvC,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAClC;AAED,8BAAsB,kBAAmB,SAAQ,cAAc;IAC7D,QAAQ,CAAC,IAAI,EAAG,MAAM,CAAU;IAEhC;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAEzD;;;;;;;OAOG;IACH,QAAQ,CAAC,QAAQ,CACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/core/adapters/storage-adapter.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,7 +11,7 @@ export declare class AzureBlobStorageAdapter extends HashStorageAdapter {
|
|
|
11
11
|
private getChunkPath;
|
|
12
12
|
private getIndexPath;
|
|
13
13
|
getChunk(hash: string): Promise<Readable | null>;
|
|
14
|
-
putChunk(hash: string, data: Readable, opts?: {
|
|
14
|
+
putChunk(hash: string, data: Readable | Buffer, opts?: {
|
|
15
15
|
overwrite?: boolean;
|
|
16
16
|
}): Promise<void>;
|
|
17
17
|
chunkExists(hash: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"azure-blob-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/azure-blob-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AASlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,qBAAa,uBAAwB,SAAQ,kBAAkB;IAIjD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,MAAM,EAAE,sBAAsB;IA+BrD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAId,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAmBhD,QAAQ,
|
|
1
|
+
{"version":3,"file":"azure-blob-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/azure-blob-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AASlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,qBAAa,uBAAwB,SAAQ,kBAAkB;IAIjD,OAAO,CAAC,QAAQ,CAAC,MAAM;IAHnC,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAEH,MAAM,EAAE,sBAAsB;IA+BrD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,YAAY;IAId,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAmBhD,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GAAG,MAAM,EACvB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAC7B,OAAO,CAAC,IAAI,CAAC;IAyBV,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAK3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAc/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAyBpD,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAgCzC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAQpD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AzureBlobStorageAdapter = void 0;
|
|
4
|
+
const stream_1 = require("stream");
|
|
4
5
|
const storage_blob_1 = require("@azure/storage-blob");
|
|
5
6
|
const identity_1 = require("@azure/identity");
|
|
6
7
|
const adapters_1 = require("../../core/adapters");
|
|
@@ -64,7 +65,7 @@ class AzureBlobStorageAdapter extends adapters_1.HashStorageAdapter {
|
|
|
64
65
|
return;
|
|
65
66
|
}
|
|
66
67
|
}
|
|
67
|
-
await blob.uploadStream(data, 4 * 1024 * 1024, 5, {
|
|
68
|
+
await blob.uploadStream(Buffer.isBuffer(data) ? stream_1.Readable.from(data) : data, 4 * 1024 * 1024, 5, {
|
|
68
69
|
blobHTTPHeaders: { blobContentType: 'application/octet-stream' },
|
|
69
70
|
});
|
|
70
71
|
}
|
|
@@ -9,7 +9,7 @@ export declare class GCSStorageAdapter extends HashStorageAdapter {
|
|
|
9
9
|
dispose(): Promise<void>;
|
|
10
10
|
private getPath;
|
|
11
11
|
getChunk(hash: string): Promise<Readable | null>;
|
|
12
|
-
putChunk(hash: string, data: Readable): Promise<void>;
|
|
12
|
+
putChunk(hash: string, data: Readable | Buffer): Promise<void>;
|
|
13
13
|
chunkExists(hash: string): Promise<boolean>;
|
|
14
14
|
deleteChunk(hash: string): Promise<void>;
|
|
15
15
|
listChunks(): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcs-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/gcs-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,qBAAa,iBAAkB,SAAQ,kBAAkB;IAG3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,OAAO,CAAU;gBAEI,MAAM,EAAE,gBAAgB;IAa/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,OAAO;IAIT,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAWhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"gcs-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/gcs-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAE5C,qBAAa,iBAAkB,SAAQ,kBAAkB;IAG3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,OAAO,CAAU;gBAEI,MAAM,EAAE,gBAAgB;IAa/C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,OAAO;IAIT,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAWhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAY9D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAwBpD,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkBzC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAepD"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GCSStorageAdapter = void 0;
|
|
4
|
+
const stream_1 = require("stream");
|
|
4
5
|
const storage_1 = require("@google-cloud/storage");
|
|
5
6
|
const adapters_1 = require("../../core/adapters");
|
|
6
7
|
class GCSStorageAdapter extends adapters_1.HashStorageAdapter {
|
|
@@ -35,8 +36,9 @@ class GCSStorageAdapter extends adapters_1.HashStorageAdapter {
|
|
|
35
36
|
async putChunk(hash, data) {
|
|
36
37
|
const file = this.storage.bucket(this.config.bucket).file(this.getPath(hash));
|
|
37
38
|
const writeStream = file.createWriteStream({ resumable: false });
|
|
39
|
+
const stream = Buffer.isBuffer(data) ? stream_1.Readable.from(data) : data;
|
|
38
40
|
await new Promise((resolve, reject) => {
|
|
39
|
-
|
|
41
|
+
stream.pipe(writeStream).on('finish', resolve).on('error', reject);
|
|
40
42
|
});
|
|
41
43
|
}
|
|
42
44
|
async chunkExists(hash) {
|
|
@@ -13,7 +13,7 @@ export declare class HTTPStorageAdapter extends HashStorageAdapter {
|
|
|
13
13
|
private buildIndexUrl;
|
|
14
14
|
private headers;
|
|
15
15
|
getChunk(hash: string): Promise<Readable | null>;
|
|
16
|
-
putChunk(hash: string, data: Readable): Promise<void>;
|
|
16
|
+
putChunk(hash: string, data: Readable | Buffer): Promise<void>;
|
|
17
17
|
chunkExists(hash: string): Promise<boolean>;
|
|
18
18
|
deleteChunk(hash: string): Promise<void>;
|
|
19
19
|
getChunkInfo(hash: string): Promise<BlobInfo | null>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/http-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAU5C,qBAAa,kBAAmB,SAAQ,kBAAkB;IAK5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAkB;gBAEb,MAAM,EAAE,iBAAiB;IAUhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,OAAO;IAcT,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAqBhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"http-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/http-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAU5C,qBAAa,kBAAmB,SAAQ,kBAAkB;IAK5C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAkB;gBAEb,MAAM,EAAE,iBAAiB;IAUhD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,QAAQ;IAQhB,OAAO,CAAC,aAAa;IAUrB,OAAO,CAAC,OAAO;IAcT,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAqBhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAc9D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBxC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAgCpD,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAsBzC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAepD"}
|
|
@@ -10,7 +10,7 @@ export declare class LocalStorageAdapter extends HashStorageAdapter {
|
|
|
10
10
|
private resolveChunkPath;
|
|
11
11
|
private resolveIndexPath;
|
|
12
12
|
getChunk(hash: string): Promise<Readable | null>;
|
|
13
|
-
putChunk(hash: string, data: Readable, opts?: Nullish<{
|
|
13
|
+
putChunk(hash: string, data: Readable | Buffer, opts?: Nullish<{
|
|
14
14
|
overwrite?: Nullish<boolean>;
|
|
15
15
|
}>): Promise<void>;
|
|
16
16
|
chunkExists(hash: string): Promise<boolean>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"local-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/local-storage-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,mBAAoB,SAAQ,kBAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,kBAAkB;IAIjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,gBAAgB;IAKlB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAWhD,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"local-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/local-storage-adapter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAIlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,mBAAoB,SAAQ,kBAAkB;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,kBAAkB;IAIjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,gBAAgB;IAKlB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAWhD,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GAAG,MAAM,EACvB,IAAI,CAAC,EAAE,OAAO,CAAC;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;KAAE,CAAC,GAC/C,OAAO,CAAC,IAAI,CAAC;IA8BV,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAW3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAoB/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAepD,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAgBzC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;CAKpD"}
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LocalStorageAdapter = void 0;
|
|
4
4
|
const promises_1 = require("fs/promises");
|
|
5
5
|
const fs_1 = require("fs");
|
|
6
|
+
const stream_1 = require("stream");
|
|
6
7
|
const path_1 = require("path");
|
|
7
8
|
const exceptions_1 = require("../../core/exceptions");
|
|
8
9
|
const adapters_1 = require("../../core/adapters");
|
|
@@ -48,12 +49,13 @@ class LocalStorageAdapter extends adapters_1.HashStorageAdapter {
|
|
|
48
49
|
}
|
|
49
50
|
}
|
|
50
51
|
}
|
|
52
|
+
const stream = Buffer.isBuffer(data) ? stream_1.Readable.from(data) : data;
|
|
51
53
|
await new Promise((resolve, reject) => {
|
|
52
54
|
const writeStream = (0, fs_1.createWriteStream)(path);
|
|
53
|
-
|
|
55
|
+
stream.pipe(writeStream);
|
|
54
56
|
writeStream.on('finish', () => resolve());
|
|
55
57
|
writeStream.on('error', (err) => reject(err));
|
|
56
|
-
|
|
58
|
+
stream.on('error', (err) => reject(err));
|
|
57
59
|
});
|
|
58
60
|
}
|
|
59
61
|
async chunkExists(hash) {
|
|
@@ -10,7 +10,7 @@ export declare class S3StorageAdapter extends HashStorageAdapter {
|
|
|
10
10
|
dispose(): Promise<void>;
|
|
11
11
|
private resolveKey;
|
|
12
12
|
getChunk(hash: string): Promise<Readable | null>;
|
|
13
|
-
putChunk(hash: string, data: Readable, opts?: {
|
|
13
|
+
putChunk(hash: string, data: Readable | Buffer, opts?: {
|
|
14
14
|
overwrite?: Nullish<boolean>;
|
|
15
15
|
size?: Nullish<number>;
|
|
16
16
|
}): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"s3-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/s3-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAWlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,gBAAiB,SAAQ,kBAAkB;IAG1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAED,MAAM,EAAE,eAAe;IAU9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,UAAU;IAIZ,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAiBhD,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"s3-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/s3-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAWlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,gBAAiB,SAAQ,kBAAkB;IAG1C,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFnC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAW;gBAED,MAAM,EAAE,eAAe;IAU9C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAI9B,OAAO,CAAC,UAAU;IAIZ,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAiBhD,QAAQ,CACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,GAAG,MAAM,EACvB,IAAI,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QAAC,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,CAAC,CAAA;KAAE,GAC9D,OAAO,CAAC,IAAI,CAAC;IAoBV,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAY3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKxC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IA8B/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAqBpD,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAe7C,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;CA6BhD"}
|
|
@@ -12,7 +12,7 @@ export declare class SSHStorageAdapter extends HashStorageAdapter {
|
|
|
12
12
|
private resolveChunkPath;
|
|
13
13
|
private resolveIndexPath;
|
|
14
14
|
getChunk(hash: string): Promise<Readable | null>;
|
|
15
|
-
putChunk(hash: string, data: Readable): Promise<void>;
|
|
15
|
+
putChunk(hash: string, data: Readable | Buffer): Promise<void>;
|
|
16
16
|
chunkExists(hash: string): Promise<boolean>;
|
|
17
17
|
deleteChunk(hash: string): Promise<void>;
|
|
18
18
|
listChunks(): Promise<string[]>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ssh-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/ssh-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAK5C,qBAAa,iBAAkB,SAAQ,kBAAkB;IAM3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,UAAU,CAA6B;gBAElB,MAAM,EAAE,gBAAgB;YAIvC,OAAO;IA4CrB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,gBAAgB;IAKlB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAwBhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"ssh-storage-adapter.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/adapters/ssh-storage-adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAK5C,qBAAa,iBAAkB,SAAQ,kBAAkB;IAM3C,OAAO,CAAC,QAAQ,CAAC,MAAM;IALnC,OAAO,CAAC,IAAI,CAAa;IACzB,OAAO,CAAC,MAAM,CAAa;IAE3B,OAAO,CAAC,UAAU,CAA6B;gBAElB,MAAM,EAAE,gBAAgB;YAIvC,OAAO;IA4CrB,OAAO,CAAC,gBAAgB;IAKxB,OAAO,CAAC,gBAAgB;IAKlB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAwBhD,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkB9D,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAS3C,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAexC,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAe/B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;IAuBpD,cAAc,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAkC/C,OAAO,CAAC,UAAU;IAaZ,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB7C,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAehB,mBAAmB;IAgBjC,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,cAAc;CAKvB"}
|
|
@@ -118,10 +118,11 @@ class SSHStorageAdapter extends adapters_1.HashStorageAdapter {
|
|
|
118
118
|
const sftp = await this.connect();
|
|
119
119
|
const remotePath = this.resolveChunkPath(hash);
|
|
120
120
|
const dir = remotePath.substring(0, remotePath.lastIndexOf('/'));
|
|
121
|
+
const stream = Buffer.isBuffer(data) ? stream_1.Readable.from(data) : data;
|
|
121
122
|
await this.createDirIfNotFound(sftp, dir);
|
|
122
123
|
return new Promise((resolve, reject) => {
|
|
123
124
|
const writeStream = sftp.createWriteStream(remotePath);
|
|
124
|
-
|
|
125
|
+
stream.pipe(writeStream);
|
|
125
126
|
writeStream.on('close', resolve);
|
|
126
127
|
writeStream.on('error', reject);
|
|
127
128
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hash-wasm-hasher-service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/hash-wasm-hasher-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,qBAAsB,YAAW,aAAa;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiDlF,UAAU,CACd,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAC3D,OAAO,CAAC,KAAK,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"hash-wasm-hasher-service.d.ts","sourceRoot":"","sources":["../../../src/infrastructure/services/hash-wasm-hasher-service.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAErE,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,qBAAa,qBAAsB,YAAW,aAAa;IACnD,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAiDlF,UAAU,CACd,MAAM,EAAE,gBAAgB,EACxB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC,GAC3D,OAAO,CAAC,KAAK,EAAE,CAAC;IAwEb,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAQrE,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAM7C,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAgBhE,qBAAqB,IAAI,OAAO,CAAC,eAAe,CAAC;CAYxD"}
|
|
@@ -55,23 +55,28 @@ class HashWasmHasherService {
|
|
|
55
55
|
let buffer = Buffer.alloc(0);
|
|
56
56
|
try {
|
|
57
57
|
for await (const data of stream) {
|
|
58
|
-
|
|
59
|
-
while (
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
if (
|
|
65
|
-
|
|
66
|
-
|
|
58
|
+
let input = Buffer.isBuffer(data) ? data : Buffer.from(data);
|
|
59
|
+
while (input.length > 0) {
|
|
60
|
+
const remainingSpace = chunkSize - buffer.length;
|
|
61
|
+
const take = Math.min(remainingSpace, input.length);
|
|
62
|
+
buffer = Buffer.concat([buffer, input.subarray(0, take)]);
|
|
63
|
+
input = input.subarray(take);
|
|
64
|
+
if (buffer.length === chunkSize) {
|
|
65
|
+
const chunkHasher = await (0, hash_wasm_1.createBLAKE3)();
|
|
66
|
+
chunkHasher.update(buffer);
|
|
67
|
+
const chunkHash = chunkHasher.digest('hex');
|
|
68
|
+
if (onChunk) {
|
|
69
|
+
// onChunk could be a promise
|
|
70
|
+
await Promise.resolve(onChunk(buffer, chunkHash));
|
|
71
|
+
}
|
|
72
|
+
chunks.push({
|
|
73
|
+
hash: chunkHash,
|
|
74
|
+
offset,
|
|
75
|
+
size: buffer.length,
|
|
76
|
+
});
|
|
77
|
+
offset += buffer.length;
|
|
78
|
+
buffer = Buffer.alloc(0);
|
|
67
79
|
}
|
|
68
|
-
chunks.push({
|
|
69
|
-
hash: chunkHash,
|
|
70
|
-
offset,
|
|
71
|
-
size: emitChunk.length,
|
|
72
|
-
});
|
|
73
|
-
offset += emitChunk.length;
|
|
74
|
-
buffer = buffer.subarray(chunkSize);
|
|
75
80
|
}
|
|
76
81
|
}
|
|
77
82
|
if (buffer.length > 0) {
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "rac-delta",
|
|
3
3
|
"description": "Storage agnostic delta patching implementation of rac-delta protocol for NodeJs. With streaming support and file reconstruction.",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.9",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"repository": {
|