تغلّف حزمة @tracio/svelte النواة @tracio/sdk وتوفّر بدائيات (primitives) اصطلاحية خاصة بـ Svelte: استدعاء init لمرة واحدة، ومتاجر قابلة للقراءة (readable stores) تمنحك معرّف الزائر ونتيجة التعريف.
npm install @tracio/svelte @tracio/sdkالحزمة svelte (الإصدار 5) هي اعتمادية نظيرة (peer dependency) ويُفترض أنها مثبّتة مسبقًا في تطبيقك.
استدعِ Tracio.init({ publicKey }) مرة واحدة، قرب جذر تطبيقك — في +layout.svelte عند استخدام SvelteKit — محميًّا بـ browser حتى لا يعمل أبدًا أثناء التصيير من جهة الخادم (server-side rendering).
<!-- +layout.svelte --><script> import { Tracio } from "@tracio/svelte" import { browser } from "$app/environment" if (browser) Tracio.init({ publicKey: import.meta.env.VITE_TRACIO_KEY })</script><slot />تُتاح حالة TRACIO على هيئة متاجر قابلة للقراءة (readable stores) في Svelte. كل قيمة متجر هي QueryState تحمل data وisLoading وerror. استهلك المتجر باستخدام البادئة $: $visitor.data و$visitor.isLoading و$visitor.error.
قادم من React؟ يُسقِط
QueryStateفي Svelte علَمisFetchedالخاص بخطاطيف (hooks) React، كما أنuseVisitorId()لا يوفّر طريقة جلب أمرية (imperative) — وحدهuseTracioResult()يحملgetData().
يُعيد متجرًا قابلاً للقراءة من { data, isLoading, error }، حيث تكون data هي معرّف الزائر المستقر (string | undefined).
<script> import { useVisitorId } from "@tracio/svelte" const visitor = useVisitorId()</script>{$visitor.data}يُعيد متجرًا قابلاً للقراءة من { data, isLoading, error } يحمل TracioResult الكامل (معرّف الزائر إضافةً إلى كشف الروبوتات). كما يحمل المتجر المُعاد طريقة getData() (فهو يوسّع Readable) من أجل الجلب (أو إعادة الجلب) الأمري (imperative). القيمة الافتراضية لـ opts.immediate هي true؛ مرّر { immediate: false } لتأجيل الجلب حتى تستدعي getData() — مثلاً خلف بوابة موافقة (consent gate).
<script> import { useTracioResult } from "@tracio/svelte" const result = useTracioResult({ immediate: false }) // $result.data / $result.isLoading / $result.error // result.getData(): Promise<void> — call to fetch on demand</script>مَخرج طوارئ (escape hatch) يُعيد TracioInstance الأساسية (أو undefined عندما لا يكون Tracio.init() قد عمل للشجرة الحالية) للاستخدام المتقدم. وهو يُعيد النسخة (instance) مباشرةً — لا يوجد متجر ولا كائن غلاف (wrapper) لتفكيكه.
<script> import { useTracio } from "@tracio/svelte" const tracio = useTracio()</script><!-- +layout.svelte --><script> import { Tracio } from "@tracio/svelte" import { browser } from "$app/environment" if (browser) Tracio.init({ publicKey: import.meta.env.VITE_TRACIO_KEY })</script><slot /><!-- AnyComponent.svelte --><script> import { useVisitorId } from "@tracio/svelte" const visitor = useVisitorId()</script>{#if $visitor.isLoading}Loading…{:else if $visitor.error}Error: {$visitor.error.message}{:else}Visitor: {$visitor.data}{/if}@tracio/sdk التي تُبنى عليها المتاجر