94 lines
2.4 KiB
TypeScript
94 lines
2.4 KiB
TypeScript
import sanitizeHtml from "sanitize-html";
|
|
import sanitizeHtmlOptions from "../html/sanitizeHtmlOptions";
|
|
import encrypt from "../../dsql/encrypt";
|
|
import { DSQL_TableSchemaType } from "../../../types";
|
|
import _ from "lodash";
|
|
|
|
type Param = {
|
|
value?: any;
|
|
tableSchema?: DSQL_TableSchemaType;
|
|
encryptionKey?: string;
|
|
encryptionSalt?: string;
|
|
dataKey: string;
|
|
};
|
|
|
|
/**
|
|
* # Update DB Function
|
|
* @description
|
|
*/
|
|
export default function grabParsedValue({
|
|
value,
|
|
tableSchema,
|
|
encryptionKey,
|
|
encryptionSalt,
|
|
dataKey,
|
|
}: Param): any {
|
|
let newValue = value;
|
|
|
|
const targetFieldSchemaArray = tableSchema
|
|
? tableSchema?.fields?.filter((field) => field.fieldName === dataKey)
|
|
: null;
|
|
const targetFieldSchema =
|
|
targetFieldSchemaArray && targetFieldSchemaArray[0]
|
|
? targetFieldSchemaArray[0]
|
|
: null;
|
|
|
|
if (typeof newValue == "undefined") return;
|
|
if (typeof newValue == "object" && !newValue) newValue = "";
|
|
|
|
const htmlRegex = /<[^>]+>/g;
|
|
|
|
if (targetFieldSchema?.richText || String(newValue).match(htmlRegex)) {
|
|
newValue = sanitizeHtml(newValue, sanitizeHtmlOptions);
|
|
}
|
|
|
|
if (
|
|
targetFieldSchema?.dataType?.match(/int$/i) &&
|
|
typeof value == "string" &&
|
|
!value?.match(/./)
|
|
) {
|
|
value = "";
|
|
}
|
|
|
|
if (targetFieldSchema?.encrypted) {
|
|
newValue = encrypt({
|
|
data: newValue,
|
|
encryptionKey,
|
|
encryptionSalt,
|
|
});
|
|
}
|
|
|
|
if (typeof newValue === "object") {
|
|
newValue = JSON.stringify(newValue);
|
|
}
|
|
|
|
if (targetFieldSchema?.pattern) {
|
|
const pattern = new RegExp(
|
|
targetFieldSchema.pattern,
|
|
targetFieldSchema.patternFlags || ""
|
|
);
|
|
if (!pattern.test(newValue)) {
|
|
console.log("DSQL: Pattern not matched =>", newValue);
|
|
newValue = "";
|
|
}
|
|
}
|
|
|
|
if (typeof newValue === "string" && newValue.match(/^null$/i)) {
|
|
newValue = {
|
|
toSqlString: function () {
|
|
return "NULL";
|
|
},
|
|
};
|
|
}
|
|
|
|
if (typeof newValue === "string" && !newValue.match(/./i)) {
|
|
newValue = {
|
|
toSqlString: function () {
|
|
return "NULL";
|
|
},
|
|
};
|
|
}
|
|
|
|
return newValue;
|
|
}
|