| کانال توسعه‌دهندگان جاوااسکریپت |
3.88K subscribers
62 photos
3 videos
40 links
⭕️ کانال توسعه‌دهندگان جاوااسکریپت دولوپیکس

💠 دولوپیکس | جامعه توسعه‌دهندگان ایرانی

💎 @Developix
🚀 Developix.ir

📌 پشتیبانی و تبلیغات:
@DevelopixSupport
Download Telegram
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.5.1 به 26.6.0

🔹 لیست تغییرات این نسخه:
- افزودن تابع جدید ffi.getCurrentEventLoop
- افزودن context.log() و رویداد test:log در test_runner
- گزارش فیلد entryFile در رویدادهای TestStream
- بهبودهای کارایی رویدادها و once()/removeListener()
- قابلیت انتقال TCP Server و Socket بین worker threads
- به‌روزرسانی وابستگی‌ها (npm 11.18.0، V8، OpenSSL، zlib و غیره)

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
👍4
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.6.0 به 26.7.0

🔹 لیست تغییرات این نسخه:
- پشتیبانی از بارگذاری کلید خصوصی با STORE loaderها در crypto
- به‌روزرسانی ریشه‌گواهی‌ها به NSS 3.125 در crypto
- افزودن پشتیبانی Perfetto برای پروفایلینگ کارایی
- پیاده‌سازی Symbol.dispose در ModuleHooks ماژول‌ها
- افزودن فلگ --test-coverage-include-all به test_runner
- به‌روزرسانی npm به نسخه 11.19.0 و سایر وابستگی‌ها و غیره

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
❤2
🔥 پروژه: ‏DrawDB؛ طراحی بصری دیتابیس آنلاین

ویرایشگر تحت‌وب DrawDB یک ابزار رایگان برای طراحی نمودار دیتابیس و تولید خودکار SQL است 🧩

برای وقتی عالی است که قبل از نوشتن کد، اسکیمای دیتابیس پروژه جاوااسکریپتی‌تان (مثلاً با ORMهایی مثل Prisma یا TypeORM) را می‌خواهید شفاف و تمیز طراحی کنید.

رابط کاربری خیلی ساده است: جدول می‌سازی، ستون و رابطه می‌کشی و درنهایت اسکریپت SQL ساخت جداول را تحویل می‌گیری.

برای دیدن پروژه و دمو، سر بزن به: سورس DrawDB روی گیت‌هاب

⭐️ 665 stars this week

🔖 #Javascript #JS #جاوااسکریپت #جاوااسکریپت #طراحی_دیتابیس

💎 @DevelopixJavascript
❤5
اصل مهمی در Clean Code این است که هر تابع فقط یک وظیفهٔ واضح داشته باشد ✨

وقتی یک تابع چند کار مختلف انجام می‌دهد:
- تست‌نویسی سخت می‌شود
- احتمال باگ بالا می‌رود
- خواندن و تغییر کد زمان‌بر می‌شود

به این ایده در Design Principleها می‌گویند: Single Responsibility Principle (SRP).

نمونهٔ یک تابع شلوغ در Node.js 👇
const registerUser = async (req, res) => {
const { email, password } = req.body;

// validate
if (!email || !password || password.length < 8) {
return res.status(400).json({ message: 'Invalid data' });
}

// check duplicate
const existing = await User.findOne({ email });
if (existing) {
return res.status(409).json({ message: 'Email exists' });
}

// hash password
const bcrypt = await import('bcrypt');
const hashed = await bcrypt.hash(password, 10);

// save user
const user = await User.create({ email, password: hashed });

// send welcome email
await sendWelcomeEmail(email);

return res.status(201).json({ id: user.id, email: user.email });
};

این تابع هم اعتبارسنجی می‌کند، هم دیتابیس می‌زند، هم ایمیل می‌فرستد؛ یعنی چند مسئولیت در یک جا.

حالا همان منطق را با توابع کوچک‌تر تمیزتر می‌کنیم 🧼
const validateRegisterInput = ({ email, password }) => {
if (!email || !password) return 'Email and password are required';
if (password.length < 8) return 'Password too short';
return null;
};

const ensureEmailUnique = async (email) => {
const existing = await User.findOne({ email });
if (existing) throw new Error('EMAIL_TAKEN');
};

const createUser = async ({ email, password }) => {
const bcrypt = await import('bcrypt');
const hashed = await bcrypt.hash(password, 10);
return User.create({ email, password: hashed });
};

const registerUser = async (req, res) => {
const { email, password } = req.body;

const error = validateRegisterInput({ email, password });
if (error) return res.status(400).json({ message: error });

try {
await ensureEmailUnique(email);
const user = await createUser({ email, password });
await sendWelcomeEmail(email);

return res.status(201).json({ id: user.id, email: user.email });
} catch (err) {
if (err.message === 'EMAIL_TAKEN') {
return res.status(409).json({ message: 'Email exists' });
}
return res.status(500).json({ message: 'Server error' });
}
};

