split-hash 0.3.3 → 0.3.4
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.
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Transform } from 'stream';
|
|
2
2
|
import { assert, CustomError } from '@blackglory/errors';
|
|
3
|
+
import { isUndefined } from 'extra-utils';
|
|
3
4
|
export class SplitHashValidator extends Transform {
|
|
4
5
|
constructor(digests, blockSizeBytes, createHash, equals = Object.is) {
|
|
5
6
|
assert(blockSizeBytes > 0, 'The parameter blockSizeBytes must be greater than zero');
|
|
@@ -24,8 +25,10 @@ export class SplitHashValidator extends Transform {
|
|
|
24
25
|
const slice = chunk.slice(offset, offset + remainingBlockBytes);
|
|
25
26
|
if (slice.length === remainingBlockBytes) {
|
|
26
27
|
this.hash.update(slice);
|
|
27
|
-
const
|
|
28
|
-
|
|
28
|
+
const currentBlockBytes = this.hash.digest();
|
|
29
|
+
const correctDigest = this.digests[this.digestIndex];
|
|
30
|
+
if (isUndefined(correctDigest) ||
|
|
31
|
+
!this.equals(correctDigest, currentBlockBytes)) {
|
|
29
32
|
return callback(new NotMatchedError());
|
|
30
33
|
}
|
|
31
34
|
this.digestIndex++;
|
|
@@ -44,8 +47,10 @@ export class SplitHashValidator extends Transform {
|
|
|
44
47
|
}
|
|
45
48
|
_flush(callback) {
|
|
46
49
|
if (this.currentBlockBytes > 0) {
|
|
47
|
-
const
|
|
48
|
-
|
|
50
|
+
const currentBlockDigest = this.hash.digest();
|
|
51
|
+
const correctDigest = this.digests[this.digestIndex];
|
|
52
|
+
if (isUndefined(correctDigest) ||
|
|
53
|
+
!this.equals(correctDigest, currentBlockDigest)) {
|
|
49
54
|
return callback(new NotMatchedError());
|
|
50
55
|
}
|
|
51
56
|
this.digestIndex++;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"split-hash-validator.js","sourceRoot":"","sources":["../../src/nodejs/split-hash-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAqB,MAAM,QAAQ,CAAA;AACrD,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;
|
|
1
|
+
{"version":3,"file":"split-hash-validator.js","sourceRoot":"","sources":["../../src/nodejs/split-hash-validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "split-hash",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.4",
|
|
4
4
|
"description": "Split the stream based on bytes and get digests from each part.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"split",
|
|
@@ -70,6 +70,7 @@
|
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {
|
|
72
72
|
"@blackglory/errors": "^3.0.0",
|
|
73
|
-
"extra-stream": "^0.2.0"
|
|
73
|
+
"extra-stream": "^0.2.0",
|
|
74
|
+
"extra-utils": "^5.21.0"
|
|
74
75
|
}
|
|
75
76
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Transform, TransformCallback } from 'stream'
|
|
2
2
|
import { assert, CustomError } from '@blackglory/errors'
|
|
3
3
|
import { ProgressiveHashFactory, IProgressiveHash } from './types.js'
|
|
4
|
+
import { isUndefined } from 'extra-utils'
|
|
4
5
|
|
|
5
6
|
export class SplitHashValidator<T> extends Transform {
|
|
6
7
|
private hash: IProgressiveHash<T> = this.createHash()
|
|
@@ -19,11 +20,13 @@ export class SplitHashValidator<T> extends Transform {
|
|
|
19
20
|
}
|
|
20
21
|
|
|
21
22
|
_transform(
|
|
23
|
+
// 总是Buffer
|
|
22
24
|
chunk: Buffer
|
|
25
|
+
// 总是"buffer".
|
|
23
26
|
, encoding: BufferEncoding
|
|
24
27
|
, callback: TransformCallback
|
|
25
28
|
): void {
|
|
26
|
-
// chunk
|
|
29
|
+
// 由于接收到的chunk总是Buffer, 且encoding总是"buffer", 无法在此处检测chunk是否经过编码.
|
|
27
30
|
|
|
28
31
|
if (this.currentBlockBytes + chunk.length < this.blockSizeBytes) {
|
|
29
32
|
this.hash.update(chunk)
|
|
@@ -35,11 +38,17 @@ export class SplitHashValidator<T> extends Transform {
|
|
|
35
38
|
const slice = chunk.slice(offset, offset + remainingBlockBytes)
|
|
36
39
|
if (slice.length === remainingBlockBytes) {
|
|
37
40
|
this.hash.update(slice)
|
|
38
|
-
const
|
|
39
|
-
|
|
41
|
+
const currentBlockBytes = this.hash.digest()
|
|
42
|
+
const correctDigest = this.digests[this.digestIndex]
|
|
43
|
+
if (
|
|
44
|
+
isUndefined(correctDigest) ||
|
|
45
|
+
!this.equals(correctDigest, currentBlockBytes)
|
|
46
|
+
) {
|
|
40
47
|
return callback(new NotMatchedError())
|
|
41
48
|
}
|
|
49
|
+
|
|
42
50
|
this.digestIndex++
|
|
51
|
+
|
|
43
52
|
// prepare for the next round
|
|
44
53
|
this.hash = this.createHash()
|
|
45
54
|
this.currentBlockBytes = 0
|
|
@@ -58,8 +67,12 @@ export class SplitHashValidator<T> extends Transform {
|
|
|
58
67
|
|
|
59
68
|
_flush(callback: TransformCallback): void {
|
|
60
69
|
if (this.currentBlockBytes > 0) {
|
|
61
|
-
const
|
|
62
|
-
|
|
70
|
+
const currentBlockDigest = this.hash.digest()
|
|
71
|
+
const correctDigest = this.digests[this.digestIndex]
|
|
72
|
+
if (
|
|
73
|
+
isUndefined(correctDigest) ||
|
|
74
|
+
!this.equals(correctDigest, currentBlockDigest)
|
|
75
|
+
) {
|
|
63
76
|
return callback(new NotMatchedError())
|
|
64
77
|
}
|
|
65
78
|
this.digestIndex++
|