防御的パース
parsePanelConfig()(packages/)は任意 JSON を修復する、 例外を投げない全域的な境界です。tryParsePanelConfig() はインポート/ オートセーブ用のより厳密な入口で、先に app: "zpd"、1〜5 の整数 version、 layers 配列を要求し、その後フィールド修復を parsePanelConfig() へ 委譲します。
トップレベルの修復
| Input | 結果 |
|---|---|
| プレーンオブジェクトでない | 完全な createDefaultDoc() の固定スタックスターター。 |
layers が欠落/非配列のオブジェクト | 子が空の正規 3 コンテナスタック。 |
guides が欠落/非配列 | []。 |
hp が欠落、不正、非正数 | DEFAULT_PANEL_HP。MAX_PANEL_HP 超過は上限へクランプ。 |
| 手編集された panel 寸法や palette | 派生的な参考出力なので無視。 |
| 未知のキー | 破棄。 |
parsePanelConfig() は version が欠落/非整数なら修復用に旧 v4 として扱います。 厳密な兄弟関数は、欠落、将来版、未対応 version を拒否します。
固定スタックの正規化
オブジェクト入力は常に、物理的な下から上の同じルートを返します。
Copper
Solder mask
Silkscreen
v1–v4 の自由ルート文書では、通常 leaf/group を旧来の paint によって 分割します。複数マテリアルにまたがる group は、可能な限り通常シェル、 順序、名前、表示状態を保って分割します。fill と stroke が別マテリアルの path はマテリアル別コピーへ分けます。image、paint のない path、空 group は Copper がデフォルトです。
v5 では wrapper の id、ラベル、順序を信頼しません。有効 role は正規ルート へ統合し、欠落 role を合成し、重複 role を結合し、不正 wrapper から回収 できる子は旧方式で分割します。null でないすべてのベクター paint は最終的な 所属コンテナへ正規化されます。固定 wrapper が選択可能な通常 group として 回収されることはありません。
通常ノードと id
parseLayerNode() は MAX_GROUP_DEPTH まで再帰する通常の kind: "group" と、5 つの leaf 型を受け付けます。不正/非オブジェクトノード、 未知の型は個別に破棄し、未知フィールドは残しません。
id は通常ツリー全体で決定的に割り当てます。欠落または空の id には type/group に基づく決定的なフォールバックを使い、先行 id または固定ルートとの衝突には 安定した数字サフィックスを付けます。同じ入力を繰り返しパースするとバイト同一 の結果になります。この永続化境界では時刻/乱数ベースの mintId() を呼びません。
共通フィールドの挙動:
| Field | 修復 |
|---|---|
name | 文字列でなければ ""。 |
hidden | boolean の場合だけ保持し、それ以外は省略。 |
| 有限の geometry/rotation | 非有限値は、必須かどうかに応じてフォールバックまたは省略。 |
color、null でない fill/stroke | 不正 index はいったん 0、その後最終コンテナ所属へ正規化。 |
path fill/stroke | null は無効のまま、非 null は所有マテリアルで有効のまま。 |
| path の点/ハンドル/サブパス | 不正エントリを個別に破棄。ハンドルは有限な x と y が必要。 |
pattern params | 有限な数値エントリだけを保持。 |
| pattern geometry | 不正 size は安全な panel-cover geometry へフォールバックし、MAX_PATTERN_SIZE_MM で上限化。 |
ガイド
guide は有効な horizontal/vertical orientation と有限な position を持つ場合だけ 残ります。欠落 id は 1 始まりの決定的な guide-${sourceIndex + 1} を使い、 明示/生成 id の衝突はすべて安定したサフィックスで修復します。hidden は boolean の場合だけ保持します。1 つの不正 guide が他を破棄することはありません。
2 つの入口がある理由
parsePanelConfig()は信頼済み移行と低レベル修復向けで、必ず安全なDocStateを返します。tryParsePanelConfig()はランダム JSON、別アプリ、将来形式をインポート UI やオートセーブが黙って受け入れるのを防ぎます。 ラウンドトリップ → インポートを参照してください。
修復結果は PanelConfig JSON であり、Gerber データではありません。Gerber ファイルは別系統の、アートワークのみの .zip エクスポートが、このファイル ではなくメモリ上のドキュメントから書き出します。