simple-pure-utils
Version:
Funciones puras para manipulación de objetos, arreglos, promesas y observables
69 lines • 6.64 kB
JavaScript
/**Codifica el valor de un query parameter*/
export function encodeUrlParameterValue(parameter) {
const type = typeof (parameter);
let str = null;
if (type == "number" || type == "boolean" || type == "string") {
str = parameter.toString();
}
if (parameter instanceof Date) {
str = parameter.toISOString();
}
if (str == null) {
throw new Error("All URL parameters must be a number, boolean, string, Date or null");
}
return encodeURIComponent(str);
}
/**Convierte un UrlParameters a un arreglo de key-values */
function urlParamsToKeyValuePair(urlParameters) {
//Aplanamos los key values que sean arreglos:
const keyValues = Object
.keys(urlParameters)
//Extraemos las claves y los valores
.map(x => ({ key: x, value: urlParameters[x] }))
//Todos los dejamos como arreglo o si no, en un arreglo de un elemento
.map(x => ({ key: x.key, array: Array.isArray(x.value) ? x.value : [x.value] }))
//Creamos key values repetidos por cada value en el arreglo
.map(x => x.array.map(y => ({ key: x.key, value: y })))
.reduce((a, b) => a.concat(b), [])
.filter(x => x.value != null)
.map(x => ({ key: x.key, value: x.value }));
return keyValues;
}
/**Devuelve una cadena con todos los parametros url, separador por &. El caracter ? inicial no se devuelve por esta función. Si no hay ningun
* parámetro que devolver se devuelve una cadena vacia
*/
export function encodeUrlParameters(urlParameters) {
const keyValues = urlParamsToKeyValuePair(urlParameters);
const paramsStr = keyValues.filter(x => x.value != null).map(x => x.key + "=" + encodeUrlParameterValue(x.value)).join("&");
return paramsStr;
}
/**
* Pega los parametros ya codificados a una URL con el separador ?. Si parameters esta vacio devuelve la URL original tal cual
*/
export function appendEncodedUrlParameters(url, paramStr) {
return paramStr ? (url + "?" + paramStr) : url;
}
/**Determina si una URL es absoluta */
export function isUrlAbsolute(url) {
//Origen: https://stackoverflow.com/questions/10687099/how-to-test-if-a-url-string-is-absolute-or-relative
if (url.indexOf('//') === 0) {
return true;
} // URL is protocol-relative (= absolute)
if (url.indexOf('://') === -1) {
return false;
} // URL has no protocol (= relative)
if (url.indexOf('.') === -1) {
return false;
} // URL does not contain a dot, i.e. no TLD (= relative, possibly REST)
if (url.indexOf('/') === -1) {
return false;
} // URL does not contain a single slash (= relative)
if (url.indexOf(':') > url.indexOf('/')) {
return false;
} // The first colon comes after the first slash (= relative)
if (url.indexOf('://') < url.indexOf('.')) {
return true;
} // Protocol is defined before first dot (= absolute)
return false; // Anything else must be relative
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXJsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3VybC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSw0Q0FBNEM7QUFDNUMsTUFBTSxVQUFVLHVCQUF1QixDQUFDLFNBQTZCO0lBQ2pFLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUNoQyxJQUFJLEdBQUcsR0FBa0IsSUFBSSxDQUFDO0lBQzlCLElBQUksSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLElBQUksU0FBUyxJQUFJLElBQUksSUFBSSxRQUFRLEVBQUU7UUFDM0QsR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLEVBQUUsQ0FBQztLQUM5QjtJQUVELElBQUksU0FBUyxZQUFZLElBQUksRUFBRTtRQUMzQixHQUFHLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0tBQ2pDO0lBRUQsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFO1FBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO0tBQ3pGO0lBRUQsT0FBTyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQyxDQUFDO0FBRUQsNERBQTREO0FBQzVELFNBQVMsdUJBQXVCLENBQWdDLGFBQXNCO0lBQ2xGLDZDQUE2QztJQUM3QyxNQUFNLFNBQVMsR0FBRyxNQUFNO1NBQ25CLElBQUksQ0FBQyxhQUFhLENBQUM7UUFDcEIsb0NBQW9DO1NBQ25DLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLEtBQUssRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ2hELHNFQUFzRTtTQUNyRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxD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