Skip to content

Commit 1a7ef2c

Browse files
use native UrlSearchParams
1 parent f96705b commit 1a7ef2c

File tree

6 files changed

+18
-18
lines changed

6 files changed

+18
-18
lines changed

__TESTS__/unit/url/url.test.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,13 +96,13 @@ describe('Tests for URL configuration', () => {
9696
});
9797

9898
it('Should include query params', function () {
99-
const image = createNewImage('sample', {cloudName: 'demo'}, {queryParams: {"_i": "abcde", "_z": 1234}});
99+
const image = createNewImage('sample', {cloudName: 'demo'}, {urlSearchParams: {"_i": "abcde", "_z": 1234, "_t": false}});
100100
const url = image.toURL();
101-
expect(url).toEqual(`https://res.cloudinary.com/demo/image/upload/sample?_i=abcde&_z=1234`);
101+
expect(url).toEqual(`https://res.cloudinary.com/demo/image/upload/sample?_i=abcde&_z=1234&_t=false`);
102102
});
103103

104104
it('Should include query params with analytics', function () {
105-
const image = createNewImage('sample', {cloudName: 'demo'}, {analytics: true, queryParams: {"_i": "abcde"}});
105+
const image = createNewImage('sample', {cloudName: 'demo'}, {analytics: true, urlSearchParams: {"_i": "abcde"}});
106106
const url = image.toURL();
107107
expect(url).toEqual(`https://res.cloudinary.com/demo/image/upload/sample?_i=abcde&_a=E`);
108108
});

__TESTS__/unit/urlConfig.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ describe('It tests a combination of Cloudinary URL and Configuration', () => {
158158
.setShorten(true)
159159
.setSignUrl(true)
160160
.setUseRootPath(true)
161-
.setQueryParams({foo: 'bar'});
161+
.setUrlSearchParams({foo: 'bar', baz: 111, dummy: true});
162162

163163
expect(conf.cname).toBe('foo');
164164
expect(conf.forceVersion).toBe(true);
@@ -168,6 +168,6 @@ describe('It tests a combination of Cloudinary URL and Configuration', () => {
168168
expect(conf.shorten).toBe(true);
169169
expect(conf.signUrl).toBe(true);
170170
expect(conf.useRootPath).toBe(true);
171-
expect(conf.queryParams).toEqual({foo: 'bar'});
171+
expect(conf.setUrlSearchParams).toEqual({foo: 'bar', baz: 111, dummy: true});
172172
});
173173
});

src/assets/CloudinaryFile.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -283,17 +283,17 @@ class CloudinaryFile {
283283
.replace(/\?/g, '%3F')
284284
.replace(/=/g, '%3D');
285285

286-
const queryParams: Record<string, string | number> = this.urlConfig.queryParams || {};
286+
const urlSearchParams = new URLSearchParams(this.urlConfig.urlSearchParams as Record<string, string>);
287287

288288
// urlConfig.analytics is true by default, has to be explicitly set to false to overwrite
289289
// Don't add analytics when publicId includes a '?' to not risk changing existing query params
290290
if (this.urlConfig.analytics !== false && !(publicID.includes('?'))) {
291-
queryParams._a = getSDKAnalyticsSignature(trackedAnalytics);
291+
urlSearchParams.set("_a", getSDKAnalyticsSignature(trackedAnalytics));
292292
}
293293

294-
const queryParamsStr = `${Object.entries(queryParams).map(([key, value]) => `${key}=${value}`).join('&')}`;
295-
if (queryParamsStr) {
296-
return `${safeURL}?${queryParamsStr}`;
294+
const searchParams = urlSearchParams.toString();
295+
if (searchParams) {
296+
return `${safeURL}?${searchParams}`;
297297
} else {
298298
return safeURL;
299299
}

src/config/URLConfig.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class URLConfig extends Config implements IURLConfig {
1313
useRootPath?: boolean;
1414
secure?: boolean;
1515
forceVersion?: boolean;
16-
queryParams?: Record<string, string | number>
16+
urlSearchParams?: Record<string, string | number | boolean>;
1717

1818
/**
1919
* @param {IURLConfig} userURLConfig
@@ -104,10 +104,10 @@ class URLConfig extends Config implements IURLConfig {
104104
}
105105

106106
/**
107-
* @param params Sets additional query params
107+
* @param params Sets additional params
108108
*/
109-
setQueryParams(params: Record<string, string | number>):this {
110-
this.queryParams = params;
109+
setUrlSearchParams(params: Record<string, string | number | boolean>):this {
110+
this.urlSearchParams = params;
111111
return this;
112112
}
113113
}

src/config/interfaces/Config/IURLConfig.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
* @prop {boolean} [secure]
1414
* @prop {boolean} [forceVersion]
1515
* @prop {boolean} [analytics]
16-
* @prop {object} [additionalQueryParams]
16+
* @prop {object} [urlSearchParams]
1717
* @example
1818
* import Cloudinary from '@cloudinary/url-gen';
1919
* // The Cloudinary Instance accepts a URLConfig under the `url` key
@@ -96,9 +96,9 @@ interface IURLConfig {
9696
forceVersion?: boolean;
9797

9898
/**
99-
* Additional query params to be added to the URL
99+
* Additional params to be added to the URL
100100
*/
101-
queryParams?: Record<string, string | number>
101+
urlSearchParams?: Record<string, string | number | boolean>
102102
}
103103

104104
export default IURLConfig;

src/internal/internalConstants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ export const ALLOWED_URL_CONFIG = [
1717
'secure',
1818
'forceVersion',
1919
'analytics',
20-
'queryParams'
20+
'urlSearchParams'
2121
];
2222

2323
/**

0 commit comments

Comments
 (0)