UNPKG

ce-decorators

Version:

Custom Element decorators for typescript

115 lines (106 loc) 3.28 kB
/** * Copyright (c) 2018 Mathis Zeiher * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ /** * deserializes a string to a typed value * @param value value string to be transformed * @param type type transformer type for string value */ export function deserializeValue(value, type) { // tslint:disable-line if ((value === null || value === undefined) && type !== Boolean) { return null; } else if (type === Boolean) { if (value === 'false') { return false; } else { return value !== null; } } else if (type === Number) { return parseFloat(value); } else if (type === String) { return value; } else if (type === RegExp) { const [,, _2, _3, _4] = Array.from(/(\/(.*)\/([a-z]*))|(.+)/.exec(value)); if (_4) { return new RegExp(_4); } else if (_2) { return new RegExp(_2, _3 || ''); } else { return null; } } else if (type === Function) { const callback = eval('( function() {' + value + '} )'); // tslint:disable-line return callback; } else if (type instanceof Object) { return JSON.parse(value); // tslint:disable-line } else { return value; } } /** * serializes a value to a string * @param value value * @param type type */ export function serializeValue(value, type) { // tslint:disable-line if (value === null || value === undefined) { return null; } else if (type === String) { return value; // tslint:disable-line } else if (type instanceof Object) { return JSON.stringify(value); } else { return `${value}`; } } /** * transform a string from camel case to lower-case kebap case * @param str input string */ export function camelToKebapCase(str) { return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); } /** * transform a string from kebap to camel case * @param str input string */ export function kebapToCamelCase(str) { return str.toLowerCase().replace(/-([a-zA-Z])/g, (...args) => { return args[1].toUpperCase(); }); } /** * create a template string array */ export function makeTemplateString(template, raw) { Object.defineProperty(template, 'raw', { value: raw }); return template; // tslint:disable-line:no-any } /** * helper for shadydom */ export function needShadyDOM() { // tslint:disable-next-line:no-any return window.ShadyCSS && !window.ShadyCSS.nativeShadow; } /** * support for new adopting stylesheet functionality */ export const supportsAdoptingStyleSheets = 'adoptedStyleSheets' in Document.prototype && 'replace' in CSSStyleSheet.prototype; //# sourceMappingURL=utils.js.map