ts-flex-query
Version:
Flexible and type-safe data queries
40 lines • 1.58 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getDataType = getDataType;
const data_type_1 = require("../types/data-type");
const utils_1 = require("./utils");
function getDataType(value) {
const type = typeof value;
switch (type) {
case 'number':
return { type: data_type_1.DataTypeType.number };
case 'bigint':
return { type: data_type_1.DataTypeType.bigint };
case 'symbol':
case 'string':
return { type: data_type_1.DataTypeType.string };
case 'boolean':
return { type: data_type_1.DataTypeType.boolean };
case 'undefined':
return { type: data_type_1.DataTypeType.undefined };
case 'object':
if (value === null) {
return { type: data_type_1.DataTypeType.null };
}
if (Array.isArray(value)) {
return {
type: data_type_1.DataTypeType.array,
elementType: value.length ? getDataType(value[0]) : { type: data_type_1.DataTypeType.unknown }
};
}
return {
type: data_type_1.DataTypeType.object,
fields: (0, utils_1.createObjectFromArray)(Object.entries(value), (entry) => entry[0], (entry) => getDataType(entry[1]))
};
case 'function':
throw new Error('Functions are not supported in queries.');
default:
return (0, utils_1.unexpected)(type);
}
}
//# sourceMappingURL=get-data-type.js.map