createArkor
Trainer を CLI と Studio が発見できる Arkor プロジェクトマニフェストにラップする。
import { createArkor } from "arkor";
import { trainer } from "./trainer";
export const arkor = createArkor({ trainer });createArkor は、arkor dev、arkor start、Studio の /api/manifest エンドポイントが src/arkor/index.ts で探すプロジェクトマニフェストを生成します。今のところマニフェストが含むのは Trainer だけで、型は deploy と eval のスロットを予約していますがどちらも未実装です。
シグネチャ
function createArkor(input: ArkorInput): Arkor;
interface ArkorInput {
trainer?: Trainer;
// 将来: deploy?: Deploy;
// 将来: eval?: Eval;
}
interface Arkor {
readonly _kind: "arkor";
readonly trainer?: Trainer;
// 将来: readonly deploy?: Deploy;
// 将来: readonly eval?: Eval;
}返ってくるオブジェクトは Object.freeze 済み。メソッドはありません。フレームワークは _kind と trainer を直接読みます。
パラメーター
trainer:createTrainerで作ったTrainerを渡す。型上はオプショナルですが、trainerのないマニフェストはarkor startで実行できません(ランナーがTraining entry must export `arkor` (from createArkor({...})) or `trainer` (from createTrainer({...})), or default-export one of them.で例外が発生します)。
予約フィールド
deployとevalスロット。ArkorInputとArkorではコメントアウトされた予約フィールドとして現れます。現状それらを渡すと型エラーになり、ランタイム側の処理もありません。前方互換 API ではなくロードマップマーカーとして扱ってください。
振る舞い
認識されるエクスポート形
arkor start(経由 runTrainer)は src/arkor/index.ts を次の 3 つのエクスポートのいずれかについて、優先順位順に検査します:
export const arkor = createArkor({ ... })(推奨。テンプレートが生成する形)export const trainer = createTrainer({ ... })(パワーユーザー向けショートカット、マニフェストなし)export default ...(Arkorマニフェストか、ベアなTrainerのいずれか)
どれもマッチしないとランナーは上記メッセージで例外を投げます。テンプレートは常に形式 1 を生成します。他を選ぶ理由が分かっていない限り、これを選んでください。
isArkor
import { isArkor } from "arkor";
if (isArkor(value)) {
// value: Arkor
}マニフェストを動的に利用するコードのために createArkor と一緒にエクスポートされている小さな型ガードです。値が null でないオブジェクトで _kind === "arkor" であることをチェックします(Object.isFrozen は確認 しません。createArkor 自体は frozen な値を生成するにもかかわらず)。普通に使う場面は限られます。通常のコードでは index.ts からの型付きエクスポートが既に正しい形を与えてくれます。
関連項目
createTrainer: ラップするTrainer- プロジェクト構成 §
src/arkor/: マニフェストが読まれる場所 - ロードマップ § Deploy と eval スロット: 予約フィールドの方向性