From 42e40e5593b62cad224f73a6fce29676a3436d54 Mon Sep 17 00:00:00 2001 From: hulkoba Date: Mon, 23 Mar 2026 13:15:03 +0100 Subject: [PATCH 1/5] refactor(pouch-fetch): deprecate node-fetch --- package-lock.json | 34 +++++-------------- package.json | 1 - .../pouchdb-abstract-mapreduce/src/index.js | 1 - .../pouchdb-adapter-http/src/index.js | 21 ++++-------- .../pouchdb-fetch/src/fetch-browser.js | 3 +- .../node_modules/pouchdb-fetch/src/fetch.js | 7 ++-- .../node_modules/pouchdb-fetch/src/index.js | 2 +- .../pouchdb-find/src/adapters/http/index.js | 1 - tests/integration/utils.js | 12 +++++-- 9 files changed, 30 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 4cc4d52894..e8e413aec9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -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" }, @@ -4281,6 +4280,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-2.2.0.tgz", "integrity": "sha512-h9AgfjURuCgA2+2ISl8GbavpUdR+WGAM2McW/ovn4tVccegp8ZqCKWSBR8uRdM8dDNlx5WdKRWxBYUwteLDCNQ==", + "license": "Unlicense", "dependencies": { "set-cookie-parser": "^2.4.8", "tough-cookie": "^4.0.0" @@ -7311,25 +7311,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", @@ -9719,7 +9700,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", @@ -10865,7 +10846,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", @@ -11394,12 +11376,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..3f4c824e7f 100644 --- a/package.json +++ b/package.json @@ -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..c36b6a253d 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, @@ -514,13 +514,8 @@ 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 = Buffer.from(arrayBuffer); let data; if (opts.binary) { @@ -635,13 +630,9 @@ 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(); - } + + const arrayBuffer = await response.arrayBuffer(); + const blob = Buffer.from(arrayBuffer); // TODO: also remove if (typeof process !== 'undefined' && !process.browser) { 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/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)); From a27fe1dc0d6713d7833757b41a39944356e15cb9 Mon Sep 17 00:00:00 2001 From: hulkoba Date: Mon, 23 Mar 2026 13:18:05 +0100 Subject: [PATCH 2/5] chore(pkg): update cookie-fetch to the latest version --- package-lock.json | 53 ++++++++++++++++++++++++++++++++++++++++------- package.json | 2 +- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8e413aec9..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", @@ -4277,13 +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": { @@ -8985,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", @@ -9071,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", @@ -9493,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", @@ -10776,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", @@ -10825,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", @@ -10839,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" } @@ -11147,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" } @@ -11248,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" diff --git a/package.json b/package.json index 3f4c824e7f..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", From d027d24b61241c67bc0a90928af50e8ca13c5499 Mon Sep 17 00:00:00 2001 From: Alex Feyerke Date: Fri, 10 Apr 2026 10:49:21 +0200 Subject: [PATCH 3/5] fix: add an arrayBufferToBlobOrBuffer helper This also removes the somewhat complicated setting of the `type` on the blob/buffer attribute by the calling functions, and puts that in the helper instead. The old TODO comment suggests this appoach was meant to be temporary anyway. --- .../pouchdb-adapter-http/src/index.js | 16 +++------------- .../pouchdb-binary-utils/package.json | 3 ++- .../src/arrayBufferToBlobOrBuffer-browser.js | 8 ++++++++ .../src/arrayBufferToBlobOrBuffer.js | 10 ++++++++++ .../pouchdb-binary-utils/src/index.js | 2 ++ 5 files changed, 25 insertions(+), 14 deletions(-) create mode 100644 packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer-browser.js create mode 100644 packages/node_modules/pouchdb-binary-utils/src/arrayBufferToBlobOrBuffer.js diff --git a/packages/node_modules/pouchdb-adapter-http/src/index.js b/packages/node_modules/pouchdb-adapter-http/src/index.js index c36b6a253d..d02bac03b8 100644 --- a/packages/node_modules/pouchdb-adapter-http/src/index.js +++ b/packages/node_modules/pouchdb-adapter-http/src/index.js @@ -23,6 +23,7 @@ import { import { atob, btoa, + arrayBufferToBlobOrBuffer, binaryStringToBlobOrBuffer as binStringToBluffer, base64StringToBlobOrBuffer as b64StringToBluffer, blobOrBufferToBase64 as blufferToBase64 @@ -515,14 +516,10 @@ function HttpPouch(opts, callback) { const response = await ourFetch(genDBUrl(host, path)); const arrayBuffer = await response.arrayBuffer(); - const blob = Buffer.from(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) { @@ -632,15 +629,8 @@ function HttpPouch(opts, callback) { contentType = response.headers.get('content-type'); const arrayBuffer = await response.arrayBuffer(); - const blob = Buffer.from(arrayBuffer); + const blob = arrayBufferToBlobOrBuffer(arrayBuffer, contentType); - // TODO: also remove - if (typeof process !== 'undefined' && !process.browser) { - const typeFieldDescriptor = Object.getOwnPropertyDescriptor(blob.__proto__, 'type'); - if (!typeFieldDescriptor || typeFieldDescriptor.set) { - blob.type = 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, From 630d240e184608b4035541379d0db08e2782a556 Mon Sep 17 00:00:00 2001 From: Alex Feyerke Date: Fri, 10 Apr 2026 13:06:42 +0200 Subject: [PATCH 4/5] tests: port 6000 is blocked in native fetch, use different port for ajax tests --- tests/component/test.ajax.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) 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) { From 83f2c590491588798b242797ac38a10cd0d8a2ec Mon Sep 17 00:00:00 2001 From: Alex Feyerke Date: Fri, 10 Apr 2026 13:10:08 +0200 Subject: [PATCH 5/5] tests: increase after hook timeout for perf regression test --- tests/component/test.replication_perf_regression.js | 2 ++ 1 file changed, 2 insertions(+) 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); });