/** * This file is part of the NocoBase (R) project. * Copyright (c) 2020-2024 NocoBase Co., Ltd. * Authors: NocoBase Team. * * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License. * For more information, please refer to: https://www.nocobase.com/agreement. */ export const isString = (value: any): value is string => { return typeof value === 'string'; }; export const isArray = (value: any): value is Array => { return Array.isArray(value); }; export const isEmpty = (value: unknown) => { if (isPlainObject(value)) { return Object.keys(value).length === 0; } if (Array.isArray(value)) { return value.length === 0; } return !value; }; export const isPlainObject = (value) => { if (Object.prototype.toString.call(value) !== '[object Object]') { return false; } const prototype = Object.getPrototypeOf(value); return prototype === null || prototype === Object.prototype; }; export const hasEmptyValue = (objOrArr: object | any[]) => { let result = true; for (const key in objOrArr) { result = false; if (isArray(objOrArr[key]) && objOrArr[key].length === 0) { return true; } if (!objOrArr[key]) { return true; } if (isPlainObject(objOrArr[key]) || isArray(objOrArr[key])) { return hasEmptyValue(objOrArr[key]); } } return result; }; export const nextTick = (fn: () => void) => { setTimeout(fn); }; export const isJsonString = (str: string) => { if (!isString(str)) return false; str = str.trim(); // no variable if (str.startsWith('{{') && str.endsWith('}}')) { return false; } return (str.startsWith('{') && str.endsWith('}')) || (str.startsWith('[') && str.endsWith(']')); };