@@ -201,11 +201,17 @@ export class BaseQuery extends Pagination {
201
201
* const result = await stack.asset(asset_uid).fetch();
202
202
*/
203
203
204
- async find < T > ( ) : Promise < FindResponse < T > > {
204
+ async find < T > ( encode : boolean = false ) : Promise < FindResponse < T > > {
205
205
let requestParams : { [ key : string ] : any } = this . _queryParams ;
206
206
207
207
if ( Object . keys ( this . _parameters ) . length > 0 ) {
208
- requestParams = { ...this . _queryParams , query : { ...this . _parameters } } ;
208
+ let queryParams = { ...this . _parameters } ;
209
+
210
+ if ( encode ) {
211
+ queryParams = this . encodeQueryParams ( queryParams ) ;
212
+ }
213
+
214
+ requestParams = { ...this . _queryParams , query : queryParams } ;
209
215
}
210
216
211
217
const getRequestOptions : any = { params : requestParams } ;
@@ -220,4 +226,29 @@ export class BaseQuery extends Pagination {
220
226
221
227
return response as FindResponse < T > ;
222
228
}
229
+
230
+ /**
231
+ * @private
232
+ * @method encodeQueryParams
233
+ * @description Encodes query parameters to handle special characters
234
+ * @param {params } params - Parameters to encode
235
+ * @returns {params } Encoded parameters
236
+ */
237
+ private encodeQueryParams ( params : params ) : params {
238
+ const encodedParams : params = { } ;
239
+
240
+ for ( const [ key , value ] of Object . entries ( params ) ) {
241
+ if ( typeof value === 'string' ) {
242
+ encodedParams [ key ] = encodeURIComponent ( value ) ;
243
+ } else if ( typeof value === 'object' && value !== null ) {
244
+ // Handle nested objects recursively
245
+ encodedParams [ key ] = this . encodeQueryParams ( value as params ) ;
246
+ } else {
247
+ // Keep non-string values as is (numbers, booleans, etc.)
248
+ encodedParams [ key ] = value ;
249
+ }
250
+ }
251
+
252
+ return encodedParams ;
253
+ }
223
254
}
0 commit comments