/** * guard.ts — Portability Guard(`assertPortable`)。 * * DSL 非依存の IR 可搬性不変条件: 「可搬 IR には関数 / Date / Promise 等の * non-serializable 値が混入してはならない」。graphddb の `assertJsonSerializable` を * 一般化したもの(core.ts の元実装)。全 DSL・全 consumer が共有する薄い共通プリミティブで、 * runtime-boundary.md の COMMON 判断基準(DynamoDB 概念ゼロ・純粋な構造検査)に合致する。 * * boundary との関係: * - **含める**: `assertPortable` は「IR に載せてよい値か」の DSL 非依存な構造判定。 * - **含めない**: `makeContractService` / `buildIR`(Metadata → IR)は graphddb 固有の * Metadata/OperationDef 形状に依存する consumer レベル API のため examples に残す。 */ export declare class PortabilityError extends Error { path: string; constructor(path: string, message: string); } /** * assertPortable — value が可搬(JSON-serializable)であることを再帰的に検査する。 * 関数 / Date / Promise を検出したら {@link PortabilityError} を投げる。 * * @param value 検査対象(IR ノード等)。 * @param path エラー位置(既定 `"$"`)。 * @throws {PortabilityError} non-portable な値を検出したとき。 */ export declare function assertPortable(value: unknown, path?: string): void; /** * 可搬 IR で許可される Expression IR オペレータの閉集合(expression-ir.md §3)。 * `assertPortableComponentGraph` はこの集合外の単一キーオブジェクトノードを未知 operator * として fail-closed で拒否する(component-graph の port 式・output・map.over/cond に適用)。 */ export declare const PORTABLE_EXPR_OPERATORS: ReadonlySet; /** * 可搬型記法(Portable Type Notation, B0 / bc#44)のスカラ閉集合 * (scp-ir-architecture.md §5.2)。複合型は `{opt|arr|obj: …}` の単一キー object のみ。 * `assertPortableTypeNotation` はこの閉集合外の型ノード(未知スカラ・未知複合キー・ * 0/複数キー object・obj field の `__proto__`)を fail-closed で拒否する(`"any"` エスケープ無し)。 */ export declare const PORTABLE_SCALAR_TYPES: ReadonlySet; /** * 汎用不透明値型のリテラル(bc#156)。DB ドライバ境界の generic な束縛値(`WireValue`)を表す**入力専用** * の宣言型。スカラ閉集合とは別扱い(具体スカラではない)だが、型記法としては leaf 文字列 `"value"` で * 現れ、`{arr: "value"}` で束縛値列を表す。`assertPortableTypeNotation` はスカラと同じ強度で受理する * (`"any"` エスケープではない — 宣言された不透明値型であり、native emitter が BC 所有 WireValue へ落とす)。 */ export declare const PORTABLE_VALUE_TYPE = "value"; /** * 可搬型記法の**複合型コンストラクタ**閉集合(`{opt|arr|map|obj: T}`)。`PORTABLE_SCALAR_TYPES` + * `PORTABLE_VALUE_TYPE` と合わせて PortableType の語彙 SoT を成す(`assertPortableTypeNotation` の * 受理集合そのもの — 判定と列挙で 2 つのリストを持たない)。authoring 面がこの語彙を全部綴れるか * (綴れない語彙 = 宣言不能な IR 形)は ast-equivalence.test.ts の `[completeness]` が機械検査する。 */ export declare const PORTABLE_COMPOUND_KINDS: ReadonlySet; /** * PORT_SCHEMA_TYPE_KINDS — `PortSchema.type` の閉集合。**定義は {@link PORT_SCHEMA_TYPES}(behavior.ts) * 1 箇所**で、ここはそれを guard の語彙名で再公開しているだけの別名である。 * * #266: かつてここが独立した集合を持っていて、behavior.ts 側と**メンバが食い違っていた**(ここにだけ * `boolean`、向こうにだけ `list` — 実在する conformance vector の綴りは `list` の方)。`PortSchema.type` * を読むリゾルバは behavior.ts の {@link portableTypeOfInputPort} 1 本なので、閉集合もそこが持つ。 * * `PortSchema.type` は「型そのもの」ではなく **種別キーワード**である: スカラ種 + 構造種(`array`/`map`/ * `object`)+ 不透明種(`value`)+ 未確定種(`unknown`)。構造の中身(要素型・フィールド型)は `.type` * 文字列ではなく **別フィールド `elemType`(可搬型記法 = `assertPortableTypeNotation`)**が運ぶ。この分離が * BC の唯一の型語彙で、`.type` に構造を詰め込んだ非正準文字列(例 `"arr>"` * の山括弧記法 / `"string[]"` の配列記法)は **BC にパーサが無い** = ここで LOUD に拒否する(#178)。 */ export declare const PORT_SCHEMA_TYPE_KINDS: ReadonlySet; /** * assertPortSchemaTypeKind — `PortSchema.type` が正準 KIND キーワードであることを検査する(builder の * authoring 時点の入口)。判定は {@link assertPortSchemaType} と同一 — 2 つ目の検査ではなく、authoring * 側の呼び口である。 * * @throws {PortabilityError} `.type` が KIND キーワードでないとき(fail-closed・authoring 時点)。 */ export declare function assertPortSchemaTypeKind(type: unknown, path: string): asserts type is string; /** * assertPortableTypeNotation — 可搬型記法(§5.2)を Expression IR と同じ強度で検証する。 * 型注記フィールド(body ノード `outType` / Component `outputType` / catalog `elemType`)に * 使う。閉集合: * - スカラ: 5 種の文字列リテラル(PORTABLE_SCALAR_TYPES)のみ。 * - `{opt: T}` / `{arr: T}` / `{map: T}`: 単一キー object・値は型 T(再帰)。 * (`{map:T}` は string キー・同種値型のマップ = `{arr:T}` の map 版) * - `{obj: {field: T, …}}`: 単一キー object・値は field→型の object(`__proto__` キー禁止)。 * * @throws {PortabilityError} 閉集合外の型記法を検出したとき(fail-closed)。 */ /** 宣言型名(obj の `name`・#192)の検証 SSoT: 非空・有効 identifier(先頭 [A-Za-z_]、以降 [A-Za-z0-9_])。 * present 時のみ呼ばれる(absent = 匿名)。各言語 emitter が識別子として焼くので閉集合を fail-closed で強制。 */ export declare const NOMINAL_NAME: RegExp; export declare function assertNominalName(name: unknown, path: string): void; export declare function assertPortableTypeNotation(node: unknown, path: string): void; /** * assertPortableComponentGraph — component-graph IR(scp-ir-architecture.md §5)の * 可搬性 Guard(P0-2)。generic な {@link assertPortable}(関数/Date/Promise 残存禁止)に加え、 * SCP 汎用層に固有の不変条件を fail-closed で強制する: * 1. `component` フィールド(componentRef / map)は **文字列参照のみ**(catalog 名)。 * 2. port 式・output・map.over・cond に現れる Expression IR ノードは **既知 operator の閉集合のみ** * (PORTABLE_EXPR_OPERATORS 外の単一キーオブジェクトは未知 operator として拒否)。 * 3. 関数残存禁止(generic guard を全域に適用)。 * * @throws {PortabilityError} 非可搬な構造を検出したとき。 */ export declare function assertPortableComponentGraph(ir: unknown, path?: string): void; /** * assertPortSchemaType — `PortSchema.type` は閉集合({@link PORT_SCHEMA_TYPES})でなければならない。 * * `type` は自由文字列だったので、閉集合の外の綴り(`"strng"`)は「解決できない型」として黙って扱われ、 * その port の型契約が丸ごと無効になっていた — 宣言はあるのに何も検査されない。ここで弾く。 * `"unknown"` は「静的型を持たない」の**明示**綴りで、集合の正規メンバである(黙って型を失うのと、 * 型が無いと書くのは別物)。 */ export declare function assertPortSchemaType(schema: unknown, path: string): void; //# sourceMappingURL=guard.d.ts.map