@anglr/rest
Version:
Angular module representing rest services
76 lines • 3.15 kB
JavaScript
import { Inject, Injectable } from '@angular/core';
import { HttpParams } from '@angular/common/http';
import { isBlank, isBoolean, isFunction, isJsObject, isNumber, isString } from '@jscrpt/common';
import { REST_DATE_API } from '../tokens';
import * as i0 from "@angular/core";
/**
* Query string serializer used for serializing objects into query string
*/
export class QueryStringSerializer {
//######################### constructor #########################
constructor(_dateApi) {
this._dateApi = _dateApi;
}
//######################### public methods #########################
/**
* Serializes object into query string
* @param obj - Object to be serialized
* @param keyPrefix - Key prefix to be used
*/
serializeObject(obj, keyPrefix = '') {
if (!isJsObject(obj)) {
return null;
}
const queryParams = [];
const switchVal = (key, val) => {
//ignore empty values
if (isBlank(val) || isFunction(val)) {
return;
}
else if (Array.isArray(val)) {
val.forEach((itm, index) => {
switchVal(isJsObject(itm) ? `${key}[${index}]` : key, itm);
});
}
//is date
else if (this._dateApi.isDate(val)) {
queryParams.push(`${keyPrefix}${key}=${this._dateApi.toString(val)}`);
}
else if (isString(val)) {
queryParams.push(`${keyPrefix}${key}=${val}`);
}
else if (isNumber(val) || isBoolean(val)) {
queryParams.push(`${keyPrefix}${key}=${val.toString()}`);
}
else if (isJsObject(val)) {
queryParams.push(this.serializeObject(val, `${key}.`));
}
};
Object.keys(obj).forEach(key => {
const val = obj[key];
switchVal(key, val);
});
return queryParams.join('&');
}
/**
* Serializes object into HttpParams object
* @param obj - Object to be serialized
*/
serializeObjectToParams(obj) {
const queryString = this.serializeObject(obj);
if (isBlank(queryString)) {
return null;
}
return new HttpParams({ fromString: queryString });
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.0", ngImport: i0, type: QueryStringSerializer, deps: [{ token: REST_DATE_API }], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.0", ngImport: i0, type: QueryStringSerializer, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.0", ngImport: i0, type: QueryStringSerializer, decorators: [{
type: Injectable,
args: [{ providedIn: 'root' }]
}], ctorParameters: () => [{ type: undefined, decorators: [{
type: Inject,
args: [REST_DATE_API]
}] }] });
//# sourceMappingURL=queryStringSerializer.js.map