diff --git a/.changeset/fluffy-grapes-serve.md b/.changeset/fluffy-grapes-serve.md new file mode 100644 index 000000000..13ee1c666 --- /dev/null +++ b/.changeset/fluffy-grapes-serve.md @@ -0,0 +1,5 @@ +--- +"@koopjs/winnow": minor +--- + +- swap stringhash for murmurhash diff --git a/package-lock.json b/package-lock.json index a184c1b36..7299505ec 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15184,6 +15184,11 @@ "node": ">=8" } }, + "node_modules/murmurhash": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/murmurhash/-/murmurhash-2.0.1.tgz", + "integrity": "sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew==" + }, "node_modules/mute-stream": { "version": "0.0.8", "dev": true, @@ -19941,10 +19946,6 @@ "node": ">=0.6.19" } }, - "node_modules/string-hash": { - "version": "1.1.3", - "license": "CC0-1.0" - }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -21811,10 +21812,10 @@ "js-sql-parser": "^1.5.0", "lodash": "^4.17.21", "moment": "^2.30.1", + "murmurhash": "^2.0.1", "ngeohash": "^0.6.3", "proj4": "^2.10.0", "simple-statistics": "^7.8.3", - "string-hash": "^1.1.3", "wkt-parser": "^1.3.3" }, "devDependencies": { @@ -24090,12 +24091,12 @@ "js-sql-parser": "^1.5.0", "lodash": "^4.17.21", "moment": "^2.30.1", + "murmurhash": "^2.0.1", "ngeohash": "^0.6.3", "proj4": "^2.10.0", "proxyquire": "^2.1.3", "simple-statistics": "^7.8.3", "sinon": "^17.0.1", - "string-hash": "^1.1.3", "tap-min": "^3.0.0", "tape": "^5.7.5", "wkt-parser": "^1.3.3" @@ -32620,6 +32621,11 @@ } } }, + "murmurhash": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/murmurhash/-/murmurhash-2.0.1.tgz", + "integrity": "sha512-5vQEh3y+DG/lMPM0mCGPDnyV8chYg/g7rl6v3Gd8WMF9S429ox3Xk8qrk174kWhG767KQMqqxLD1WnGd77hiew==" + }, "mute-stream": { "version": "0.0.8", "dev": true @@ -35987,9 +35993,6 @@ "version": "0.3.2", "dev": true }, - "string-hash": { - "version": "1.1.3" - }, "string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", diff --git a/packages/winnow/package.json b/packages/winnow/package.json index d25f2710d..46735e8ab 100644 --- a/packages/winnow/package.json +++ b/packages/winnow/package.json @@ -57,10 +57,10 @@ "js-sql-parser": "^1.5.0", "lodash": "^4.17.21", "moment": "^2.30.1", + "murmurhash": "^2.0.1", "ngeohash": "^0.6.3", "proj4": "^2.10.0", "simple-statistics": "^7.8.3", - "string-hash": "^1.1.3", "wkt-parser": "^1.3.3" }, "devDependencies": { diff --git a/packages/winnow/src/filter-and-transform/helpers/hash-function.js b/packages/winnow/src/filter-and-transform/helpers/hash-function.js index 824d0ba6e..6227564e4 100644 --- a/packages/winnow/src/filter-and-transform/helpers/hash-function.js +++ b/packages/winnow/src/filter-and-transform/helpers/hash-function.js @@ -1,17 +1,19 @@ const hashFixture = require('./hash-fixture'); const USE_JAVASCRIPT_HASHING = process.env.OBJECTID_FEATURE_HASH === 'javascript'; -const stringHash = require('string-hash'); +const murmurhash = require('murmurhash'); function getHashFunction () { - if (USE_JAVASCRIPT_HASHING) return stringHash; + if (USE_JAVASCRIPT_HASHING) { + return murmurhash; + } - // Try to use farmhash, fallback to JavaScript only hashing library + // Try to use farmhash, fallback to native JavaScript hashing library try { const hashFunction = require('farmhash').hash32; hashFunction(JSON.stringify(hashFixture)); return hashFunction; } catch (e) { - return stringHash; + return murmurhash; } } diff --git a/packages/winnow/src/filter-and-transform/helpers/hash-function.spec.js b/packages/winnow/src/filter-and-transform/helpers/hash-function.spec.js index 147354b93..26c6eb69a 100644 --- a/packages/winnow/src/filter-and-transform/helpers/hash-function.spec.js +++ b/packages/winnow/src/filter-and-transform/helpers/hash-function.spec.js @@ -2,17 +2,17 @@ const test = require('tape'); const proxyquire = require('proxyquire'); const modulePath = './hash-function'; const stub = { - 'string-hash': () => { return 'string-hash'; }, + 'murmurhash': () => { return 'murmurhash'; }, 'farmhash': { // eslint-disable-line hash32: () => { return 'farmhash'; } } }; -test('hashFunction: ENV variable forces use of string-hash', t => { +test('hashFunction: ENV variable forces use of murmurhash', t => { t.plan(1); process.env.OBJECTID_FEATURE_HASH = 'javascript'; const hashFunction = proxyquire(modulePath, stub); - t.equals(hashFunction(), 'string-hash'); + t.equals(hashFunction(), 'murmurhash'); process.env.OBJECTID_FEATURE_HASH = undefined; }); @@ -22,14 +22,14 @@ test('hashFunction: default use of farmhash', t => { t.equals(hashFunction(), 'farmhash'); }); -test('hashFunction: fallback use of string-hash', t => { +test('hashFunction: fallback use of murmurhash', t => { t.plan(1); const stub = { - 'string-hash': () => { return 'string-hash'; }, + 'murmurhash': () => { return 'murmurhash'; }, 'farmhash': { // eslint-disable-line hash32: () => { throw new Error(); } } }; const hashFunction = proxyquire(modulePath, stub); - t.equals(hashFunction(), 'string-hash'); + t.equals(hashFunction(), 'murmurhash'); });