@pilotlab/lux-attributes
Version:
A luxurious user experience framework, developed by your friends at Pilot.
83 lines (72 loc) • 3.44 kB
text/typescript
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;