caputchin.json マニフェスト
リポジトリのルートの caputchin.json は、マーケットプレイスのゲームの作者とインデクサーの真実の源です。インデクサーはそれをサーバー側で読み、ゲームの身元、そのバンドルがどこに住むか、どのプリセットを提供するか、そしてどうリプレイするかを学びます。それはブラウザでは 決して 読まれません。SDK は実行時にそれを読み込みません。
このページはフィールドのリファレンスです。作成は マーケットプレイスゲームを作る を、公開は マーケットプレイスに公開する を参照してください。正確な型は SDK から GameManifest としてエクスポートされます(SDK リファレンス 参照)。
最小限の単一ゲーム
{
"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"
}トップレベルのフィールド
| フィールド | 必須 | 目的 |
|---|---|---|
terms_accepted | インデックスに | マーケットプレイス投稿規約 に同意することを確認するため、リテラルの true でなければなりません。ほかのどの値(または欠落)も、マニフェストをインデックスから落とします。セルフホスト専用のマニフェストは省けます。 |
license | インデックスに | あなたのコードとバンドルされたアセットをカバーする SPDX 識別子か式。承認された識別子に評価されなければなりません(公開エラーリファレンス 参照)。 |
marketplace | インデックスに | 存在が「私をインデックスして」のシグナルです。なければ、マーケットプレイスが無視する有効な セルフホスト のゲームを意味します。marketplace ブロック 参照。 |
npm | entry とともに | インデクサーが jsDelivr URL に解決する npm のパッケージ座標。 |
entry | npm とともに | ビルドされたバンドルへのリポジトリ相対のパス。実行可能なゲームには entry、npm、または両方が存在しなければなりません。 |
games | コレクションに | コレクションのラッパーのためのサブマニフェストのパス。entry / npm と相互排他。コレクション 参照。 |
run | 任意 | 専用のヘッドレスのリプレイアーティファクト。run アーティファクト 参照。 |
preferred | 任意 | ホストが尊重しても よい 表現のヒント。preferred ブロック 参照。 |
locales / skins / configurations | 任意 | iframe の中で SDK が消費するプリセットブロック。プリセットブロック 参照。 |
version フィールドはありません。インデクサーがバンドルを不変の ref(公開された npm バージョンか解決されたコミット SHA)に自分で固定します。
marketplace ブロック
| フィールド | 目的 |
|---|---|
name | カードのタイトル。リポジトリ名(単一 / ラッパー)かリーフディレクトリ名(コレクションの子)にフォールバックします。 |
description | カードの副題と詳細ページの本文。 |
preview | 画像のパス(リポジトリのルートからの相対)か絶対 URL。約 600x315、被写体が中央。 |
version | 詳細ページの表示専用のバージョン文字列。任意。 |
support | 作者が宣言する互換性のフラグ(responsive、touch、accessible、audio など)。プラットフォームが決して検証せず、フィルターとカードのアイコンとして表に出ます。 |
author | 任意の { name?, url?, email? }。name / url は詳細ページに作者の署名としてレンダリングされます。email は決して表示されず、公開失敗のメール の オプトイン です。3 つのサブフィールドはすべて独立です。 |
ブロックは完全に任意です。name / url を省くと、詳細ページは単に作者の署名を示しません(ページのほかの場所に示される GitHub の所有者は、別の、常に存在する身元で、この署名のフォールバックではありません)。email を省くと、公開失敗の通知を受け取りません。欲しいサブフィールドだけを設定します。
配布ポインター
インデクサーは、保存された完全性ハッシュが有効なまま留まるよう、各ゲームのバンドルを不変の ref に固定し、すべての実行で再解決します(日次の cron に加えて手動の「公開または更新」):
entry+npmはcdn.jsdelivr.net/npm/<npm>@<resolved-version>/<entry>に解決されます。entryだけはcdn.jsdelivr.net/gh/<owner>/<repo>@<commit-sha>/<entry>に解決されます。npmだけは、固定されたバージョンのパッケージの既定のエントリーに解決されます。
ユーザー側のバージョン固定はありません。ビルドを凍結するには、ユーザーがウィジェットの game-src(カスタムゲーム)経由でそれをセルフホストします。
run アーティファクト
既定で、リプレイのセルフチェックはあなたのライブの entry バンドルを走らせます。ゲームが大きい、またはフレームワークか WASM ベースのとき、代わりに専用の lean なヘッドレスの run アーティファクトを出荷してください:
{
"run": {
"entry": "dist/run.js",
"modules": [
{ "name": "sim.wasm", "type": "wasm", "path": "dist/sim.wasm" }
]
}
}| フィールド | 意味 |
|---|---|
run.entry | ヘッドレスの run バンドル(リプレイ契約 の run エクスポート)へのリポジトリ相対のパス。 |
run.modules | run が name でインポートするモジュールエントリーの任意の配列。 |
インデクサーが強制する制約
これらはインデックス時に検証されます。違反は公開を manifest-error で失敗させます(公開エラーリファレンス 参照)。
run.entry:
- JavaScript でなければなりません。ベース名は
[a-zA-Z0-9_-]+.jsに一致しなければなりません。run アーティファクトは常に JS です(WASM は下記のとおりモジュールとして出荷)。 - クリーンなリポジトリ相対のパスでなければなりません。先頭のスラッシュ、
..のトラバーサル、空白、?/#、scheme://の接頭辞はなし。
各 run.modules[] エントリー は { name, type, path } です:
nameは[a-zA-Z0-9_-]+.(wasm|js)に一致しなければなりません。モジュールは JS か WASM のどちらかで、ほかには何もありません。nameは、エントリーが使うインポート指定子です。typeは拡張子と一致しなければなりません。.wasmの名前にはwasm、.jsの名前にはjs。nameは、リプレイのホストが内部で使う 予約された 名前(entry.js、artifact.js)であってはなりません。nameは配列の中で 一意 でなければなりません(重複なし)。pathはクリーンなリポジトリ相対のパスでなければなりません(run.entryと同じルール)。- 最大 16 モジュール。
run を省くと、ライブの entry を直接リプレイします。アーティファクトが何をエクスポートしなければならないかは リプレイ契約 を参照してください。
preferred ブロック
任意の preferred ブロックは、表現のヒントを運びます。すべてのキーは助言的です。ホストはそれを尊重しても よく、それは明示的な埋め込みの属性を決して上書きしません。
{
"preferred": { "width": 360, "height": 480, "layout": "modal" }
}既定でコンテナにまたがるべきレスポンシブなゲームは、どちらの軸でも "full" を宣言できます:
{
"preferred": { "width": "full", "height": 480 }
}| フィールド | 意味 |
|---|---|
width / height | ピクセルのフットプリント、またはリテラルの "full"。埋め込みが width / height を未設定のままにすると、ウィジェットはそれを適用します(full を含む明示的な埋め込みの値が代わりに勝ちます)。ピクセル値は iframe をその数にサイズづけし、"full" はその軸を親を埋めるよう伸ばします。埋め込みの width="full" と同じ効果です。省くと、ウィジェットの組み込みの既定のフットプリントにフォールバックします。 |
layout | ウィジェットがゲームの周りに作るシェル:inline、modal、fullscreen。埋め込みが layout を未設定(既定の auto)のままにするときだけ使われます。解決の順:埋め込みの layout 属性、それからこの preferred の layout、それから inline。 |
これらのヒントは、プラットフォームがサーバー側で解決するゲーム(マーケットプレイスのゲーム、またはサイトキーなしで与えられたゲーム id)にだけ尊重されます。プラットフォームがマウント前に読めないセルフホストの game-src バンドルは、フットプリントも layout のヒントも無視します。
プリセットブロック
locales、skins、configurations はそれぞれ、任意の schema(キーごとの型と文書)に加えて presets(名前付きのオプションのバンク)を宣言します。ウィジェットは訪問者の選択をこれらに対して解決し、あなたのゲームに平坦化された結果を ctx として渡します。完全なフィールド型のカタログは共有の カスタマイズスキーマリファレンス です。同じ型が カスタムゲームのダッシュボードスキーマ を駆動します。
skins.schema のフィールドは、color、アセット(image / audio / video)、またはスカラー(boolean、number、range、list)で、configurations と同じ制約の形({ "type": "range", "min": 0, "max": 24 }、["dots","stripes"] など)を使います。スカラーのスキンの値は、構成の値とちょうど同じように、ctx.skin でその型付きの値に解決されます(number は本物の数値です)。色とアセットの値は文字列に解決されます。
スキンのプリセットの _theme は、それが働くモードを宣言します:light、dark、または any(省くと any を意味します)。light か dark のプリセットはそのモードでのみ示されます。any のプリセットはどちらの背景でも読め、両方の資格があります。モードごとに 1 つの既定があります。_default: true とマークされたプリセットは、それが資格を持つモードの既定なので、any の既定は両方をカバーします。あるモードについて複数の資格あるプリセットが既定とフラグされると、宣言順で最初のものがそれを勝ち取ります。モード固有のプリセットを any のものの上に挙げて、any のプリセットがもう片方に落ちる間、そのモードに専用のスキンを与えます。
.caputchin/ 分割ファイル
プリセットブロック(特に完全なロケールのセット)は caputchin.json を長くします。どの軸も .caputchin/ フォルダーの下の自身のファイルに移し、マニフェストを短く保ちます:
caputchin.json
.caputchin/locales.json
.caputchin/skins.json
.caputchin/configurations.json各ファイルのトップレベルのオブジェクト が その軸のブロック({ schema?, presets })です。3 つすべて任意です。優先順位は軸まるごとの置き換え、caputchin.json が勝ちます。ある軸がインラインとファイルの両方で宣言されると、インラインのブロックが使われ、ファイルは無視されます(公開時に警告されるので、死んでいたと分かります)。各軸をちょうど 1 か所に保ってください。
コレクション
リポジトリは複数のゲームを出荷できます。コレクションのラッパーは、entry / npm の代わりに子のパスを宣言します:
{
"marketplace": { "name": "Caputchin Core Pack", "description": "The official pack." },
"games": ["./packages/leaf-memory", "./packages/dino-runner"]
}各パスは、自身の caputchin.json を保持する子ディレクトリを指します。子の id は owner/repo/<leaf-dir> です。ラッパーの marketplace ブロックを省くと、コレクションのページなしで子をインデックスします。
あわせて読む
- マーケットプレイスゲームを作る:このマニフェストが指すバンドルを生む。
- リプレイ契約:
runアーティファクトが何をエクスポートしなければならないか。 - 公開エラーリファレンス:すべてのマニフェスト検証エラーと、承認されたライセンスの一覧。
- カスタマイズスキーマリファレンス:プリセットブロックが使うフィールド型。