// @ts-check const serverError = require("./serverError"); /** * # Add User Table to Database * * @param {object} params * @param {Object} [params.data] * @param {string[]} [params.fields] * @param {Object} [params.excludeData] * @param {import("../../types").DSQL_FieldSchemaType[]} [params.excludeFields] * * @returns {import("../../types").DSQL_FieldSchemaType[]} new user auth object payload */ module.exports = function grabSchemaFieldsFromData({ data, fields, excludeData, excludeFields, }) { try { const possibleFields = require("../../data/possibleFields.json"); const dataTypes = require("../../data/dataTypes.json"); /** @type {import("../../types").DSQL_FieldSchemaType[]} */ const finalFields = []; /** @type {string[]} */ let filteredFields = []; if (data && Object.keys(data)?.[0]) { filteredFields = Object.keys(data); } if (fields) { filteredFields = [...filteredFields, ...fields]; filteredFields = [...new Set(filteredFields)]; } filteredFields = filteredFields .filter( (fld) => !excludeData || !Object.keys(excludeData).includes(fld) ) .filter( (fld) => !excludeFields || !excludeFields.find((exlFld) => exlFld.fieldName == fld) ); filteredFields.forEach((fld) => { const value = data ? data[fld] : null; if (typeof value == "string") { const newField = /** @type {import("../../types").DSQL_FieldSchemaType} */ ({ fieldName: fld, dataType: value.length > 255 ? "TEXT" : "VARCHAR(255)", }); if (Boolean(value.match(/<[^>]+>/g))) { newField.richText = true; } finalFields.push(newField); } else if (typeof value == "number") { finalFields.push( /** @type {import("../../types").DSQL_FieldSchemaType} */ ({ fieldName: fld, dataType: "INT", }) ); } else { finalFields.push( /** @type {import("../../types").DSQL_FieldSchemaType} */ ({ fieldName: fld, dataType: "VARCHAR(255)", }) ); } }); return finalFields; } catch (/** @type {any} */ error) { console.log(`grabSchemaFieldsFromData.js ERROR: ${error.message}`); serverError({ component: "grabSchemaFieldsFromData.js", message: error.message, }); return []; } };