UNPKG

@anglr/rest

Version:

Angular module representing rest services

76 lines 3.15 kB
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