コンテンツにスキップ

値変換とワークフロー

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超で例外になります。循環した入力・スキーマも上限で停止します。

@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で共通です。

@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型定義なしでも解決できます。任意のファイルアクセスを安全にする機能ではありません。