diff --git a/package-lock.json b/package-lock.json index 4cc4d52894..d079a3cfb2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,7 @@ "license": "Apache-2.0", "dependencies": { "double-ended-queue": "2.1.0-0", - "fetch-cookie": "2.2.0", + "fetch-cookie": "3.2.0", "fruitdown": "1.0.2", "level": "6.0.1", "level-codec": "9.0.2", @@ -20,7 +20,6 @@ "localstorage-down": "0.6.7", "ltgt": "2.2.1", "memdown": "1.4.1", - "node-fetch": "2.6.9", "readable-stream": "1.1.14", "spark-md5": "3.0.2", "through2": "3.0.2", @@ -3350,7 +3349,7 @@ "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "devOptional": true, + "dev": true, "dependencies": { "iconv-lite": "^0.6.2" } @@ -3373,7 +3372,7 @@ "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "devOptional": true, + "dev": true, "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -4278,12 +4277,25 @@ } }, "node_modules/fetch-cookie": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-2.2.0.tgz", - "integrity": "sha512-h9AgfjURuCgA2+2ISl8GbavpUdR+WGAM2McW/ovn4tVccegp8ZqCKWSBR8uRdM8dDNlx5WdKRWxBYUwteLDCNQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-3.2.0.tgz", + "integrity": "sha512-n61pQIxP25C6DRhcJxn7BDzgHP/+S56Urowb5WFxtcRMpU6drqXD90xjyAsVQYsNSNNVbaCcYY1DuHsdkZLuiA==", + "license": "Unlicense", "dependencies": { "set-cookie-parser": "^2.4.8", - "tough-cookie": "^4.0.0" + "tough-cookie": "^6.0.0" + } + }, + "node_modules/fetch-cookie/node_modules/tough-cookie": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^7.0.5" + }, + "engines": { + "node": ">=16" } }, "node_modules/file-entry-cache": { @@ -7311,25 +7323,6 @@ "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", "dev": true }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, "node_modules/node-gyp-build": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.1.1.tgz", @@ -9004,7 +8997,8 @@ "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", + "dev": true }, "node_modules/public-encrypt": { "version": "4.0.3", @@ -9090,7 +9084,8 @@ "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -9512,7 +9507,8 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true }, "node_modules/resolve": { "version": "1.22.3", @@ -9719,7 +9715,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "devOptional": true + "dev": true }, "node_modules/sanitize-filename": { "version": "1.6.3", @@ -10795,6 +10791,24 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/tldts": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.27.tgz", + "integrity": "sha512-I4FZcVFcqCRuT0ph6dCDpPuO4Xgzvh+spkcTr1gK7peIvxWauoloVO0vuy1FQnijT63ss6AsHB6+OIM4aXHbPg==", + "license": "MIT", + "dependencies": { + "tldts-core": "^7.0.27" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "7.0.27", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.27.tgz", + "integrity": "sha512-YQ7uPjgWUibIK6DW5lrKujGwUKhLevU4hcGbP5O6TcIUb+oTjJYJVWPS4nZsIHrEEEG6myk/oqAJUEQmpZrHsg==", + "license": "MIT" + }, "node_modules/to-buffer": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.2.1.tgz", @@ -10844,6 +10858,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dev": true, "dependencies": { "psl": "^1.1.33", "punycode": "^2.1.1", @@ -10858,6 +10873,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "engines": { "node": ">=6" } @@ -10865,7 +10881,8 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true }, "node_modules/truncate-utf8-bytes": { "version": "1.0.2", @@ -11165,6 +11182,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "dev": true, "engines": { "node": ">= 4.0.0" } @@ -11266,6 +11284,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -11394,12 +11413,14 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" diff --git a/package.json b/package.json index 328803bcac..e416b59ce7 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ }, "dependencies": { "double-ended-queue": "2.1.0-0", - "fetch-cookie": "2.2.0", + "fetch-cookie": "3.2.0", "fruitdown": "1.0.2", "level": "6.0.1", "level-codec": "9.0.2", @@ -47,7 +47,6 @@ "localstorage-down": "0.6.7", "ltgt": "2.2.1", "memdown": "1.4.1", - "node-fetch": "2.6.9", "readable-stream": "1.1.14", "spark-md5": "3.0.2", "through2": "3.0.2", diff --git a/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js b/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js index 0ec19ed37e..ac5ecce982 100644 --- a/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js +++ b/packages/node_modules/pouchdb-abstract-mapreduce/src/index.js @@ -16,7 +16,6 @@ import { } from 'pouchdb-collate'; import { generateErrorFromResponse } from 'pouchdb-errors'; -import { Headers } from 'pouchdb-fetch'; import TaskQueue from './taskqueue'; import createView from './createView'; import { diff --git a/packages/node_modules/pouchdb-adapter-http/src/index.js b/packages/node_modules/pouchdb-adapter-http/src/index.js index b19f2b4122..d02bac03b8 100644 --- a/packages/node_modules/pouchdb-adapter-http/src/index.js +++ b/packages/node_modules/pouchdb-adapter-http/src/index.js @@ -2,7 +2,7 @@ import pool from './promise-pool'; -import { fetch, Headers } from 'pouchdb-fetch'; +import { fetch } from 'pouchdb-fetch'; import { createError, @@ -23,6 +23,7 @@ import { import { atob, btoa, + arrayBufferToBlobOrBuffer, binaryStringToBlobOrBuffer as binStringToBluffer, base64StringToBlobOrBuffer as b64StringToBluffer, blobOrBufferToBase64 as blufferToBase64 @@ -514,20 +515,11 @@ function HttpPouch(opts, callback) { const response = await ourFetch(genDBUrl(host, path)); - let blob; - if ('buffer' in response) { - blob = await response.buffer(); - } else { - /* istanbul ignore next */ - blob = await response.blob(); - } + const arrayBuffer = await response.arrayBuffer(); + const blob = arrayBufferToBlobOrBuffer(arrayBuffer, att.content_type); let data; if (opts.binary) { - const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type'); - if (!typeFieldDescriptor || typeFieldDescriptor.set) { - blob.type = att.content_type; - } data = blob; } else { data = await new Promise(function (resolve) { @@ -635,21 +627,10 @@ function HttpPouch(opts, callback) { } contentType = response.headers.get('content-type'); - let blob; - if (typeof process !== 'undefined' && !process.browser && typeof response.buffer === 'function') { - blob = await response.buffer(); - } else { - /* istanbul ignore next */ - blob = await response.blob(); - } - // TODO: also remove - if (typeof process !== 'undefined' && !process.browser) { - const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type'); - if (!typeFieldDescriptor || typeFieldDescriptor.set) { - blob.type = contentType; - } - } + const arrayBuffer = await response.arrayBuffer(); + const blob = arrayBufferToBlobOrBuffer(arrayBuffer, contentType); + callback(null, blob); } catch (err) { callback(err); diff --git a/packages/node_modules/pouchdb-binary-utils/package.json b/packages/node_modules/pouchdb-binary-utils/package.json index 4a19310e7e..9d094c377c 100644 --- a/packages/node_modules/pouchdb-binary-utils/package.json +++ b/packages/node_modules/pouchdb-binary-utils/package.json @@ -20,6 +20,7 @@ "./src/binaryStringToBlobOrBuffer.js": "./src/binaryStringToBlobOrBuffer-browser.js", "./src/blobOrBufferToBase64.js": "./src/blobOrBufferToBase64-browser.js", "./src/blobOrBufferToBinaryString.js": "./src/blobOrBufferToBinaryString-browser.js", - "./src/typedBuffer.js": "./src/typedBuffer-browser.js" + "./src/typedBuffer.js": "./src/typedBuffer-browser.js", + "./src/arrayBufferToBlobOrBuffer.js": "./src/arrayBufferToBlobOrBuffer-browser.js" } } diff --git a/packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer-browser.js b/packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer-browser.js new file mode 100644 index 0000000000..56c2c54187 --- /dev/null +++ b/packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer-browser.js @@ -0,0 +1,8 @@ +import blob from 'pouchdb-binary-utils/src/blob'; + +function arrayBufferToBlobOrBuffer(arrayBuffer, type) { + // In the browser, create a Blob + return blob([arrayBuffer], { type }); +} + +export default arrayBufferToBlobOrBuffer; diff --git a/packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer.js b/packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer.js new file mode 100644 index 0000000000..57cba80301 --- /dev/null +++ b/packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer.js @@ -0,0 +1,10 @@ +function arrayBufferToBlobOrBuffer(arrayBuffer, type) { + // In Node.js, create a Buffer + const buffer = Buffer.from(arrayBuffer); + /* PouchDB uses `type` in various places, see `packages/node_modules/pouchdb-binary-utils/src/typedBuffer.js` + */ + buffer.type = type; + return buffer; +} + +export default arrayBufferToBlobOrBuffer; diff --git a/packages/node_modules/pouchdb-binary-utils/src/index.js b/packages/node_modules/pouchdb-binary-utils/src/index.js index bf6245347d..48dc7c0502 100644 --- a/packages/node_modules/pouchdb-binary-utils/src/index.js +++ b/packages/node_modules/pouchdb-binary-utils/src/index.js @@ -1,4 +1,5 @@ import {atob, btoa} from './base64'; +import arrayBufferToBlobOrBuffer from './arrayBufferToBlobOrBuffer'; import base64StringToBlobOrBuffer from './base64StringToBlobOrBuffer'; import binaryStringToArrayBuffer from './binaryStringToArrayBuffer'; import binaryStringToBlobOrBuffer from './binaryStringToBlobOrBuffer'; @@ -12,6 +13,7 @@ import typedBuffer from './typedBuffer'; export { atob, btoa, + arrayBufferToBlobOrBuffer, base64StringToBlobOrBuffer, binaryStringToArrayBuffer, binaryStringToBlobOrBuffer, diff --git a/packages/node_modules/pouchdb-fetch/src/fetch-browser.js b/packages/node_modules/pouchdb-fetch/src/fetch-browser.js index ffc924dc1e..a5bc1c1f47 100644 --- a/packages/node_modules/pouchdb-fetch/src/fetch-browser.js +++ b/packages/node_modules/pouchdb-fetch/src/fetch-browser.js @@ -1,6 +1,5 @@ 'use strict'; var f = fetch; -var h = Headers; -export { f as fetch, h as Headers }; +export { f as fetch }; diff --git a/packages/node_modules/pouchdb-fetch/src/fetch.js b/packages/node_modules/pouchdb-fetch/src/fetch.js index f1b95b4d80..8c5843516b 100644 --- a/packages/node_modules/pouchdb-fetch/src/fetch.js +++ b/packages/node_modules/pouchdb-fetch/src/fetch.js @@ -1,8 +1,7 @@ 'use strict'; -import nodeFetch, {Headers} from 'node-fetch'; -import fetchCookie from 'fetch-cookie'; +import makeFetchCookie from 'fetch-cookie'; -var fetch = fetchCookie(nodeFetch); +const fetchWithCookie = makeFetchCookie(fetch); -export { fetch, Headers }; +export { fetchWithCookie as fetch }; diff --git a/packages/node_modules/pouchdb-fetch/src/index.js b/packages/node_modules/pouchdb-fetch/src/index.js index 70e6512182..396f29a110 100644 --- a/packages/node_modules/pouchdb-fetch/src/index.js +++ b/packages/node_modules/pouchdb-fetch/src/index.js @@ -1 +1 @@ -export { fetch, Headers } from './fetch'; +export { fetch } from './fetch'; diff --git a/packages/node_modules/pouchdb-find/src/adapters/http/index.js b/packages/node_modules/pouchdb-find/src/adapters/http/index.js index 2efb3767f7..d39147c598 100644 --- a/packages/node_modules/pouchdb-find/src/adapters/http/index.js +++ b/packages/node_modules/pouchdb-find/src/adapters/http/index.js @@ -1,5 +1,4 @@ import { createError, generateErrorFromResponse } from 'pouchdb-errors'; -import { Headers } from 'pouchdb-fetch'; import massageCreateIndexRequest from '../../massageCreateIndexRequest'; import validateSelector from '../../validateSelector'; diff --git a/tests/component/test.ajax.js b/tests/component/test.ajax.js index 541650e48d..5f36d86f7f 100644 --- a/tests/component/test.ajax.js +++ b/tests/component/test.ajax.js @@ -15,9 +15,9 @@ describe('test.ajax.js', function () { res.end(JSON.stringify({ok: req.headers.cookie === 'Test=test'})); } }); - server.listen(6000, function () { - PouchDB.fetch('http://127.0.0.1:6000/install-cookie').then(function () { - return PouchDB.fetch('http://127.0.0.1:6000/check-cookie'); + server.listen(6100, function () { + PouchDB.fetch('http://127.0.0.1:6100/install-cookie').then(function () { + return PouchDB.fetch('http://127.0.0.1:6100/check-cookie'); }).then(function (response) { return response.json(); }).then(function (res) { @@ -32,8 +32,8 @@ describe('test.ajax.js', function () { var server = http.createServer(function (req, res) { res.end(JSON.stringify({ok: req.url === '/testdb/path'})); }); - server.listen(6000, function () { - var db = new PouchDB('http://127.0.0.1:6000/testdb', { skip_setup: true }); + server.listen(6100, function () { + var db = new PouchDB('http://127.0.0.1:6100/testdb', { skip_setup: true }); db.fetch('path').then(function (response) { return response.json(); }).then(function (res) { @@ -48,8 +48,8 @@ describe('test.ajax.js', function () { var server = http.createServer(function (req, res) { res.end(JSON.stringify({ok: req.url === '/root-path'})); }); - server.listen(6000, function () { - var db = new PouchDB('http://127.0.0.1:6000/testdb', { skip_setup: true }); + server.listen(6100, function () { + var db = new PouchDB('http://127.0.0.1:6100/testdb', { skip_setup: true }); db.fetch('/root-path').then(function (response) { return response.json(); }).then(function (res) { diff --git a/tests/component/test.replication_perf_regression.js b/tests/component/test.replication_perf_regression.js index 84595cdd3b..495bccc280 100644 --- a/tests/component/test.replication_perf_regression.js +++ b/tests/component/test.replication_perf_regression.js @@ -35,6 +35,8 @@ describe('test.replication_perf_regression.js', function () { }); after(function (done) { + // server.close takes surprisingly long + this.timeout(10000); server.close(done); }); diff --git a/tests/integration/utils.js b/tests/integration/utils.js index 4d81fc187f..4fc12474ec 100644 --- a/tests/integration/utils.js +++ b/tests/integration/utils.js @@ -32,7 +32,11 @@ testUtils.adapterType = function () { testUtils.readBlob = function (blob, callback) { if (testUtils.isNode()) { - callback(blob.toString('binary')); + if (blob.text) { + blob.text().then(text => callback(text)); + } else { + callback(blob.toString('binary')); + } } else { var reader = new FileReader(); reader.onloadend = function () { @@ -59,7 +63,11 @@ testUtils.readBlobPromise = function (blob) { testUtils.base64Blob = function (blob, callback) { if (testUtils.isNode()) { - callback(blob.toString('base64')); + if (blob.text) { + blob.text().then(text => callback(text)); + } else { + callback(blob.toString('base64')); + } } else { testUtils.readBlob(blob, function (binary) { callback(testUtils.btoa(binary));