[{"data":1,"prerenderedAt":4223},["ShallowReactive",2],{"post-/twlyd-slasl-nsyh-ashwaeyh-javascript-2025-ar":3,"author-رائد-البحري-ar":4205},{"id":4,"title":5,"author":6,"body":7,"category":4168,"description":4169,"extension":4170,"image":4171,"isDraft":4172,"isFeatured":4172,"locale":4173,"meta":4174,"navigation":303,"path":4195,"publishedAt":4196,"readingTime":814,"seo":4197,"stem":4198,"tags":4199,"updatedAt":4203,"__hash__":4204},"articles_ar/توليد-سلاسل-نصية-عشوائية-javascript-2025.md","الدليل الشامل لتوليد السلاسل النصية العشوائية في JavaScript (2025)","رائد-البحري",{"type":8,"value":9,"toc":4130},"minimark",[10,14,20,39,44,47,53,85,91,117,121,253,257,262,265,455,461,466,477,482,490,494,497,614,619,623,634,638,641,945,950,954,965,969,972,1038,1043,1047,1058,1062,1070,1074,1078,1081,1243,1248,1252,1262,1266,1426,1430,1638,1642,1645,1806,1815,1819,1823,1841,1994,1999,2019,2023,2027,2518,2522,2788,2792,2955,2959,3186,3190,3193,3574,3578,3582,3684,3688,3803,3807,3811,3872,3876,3915,3919,3940,3944,4014,4018,4069,4072,4075,4115,4123,4126],[11,12,13],"p",{},"توليد السلاسل النصية العشوائية مهمة شائعة في تطوير الويب - سواء كنت تقوم بإنشاء معرفات فريدة، رموز مميزة آمنة، كلمات مرور، أو معرفات جلسات. في هذا الدليل الشامل، سنستكشف جميع الطرق الحديثة لتوليد السلاسل النصية العشوائية في JavaScript، سواء على جانب العميل أو الخادم، مع التركيز على الأمان والأداء.",[11,15,16],{},[17,18,19],"strong",{},"ستتعلم:",[21,22,23,27,30,33,36],"ul",{},[24,25,26],"li",{},"طرق آمنة مشفرة (لكلمات المرور، الرموز المميزة)",[24,28,29],{},"طرق سريعة (لحالات الاستخدام غير الحساسة أمنياً)",[24,31,32],{},"تقنيات ES6+ حديثة",[24,34,35],{},"مقارنات الأداء",[24,37,38],{},"حالات الاستخدام الواقعية وأفضل الممارسات",[40,41,43],"h2",{"id":42},"متى-تحتاج-سلاسل-نصية-عشوائية","متى تحتاج سلاسل نصية عشوائية؟",[11,45,46],{},"قبل الغوص في الكود، دعنا نفهم حالات الاستخدام الشائعة:",[11,48,49,52],{},[17,50,51],{},"حساسة أمنياً"," (استخدم طرق آمنة مشفرة):",[21,54,55,61,67,73,79],{},[24,56,57,60],{},[17,58,59],{},"توليد كلمات المرور"," - كلمات مرور أولية للمستخدمين",[24,62,63,66],{},[17,64,65],{},"رموز API"," - رموز المصادقة التي تدوم أسابيع/أشهر",[24,68,69,72],{},[17,70,71],{},"معرفات الجلسات"," - معرفات فريدة لجلسات المستخدم",[24,74,75,78],{},[17,76,77],{},"رموز إعادة تعيين كلمة المرور"," - رموز محدودة زمنياً ترسل عبر البريد الإلكتروني",[24,80,81,84],{},[17,82,83],{},"رموز CSRF"," - حماية من تزوير الطلبات عبر المواقع",[11,86,87,90],{},[17,88,89],{},"غير حساسة أمنياً"," (Math.random() مناسب):",[21,92,93,99,105,111],{},[24,94,95,98],{},[17,96,97],{},"معرفات العناصر الفريدة"," - مفاتيح React، معرفات عناصر DOM",[24,100,101,104],{},[17,102,103],{},"كسر الذاكرة المؤقتة"," - معاملات استعلام عشوائية للموارد",[24,106,107,110],{},[17,108,109],{},"أسماء الملفات المؤقتة"," - رفع الملفات قبل المعالجة",[24,112,113,116],{},[17,114,115],{},"بيانات الاختبار"," - توليد بيانات وهمية للاختبار",[40,118,120],{"id":119},"جدول-مقارنة-سريع","جدول مقارنة سريع",[122,123,124,149],"table",{},[125,126,127],"thead",{},[128,129,130,134,137,140,143,146],"tr",{},[131,132,133],"th",{},"الطريقة",[131,135,136],{},"حالة الاستخدام",[131,138,139],{},"الأمان",[131,141,142],{},"السرعة",[131,144,145],{},"المتصفح",[131,147,148],{},"Node.js",[150,151,152,176,194,215,234],"tbody",{},[128,153,154,161,164,167,170,173],{},[155,156,157],"td",{},[158,159,160],"code",{},"crypto.randomBytes()",[155,162,163],{},"رموز API، كلمات المرور",[155,165,166],{},"✅ عالي",[155,168,169],{},"سريع",[155,171,172],{},"❌",[155,174,175],{},"✅",[128,177,178,183,186,188,190,192],{},[155,179,180],{},[158,181,182],{},"crypto.getRandomValues()",[155,184,185],{},"رموز جانب العميل",[155,187,166],{},[155,189,169],{},[155,191,175],{},[155,193,172],{},[128,195,196,201,204,206,209,212],{},[155,197,198],{},[158,199,200],{},"crypto.randomUUID()",[155,202,203],{},"معرفات فريدة",[155,205,166],{},[155,207,208],{},"أسرع",[155,210,211],{},"✅ (>15)",[155,213,214],{},"✅ (>14)",[128,216,217,222,225,228,230,232],{},[155,218,219],{},[158,220,221],{},"Math.random()",[155,223,224],{},"غير أمني",[155,226,227],{},"❌ منخفض",[155,229,208],{},[155,231,175],{},[155,233,175],{},[128,235,236,241,244,246,249,251],{},[155,237,238],{},[158,239,240],{},"nanoid",[155,242,243],{},"معرفات فريدة قصيرة",[155,245,166],{},[155,247,248],{},"سريع جداً",[155,250,175],{},[155,252,175],{},[40,254,256],{"id":255},"طرق-nodejs-جانب-الخادم","طرق Node.js (جانب الخادم)",[258,259,261],"h3",{"id":260},"_1-سلسلة-hex-آمنة-مشفرة","1. سلسلة hex آمنة مشفرة",[11,263,264],{},"مثالية لرموز API ومعرفات الجلسات:",[266,267,272],"pre",{"className":268,"code":269,"language":270,"meta":271,"style":271},"language-javascript shiki shiki-themes github-light dark-plus dark-plus","import crypto from 'crypto';\n\nfunction generateToken(length = 32) {\n  return crypto\n    .randomBytes(Math.ceil(length / 2))\n    .toString('hex')\n    .slice(0, length);\n}\n\nconsole.log(generateToken(32));\n// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n","javascript","",[158,273,274,298,305,334,343,376,392,413,419,424,448],{"__ignoreMap":271},[275,276,279,283,287,290,294],"span",{"class":277,"line":278},"line",1,[275,280,282],{"class":281},"sEkCa","import",[275,284,286],{"class":285},"sZiGn"," crypto",[275,288,289],{"class":281}," from",[275,291,293],{"class":292},"sGDl4"," 'crypto'",[275,295,297],{"class":296},"sG4b4",";\n",[275,299,301],{"class":277,"line":300},2,[275,302,304],{"emptyLinePlaceholder":303},true,"\n",[275,306,308,312,316,319,323,327,331],{"class":277,"line":307},3,[275,309,311],{"class":310},"s5uUr","function",[275,313,315],{"class":314},"svuFb"," generateToken",[275,317,318],{"class":296},"(",[275,320,322],{"class":321},"s9TRk","length",[275,324,326],{"class":325},"s1p9p"," =",[275,328,330],{"class":329},"seC34"," 32",[275,332,333],{"class":296},") {\n",[275,335,337,340],{"class":277,"line":336},4,[275,338,339],{"class":281},"  return",[275,341,342],{"class":285}," crypto\n",[275,344,346,349,352,354,357,360,363,365,367,370,373],{"class":277,"line":345},5,[275,347,348],{"class":296},"    .",[275,350,351],{"class":314},"randomBytes",[275,353,318],{"class":296},[275,355,356],{"class":285},"Math",[275,358,359],{"class":296},".",[275,361,362],{"class":314},"ceil",[275,364,318],{"class":296},[275,366,322],{"class":285},[275,368,369],{"class":325}," /",[275,371,372],{"class":329}," 2",[275,374,375],{"class":296},"))\n",[275,377,379,381,384,386,389],{"class":277,"line":378},6,[275,380,348],{"class":296},[275,382,383],{"class":314},"toString",[275,385,318],{"class":296},[275,387,388],{"class":292},"'hex'",[275,390,391],{"class":296},")\n",[275,393,395,397,400,402,405,408,410],{"class":277,"line":394},7,[275,396,348],{"class":296},[275,398,399],{"class":314},"slice",[275,401,318],{"class":296},[275,403,404],{"class":329},"0",[275,406,407],{"class":296},", ",[275,409,322],{"class":285},[275,411,412],{"class":296},");\n",[275,414,416],{"class":277,"line":415},8,[275,417,418],{"class":296},"}\n",[275,420,422],{"class":277,"line":421},9,[275,423,304],{"emptyLinePlaceholder":303},[275,425,427,430,432,435,437,440,442,445],{"class":277,"line":426},10,[275,428,429],{"class":285},"console",[275,431,359],{"class":296},[275,433,434],{"class":314},"log",[275,436,318],{"class":296},[275,438,439],{"class":314},"generateToken",[275,441,318],{"class":296},[275,443,444],{"class":329},"32",[275,446,447],{"class":296},"));\n",[275,449,451],{"class":277,"line":450},11,[275,452,454],{"class":453},"s56mj","// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n",[11,456,457,460],{},[17,458,459],{},"متى تستخدم:"," رموز API، معرفات الجلسات، معرفات قاعدة البيانات",[11,462,463],{},[17,464,465],{},"المزايا:",[21,467,468,471,474],{},[24,469,470],{},"آمنة مشفرة",[24,472,473],{},"لا تبعيات خارجية",[24,475,476],{},"أداء سريع",[11,478,479],{},[17,480,481],{},"العيوب:",[21,483,484,487],{},[24,485,486],{},"تعمل فقط في Node.js",[24,488,489],{},"محدودة بحروف hex (0-9، a-f)",[258,491,493],{"id":492},"_2-سلسلة-base64-آمنة-مشفرة","2. سلسلة Base64 آمنة مشفرة",[11,495,496],{},"أكثر إحكاماً من hex، جيد للروابط:",[266,498,500],{"className":268,"code":499,"language":270,"meta":271,"style":271},"import crypto from 'crypto';\n\nfunction generateUrlSafeToken(length = 32) {\n  return crypto\n    .randomBytes(length)\n    .toString('base64url')\n    .slice(0, length);\n}\n\nconsole.log(generateUrlSafeToken(32));\n// الناتج: \"K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0\"\n",[158,501,502,514,518,535,541,553,566,582,586,590,609],{"__ignoreMap":271},[275,503,504,506,508,510,512],{"class":277,"line":278},[275,505,282],{"class":281},[275,507,286],{"class":285},[275,509,289],{"class":281},[275,511,293],{"class":292},[275,513,297],{"class":296},[275,515,516],{"class":277,"line":300},[275,517,304],{"emptyLinePlaceholder":303},[275,519,520,522,525,527,529,531,533],{"class":277,"line":307},[275,521,311],{"class":310},[275,523,524],{"class":314}," generateUrlSafeToken",[275,526,318],{"class":296},[275,528,322],{"class":321},[275,530,326],{"class":325},[275,532,330],{"class":329},[275,534,333],{"class":296},[275,536,537,539],{"class":277,"line":336},[275,538,339],{"class":281},[275,540,342],{"class":285},[275,542,543,545,547,549,551],{"class":277,"line":345},[275,544,348],{"class":296},[275,546,351],{"class":314},[275,548,318],{"class":296},[275,550,322],{"class":285},[275,552,391],{"class":296},[275,554,555,557,559,561,564],{"class":277,"line":378},[275,556,348],{"class":296},[275,558,383],{"class":314},[275,560,318],{"class":296},[275,562,563],{"class":292},"'base64url'",[275,565,391],{"class":296},[275,567,568,570,572,574,576,578,580],{"class":277,"line":394},[275,569,348],{"class":296},[275,571,399],{"class":314},[275,573,318],{"class":296},[275,575,404],{"class":329},[275,577,407],{"class":296},[275,579,322],{"class":285},[275,581,412],{"class":296},[275,583,584],{"class":277,"line":415},[275,585,418],{"class":296},[275,587,588],{"class":277,"line":421},[275,589,304],{"emptyLinePlaceholder":303},[275,591,592,594,596,598,600,603,605,607],{"class":277,"line":426},[275,593,429],{"class":285},[275,595,359],{"class":296},[275,597,434],{"class":314},[275,599,318],{"class":296},[275,601,602],{"class":314},"generateUrlSafeToken",[275,604,318],{"class":296},[275,606,444],{"class":329},[275,608,447],{"class":296},[275,610,611],{"class":277,"line":450},[275,612,613],{"class":453},"// الناتج: \"K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0\"\n",[11,615,616,618],{},[17,617,459],{}," رموز آمنة للروابط، رموز التحقق من البريد الإلكتروني",[11,620,621],{},[17,622,465],{},[21,624,625,628,631],{},[24,626,627],{},"آمن للروابط (لا يحتاج ترميز خاص)",[24,629,630],{},"أكثر إحكاماً من hex",[24,632,633],{},"آمن مشفرة",[258,635,637],{"id":636},"_3-مجموعة-أحرف-مخصصة","3. مجموعة أحرف مخصصة",[11,639,640],{},"لكلمات المرور أو المتطلبات المحددة:",[266,642,644],{"className":268,"code":643,"language":270,"meta":271,"style":271},"import crypto from 'crypto';\n\nfunction generatePassword(\n  length = 16,\n  charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'\n) {\n  const randomBytes = crypto.randomBytes(length);\n  const result = [];\n  \n  for (let i = 0; i \u003C length; i++) {\n    const randomIndex = randomBytes[i] % charset.length;\n    result.push(charset[randomIndex]);\n  }\n  \n  return result.join('');\n}\n\nconsole.log(generatePassword(16));\n// الناتج: \"X7$mK#9pL2@vR5tQ\"\n\n// أبجدي رقمي فقط\nconsole.log(generatePassword(12, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'));\n// الناتج: \"K7xPzQ2mR8vN\"\n",[158,645,646,658,662,672,685,695,699,722,734,739,779,812,836,842,847,866,871,876,897,903,908,914,939],{"__ignoreMap":271},[275,647,648,650,652,654,656],{"class":277,"line":278},[275,649,282],{"class":281},[275,651,286],{"class":285},[275,653,289],{"class":281},[275,655,293],{"class":292},[275,657,297],{"class":296},[275,659,660],{"class":277,"line":300},[275,661,304],{"emptyLinePlaceholder":303},[275,663,664,666,669],{"class":277,"line":307},[275,665,311],{"class":310},[275,667,668],{"class":314}," generatePassword",[275,670,671],{"class":296},"(\n",[275,673,674,677,679,682],{"class":277,"line":336},[275,675,676],{"class":321},"  length",[275,678,326],{"class":325},[275,680,681],{"class":329}," 16",[275,683,684],{"class":296},",\n",[275,686,687,690,692],{"class":277,"line":345},[275,688,689],{"class":321},"  charset",[275,691,326],{"class":325},[275,693,694],{"class":292}," 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'\n",[275,696,697],{"class":277,"line":378},[275,698,333],{"class":296},[275,700,701,704,708,710,712,714,716,718,720],{"class":277,"line":394},[275,702,703],{"class":310},"  const",[275,705,707],{"class":706},"sToQf"," randomBytes",[275,709,326],{"class":325},[275,711,286],{"class":285},[275,713,359],{"class":296},[275,715,351],{"class":314},[275,717,318],{"class":296},[275,719,322],{"class":285},[275,721,412],{"class":296},[275,723,724,726,729,731],{"class":277,"line":415},[275,725,703],{"class":310},[275,727,728],{"class":706}," result",[275,730,326],{"class":325},[275,732,733],{"class":296}," [];\n",[275,735,736],{"class":277,"line":421},[275,737,738],{"class":296},"  \n",[275,740,741,744,747,750,753,755,758,761,764,767,770,772,774,777],{"class":277,"line":426},[275,742,743],{"class":281},"  for",[275,745,746],{"class":296}," (",[275,748,749],{"class":310},"let",[275,751,752],{"class":285}," i",[275,754,326],{"class":325},[275,756,757],{"class":329}," 0",[275,759,760],{"class":296},"; ",[275,762,763],{"class":285},"i",[275,765,766],{"class":325}," \u003C",[275,768,769],{"class":285}," length",[275,771,760],{"class":296},[275,773,763],{"class":285},[275,775,776],{"class":325},"++",[275,778,333],{"class":296},[275,780,781,784,787,789,791,794,796,799,802,805,807,810],{"class":277,"line":450},[275,782,783],{"class":310},"    const",[275,785,786],{"class":706}," randomIndex",[275,788,326],{"class":325},[275,790,707],{"class":285},[275,792,793],{"class":296},"[",[275,795,763],{"class":285},[275,797,798],{"class":296},"] ",[275,800,801],{"class":325},"%",[275,803,804],{"class":285}," charset",[275,806,359],{"class":296},[275,808,322],{"class":809},"sps74",[275,811,297],{"class":296},[275,813,815,818,820,823,825,828,830,833],{"class":277,"line":814},12,[275,816,817],{"class":285},"    result",[275,819,359],{"class":296},[275,821,822],{"class":314},"push",[275,824,318],{"class":296},[275,826,827],{"class":285},"charset",[275,829,793],{"class":296},[275,831,832],{"class":285},"randomIndex",[275,834,835],{"class":296},"]);\n",[275,837,839],{"class":277,"line":838},13,[275,840,841],{"class":296},"  }\n",[275,843,845],{"class":277,"line":844},14,[275,846,738],{"class":296},[275,848,850,852,854,856,859,861,864],{"class":277,"line":849},15,[275,851,339],{"class":281},[275,853,728],{"class":285},[275,855,359],{"class":296},[275,857,858],{"class":314},"join",[275,860,318],{"class":296},[275,862,863],{"class":292},"''",[275,865,412],{"class":296},[275,867,869],{"class":277,"line":868},16,[275,870,418],{"class":296},[275,872,874],{"class":277,"line":873},17,[275,875,304],{"emptyLinePlaceholder":303},[275,877,879,881,883,885,887,890,892,895],{"class":277,"line":878},18,[275,880,429],{"class":285},[275,882,359],{"class":296},[275,884,434],{"class":314},[275,886,318],{"class":296},[275,888,889],{"class":314},"generatePassword",[275,891,318],{"class":296},[275,893,894],{"class":329},"16",[275,896,447],{"class":296},[275,898,900],{"class":277,"line":899},19,[275,901,902],{"class":453},"// الناتج: \"X7$mK#9pL2@vR5tQ\"\n",[275,904,906],{"class":277,"line":905},20,[275,907,304],{"emptyLinePlaceholder":303},[275,909,911],{"class":277,"line":910},21,[275,912,913],{"class":453},"// أبجدي رقمي فقط\n",[275,915,917,919,921,923,925,927,929,932,934,937],{"class":277,"line":916},22,[275,918,429],{"class":285},[275,920,359],{"class":296},[275,922,434],{"class":314},[275,924,318],{"class":296},[275,926,889],{"class":314},[275,928,318],{"class":296},[275,930,931],{"class":329},"12",[275,933,407],{"class":296},[275,935,936],{"class":292},"'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'",[275,938,447],{"class":296},[275,940,942],{"class":277,"line":941},23,[275,943,944],{"class":453},"// الناتج: \"K7xPzQ2mR8vN\"\n",[11,946,947,949],{},[17,948,459],{}," توليد كلمات المرور، رموز بتنسيق مخصص",[11,951,952],{},[17,953,465],{},[21,955,956,959,962],{},[24,957,958],{},"تحكم كامل في مجموعة الأحرف",[24,960,961],{},"عشوائية آمنة",[24,963,964],{},"مرن لأي حالة استخدام",[258,966,968],{"id":967},"_4-uuid-v4-معرف-فريد-عالمياً","4. UUID v4 (معرف فريد عالمياً)",[11,970,971],{},"المتصفحات الحديثة وNode.js تدعم هذا محلياً الآن:",[266,973,975],{"className":268,"code":974,"language":270,"meta":271,"style":271},"import crypto from 'crypto';\n\n// طريقة crypto محلية (Node.js 14.17+)\nconst id = crypto.randomUUID();\nconsole.log(id);\n// الناتج: \"9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d\"\n",[158,976,977,989,993,998,1018,1033],{"__ignoreMap":271},[275,978,979,981,983,985,987],{"class":277,"line":278},[275,980,282],{"class":281},[275,982,286],{"class":285},[275,984,289],{"class":281},[275,986,293],{"class":292},[275,988,297],{"class":296},[275,990,991],{"class":277,"line":300},[275,992,304],{"emptyLinePlaceholder":303},[275,994,995],{"class":277,"line":307},[275,996,997],{"class":453},"// طريقة crypto محلية (Node.js 14.17+)\n",[275,999,1000,1003,1006,1008,1010,1012,1015],{"class":277,"line":336},[275,1001,1002],{"class":310},"const",[275,1004,1005],{"class":706}," id",[275,1007,326],{"class":325},[275,1009,286],{"class":285},[275,1011,359],{"class":296},[275,1013,1014],{"class":314},"randomUUID",[275,1016,1017],{"class":296},"();\n",[275,1019,1020,1022,1024,1026,1028,1031],{"class":277,"line":345},[275,1021,429],{"class":285},[275,1023,359],{"class":296},[275,1025,434],{"class":314},[275,1027,318],{"class":296},[275,1029,1030],{"class":285},"id",[275,1032,412],{"class":296},[275,1034,1035],{"class":277,"line":378},[275,1036,1037],{"class":453},"// الناتج: \"9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d\"\n",[11,1039,1040,1042],{},[17,1041,459],{}," مفاتيح أساسية لقاعدة البيانات، معرفات فريدة",[11,1044,1045],{},[17,1046,465],{},[21,1048,1049,1052,1055],{},[24,1050,1051],{},"تنسيق قياسي (RFC 4122)",[24,1053,1054],{},"فريد عالمياً",[24,1056,1057],{},"دعم محلي (لا حاجة لحزم)",[11,1059,1060],{},[17,1061,481],{},[21,1063,1064,1067],{},[24,1065,1066],{},"تنسيق ثابت (36 حرف مع شرطات)",[24,1068,1069],{},"غير قابل للتخصيص",[40,1071,1073],{"id":1072},"طرق-المتصفح-جانب-العميل","طرق المتصفح (جانب العميل)",[258,1075,1077],{"id":1076},"_1-سلسلة-عشوائية-آمنة-مشفرة","1. سلسلة عشوائية آمنة مشفرة",[11,1079,1080],{},"باستخدام Web Crypto API (متوفر في جميع المتصفحات الحديثة):",[266,1082,1084],{"className":268,"code":1083,"language":270,"meta":271,"style":271},"function generateSecureToken(length = 32) {\n  const array = new Uint8Array(length / 2);\n  crypto.getRandomValues(array);\n  \n  return Array.from(array, byte => byte.toString(16).padStart(2, '0')).join('');\n}\n\nconsole.log(generateSecureToken(32));\n// الناتج: \"7a3f9e2d8c1b6a4f7e0d9c2b5a8f3e1c\"\n",[158,1085,1086,1103,1128,1145,1149,1211,1215,1219,1238],{"__ignoreMap":271},[275,1087,1088,1090,1093,1095,1097,1099,1101],{"class":277,"line":278},[275,1089,311],{"class":310},[275,1091,1092],{"class":314}," generateSecureToken",[275,1094,318],{"class":296},[275,1096,322],{"class":321},[275,1098,326],{"class":325},[275,1100,330],{"class":329},[275,1102,333],{"class":296},[275,1104,1105,1107,1110,1112,1115,1118,1120,1122,1124,1126],{"class":277,"line":300},[275,1106,703],{"class":310},[275,1108,1109],{"class":706}," array",[275,1111,326],{"class":325},[275,1113,1114],{"class":310}," new",[275,1116,1117],{"class":314}," Uint8Array",[275,1119,318],{"class":296},[275,1121,322],{"class":285},[275,1123,369],{"class":325},[275,1125,372],{"class":329},[275,1127,412],{"class":296},[275,1129,1130,1133,1135,1138,1140,1143],{"class":277,"line":307},[275,1131,1132],{"class":285},"  crypto",[275,1134,359],{"class":296},[275,1136,1137],{"class":314},"getRandomValues",[275,1139,318],{"class":296},[275,1141,1142],{"class":285},"array",[275,1144,412],{"class":296},[275,1146,1147],{"class":277,"line":336},[275,1148,738],{"class":296},[275,1150,1151,1153,1156,1158,1161,1163,1165,1167,1170,1173,1176,1178,1180,1182,1184,1187,1190,1192,1195,1197,1200,1203,1205,1207,1209],{"class":277,"line":345},[275,1152,339],{"class":281},[275,1154,1155],{"class":285}," Array",[275,1157,359],{"class":296},[275,1159,1160],{"class":314},"from",[275,1162,318],{"class":296},[275,1164,1142],{"class":285},[275,1166,407],{"class":296},[275,1168,1169],{"class":321},"byte",[275,1171,1172],{"class":310}," =>",[275,1174,1175],{"class":285}," byte",[275,1177,359],{"class":296},[275,1179,383],{"class":314},[275,1181,318],{"class":296},[275,1183,894],{"class":329},[275,1185,1186],{"class":296},").",[275,1188,1189],{"class":314},"padStart",[275,1191,318],{"class":296},[275,1193,1194],{"class":329},"2",[275,1196,407],{"class":296},[275,1198,1199],{"class":292},"'0'",[275,1201,1202],{"class":296},")).",[275,1204,858],{"class":314},[275,1206,318],{"class":296},[275,1208,863],{"class":292},[275,1210,412],{"class":296},[275,1212,1213],{"class":277,"line":378},[275,1214,418],{"class":296},[275,1216,1217],{"class":277,"line":394},[275,1218,304],{"emptyLinePlaceholder":303},[275,1220,1221,1223,1225,1227,1229,1232,1234,1236],{"class":277,"line":415},[275,1222,429],{"class":285},[275,1224,359],{"class":296},[275,1226,434],{"class":314},[275,1228,318],{"class":296},[275,1230,1231],{"class":314},"generateSecureToken",[275,1233,318],{"class":296},[275,1235,444],{"class":329},[275,1237,447],{"class":296},[275,1239,1240],{"class":277,"line":421},[275,1241,1242],{"class":453},"// الناتج: \"7a3f9e2d8c1b6a4f7e0d9c2b5a8f3e1c\"\n",[11,1244,1245,1247],{},[17,1246,459],{}," رموز جانب العميل، معرفات جلسات مؤقتة",[11,1249,1250],{},[17,1251,465],{},[21,1253,1254,1257,1259],{},[24,1255,1256],{},"تعمل في جميع المتصفحات الحديثة",[24,1258,470],{},[24,1260,1261],{},"لا تبعيات",[258,1263,1265],{"id":1264},"_2-مجموعة-أحرف-مخصصة-المتصفح","2. مجموعة أحرف مخصصة (المتصفح)",[266,1267,1269],{"className":268,"code":1268,"language":270,"meta":271,"style":271},"function generateRandomString(length, charset) {\n  const array = new Uint8Array(length);\n  crypto.getRandomValues(array);\n  \n  return Array.from(array, byte => charset[byte % charset.length]).join('');\n}\n\n// الاستخدام\nconst alphanumeric = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\nconsole.log(generateRandomString(16, alphanumeric));\n// الناتج: \"K7xPzQ2mR8vNtL3w\"\n",[158,1270,1271,1288,1306,1320,1324,1370,1374,1378,1383,1397,1421],{"__ignoreMap":271},[275,1272,1273,1275,1278,1280,1282,1284,1286],{"class":277,"line":278},[275,1274,311],{"class":310},[275,1276,1277],{"class":314}," generateRandomString",[275,1279,318],{"class":296},[275,1281,322],{"class":321},[275,1283,407],{"class":296},[275,1285,827],{"class":321},[275,1287,333],{"class":296},[275,1289,1290,1292,1294,1296,1298,1300,1302,1304],{"class":277,"line":300},[275,1291,703],{"class":310},[275,1293,1109],{"class":706},[275,1295,326],{"class":325},[275,1297,1114],{"class":310},[275,1299,1117],{"class":314},[275,1301,318],{"class":296},[275,1303,322],{"class":285},[275,1305,412],{"class":296},[275,1307,1308,1310,1312,1314,1316,1318],{"class":277,"line":307},[275,1309,1132],{"class":285},[275,1311,359],{"class":296},[275,1313,1137],{"class":314},[275,1315,318],{"class":296},[275,1317,1142],{"class":285},[275,1319,412],{"class":296},[275,1321,1322],{"class":277,"line":336},[275,1323,738],{"class":296},[275,1325,1326,1328,1330,1332,1334,1336,1338,1340,1342,1344,1346,1348,1350,1353,1355,1357,1359,1362,1364,1366,1368],{"class":277,"line":345},[275,1327,339],{"class":281},[275,1329,1155],{"class":285},[275,1331,359],{"class":296},[275,1333,1160],{"class":314},[275,1335,318],{"class":296},[275,1337,1142],{"class":285},[275,1339,407],{"class":296},[275,1341,1169],{"class":321},[275,1343,1172],{"class":310},[275,1345,804],{"class":285},[275,1347,793],{"class":296},[275,1349,1169],{"class":285},[275,1351,1352],{"class":325}," %",[275,1354,804],{"class":285},[275,1356,359],{"class":296},[275,1358,322],{"class":809},[275,1360,1361],{"class":296},"]).",[275,1363,858],{"class":314},[275,1365,318],{"class":296},[275,1367,863],{"class":292},[275,1369,412],{"class":296},[275,1371,1372],{"class":277,"line":378},[275,1373,418],{"class":296},[275,1375,1376],{"class":277,"line":394},[275,1377,304],{"emptyLinePlaceholder":303},[275,1379,1380],{"class":277,"line":415},[275,1381,1382],{"class":453},"// الاستخدام\n",[275,1384,1385,1387,1390,1392,1395],{"class":277,"line":421},[275,1386,1002],{"class":310},[275,1388,1389],{"class":706}," alphanumeric",[275,1391,326],{"class":325},[275,1393,1394],{"class":292}," 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'",[275,1396,297],{"class":296},[275,1398,1399,1401,1403,1405,1407,1410,1412,1414,1416,1419],{"class":277,"line":426},[275,1400,429],{"class":285},[275,1402,359],{"class":296},[275,1404,434],{"class":314},[275,1406,318],{"class":296},[275,1408,1409],{"class":314},"generateRandomString",[275,1411,318],{"class":296},[275,1413,894],{"class":329},[275,1415,407],{"class":296},[275,1417,1418],{"class":285},"alphanumeric",[275,1420,447],{"class":296},[275,1422,1423],{"class":277,"line":450},[275,1424,1425],{"class":453},"// الناتج: \"K7xPzQ2mR8vNtL3w\"\n",[258,1427,1429],{"id":1428},"_3-uuid-في-المتصفح","3. UUID في المتصفح",[266,1431,1433],{"className":268,"code":1432,"language":270,"meta":271,"style":271},"// طريقة محلية (Chrome 92+، Firefox 95+، Safari 15.4+)\nconst id = crypto.randomUUID();\nconsole.log(id);\n// الناتج: \"9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d\"\n\n// Polyfill للمتصفحات القديمة\nfunction generateUUID() {\n  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) | (c === 'x' ? 0 : 0x08);\n    return r.toString(16);\n  });\n}\n",[158,1434,1435,1440,1456,1470,1474,1478,1483,1493,1541,1612,1629,1634],{"__ignoreMap":271},[275,1436,1437],{"class":277,"line":278},[275,1438,1439],{"class":453},"// طريقة محلية (Chrome 92+، Firefox 95+، Safari 15.4+)\n",[275,1441,1442,1444,1446,1448,1450,1452,1454],{"class":277,"line":300},[275,1443,1002],{"class":310},[275,1445,1005],{"class":706},[275,1447,326],{"class":325},[275,1449,286],{"class":285},[275,1451,359],{"class":296},[275,1453,1014],{"class":314},[275,1455,1017],{"class":296},[275,1457,1458,1460,1462,1464,1466,1468],{"class":277,"line":307},[275,1459,429],{"class":285},[275,1461,359],{"class":296},[275,1463,434],{"class":314},[275,1465,318],{"class":296},[275,1467,1030],{"class":285},[275,1469,412],{"class":296},[275,1471,1472],{"class":277,"line":336},[275,1473,1037],{"class":453},[275,1475,1476],{"class":277,"line":345},[275,1477,304],{"emptyLinePlaceholder":303},[275,1479,1480],{"class":277,"line":378},[275,1481,1482],{"class":453},"// Polyfill للمتصفحات القديمة\n",[275,1484,1485,1487,1490],{"class":277,"line":394},[275,1486,311],{"class":310},[275,1488,1489],{"class":314}," generateUUID",[275,1491,1492],{"class":296},"() {\n",[275,1494,1495,1497,1500,1502,1505,1507,1511,1514,1518,1521,1523,1526,1529,1532,1535,1538],{"class":277,"line":415},[275,1496,339],{"class":281},[275,1498,1499],{"class":292}," 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'",[275,1501,359],{"class":296},[275,1503,1504],{"class":314},"replace",[275,1506,318],{"class":296},[275,1508,1510],{"class":1509},"s4XyT","/",[275,1512,793],{"class":1513},"sqBZk",[275,1515,1517],{"class":1516},"suOk-","xy",[275,1519,1520],{"class":1513},"]",[275,1522,1510],{"class":1509},[275,1524,1525],{"class":310},"g",[275,1527,1528],{"class":296},", (",[275,1530,1531],{"class":321},"c",[275,1533,1534],{"class":296},") ",[275,1536,1537],{"class":310},"=>",[275,1539,1540],{"class":296}," {\n",[275,1542,1543,1545,1548,1550,1552,1555,1557,1559,1561,1564,1566,1568,1571,1574,1576,1578,1581,1584,1586,1589,1591,1593,1596,1599,1602,1604,1607,1610],{"class":277,"line":421},[275,1544,783],{"class":310},[275,1546,1547],{"class":706}," r",[275,1549,326],{"class":325},[275,1551,746],{"class":296},[275,1553,1554],{"class":285},"crypto",[275,1556,359],{"class":296},[275,1558,1137],{"class":314},[275,1560,318],{"class":296},[275,1562,1563],{"class":310},"new",[275,1565,1117],{"class":314},[275,1567,318],{"class":296},[275,1569,1570],{"class":329},"1",[275,1572,1573],{"class":296},"))[",[275,1575,404],{"class":329},[275,1577,798],{"class":296},[275,1579,1580],{"class":325},"&",[275,1582,1583],{"class":329}," 0x0f",[275,1585,1534],{"class":296},[275,1587,1588],{"class":325},"|",[275,1590,746],{"class":296},[275,1592,1531],{"class":285},[275,1594,1595],{"class":325}," ===",[275,1597,1598],{"class":292}," 'x'",[275,1600,1601],{"class":325}," ?",[275,1603,757],{"class":329},[275,1605,1606],{"class":325}," :",[275,1608,1609],{"class":329}," 0x08",[275,1611,412],{"class":296},[275,1613,1614,1617,1619,1621,1623,1625,1627],{"class":277,"line":426},[275,1615,1616],{"class":281},"    return",[275,1618,1547],{"class":285},[275,1620,359],{"class":296},[275,1622,383],{"class":314},[275,1624,318],{"class":296},[275,1626,894],{"class":329},[275,1628,412],{"class":296},[275,1630,1631],{"class":277,"line":450},[275,1632,1633],{"class":296},"  });\n",[275,1635,1636],{"class":277,"line":814},[275,1637,418],{"class":296},[258,1639,1641],{"id":1640},"_4-معرفات-سريعة-غير-آمنة-عناصر-dom-مفاتيح-react","4. معرفات سريعة غير آمنة (عناصر DOM، مفاتيح React)",[11,1643,1644],{},"عندما لا يهم الأمان:",[266,1646,1648],{"className":268,"code":1647,"language":270,"meta":271,"style":271},"// بسيط وسريع\nfunction generateId() {\n  return Date.now().toString(36) + Math.random().toString(36).substring(2);\n}\n\nconsole.log(generateId());\n// الناتج: \"ld3x7q9m5k2p8\"\n\n// أبسط لمفاتيح React\nconst key = `item-${Date.now()}-${Math.random()}`;\n",[158,1649,1650,1655,1664,1718,1722,1726,1742,1747,1751,1756],{"__ignoreMap":271},[275,1651,1652],{"class":277,"line":278},[275,1653,1654],{"class":453},"// بسيط وسريع\n",[275,1656,1657,1659,1662],{"class":277,"line":300},[275,1658,311],{"class":310},[275,1660,1661],{"class":314}," generateId",[275,1663,1492],{"class":296},[275,1665,1666,1668,1671,1673,1676,1679,1681,1683,1686,1688,1691,1694,1696,1699,1701,1703,1705,1707,1709,1712,1714,1716],{"class":277,"line":307},[275,1667,339],{"class":281},[275,1669,1670],{"class":285}," Date",[275,1672,359],{"class":296},[275,1674,1675],{"class":314},"now",[275,1677,1678],{"class":296},"().",[275,1680,383],{"class":314},[275,1682,318],{"class":296},[275,1684,1685],{"class":329},"36",[275,1687,1534],{"class":296},[275,1689,1690],{"class":325},"+",[275,1692,1693],{"class":285}," Math",[275,1695,359],{"class":296},[275,1697,1698],{"class":314},"random",[275,1700,1678],{"class":296},[275,1702,383],{"class":314},[275,1704,318],{"class":296},[275,1706,1685],{"class":329},[275,1708,1186],{"class":296},[275,1710,1711],{"class":314},"substring",[275,1713,318],{"class":296},[275,1715,1194],{"class":329},[275,1717,412],{"class":296},[275,1719,1720],{"class":277,"line":336},[275,1721,418],{"class":296},[275,1723,1724],{"class":277,"line":345},[275,1725,304],{"emptyLinePlaceholder":303},[275,1727,1728,1730,1732,1734,1736,1739],{"class":277,"line":378},[275,1729,429],{"class":285},[275,1731,359],{"class":296},[275,1733,434],{"class":314},[275,1735,318],{"class":296},[275,1737,1738],{"class":314},"generateId",[275,1740,1741],{"class":296},"());\n",[275,1743,1744],{"class":277,"line":394},[275,1745,1746],{"class":453},"// الناتج: \"ld3x7q9m5k2p8\"\n",[275,1748,1749],{"class":277,"line":415},[275,1750,304],{"emptyLinePlaceholder":303},[275,1752,1753],{"class":277,"line":421},[275,1754,1755],{"class":453},"// أبسط لمفاتيح React\n",[275,1757,1758,1760,1763,1765,1768,1772,1775,1778,1780,1783,1786,1789,1791,1793,1795,1797,1799,1801,1804],{"class":277,"line":426},[275,1759,1002],{"class":310},[275,1761,1762],{"class":706}," key",[275,1764,326],{"class":325},[275,1766,1767],{"class":292}," `item-",[275,1769,1771],{"class":1770},"se2iQ","${",[275,1773,1774],{"class":285},"Date",[275,1776,359],{"class":1777},"s5T4v",[275,1779,1675],{"class":314},[275,1781,1782],{"class":1777},"()",[275,1784,1785],{"class":1770},"}",[275,1787,1788],{"class":292},"-",[275,1790,1771],{"class":1770},[275,1792,356],{"class":285},[275,1794,359],{"class":1777},[275,1796,1698],{"class":314},[275,1798,1782],{"class":1777},[275,1800,1785],{"class":1770},[275,1802,1803],{"class":292},"`",[275,1805,297],{"class":296},[11,1807,1808,1811,1812,1814],{},[17,1809,1810],{},"⚠️ تحذير:"," لا تستخدم أبداً ",[158,1813,221],{}," للتطبيقات الحساسة أمنياً!",[40,1816,1818],{"id":1817},"طرق-عالمية-تعمل-في-كل-مكان","طرق عالمية (تعمل في كل مكان)",[258,1820,1822],{"id":1821},"استخدام-nano-id-موصى-به-لمعظم-الحالات","استخدام Nano ID (موصى به لمعظم الحالات)",[266,1824,1828],{"className":1825,"code":1826,"language":1827,"meta":271,"style":271},"language-bash shiki shiki-themes github-light dark-plus dark-plus","npm install nanoid\n","bash",[158,1829,1830],{"__ignoreMap":271},[275,1831,1832,1835,1838],{"class":277,"line":278},[275,1833,1834],{"class":314},"npm",[275,1836,1837],{"class":292}," install",[275,1839,1840],{"class":292}," nanoid\n",[266,1842,1844],{"className":268,"code":1843,"language":270,"meta":271,"style":271},"import { nanoid } from 'nanoid';\n\n// افتراضي: 21 حرف، آمن للروابط\nconsole.log(nanoid());\n// الناتج: \"V1StGXR8_Z5jdHi6B-myT\"\n\n// طول مخصص\nconsole.log(nanoid(10));\n// الناتج: \"IRFa-VaY2b\"\n\n// أبجدية مخصصة\nimport { customAlphabet } from 'nanoid';\nconst nanoid = customAlphabet('0123456789abcdef', 16);\nconsole.log(nanoid());\n// الناتج: \"4f90d13a42\"\n",[158,1845,1846,1865,1869,1874,1888,1893,1897,1902,1921,1926,1930,1935,1952,1975,1989],{"__ignoreMap":271},[275,1847,1848,1850,1853,1855,1858,1860,1863],{"class":277,"line":278},[275,1849,282],{"class":281},[275,1851,1852],{"class":296}," { ",[275,1854,240],{"class":285},[275,1856,1857],{"class":296}," } ",[275,1859,1160],{"class":281},[275,1861,1862],{"class":292}," 'nanoid'",[275,1864,297],{"class":296},[275,1866,1867],{"class":277,"line":300},[275,1868,304],{"emptyLinePlaceholder":303},[275,1870,1871],{"class":277,"line":307},[275,1872,1873],{"class":453},"// افتراضي: 21 حرف، آمن للروابط\n",[275,1875,1876,1878,1880,1882,1884,1886],{"class":277,"line":336},[275,1877,429],{"class":285},[275,1879,359],{"class":296},[275,1881,434],{"class":314},[275,1883,318],{"class":296},[275,1885,240],{"class":314},[275,1887,1741],{"class":296},[275,1889,1890],{"class":277,"line":345},[275,1891,1892],{"class":453},"// الناتج: \"V1StGXR8_Z5jdHi6B-myT\"\n",[275,1894,1895],{"class":277,"line":378},[275,1896,304],{"emptyLinePlaceholder":303},[275,1898,1899],{"class":277,"line":394},[275,1900,1901],{"class":453},"// طول مخصص\n",[275,1903,1904,1906,1908,1910,1912,1914,1916,1919],{"class":277,"line":415},[275,1905,429],{"class":285},[275,1907,359],{"class":296},[275,1909,434],{"class":314},[275,1911,318],{"class":296},[275,1913,240],{"class":314},[275,1915,318],{"class":296},[275,1917,1918],{"class":329},"10",[275,1920,447],{"class":296},[275,1922,1923],{"class":277,"line":421},[275,1924,1925],{"class":453},"// الناتج: \"IRFa-VaY2b\"\n",[275,1927,1928],{"class":277,"line":426},[275,1929,304],{"emptyLinePlaceholder":303},[275,1931,1932],{"class":277,"line":450},[275,1933,1934],{"class":453},"// أبجدية مخصصة\n",[275,1936,1937,1939,1941,1944,1946,1948,1950],{"class":277,"line":814},[275,1938,282],{"class":281},[275,1940,1852],{"class":296},[275,1942,1943],{"class":285},"customAlphabet",[275,1945,1857],{"class":296},[275,1947,1160],{"class":281},[275,1949,1862],{"class":292},[275,1951,297],{"class":296},[275,1953,1954,1956,1959,1961,1964,1966,1969,1971,1973],{"class":277,"line":838},[275,1955,1002],{"class":310},[275,1957,1958],{"class":706}," nanoid",[275,1960,326],{"class":325},[275,1962,1963],{"class":314}," customAlphabet",[275,1965,318],{"class":296},[275,1967,1968],{"class":292},"'0123456789abcdef'",[275,1970,407],{"class":296},[275,1972,894],{"class":329},[275,1974,412],{"class":296},[275,1976,1977,1979,1981,1983,1985,1987],{"class":277,"line":844},[275,1978,429],{"class":285},[275,1980,359],{"class":296},[275,1982,434],{"class":314},[275,1984,318],{"class":296},[275,1986,240],{"class":314},[275,1988,1741],{"class":296},[275,1990,1991],{"class":277,"line":849},[275,1992,1993],{"class":453},"// الناتج: \"4f90d13a42\"\n",[11,1995,1996],{},[17,1997,1998],{},"لماذا Nano ID رائع:",[21,2000,2001,2004,2007,2010,2013,2016],{},[24,2002,2003],{},"✅ أصغر 60% من UUID",[24,2005,2006],{},"✅ أسرع 2x من UUID",[24,2008,2009],{},"✅ يعمل في المتصفح وNode.js",[24,2011,2012],{},"✅ آمن للروابط افتراضياً",[24,2014,2015],{},"✅ آمن مشفرة",[24,2017,2018],{},"✅ قابل للتخصيص",[40,2020,2022],{"id":2021},"أمثلة-واقعية","أمثلة واقعية",[258,2024,2026],{"id":2025},"مولد-كلمات-المرور","مولد كلمات المرور",[266,2028,2030],{"className":268,"code":2029,"language":270,"meta":271,"style":271},"import crypto from 'crypto';\n\nclass PasswordGenerator {\n  static generate(options = {}) {\n    const {\n      length = 16,\n      numbers = true,\n      symbols = true,\n      lowercase = true,\n      uppercase = true,\n      excludeSimilar = true // استثناء i, l, 1, L, o, 0, O\n    } = options;\n\n    let charset = '';\n    if (lowercase) charset += 'abcdefghijkmnpqrstuvwxyz';\n    if (uppercase) charset += 'ABCDEFGHJKLMNPQRSTUVWXYZ';\n    if (numbers) charset += excludeSimilar ? '23456789' : '0123456789';\n    if (symbols) charset += '!@#$%^&*()-_=+[]{}|;:,.\u003C>?';\n\n    if (charset.length === 0) {\n      throw new Error('يجب تحديد نوع حرف واحد على الأقل');\n    }\n\n    const password = [];\n    const randomBytes = crypto.randomBytes(length);\n\n    for (let i = 0; i \u003C length; i++) {\n      password.push(charset[randomBytes[i] % charset.length]);\n    }\n\n    return password.join('');\n  }\n}\n\n// الاستخدام\nconsole.log(PasswordGenerator.generate({ length: 20, symbols: true }));\n// الناتج: \"K7$mP#9L2@vR5tQ$X3nF\"\n",[158,2031,2032,2044,2048,2059,2077,2083,2094,2107,2118,2129,2140,2152,2165,2169,2183,2205,2225,2255,2275,2279,2297,2314,2319,2323,2335,2356,2361,2393,2427,2432,2437,2454,2459,2464,2469,2474,2512],{"__ignoreMap":271},[275,2033,2034,2036,2038,2040,2042],{"class":277,"line":278},[275,2035,282],{"class":281},[275,2037,286],{"class":285},[275,2039,289],{"class":281},[275,2041,293],{"class":292},[275,2043,297],{"class":296},[275,2045,2046],{"class":277,"line":300},[275,2047,304],{"emptyLinePlaceholder":303},[275,2049,2050,2053,2057],{"class":277,"line":307},[275,2051,2052],{"class":310},"class",[275,2054,2056],{"class":2055},"su_XB"," PasswordGenerator",[275,2058,1540],{"class":296},[275,2060,2061,2064,2067,2069,2072,2074],{"class":277,"line":336},[275,2062,2063],{"class":310},"  static",[275,2065,2066],{"class":314}," generate",[275,2068,318],{"class":296},[275,2070,2071],{"class":321},"options",[275,2073,326],{"class":325},[275,2075,2076],{"class":296}," {}) {\n",[275,2078,2079,2081],{"class":277,"line":345},[275,2080,783],{"class":310},[275,2082,1540],{"class":296},[275,2084,2085,2088,2090,2092],{"class":277,"line":378},[275,2086,2087],{"class":706},"      length",[275,2089,326],{"class":325},[275,2091,681],{"class":329},[275,2093,684],{"class":296},[275,2095,2096,2099,2101,2105],{"class":277,"line":394},[275,2097,2098],{"class":706},"      numbers",[275,2100,326],{"class":325},[275,2102,2104],{"class":2103},"s7v1m"," true",[275,2106,684],{"class":296},[275,2108,2109,2112,2114,2116],{"class":277,"line":415},[275,2110,2111],{"class":706},"      symbols",[275,2113,326],{"class":325},[275,2115,2104],{"class":2103},[275,2117,684],{"class":296},[275,2119,2120,2123,2125,2127],{"class":277,"line":421},[275,2121,2122],{"class":706},"      lowercase",[275,2124,326],{"class":325},[275,2126,2104],{"class":2103},[275,2128,684],{"class":296},[275,2130,2131,2134,2136,2138],{"class":277,"line":426},[275,2132,2133],{"class":706},"      uppercase",[275,2135,326],{"class":325},[275,2137,2104],{"class":2103},[275,2139,684],{"class":296},[275,2141,2142,2145,2147,2149],{"class":277,"line":450},[275,2143,2144],{"class":706},"      excludeSimilar",[275,2146,326],{"class":325},[275,2148,2104],{"class":2103},[275,2150,2151],{"class":453}," // استثناء i, l, 1, L, o, 0, O\n",[275,2153,2154,2157,2160,2163],{"class":277,"line":814},[275,2155,2156],{"class":296},"    } ",[275,2158,2159],{"class":325},"=",[275,2161,2162],{"class":285}," options",[275,2164,297],{"class":296},[275,2166,2167],{"class":277,"line":838},[275,2168,304],{"emptyLinePlaceholder":303},[275,2170,2171,2174,2176,2178,2181],{"class":277,"line":844},[275,2172,2173],{"class":310},"    let",[275,2175,804],{"class":285},[275,2177,326],{"class":325},[275,2179,2180],{"class":292}," ''",[275,2182,297],{"class":296},[275,2184,2185,2188,2190,2193,2195,2197,2200,2203],{"class":277,"line":849},[275,2186,2187],{"class":281},"    if",[275,2189,746],{"class":296},[275,2191,2192],{"class":285},"lowercase",[275,2194,1534],{"class":296},[275,2196,827],{"class":285},[275,2198,2199],{"class":325}," +=",[275,2201,2202],{"class":292}," 'abcdefghijkmnpqrstuvwxyz'",[275,2204,297],{"class":296},[275,2206,2207,2209,2211,2214,2216,2218,2220,2223],{"class":277,"line":868},[275,2208,2187],{"class":281},[275,2210,746],{"class":296},[275,2212,2213],{"class":285},"uppercase",[275,2215,1534],{"class":296},[275,2217,827],{"class":285},[275,2219,2199],{"class":325},[275,2221,2222],{"class":292}," 'ABCDEFGHJKLMNPQRSTUVWXYZ'",[275,2224,297],{"class":296},[275,2226,2227,2229,2231,2234,2236,2238,2240,2243,2245,2248,2250,2253],{"class":277,"line":873},[275,2228,2187],{"class":281},[275,2230,746],{"class":296},[275,2232,2233],{"class":285},"numbers",[275,2235,1534],{"class":296},[275,2237,827],{"class":285},[275,2239,2199],{"class":325},[275,2241,2242],{"class":285}," excludeSimilar",[275,2244,1601],{"class":325},[275,2246,2247],{"class":292}," '23456789'",[275,2249,1606],{"class":325},[275,2251,2252],{"class":292}," '0123456789'",[275,2254,297],{"class":296},[275,2256,2257,2259,2261,2264,2266,2268,2270,2273],{"class":277,"line":878},[275,2258,2187],{"class":281},[275,2260,746],{"class":296},[275,2262,2263],{"class":285},"symbols",[275,2265,1534],{"class":296},[275,2267,827],{"class":285},[275,2269,2199],{"class":325},[275,2271,2272],{"class":292}," '!@#$%^&*()-_=+[]{}|;:,.\u003C>?'",[275,2274,297],{"class":296},[275,2276,2277],{"class":277,"line":899},[275,2278,304],{"emptyLinePlaceholder":303},[275,2280,2281,2283,2285,2287,2289,2291,2293,2295],{"class":277,"line":905},[275,2282,2187],{"class":281},[275,2284,746],{"class":296},[275,2286,827],{"class":285},[275,2288,359],{"class":296},[275,2290,322],{"class":809},[275,2292,1595],{"class":325},[275,2294,757],{"class":329},[275,2296,333],{"class":296},[275,2298,2299,2302,2304,2307,2309,2312],{"class":277,"line":910},[275,2300,2301],{"class":281},"      throw",[275,2303,1114],{"class":310},[275,2305,2306],{"class":314}," Error",[275,2308,318],{"class":296},[275,2310,2311],{"class":292},"'يجب تحديد نوع حرف واحد على الأقل'",[275,2313,412],{"class":296},[275,2315,2316],{"class":277,"line":916},[275,2317,2318],{"class":296},"    }\n",[275,2320,2321],{"class":277,"line":941},[275,2322,304],{"emptyLinePlaceholder":303},[275,2324,2326,2328,2331,2333],{"class":277,"line":2325},24,[275,2327,783],{"class":310},[275,2329,2330],{"class":706}," password",[275,2332,326],{"class":325},[275,2334,733],{"class":296},[275,2336,2338,2340,2342,2344,2346,2348,2350,2352,2354],{"class":277,"line":2337},25,[275,2339,783],{"class":310},[275,2341,707],{"class":706},[275,2343,326],{"class":325},[275,2345,286],{"class":285},[275,2347,359],{"class":296},[275,2349,351],{"class":314},[275,2351,318],{"class":296},[275,2353,322],{"class":285},[275,2355,412],{"class":296},[275,2357,2359],{"class":277,"line":2358},26,[275,2360,304],{"emptyLinePlaceholder":303},[275,2362,2364,2367,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391],{"class":277,"line":2363},27,[275,2365,2366],{"class":281},"    for",[275,2368,746],{"class":296},[275,2370,749],{"class":310},[275,2372,752],{"class":285},[275,2374,326],{"class":325},[275,2376,757],{"class":329},[275,2378,760],{"class":296},[275,2380,763],{"class":285},[275,2382,766],{"class":325},[275,2384,769],{"class":285},[275,2386,760],{"class":296},[275,2388,763],{"class":285},[275,2390,776],{"class":325},[275,2392,333],{"class":296},[275,2394,2396,2399,2401,2403,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423,2425],{"class":277,"line":2395},28,[275,2397,2398],{"class":285},"      password",[275,2400,359],{"class":296},[275,2402,822],{"class":314},[275,2404,318],{"class":296},[275,2406,827],{"class":285},[275,2408,793],{"class":296},[275,2410,351],{"class":285},[275,2412,793],{"class":296},[275,2414,763],{"class":285},[275,2416,798],{"class":296},[275,2418,801],{"class":325},[275,2420,804],{"class":285},[275,2422,359],{"class":296},[275,2424,322],{"class":809},[275,2426,835],{"class":296},[275,2428,2430],{"class":277,"line":2429},29,[275,2431,2318],{"class":296},[275,2433,2435],{"class":277,"line":2434},30,[275,2436,304],{"emptyLinePlaceholder":303},[275,2438,2440,2442,2444,2446,2448,2450,2452],{"class":277,"line":2439},31,[275,2441,1616],{"class":281},[275,2443,2330],{"class":285},[275,2445,359],{"class":296},[275,2447,858],{"class":314},[275,2449,318],{"class":296},[275,2451,863],{"class":292},[275,2453,412],{"class":296},[275,2455,2457],{"class":277,"line":2456},32,[275,2458,841],{"class":296},[275,2460,2462],{"class":277,"line":2461},33,[275,2463,418],{"class":296},[275,2465,2467],{"class":277,"line":2466},34,[275,2468,304],{"emptyLinePlaceholder":303},[275,2470,2472],{"class":277,"line":2471},35,[275,2473,1382],{"class":453},[275,2475,2477,2479,2481,2483,2485,2488,2490,2493,2496,2499,2502,2504,2507,2509],{"class":277,"line":2476},36,[275,2478,429],{"class":285},[275,2480,359],{"class":296},[275,2482,434],{"class":314},[275,2484,318],{"class":296},[275,2486,2487],{"class":285},"PasswordGenerator",[275,2489,359],{"class":296},[275,2491,2492],{"class":314},"generate",[275,2494,2495],{"class":296},"({ ",[275,2497,2498],{"class":285},"length:",[275,2500,2501],{"class":329}," 20",[275,2503,407],{"class":296},[275,2505,2506],{"class":285},"symbols:",[275,2508,2104],{"class":2103},[275,2510,2511],{"class":296}," }));\n",[275,2513,2515],{"class":277,"line":2514},37,[275,2516,2517],{"class":453},"// الناتج: \"K7$mP#9L2@vR5tQ$X3nF\"\n",[258,2519,2521],{"id":2520},"مولد-رموز-api","مولد رموز API",[266,2523,2525],{"className":268,"code":2524,"language":270,"meta":271,"style":271},"import crypto from 'crypto';\n\nclass TokenGenerator {\n  static generateApiKey(prefix = 'sk') {\n    const token = crypto.randomBytes(32).toString('base64url');\n    return `${prefix}_${token}`;\n  }\n\n  static generateSessionId() {\n    return crypto.randomBytes(32).toString('hex');\n  }\n\n  static generateResetToken() {\n    // قصير الأمد، تنتهي صلاحيته بعد الاستخدام\n    return crypto.randomBytes(32).toString('hex');\n  }\n}\n\n// الاستخدام\nconsole.log(TokenGenerator.generateApiKey('pk'));\n// الناتج: \"pk_K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0K7xPzQ2m\"\n\nconsole.log(TokenGenerator.generateSessionId());\n// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n",[158,2526,2527,2539,2543,2552,2571,2600,2627,2631,2635,2644,2668,2672,2676,2685,2690,2714,2718,2722,2726,2730,2755,2760,2764,2783],{"__ignoreMap":271},[275,2528,2529,2531,2533,2535,2537],{"class":277,"line":278},[275,2530,282],{"class":281},[275,2532,286],{"class":285},[275,2534,289],{"class":281},[275,2536,293],{"class":292},[275,2538,297],{"class":296},[275,2540,2541],{"class":277,"line":300},[275,2542,304],{"emptyLinePlaceholder":303},[275,2544,2545,2547,2550],{"class":277,"line":307},[275,2546,2052],{"class":310},[275,2548,2549],{"class":2055}," TokenGenerator",[275,2551,1540],{"class":296},[275,2553,2554,2556,2559,2561,2564,2566,2569],{"class":277,"line":336},[275,2555,2063],{"class":310},[275,2557,2558],{"class":314}," generateApiKey",[275,2560,318],{"class":296},[275,2562,2563],{"class":321},"prefix",[275,2565,326],{"class":325},[275,2567,2568],{"class":292}," 'sk'",[275,2570,333],{"class":296},[275,2572,2573,2575,2578,2580,2582,2584,2586,2588,2590,2592,2594,2596,2598],{"class":277,"line":345},[275,2574,783],{"class":310},[275,2576,2577],{"class":706}," token",[275,2579,326],{"class":325},[275,2581,286],{"class":285},[275,2583,359],{"class":296},[275,2585,351],{"class":314},[275,2587,318],{"class":296},[275,2589,444],{"class":329},[275,2591,1186],{"class":296},[275,2593,383],{"class":314},[275,2595,318],{"class":296},[275,2597,563],{"class":292},[275,2599,412],{"class":296},[275,2601,2602,2604,2607,2609,2611,2613,2616,2618,2621,2623,2625],{"class":277,"line":378},[275,2603,1616],{"class":281},[275,2605,2606],{"class":292}," `",[275,2608,1771],{"class":1770},[275,2610,2563],{"class":285},[275,2612,1785],{"class":1770},[275,2614,2615],{"class":292},"_",[275,2617,1771],{"class":1770},[275,2619,2620],{"class":285},"token",[275,2622,1785],{"class":1770},[275,2624,1803],{"class":292},[275,2626,297],{"class":296},[275,2628,2629],{"class":277,"line":394},[275,2630,841],{"class":296},[275,2632,2633],{"class":277,"line":415},[275,2634,304],{"emptyLinePlaceholder":303},[275,2636,2637,2639,2642],{"class":277,"line":421},[275,2638,2063],{"class":310},[275,2640,2641],{"class":314}," generateSessionId",[275,2643,1492],{"class":296},[275,2645,2646,2648,2650,2652,2654,2656,2658,2660,2662,2664,2666],{"class":277,"line":426},[275,2647,1616],{"class":281},[275,2649,286],{"class":285},[275,2651,359],{"class":296},[275,2653,351],{"class":314},[275,2655,318],{"class":296},[275,2657,444],{"class":329},[275,2659,1186],{"class":296},[275,2661,383],{"class":314},[275,2663,318],{"class":296},[275,2665,388],{"class":292},[275,2667,412],{"class":296},[275,2669,2670],{"class":277,"line":450},[275,2671,841],{"class":296},[275,2673,2674],{"class":277,"line":814},[275,2675,304],{"emptyLinePlaceholder":303},[275,2677,2678,2680,2683],{"class":277,"line":838},[275,2679,2063],{"class":310},[275,2681,2682],{"class":314}," generateResetToken",[275,2684,1492],{"class":296},[275,2686,2687],{"class":277,"line":844},[275,2688,2689],{"class":453},"    // قصير الأمد، تنتهي صلاحيته بعد الاستخدام\n",[275,2691,2692,2694,2696,2698,2700,2702,2704,2706,2708,2710,2712],{"class":277,"line":849},[275,2693,1616],{"class":281},[275,2695,286],{"class":285},[275,2697,359],{"class":296},[275,2699,351],{"class":314},[275,2701,318],{"class":296},[275,2703,444],{"class":329},[275,2705,1186],{"class":296},[275,2707,383],{"class":314},[275,2709,318],{"class":296},[275,2711,388],{"class":292},[275,2713,412],{"class":296},[275,2715,2716],{"class":277,"line":868},[275,2717,841],{"class":296},[275,2719,2720],{"class":277,"line":873},[275,2721,418],{"class":296},[275,2723,2724],{"class":277,"line":878},[275,2725,304],{"emptyLinePlaceholder":303},[275,2727,2728],{"class":277,"line":899},[275,2729,1382],{"class":453},[275,2731,2732,2734,2736,2738,2740,2743,2745,2748,2750,2753],{"class":277,"line":905},[275,2733,429],{"class":285},[275,2735,359],{"class":296},[275,2737,434],{"class":314},[275,2739,318],{"class":296},[275,2741,2742],{"class":285},"TokenGenerator",[275,2744,359],{"class":296},[275,2746,2747],{"class":314},"generateApiKey",[275,2749,318],{"class":296},[275,2751,2752],{"class":292},"'pk'",[275,2754,447],{"class":296},[275,2756,2757],{"class":277,"line":910},[275,2758,2759],{"class":453},"// الناتج: \"pk_K7xP-zQ2mR8vN5tL3wY6jF9cH4dS1aE0K7xPzQ2m\"\n",[275,2761,2762],{"class":277,"line":916},[275,2763,304],{"emptyLinePlaceholder":303},[275,2765,2766,2768,2770,2772,2774,2776,2778,2781],{"class":277,"line":941},[275,2767,429],{"class":285},[275,2769,359],{"class":296},[275,2771,434],{"class":314},[275,2773,318],{"class":296},[275,2775,2742],{"class":285},[275,2777,359],{"class":296},[275,2779,2780],{"class":314},"generateSessionId",[275,2782,1741],{"class":296},[275,2784,2785],{"class":277,"line":2325},[275,2786,2787],{"class":453},"// الناتج: \"a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1a7f5c3e9d2b1a4f6c8e0d9b2a5f7c3e1\"\n",[258,2789,2791],{"id":2790},"مولد-روابط-قصيرة","مولد روابط قصيرة",[266,2793,2795],{"className":268,"code":2794,"language":270,"meta":271,"style":271},"import { customAlphabet } from 'nanoid';\n\n// استخدم فقط أحرف آمنة للروابط، استثنِ المربكة\nconst generateShortId = customAlphabet(\n  'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789',\n  8\n);\n\nfunction createShortUrl(longUrl) {\n  const shortId = generateShortId();\n  const shortUrl = `https://myapp.com/${shortId}`;\n  \n  // احفظ في قاعدة البيانات: { shortId, longUrl }\n  return shortUrl;\n}\n\nconsole.log(createShortUrl('https://example.com/very/long/url'));\n// الناتج: \"https://myapp.com/K7xPzQ2m\"\n",[158,2796,2797,2813,2817,2822,2835,2842,2847,2851,2855,2869,2882,2905,2909,2914,2922,2926,2930,2950],{"__ignoreMap":271},[275,2798,2799,2801,2803,2805,2807,2809,2811],{"class":277,"line":278},[275,2800,282],{"class":281},[275,2802,1852],{"class":296},[275,2804,1943],{"class":285},[275,2806,1857],{"class":296},[275,2808,1160],{"class":281},[275,2810,1862],{"class":292},[275,2812,297],{"class":296},[275,2814,2815],{"class":277,"line":300},[275,2816,304],{"emptyLinePlaceholder":303},[275,2818,2819],{"class":277,"line":307},[275,2820,2821],{"class":453},"// استخدم فقط أحرف آمنة للروابط، استثنِ المربكة\n",[275,2823,2824,2826,2829,2831,2833],{"class":277,"line":336},[275,2825,1002],{"class":310},[275,2827,2828],{"class":706}," generateShortId",[275,2830,326],{"class":325},[275,2832,1963],{"class":314},[275,2834,671],{"class":296},[275,2836,2837,2840],{"class":277,"line":345},[275,2838,2839],{"class":292},"  'abcdefghijkmnpqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'",[275,2841,684],{"class":296},[275,2843,2844],{"class":277,"line":378},[275,2845,2846],{"class":329},"  8\n",[275,2848,2849],{"class":277,"line":394},[275,2850,412],{"class":296},[275,2852,2853],{"class":277,"line":415},[275,2854,304],{"emptyLinePlaceholder":303},[275,2856,2857,2859,2862,2864,2867],{"class":277,"line":421},[275,2858,311],{"class":310},[275,2860,2861],{"class":314}," createShortUrl",[275,2863,318],{"class":296},[275,2865,2866],{"class":321},"longUrl",[275,2868,333],{"class":296},[275,2870,2871,2873,2876,2878,2880],{"class":277,"line":426},[275,2872,703],{"class":310},[275,2874,2875],{"class":706}," shortId",[275,2877,326],{"class":325},[275,2879,2828],{"class":314},[275,2881,1017],{"class":296},[275,2883,2884,2886,2889,2891,2894,2896,2899,2901,2903],{"class":277,"line":450},[275,2885,703],{"class":310},[275,2887,2888],{"class":706}," shortUrl",[275,2890,326],{"class":325},[275,2892,2893],{"class":292}," `https://myapp.com/",[275,2895,1771],{"class":1770},[275,2897,2898],{"class":285},"shortId",[275,2900,1785],{"class":1770},[275,2902,1803],{"class":292},[275,2904,297],{"class":296},[275,2906,2907],{"class":277,"line":814},[275,2908,738],{"class":296},[275,2910,2911],{"class":277,"line":838},[275,2912,2913],{"class":453},"  // احفظ في قاعدة البيانات: { shortId, longUrl }\n",[275,2915,2916,2918,2920],{"class":277,"line":844},[275,2917,339],{"class":281},[275,2919,2888],{"class":285},[275,2921,297],{"class":296},[275,2923,2924],{"class":277,"line":849},[275,2925,418],{"class":296},[275,2927,2928],{"class":277,"line":868},[275,2929,304],{"emptyLinePlaceholder":303},[275,2931,2932,2934,2936,2938,2940,2943,2945,2948],{"class":277,"line":873},[275,2933,429],{"class":285},[275,2935,359],{"class":296},[275,2937,434],{"class":314},[275,2939,318],{"class":296},[275,2941,2942],{"class":314},"createShortUrl",[275,2944,318],{"class":296},[275,2946,2947],{"class":292},"'https://example.com/very/long/url'",[275,2949,447],{"class":296},[275,2951,2952],{"class":277,"line":878},[275,2953,2954],{"class":453},"// الناتج: \"https://myapp.com/K7xPzQ2m\"\n",[258,2956,2958],{"id":2957},"أسماء-ملفات-فريدة-للرفع","أسماء ملفات فريدة للرفع",[266,2960,2962],{"className":268,"code":2961,"language":270,"meta":271,"style":271},"import crypto from 'crypto';\nimport path from 'path';\n\nfunction generateUniqueFilename(originalFilename) {\n  const timestamp = Date.now();\n  const randomString = crypto.randomBytes(8).toString('hex');\n  const extension = path.extname(originalFilename);\n  const nameWithoutExt = path.basename(originalFilename, extension);\n  \n  // التنسيق: originalname_timestamp_random.ext\n  return `${nameWithoutExt}_${timestamp}_${randomString}${extension}`;\n}\n\nconsole.log(generateUniqueFilename('photo.jpg'));\n// الناتج: \"photo_1704931200000_a7f5c3e9d2b1.jpg\"\n",[158,2963,2964,2976,2990,2994,3008,3025,3055,3077,3104,3108,3113,3153,3157,3161,3181],{"__ignoreMap":271},[275,2965,2966,2968,2970,2972,2974],{"class":277,"line":278},[275,2967,282],{"class":281},[275,2969,286],{"class":285},[275,2971,289],{"class":281},[275,2973,293],{"class":292},[275,2975,297],{"class":296},[275,2977,2978,2980,2983,2985,2988],{"class":277,"line":300},[275,2979,282],{"class":281},[275,2981,2982],{"class":285}," path",[275,2984,289],{"class":281},[275,2986,2987],{"class":292}," 'path'",[275,2989,297],{"class":296},[275,2991,2992],{"class":277,"line":307},[275,2993,304],{"emptyLinePlaceholder":303},[275,2995,2996,2998,3001,3003,3006],{"class":277,"line":336},[275,2997,311],{"class":310},[275,2999,3000],{"class":314}," generateUniqueFilename",[275,3002,318],{"class":296},[275,3004,3005],{"class":321},"originalFilename",[275,3007,333],{"class":296},[275,3009,3010,3012,3015,3017,3019,3021,3023],{"class":277,"line":345},[275,3011,703],{"class":310},[275,3013,3014],{"class":706}," timestamp",[275,3016,326],{"class":325},[275,3018,1670],{"class":285},[275,3020,359],{"class":296},[275,3022,1675],{"class":314},[275,3024,1017],{"class":296},[275,3026,3027,3029,3032,3034,3036,3038,3040,3042,3045,3047,3049,3051,3053],{"class":277,"line":378},[275,3028,703],{"class":310},[275,3030,3031],{"class":706}," randomString",[275,3033,326],{"class":325},[275,3035,286],{"class":285},[275,3037,359],{"class":296},[275,3039,351],{"class":314},[275,3041,318],{"class":296},[275,3043,3044],{"class":329},"8",[275,3046,1186],{"class":296},[275,3048,383],{"class":314},[275,3050,318],{"class":296},[275,3052,388],{"class":292},[275,3054,412],{"class":296},[275,3056,3057,3059,3062,3064,3066,3068,3071,3073,3075],{"class":277,"line":394},[275,3058,703],{"class":310},[275,3060,3061],{"class":706}," extension",[275,3063,326],{"class":325},[275,3065,2982],{"class":285},[275,3067,359],{"class":296},[275,3069,3070],{"class":314},"extname",[275,3072,318],{"class":296},[275,3074,3005],{"class":285},[275,3076,412],{"class":296},[275,3078,3079,3081,3084,3086,3088,3090,3093,3095,3097,3099,3102],{"class":277,"line":415},[275,3080,703],{"class":310},[275,3082,3083],{"class":706}," nameWithoutExt",[275,3085,326],{"class":325},[275,3087,2982],{"class":285},[275,3089,359],{"class":296},[275,3091,3092],{"class":314},"basename",[275,3094,318],{"class":296},[275,3096,3005],{"class":285},[275,3098,407],{"class":296},[275,3100,3101],{"class":285},"extension",[275,3103,412],{"class":296},[275,3105,3106],{"class":277,"line":421},[275,3107,738],{"class":296},[275,3109,3110],{"class":277,"line":426},[275,3111,3112],{"class":453},"  // التنسيق: originalname_timestamp_random.ext\n",[275,3114,3115,3117,3119,3121,3124,3126,3128,3130,3133,3135,3137,3139,3142,3145,3147,3149,3151],{"class":277,"line":450},[275,3116,339],{"class":281},[275,3118,2606],{"class":292},[275,3120,1771],{"class":1770},[275,3122,3123],{"class":285},"nameWithoutExt",[275,3125,1785],{"class":1770},[275,3127,2615],{"class":292},[275,3129,1771],{"class":1770},[275,3131,3132],{"class":285},"timestamp",[275,3134,1785],{"class":1770},[275,3136,2615],{"class":292},[275,3138,1771],{"class":1770},[275,3140,3141],{"class":285},"randomString",[275,3143,3144],{"class":1770},"}${",[275,3146,3101],{"class":285},[275,3148,1785],{"class":1770},[275,3150,1803],{"class":292},[275,3152,297],{"class":296},[275,3154,3155],{"class":277,"line":814},[275,3156,418],{"class":296},[275,3158,3159],{"class":277,"line":838},[275,3160,304],{"emptyLinePlaceholder":303},[275,3162,3163,3165,3167,3169,3171,3174,3176,3179],{"class":277,"line":844},[275,3164,429],{"class":285},[275,3166,359],{"class":296},[275,3168,434],{"class":314},[275,3170,318],{"class":296},[275,3172,3173],{"class":314},"generateUniqueFilename",[275,3175,318],{"class":296},[275,3177,3178],{"class":292},"'photo.jpg'",[275,3180,447],{"class":296},[275,3182,3183],{"class":277,"line":849},[275,3184,3185],{"class":453},"// الناتج: \"photo_1704931200000_a7f5c3e9d2b1.jpg\"\n",[40,3187,3189],{"id":3188},"مقارنة-الأداء","مقارنة الأداء",[11,3191,3192],{},"إليك معيار للطرق المختلفة (100,000 تكرار):",[266,3194,3196],{"className":268,"code":3195,"language":270,"meta":271,"style":271},"import crypto from 'crypto';\nimport { nanoid } from 'nanoid';\n\nfunction benchmark(fn, iterations = 100000) {\n  const start = performance.now();\n  for (let i = 0; i \u003C iterations; i++) {\n    fn();\n  }\n  const end = performance.now();\n  return `${(end - start).toFixed(2)}ms`;\n}\n\nconsole.log('crypto.randomUUID():', benchmark(() => crypto.randomUUID()));\n// الناتج: ~45ms (أسرع!)\n\nconsole.log('crypto.randomBytes(16).toString(\"hex\"):', benchmark(() => \n  crypto.randomBytes(16).toString('hex')\n));\n// الناتج: ~60ms\n\nconsole.log('nanoid():', benchmark(() => nanoid()));\n// الناتج: ~75ms\n\nconsole.log('Math.random() (غير آمن!):', benchmark(() => \n  Math.random().toString(36).substring(2, 15)\n));\n// الناتج: ~25ms (أسرع لكن غير آمن!)\n",[158,3197,3198,3210,3226,3230,3254,3272,3303,3310,3314,3331,3368,3372,3376,3408,3413,3417,3441,3463,3467,3472,3476,3501,3506,3510,3533,3565,3569],{"__ignoreMap":271},[275,3199,3200,3202,3204,3206,3208],{"class":277,"line":278},[275,3201,282],{"class":281},[275,3203,286],{"class":285},[275,3205,289],{"class":281},[275,3207,293],{"class":292},[275,3209,297],{"class":296},[275,3211,3212,3214,3216,3218,3220,3222,3224],{"class":277,"line":300},[275,3213,282],{"class":281},[275,3215,1852],{"class":296},[275,3217,240],{"class":285},[275,3219,1857],{"class":296},[275,3221,1160],{"class":281},[275,3223,1862],{"class":292},[275,3225,297],{"class":296},[275,3227,3228],{"class":277,"line":307},[275,3229,304],{"emptyLinePlaceholder":303},[275,3231,3232,3234,3237,3239,3242,3244,3247,3249,3252],{"class":277,"line":336},[275,3233,311],{"class":310},[275,3235,3236],{"class":314}," benchmark",[275,3238,318],{"class":296},[275,3240,3241],{"class":321},"fn",[275,3243,407],{"class":296},[275,3245,3246],{"class":321},"iterations",[275,3248,326],{"class":325},[275,3250,3251],{"class":329}," 100000",[275,3253,333],{"class":296},[275,3255,3256,3258,3261,3263,3266,3268,3270],{"class":277,"line":345},[275,3257,703],{"class":310},[275,3259,3260],{"class":706}," start",[275,3262,326],{"class":325},[275,3264,3265],{"class":285}," performance",[275,3267,359],{"class":296},[275,3269,1675],{"class":314},[275,3271,1017],{"class":296},[275,3273,3274,3276,3278,3280,3282,3284,3286,3288,3290,3292,3295,3297,3299,3301],{"class":277,"line":378},[275,3275,743],{"class":281},[275,3277,746],{"class":296},[275,3279,749],{"class":310},[275,3281,752],{"class":285},[275,3283,326],{"class":325},[275,3285,757],{"class":329},[275,3287,760],{"class":296},[275,3289,763],{"class":285},[275,3291,766],{"class":325},[275,3293,3294],{"class":285}," iterations",[275,3296,760],{"class":296},[275,3298,763],{"class":285},[275,3300,776],{"class":325},[275,3302,333],{"class":296},[275,3304,3305,3308],{"class":277,"line":394},[275,3306,3307],{"class":314},"    fn",[275,3309,1017],{"class":296},[275,3311,3312],{"class":277,"line":415},[275,3313,841],{"class":296},[275,3315,3316,3318,3321,3323,3325,3327,3329],{"class":277,"line":421},[275,3317,703],{"class":310},[275,3319,3320],{"class":706}," end",[275,3322,326],{"class":325},[275,3324,3265],{"class":285},[275,3326,359],{"class":296},[275,3328,1675],{"class":314},[275,3330,1017],{"class":296},[275,3332,3333,3335,3337,3339,3341,3344,3347,3349,3351,3354,3356,3358,3361,3363,3366],{"class":277,"line":426},[275,3334,339],{"class":281},[275,3336,2606],{"class":292},[275,3338,1771],{"class":1770},[275,3340,318],{"class":1777},[275,3342,3343],{"class":285},"end",[275,3345,3346],{"class":325}," -",[275,3348,3260],{"class":285},[275,3350,1186],{"class":1777},[275,3352,3353],{"class":314},"toFixed",[275,3355,318],{"class":1777},[275,3357,1194],{"class":329},[275,3359,3360],{"class":1777},")",[275,3362,1785],{"class":1770},[275,3364,3365],{"class":292},"ms`",[275,3367,297],{"class":296},[275,3369,3370],{"class":277,"line":450},[275,3371,418],{"class":296},[275,3373,3374],{"class":277,"line":814},[275,3375,304],{"emptyLinePlaceholder":303},[275,3377,3378,3380,3382,3384,3386,3389,3391,3394,3397,3399,3401,3403,3405],{"class":277,"line":838},[275,3379,429],{"class":285},[275,3381,359],{"class":296},[275,3383,434],{"class":314},[275,3385,318],{"class":296},[275,3387,3388],{"class":292},"'crypto.randomUUID():'",[275,3390,407],{"class":296},[275,3392,3393],{"class":314},"benchmark",[275,3395,3396],{"class":296},"(() ",[275,3398,1537],{"class":310},[275,3400,286],{"class":285},[275,3402,359],{"class":296},[275,3404,1014],{"class":314},[275,3406,3407],{"class":296},"()));\n",[275,3409,3410],{"class":277,"line":844},[275,3411,3412],{"class":453},"// الناتج: ~45ms (أسرع!)\n",[275,3414,3415],{"class":277,"line":849},[275,3416,304],{"emptyLinePlaceholder":303},[275,3418,3419,3421,3423,3425,3427,3430,3432,3434,3436,3438],{"class":277,"line":868},[275,3420,429],{"class":285},[275,3422,359],{"class":296},[275,3424,434],{"class":314},[275,3426,318],{"class":296},[275,3428,3429],{"class":292},"'crypto.randomBytes(16).toString(\"hex\"):'",[275,3431,407],{"class":296},[275,3433,3393],{"class":314},[275,3435,3396],{"class":296},[275,3437,1537],{"class":310},[275,3439,3440],{"class":296}," \n",[275,3442,3443,3445,3447,3449,3451,3453,3455,3457,3459,3461],{"class":277,"line":873},[275,3444,1132],{"class":285},[275,3446,359],{"class":296},[275,3448,351],{"class":314},[275,3450,318],{"class":296},[275,3452,894],{"class":329},[275,3454,1186],{"class":296},[275,3456,383],{"class":314},[275,3458,318],{"class":296},[275,3460,388],{"class":292},[275,3462,391],{"class":296},[275,3464,3465],{"class":277,"line":878},[275,3466,447],{"class":296},[275,3468,3469],{"class":277,"line":899},[275,3470,3471],{"class":453},"// الناتج: ~60ms\n",[275,3473,3474],{"class":277,"line":905},[275,3475,304],{"emptyLinePlaceholder":303},[275,3477,3478,3480,3482,3484,3486,3489,3491,3493,3495,3497,3499],{"class":277,"line":910},[275,3479,429],{"class":285},[275,3481,359],{"class":296},[275,3483,434],{"class":314},[275,3485,318],{"class":296},[275,3487,3488],{"class":292},"'nanoid():'",[275,3490,407],{"class":296},[275,3492,3393],{"class":314},[275,3494,3396],{"class":296},[275,3496,1537],{"class":310},[275,3498,1958],{"class":314},[275,3500,3407],{"class":296},[275,3502,3503],{"class":277,"line":916},[275,3504,3505],{"class":453},"// الناتج: ~75ms\n",[275,3507,3508],{"class":277,"line":941},[275,3509,304],{"emptyLinePlaceholder":303},[275,3511,3512,3514,3516,3518,3520,3523,3525,3527,3529,3531],{"class":277,"line":2325},[275,3513,429],{"class":285},[275,3515,359],{"class":296},[275,3517,434],{"class":314},[275,3519,318],{"class":296},[275,3521,3522],{"class":292},"'Math.random() (غير آمن!):'",[275,3524,407],{"class":296},[275,3526,3393],{"class":314},[275,3528,3396],{"class":296},[275,3530,1537],{"class":310},[275,3532,3440],{"class":296},[275,3534,3535,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3563],{"class":277,"line":2337},[275,3536,3537],{"class":285},"  Math",[275,3539,359],{"class":296},[275,3541,1698],{"class":314},[275,3543,1678],{"class":296},[275,3545,383],{"class":314},[275,3547,318],{"class":296},[275,3549,1685],{"class":329},[275,3551,1186],{"class":296},[275,3553,1711],{"class":314},[275,3555,318],{"class":296},[275,3557,1194],{"class":329},[275,3559,407],{"class":296},[275,3561,3562],{"class":329},"15",[275,3564,391],{"class":296},[275,3566,3567],{"class":277,"line":2358},[275,3568,447],{"class":296},[275,3570,3571],{"class":277,"line":2363},[275,3572,3573],{"class":453},"// الناتج: ~25ms (أسرع لكن غير آمن!)\n",[40,3575,3577],{"id":3576},"أفضل-ممارسات-الأمان","أفضل ممارسات الأمان",[258,3579,3581],{"id":3580},"افعل","✅ افعل:",[266,3583,3585],{"className":268,"code":3584,"language":270,"meta":271,"style":271},"// استخدم طرق آمنة مشفرة للرموز\nconst token = crypto.randomBytes(32).toString('hex');\n\n// استخدم طول كافي (32 حرف كحد أدنى للرموز)\nconst sessionId = nanoid(32);\n\n// استخدم base64url للرموز الآمنة للروابط\nconst resetToken = crypto.randomBytes(32).toString('base64url');\n",[158,3586,3587,3592,3620,3624,3629,3646,3650,3655],{"__ignoreMap":271},[275,3588,3589],{"class":277,"line":278},[275,3590,3591],{"class":453},"// استخدم طرق آمنة مشفرة للرموز\n",[275,3593,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618],{"class":277,"line":300},[275,3595,1002],{"class":310},[275,3597,2577],{"class":706},[275,3599,326],{"class":325},[275,3601,286],{"class":285},[275,3603,359],{"class":296},[275,3605,351],{"class":314},[275,3607,318],{"class":296},[275,3609,444],{"class":329},[275,3611,1186],{"class":296},[275,3613,383],{"class":314},[275,3615,318],{"class":296},[275,3617,388],{"class":292},[275,3619,412],{"class":296},[275,3621,3622],{"class":277,"line":307},[275,3623,304],{"emptyLinePlaceholder":303},[275,3625,3626],{"class":277,"line":336},[275,3627,3628],{"class":453},"// استخدم طول كافي (32 حرف كحد أدنى للرموز)\n",[275,3630,3631,3633,3636,3638,3640,3642,3644],{"class":277,"line":345},[275,3632,1002],{"class":310},[275,3634,3635],{"class":706}," sessionId",[275,3637,326],{"class":325},[275,3639,1958],{"class":314},[275,3641,318],{"class":296},[275,3643,444],{"class":329},[275,3645,412],{"class":296},[275,3647,3648],{"class":277,"line":378},[275,3649,304],{"emptyLinePlaceholder":303},[275,3651,3652],{"class":277,"line":394},[275,3653,3654],{"class":453},"// استخدم base64url للرموز الآمنة للروابط\n",[275,3656,3657,3659,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682],{"class":277,"line":415},[275,3658,1002],{"class":310},[275,3660,3661],{"class":706}," resetToken",[275,3663,326],{"class":325},[275,3665,286],{"class":285},[275,3667,359],{"class":296},[275,3669,351],{"class":314},[275,3671,318],{"class":296},[275,3673,444],{"class":329},[275,3675,1186],{"class":296},[275,3677,383],{"class":314},[275,3679,318],{"class":296},[275,3681,563],{"class":292},[275,3683,412],{"class":296},[258,3685,3687],{"id":3686},"لا-تفعل","❌ لا تفعل:",[266,3689,3691],{"className":268,"code":3690,"language":270,"meta":271,"style":271},"// لا تستخدم Math.random() للأمان\nconst insecureToken = Math.random().toString(36); // ⚠️ أبداً!\n\n// لا تستخدم أطوال قصيرة للرموز الأمنية\nconst weakToken = crypto.randomBytes(4).toString('hex'); // ⚠️ قصير جداً!\n\n// لا تستخدم Date.now() وحده للفرادة\nconst notUnique = Date.now().toString(); // ⚠️ تصادمات ممكنة!\n",[158,3692,3693,3698,3727,3731,3736,3769,3773,3778],{"__ignoreMap":271},[275,3694,3695],{"class":277,"line":278},[275,3696,3697],{"class":453},"// لا تستخدم Math.random() للأمان\n",[275,3699,3700,3702,3705,3707,3709,3711,3713,3715,3717,3719,3721,3724],{"class":277,"line":300},[275,3701,1002],{"class":310},[275,3703,3704],{"class":706}," insecureToken",[275,3706,326],{"class":325},[275,3708,1693],{"class":285},[275,3710,359],{"class":296},[275,3712,1698],{"class":314},[275,3714,1678],{"class":296},[275,3716,383],{"class":314},[275,3718,318],{"class":296},[275,3720,1685],{"class":329},[275,3722,3723],{"class":296},"); ",[275,3725,3726],{"class":453},"// ⚠️ أبداً!\n",[275,3728,3729],{"class":277,"line":307},[275,3730,304],{"emptyLinePlaceholder":303},[275,3732,3733],{"class":277,"line":336},[275,3734,3735],{"class":453},"// لا تستخدم أطوال قصيرة للرموز الأمنية\n",[275,3737,3738,3740,3743,3745,3747,3749,3751,3753,3756,3758,3760,3762,3764,3766],{"class":277,"line":345},[275,3739,1002],{"class":310},[275,3741,3742],{"class":706}," weakToken",[275,3744,326],{"class":325},[275,3746,286],{"class":285},[275,3748,359],{"class":296},[275,3750,351],{"class":314},[275,3752,318],{"class":296},[275,3754,3755],{"class":329},"4",[275,3757,1186],{"class":296},[275,3759,383],{"class":314},[275,3761,318],{"class":296},[275,3763,388],{"class":292},[275,3765,3723],{"class":296},[275,3767,3768],{"class":453},"// ⚠️ قصير جداً!\n",[275,3770,3771],{"class":277,"line":378},[275,3772,304],{"emptyLinePlaceholder":303},[275,3774,3775],{"class":277,"line":394},[275,3776,3777],{"class":453},"// لا تستخدم Date.now() وحده للفرادة\n",[275,3779,3780,3782,3785,3787,3789,3791,3793,3795,3797,3800],{"class":277,"line":415},[275,3781,1002],{"class":310},[275,3783,3784],{"class":706}," notUnique",[275,3786,326],{"class":325},[275,3788,1670],{"class":285},[275,3790,359],{"class":296},[275,3792,1675],{"class":314},[275,3794,1678],{"class":296},[275,3796,383],{"class":314},[275,3798,3799],{"class":296},"(); ",[275,3801,3802],{"class":453},"// ⚠️ تصادمات ممكنة!\n",[40,3804,3806],{"id":3805},"أي-طريقة-يجب-أن-تستخدمها","أي طريقة يجب أن تستخدمها؟",[258,3808,3810],{"id":3809},"لرموز-api-معرفات-الجلسات","لرموز API / معرفات الجلسات:",[266,3812,3814],{"className":268,"code":3813,"language":270,"meta":271,"style":271},"// Node.js\ncrypto.randomBytes(32).toString('hex')\n\n// المتصفح\ncrypto.getRandomValues(new Uint8Array(32))\n",[158,3815,3816,3821,3843,3847,3852],{"__ignoreMap":271},[275,3817,3818],{"class":277,"line":278},[275,3819,3820],{"class":453},"// Node.js\n",[275,3822,3823,3825,3827,3829,3831,3833,3835,3837,3839,3841],{"class":277,"line":300},[275,3824,1554],{"class":285},[275,3826,359],{"class":296},[275,3828,351],{"class":314},[275,3830,318],{"class":296},[275,3832,444],{"class":329},[275,3834,1186],{"class":296},[275,3836,383],{"class":314},[275,3838,318],{"class":296},[275,3840,388],{"class":292},[275,3842,391],{"class":296},[275,3844,3845],{"class":277,"line":307},[275,3846,304],{"emptyLinePlaceholder":303},[275,3848,3849],{"class":277,"line":336},[275,3850,3851],{"class":453},"// المتصفح\n",[275,3853,3854,3856,3858,3860,3862,3864,3866,3868,3870],{"class":277,"line":345},[275,3855,1554],{"class":285},[275,3857,359],{"class":296},[275,3859,1137],{"class":314},[275,3861,318],{"class":296},[275,3863,1563],{"class":310},[275,3865,1117],{"class":314},[275,3867,318],{"class":296},[275,3869,444],{"class":329},[275,3871,375],{"class":296},[258,3873,3875],{"id":3874},"لمعرفات-قاعدة-البيانات-روابط-قصيرة","لمعرفات قاعدة البيانات / روابط قصيرة:",[266,3877,3879],{"className":268,"code":3878,"language":270,"meta":271,"style":271},"// عالمي (Node.js + المتصفح)\nimport { nanoid } from 'nanoid';\nnanoid(10); // سريع، قصير، آمن\n",[158,3880,3881,3886,3902],{"__ignoreMap":271},[275,3882,3883],{"class":277,"line":278},[275,3884,3885],{"class":453},"// عالمي (Node.js + المتصفح)\n",[275,3887,3888,3890,3892,3894,3896,3898,3900],{"class":277,"line":300},[275,3889,282],{"class":281},[275,3891,1852],{"class":296},[275,3893,240],{"class":285},[275,3895,1857],{"class":296},[275,3897,1160],{"class":281},[275,3899,1862],{"class":292},[275,3901,297],{"class":296},[275,3903,3904,3906,3908,3910,3912],{"class":277,"line":307},[275,3905,240],{"class":314},[275,3907,318],{"class":296},[275,3909,1918],{"class":329},[275,3911,3723],{"class":296},[275,3913,3914],{"class":453},"// سريع، قصير، آمن\n",[258,3916,3918],{"id":3917},"للـ-uuid-المفاتيح-الأساسية","للـ UUID (المفاتيح الأساسية):",[266,3920,3922],{"className":268,"code":3921,"language":270,"meta":271,"style":271},"// Node.js حديث (14.17+) / المتصفح (Chrome 92+)\ncrypto.randomUUID()\n",[158,3923,3924,3929],{"__ignoreMap":271},[275,3925,3926],{"class":277,"line":278},[275,3927,3928],{"class":453},"// Node.js حديث (14.17+) / المتصفح (Chrome 92+)\n",[275,3930,3931,3933,3935,3937],{"class":277,"line":300},[275,3932,1554],{"class":285},[275,3934,359],{"class":296},[275,3936,1014],{"class":314},[275,3938,3939],{"class":296},"()\n",[258,3941,3943],{"id":3942},"لكلمات-المرور","لكلمات المرور:",[266,3945,3947],{"className":268,"code":3946,"language":270,"meta":271,"style":271},"// مجموعة أحرف مخصصة مع crypto\nconst charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()';\ncrypto.randomBytes(16).map(byte => charset[byte % charset.length]).join('');\n",[158,3948,3949,3954,3967],{"__ignoreMap":271},[275,3950,3951],{"class":277,"line":278},[275,3952,3953],{"class":453},"// مجموعة أحرف مخصصة مع crypto\n",[275,3955,3956,3958,3960,3962,3965],{"class":277,"line":300},[275,3957,1002],{"class":310},[275,3959,804],{"class":706},[275,3961,326],{"class":325},[275,3963,3964],{"class":292}," 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()'",[275,3966,297],{"class":296},[275,3968,3969,3971,3973,3975,3977,3979,3981,3984,3986,3988,3990,3992,3994,3996,3998,4000,4002,4004,4006,4008,4010,4012],{"class":277,"line":307},[275,3970,1554],{"class":285},[275,3972,359],{"class":296},[275,3974,351],{"class":314},[275,3976,318],{"class":296},[275,3978,894],{"class":329},[275,3980,1186],{"class":296},[275,3982,3983],{"class":314},"map",[275,3985,318],{"class":296},[275,3987,1169],{"class":321},[275,3989,1172],{"class":310},[275,3991,804],{"class":285},[275,3993,793],{"class":296},[275,3995,1169],{"class":285},[275,3997,1352],{"class":325},[275,3999,804],{"class":285},[275,4001,359],{"class":296},[275,4003,322],{"class":809},[275,4005,1361],{"class":296},[275,4007,858],{"class":314},[275,4009,318],{"class":296},[275,4011,863],{"class":292},[275,4013,412],{"class":296},[258,4015,4017],{"id":4016},"لغير-الأمني-مفاتيح-react-معرفات-مؤقتة","لغير الأمني (مفاتيح React، معرفات مؤقتة):",[266,4019,4021],{"className":268,"code":4020,"language":270,"meta":271,"style":271},"// سريع وبسيط\n`${Date.now()}-${Math.random().toString(36)}`\n",[158,4022,4023,4028],{"__ignoreMap":271},[275,4024,4025],{"class":277,"line":278},[275,4026,4027],{"class":453},"// سريع وبسيط\n",[275,4029,4030,4032,4034,4036,4038,4040,4042,4044,4046,4048,4050,4052,4054,4056,4058,4060,4062,4064,4066],{"class":277,"line":300},[275,4031,1803],{"class":292},[275,4033,1771],{"class":1770},[275,4035,1774],{"class":285},[275,4037,359],{"class":1777},[275,4039,1675],{"class":314},[275,4041,1782],{"class":1777},[275,4043,1785],{"class":1770},[275,4045,1788],{"class":292},[275,4047,1771],{"class":1770},[275,4049,356],{"class":285},[275,4051,359],{"class":1777},[275,4053,1698],{"class":314},[275,4055,1678],{"class":1777},[275,4057,383],{"class":314},[275,4059,318],{"class":1777},[275,4061,1685],{"class":329},[275,4063,3360],{"class":1777},[275,4065,1785],{"class":1770},[275,4067,4068],{"class":292},"`\n",[40,4070,4071],{"id":4071},"الخاتمة",[11,4073,4074],{},"توليد السلاسل النصية العشوائية في JavaScript أمر مباشر عندما تفهم المقايضات:",[21,4076,4077,4089,4098,4106],{},[24,4078,4079,4082,4083,4085,4086,4088],{},[17,4080,4081],{},"للأمان:"," استخدم دائماً ",[158,4084,1554],{}," (Node.js) أو ",[158,4087,182],{}," (المتصفح)",[24,4090,4091,4094,4095,4097],{},[17,4092,4093],{},"للراحة:"," استخدم ",[158,4096,240],{}," - سريع، آمن، ويعمل في كل مكان",[24,4099,4100,4094,4103,4105],{},[17,4101,4102],{},"للمعايير:",[158,4104,200],{}," لمعرفات قاعدة البيانات",[24,4107,4108,4111,4112,4114],{},[17,4109,4110],{},"للسرعة (غير أمني):"," ",[158,4113,221],{}," مناسب لمفاتيح React والمعرفات المؤقتة",[11,4116,4117],{},[17,4118,4119,4120,4122],{},"لا تستخدم أبداً ",[158,4121,221],{}," لكلمات المرور، الرموز المميزة، أو أي تطبيق حساس أمنياً!",[11,4124,4125],{},"نظام JavaScript الحديث يمنحك أدوات قوية لتوليد السلاسل النصية العشوائية. اختر الأداة المناسبة لحالة الاستخدام الخاصة بك، ودائماً أولوية الأمان عندما يهم الأمر.",[4127,4128,4129],"style",{},"html pre.shiki code .sEkCa, html code.shiki .sEkCa{--shiki-light:#D73A49;--shiki-default:#C586C0;--shiki-dark:#C586C0}html pre.shiki code .sZiGn, html code.shiki .sZiGn{--shiki-light:#24292E;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .sGDl4, html code.shiki .sGDl4{--shiki-light:#032F62;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .sG4b4, html code.shiki .sG4b4{--shiki-light:#24292E;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .s5uUr, html code.shiki .s5uUr{--shiki-light:#D73A49;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .svuFb, html code.shiki .svuFb{--shiki-light:#6F42C1;--shiki-default:#DCDCAA;--shiki-dark:#DCDCAA}html pre.shiki code .s9TRk, html code.shiki .s9TRk{--shiki-light:#E36209;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s1p9p, html code.shiki .s1p9p{--shiki-light:#D73A49;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .seC34, html code.shiki .seC34{--shiki-light:#005CC5;--shiki-default:#B5CEA8;--shiki-dark:#B5CEA8}html pre.shiki code .s56mj, html code.shiki .s56mj{--shiki-light:#6A737D;--shiki-default:#6A9955;--shiki-dark:#6A9955}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sToQf, html code.shiki .sToQf{--shiki-light:#005CC5;--shiki-default:#4FC1FF;--shiki-dark:#4FC1FF}html pre.shiki code .sps74, html code.shiki .sps74{--shiki-light:#005CC5;--shiki-default:#9CDCFE;--shiki-dark:#9CDCFE}html pre.shiki code .s4XyT, html code.shiki .s4XyT{--shiki-light:#032F62;--shiki-default:#D16969;--shiki-dark:#D16969}html pre.shiki code .sqBZk, html code.shiki .sqBZk{--shiki-light:#005CC5;--shiki-default:#CE9178;--shiki-dark:#CE9178}html pre.shiki code .suOk-, html code.shiki .suOk-{--shiki-light:#005CC5;--shiki-default:#D16969;--shiki-dark:#D16969}html pre.shiki code .se2iQ, html code.shiki .se2iQ{--shiki-light:#032F62;--shiki-default:#569CD6;--shiki-dark:#569CD6}html pre.shiki code .s5T4v, html code.shiki .s5T4v{--shiki-light:#032F62;--shiki-default:#D4D4D4;--shiki-dark:#D4D4D4}html pre.shiki code .su_XB, html code.shiki .su_XB{--shiki-light:#6F42C1;--shiki-default:#4EC9B0;--shiki-dark:#4EC9B0}html pre.shiki code .s7v1m, html code.shiki .s7v1m{--shiki-light:#005CC5;--shiki-default:#569CD6;--shiki-dark:#569CD6}",{"title":271,"searchDepth":307,"depth":307,"links":4131},[4132,4133,4134,4140,4146,4149,4155,4156,4160,4167],{"id":42,"depth":300,"text":43},{"id":119,"depth":300,"text":120},{"id":255,"depth":300,"text":256,"children":4135},[4136,4137,4138,4139],{"id":260,"depth":307,"text":261},{"id":492,"depth":307,"text":493},{"id":636,"depth":307,"text":637},{"id":967,"depth":307,"text":968},{"id":1072,"depth":300,"text":1073,"children":4141},[4142,4143,4144,4145],{"id":1076,"depth":307,"text":1077},{"id":1264,"depth":307,"text":1265},{"id":1428,"depth":307,"text":1429},{"id":1640,"depth":307,"text":1641},{"id":1817,"depth":300,"text":1818,"children":4147},[4148],{"id":1821,"depth":307,"text":1822},{"id":2021,"depth":300,"text":2022,"children":4150},[4151,4152,4153,4154],{"id":2025,"depth":307,"text":2026},{"id":2520,"depth":307,"text":2521},{"id":2790,"depth":307,"text":2791},{"id":2957,"depth":307,"text":2958},{"id":3188,"depth":300,"text":3189},{"id":3576,"depth":300,"text":3577,"children":4157},[4158,4159],{"id":3580,"depth":307,"text":3581},{"id":3686,"depth":307,"text":3687},{"id":3805,"depth":300,"text":3806,"children":4161},[4162,4163,4164,4165,4166],{"id":3809,"depth":307,"text":3810},{"id":3874,"depth":307,"text":3875},{"id":3917,"depth":307,"text":3918},{"id":3942,"depth":307,"text":3943},{"id":4016,"depth":307,"text":4017},{"id":4071,"depth":300,"text":4071},"development","تعلم جميع الطرق الحديثة لتوليد السلاسل النصية العشوائية في JavaScript لكلمات المرور، الرموز المميزة، المعرفات، والمزيد. يشمل طرق آمنة مشفرة، مقارنات الأداء، وحالات الاستخدام الواقعية.","md","https://images.unsplash.com/photo-1555949963-aa79dcee981c?q=80&w=1200",false,"ar",{"excerpt":4175},{"type":8,"value":4176},[4177,4179,4183],[11,4178,13],{},[11,4180,4181],{},[17,4182,19],{},[21,4184,4185,4187,4189,4191,4193],{},[24,4186,26],{},[24,4188,29],{},[24,4190,32],{},[24,4192,35],{},[24,4194,38],{},"/twlyd-slasl-nsyh-ashwaeyh-javascript-2025","2023-01-19",{"title":5,"description":4169},"توليد-سلاسل-نصية-عشوائية-javascript-2025",[270,4200,4201,4202,1554],"nodejs","security","web-development","2025-10-10","cCWhU6u7yy5u97EVAL7aIWH1_ctAqhKIZEhRDdlUOcM",{"id":4206,"avatar":4207,"bio":4208,"extension":4170,"github":4209,"linkedin":4210,"locale":4173,"meta":4211,"name":4213,"role":4218,"slug":6,"stem":4219,"twitter":4220,"website":4221,"__hash__":4222},"authors_ar/ar/authors/رائد-البحري.md","/images/raed-bahri.avif","مدير منتجات ومطور متخصص في التطبيقات العربية أولاً","lord007tn","raed-bahri",{"path":4212,"title":4213,"description":271,"body":4214},"/ar/authors/raed-albhry","رائد البحري",{"type":8,"value":4215,"toc":4216},[],{"title":271,"searchDepth":307,"depth":307,"links":4217},[],"المؤسس و مطور منتجات","ar/authors/رائد-البحري","El_Raed_Bahri","https://raedbahri.com","pMOe7fRPZ-myQQEq3wdjao2Xvtyy74dyBfL4UTF1K2s",1761775956105]