feat: add note version history (#20)

* feat: note version history

* fix bugs

* add tests for session history

* update tests

* add tests for restoring content

* add more tests

* update jsdoc

* return empty array if no session history present for a note

* init note history with await

* add note history versions limit

* cleanup note history after adding a new session

* fix tests

* add test for session cleanup

* test: add collector tests

* feat: dateEdited -> dateModified

* feat: migrate to liqe for searching

* chore: forceExit jest after test run

* feat: note version history

* fix bugs

* add tests for session history

* update tests

* add tests for restoring content

* add more tests

* update jsdoc

* return empty array if no session history present for a note

* init note history with await

* add note history versions limit

* cleanup note history after adding a new session

* fix tests

* add test for session cleanup

* init ContentHistory with await

* fix reference to db in init

* make sessionId in db

* check if note is locked through note metadata

* make cleanup method private

* use remove methods in notehistory and contenthistory

* restore note content via notes.add method if note is not locked

* move getting all items to seperate functions

* check if parsed json is valid

* deserialize a session only if it's sessionContent exists

* add locked property to sessionContent

* remove makeSessionId function

* update tests

* remove yarn.lock file

* update tests

Co-authored-by: ammarahm-ed <ammarahmed6506@gmail.com>
This commit is contained in:
Abdullah Atta
2021-12-21 13:41:08 +05:00
committed by GitHub
parent 09d1a22363
commit 630bb33b10
7 changed files with 489 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
import { decode, encode } from "base64-arraybuffer";
import fflate from "fflate";
/**
*
* @param {string} data
* @returns {string | null} An object containing compressed data
*/
export const compress = (data) => {
try {
return encode(fflate.compressSync(fflate.strToU8(data)).buffer)
} catch (e) {
return null;
}
};
/**
*
* @param {string} compressed
* @returns {string} decompressed string
*/
export const decompress = (compressed) => {
return fflate.strFromU8(
fflate.decompressSync(new Uint8Array(decode(compressed)))
);
};