@@ -201,11 +201,17 @@ export class BaseQuery extends Pagination {
201201 * const result = await stack.asset(asset_uid).fetch();
202202 */
203203
204- async find < T > ( ) : Promise < FindResponse < T > > {
204+ async find < T > ( encode : boolean = false ) : Promise < FindResponse < T > > {
205205 let requestParams : { [ key : string ] : any } = this . _queryParams ;
206206
207207 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 } ;
209215 }
210216
211217 const getRequestOptions : any = { params : requestParams } ;
@@ -220,4 +226,29 @@ export class BaseQuery extends Pagination {
220226
221227 return response as FindResponse < T > ;
222228 }
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+ }
223254}
0 commit comments