@universis/common
Version:
Universis - common directives and services
48 lines (47 loc) • 4.44 kB
JavaScript
import { Pipe } from '@angular/core';
import { template } from 'lodash';
/**
* Template Pipe is an impure pipe that can escape
* HTML and interpolated data properties and
* execute JavaScript in "evaluate" delimiters
*/
export class TemplatePipe {
constructor() {
}
/**
* Uses lodash template function to generate a string
* from a given template escaping the delimiters. It
* deletes the template source after its initialization,
* generates the string and nullifies the compiled template
* function variable to be garbage-collected.
* @param {string} inputTemplate: The template used to generate the string
* @param {any} value: The parameter passed to compiled template function
* @param {Object | undefined} options: Custom options to pass to lodash template
*/
transform(inputTemplate, value, options) {
let _tpl;
if (options !== undefined) {
/*
lodash doesn't throw error when options are not valid, so
there is not need to add a try catch block
*/
_tpl = template(inputTemplate, options);
}
else {
_tpl = template(inputTemplate);
}
delete _tpl.source;
const _res = _tpl(value);
_tpl = null;
return _res;
}
}
TemplatePipe.decorators = [
{ type: Pipe, args: [{
name: 'template',
pure: false
},] }
];
/** @nocollapse */
TemplatePipe.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVtcGxhdGUucGlwZS5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0B1bml2ZXJzaXMvY29tbW9uLyIsInNvdXJjZXMiOlsic2hhcmVkL3BpcGVzL3RlbXBsYXRlLnBpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLElBQUksRUFBZ0IsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFDLFFBQVEsRUFBbUIsTUFBTSxRQUFRLENBQUM7QUFFbEQ7Ozs7R0FJRztBQUtILE1BQU07SUFDSjtJQUNBLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTLENBQUMsYUFBcUIsRUFBRSxLQUFVLEVBQUUsT0FBc0M7UUFDakYsSUFBSSxJQUFJLENBQUM7UUFDVCxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUU7WUFDekI7OztlQUdHO1lBQ0gsSUFBSSxHQUFHLFFBQVEsQ0FBQyxhQUFhLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDekM7YUFBTTtZQUNMLElBQUksR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDaEM7UUFDRCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pCLElBQUksR0FBRyxJQUFJLENBQUM7UUFDWixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7OztZQWpDRixJQUFJLFNBQUM7Z0JBQ0osSUFBSSxFQUFFLFVBQVU7Z0JBQ2hCLElBQUksRUFBRSxLQUFLO2FBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1BpcGUsIFBpcGVUcmFuc2Zvcm19IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHt0ZW1wbGF0ZSwgVGVtcGxhdGVTZXR0aW5nc30gZnJvbSAnbG9kYXNoJztcblxuLyoqXG4gKiAgVGVtcGxhdGUgUGlwZSBpcyBhbiBpbXB1cmUgcGlwZSB0aGF0IGNhbiBlc2NhcGVcbiAqICBIVE1MIGFuZCBpbnRlcnBvbGF0ZWQgZGF0YSBwcm9wZXJ0aWVzIGFuZFxuICogIGV4ZWN1dGUgSmF2YVNjcmlwdCBpbiBcImV2YWx1YXRlXCIgZGVsaW1pdGVyc1xuICovXG5AUGlwZSh7XG4gIG5hbWU6ICd0ZW1wbGF0ZScsXG4gIHB1cmU6IGZhbHNlXG59KVxuZXhwb3J0IGNsYXNzIFRlbXBsYXRlUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0ge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBVc2VzIGxvZGFzaCB0ZW1wbGF0ZSBmdW5jdGlvbiB0byBnZW5lcmF0ZSBhIHN0cmluZ1xuICAgKiBmcm9tIGEgZ2l2ZW4gdGVtcGxhdGUgZXNjYXBpbmcgdGhlIGRlbGltaXRlcnMuIEl0XG4gICAqIGRlbGV0ZXMgdGhlIHRlbXBsYXRlIHNvdXJjZSBhZnRlciBpdHMgaW5pdGlhbGl6YXRpb24sXG4gICAqIGdlbmVyYXRlcyB0aGUgc3RyaW5nIGFuZCBudWxsaWZpZXMgdGhlIGNvbXBpbGVkIHRlbXBsYXRlXG4gICAqIGZ1bmN0aW9uIHZhcmlhYmxlIHRvIGJlIGdhcmJhZ2UtY29sbGVjdGVkLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRUZW1wbGF0ZTogVGhlIHRlbXBsYXRlIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHN0cmluZ1xuICAgKiBAcGFyYW0ge2FueX0gdmFsdWU6IFRoZSBwYXJhbWV0ZXIgcGFzc2VkIHRvIGNvbXBpbGVkIHRlbXBsYXRlIGZ1bmN0aW9uXG4gICAqIEBwYXJhbSB7T2JqZWN0IHwgdW5kZWZpbmVkfSBvcHRpb25zOiBDdXN0b20gb3B0aW9ucyB0byBwYXNzIHRvIGxvZGFzaCB0ZW1wbGF0ZVxuICAgKi9cbiAgdHJhbnNmb3JtKGlucHV0VGVtcGxhdGU6IHN0cmluZywgdmFsdWU6IGFueSwgb3B0aW9ucz86IFRlbXBsYXRlU2V0dGluZ3MgfCB1bmRlZmluZWQpOiBhbnkge1xuICAgIGxldCBfdHBsO1xuICAgIGlmIChvcHRpb25zICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qXG4gICAgICAgbG9kYXNoIGRvZXNuJ3QgdGhyb3cgZXJyb3Igd2hlbiBvcHRpb25zIGFyZSBub3QgdmFsaWQsIHNvXG4gICAgICAgdGhlcmUgaXMgbm90IG5lZWQgdG8gYWRkIGEgdHJ5IGNhdGNoIGJsb2NrXG4gICAgICAgKi9cbiAgICAgIF90cGwgPSB0ZW1wbGF0ZShpbnB1dFRlbXBsYXRlLCBvcHRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgX3RwbCA9IHRlbXBsYXRlKGlucHV0VGVtcGxhdGUpO1xuICAgIH1cbiAgICBkZWxldGUgX3RwbC5zb3VyY2U7XG4gICAgY29uc3QgX3JlcyA9IF90cGwodmFsdWUpO1xuICAgIF90cGwgPSBudWxsO1xuICAgIHJldHVybiBfcmVzO1xuICB9XG59XG4iXX0=