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 digest = this.hash.digest();
28
- if (!this.equals(this.digests[this.digestIndex], digest)) {
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 digest = this.hash.digest();
48
- if (!this.equals(this.digests[this.digestIndex], digest)) {
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":"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"}
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",
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 is always Buffer, encoding is always 'buffer', so there is no need to check
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 digest = this.hash.digest()
39
- if (!this.equals(this.digests[this.digestIndex], digest)) {
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 digest = this.hash.digest()
62
- if (!this.equals(this.digests[this.digestIndex], digest)) {
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++