値変換とワークフロー
スキーマに基づく値変換
Section titled “スキーマに基づく値変換”import { castValuesBySchema } from '@alneas/data-engine/schema/cast';const values = castValuesBySchema({ quantity: '12', optional: '' }, { type: 'object', properties: { quantity: { type: 'integer' }, optional: { type: ['number', 'null'] }, },}, { numericMode: 'strict' }); // { quantity: 12, optional: null }これは入力値の変換です。保存前に変換結果をAJVで検証してください。
required、最小・最大値、enum、format、additionalPropertiesなどの制約は判定しません。
$refの解決、anyOf/oneOf/allOfの分岐選択、既定値の補完、boolean文字列や日付の変換もしません。
自身が持つ既知のproperties、配列のprefixItemsと後続itemsだけを再帰変換します。
未知のプロパティやobject/array型と合わない値は検証用に維持し、元の値を変更しません。
既存のnull・undefinedも変更しません。
既定のnumericMode: 'legacy'は従来フォームの挙動を維持します。integerはparseInt、
numberはparseFloatを使い、12suffix→12、integerの1.9→1、integerの1e3→1、
numberのInfinity→Infinityになります。integer/numberの両方がある場合はintegerを優先します。
数値の安全性を保証するモードではありません。
新規利用ではstrictを明示すると、文字列全体が有限のJSON数値である場合だけ変換できます。
指数表記は対応し、16進数・先行ゼロ・末尾文字・Number.isIntegerを満たさないinteger入力は元の文字列を維持します。
結果はJavaScript Number(IEEE 754)であり、大きな整数・小数は整数判定前を含め精度が失われる場合があります。
厳密な金額や大きな整数は文字列として保持し、別途十進数の表現で扱ってください。
両モードとも数値項目の空文字・空白だけの文字列は、nullableならnull、それ以外はundefinedです。
変換できない文字列は維持します。型のunionでもobject/array処理を先に行い、分岐の妥当性は判定しません。
深さ64超、訪問値10,000超で例外になります。循環した入力・スキーマも上限で停止します。
ワークフロー共通処理
Section titled “ワークフロー共通処理”@alneas/data-engine/workflowのWorkflowEngineは設定された遷移・アクション・状態情報を読み出します。
進捗は状態順の位置で計算し、最初の状態は1/N、最後は100%、未知の状態は0です。
状態情報が未定義またはfalsyの場合はdefaultStatusInfoを使い、constructorなど継承されたキーも参照しません。
設定や返却要素の参照は従来どおり維持します。状態更新・永続化・認可・承認・必須項目の強制は行いません。
必要な規則はアプリケーションのサーバー側でも検証してください。
共通型にはReactNode・アイコン・色・コンポーネントを含めず、UI側が型引数で表示情報を追加します。
WorkflowPolicyEngineはvalidateTransition・requiresApproval・getRequiredFieldsの3つの関数を 明示してインスタンス化します。金額10,000や伝票種別・支払済などの固定規則はありません。 初回公開前の変更としてPublic react-toolsの従来static APIをこの設定式APIへ変更します。 privateの既存static API・固定の購買承認規則はprivate app-coreに残します。 WorkflowEngineの実行時コンストラクターはPublic・private双方のUIで共通です。
非同期処理とCalendar
Section titled “非同期処理とCalendar”@alneas/data-engine/asyncのwithTimeout(promise, milliseconds = 30000, errorFactory?)は
成功・失敗・タイムアウトのすべてでタイマーを解除します。時間は0〜2147483647の有限値です。
元の処理をキャンセルしないため、必要なら処理へAbortSignalを別途渡してください。
private固有のエラー型・表示方法はUIに残します。
@alneas/data-engine/google-calendar/watchのsetupWatchChannelはアプリのfunctionUrlへ
calendarId/webhookUrlをbearer認証付きでPOSTし、channelId/resourceId/expirationを返します。
エンドポイントの入力検証・認可・watch更新・webhook検証・デプロイは利用側の責務です。
両機能ともReactや他のALNEASパッケージは必要ありません。
既存のスキーマ・Excel・Calendar・通知・グラフ連携は用途別サブパスでも参照できます。
グラフDB/HTTP・AI実行連携には従来の任意peerが必要です。/server/contained-pathはNode専用で、
アプリが管理する信頼できるルートが必要です。宣言自体はNode型定義なしでも解決できます。任意のファイルアクセスを安全にする機能ではありません。