UNPKG

@ngqp/core

Version:

Synchronizing form controls with the URL for Angular

87 lines 10 kB
import { convertToParamMap } from '@angular/router'; import { isObservable, of } from 'rxjs'; /** @internal */ // tslint:disable-next-line:triple-equals export const LOOSE_IDENTITY_COMPARATOR = (a, b) => a == b; /** @internal */ export const NOP = () => { }; /** @internal */ export function isMissing(obj) { return obj === undefined || obj === null; } /** @internal */ export function undefinedToNull(obj) { if (obj === undefined) { return null; } return obj; } /** @internal */ export function isPresent(obj) { return !isMissing(obj); } /** @internal */ export function isFunction(obj) { return isPresent(obj) && typeof obj === 'function'; } /** @internal */ export function wrapTryCatch(fn, msg) { return function () { try { return fn.apply(this, arguments); } catch (err) { console.error(msg, err); return null; } }; } /** @internal */ export function areEqualUsing(first, second, comparator) { const comparison = comparator(first, second); if (typeof comparison === 'boolean') { return comparison; } return comparison === 0; } /** @internal */ export function filterParamMap(paramMap, keys) { const params = {}; keys .filter(key => paramMap.keys.includes(key)) .forEach(key => params[key] = paramMap.getAll(key)); return convertToParamMap(params); } /** @internal */ export function compareParamMaps(first, second) { if ((first && !second) || (second && !first)) { return false; } if (!compareStringArraysUnordered(first.keys, second.keys)) { return false; } return first.keys.every(key => compareStringArraysUnordered(first.getAll(key), second.getAll(key))); } /** @internal */ export function compareStringArraysUnordered(first, second) { if (!first && !second) { return true; } if ((first && !second) || (second && !first)) { return false; } if (first.length !== second.length) { return false; } const sortedFirst = first.sort(); const sortedSecond = second.sort(); return sortedFirst.every((firstKey, index) => firstKey === sortedSecond[index]); } /** @internal */ export function wrapIntoObservable(input) { if (isObservable(input)) { return input; } return of(input); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3FwL2NvcmUvc3JjLyIsInNvdXJjZXMiOlsibGliL3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGlCQUFpQixFQUFvQixNQUFNLGlCQUFpQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxZQUFZLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBR3BELGdCQUFnQjtBQUNoQix5Q0FBeUM7QUFDekMsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsQ0FBSSxDQUFJLEVBQUUsQ0FBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBRW5FLGdCQUFnQjtBQUNoQixNQUFNLENBQUMsTUFBTSxHQUFHLEdBQWEsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDO0FBRXRDLGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsU0FBUyxDQUFDLEdBQVE7SUFDOUIsT0FBTyxHQUFHLEtBQUssU0FBUyxJQUFJLEdBQUcsS0FBSyxJQUFJLENBQUM7QUFDN0MsQ0FBQztBQUVELGdCQUFnQjtBQUNoQixNQUFNLFVBQVUsZUFBZSxDQUFJLEdBQWtCO0lBQ2pELElBQUksR0FBRyxLQUFLLFNBQVMsRUFBRTtRQUNuQixPQUFPLElBQUksQ0FBQztLQUNmO0lBRUQsT0FBTyxHQUFHLENBQUM7QUFDZixDQUFDO0FBRUQsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSxTQUFTLENBQUksR0FBTTtJQUMvQixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFFRCxnQkFBZ0I7QUFDaEIsTUFBTSxVQUFVLFVBQVUsQ0FBQyxHQUFRO0lBQy9CLE9BQU8sU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLE9BQU8sR0FBRyxLQUFLLFVBQVUsQ0FBQztBQUN2RCxDQUFDO0FBRUQsZ0JBQWdCO0FBQ2hCLE1BQU0sVUFBVSxZQUFZLENBQXFCLEVBQUss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QUFLLENBQUM7S0FDaEI7SUFFRCxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29udmVydFRvUGFyYW1NYXAsIFBhcmFtTWFwLCBQYXJhbXMgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgaXNPYnNlcnZhYmxlLCBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQ29tcGFyYXRvciB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKiogQGludGVybmFsICovXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6dHJpcGxlLWVxdWFsc1xuZXhwb3J0IGNvbnN0IExPT1NFX0lERU5USVRZX0NPTVBBUkFUT1IgPSA8VD4oYTogVCwgYjogVCkgPT4gYSA9PSBiO1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgY29uc3QgTk9QOiBGdW5jdGlvbiA9ICgpID0+IHt9O1xuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gaXNNaXNzaW5nKG9iajogYW55KTogb2JqIGlzIG51bGwgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiBvYmogPT09IHVuZGVmaW5lZCB8fCBvYmogPT09IG51bGw7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB1bmRlZmluZWRUb051bGw8VD4ob2JqOiBUIHwgdW5kZWZpbmVkKTogVCB8IG51bGwge1xuICAgIGlmIChvYmogPT09IHVuZGVmaW5lZCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICByZXR1cm4gb2JqO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gaXNQcmVzZW50PFQ+KG9iajogVCk6IG9iaiBpcyBFeGNsdWRlPFQsIG51bGwgfCB1bmRlZmluZWQ+IHtcbiAgICByZXR1cm4gIWlzTWlzc2luZyhvYmopO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gaXNGdW5jdGlvbihvYmo6IGFueSk6IG9iaiBpcyBGdW5jdGlvbiB7XG4gICAgcmV0dXJuIGlzUHJlc2VudChvYmopICYmIHR5cGVvZiBvYmogPT09ICdmdW5jdGlvbic7XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBmdW5jdGlvbiB3cmFwVHJ5Q2F0Y2g8VCBleHRlbmRzIEZ1bmN0aW9uPihmbjogVCwgbXNnOiBzdHJpbmcpOiBUIHtcbiAgICByZXR1cm4gPGFueT5mdW5jdGlvbiAodGhpczogYW55KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKG1zZywgZXJyKTtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgfTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFyZUVxdWFsVXNpbmc8VD4oZmlyc3Q6IFQgfCBudWxsLCBzZWNvbmQ6IFQgfCBudWxsLCBjb21wYXJhdG9yOiBDb21wYXJhdG9yPFQgfCBudWxsPik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGNvbXBhcmlzb24gPSBjb21wYXJhdG9yKGZpcnN0LCBzZWNvbmQpO1xuICAgIGlmICh0eXBlb2YgY29tcGFyaXNvbiA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICAgIHJldHVybiBjb21wYXJpc29uO1xuICAgIH1cblxuICAgIHJldHVybiBjb21wYXJpc29uID09PSAwO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyUGFyYW1NYXAocGFyYW1NYXA6IFBhcmFtTWFwLCBrZXlzOiBzdHJpbmdbXSk6IFBhcmFtTWFwIHtcbiAgICBjb25zdCBwYXJhbXM6IFBhcmFtcyA9IHt9O1xuICAgIGtleXNcbiAgICAgICAgLmZpbHRlcihrZXkgPT4gcGFyYW1NYXAua2V5cy5pbmNsdWRlcyhrZXkpKVxuICAgICAgICAuZm9yRWFjaChrZXkgPT4gcGFyYW1zWyBrZXkgXSA9IHBhcmFtTWFwLmdldEFsbChrZXkpKTtcblxuICAgIHJldHVybiBjb252ZXJ0VG9QYXJhbU1hcChwYXJhbXMpO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVBhcmFtTWFwcyhmaXJzdDogUGFyYW1NYXAsIHNlY29uZDogUGFyYW1NYXApOiBib29sZWFuIHtcbiAgICBpZiAoKGZpcnN0ICYmICFzZWNvbmQpIHx8IChzZWNvbmQgJiYgIWZpcnN0KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKCFjb21wYXJlU3RyaW5nQXJyYXlzVW5vcmRlcmVkKGZpcnN0LmtleXMsIHNlY29uZC5rZXlzKSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZpcnN0LmtleXMuZXZlcnkoa2V5ID0+XG4gICAgICAgIGNvbXBhcmVTdHJpbmdBcnJheXNVbm9yZGVyZWQoZmlyc3QuZ2V0QWxsKGtleSksIHNlY29uZC5nZXRBbGwoa2V5KSlcbiAgICApO1xufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVN0cmluZ0FycmF5c1Vub3JkZXJlZChmaXJzdDogc3RyaW5nW10sIHNlY29uZDogc3RyaW5nW10pOiBib29sZWFuIHtcbiAgICBpZiAoIWZpcnN0ICYmICFzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKChmaXJzdCAmJiAhc2Vjb25kKSB8fCAoc2Vjb25kICYmICFmaXJzdCkpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGlmIChmaXJzdC5sZW5ndGggIT09IHNlY29uZC5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHNvcnRlZEZpcnN0ID0gZmlyc3Quc29ydCgpO1xuICAgIGNvbnN0IHNvcnRlZFNlY29uZCA9IHNlY29uZC5zb3J0KCk7XG4gICAgcmV0dXJuIHNvcnRlZEZpcnN0LmV2ZXJ5KChmaXJzdEtleSwgaW5kZXgpID0+IGZpcnN0S2V5ID09PSBzb3J0ZWRTZWNvbmRbaW5kZXhdKTtcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHdyYXBJbnRvT2JzZXJ2YWJsZTxUPihpbnB1dDogVCB8IE9ic2VydmFibGU8VD4pOiBPYnNlcnZhYmxlPFQ+IHtcbiAgICBpZiAoaXNPYnNlcnZhYmxlKGlucHV0KSkge1xuICAgICAgICByZXR1cm4gaW5wdXQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIG9mKGlucHV0KTtcbn0iXX0=