حالا:
- تست کردن validateRegisterInput و createUser مستقل و ساده است ✅
- تغییر قانون پسورد، فقط در یک تابع انجام می‌شود ✅
- خطاها واضح‌تر و قابل مدیریت‌تر هستند ✅

برای کدهای React، Express، Next.js و هر محیط JavaScript/TypeScript دیگر همین ایده جواب می‌دهد: توابع کوچک، با نام خوب و یک کار مشخص.

برای مطالعهٔ بیشتر می‌توان از Refactoring.Guru و MDN کمک گرفت.

قدم‌های کوچک refactor کردن همین امروز روی یکی از فانکشن‌های شلوغ پروژه، بعد از چند هفته تاثیر زیادی در خوانایی و کیفیت کد می‌گذارد 🚀

🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Clean_Code #Node_js #Refactoring #SRP

👤 Developix

💎 Channel: @DevelopixJavascript
👍7❤1
💠 نسخه جدید سوپرست تایپ‌اسکریپت (Typescript) منتشر شده است

🔸 ارتقا از نسخه 6.0.3 به 7.0.2

🔹 لیست تغییرات این نسخه:


🔖 #typescript, #web, #js, #react, #vue, #release

💎 @DevelopixJavascript
🔥3❤2
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.7.0 به 26.8.1

🔹 لیست تغییرات این نسخه:
- رفع مشکل نمایش اشتباه نسخه در خروجی node --version

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
👍2
یکی از ساده‌ترین تکنیک‌های Refactoring برای تمیزتر شدن کد جاوااسکریپت، استفاده از الگوی Early Return است ✨

در این الگو به‌جای اینکه یک تابع را با if تو در تو و بلاک‌های بزرگ بپیچیم، شرط‌های نامعتبر را زودتر برمی‌گردانیم و مسیر «عادی» تابع را خوانا و سرراست نگه می‌کنیم.

نمونه کد شلوغ بدون Early Return 👇
function createOrder(user, items) {
if (user) {
if (user.isActive) {
if (Array.isArray(items) && items.length > 0) {
const total = items.reduce((sum, it) => sum + it.price, 0);
if (total > 0) {
return { userId: user.id, total, status: "CREATED" };
} else {
throw new Error("Total must be positive");
}
} else {
throw new Error("Items required");
}
} else {
throw new Error("User not active");
}
} else {
throw new Error("User required");
}
}


خواندن این تابع سخت است؛ منطق اصلی بین ifهای تودرتو گم شده.

همان منطق با Early Return 🧼
function createOrder(user, items) {
if (!user) {
throw new Error("User required");
}

if (!user.isActive) {
throw new Error("User not active");
}

if (!Array.isArray(items) || items.length === 0) {
throw new Error("Items required");
}

const total = items.reduce((sum, it) => sum + it.price, 0);

if (total <= 0) {
throw new Error("Total must be positive");
}

return { userId: user.id, total, status: "CREATED" };
}


حالا:

• تمام شرط‌های نامعتبر بالا جمع شده‌اند و سریع تابع را ترک می‌کنند ✅
• «مسیر خوشحال» وسط تابع مثل یک داستان خطی و قابل‌خواندن است ✅
• دیباگ و لاگ‌گرفتن ساده‌تر شده است ✅

نکته کاربردی در پروژه‌های React / Node.js

در هندلرهای API و کنترلرهای Express هم همین الگو کمک زیادی می‌کند تا از callback hell جدید یعنی if hell فرار شود:

export const handler = async (req, res) => {
const { user } = req;

if (!user) {
return res.status(401).json({ message: "Unauthorized" });
}

if (!user.isActive) {
return res.status(403).json({ message: "Inactive user" });
}

const data = await loadDashboardData(user.id);
return res.json(data);
};


در مستندات MDN درباره return و جریان کنترل توضیحات بیشتری آمده که مطالعه‌اش دید خوبی می‌دهد.

هرجا تابعی دیدۀ می‌شود که تو در تو و سخت‌خوان است، یک بار با Early Return بازنویسی‌اش، هم برای خودتان هم برای تیم، خوانایی کد را چند درجه بالا می‌برد 🚀


🔖 #Javascript #JS #جاوااسکریپت #JavaScript #Clean_Code #Refactoring #Early_Return #Node_js #Express #Readability

👤 Developix

💎 Channel: @DevelopixJavascript
👍6❤2
بررسی نوع داده Symbol در جاوا اسکریپت

