@pilotlab/data
Version:
A luxurious user experience framework, developed by your friends at Pilot.
120 lines (105 loc) • 4.88 kB
text/typescript
import is from '@pilotlab/is';
import { Strings } from '@pilotlab/strings';
import { DataType } from './attributes/attributeEnums';
import AttributeBase from './attributes/attributeBase';
import AttributesBase from './attributes/attributesBase';
export class DataTools {
static getDataType(value:any):(DataType | string) {
let dataType:(DataType | string) = DataType.ANY;
// if (is.notEmpty(value) && value.hasOwnProperty('value')) value = value['value'];
if (value instanceof AttributeBase) (<AttributeBase<any, any, any, any>>value).dataType;
//----- 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 (is.undefined(value)) return DataType.UNDEFINED;
else if (is.empty(value, false)) return DataType.NULL;
else if (value instanceof AttributesBase || typeof value === 'object') {
if (
value.hasOwnProperty('r') &&
value.hasOwnProperty('g') &&
value.hasOwnProperty('b')
) {
dataType = DataType.COLOR;
} else if (
value.hasOwnProperty('min') &&
value.hasOwnProperty('max')
) {
dataType = DataType.RANGE;
} else if (
value.hasOwnProperty('x') &&
value.hasOwnProperty('y')
) {
if (
value.hasOwnProperty('w')
) {
dataType = DataType.VECTOR;
} else {
if (value.hasOwnProperty('z')) dataType = DataType.POINT_3D;
else dataType = DataType.POINT;
}
} else if (
value.hasOwnProperty('width') &&
value.hasOwnProperty('height')
) {
if (value.hasOwnProperty('depth')) dataType = DataType.SIZE_3D;
else dataType = DataType.SIZE;
} else if (
value.hasOwnProperty('position') &&
value.hasOwnProperty('pivot') &&
value.hasOwnProperty('size') &&
value.hasOwnProperty('scale')
) {
dataType = DataType.CUBE;
} else if (Array.isArray(value)) dataType = DataType.ARRAY;
else if (value.hasOwnProperty('value')) dataType = DataType.OBJECT;
else dataType = DataType.COLLECTION;
} else if (value instanceof Date) dataType = DataType.DATE_TIME;
else if (value instanceof RegExp) dataType = DataType.REG_EXP;
else {
switch (typeof value) {
case 'boolean':
dataType = DataType.BOOLEAN;
break;
case 'number':
dataType = 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.STRING_DATA_URL;
else if (Strings.isBase64(value)) dataType = DataType.STRING_BASE64;
else if (Strings.isValidUri(value)) dataType = DataType.STRING_URI;
else dataType = DataType.STRING;
break;
case 'object':
dataType = DataType.OBJECT;
break;
default:
dataType = DataType.ANY;
}
}
return dataType;
}
static setCookie(name:string, value:string, expireMilliseconds?:number):void {
/// expire is optional and should be in milliseconds
let cookie:string = name + '=' + encodeURI(value);
if (expireMilliseconds) {
let today:Date = new Date();
let expireDate = new Date();
expireDate.setTime(today.getTime() + expireMilliseconds);
cookie = cookie.concat(';expires=' + expireDate.toUTCString());
}
document.cookie = cookie;
}
static getCookie(name:string) {
let re:RegExp = new RegExp('[; ]' + name + '=([^\\s;]*)');
let sMatch = (' ' + document.cookie).match(re);
if (name && sMatch) return decodeURI(sMatch[1]);
return null;
}
} // End Class
export default DataTools;