5. 設定
各cordis.ymlエントリにはconfigブロックを含めることができ、プラグインはapplyの実行前にそれを検証するスキーマを宣言します。不正な設定では、正確なエラーとともに読み込みが失敗します。プラグインが不完全な設定のまま起動することはありません。
設定可能なプラグイン
tmp/cordis-tutorialにconfig-demo.tsを作成します。
import type { Context } from '@deepseek-ai/cordis'
import Schema from '@deepseek-ai/schemastery'
export const name = 'config-demo'
export interface Config {
greeting: string
targets: string[]
}
export const Config: Schema<Config> = Schema.object({
greeting: Schema.string().default('Hello'),
targets: Schema.array(String).default(['world']),
})
export function apply(ctx: Context, config: Config) {
for (const target of config.targets) {
console.log(`${config.greeting}, ${target}!`)
}
}エクスポートされるConfigは、同じ名前を持つ TypeScript インターフェースであると同時に実行時スキーマでもあります。コンシューマーは型を取得し、Cordis はバリデーターを取得します。このリポジトリではスキーマにSchemasteryを使用します。Cordis 自体は任意のStandard Schemaバリデーターを受け入れるため、Configとしてエクスポートしたプレーンオブジェクトは機能しません。
設定します。
- name: './config-demo.ts'
config:
targets: ['alpha', 'beta']実行します。
Hello, alpha!
Hello, beta!greetingは省略されているため、スキーマのデフォルト値によって補われます。applyは常に完全で検証済みの設定を受け取ります。
明確に失敗させる
次に、不正な値を渡します。
- name: './config-demo.ts'
config:
targets: 'not-an-array'ValidationError: invalid config:
- $.targets expected array but got not-an-array (at targets)プラグインの fiber は FAILED になり、このチュートリアルのランチャーはエラーを出力した後、ステータス 1 で終了します。プラグインは、利用できないリソースまたはプロバイダーを指定するスキーマ上は有効な設定についても、その参照を解決できしだい拒否する必要があります。
計算される設定値
このリポジトリで使用するローダーは、読み込み時に計算する必要がある設定値向けに!!jsタグをサポートしています。
- name: './config-demo.ts'
config:
greeting: !!js process.env.DEMO_GREETING ?? 'Hello'!!jsは、config内およびエントリのdisabledフィールド内でのみ機能します。disabled: !!js ...はマウント判定のたびにローダーコンテキストに対して評価されるため(このリポジトリの拡張)、行ごとにプラットフォームまたは環境で自身を制御できます。その他のメタデータ(name、id、inject、…)は静的なままです。そこでは式は通常の truthy なデータとして扱われます。ローダー設定を参照してください。
次へ: 構成と HMR — cordis.ymlをアプリケーションとして扱います。