From bfc84384ea36bfc44a35ed83a5d5cff25812eb8c Mon Sep 17 00:00:00 2001 From: Marcus Schiesser <mail@marcusschiesser.de> Date: Tue, 23 Jan 2024 15:32:11 +0700 Subject: [PATCH] fix: don't create new hash deserialization a node (#307) --- packages/core/src/Node.ts | 9 ++++----- packages/core/src/tests/Node.test.ts | 12 ++++++++---- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/packages/core/src/Node.ts b/packages/core/src/Node.ts index 806bba5d4..cf4f66928 100644 --- a/packages/core/src/Node.ts +++ b/packages/core/src/Node.ts @@ -183,7 +183,7 @@ export class TextNode<T extends Metadata = Metadata> extends BaseNode<T> { if (new.target === TextNode) { // Don't generate the hash repeatedly so only do it if this is // constructing the derived class - this.hash = this.generateHash(); + this.hash = init?.hash ?? this.generateHash(); } } @@ -234,7 +234,6 @@ export class TextNode<T extends Metadata = Metadata> extends BaseNode<T> { setContent(value: string) { this.text = value; - this.hash = this.generateHash(); } @@ -255,7 +254,7 @@ export class IndexNode<T extends Metadata = Metadata> extends TextNode<T> { Object.assign(this, init); if (new.target === IndexNode) { - this.hash = this.generateHash(); + this.hash = init?.hash ?? this.generateHash(); } } @@ -273,7 +272,7 @@ export class Document<T extends Metadata = Metadata> extends TextNode<T> { Object.assign(this, init); if (new.target === Document) { - this.hash = this.generateHash(); + this.hash = init?.hash ?? this.generateHash(); } } @@ -334,7 +333,7 @@ export class ImageDocument<T extends Metadata = Metadata> extends ImageNode<T> { super(init); if (new.target === ImageDocument) { - this.hash = this.generateHash(); + this.hash = init?.hash ?? this.generateHash(); } } diff --git a/packages/core/src/tests/Node.test.ts b/packages/core/src/tests/Node.test.ts index 656ad7d7c..43768730e 100644 --- a/packages/core/src/tests/Node.test.ts +++ b/packages/core/src/tests/Node.test.ts @@ -7,9 +7,13 @@ describe("TextNode", () => { node = new TextNode({ text: "Hello World" }); }); - describe("generateHash", () => { - it("should generate a hash", () => { - expect(node.hash).toBe("nTSKdUTYqR52MPv/brvb4RTGeqedTEqG9QN8KSAj2Do="); - }); + test("should generate a hash", () => { + expect(node.hash).toBe("nTSKdUTYqR52MPv/brvb4RTGeqedTEqG9QN8KSAj2Do="); + }); + + test("clone should have the same hash", () => { + const hash = node.hash; + const clone = node.clone(); + expect(clone.hash).toBe(hash); }); }); -- GitLab