منصوبے کے بارے میں

## جائزہ @missing-elements/h5p-offline-player ایک ویب کمپوننٹ (`<h5p-player>`) ہے جو کسی بھی `.h5p` آرکائیو فائل کو مکمل طور پر براؤزر میں چلاتا ہے۔ نہ کوئی بیک اینڈ، نہ سرور-سائیڈ ان پیکنگ، اور نہ ہی کوئی پری-ایکسٹریکشن مرحلہ درکار ہے۔ یہ کمپوننٹ پیکجز کو URL سے یا فائل پکر کے ذریعے منتخب کردہ مقامی فائل سے لوڈ کر سکتا ہے۔ پلیئر ایک ES ماڈیول کے ساتھ ایک سروس ورکر اسکرپٹ اور H5P رن ٹائم اثاثوں کے فولڈر کے طور پر تقسیم کیا جاتا ہے۔ یہ Vite، webpack 5، اور Rollup جیسے بنڈلرز کے ساتھ کام کرتا ہے، یا بغیر کسی بلڈ مرحلے کے براہ راست CDN سے استعمال کیا جا سکتا ہے۔ ایک سروس ورکر کو ہوسٹ پیج کے ساتھ اسی اوریجن سے پیش کرنا ضروری ہے؛ فریم اثاثے CDN سے آ سکتے ہیں۔ ## یہ کیسے کام کرتا ہے ایک `.h5p` فائل ایک زپ آرکائیو ہے۔ سرور کے اسے ان پیک کرنے کے بجائے، سروس ورکر آرکائیو کو اسی جگہ پڑھتا ہے اور اس کے اندر سے H5P رن ٹائم کی درخواستوں کو پیش کرتا ہے: - آرکائیو کی مرکزی ڈائریکٹری HTTP رینج درخواستوں کے ذریعے پڑھی جاتی ہے، لہٰذا بڑے پیکجز کم سے کم ابتدائی ڈیٹا ٹرانسفر کے ساتھ تیزی سے شروع ہوتے ہیں۔ - بڑی بائٹ رینجز متعدد متوازی کنکشنز کے ذریعے حاصل کی جاتی ہیں اور ترتیب سے دوبارہ جوڑی جاتی ہیں، جس سے سست لنکس پر اسٹارٹ اپ بہتر ہوتا ہے۔ - چھوٹی انٹریز اور اسکرپٹس ایک بار Cache API اسٹور میں انفلیٹ کی جاتی ہیں۔ - بڑے اسٹورڈ میڈیا کو بغیر ایکسٹریکشن کے براہ راست آرکائیو سے سلائس کیا جاتا ہے۔ - بڑے ڈیفلیٹڈ میڈیا کو پیج-سائیڈ ورکر کے ذریعے 8 MB چنکس میں انفلیٹ کیا جاتا ہے اور بتدریج پیش کیا جاتا ہے، لہٰذا ویڈیو پلے بیک مکمل ایکسٹریکشن مکمل ہونے سے پہلے شروع ہو سکتا ہے۔ - فریم دستاویز ورکر کے ذریعے فی-رسپانس Content Security Policy کے ساتھ تیار کی جاتی ہے۔ رینج سپورٹ کے بغیر ہوسٹس کو پورے آرکائیو کو چنک اسٹور میں ڈاؤن لوڈ کر کے ہینڈل کیا جاتا ہے، جو آتے ہی مقامی ہیڈرز سے انڈیکس ہوتا ہے تاکہ لائبریریز-فرسٹ ترتیب والے پیکجز میڈیا کے ابھی ڈاؤن لوڈ ہونے کے دوران بوٹ ہو سکیں۔ ## API کی جھلکیاں - **`src`** — پیکیج URL کے لیے ایٹریبیوٹ/پراپرٹی؛ اسے سیٹ کرنا لوڈ کرتا ہے، جیسے `<video>`۔ - **`file`** — ایک `File` آبجیکٹ قبول کرنے والی پراپرٹی، بغیر نیٹ ورک ڈسک-بیسڈ پلے بیک کے لیے۔ - **`sw`** — سروس ورکر URL کے لیے ایٹریبیوٹ (لازمی طور پر same-origin)۔ - **`assets-base`** — فریم اثاثہ جات ڈائریکٹری کے لیے ایٹریبیوٹ (CDN ہو سکتی ہے)۔ - **`libraries`** — ہب یا بنڈلڈ پیکیج سے لائبریری فولڈرز لوڈ کرنے کے لیے ایٹریبیوٹ۔ - **`resume`** — سیکھنے والے کی حالت ڈیوائس پر محفوظ کرنے یا ہوسٹ پیج کے حوالے کرنے کے لیے ایٹریبیوٹ۔ - **`preload`** — درخواست سے پہلے بڑے ڈیفلیٹڈ میڈیا کو پری-فیچ کرنے کے لیے ایٹریبیوٹ۔ صرف-پڑھنے والی پراپرٹیز میں `state` (idle، probing، downloading، indexing، ready، error)، `pkgId`، `revision`، اور `scope` شامل ہیں۔ ## ایونٹس یہ ایلیمنٹ `ready`، `xapi` (مواد سے xAPI اسٹیٹمنٹس کے لیے)، `finished` (اسکور کے ساتھ تکمیل)، `userdata` (محفوظ شدہ حالت)، `progress` (ڈاؤن لوڈ/انڈیکس مراحل)، `resize`، `statechange`، اور `error` ایونٹس خارج کرتا ہے۔ xAPI اسٹیٹمنٹس نتائج کا واحد ذریعہ ہیں اور پلیئر خود انہیں کبھی محفوظ نہیں کرتا۔ ## اضافی خصوصیات - **PWA سپورٹ**: Chrome/Edge کے لیے انسٹال کے قابل آف لائن ایپ۔ - **cmi5 انٹیگریشن**: LMS-لانچڈ اسائن ایبل یونٹس کے لیے `@missing-elements/h5p-cmi5` کے طور پر دستیاب۔ - **ایجنٹ اسکلز**: Claude Code، Cursor، Copilot، اور Codex کے لیے اسکلز فراہم کرتا ہے جو سیٹ اپ، پیکیج نارملائزیشن، اور تصدیق کا احاطہ کرتی ہیں۔ - **رسائی**: دستاویزی مطابقت کا نقطہ نظر جو پلیئر کے رویے اور مواد کی اقسام کی ذمہ داریوں کا احاطہ کرتا ہے۔ - **تصدیقی ٹول**: `h5p-verify` پیکجز کو ہیڈ لیس چلا کر تصدیق کرتا ہے کہ وہ کام کرتے ہیں۔ ## لائسنسنگ پلیئر کا اپنا کوڈ MIT ہے۔ شائع شدہ پیکیج `(MIT AND GPL-3.0-only)` ہے کیونکہ بنڈلڈ H5P کور رن ٹائم (h5p-standalone/h5p-php-library سے) GPL-3.0 ہے۔ سروس ورکر اسکرپٹس zip.js (BSD-3-Clause) بنڈل کرتی ہیں۔ لائسنس نوٹسز خارج شدہ فائلوں میں سرایت شدہ ہیں۔