Skip to content

Commit 283c532

Browse files
authored
Merge pull request #207 from EndoHizumi/copilot/add-scenario-manager-snapshot
Add executeSandboxScenario, snapshot/restore, async callHandler, and scenario validation
2 parents 98c9129 + d3e760b commit 283c532

11 files changed

Lines changed: 2079 additions & 649 deletions

File tree

README.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
- [動作確認手順](#動作確認手順)
1414
- [Quick Start(デモゲームを弄ってみよう)](#quick-startデモゲームを弄ってみよう)
1515
- [開発コマンド](#開発コマンド)
16+
- [シナリオ検証API](#シナリオ検証api)
1617
- [現在の状況](#現在の状況)
1718
- [ロードマップ](#ロードマップ実装予定)
1819
- [できること](#アルファ版01x-02xでできること)
@@ -185,6 +186,35 @@ npm run play
185186
- `npm run docs:build` - ドキュメントをビルド
186187
- `npm run docs:preview` - ビルドしたドキュメントをプレビュー
187188

189+
## シナリオ検証API
190+
191+
WebTaleKit には、シナリオ配列を検証しつつ、HTML風の文字列を非破壊でサニタイズできる公開APIがあります。
192+
193+
- `validateScenarioObjects` - 検証結果とサニタイズ済みシナリオを返します
194+
- `formatValidationOutput` - エラーと警告を表示用文字列へ整形します
195+
- `createScenarioValidationError` - 検証結果から Error を生成します
196+
- `assertScenarioValidation` - エラーがある場合に例外を送出します
197+
- `reportScenarioValidation` - logger 経由で警告とエラーを出力します
198+
199+
これらのAPIは、エンジン実行時に自動で強制適用されません。シナリオの読み込み時、エディタ連携時、独自ビルド処理時などに、利用者が必要に応じて呼び出す想定です。
200+
201+
```ts
202+
import {
203+
assertScenarioValidation,
204+
reportScenarioValidation,
205+
validateScenarioObjects,
206+
} from './src/utils/validateScenario'
207+
208+
const result = validateScenarioObjects(scenarioObjects, commandList)
209+
210+
await reportScenarioValidation(result, 'Scene import')
211+
assertScenarioValidation(result, 'Scene import')
212+
213+
const safeScenario = result.sanitizedScenario
214+
```
215+
216+
`sanitizedScenario` は元の入力配列を破壊せずに返されます。`sanitized``true` の場合は、HTML風の文字列がエスケープされています。
217+
188218
## 現在の状況
189219

190220
webTaleKitは、現在アルファ版です。

README_EN.md

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
- [Testing Instructions](#testing-instructions)
1414
- [Quick Start](#quick-start)
1515
- [Development Commands](#development-commands)
16+
- [Scenario Validation API](#scenario-validation-api)
1617
- [Current Status](#current-status)
1718
- [Roadmap](#roadmap)
1819
- [Features](#features-available-in-alpha-01x-02x)
@@ -185,6 +186,35 @@ Choices are important elements that let players control game progression. You ca
185186
- `npm run docs:build` - Build documentation
186187
- `npm run docs:preview` - Preview built documentation
187188
189+
## Scenario Validation API
190+
191+
webTaleKit provides a public API for validating scenario arrays and non-destructively sanitizing HTML-like string content.
192+
193+
- `validateScenarioObjects` returns validation results and a sanitized scenario
194+
- `formatValidationOutput` converts errors and warnings into display-friendly strings
195+
- `createScenarioValidationError` builds an `Error` from validation results
196+
- `assertScenarioValidation` throws when validation errors exist
197+
- `reportScenarioValidation` sends warnings and errors through the logger
198+
199+
These APIs are not automatically enforced by the engine at runtime. They are intended to be called explicitly by the user from scene import flows, editor integrations, custom build steps, or server-side tooling.
200+
201+
```ts
202+
import {
203+
assertScenarioValidation,
204+
reportScenarioValidation,
205+
validateScenarioObjects,
206+
} from './src/utils/validateScenario'
207+
208+
const result = validateScenarioObjects(scenarioObjects, commandList)
209+
210+
await reportScenarioValidation(result, 'Scene import')
211+
assertScenarioValidation(result, 'Scene import')
212+
213+
const safeScenario = result.sanitizedScenario
214+
```
215+
216+
`sanitizedScenario` is returned without mutating the original input array. When `sanitized` is `true`, HTML-like text has been escaped.
217+
188218
## Current Status
189219
190220
webTaleKit is currently in alpha.

documents/manual.md

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,5 +105,30 @@
105105

106106
4. `dist`ディレクトリの内容をWebサーバーにデプロイすることで、ゲームを公開できます。
107107

108+
## シナリオ検証とサニタイズ
109+
110+
WebTaleKit では、シナリオ配列に対して検証とサニタイズを行う公開APIを利用できます。
111+
112+
- `validateScenarioObjects``valid``errors``warnings` に加えて `sanitizedScenario` を返します
113+
- `sanitizedScenario` は非破壊で生成されるため、元のシナリオ配列は変更されません
114+
- `reportScenarioValidation` を使うと、既存 logger に合わせた警告・エラー出力ができます
115+
- `assertScenarioValidation` を使うと、エラーがある場合に呼び出し側で停止できます
116+
117+
この機能は公開APIであり、エンジン本体が自動で適用するわけではありません。ツール、エディタ、ビルド処理、サーバー側変換など、必要な場所で明示的に呼び出してください。
118+
119+
```ts
120+
import {
121+
reportScenarioValidation,
122+
validateScenarioObjects,
123+
} from '../src/utils/validateScenario'
124+
125+
const result = validateScenarioObjects(scenarioObjects, commandList)
126+
await reportScenarioValidation(result, 'Manual validation')
127+
128+
if (result.valid) {
129+
const scenarioForRuntime = result.sanitizedScenario
130+
}
131+
```
132+
108133
以上がWebTaleKitを使ってビジュアルノベルゲームを作成するための基本的な流れです。
109134
タグの詳細については、[WebTaleKit仕様](documents/spec.md)を参照してください。

0 commit comments

Comments
 (0)