diff --git a/esbuild.config.mjs b/esbuild.config.mjs index 5f7b79e..733c1e4 100644 --- a/esbuild.config.mjs +++ b/esbuild.config.mjs @@ -13,7 +13,7 @@ if you want to view the source, please visit the github repository of this plugi const prod = process.argv[2] === "production"; const manifestJson = JSON.parse(fs.readFileSync("./manifest.json")); const packageJson = JSON.parse(fs.readFileSync("./package.json")); -const updateInfo = JSON.stringify(fs.readFileSync("./updates.md") + ""); +const updateInfo = JSON.stringify("PATCHED-"+fs.readFileSync("./updates.md") + ""); esbuild .build({ banner: { diff --git a/package-lock.json b/package-lock.json index f958d49..06a2063 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,12 +13,14 @@ "esbuild": "0.15.15", "esbuild-svelte": "^0.7.3", "idb": "^7.1.1", - "xxhash-wasm": "^0.4.2" + "xxhash-wasm": "^0.4.2", + "xxhashjs": "^0.2.2" }, "devDependencies": { "@types/diff-match-patch": "^1.0.32", "@types/pouchdb": "^6.4.0", "@types/pouchdb-browser": "^6.1.3", + "@types/xxhashjs": "^0.2.2", "@typescript-eslint/eslint-plugin": "^5.44.0", "@typescript-eslint/parser": "^5.44.0", "builtin-modules": "^3.3.0", @@ -442,6 +444,15 @@ "@types/estree": "*" } }, + "node_modules/@types/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-+hlk/W1kgnZn0vR22XNhxHk/qIRQYF54i0UTF2MwBAPd0e7xSy+jKOJwSwTdRQrNnOMRVv+vsh8ITV0uyhp2yg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "5.44.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz", @@ -872,6 +883,11 @@ "node": ">= 8" } }, + "node_modules/cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==" + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -3344,6 +3360,14 @@ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==" }, + "node_modules/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "dependencies": { + "cuint": "^0.2.2" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -3736,6 +3760,15 @@ "@types/estree": "*" } }, + "@types/xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@types/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-+hlk/W1kgnZn0vR22XNhxHk/qIRQYF54i0UTF2MwBAPd0e7xSy+jKOJwSwTdRQrNnOMRVv+vsh8ITV0uyhp2yg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "@typescript-eslint/eslint-plugin": { "version": "5.44.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz", @@ -4011,6 +4044,11 @@ "which": "^2.0.1" } }, + "cuint": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.2.2.tgz", + "integrity": "sha512-d4ZVpCW31eWwCMe1YT3ur7mUDnTXbgwyzaL320DrcRT45rfjYxkt5QWLrmOJ+/UEAI2+fQgKe/fCjR8l4TpRgw==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -5678,6 +5716,14 @@ "resolved": "https://registry.npmjs.org/xxhash-wasm/-/xxhash-wasm-0.4.2.tgz", "integrity": "sha512-/eyHVRJQCirEkSZ1agRSCwriMhwlyUcFkXD5TPVSLP+IPzjsqMVzZwdoczLp1SoQU0R3dxz1RpIK+4YNQbCVOA==" }, + "xxhashjs": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/xxhashjs/-/xxhashjs-0.2.2.tgz", + "integrity": "sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw==", + "requires": { + "cuint": "^0.2.2" + } + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index 1e4bd1f..7ab26f2 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "@types/diff-match-patch": "^1.0.32", "@types/pouchdb": "^6.4.0", "@types/pouchdb-browser": "^6.1.3", + "@types/xxhashjs": "^0.2.2", "@typescript-eslint/eslint-plugin": "^5.44.0", "@typescript-eslint/parser": "^5.44.0", "builtin-modules": "^3.3.0", @@ -37,6 +38,7 @@ "esbuild": "0.15.15", "esbuild-svelte": "^0.7.3", "idb": "^7.1.1", - "xxhash-wasm": "^0.4.2" + "xxhash-wasm": "^0.4.2", + "xxhashjs": "^0.2.2" } -} \ No newline at end of file +} diff --git a/src/LocalPouchDB.ts b/src/LocalPouchDB.ts index 2389763..6c2dd56 100644 --- a/src/LocalPouchDB.ts +++ b/src/LocalPouchDB.ts @@ -7,6 +7,7 @@ import { EntryDoc, LOG_LEVEL } from "./lib/src/types.js"; import { enableEncryption } from "./lib/src/utils.js"; import { isCloudantURI, isValidRemoteCouchDBURI } from "./lib/src/utils_couchdb.js"; import { id2path, path2id } from "./utils.js"; +import XXH from "xxhashjs"; export class LocalPouchDB extends LocalPouchDBBase { @@ -33,6 +34,13 @@ export class LocalPouchDB extends LocalPouchDBBase { await this.kvDB.destroy(); } + async prepareHashFunctions() { + if (this.h32 != null) return; + // const { h32, h32Raw } = await xxhash(); + this.h32 = (input: string, seed: number) => (XXH.h32(input, seed).toString(16))// h32; + this.h32Raw = (input: Uint8Array, seed: number) => (XXH.h32(input.buffer, seed).toNumber())// h32; + } + last_successful_post = false; getLastPostFailedBySize() { return !this.last_successful_post;