SvelteKit Remote Functions: পার্ট ১

SvelteKit ডেটা হ্যান্ডেল করার একটি নতুন পদ্ধতি পরীক্ষা করছে। একে বলা হয় Remote Functions। এই ফিচারটি ক্লায়েন্ট এবং সার্ভারকে একে অপরের সাথে সহজে যোগাযোগ করতে সাহায্য করে।

Remote Functions কী?

Remote Functions আপনাকে আপনার SvelteKit অ্যাপের যেকোনো অংশ থেকে সার্ভার-সাইড লজিক কল করার সুবিধা দেয়। যদিও আপনি এগুলো ক্লায়েন্ট থেকে কল করেন, কোডটি সার্ভারে চলে। এর মানে হলো আপনি নিরাপদে ডেটাবেস বা প্রাইভেট এনভায়রনমেন্ট ভেরিয়েবল অ্যাক্সেস করতে পারেন।

এটি কীভাবে চালু করবেন

আপনাকে আপনার svelte.config.js ফাইলে এক্সপেরিমেন্টাল মোড (experimental mode) চালু করতে হবে:

const config = {
    kit: {
        experimental: {
            remoteFunctions: true
        }
    },
    compilerOptions: {
        experimental: {
            async: true
        }
    }
};

export default config;

Queries নিয়ে কাজ করা

আপনি .remote.js বা .remote.ts এক্সটেনশনযুক্ত ফাইল ব্যবহার করে remote functions তৈরি করতে পারেন। এগুলো চার ধরনের:

  • query (ডেটা ফেচ করার জন্য ব্যবহৃত হয়)
  • form
  • command
  • prerender

query ফাংশনটি একটি HTTP GET রিকোয়েস্টের মতো কাজ করে। আপনি এটি আপনার Svelte কম্পোনেন্টে ইমপোর্ট করতে পারেন এবং ডেটা পেতে await ব্যবহার করতে পারেন।

একটি remote query-এর উদাহরণ:

import { query } from '$app/server';
import * as db from '$lib/server/database';

export const getPosts = query(async () => {
    const posts = await db.sql`SELECT title, slug FROM post`;
    return posts;
});

আপনার কম্পোনেন্টে এটি এভাবে ব্যবহার করবেন:

{#each await getPosts() as { title, slug }}
    <li>{title}</li>
{/each}

স্টেট ম্যানেজ করা (Managing State)

query ফাংশনটি আপনার UI ম্যানেজ করার জন্য তিনটি সহায়ক প্রপার্টি প্রদান করে:

  • loading: ডেটা ফেচ করার সময় এটি True থাকে।
  • error: রিকোয়েস্ট ব্যর্থ হলে এটি True হয়।
  • current: সফল ডেটা ধারণ করে।

স্মার্ট ফিচারসমূহ

  1. Validation: আপনার query-তে পাঠানো আর্গুমেন্টগুলো ভ্যালিডেট করতে আপনি Zod বা Valibot-এর মতো লাইব্রেরি ব্যবহার করতে পারেন। এটি আপনার সার্ভারকে নিরাপদ রাখে।

  2. Data Handling: SvelteKit ডেটা পাঠানোর জন্য devalue ব্যবহার করে। এটি Date এবং Map-এর মতো জটিল টাইপ সাপোর্ট করে, যা স্ট্যান্ডার্ড JSON সহজে করতে পারে না।

  3. Deduplication: আপনি যদি একই আর্গুমেন্ট দিয়ে একই query একাধিকবার কল করেন, SvelteKit এটি মাত্র একবার রান করবে। এটি ডেটাবেসের অতিরিক্ত লোড প্রতিরোধ করে।

  4. Refreshing: সার্ভার থেকে তাৎক্ষণিকভাবে লেটেস্ট ডেটা ফেচ করার জন্য আপনি একটি query-তে .refresh() কল করতে পারেন।

নোট: এই ফিচারগুলো এক্সপেরিমেন্টাল। ভবিষ্যতে আপডেটের সাথে সিনট্যাক্স পরিবর্তন হতে পারে।

উৎস: https://dev.to/nnutnonn/sveltekit-kaarthamngaankab-remote-function-part-1-4hg4