UNPKG

virus-nsfw

Version:

A simplified wrapper around Clarifai's NSFW detection.

115 lines (104 loc) 2.81 kB
var { URL } = require("url"); var testMIMEType = require("./mimetype"); /** * Checks if data is a URL. * @param {string} data The data to test * @returns {boolean} Whether data is a URL or not. */ function testURL(data) { try { var myURLObject = new URL(data); return true; } catch (e) { if (e.code !== "ERR_INVALID_URL") { // The error is not related to an invalid URL throw e; } return false; } } /** * Checks if data is Base64. * @param {string} data The data to test * @returns {boolean} Whether data is Base64 or not. */ function testBase64(data) { if (data.match(/^[A-Za-z0-9+\/=]+$/)) { return true; } else { return false; } } /** * Checks if data is a Data URL. * @param {string} data The data to test * @returns {boolean} Whether data is a Data URL or not. */ function testDataURL(data) { var regex = /^data:(.+)\/(.+);base64,(.*)$/; var matches = data.match(regex); if (matches) { if (testMIMEType(`${matches[1]}/${matches[2]}`)) { return true; } else { throw new TypeError("Invalid data type."); } } else { return false; } } /** * Extracts Base64 from a Data URL. * @param {string} data The Data URL to extract Base64 from * @returns {string} The Base64 data. */ function dataURLToBase64(data) { var regex = /^data:(.+)\/(.+);base64,(.*)$/; var matches = data.match(regex); if (matches) { return matches[3]; } } /** * Extracts MIME Type from a Data URL. * @param {string} data The Data URL to extract MIME Type from * @returns {string} The MIME type. */ function dataURLToMIMEType(data) { var regex = /^data:(.+\/.+);base64,.*$/; var matches = data.match(regex); if (matches) { return matches[1]; } } /** * Parse your data into a Clarifai-friendly object or string. * @param {string} _data Your URL/Data URL/Base64 string * @returns {(string|Object)} Clarifai-friendly string/object */ function dataParser(_data) { var data = _data.trim(); var isBase64String = false; var isURL = false; var isDataURL = false; // Base64 string test isBase64String = testBase64(data); // URL test isURL = testURL(data); // Data URL test isDataURL = testDataURL(data); if (isDataURL) { return { base64: dataURLToBase64(data), video: dataURLToMIMEType(data).trim().split("/")[0] === "video" || dataURLToMIMEType(data).trim() === "image/gif" }; } else if (isURL) { return data; } else if (isBase64String) { return { base64: data }; } else { throw new TypeError("Couldn't recognize data type."); } } module.exports = dataParser;