diff --git a/.talismanrc b/.talismanrc index 7773ca7..f3e55f2 100644 --- a/.talismanrc +++ b/.talismanrc @@ -8,4 +8,6 @@ fileignoreconfig: checksum: 5baabd7d2c391648163f9371f0e5e9484f8fb90fa2284cfc378732ec3192c193 - filename: test/request.spec.ts checksum: 87afd3bb570fd52437404cbe69a39311ad8a8c73bca9d075ecf88652fd3e13f6 +- filename: src/lib/request.ts + checksum: 86d761c4f50fcf377e52c98e0c4db6f06be955790fc5a0f2ba8fe32a88c60825 version: "" \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index f12f34c..d95ce7a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## Change log +### Version: 1.3.1 +#### Date: Sept-01-2025 + - Fix: Replace URLSearchParams.set() with React Native compatible implementation + ### Version: 1.3.0 #### Date: Aug-25-2025 - Fix: Remove custom error object and throw axios error diff --git a/package-lock.json b/package-lock.json index dcafd2a..5e7329b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@contentstack/core", - "version": "1.3.0", + "version": "1.3.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@contentstack/core", - "version": "1.3.0", + "version": "1.3.1", "license": "MIT", "dependencies": { "axios": "^1.11.0", diff --git a/package.json b/package.json index e67785d..06eea1c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/core", - "version": "1.3.0", + "version": "1.3.1", "type": "commonjs", "main": "./dist/cjs/src/index.js", "types": "./dist/cjs/src/index.d.ts", diff --git a/src/lib/request.ts b/src/lib/request.ts index 501c855..5b9000a 100644 --- a/src/lib/request.ts +++ b/src/lib/request.ts @@ -2,22 +2,24 @@ import { AxiosInstance } from './types'; /** * Handles array parameters properly with & separators + * React Native compatible implementation without URLSearchParams.set() */ function serializeParams(params: any): string { if (!params) return ''; - const urlParams = new URLSearchParams(); + + const parts: string[] = []; Object.keys(params).forEach(key => { const value = params[key]; if (Array.isArray(value)) { value.forEach(item => { - urlParams.append(key, item); + parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(item)}`); }); - } else { - urlParams.set(key, value); + } else if (value !== null && value !== undefined) { + parts.push(`${encodeURIComponent(key)}=${encodeURIComponent(value)}`); } }); - return urlParams.toString(); + return parts.join('&'); } /** diff --git a/test/request.spec.ts b/test/request.spec.ts index 6784da1..40a9ec2 100644 --- a/test/request.spec.ts +++ b/test/request.spec.ts @@ -319,4 +319,29 @@ describe('Request tests', () => { const result = await getData(client, url, requestData); expect(result).toEqual(mockResponse); }); + + it('should handle React Native compatibility by avoiding URLSearchParams.set()', async () => { + const client = httpClient({}); + const mock = new MockAdapter(client as any); + const url = '/your-api-endpoint'; + const mockResponse = { data: 'mocked' }; + const requestData = { + params: { + limit: 10, + skip: 0, + include: ['field1', 'field2'], + query: { title: 'test' }, + nullValue: null, + undefinedValue: undefined, + emptyString: '', + specialChars: 'hello world & more' + } + }; + + mock.onGet(url).reply(200, mockResponse); + + // The test passes if no "URLSearchParams.set is not implemented" error is thrown + const result = await getData(client, url, requestData); + expect(result).toEqual(mockResponse); + }); });