@terminus/ngx-tools
Version:
[![CircleCI][circle-badge]][circle-link] [![codecov][codecov-badge]][codecov-project] [![semantic-release][semantic-release-badge]][semantic-release] [![MIT License][license-image]][license-url] <br> [![NPM version][npm-version-image]][npm-url] [![Github
54 lines • 6.24 kB
JavaScript
import { objectDeepParse } from '../object-deep-parse/object-deep-parse';
/**
* Utility class to assist with pulling specific values from a `SimpleChanges` object.
*/
export class NgChangeObjectValueParser {
/**
* Function to parse previousValue from triggered by changes on ngOnChange
*
* @param changes - SimpleChanges
* @param path - string
* @returns lowest layer value or changes object itself when path cannot be parsed
*
* @example
* valueParser.getOldValue(myChanges, 'my.path')
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static getOldValue(changes, path) {
const [keys, key] = this.parsePath(path);
return (key && changes[key]) ? objectDeepParse(changes[key].previousValue, keys) : undefined;
}
/**
* Function to parse currentValue from triggered by changes on ngOnChange
*
* @param changes - SimpleChanges
* @param path - string
* @returns lowest layer value or changes object itself when path cannot be parsed
*
* @example
* valueParser.getNewValue(myChanges, 'my.path')
*/
// eslint-disable-next-line @typescript-eslint/no-explicit-any
static getNewValue(changes, path) {
const [keys, key] = this.parsePath(path);
return (key && changes[key]) ? objectDeepParse(changes[key].currentValue, keys) : undefined;
}
/**
* Function to parse path to get keys for each layer
*
* @param path - string
* @returns an array of two elements, one being an array of all the keys except first one, one being the first key
*
* @example
* valueParser.parsePath('my.path') // Returns: [['my'], 'path']
*/
static parsePath(path) {
const keys = path.split('.');
let key = keys.shift();
if (!key) {
key = keys[0];
}
return [keys, key];
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmdjaGFuZ2Utb2JqZWN0LXZhbHVlLXBhcnNlci5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B0ZXJtaW51cy9uZ3gtdG9vbHMvdXRpbGl0aWVzLyIsInNvdXJjZXMiOlsibmdjaGFuZ2Utb2JqZWN0LXZhbHVlLXBhcnNlci9uZ2NoYW5nZS1vYmplY3QtdmFsdWUtcGFyc2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUd6RTs7R0FFRztBQUNILE1BQU0sT0FBTyx5QkFBeUI7SUFDcEM7Ozs7Ozs7OztPQVNHO0lBQ0gsOERBQThEO0lBQ3ZELE1BQU0sQ0FBQyxXQUFXLENBQUMsT0FBc0IsRUFBRSxJQUFZO1FBQzVELE1BQU0sQ0FBQyxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxPQUFPLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO0lBQy9GLENBQUM7SUFHRDs7Ozs7Ozs7O09BU0c7SUFDSCw4REFBOEQ7SUFDdkQsTUFBTSxDQUFDLFdBQVcsQ0FBQyxPQUFzQixFQUFFLElBQVk7UUFDNUQsTUFBTSxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLE9BQU8sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7SUFDOUYsQ0FBQztJQUdEOzs7Ozs7OztPQVFHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFZO1FBQ2xDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBRXZCLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDUixHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ2Y7UUFDRCxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3JCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgb2JqZWN0RGVlcFBhcnNlIH0gZnJvbSAnLi4vb2JqZWN0LWRlZXAtcGFyc2Uvb2JqZWN0LWRlZXAtcGFyc2UnO1xuXG5cbi8qKlxuICogVXRpbGl0eSBjbGFzcyB0byBhc3Npc3Qgd2l0aCBwdWxsaW5nIHNwZWNpZmljIHZhbHVlcyBmcm9tIGEgYFNpbXBsZUNoYW5nZXNgIG9iamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5nQ2hhbmdlT2JqZWN0VmFsdWVQYXJzZXIge1xuICAvKipcbiAgICogRnVuY3Rpb24gdG8gcGFyc2UgcHJldmlvdXNWYWx1ZSBmcm9tIHRyaWdnZXJlZCBieSBjaGFuZ2VzIG9uIG5nT25DaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIGNoYW5nZXMgLSBTaW1wbGVDaGFuZ2VzXG4gICAqIEBwYXJhbSBwYXRoIC0gc3RyaW5nXG4gICAqIEByZXR1cm5zIGxvd2VzdCBsYXllciB2YWx1ZSBvciBjaGFuZ2VzIG9iamVjdCBpdHNlbGYgd2hlbiBwYXRoIGNhbm5vdCBiZSBwYXJzZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdmFsdWVQYXJzZXIuZ2V0T2xkVmFsdWUobXlDaGFuZ2VzLCAnbXkucGF0aCcpXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgc3RhdGljIGdldE9sZFZhbHVlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMsIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgW2tleXMsIGtleV0gPSB0aGlzLnBhcnNlUGF0aChwYXRoKTtcbiAgICByZXR1cm4gKGtleSAmJiBjaGFuZ2VzW2tleV0pID8gb2JqZWN0RGVlcFBhcnNlKGNoYW5nZXNba2V5XS5wcmV2aW91c1ZhbHVlLCBrZXlzKSA6IHVuZGVmaW5lZDtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIEZ1bmN0aW9uIHRvIHBhcnNlIGN1cnJlbnRWYWx1ZSBmcm9tIHRyaWdnZXJlZCBieSBjaGFuZ2VzIG9uIG5nT25DaGFuZ2VcbiAgICpcbiAgICogQHBhcmFtIGNoYW5nZXMgLSBTaW1wbGVDaGFuZ2VzXG4gICAqIEBwYXJhbSBwYXRoIC0gc3RyaW5nXG4gICAqIEByZXR1cm5zIGxvd2VzdCBsYXllciB2YWx1ZSBvciBjaGFuZ2VzIG9iamVjdCBpdHNlbGYgd2hlbiBwYXRoIGNhbm5vdCBiZSBwYXJzZWRcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdmFsdWVQYXJzZXIuZ2V0TmV3VmFsdWUobXlDaGFuZ2VzLCAnbXkucGF0aCcpXG4gICAqL1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxuICBwdWJsaWMgc3RhdGljIGdldE5ld1ZhbHVlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMsIHBhdGg6IHN0cmluZyk6IGFueSB7XG4gICAgY29uc3QgW2tleXMsIGtleV0gPSB0aGlzLnBhcnNlUGF0aChwYXRoKTtcbiAgICByZXR1cm4gKGtleSAmJiBjaGFuZ2VzW2tleV0pID8gb2JqZWN0RGVlcFBhcnNlKGNoYW5nZXNba2V5XS5jdXJyZW50VmFsdWUsIGtleXMpIDogdW5kZWZpbmVkO1xuICB9XG5cblxuICAvKipcbiAgICogRnVuY3Rpb24gdG8gcGFyc2UgcGF0aCB0byBnZXQga2V5cyBmb3IgZWFjaCBsYXllclxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCAtIHN0cmluZ1xuICAgKiBAcmV0dXJucyBhbiBhcnJheSBvZiB0d28gZWxlbWVudHMsIG9uZSBiZWluZyBhbiBhcnJheSBvZiBhbGwgdGhlIGtleXMgZXhjZXB0IGZpcnN0IG9uZSwgb25lIGJlaW5nIHRoZSBmaXJzdCBrZXlcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogdmFsdWVQYXJzZXIucGFyc2VQYXRoKCdteS5wYXRoJykgLy8gUmV0dXJuczogW1snbXknXSwgJ3BhdGgnXVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBwYXJzZVBhdGgocGF0aDogc3RyaW5nKTogW3N0cmluZ1tdLCBzdHJpbmddIHtcbiAgICBjb25zdCBrZXlzID0gcGF0aC5zcGxpdCgnLicpO1xuICAgIGxldCBrZXkgPSBrZXlzLnNoaWZ0KCk7XG5cbiAgICBpZiAoIWtleSkge1xuICAgICAga2V5ID0ga2V5c1swXTtcbiAgICB9XG4gICAgcmV0dXJuIFtrZXlzLCBrZXldO1xuICB9XG59XG4iXX0=