+export const extractTimeSeriesValues = (timeSeries: Array<TimestampedData>): number[] => {
+ return timeSeries.map((timeSeriesItem) => timeSeriesItem.value);
+};
+
+export const isObject = (item: unknown): boolean => {
+ return (
+ isNullOrUndefined(item) === false && typeof item === 'object' && Array.isArray(item) === false
+ );
+};
+
+export const cloneObject = <T extends object>(object: T): T => {
+ return clone<T>(object);
+};
+
+export const hasOwnProp = (object: unknown, property: PropertyKey): boolean => {
+ return isObject(object) && Object.hasOwn(object as object, property);
+};
+
+export const isCFEnvironment = (): boolean => {
+ return !isNullOrUndefined(process.env.VCAP_APPLICATION);
+};
+
+export const isIterable = <T>(obj: T): boolean => {
+ return !isNullOrUndefined(obj) ? typeof obj[Symbol.iterator as keyof T] === 'function' : false;
+};
+
+const isString = (value: unknown): boolean => {
+ return typeof value === 'string';
+};
+
+export const isEmptyString = (value: unknown): boolean => {
+ return isNullOrUndefined(value) || (isString(value) && (value as string).trim().length === 0);
+};
+
+export const isNotEmptyString = (value: unknown): boolean => {
+ return isString(value) && (value as string).trim().length > 0;
+};
+
+export const isUndefined = (value: unknown): boolean => {
+ return value === undefined;
+};
+
+export const isNullOrUndefined = (value: unknown): boolean => {
+ // eslint-disable-next-line eqeqeq, no-eq-null
+ return value == null;
+};
+
+export const isEmptyArray = (object: unknown): boolean => {
+ return Array.isArray(object) && object.length === 0;
+};
+
+export const isNotEmptyArray = (object: unknown): boolean => {
+ return Array.isArray(object) && object.length > 0;
+};
+
+export const isEmptyObject = (obj: object): boolean => {
+ if (obj?.constructor !== Object) {