در این مطلب به معرفی نوع داده Primitive و یکتای Symbol، تفاوت آن با سایر انواع داده، نحوه استفاده از Global Symbol Registry با متدهای Symbol.for و Symbol.keyFor و همچنین کاربرد Symbol در کپسوله‌سازی و تعریف کلیدهای اختصاصی در اشیا پرداخته شده است.
برای مشاهده کامل این آموزش می‌توانید به لینک زیر مراجعه کنید:

[https://gnutec.net/javascript-symbol/]

🔖 #Javascript #JS #جاوااسکریپت

👤 ابوالفضل

💎 Channel: @DevelopixJavascript
👍3
🔥 پروژه: ‎دانلودر TikTok و Douyin

ابزار متن‌باز TikTokDownloader برای دانلود و جمع‌آوری داده از ویدئوهای TikTok و نسخه چینی آن Douyin طراحی شده 🛰️

به‌درد جاوااسکریپتی‌ها برای ساخت کرالرهای شخصی، داشبوردهای آنالیتیکس، تست الگوریتم‌های پیشنهاد محتوا و بازی با متادیتای ویدئوها می‌خورد.

سورس تمیز و قابل‌مطالعه است و ایده‌های خوبی برای مهندسی معکوس APIهای پلتفرم می‌دهد. نگاهی بهش انداختن ارزش دارد 👇
لینک گیت‌هاب

⭐️ 154 stars this week

🔖 #Javascript #JS #جاوااسکریپت #جاوااسکریپت #پروژه_متن‌باز

💎 @DevelopixJavascript
👍1
وقتی با تاریخ سروکار داری، این که چطور استرینگ رو تبدیل به Date کنی خیلی مهمه.

تو نسخهٔ اول، مستقیم از new Date() با یه استرینگ مبهم استفاده شده؛ این کار بسته‌به محیط و تایم‌زون می‌تونه خروجی متفاوت بده، حتی ممکنه رو بعضی سیستم‌ها Invalid Date برگردونه.

تو نسخهٔ دوم، با کمک یه پارسر قابل‌اعتماد (مثل کتابخونه‌های معروف تاریخ) فرمت استرینگ رو صریح مشخص کردیم؛ هم نتیجه پایدارتره، هم باگ‌های خفنِ Production کمتر می‌گیری.

اگه با تاریخ و زمان کار می‌کنی، روش دوم رو جایگزین روش اول کن تا رفتارت تو همهٔ محیط‌ها قابل پیش‌بینی باشه و بعداً درگیر باگ‌های مرموز نشی.

🔖 #Javascript #JS #جاوااسکریپت

👤 Developix

💎 Channel: @DevelopixJavascript
👍6❤1
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.8.2 به 26.9.0

🔹 لیست تغییرات این نسخه:
- افزودن API عمومی برای MAC در ماژول crypto
- کشف خودکار cipherها از OpenSSL providerها در crypto
- کشف خودکار hashها از OpenSSL providerها در crypto
- فعال شدن پیش‌فرض ماژول FFI برای اتصال به کتابخانه‌های بومی
- معرفی node:bench و بهبودهای perf_hooks برای بنچمارک
- پشتیبانی Web Workers و API آزمایشی DTLS و تغییرات دیگر

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
👍1
💠 نسخه جدید ران‌تایم نود جی‌اس (NodeJS) منتشر شده است

🔸 ارتقا از نسخه 26.9.0 به 26.10.0

🔹 لیست تغییرات این نسخه:
- افزودن تابع جدید crypto.parsePKCS12 برای پردازش PKCS12
- قابلیت بارگذاری کتابخانه‌ها از VFS در ffi
- اضافه شدن متد fs.openAsBlobSync برای کار با فایل به صورت Blob
- امکان ارسال net.BoundSocket به Thread و فرایند فرزند
- افزودن SlidingWindowHistogram و تحلیل qrde در perf_hooks
- بهبودهای متعدد دیگر در util، sqlite و غیره

🔖 #nodejs, #web, #js, #release

💎 @DevelopixJavascript
🔥 پروژه: مدیریت خودکار یوتیوب با عامل‌های AI

برای خودکارسازی کارهای یک کانال یوتیوب، این پروژه از عامل‌های AI استفاده می‌کند؛ ساخت، بهینه‌سازی و انتشار ویدیو را به‌صورت شبانه‌روزی انجام می‌دهد.

با API رایگان Gemini یا OpenAI کار می‌کند و برای استفاده از آن نیازی به کدنویسی نیست. برای توسعه‌دهندگان جاوااسکریپتِ علاقه‌مند به اتوماسیون، نمونه‌ای کاربردی از کنار هم قرار گرفتن عامل‌های AI در یک فرایند تولید محتواست.

برای آشنایی با مسیر راه‌اندازی، مخزن پروژه را ببینید 🎬

⭐️ 275 stars this week

🔖 #Javascript #JS #جاوااسکریپت #JavaScript #YouTube

💎 @DevelopixJavascript
👍3