প্রকল্প সম্পর্কে
GraphQL.js হলো GraphQL-এর JavaScript রেফারেন্স ইমপ্লিমেন্টেশন, যা মূলত Facebook-এ তৈরি করা API-এর জন্য একটি কুয়েরি ল্যাঙ্গুয়েজ। এর README ফাইলে ল্যাঙ্গুয়েজটির সাধারণ ওভারভিউয়ের জন্য GraphQL স্পেসিফিকেশন রিপোজিটরির কথা উল্লেখ করা হয়েছে এবং জানানো হয়েছে যে সেখানে বর্ণিত উদাহরণগুলো এই রিপোজিটরির ভেতরে টেস্ট হিসেবে রয়েছে — নতুনদের জন্য পরামর্শ হলো ওই ওভারভিউ এবং সংশ্লিষ্ট টেস্টগুলো একসাথে পড়া।
প্রধান সক্ষমতা
এই লাইব্রেরিটি দুটি কেন্দ্রীয় সক্ষমতা প্রদান করে: একটি টাইপ স্কিমা তৈরি করা এবং সেই স্কিমার বিপরীতে কুয়েরি সার্ভিস প্রদান করা। একটি স্কিমা GraphQLSchema এবং GraphQLObjectType দিয়ে সংজ্ঞায়িত করা হয়, যার ফিল্ডগুলোর টাইপ GraphQLString-এর মতো বিল্ট-ইন স্কেলার হতে পারে; প্রতিটি ফিল্ড একটি resolve ফাংশন সরবরাহ করতে পারে। README-তে উল্লেখ করা হয়েছে যে একটি রিজলভার একটি ভ্যালু, একটি প্রমিজ অথবা প্রমিজের একটি অ্যারে রিটার্ন করতে পারে। কুয়েরিগুলো graphql ফাংশনের মাধ্যমে চালানো হয়, যা একটি স্কিমা এবং একটি সোর্স স্ট্রিং গ্রহণ করে এবং ফলাফলের একটি প্রমিজ রিটার্ন করে। এক্সিকিউট করার আগে, ফাংশনটি যাচাই করে যে কুয়েরিটি সিনট্যাকটিক্যালি এবং সেমান্টিক্যালি সঠিক কি না, অন্যথায় এটি এরর রিপোর্ট করে; যেমন একটি উদাহরণের মাধ্যমে দেখানো হয়েছে যে এটি লোকেশন ইনফরমেশনসহ "Cannot query field" এরর রিটার্ন করে।
ইনস্টলেশন
GraphQL.js npm থেকে `graphql` প্যাকেজ হিসেবে npm, yarn অথবা bun ব্যবহার করে ইনস্টল করা হয়। README-তে রিপোজিটরির একটি স্বয়ংক্রিয়ভাবে রক্ষণাবেক্ষণ করা `npm` ব্রাঞ্চের কথা উল্লেখ করা হয়েছে যা ১৭.x.x লাইনের শেষ কমিট ট্র্যাক করে যা সমস্ত টেস্ট পাস করেছে; সরাসরি ওই ব্রাঞ্চের ওপর নির্ভর করাকে এখনও রিলিজ না হওয়া কোড ব্যবহারের একটি উপায় হিসেবে দেখানো হয়েছে, যদিও README-তে পাবলিশ করা npm বিল্ডগুলো ব্যবহারের সুপারিশ করা হয়েছে।
ব্রাউজার এবং বান্ডলার ব্যবহার
README-তে উল্লেখ করা হয়েছে যে এই লাইব্রেরিটি জেনারেল-পারপাস এবং এটি Node সার্ভার এবং ব্রাউজার উভয় ক্ষেত্রেই ব্যবহার করা যেতে পারে, যার উদাহরণ হিসেবে GraphiQL প্রজেক্টের কথা বলা হয়েছে। webpack বা rollup ব্যবহারকারী প্রজেক্টগুলো বিশেষ কনফিগারেশন ছাড়াই কাজ করবে এবং লাইব্রেরির শুধুমাত্র প্রয়োজনীয় অংশগুলো অন্তর্ভুক্ত করবে, কারণ GraphQL.js CommonJS (`require()`) এবং ESModule (`import`) উভয় ফাইলসহ ডিস্ট্রিবিউট করা হয়। `package.json`-এ একটি `exports` ম্যাপ রানটাইম এবং বান্ডলারগুলোকে সঠিক ফাইলের দিকে নির্দেশ করে; যেসব টুলিং-এ `exports` সাপোর্ট নেই তারা `.js` ফাইলে CommonJS বিল্ড এবং `.mjs` ফাইলে ESModule বিল্ড খুঁজে পায়।
প্রজেক্ট গভর্ন্যান্স এবং সাপোর্ট
পুল রিকোয়েস্টের মাধ্যমে অবদানকে স্বাগত জানানো হয় এবং রিপোজিটরিটি EasyCLA দ্বারা পরিচালিত হয়: অংশগ্রহণকারীদের অবদান রাখার আগে ব্যক্তিগতভাবে বা নিয়োগকর্তার মাধ্যমে একটি GraphQL Specification Membership চুক্তিতে স্বাক্ষর করতে হয়। README-তে কমিউনিটিকে আর্থিকভাবে সহায়তা করার উপায় হিসেবে GraphQL Foundation মেম্বারশিপের কথা উল্লেখ করা হয়েছে।
পরিবর্তনগুলো GitHub রিলিজ হিসেবে ট্র্যাক করা হয়। প্রজেক্টটি MIT-লাইসেন্সপ্রাপ্ত। এটি Semantic Versioning অনুসরণ করে, যেখানে সর্বশেষ মেজর ভার্সনের জন্য পূর্ণ সাপোর্ট (বাগ ফিক্স এবং সিকিউরিটি আপডেট), নতুন মেজর রিলিজের পর ১২ মাস পর্যন্ত পূর্ববর্তী মেজর ভার্সনের জন্য ফিচার সাপোর্ট (শুধুমাত্র স্পেসিফিকেশন পরিবর্তনগুলো ব্যাকপোর্ট করা হয় যদি সেগুলো ব্রেকিং না হয়) এবং পুরনো ভার্সনগুলোর জন্য কোনো সক্রিয় রক্ষণাবেক্ষণ নেই — তবে এক বছরের কম আগে রিলিজ হওয়া ভার্সনকে পূর্ববর্তী মেজর ভার্সন হিসেবে গণ্য করা হয়। বর্তমানে কোনো Long-Term Support রিলিজ নেই; ব্যবহারকারীদের সর্বশেষ স্থিতিশীল ভার্সনে আপগ্রেড করার জন্য উৎসাহিত করা হয়। একটি মেজর ভার্সনের এন্ড-অফ-লাইফ তারিখ অন্তত ছয় মাস আগে ঘোষণা করা হয়, যার পরে সেই ভার্সনটি গুরুতর সিকিউরিটি ইস্যুর জন্যও কোনো আপডেট পায় না। গুরুতর সিকিউরিটি আপডেট বর্তমান এবং পূর্ববর্তী উভয় মেজর ভার্সনের জন্য প্রযোজ্য। আপগ্রেড সহায়তার জন্য ভার্সন-ভিত্তিক রিলিজ নোট, ডকুমেন্টেশন সাইটে মাইগ্রেশন গাইড এবং একটি কমিউনিটি Discord চ্যানেল অফার করা হয়।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.