UNPKG

@pilotlab/lux-attributes

Version:

A luxurious user experience framework, developed by your friends at Pilot.

83 lines (72 loc) 3.44 kB
import is from '@pilotlab/lux-is'; import { Strings } from '@pilotlab/lux-strings'; import { DataType } from './attributeEnums'; import AttributesBase from './attributesBase'; export class AttributeTools { static getBaseDataType(dataType:DataType):DataType { if (dataType === undefined) return DataType.UNDEFINED; if (is.empty(dataType)) return DataType.NULL; switch (dataType) { case DataType.STRING_HEX_VALUE: case DataType.STRING_HTML: case DataType.STRING_JAVASCRIPT: case DataType.STRING_JSON: case DataType.STRING_REG_EXP: case DataType.STRING_SVG: case DataType.STRING_URI: case DataType.STRING_XML: case DataType.STRING: return DataType.STRING; case DataType.NUMBER_DOUBLE: case DataType.NUMBER_INT: case DataType.NUMBER: return DataType.NUMBER; default: return dataType; } } static getDataType(value:any):DataType { let dataType:DataType = DataType.ANY; //----- NOTE: There's really no way to determine whether the value is intended to represent //----- a URI here, since even a simple string is a valid URI. if (value === undefined) return DataType.UNDEFINED; else if (is.empty(value, true)) return DataType.NULL; else if (value instanceof AttributesBase) dataType = DataType.COLLECTION; else if (Array.isArray(value)) dataType = DataType.ARRAY; else if (value instanceof Date) dataType = DataType.DATE_TIME; else if (value instanceof RegExp) dataType = DataType.REG_EXP; // else if (value instanceof Color) dataType = DataType.COLOR; // else if (value instanceof Point) dataType = DataType.POINT; // else if (value instanceof Rectangle) dataType = DataType.RECTANGLE; // else if (value instanceof Size) dataType = DataType.SIZE; // else if (value instanceof Vector) dataType = DataType.VECTOR; else { switch (typeof value) { case 'boolean': dataType = DataType.BOOLEAN; break; case 'number': DataType.NUMBER; break; case 'function': dataType = DataType.FUNCTION; break; case 'string': if (Strings.isValidHexString(value)) dataType = DataType.STRING_HEX_VALUE; else if (value.toLowerCase().indexOf('<html>') > -1) dataType = DataType.STRING_HTML; else if (Strings.isSvg(Strings.stringToXmlDocument(value))) dataType = DataType.STRING_SVG; else if (Strings.isXml(Strings.stringToXmlDocument(value))) dataType = DataType.STRING_XML; else if (Strings.isDataUrl(value)) dataType = DataType.DATA_URL; else if (Strings.isBase64(value)) dataType = DataType.BASE64; else if (Strings.isValidUri(value)) dataType = DataType.STRING_URI; else dataType = DataType.STRING; break; case 'object': default: dataType = DataType.OBJECT; } } return dataType; } } // End Class export default AttributeTools;