isSerializable()

in core/utils.js [320:357]


    isSerializable(value) {
        const valueType = typeof value;

        switch (valueType) {
            case "object":
                if (value === null) {
                    return true;
                }

                if (Object.prototype.hasOwnProperty.call(value, Symbol_Serializable)) {
                    return value[Symbol_Serializable] === true;
                }

                if (exports.isFunction(value["toJSON"])) {
                    return true;
                }

                if (Array.isArray(value)) {
                    return value.every((itemValue) => exports.object.isSerializable(itemValue));
                }

                const valuePrototype = Object.getPrototypeOf(value);

                return (!valuePrototype || valuePrototype === Object.prototype)
                    && Object.values(value).every((propertyValue) => exports.object.isSerializable(propertyValue));

            case "undefined":
            case "number":
            case "boolean":
            case "string":
                return true;

            case "symbol":
            case "function":
            default:
                return false;
        }
    },