Manifest caputchin.json
caputchin.json di akar repositori-mu adalah sumber kebenaran penulis dan pengindeks untuk sebuah game marketplace. Pengindeks membacanya di sisi-server untuk mempelajari identitas game, di mana bundel-nya berada, preset mana yang ia tawarkan, dan cara memutarnya-ulang. Ia tak pernah dibaca di peramban; SDK tak memuatnya saat runtime.
Halaman ini adalah referensi bidang. Untuk build, lihat Bangun game marketplace; untuk penerbitan, lihat Terbitkan ke marketplace. Tipe persisnya diekspor dari SDK sebagai GameManifest (lihat referensi SDK).
Game tunggal minimal
{
"terms_accepted": true,
"license": "MIT",
"marketplace": {
"name": "Leaf Memory",
"description": "Match pairs of tropical leaves before the timer runs out.",
"preview": "preview.png"
},
"npm": "@your-org/leaf-memory",
"entry": "dist/leaf-memory.js"
}Bidang tingkat-atas
| Bidang | Diwajibkan | Tujuan |
|---|---|---|
terms_accepted | untuk pengindeksan | Harus literal true untuk memastikan kamu menerima Ketentuan Pengajuan Marketplace. Nilai lain (atau hilang) membuang manifest dari indeks. Manifest khusus-swahosting boleh menghilangkannya. |
license | untuk pengindeksan | Sebuah pengenal atau ekspresi SPDX yang mencakup kodemu dan aset terbundel. Harus mengevaluasi ke pengenal yang disetujui (lihat referensi galat terbit). |
marketplace | untuk pengindeksan | Kehadiran adalah sinyal "indeks aku". Absen berarti game swahosting yang sah yang diabaikan marketplace. Lihat Blok marketplace. |
npm | dengan entry | Koordinat paket npm yang diselesaikan pengindeks ke URL jsDelivr. |
entry | dengan npm | Path relatif-repo ke bundel terbangun. entry, npm, atau keduanya harus hadir untuk game yang bisa dijalankan. |
games | untuk koleksi | Path sub-manifest untuk pembungkus koleksi. Saling eksklusif dengan entry / npm. Lihat Koleksi. |
run | opsional | Artefak putar-ulang headless khusus. Lihat Artefak run. |
preferred | opsional | Petunjuk presentasi yang host BOLEH hormati. Lihat Blok preferred. |
locales / skins / configurations | opsional | Blok preset yang dikonsumsi SDK di iframe. Lihat Blok preset. |
Tak ada bidang version: pengindeks memin bundel ke ref tak-berubah sendiri (versi npm yang diterbitkan atau SHA commit yang diselesaikan).
Blok marketplace
| Bidang | Tujuan |
|---|---|
name | Judul kartu. Jatuh ke nama repo (tunggal / pembungkus) atau nama leaf-dir (anak koleksi). |
description | Subjudul kartu dan body halaman-detail. |
preview | Path gambar (relatif ke akar repo) atau URL absolut. Sekitar 600x315, subjek terpusat. |
version | String versi hanya-tampilan untuk halaman detail. Opsional. |
support | Flag kompatibilitas yang dideklarasikan-penulis (responsive, touch, accessible, audio, ...), tak pernah diverifikasi platform; dimunculkan sebagai filter dan ikon kartu. |
author | { name?, url?, email? } opsional. name / url dirender sebagai byline penulis di halaman detail; email tak pernah ditunjukkan dan adalah opt-in untuk email kegagalan-terbit. Ketiga subbidang independen. |
Blok sepenuhnya opsional. Hilangkan name / url dan halaman detail sekadar tak menunjukkan byline penulis (pemilik GitHub yang ditunjukkan di tempat lain di halaman adalah identitas terpisah yang selalu-hadir, bukan cadangan untuk byline ini). Hilangkan email dan kamu tak menerima notifikasi kegagalan-terbit. Setel hanya subbidang yang kamu mau.
Penunjuk distribusi
Pengindeks memin bundel tiap game ke ref tak-berubah agar hash integritas tersimpan tetap sah, dan menyelesaikan-ulang pada setiap run (cron harian plus "Terbitkan atau perbarui" manual):
entry+npmdiselesaikan kecdn.jsdelivr.net/npm/<npm>@<resolved-version>/<entry>.entrysaja diselesaikan kecdn.jsdelivr.net/gh/<owner>/<repo>@<commit-sha>/<entry>.npmsaja diselesaikan ke entri default paket pada versi yang dipin.
Tak ada penyematan-versi sisi-pengguna; untuk membekukan sebuah build, pengguna menghosting-sendiri ia lewat game-src widget (game kustom).
Artefak run
Secara baku pemeriksaan-diri putar-ulang menjalankan bundel entry live-mu. Saat game-mu besar atau berbasis-framework atau WASM, kirim artefak run headless lean khusus sebagai gantinya:
{
"run": {
"entry": "dist/run.js",
"modules": [
{ "name": "sim.wasm", "type": "wasm", "path": "dist/sim.wasm" }
]
}
}| Bidang | Makna |
|---|---|
run.entry | Path relatif-repo ke bundel run headless (ekspor run kontrak putar-ulang). |
run.modules | Array opsional entri modul yang diimpor run lewat name. |
Kendala yang ditegakkan pengindeks
Ini divalidasi saat-indeks; pelanggaran menggagalkan penerbitan dengan manifest-error (lihat referensi galat terbit).
run.entry:
- Harus JavaScript: basename harus cocok
[a-zA-Z0-9_-]+.js. Artefak run selalu JS (WASM dikirim sebagai modul, di bawah). - Harus path relatif-repo yang bersih: tanpa slash awal, tanpa traversal
.., tanpa spasi, tanpa?/#, tanpa awalanscheme://.
Tiap entri run.modules[] adalah { name, type, path }:
nameharus cocok[a-zA-Z0-9_-]+.(wasm|js), sebuah modul entah JS atau WASM, tak lebih.nameadalah penentu impor yang dipakai entri.typeharus sepakat dengan ekstensi:wasmuntuk nama.wasm,jsuntuk nama.js.nametak boleh berupa nama tercadang (entry.js,artifact.js) yang dipakai host putar-ulang secara internal.nameharus unik dalam array (tanpa duplikat).pathharus path relatif-repo yang bersih (aturan sama denganrun.entry).- Paling banyak 16 modul.
Hilangkan run untuk memutar-ulang entry live langsung. Lihat kontrak putar-ulang untuk apa yang harus diekspor artefak.
Blok preferred
Blok preferred opsional membawa petunjuk presentasi. Setiap kunci bersifat advisori: host BOLEH menghormatinya, dan ia tak pernah menimpa atribut sematan eksplisit.
{
"preferred": { "width": 360, "height": 480, "layout": "modal" }
}Game responsif yang seharusnya membentang kontainer-nya secara baku bisa mendeklarasikan "full" di salah satu sumbu:
{
"preferred": { "width": "full", "height": 480 }
}| Bidang | Makna |
|---|---|
width / height | Jejak piksel, atau literal "full". Widget menerapkannya saat sematan membiarkan width / height tak-disetel (nilai sematan eksplisit, termasuk full, menang sebagai gantinya). Nilai piksel mengukur iframe ke hitungan itu; "full" meregangkan sumbu itu untuk mengisi induk, efek sama yang dimiliki width="full" sematan. Hilangkan untuk jatuh ke jejak baku bawaan widget. |
layout | Shell yang dibangun widget di sekitar game: inline, modal, atau fullscreen. Dipakai hanya saat sematan membiarkan layout tak-disetel (default-nya auto). Urutan penyelesaian: atribut layout sematan, lalu layout preferred ini, lalu inline. |
Petunjuk ini dihormati hanya untuk game yang diselesaikan platform di sisi-server (game marketplace, atau id game yang diberikan tanpa kunci situs). Bundel game-src swahosting yang tak bisa dibaca platform sebelum mount mengabaikan baik jejak maupun petunjuk layout.
Blok preset
locales, skins, dan configurations masing-masing mendeklarasikan schema opsional (tipe dan dokumentasi per-kunci) plus presets (bank opsi bernama). Widget menyelesaikan pilihan pengunjung terhadap ini dan menyerahkan game-mu hasil yang diratakan sebagai ctx. Katalog tipe-bidang penuhnya adalah referensi skema kustomisasi bersama; tipe yang sama menggerakkan skema dasbor game kustom.
Sebuah bidang skins.schema boleh berupa color, sebuah aset (image / audio / video), atau skalar (boolean, number, range, list) memakai bentuk kendala yang sama dengan configurations ({ "type": "range", "min": 0, "max": 24 }, ["dots","stripes"], dan seterusnya). Nilai skin skalar diselesaikan ke nilai bertipenya di ctx.skin (sebuah number adalah angka nyata), persis seperti nilai konfigurasi; nilai warna dan aset diselesaikan ke string.
_theme sebuah preset skin mendeklarasikan mode yang ia berfungsi di dalamnya: light, dark, atau any (menghilangkannya berarti any). Preset light atau dark muncul hanya di mode itu; preset any terbaca di kedua latar dan layak untuk keduanya. Ada satu default per mode. Preset yang ditandai _default: true adalah default untuk mode mana pun yang ia layak, jadi default any mencakup keduanya; saat beberapa preset layak ditandai default untuk sebuah mode, yang pertama dalam urutan deklarasi memenangkannya. Daftar preset spesifik-mode di atas yang any untuk memberi mode itu skin khusus sementara preset any jatuh ke yang lain.
Berkas split .caputchin/
Blok preset (terutama set locale penuh) membuat caputchin.json panjang. Pindahkan sumbu mana pun ke berkasnya sendiri di bawah folder .caputchin/, membiarkan manifest pendek:
caputchin.json
.caputchin/locales.json
.caputchin/skins.json
.caputchin/configurations.jsonObjek tingkat-atas tiap berkas adalah blok sumbu itu ({ schema?, presets }). Ketiganya opsional. Presedensi adalah penggantian seluruh-sumbu, caputchin.json menang: jika sebuah sumbu dideklarasikan baik inline maupun sebagai berkas, blok inline dipakai dan berkas diabaikan (penerbitan memperingatkan agar kamu tahu ia mati). Jaga tiap sumbu di persis satu tempat.
Koleksi
Sebuah repo bisa mengirim beberapa game. Pembungkus koleksi mendeklarasikan path anak alih-alih entry / npm:
{
"marketplace": { "name": "Caputchin Core Pack", "description": "The official pack." },
"games": ["./packages/leaf-memory", "./packages/dino-runner"]
}Tiap path menunjuk ke direktori anak yang menahan caputchin.json-nya sendiri. Id anak adalah owner/repo/<leaf-dir>. Hilangkan blok marketplace pembungkus untuk mengindeks anak tanpa halaman koleksi.
Lihat juga
- Bangun game marketplace: menghasilkan bundel yang ditunjuk manifest ini.
- Kontrak putar-ulang: apa yang harus diekspor artefak
run. - Referensi galat terbit: setiap galat validasi manifest dan daftar lisensi yang disetujui.
- Referensi skema kustomisasi: tipe bidang yang dipakai blok preset.