const fs = require('fs'); const modelName = "user" fs.writeFileSync("./result.js",""); // خواندن فایل متنی fs.readFile('schema.txt', 'utf8', (err, data) => { if (err) { console.error('Error reading file:', err); return; } // پردازش و تبدیل متن به آبجکت const parsedObject = parseTextToObject(data); console.log(parsedObject); }); const sleep = (ms)=>{ return new Promise(resolve=>{ setTimeout(resolve,ms); }) } // تابع برای پردازش و تبدیل متن function parseTextToObject(data) { const cleanedData = data .replace(/\/\/.*$/gm, '') // حذف کامنت‌ها .replace(/(this\.DataTypes\.[A-Z]+)((\([0-9]{1,4}\))?)/g, '"$1$2"'); // ساده‌سازی نام DataTypes try { // return fs.(`(${cleanedData})`); fs.writeFileSync("./schema.js",`module.exports = { schemaObject: ${cleanedData} }`,{encoding:"utf-8"}) console.log("done") getObject(); } catch (error) { console.error('Error parsing text to object:', error); return null; } } async function getObject(){ console.log('in getobjects and wait 3 seconds') await sleep(3000); const {schemaObject} = require('./schema'); console.log("schemaObject",schemaObject); for(let keys in schemaObject){ let dynamicContent= ""; let dynamicContent2="" let takeProperties = {} let theType="string"; for(let property in schemaObject[keys]){ switch(property){ case "type": if(schemaObject[keys][property]?.includes("string".toUpperCase())){ takeProperties[property] = schemaObject[keys][property].replace(/\([0-9]{1,4}\)/g,"").replace("this.DataTypes","DataType").replace(/\"/g,""); theType="string"; console.log(schemaObject[keys][property].replace(/\([0-9]{1-4}\)/g,"").replace(/\([0-9]{1-4}\)/g,"").replace("this.DataTypes","DataType")) }else if(schemaObject[keys][property]?.includes("date".toUpperCase())){ takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); theType="Date"; }else if(schemaObject[keys][property]?.includes("int".toUpperCase())){ takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); theType="number"; }else if(schemaObject[keys][property]?.includes("char".toUpperCase())){ takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); theType="string"; }else if(schemaObject[keys][property]?.includes("text".toUpperCase())){ takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); theType="string"; }else if(schemaObject[keys][property]?.includes("bool".toUpperCase())){ takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); theType="boolean"; }else{ console.log('oh what was it !!!!'); console.log(property,schemaObject[keys][property]); console.log("--------------------------------------------") takeProperties[property] = schemaObject[keys][property].replace("this.DataTypes","DataType"); theType="string"; } break; case "regex": const regexContent = schemaObject[keys][property]; takeProperties[property] = schemaObject[keys][property]; takeProperties['validate'] = `{is:/${regexContent}}/}` break; default: takeProperties[property] = schemaObject[keys][property]; break; } } for(let i in takeProperties){ dynamicContent2+=`\n\t${i}:${JSON.stringify(takeProperties[i])},` } dynamicContent2=dynamicContent2.replace(/\"(DataType\.[a-zA-Z]{1,10}(\([0-9]{1,5}\))?)\"/g,"$1").replace(/\"(\{is\:\/.{1,300}\})\"/gi,"$1") dynamicContent+=`@Column({${dynamicContent2} }) ${keys}:${theType};\n\n` fs.appendFileSync("./result.js",dynamicContent); console.log('append') } console.log("finish") }