@kubohiroya/turbowarp-extension-data-editor 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (91) hide show
  1. package/README.md +24 -3
  2. package/dist/build-info.json +7 -2
  3. package/dist/descendants.js +11 -2
  4. package/dist/index.d.ts +1 -0
  5. package/dist/json-value.d.ts +4 -0
  6. package/dist/json-value.js +12 -0
  7. package/dist/prepared-save.d.ts +5 -0
  8. package/dist/prepared-save.js +47 -0
  9. package/dist/prepared-types.d.ts +13 -0
  10. package/dist/prepared-types.js +1 -0
  11. package/dist/registry.d.ts +2 -0
  12. package/dist/registry.js +57 -45
  13. package/dist/rjsf.d.ts +25 -1
  14. package/dist/rjsf.js +70 -6
  15. package/dist/schema-compose.d.ts +6 -0
  16. package/dist/schema-compose.js +103 -0
  17. package/dist/schema-engine.d.ts +18 -0
  18. package/dist/schema-engine.js +298 -0
  19. package/dist/schema-json.d.ts +10 -0
  20. package/dist/schema-json.js +68 -0
  21. package/dist/schema-types.d.ts +161 -0
  22. package/dist/schema-types.js +2 -0
  23. package/dist/schema-view.d.ts +7 -0
  24. package/dist/schema-view.js +102 -0
  25. package/dist/schema.d.ts +8 -0
  26. package/dist/schema.js +86 -0
  27. package/dist/session.d.ts +1 -1
  28. package/dist/session.js +18 -5
  29. package/dist/source-document.d.ts +3 -0
  30. package/dist/source-document.js +415 -0
  31. package/dist/source-editor.d.ts +13 -0
  32. package/dist/source-editor.js +235 -0
  33. package/dist/source-schema-hints.d.ts +3 -0
  34. package/dist/source-schema-hints.js +13 -0
  35. package/dist/source-types.d.ts +47 -0
  36. package/dist/source-types.js +1 -0
  37. package/dist/source-view.d.ts +3 -0
  38. package/dist/source-view.js +318 -0
  39. package/dist/types.d.ts +2 -4
  40. package/dist/webpack4/index.js +4 -2
  41. package/dist/webpack4/metafile.json +9551 -8644
  42. package/dist/webpack4/react.js +2 -1
  43. package/dist/webpack4/react.js.map +1 -1
  44. package/dist/webpack4/rjsf.js +15014 -20975
  45. package/dist/webpack4/rjsf.js.map +4 -4
  46. package/dist/webpack4/schema.js +17 -0
  47. package/dist/webpack4/schema.js.map +7 -0
  48. package/dist/webpack4/shared-BKTRZUZH.js +42 -0
  49. package/dist/webpack4/{shared-KIFRVTSM.js.map → shared-BKTRZUZH.js.map} +1 -1
  50. package/dist/webpack4/shared-KQOUMWJ4.js +8490 -0
  51. package/dist/webpack4/shared-KQOUMWJ4.js.map +7 -0
  52. package/dist/webpack4/shared-MRPGBJIH.js +75 -0
  53. package/dist/webpack4/shared-MRPGBJIH.js.map +7 -0
  54. package/dist/webpack4/{shared-WHOAW2VF.js → shared-N6YQE2X6.js} +116 -44
  55. package/dist/webpack4/shared-N6YQE2X6.js.map +7 -0
  56. package/dist/webpack4/{shared-KIFRVTSM.js → shared-RN7GOT65.js} +2 -41
  57. package/dist/webpack4/shared-RN7GOT65.js.map +7 -0
  58. package/dist/webpack4/turbowarp.js +4 -2
  59. package/dist/webpack4/turbowarp.js.map +1 -1
  60. package/docs/README.md +1 -0
  61. package/docs/block-editor-e2e.md +98 -16
  62. package/docs/ci-success-gate.md +84 -0
  63. package/docs/editor/issue-12-public-validation/README.md +61 -0
  64. package/docs/editor/issue-12-public-validation/dark-invalid.png +0 -0
  65. package/docs/editor/issue-12-public-validation/dark-styles.json +173 -0
  66. package/docs/editor/issue-12-public-validation/dark-valid.png +0 -0
  67. package/docs/editor/issue-12-public-validation/deployment-target.json +5 -0
  68. package/docs/editor/issue-12-public-validation/deployment-wait.json +7 -0
  69. package/docs/editor/issue-12-public-validation/light-invalid.png +0 -0
  70. package/docs/editor/issue-12-public-validation/light-styles.json +173 -0
  71. package/docs/editor/issue-12-public-validation/light-valid.png +0 -0
  72. package/docs/editor/issue-12-public-validation/provenance.json +88 -0
  73. package/docs/editor/issue-12-public-validation/results.json +677 -0
  74. package/docs/editor/issue-12-public-validation/summary.json +206 -0
  75. package/docs/github-pages.md +48 -41
  76. package/docs/package-distribution.md +2 -2
  77. package/docs/schema-stage1-browser.json +10 -0
  78. package/docs/schema-stage1-contracts.json +242 -0
  79. package/docs/schema-stage1-dependencies.json +202 -0
  80. package/docs/schema-stage1-git-artifact-20261018.ja.md +17 -0
  81. package/docs/schema-stage1-profile-compat.json +30 -0
  82. package/docs/schema-stage1-review-fixes-20261018.ja.md +36 -0
  83. package/docs/schema-stage1-verification.json +541 -0
  84. package/docs/schema-stage1.ja.md +80 -0
  85. package/docs/schema.md +43 -0
  86. package/docs/source-forms.ja.md +19 -0
  87. package/docs/stage-2-publication.ja.md +29 -0
  88. package/docs/template-fixture-separation.ja.md +43 -0
  89. package/package.json +11 -3
  90. package/webpack4.cjs +1 -1
  91. package/dist/webpack4/shared-WHOAW2VF.js.map +0 -7
package/docs/schema.md ADDED
@@ -0,0 +1,43 @@
1
+ # 固定Schemaのpure検証API
2
+
3
+ `@kubohiroya/turbowarp-extension-data-editor/schema`はDOM・React・RJSFをimportせず、同梱resourceだけで同期検証する。既存の登録API・GUIフラグ・保存データは変更しない。
4
+
5
+ `compileSchemaBundle(bundle)`は`compiled`、`schema-error`、`execution-error`を区別する。成功した`validator.validate(data, {consumerId})`は`valid`、`invalid`、`execution-error`を返す。入力診断は`toValidationIssues()`で従来の表示用型へ変換できる。
6
+
7
+ bundleは`identity`・`dialect`・`root`・`resources`・`provenance`を持つ。方言は`draft-07`または`2020-12`を必ず指定する。各resourceの`retrievalUri`はfragmentなしの絶対URI。HTTP形式でもネットワークへアクセスせず、URNも使える。`$id`・相対/絶対ref・再帰refをローカルで解決し、実効IDが異なる場所と衝突するbundleは拒否する。bundleごとのAjv instanceで同じIDの異版を隔離する。
8
+
9
+ artifactの`canonical-schema`は`canonicalSources`、`generated-schema`は`generatedFiles`と`generatedFrom`へ対応させる。参照用Schemaと生成処理はcompile入力にしない。正本・生成物・参照用・生成処理の同一repository/path/symbolを重複分類しない。metadataにあるファイル・URLを探索して読み込む機能はない。
10
+
11
+ Schemaと入力を専用snapshotへコピーして検証する。coercion・default補完・追加property削除を行わず、frozen入力も扱う。privateなSchema snapshot内でURI/方言の同義識別子を正規化するが、所有側のSchema・rawデータ・正本や生成物を書き換えない。JSONの有限数・文字列・真偽値・null・密な配列・plain objectを受け付ける。循環、class instance、accessor、非JSON値を拒否し、getter・toJSON・入力iteratorを実行しない。
12
+
13
+ snapshotは最大100,000訪問値・深さ128に制限し、超過は`limit-exceeded`の実行診断とする。制限のためにデータを切り捨てて成功扱いにはしない。Schemaの非同期検証は受け付けない。標準formatは直接依存のajv-formatsにあるものを使い、未知formatを黙って無視しない。
14
+
15
+ 診断は固定codeとscope、必要なresource URI・JSON Pointer・keywordを持つ。required/additionalPropertiesは問題の子項目へPointerを付け、URI fragmentをschemaPathへ分解する。raw値・Ajvのparams・例外本文をコピーしない。未知ref・Schema不正とengine実行失敗を混同しない。
16
+
17
+ 同期owner合成とRJSFの明示経路はS1-3で追加済み。owner形式adapterと配布はS1-4で追加し、16契約をS1-5で横断確認した。既存フォームへ自動接続しない。新入口の利用を外すことで従来の経路へ戻せる。
18
+
19
+ 実装根拠: [Ajvの方言](https://ajv.js.org/json-schema.html)、[Schema登録と隔離](https://ajv.js.org/guide/managing-schemas.html)。
20
+
21
+ ## S1-3: 同期owner検証と明示フォーム
22
+
23
+ `validateSchemaInput(compiled, data, {context, ownerValidate?})` はcontextを先に検査し、構造検証に成功したときだけ同期ownerを1回呼ぶ。`context`にはconsumerId、有限のnowMs、JSON互換settingsが必要。候補とcontextの保護snapshotを渡し、入力を正規化値へ置換しない。Promise/thenableはasync-owner-unsupported、例外はowner-validation-failed、不正な結果はowner-result-invalid。不正contextはowner-context-invalid。拒否Promiseも処理して未処理rejectionを残さない。
24
+
25
+ `/rjsf`の`createSchemaBundleEditor`と`registerSchemaBundle`は、従来optionsのschemaの代わりにschemaBundle、呼出しごとの`validationContext: () => context`、任意のownerValidateを受ける。構造・同期owner検証はlive/save/未mount保存で共通。legacy validateDataはこの検証が成功した後、保存時だけ実行する。新経路のreadはdefaultを補わず、既存createSchemaEditorのdefault初期化は維持する。
26
+
27
+ `SchemaBundleEditorOptions`の型引数を省略した場合は`null`設定を使う。`SchemaValidationContext` / `SyncOwnerValidator`と同じ既定であり、options変数にも`settings: null`を指定できる。設定を使う場合は明示型またはfactoryの推論を使う。public型の検査は省略・inline・明示型と不正設定の負例を含む。
28
+
29
+ RJSF v5用には正本を変えないprivateな表示Schemaを作る。閉じたresource graphのID/anchor/refを解決し、wrapper内のfragment pointerへ展開する。private表示側で不要になったID宣言を除くが、正本・検証制約は変更しない。検証の正本は常に元bundleのengineで、RJSFへextraErrorsを渡す。JSON Pointerの特殊キーを保持し、共通field-errorsのARIA表示・訂正・解除へ接続する。
30
+
31
+ 2020-12 prefixItems、dynamic/recursive ref、RJSFが展開を終了できないobject再帰は、フォーム登録時に明示的に拒否する。配列items経由の再帰と両方言の同梱refは合成フォームで確認する。これらの表示制限はheadless engineの受理範囲を狭めない。現行14本番契約の実フォームと段階2で新規予定の9固定契約は、段階2の具体計画で区別して検証する。旧16契約には撤去したTemplateサンプル2件が含まれる。[現行の再検証手順](template-fixture-separation.ja.md#current-verification)に従い、Templateの旧入口を検証対象にしない。
32
+
33
+ この工程は拡張へのeditor登録、GUI依存更新、binding、候補UIを追加しない。新APIを呼ばない既存利用者の挙動は維持する。
34
+
35
+ ## S1-4pの配布
36
+
37
+ 段階1中はnpmへ未公開のAPIを既存の0.1.0公開版と取り違えないよう、ownerの追加pure型依存を検証済みGit commitへ固定する。Git依存のprepareで既存buildを実行し、dist/JS/型/CSS/webpack4/build-infoを生成する。ローカルfile:/tmp依存は公開manifestへ残さない。npm publishや既存GUI依存の変更はこの作業に含めない。
38
+
39
+ 既存hostがBlockEditorRegistrationAPI/BlockEditorServiceを実装する場合、新しいregisterSchemaBundleは任意のcapabilityとして追加する。既存の3 memberだけを持つobjectも代入できる。createBlockEditorServiceの戻り値ではSchemaBundleBlockEditorRegistrationAPIとしてこのcapabilityを保証し、外部hostでは存在を確認して利用する。ownerのGit依存はpureファイルだけでなく./rjsfの修正版宣言も照合する。固定するcommitと実解決の対応は公開時の検証記録に残す。
40
+
41
+ ownerのvalidate*Sourceは元source/未正規化データと診断を分けて返す。形式不正・未知variantで生のparser例外を診断へ混ぜない。Camera系は既存readerと同じtrim/BOM・ROSのtrim後サイズ条件を維持するが、返すsourceは原文を保持する。lib-editor/schemasのemit copyは配布用生成物であり、bundleのartifact.roleは元のSchema正本/TypeBox・Spec生成物の由来を表す。
42
+
43
+ 旧SchemaEditorOptions.schema経路は既存format/error/defaultの互換性とprovenance不在を考慮し、従来のRJSF validatorを継続する。明示bundleだけをpure engineへ接続し、それぞれlive/save/未mountで同じ判定を使う。webpack4 helperには新しい/schemaの事前build入口も追加し、既存4入口とCSS aliasを保つ。
@@ -0,0 +1,19 @@
1
+ # 固定Schemaを使うSource/Form編集
2
+
3
+ 既存の`register`・`registerSchema`・`registerSchemaBundle`は変更しない。追加の`registerSourceEditor`は、ホスト提供APIでは任意、`createBlockEditorService()`の返す`SourceBlockEditorRegistrationAPI`では必須となる。既存の`SchemaBundleBlockEditorRegistrationAPI`を実装するホストに新メソッドを要求しない。公開入口は従来の8つを維持する。
4
+
5
+ 型と汎用有限JSON契約`jsonValueSchemaBundle`は`./schema`から取得する。この入口はDOM・Reactを必要としない。`PreparedEditorDefinition`と`PreparedSave`は`.`・`./rjsf`、UIを含む`createSourceEditor`は`./rjsf`から取得する。拡張側は型とpure owner adapterだけを参照し、React/RJSFを重複同梱しない。汎用JSON Schemaの正本は`src/json-value.ts`の`jsonValueSchema`であり、JSONファイルの生成物を正本と呼ばない。
6
+
7
+ `SourceEditorOptions`は固定した`bindings`と、保存のたびに新しい検証contextを返す`validationContext`を受け取る。各bindingは引数名、固定variant一覧、必要なら空scene等を明示するsourceOnlyVariants、`decode`と`validateSource`を持つ。`decode(source)`は`SourceDocument`を返し、その`source`に原文のraw文字列、`data`に編集表示用の値、`format`と`variantId`に形式と固定variantの識別子を保持する。`validateSource(source, context)`は`SourceValidation`を返し、その`source`に検証した候補文字列、`result`に検証結果を保持する。opcodeは`extensionId_opcode`の完全修飾名とする。複数のbindingを一つのeditorに束ねれば、一回のSaveで全候補を検証し、単一transactionとして保存する。
8
+
9
+ 追加経路は`prepareSave`で候補を一回だけ生成し、同一文字列をowner検証とcommitへ渡す。診断やcallback出力はgetter・iteratorを実行せずJSON snapshotし、不正値や非同期結果を拒否する。contextは保存試行ごとに一回取得してfreezeする。単一sessionとDescendantSessionの両方がこの経路を使う。旧`validate/createPatch`経路にprepared定義を渡すと安全に拒否する。prepared単一sessionの登録解除・再登録は保存を失効させる。既存legacy sessionの登録解除後の挙動は変更しない。
10
+
11
+ 追加UIにはSourceとForm、明示的な形式・固定variant選択による新規作成を用意する。Formは実在するJSON値を有限のReactツリーとして描画する。既存RJSFの描画・default初期化には変更を加えず、新経路ではroot scalar/array、任意キー、再帰、prefixItemsを扱うためRJSFのSchema変換制約を引き継がない。Schemaのkeywordを削除せず、正本の両方言・resource/ref/anchorを共通engineで検証する。表示用コピーだけを同じURI registryで解決する。閉じたenum/const unionは選択UI、互換なraw値を許すenum候補は`ui:enum`で提示する。外部候補一覧や新しいenum項目の登録は後続工程であり、この追加UIには含めない。
12
+
13
+ 無変更・編集後の差戻し・Cancelは原文とUndo履歴を保持する。JSON range/YAML ASTで未編集箇所を保持し、既定値、const、minItemsによるデータ補完を行わない。ownerが受理したJSONのBOMや前後のtrim whitespaceを保持し、厳密なJSON codec自体の文法は拡張しない。YAMLの空配列等をJSONと誤認するownerには単一document markerを付けてYAMLを維持する。Formからの暗黙variant変更は拒否する。
14
+
15
+ 安全に保持できないalias/anchor/tag自体の編集、コメントを消す部分置換などは保存を拒否し、`Discard form edits`で原文Sourceへ戻れる。非有限数に変換されるJSON数値は共通の有限JSON契約で扱えない。既存runtimeのparserは変更せず、旧GUIやflag OFFでは従来の実行を維持する。これらを無条件なForm対応済みとは数えない。
16
+
17
+ GUIの`blockEditorSourceForms`は起動時固定・既定OFFで、`blockEditorDialogs=1`も必要。OFFで新capabilityを公開せず、従来の登録APIを維持する。ロールバックはflag OFFで再読込し、必要ならconsumer→producer→共通の順で差分と依存を戻す。raw形式を自動移行しないため逆変換は不要。
18
+
19
+ 開発時のローカルtarballはnpm公開を行わず検証できる。公開可能な配布の受け入れ条件はmanifest・lock・実解決・build-info/capabilityの一致である。作業コピーのHEADだけを実装済みのGit artifactと呼ばない。build-infoの`sourceState: working-tree`と`sourceSha256`で未commit実装を区別し、公開Git pinへの置換は別の承認・検証条件とする。
@@ -0,0 +1,29 @@
1
+ # 段階2の公開Git配布
2
+
3
+ 管理: https://github.com/kubohiroya/turbowarp-extension-data-editor/issues/31
4
+
5
+ `feat/schema/stage2-source-forms` → `main`。Sourceを正本とする固定Schema編集とprepared-source-v1保存を追加する。GUIは起動時固定の`blockEditorSourceForms`既定OFFと`blockEditorDialogs`を必要とする。既存API、8公開入口、CSS、rawの無変更保存を維持する。
6
+
7
+ 先行ローカル検証は共通212ケース、全体の関連659ケースと実GUI5代表×8手順。再実行を加算していない。共通ローカルartifact SHA-256は`f3f66138902e4fb869540029460f800492ae0a23d29aacdd90eaf6d2b0766672`、sourceSha256は`aef366417f026ececbcb718f8001f3b5dddc5e34a2fdb3bc69d5390ce2e9118e`。このartifactは未commit基準d910ed0…であり公開Gitから再生成するartifactとは区別する。
8
+
9
+ 公開順序: 共通 → Scene Graph / Camera Source → consumerとGUI。公開Git SHAは各consumer manifest・lock・実解決・build-infoへ揃える。npm公開を必要としない。
10
+
11
+ 受け入れ基準: ./schemaのpure型、prepared公開型、旧型の互換、単一/子孫session、同じ候補の検査/commit、複数引数atomic、登録失効を維持する。GUIの数値入力・enum/ref/anchor表示とraw保持を確認する。無効なYAML alias/tagやコメントを消す置換はFormで拒否しSourceへ明示的に戻す。
12
+
13
+ ロールバック: sourceForms OFFで再読込。必要ならconsumer→producer→共通の逆依存順でrevertし、manifest・lock・実解決を一体で戻す。rawの自動移行は行わない。merge・npm公開・Pages手動再公開は本工程に含めない。
14
+
15
+ 公開Git artifactの検証結果とCI URLはPR本文および集約記録へ追記する。履歴のローカル検証は置換しない。
16
+
17
+ ## 0.2.0のリリース追補
18
+
19
+ 2026-10-18、日本時間。ユーザーは段階2全体のcommit・push・PR・merge・npm公開を承認した。新規API追加に合わせ共通を0.2.0へminor更新する。文書レビューのdecode説明訂正を含む。先行0.1.0 Git/file artifactと過去659件の記録は採取時点の履歴として保持する。
20
+
21
+ 安定版build段階ではfresh frozen install、全commonテスト、CI/site/infrastructure、typecheck、8公開入口・CSS・packを検証する。最終merge SHAからpackした同一tarballをnpmへ公開し、registry integrityとbuild-infoを照合する。producer/consumerは最終共通Git SHAへpin・lock・allowBuilds・実解決を揃える。GUIの起動時固定・既定OFFを維持する。
22
+
23
+ 公開後の問題には、フラグOFFと逆依存順のrevertで対応する。公開済み版を削除せず、修正は新しいversionで公開する。
24
+
25
+ ## 公開直前の依存audit追補
26
+
27
+ 共通0.2.0はまだnpm未公開の時点で、direct fast-uri3.1.0に8high/1moderateのadvisoryを確認した。対象packageはfast-uriだけである。間接AJVで既に使っている3.1.8へ直接依存も固定し、lockの全fast-uri edgeを3.1.8へ統一する。Schemaの正本・owner・既存API・保存形式は変更しない。
28
+
29
+ 0.2.0の公開前修正として別PRでmainへ統合し、後続pinには修正後の最終SHAを使う。旧4818a4dの検証は履歴として保持し、最終配布の証拠と区別する。fresh install後にaudit、Schema/ref/診断/Source/Form/8入口を含む全common検証、packを確認する。一次資料: https://github.com/advisories/GHSA-qw65-cvwx-89v3 および保存した9件のaudit JSON。
@@ -0,0 +1,43 @@
1
+ # Template用途依存からの試験分離
2
+
3
+ owner横断検証は14契約・8packageです。Templateの旧2サンプルは対象外にしました。JSON/YAML編集の任意サンプルはexamples/document-properties.mjs、対応する実serviceの試験はtest/generic-document.test.mjsで所有します。Templateやその公開APIをimportしません。
4
+
5
+ 例には任意のtext/enabledと追加キーを使用します。required/defaultや業務条件はありません。新たなpackage exportや標準ブロックは追加せず、examplesはnpm配布APIにしません。登録は呼出側が明示的に行います。
6
+
7
+ 旧16契約・9packageという過去結果は変更しません。旧2入力とprovenanceはtest/fixtures/schema-stage1/historyへ保持しました。共通src・8公開入口・依存pin/lock・CSS/buildは変更しません。
8
+
9
+ `docs/schema-stage1-contracts.json`は旧16契約の採取結果として保持します。現行の件数の正本は実行する`scripts/verify-schema-stage1.mjs`であり、Templateのない8packageのisolation indexを渡して検証します。今回の結果・依存照合はTemplate側のローカル集約記録に保存し、過去結果を上書きしません。
10
+
11
+ <a id="current-verification"></a>
12
+
13
+ ## 現行の再検証手順(14契約・8package)
14
+
15
+ 対象は共通エディタと7つの実拡張packageです。Templateの`./editor-schema`は撤去済みで、共通依存も持ちません。Templateをこの手順のownerやindexに含めないでください。Template自体のhello/build/manifestはTemplate側で別に検証します。
16
+
17
+ まず各ownerの採用commit・依存pin/lock・実解決を確認し、その版のbuild生成物を用意します。共通repoの`scripts/verify-schema-package.mjs`を各owner checkoutをcwdとして実行し、pure入口に必要なruntime依存だけを引数で指定します。共通自身の入口は`/schema`、7拡張の入口は`/editor-schema`です。新たな公開・install・依存更新を暗黙に行う手順ではありません。既存の検証済みartifactを使う場合も、その採取時のSHA・hash・実解決を確認します。
18
+
19
+ 検証成功ログの`isolated:`に出力されたディレクトリを、次の**8 keyだけ**へ対応付けて`isolation-index.json`を作成します。値は例示なので、実際のsource-free package検証先の絶対パスへ置き換えてください。
20
+
21
+ ```json
22
+ {
23
+ "editor": "/path/to/isolated-editor",
24
+ "aframe": "/path/to/isolated-aframe",
25
+ "scene-graph": "/path/to/isolated-scene-graph",
26
+ "3d-scene-runtime": "/path/to/isolated-3d-scene-runtime",
27
+ "camera-source": "/path/to/isolated-camera-source",
28
+ "camera-calibration": "/path/to/isolated-camera-calibration",
29
+ "realtime-motion-capture": "/path/to/isolated-realtime-motion-capture",
30
+ "time-space-sync": "/path/to/isolated-time-space-sync"
31
+ }
32
+ ```
33
+
34
+ 共通repoをcwdとして、同じindexで両方を実行します。
35
+
36
+ ```sh
37
+ node scripts/verify-schema-stage1.mjs /path/to/isolation-index.json
38
+ node scripts/verify-schema-dependencies.mjs /path/to/isolation-index.json
39
+ ```
40
+
41
+ 前者は`contracts: 14`・`packageCount: 8`と各契約の成功を確認します。後者はScene Graph→Runtime、Camera Source→Calibration/Motionの実bundle一致と、7consumerの共通pureファイル一致を確認します。失敗したownerをindexから落として成功扱いにせず、依存pin・lock・実解決・生成物を確認してください。
42
+
43
+ この14契約は現行の本番owner契約です。共通examplesのJSON/YAML試験やTemplateのhello試験を本番契約へ足しません。段階2で新設予定の9固定契約は未実装の別計画で、現行検証が成功しても追加9件の実装済みを意味しません。旧16契約・9packageの再現にはその時点の旧commit/artifactを使い、ここに新Templateを混ぜません。過去の採取結果・手順は履歴として保持します。
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kubohiroya/turbowarp-extension-data-editor",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Custom editor sessions and UI for structured data handled by TurboWarp extensions",
5
5
  "type": "module",
6
6
  "sideEffects": [
@@ -37,7 +37,11 @@
37
37
  "./webpack4": {
38
38
  "require": "./webpack4.cjs"
39
39
  },
40
- "./build-info": "./dist/build-info.json"
40
+ "./build-info": "./dist/build-info.json",
41
+ "./schema": {
42
+ "types": "./dist/schema.d.ts",
43
+ "import": "./dist/schema.js"
44
+ }
41
45
  },
42
46
  "files": [
43
47
  "dist",
@@ -56,7 +60,8 @@
56
60
  "test:e2e:block-editor": "playwright test --config test/e2e/turbowarp/playwright.config.cjs",
57
61
  "test:e2e:infrastructure": "node --test test/e2e/turbowarp/infrastructure.test.cjs",
58
62
  "test:e2e:native": "E2E_NATIVE=1 pnpm test:e2e:block-editor",
59
- "prepack": "npm run build"
63
+ "prepack": "npm run build",
64
+ "prepare": "npm run build"
60
65
  },
61
66
  "devDependencies": {
62
67
  "@playwright/test": "1.64.1",
@@ -73,6 +78,9 @@
73
78
  "@rjsf/core": "5.24.13",
74
79
  "@rjsf/utils": "5.24.13",
75
80
  "@rjsf/validator-ajv8": "5.24.13",
81
+ "ajv": "8.20.0",
82
+ "ajv-formats": "2.1.1",
83
+ "fast-uri": "3.1.8",
76
84
  "yaml": "^2.9.1"
77
85
  },
78
86
  "peerDependencies": {
package/webpack4.cjs CHANGED
@@ -6,7 +6,7 @@ const withBlockEditorWebpack4 = (config, {hostRoot}) => {
6
6
  if (Array.isArray(config)) return config.map(item => withBlockEditorWebpack4(item, {hostRoot}));
7
7
  const prefix = '@kubohiroya/turbowarp-extension-data-editor';
8
8
  const alias = {...config.resolve?.alias};
9
- for (const entry of ['index', 'rjsf', 'react', 'turbowarp']) {
9
+ for (const entry of ['index', 'rjsf', 'react', 'turbowarp', 'schema']) {
10
10
  alias[`${prefix}${entry === 'index' ? '' : `/${entry}`}$`] = path.join(__dirname, 'dist/webpack4', `${entry}.js`);
11
11
  }
12
12
  alias[`${prefix}/react/styles.css$`] = path.join(__dirname, 'dist/react.css');
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../data.js", "../view.js", "../session.js", "../subtree.js", "../descendants.js", "../registry.js"],
4
- "sourcesContent": ["export function isLiteral(value) {\n return typeof value === 'string' || typeof value === 'boolean' ||\n (typeof value === 'number' && Number.isFinite(value));\n}\n/** Reject values whose meaning would change during JSON persistence. */\nexport function cloneJson(value) {\n const ancestors = new Set();\n const visit = (item, depth) => {\n if (depth > 100)\n throw new TypeError('JSON data exceeds the maximum depth.');\n if (item === null || isLiteral(item))\n return item;\n if (typeof item !== 'object')\n throw new TypeError('Expected JSON-compatible data.');\n if (ancestors.has(item))\n throw new TypeError('JSON data must not contain cycles.');\n ancestors.add(item);\n try {\n if (Array.isArray(item))\n return Array.from(item, child => visit(child, depth + 1));\n const prototype = Object.getPrototypeOf(item);\n if (prototype !== Object.prototype && prototype !== null) {\n throw new TypeError('JSON objects must be plain objects.');\n }\n if (Object.getOwnPropertySymbols(item).length > 0) {\n throw new TypeError('JSON objects must not have symbol properties.');\n }\n return Object.fromEntries(Object.entries(item).map(([key, child]) => [key, visit(child, depth + 1)]));\n }\n finally {\n ancestors.delete(item);\n }\n };\n return visit(value, 0);\n}\nexport function captureReference(reference) {\n if (!reference || typeof reference.targetId !== 'string' || !reference.targetId ||\n typeof reference.blockId !== 'string' || !reference.blockId) {\n throw new TypeError('A target ID and block ID are required.');\n }\n return Object.freeze({ targetId: reference.targetId, blockId: reference.blockId });\n}\nexport function captureSnapshot(snapshot, reference) {\n if (snapshot.targetId !== reference.targetId || snapshot.blockId !== reference.blockId ||\n typeof snapshot.opcode !== 'string' || !snapshot.opcode ||\n typeof snapshot.revision !== 'string' || !snapshot.revision ||\n !snapshot.arguments || typeof snapshot.arguments !== 'object' ||\n Array.isArray(snapshot.arguments)) {\n throw new TypeError('The host returned an invalid block snapshot.');\n }\n const entries = Object.entries(snapshot.arguments).map(([name, slot]) => {\n if (!slot || (slot.kind !== 'reporter' && slot.kind !== 'literal') ||\n (slot.kind === 'literal' && !isLiteral(slot.value))) {\n throw new TypeError(`Invalid argument slot: ${name}`);\n }\n const copy = slot.kind === 'reporter'\n ? Object.freeze({ kind: 'reporter' })\n : Object.freeze({ kind: 'literal', value: slot.value });\n return [name, copy];\n });\n return Object.freeze({\n ...captureReference(reference), opcode: snapshot.opcode, revision: snapshot.revision,\n arguments: Object.freeze(Object.fromEntries(entries))\n });\n}\nexport function sameSnapshot(left, right) {\n const names = Object.keys(left.arguments);\n return left.targetId === right.targetId && left.blockId === right.blockId &&\n left.opcode === right.opcode && left.revision === right.revision &&\n names.length === Object.keys(right.arguments).length && names.every(name => {\n const a = left.arguments[name];\n const b = Object.hasOwn(right.arguments, name) ? right.arguments[name] : undefined;\n return b !== undefined && a.kind === b.kind &&\n (a.kind === 'reporter' || (b.kind === 'literal' && a.value === b.value));\n });\n}\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar _EditorView_unmount, _EditorView_mounting;\n/** Shared body lifetime for single-block and aggregate sessions. */\nexport class EditorView {\n constructor() {\n _EditorView_unmount.set(this, void 0);\n _EditorView_mounting.set(this, false);\n }\n mount(container, mount, owner) {\n if (owner.getState().status !== 'editing' || __classPrivateFieldGet(this, _EditorView_unmount, \"f\") || __classPrivateFieldGet(this, _EditorView_mounting, \"f\")) {\n throw new Error('The session cannot mount another view.');\n }\n if (!mount)\n throw new Error('No editor view is registered.');\n let active = true;\n const subscriptions = new Set();\n const assertMounted = () => {\n if (!active)\n throw new Error('The editor view is unmounted.');\n };\n const release = () => {\n active = false;\n for (const unsubscribe of subscriptions)\n unsubscribe();\n subscriptions.clear();\n };\n const context = Object.freeze({\n getDraft: () => owner.getDraft(),\n setDraft: (draft) => { assertMounted(); owner.setDraft(draft); },\n setValidationIssues: (issues) => {\n assertMounted();\n owner.setValidationIssues(issues);\n },\n getState: () => owner.getState(),\n subscribe: (listener) => {\n assertMounted();\n const unsubscribe = owner.subscribe(() => { if (active)\n listener(); });\n const remove = () => { subscriptions.delete(remove); unsubscribe(); };\n subscriptions.add(remove);\n return remove;\n }\n });\n __classPrivateFieldSet(this, _EditorView_mounting, true, \"f\");\n let cleanup;\n try {\n cleanup = mount(container, context);\n if (typeof cleanup !== 'function')\n throw new TypeError('mount() must return a cleanup function.');\n }\n catch (error) {\n release();\n throw error;\n }\n finally {\n __classPrivateFieldSet(this, _EditorView_mounting, false, \"f\");\n }\n if (owner.getState().status !== 'editing' && owner.getState().status !== 'saving') {\n release();\n cleanup();\n return () => { };\n }\n const unmount = () => {\n if (!active)\n return;\n release();\n __classPrivateFieldSet(this, _EditorView_unmount, undefined, \"f\");\n cleanup();\n };\n __classPrivateFieldSet(this, _EditorView_unmount, unmount, \"f\");\n return unmount;\n }\n unmount() { var _a; (_a = __classPrivateFieldGet(this, _EditorView_unmount, \"f\")) === null || _a === void 0 ? void 0 : _a.call(this); }\n}\n_EditorView_unmount = new WeakMap(), _EditorView_mounting = new WeakMap();\n", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _EditorSession_instances, _EditorSession_draft, _EditorSession_status, _EditorSession_issues, _EditorSession_error, _EditorSession_listeners, _EditorSession_view, _EditorSession_definition, _EditorSession_snapshot, _EditorSession_host, _EditorSession_prepareChanges, _EditorSession_copyIssues, _EditorSession_copyDraft, _EditorSession_assertOpen, _EditorSession_finish, _EditorSession_notify, _EditorSession_reportObserverError;\nimport { captureReference, captureSnapshot, cloneJson, isLiteral, sameSnapshot } from './data.js';\nimport { BlockEditorConflictError } from './types.js';\nimport { EditorView } from './view.js';\nexport class EditorSession {\n /** Use EditorRegistry.open() to construct sessions from a captured host snapshot. */\n constructor(definition, snapshot, host) {\n _EditorSession_instances.add(this);\n _EditorSession_draft.set(this, void 0);\n _EditorSession_status.set(this, 'editing');\n _EditorSession_issues.set(this, []);\n _EditorSession_error.set(this, void 0);\n _EditorSession_listeners.set(this, new Set());\n _EditorSession_view.set(this, new EditorView());\n _EditorSession_definition.set(this, void 0);\n _EditorSession_snapshot.set(this, void 0);\n _EditorSession_host.set(this, void 0);\n __classPrivateFieldSet(this, _EditorSession_definition, definition, \"f\");\n __classPrivateFieldSet(this, _EditorSession_snapshot, captureSnapshot(snapshot, captureReference(snapshot)), \"f\");\n __classPrivateFieldSet(this, _EditorSession_host, host, \"f\");\n __classPrivateFieldSet(this, _EditorSession_draft, __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_copyDraft).call(this, definition.read(__classPrivateFieldGet(this, _EditorSession_snapshot, \"f\"))), \"f\");\n }\n /** Stable instance identity remains available after the session closes. */\n get reference() {\n return captureReference(__classPrivateFieldGet(this, _EditorSession_snapshot, \"f\"));\n }\n getDraft() {\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_assertOpen).call(this);\n return cloneJson(__classPrivateFieldGet(this, _EditorSession_draft, \"f\"));\n }\n setDraft(draft) {\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") !== 'editing')\n throw new Error('The session is not editable.');\n __classPrivateFieldSet(this, _EditorSession_draft, __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_copyDraft).call(this, draft), \"f\");\n __classPrivateFieldSet(this, _EditorSession_issues, [], \"f\");\n __classPrivateFieldSet(this, _EditorSession_error, undefined, \"f\");\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_notify).call(this);\n }\n setValidationIssues(issues) {\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") !== 'editing')\n throw new Error('The session is not editable.');\n __classPrivateFieldSet(this, _EditorSession_issues, __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_copyIssues).call(this, issues), \"f\");\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_notify).call(this);\n }\n getState() {\n return Object.freeze({\n status: __classPrivateFieldGet(this, _EditorSession_status, \"f\"), canSave: __classPrivateFieldGet(this, _EditorSession_status, \"f\") === 'editing' && __classPrivateFieldGet(this, _EditorSession_issues, \"f\").length === 0,\n issues: __classPrivateFieldGet(this, _EditorSession_issues, \"f\"), error: __classPrivateFieldGet(this, _EditorSession_error, \"f\")\n });\n }\n subscribe(listener) {\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_assertOpen).call(this);\n __classPrivateFieldGet(this, _EditorSession_listeners, \"f\").add(listener);\n return () => { __classPrivateFieldGet(this, _EditorSession_listeners, \"f\").delete(listener); };\n }\n mount(container) {\n return __classPrivateFieldGet(this, _EditorSession_view, \"f\").mount(container, __classPrivateFieldGet(this, _EditorSession_definition, \"f\").mount, this);\n }\n async save() {\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") === 'saving')\n return { status: 'busy' };\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") !== 'editing')\n return { status: 'closed' };\n __classPrivateFieldSet(this, _EditorSession_status, 'saving', \"f\");\n __classPrivateFieldSet(this, _EditorSession_issues, [], \"f\");\n __classPrivateFieldSet(this, _EditorSession_error, undefined, \"f\");\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_notify).call(this);\n try {\n const issues = await __classPrivateFieldGet(this, _EditorSession_definition, \"f\").validate(cloneJson(__classPrivateFieldGet(this, _EditorSession_draft, \"f\")), __classPrivateFieldGet(this, _EditorSession_snapshot, \"f\"));\n if (!Array.isArray(issues))\n throw new TypeError('validate() must return an issue array.');\n if (issues.length > 0) {\n __classPrivateFieldSet(this, _EditorSession_issues, __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_copyIssues).call(this, issues), \"f\");\n return { status: 'invalid', issues: __classPrivateFieldGet(this, _EditorSession_issues, \"f\") };\n }\n const changes = __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_prepareChanges).call(this, __classPrivateFieldGet(this, _EditorSession_definition, \"f\").createPatch(cloneJson(__classPrivateFieldGet(this, _EditorSession_draft, \"f\")), __classPrivateFieldGet(this, _EditorSession_snapshot, \"f\")));\n const current = __classPrivateFieldGet(this, _EditorSession_host, \"f\").readBlock(__classPrivateFieldGet(this, _EditorSession_snapshot, \"f\"));\n if (!current || !sameSnapshot(__classPrivateFieldGet(this, _EditorSession_snapshot, \"f\"), captureSnapshot(current, __classPrivateFieldGet(this, _EditorSession_snapshot, \"f\")))) {\n throw new BlockEditorConflictError();\n }\n if (changes.length > 0) {\n await __classPrivateFieldGet(this, _EditorSession_host, \"f\").commit(Object.freeze({ expected: __classPrivateFieldGet(this, _EditorSession_snapshot, \"f\"), changes }));\n }\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_finish).call(this, 'saved');\n return { status: 'saved', changed: changes.length > 0 };\n }\n catch (error) {\n __classPrivateFieldSet(this, _EditorSession_error, error, \"f\");\n return error instanceof BlockEditorConflictError\n ? { status: 'conflict', error } : { status: 'failed', error };\n }\n finally {\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") === 'saving') {\n __classPrivateFieldSet(this, _EditorSession_status, 'editing', \"f\");\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_notify).call(this);\n }\n }\n }\n /** Closing is refused while saving; the host must keep the modal open. */\n cancel() {\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") !== 'editing')\n return false;\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_finish).call(this, 'cancelled');\n return true;\n }\n dispose() {\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") === 'saving')\n return false;\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") === 'editing')\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_finish).call(this, 'disposed');\n return true;\n }\n}\n_EditorSession_draft = new WeakMap(), _EditorSession_status = new WeakMap(), _EditorSession_issues = new WeakMap(), _EditorSession_error = new WeakMap(), _EditorSession_listeners = new WeakMap(), _EditorSession_view = new WeakMap(), _EditorSession_definition = new WeakMap(), _EditorSession_snapshot = new WeakMap(), _EditorSession_host = new WeakMap(), _EditorSession_instances = new WeakSet(), _EditorSession_prepareChanges = function _EditorSession_prepareChanges(patch) {\n if (!Array.isArray(patch))\n throw new TypeError('createPatch() must return an array.');\n const seen = new Set();\n const changes = [];\n for (const change of patch) {\n if (!change || !__classPrivateFieldGet(this, _EditorSession_definition, \"f\").editableArguments.includes(change.argument) ||\n seen.has(change.argument) || !isLiteral(change.value)) {\n throw new TypeError('Patch contains an invalid, duplicate or disallowed argument.');\n }\n seen.add(change.argument);\n const slot = Object.hasOwn(__classPrivateFieldGet(this, _EditorSession_snapshot, \"f\").arguments, change.argument)\n ? __classPrivateFieldGet(this, _EditorSession_snapshot, \"f\").arguments[change.argument] : undefined;\n if (!slot || slot.kind !== 'literal') {\n throw new TypeError('Only existing literal arguments can be changed.');\n }\n if (slot.value !== change.value)\n changes.push(Object.freeze({ ...change }));\n }\n return Object.freeze(changes);\n}, _EditorSession_copyIssues = function _EditorSession_copyIssues(issues) {\n if (!Array.isArray(issues))\n throw new TypeError('Expected a validation issue array.');\n return Object.freeze(issues.map(issue => {\n if (!issue || typeof issue.message !== 'string' ||\n (issue.path !== undefined && typeof issue.path !== 'string')) {\n throw new TypeError('Invalid validation issue.');\n }\n return Object.freeze({ ...issue });\n }));\n}, _EditorSession_copyDraft = function _EditorSession_copyDraft(draft) {\n if (!draft || typeof draft !== 'object' || Array.isArray(draft)) {\n throw new TypeError('The editor draft must be a JSON object.');\n }\n return cloneJson(draft);\n}, _EditorSession_assertOpen = function _EditorSession_assertOpen() {\n if (__classPrivateFieldGet(this, _EditorSession_status, \"f\") !== 'editing' && __classPrivateFieldGet(this, _EditorSession_status, \"f\") !== 'saving') {\n throw new Error('The session is closed.');\n }\n}, _EditorSession_finish = function _EditorSession_finish(status) {\n __classPrivateFieldSet(this, _EditorSession_status, status, \"f\");\n __classPrivateFieldSet(this, _EditorSession_draft, {}, \"f\");\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_notify).call(this);\n try {\n __classPrivateFieldGet(this, _EditorSession_view, \"f\").unmount();\n }\n catch (error) {\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_reportObserverError).call(this, error);\n }\n __classPrivateFieldGet(this, _EditorSession_listeners, \"f\").clear();\n}, _EditorSession_notify = function _EditorSession_notify() {\n for (const listener of [...__classPrivateFieldGet(this, _EditorSession_listeners, \"f\")]) {\n try {\n listener();\n }\n catch (error) {\n __classPrivateFieldGet(this, _EditorSession_instances, \"m\", _EditorSession_reportObserverError).call(this, error);\n }\n }\n}, _EditorSession_reportObserverError = function _EditorSession_reportObserverError(error) {\n // A view failure must not turn a completed host commit into a failed save.\n console.error('Block editor view callback failed:', error);\n};\n", "import { captureReference, captureSnapshot, sameSnapshot } from './data.js';\nimport { BlockEditorStructureError, DEFAULT_DESCENDANT_LIMITS } from './descendant-types.js';\nexport function descendantLimits(limits = {}) {\n const result = { ...DEFAULT_DESCENDANT_LIMITS, ...limits };\n if (!Number.isSafeInteger(result.maxDepth) || result.maxDepth < 0 || result.maxDepth > DEFAULT_DESCENDANT_LIMITS.maxDepth ||\n !Number.isSafeInteger(result.maxNodes) || result.maxNodes < 1 || result.maxNodes > DEFAULT_DESCENDANT_LIMITS.maxNodes) {\n throw new BlockEditorStructureError('Limits must be integers: depth 0\u201332, nodes 1\u2013500.', 'limit');\n }\n return Object.freeze(result);\n}\n/** Validate the host's complete graph before any editor callback sees it. */\nexport function captureSubtree(source, reference, limits) {\n const invalid = (message) => {\n throw new BlockEditorStructureError(message, 'invalid-structure');\n };\n if (!source || source.targetId !== reference.targetId || source.blockId !== reference.blockId ||\n typeof source.generation !== 'string' || !source.generation || !Array.isArray(source.nodes) ||\n source.nodes.length === 0)\n invalid('The host returned an invalid subtree snapshot.');\n if (source.nodes.length > limits.maxNodes) {\n throw new BlockEditorStructureError('The subtree exceeds the node limit.', 'limit');\n }\n const entries = new Map();\n let edges = 0;\n for (const node of source.nodes) {\n if (!(node === null || node === void 0 ? void 0 : node.block) || !Array.isArray(node.branches))\n invalid('Invalid subtree node.');\n const block = (() => {\n try {\n return captureSnapshot(node.block, { targetId: reference.targetId, blockId: node.block.blockId });\n }\n catch (_a) {\n return invalid('Invalid subtree block snapshot or target identity.');\n }\n })();\n if (entries.has(block.blockId))\n invalid('Duplicate block ID in subtree.');\n const inputs = new Set();\n const branches = node.branches.map(branch => {\n if (!branch || typeof branch.input !== 'string' || !branch.input || inputs.has(branch.input) ||\n !Array.isArray(branch.blockIds))\n invalid('Invalid or duplicate statement input.');\n inputs.add(branch.input);\n edges += branch.blockIds.length;\n if (edges >= source.nodes.length)\n invalid('Subtree connections contain a cycle or duplicate parent.');\n const blockIds = branch.blockIds.map(id => {\n if (typeof id !== 'string' || !id)\n invalid('Invalid statement block ID.');\n return id;\n });\n return Object.freeze({ input: branch.input, blockIds: Object.freeze(blockIds) });\n });\n entries.set(block.blockId, Object.freeze({ block, branches: Object.freeze(branches) }));\n }\n const paths = new Map();\n const ordered = [];\n const stack = [{ id: reference.blockId, path: Object.freeze([]) }];\n while (stack.length) {\n const { id, path } = stack.pop();\n if (paths.has(id))\n throw new BlockEditorStructureError('Cycle or repeated subtree node.', 'cycle');\n if (path.length > limits.maxDepth) {\n throw new BlockEditorStructureError('The subtree exceeds the depth limit.', 'limit');\n }\n const node = entries.get(id);\n if (!node)\n invalid(`Missing subtree node: ${id}`);\n paths.set(id, path);\n ordered.push(node);\n for (let branchIndex = node.branches.length - 1; branchIndex >= 0; branchIndex--) {\n const branch = node.branches[branchIndex];\n for (let index = branch.blockIds.length - 1; index >= 0; index--) {\n stack.push({ id: branch.blockIds[index], path: Object.freeze([\n ...path, Object.freeze({ blockId: id, input: branch.input, index })\n ]) });\n }\n }\n }\n if (paths.size !== entries.size)\n invalid('Subtree includes disconnected or out-of-scope nodes.');\n return {\n snapshot: Object.freeze({\n ...captureReference(reference), generation: source.generation, nodes: Object.freeze(ordered)\n }), paths\n };\n}\nexport function sameSubtree(left, right) {\n return left.targetId === right.targetId && left.blockId === right.blockId &&\n left.generation === right.generation && left.nodes.length === right.nodes.length &&\n left.nodes.every((node, index) => {\n const other = right.nodes[index];\n return sameSnapshot(node.block, other.block) && node.branches.length === other.branches.length &&\n node.branches.every((branch, branchIndex) => {\n const b = other.branches[branchIndex];\n return branch.input === b.input && branch.blockIds.length === b.blockIds.length &&\n branch.blockIds.every((id, i) => id === b.blockIds[i]);\n });\n });\n}\n", "var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n};\nvar __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _DescendantSession_instances, _DescendantSession_snapshot, _DescendantSession_host, _DescendantSession_limits, _DescendantSession_lookup, _DescendantSession_bindings, _DescendantSession_records, _DescendantSession_nodes, _DescendantSession_listeners, _DescendantSession_detach, _DescendantSession_abort, _DescendantSession_status, _DescendantSession_committing, _DescendantSession_error, _DescendantSession_createRecord, _DescendantSession_isOpen, _DescendantSession_closedSaveResult, _DescendantSession_assertOpen, _DescendantSession_assertEditable, _DescendantSession_bindingsCurrent, _DescendantSession_checkBindings, _DescendantSession_assertSaving, _DescendantSession_notify, _DescendantSession_watch, _DescendantSession_finish;\nimport { captureReference, cloneJson, isLiteral } from './data.js';\nimport { BlockEditorConflictError } from './types.js';\nimport { DescendantNodeError } from './descendant-types.js';\nimport { captureSubtree, sameSubtree } from './subtree.js';\nimport { EditorView } from './view.js';\nfunction copyDraft(draft) {\n if (!draft || typeof draft !== 'object' || Array.isArray(draft)) {\n throw new TypeError('The editor draft must be a JSON object.');\n }\n return cloneJson(draft);\n}\nfunction copyIssues(issues) {\n if (!Array.isArray(issues))\n throw new TypeError('Expected a validation issue array.');\n return Object.freeze(issues.map(issue => {\n if (!issue || typeof issue.message !== 'string' ||\n (issue.path !== undefined && typeof issue.path !== 'string')) {\n throw new TypeError('Invalid validation issue.');\n }\n return Object.freeze({ message: issue.message, ...(issue.path === undefined ? {} : { path: issue.path }) });\n }));\n}\nfunction observe(listeners) {\n for (const listener of [...listeners]) {\n try {\n listener();\n }\n catch (error) {\n report(error);\n }\n }\n}\nfunction report(error) {\n console.error('Block editor view callback failed:', error);\n}\n/** Stop waiting immediately on invalidation; late resolutions/rejections stay handled. */\nfunction abortable(value, signal) {\n return new Promise((resolve, reject) => {\n const abort = () => reject(signal.reason);\n signal.addEventListener('abort', abort, { once: true });\n Promise.resolve(value).then(resolve, reject).finally(() => signal.removeEventListener('abort', abort));\n if (signal.aborted) {\n signal.removeEventListener('abort', abort);\n abort();\n }\n });\n}\n/** Aggregate draft/validation only. The negotiated host owns the atomic write. */\nexport class DescendantSession {\n /** Use EditorRegistry.openDescendants() to negotiate and capture the scope. */\n constructor(captured, host, lookup, subscribeRegistry, limits) {\n _DescendantSession_instances.add(this);\n _DescendantSession_snapshot.set(this, void 0);\n _DescendantSession_host.set(this, void 0);\n _DescendantSession_limits.set(this, void 0);\n _DescendantSession_lookup.set(this, void 0);\n _DescendantSession_bindings.set(this, new Map());\n _DescendantSession_records.set(this, new Map());\n _DescendantSession_nodes.set(this, void 0);\n _DescendantSession_listeners.set(this, new Set());\n _DescendantSession_detach.set(this, new Set());\n _DescendantSession_abort.set(this, new AbortController());\n _DescendantSession_status.set(this, 'editing');\n _DescendantSession_committing.set(this, false);\n _DescendantSession_error.set(this, void 0);\n __classPrivateFieldSet(this, _DescendantSession_snapshot, captured.snapshot, \"f\");\n __classPrivateFieldSet(this, _DescendantSession_host, host, \"f\");\n __classPrivateFieldSet(this, _DescendantSession_lookup, lookup, \"f\");\n __classPrivateFieldSet(this, _DescendantSession_limits, limits, \"f\");\n for (const node of captured.snapshot.nodes)\n __classPrivateFieldGet(this, _DescendantSession_bindings, \"f\").set(node.block.opcode, lookup(node.block.opcode));\n __classPrivateFieldSet(this, _DescendantSession_nodes, Object.freeze(captured.snapshot.nodes.map(node => {\n const definition = __classPrivateFieldGet(this, _DescendantSession_bindings, \"f\").get(node.block.opcode);\n const descriptor = Object.freeze({\n reference: captureReference(node.block), opcode: node.block.opcode,\n inputPath: captured.paths.get(node.block.blockId),\n ...(definition ? { editor: Object.freeze({\n apiVersion: definition.apiVersion, extensionId: definition.extensionId,\n editorId: definition.editorId, opcodes: definition.opcodes,\n editableArguments: definition.editableArguments\n }) } : {})\n });\n if (definition) {\n try {\n __classPrivateFieldGet(this, _DescendantSession_records, \"f\").set(node.block.blockId, __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_createRecord).call(this, descriptor, definition, node.block));\n }\n catch (cause) {\n throw new DescendantNodeError(descriptor.reference, descriptor.inputPath, cause);\n }\n }\n return descriptor;\n })), \"f\");\n try {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_watch).call(this, () => subscribeRegistry(() => {\n if (!__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_bindingsCurrent).call(this))\n this.invalidate(new BlockEditorConflictError('An editor registration changed.'));\n }));\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_checkBindings).call(this);\n if (host.subscribeInvalidation) {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_watch).call(this, () => host.subscribeInvalidation(this.reference, reason => this.invalidate(reason)));\n }\n }\n catch (error) {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_finish).call(this, 'disposed');\n throw error;\n }\n }\n get reference() { return captureReference(__classPrivateFieldGet(this, _DescendantSession_snapshot, \"f\")); }\n get generation() { return __classPrivateFieldGet(this, _DescendantSession_snapshot, \"f\").generation; }\n getNodes() { return __classPrivateFieldGet(this, _DescendantSession_nodes, \"f\"); }\n getEditor(blockId) { var _a; return (_a = __classPrivateFieldGet(this, _DescendantSession_records, \"f\").get(blockId)) === null || _a === void 0 ? void 0 : _a.editor; }\n getState() {\n const issues = Object.freeze([...__classPrivateFieldGet(this, _DescendantSession_records, \"f\").values()].flatMap(record => record.issues.map(issue => Object.freeze({ ...issue, reference: record.descriptor.reference, inputPath: record.descriptor.inputPath }))));\n return Object.freeze({ status: __classPrivateFieldGet(this, _DescendantSession_status, \"f\"),\n canSave: __classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'editing' && issues.length === 0, issues, error: __classPrivateFieldGet(this, _DescendantSession_error, \"f\") });\n }\n subscribe(listener) {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertOpen).call(this);\n __classPrivateFieldGet(this, _DescendantSession_listeners, \"f\").add(listener);\n return () => { __classPrivateFieldGet(this, _DescendantSession_listeners, \"f\").delete(listener); };\n }\n async save() {\n if (__classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'saving')\n return { status: 'busy' };\n if (__classPrivateFieldGet(this, _DescendantSession_status, \"f\") !== 'editing')\n return { status: 'closed' };\n __classPrivateFieldSet(this, _DescendantSession_status, 'saving', \"f\");\n __classPrivateFieldSet(this, _DescendantSession_error, undefined, \"f\");\n for (const record of __classPrivateFieldGet(this, _DescendantSession_records, \"f\").values())\n record.issues = [];\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_notify).call(this);\n try {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n for (const record of __classPrivateFieldGet(this, _DescendantSession_records, \"f\").values()) {\n try {\n const issues = await abortable(record.definition.validate(cloneJson(record.draft), record.snapshot), __classPrivateFieldGet(this, _DescendantSession_abort, \"f\").signal);\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n record.issues = copyIssues(issues);\n }\n catch (cause) {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n throw new DescendantNodeError(record.descriptor.reference, record.descriptor.inputPath, cause);\n }\n }\n const issues = this.getState().issues;\n if (issues.length)\n return { status: 'invalid', issues };\n const changes = [];\n const destinations = new Set();\n for (const record of __classPrivateFieldGet(this, _DescendantSession_records, \"f\").values()) {\n try {\n const patch = record.definition.createPatch(cloneJson(record.draft), record.snapshot);\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n if (!Array.isArray(patch))\n throw new TypeError('createPatch() must return an array.');\n for (const change of patch) {\n if (!change || !record.definition.editableArguments.includes(change.argument) || !isLiteral(change.value)) {\n throw new TypeError('Patch contains an invalid or disallowed argument.');\n }\n const destination = JSON.stringify([record.snapshot.blockId, change.argument]);\n if (destinations.has(destination))\n throw new TypeError('Duplicate subtree write destination.');\n destinations.add(destination);\n const slot = Object.hasOwn(record.snapshot.arguments, change.argument)\n ? record.snapshot.arguments[change.argument] : undefined;\n if ((slot === null || slot === void 0 ? void 0 : slot.kind) !== 'literal')\n throw new TypeError('Only existing literal arguments can be changed.');\n if (slot.value !== change.value)\n changes.push(Object.freeze({\n blockId: record.snapshot.blockId, argument: change.argument, value: change.value\n }));\n }\n }\n catch (cause) {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n throw new DescendantNodeError(record.descriptor.reference, record.descriptor.inputPath, cause);\n }\n }\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n const live = __classPrivateFieldGet(this, _DescendantSession_host, \"f\").readSubtree(this.reference);\n let matches = false;\n if (live) {\n try {\n matches = sameSubtree(__classPrivateFieldGet(this, _DescendantSession_snapshot, \"f\"), captureSubtree(live, this.reference, __classPrivateFieldGet(this, _DescendantSession_limits, \"f\")).snapshot);\n }\n catch ( /* A malformed current graph is also a conflict with the captured scope. */_a) { /* A malformed current graph is also a conflict with the captured scope. */ }\n }\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n if (!matches)\n throw new BlockEditorConflictError('The subtree changed or is no longer editable.');\n if (changes.length) {\n __classPrivateFieldSet(this, _DescendantSession_committing, true, \"f\");\n await abortable(__classPrivateFieldGet(this, _DescendantSession_host, \"f\").commitSubtree(Object.freeze({\n expected: __classPrivateFieldGet(this, _DescendantSession_snapshot, \"f\"), changes: Object.freeze(changes), signal: __classPrivateFieldGet(this, _DescendantSession_abort, \"f\").signal\n })), __classPrivateFieldGet(this, _DescendantSession_abort, \"f\").signal);\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertSaving).call(this);\n }\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_finish).call(this, 'saved');\n return { status: 'saved', changed: changes.length > 0 };\n }\n catch (error) {\n if (!__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_isOpen).call(this))\n return __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_closedSaveResult).call(this);\n __classPrivateFieldSet(this, _DescendantSession_error, error, \"f\");\n return error instanceof BlockEditorConflictError ? { status: 'conflict', error } : { status: 'failed', error };\n }\n finally {\n __classPrivateFieldSet(this, _DescendantSession_committing, false, \"f\");\n if (__classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'saving') {\n __classPrivateFieldSet(this, _DescendantSession_status, 'editing', \"f\");\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_notify).call(this);\n }\n }\n }\n /** Validation may be cancelled; an already dispatched commit must finish atomically. */\n cancel() {\n if (!__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_isOpen).call(this) || __classPrivateFieldGet(this, _DescendantSession_committing, \"f\"))\n return false;\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_finish).call(this, 'cancelled');\n return true;\n }\n dispose() {\n if (__classPrivateFieldGet(this, _DescendantSession_committing, \"f\") && __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_isOpen).call(this))\n return false;\n if (__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_isOpen).call(this))\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_finish).call(this, 'disposed');\n return true;\n }\n /** The host must observe the abort signal before any deferred write. */\n invalidate(reason = new BlockEditorConflictError('The subtree session was invalidated.')) {\n if (!__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_isOpen).call(this))\n return false;\n __classPrivateFieldSet(this, _DescendantSession_error, reason, \"f\");\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_finish).call(this, 'invalidated');\n return true;\n }\n}\n_DescendantSession_snapshot = new WeakMap(), _DescendantSession_host = new WeakMap(), _DescendantSession_limits = new WeakMap(), _DescendantSession_lookup = new WeakMap(), _DescendantSession_bindings = new WeakMap(), _DescendantSession_records = new WeakMap(), _DescendantSession_nodes = new WeakMap(), _DescendantSession_listeners = new WeakMap(), _DescendantSession_detach = new WeakMap(), _DescendantSession_abort = new WeakMap(), _DescendantSession_status = new WeakMap(), _DescendantSession_committing = new WeakMap(), _DescendantSession_error = new WeakMap(), _DescendantSession_instances = new WeakSet(), _DescendantSession_createRecord = function _DescendantSession_createRecord(descriptor, definition, snapshot) {\n const view = new EditorView();\n const listeners = new Set();\n const editor = Object.freeze({\n reference: descriptor.reference,\n getDraft: () => { __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertOpen).call(this); return cloneJson(record.draft); },\n setDraft: (draft) => {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertEditable).call(this);\n record.draft = copyDraft(draft);\n record.issues = [];\n __classPrivateFieldSet(this, _DescendantSession_error, undefined, \"f\");\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_notify).call(this, record);\n },\n setValidationIssues: (issues) => {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertEditable).call(this);\n record.issues = copyIssues(issues);\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_notify).call(this, record);\n },\n getState: () => Object.freeze({\n status: __classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'invalidated' ? 'disposed' : __classPrivateFieldGet(this, _DescendantSession_status, \"f\"),\n canSave: __classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'editing' && record.issues.length === 0,\n issues: record.issues, error: __classPrivateFieldGet(this, _DescendantSession_error, \"f\")\n }),\n subscribe: (listener) => {\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_assertOpen).call(this);\n listeners.add(listener);\n return () => { listeners.delete(listener); };\n },\n mount: (container) => view.mount(container, definition.mount, editor)\n });\n const record = { descriptor, definition, snapshot, view, listeners, editor,\n draft: copyDraft(definition.read(snapshot)), issues: [] };\n return record;\n}, _DescendantSession_isOpen = function _DescendantSession_isOpen() { return __classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'editing' || __classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'saving'; }, _DescendantSession_closedSaveResult = function _DescendantSession_closedSaveResult() {\n return __classPrivateFieldGet(this, _DescendantSession_status, \"f\") === 'invalidated' ? { status: 'invalidated' } : { status: 'closed' };\n}, _DescendantSession_assertOpen = function _DescendantSession_assertOpen() { if (!__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_isOpen).call(this))\n throw new Error('The session is closed.'); }, _DescendantSession_assertEditable = function _DescendantSession_assertEditable() { if (__classPrivateFieldGet(this, _DescendantSession_status, \"f\") !== 'editing')\n throw new Error('The session is not editable.'); }, _DescendantSession_bindingsCurrent = function _DescendantSession_bindingsCurrent() {\n return [...__classPrivateFieldGet(this, _DescendantSession_bindings, \"f\")].every(([opcode, definition]) => __classPrivateFieldGet(this, _DescendantSession_lookup, \"f\").call(this, opcode) === definition);\n}, _DescendantSession_checkBindings = function _DescendantSession_checkBindings() {\n if (!__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_bindingsCurrent).call(this))\n throw new BlockEditorConflictError('An editor registration changed.');\n}, _DescendantSession_assertSaving = function _DescendantSession_assertSaving() {\n if (__classPrivateFieldGet(this, _DescendantSession_status, \"f\") !== 'saving')\n throw new Error('The save was cancelled or invalidated.');\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_checkBindings).call(this);\n}, _DescendantSession_notify = function _DescendantSession_notify(record) {\n if (record)\n observe(record.listeners);\n else\n for (const node of __classPrivateFieldGet(this, _DescendantSession_records, \"f\").values())\n observe(node.listeners);\n observe(__classPrivateFieldGet(this, _DescendantSession_listeners, \"f\"));\n}, _DescendantSession_watch = function _DescendantSession_watch(subscribe) {\n const detach = subscribe();\n if (typeof detach !== 'function')\n throw new TypeError('Invalidation subscriptions must return a cleanup function.');\n if (__classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_isOpen).call(this))\n __classPrivateFieldGet(this, _DescendantSession_detach, \"f\").add(detach);\n else\n detach();\n}, _DescendantSession_finish = function _DescendantSession_finish(status) {\n __classPrivateFieldSet(this, _DescendantSession_status, status, \"f\");\n __classPrivateFieldGet(this, _DescendantSession_abort, \"f\").abort(__classPrivateFieldGet(this, _DescendantSession_error, \"f\"));\n __classPrivateFieldGet(this, _DescendantSession_instances, \"m\", _DescendantSession_notify).call(this);\n for (const record of __classPrivateFieldGet(this, _DescendantSession_records, \"f\").values()) {\n try {\n record.view.unmount();\n }\n catch (error) {\n report(error);\n }\n record.draft = {};\n record.issues = [];\n record.listeners.clear();\n }\n for (const detach of __classPrivateFieldGet(this, _DescendantSession_detach, \"f\")) {\n try {\n detach();\n }\n catch (error) {\n report(error);\n }\n }\n __classPrivateFieldGet(this, _DescendantSession_detach, \"f\").clear();\n __classPrivateFieldGet(this, _DescendantSession_listeners, \"f\").clear();\n};\n", "var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _EditorRegistry_instances, _EditorRegistry_editors, _EditorRegistry_opcodes, _EditorRegistry_changes, _EditorRegistry_notifyChanges;\nimport { captureReference, captureSnapshot } from './data.js';\nimport { EditorSession } from './session.js';\nimport { DescendantSession } from './descendants.js';\nimport { supportsDescendantEditing } from './descendant-types.js';\nimport { captureSubtree, descendantLimits } from './subtree.js';\nimport { EDITOR_API_VERSION } from './types.js';\nexport class EditorRegistry {\n constructor() {\n _EditorRegistry_instances.add(this);\n _EditorRegistry_editors.set(this, new Map());\n _EditorRegistry_opcodes.set(this, new Map());\n _EditorRegistry_changes.set(this, new Set());\n }\n register(definition) {\n if (definition.apiVersion !== EDITOR_API_VERSION)\n throw new TypeError('Unsupported editor API version.');\n if (!/^[a-z0-9]+$/i.test(definition.extensionId) ||\n !/^[a-z0-9][a-z0-9._-]*$/i.test(definition.editorId)) {\n throw new TypeError('Invalid extension ID or editor ID.');\n }\n if (!Array.isArray(definition.opcodes) || definition.opcodes.length === 0 ||\n new Set(definition.opcodes).size !== definition.opcodes.length ||\n definition.opcodes.some(opcode => typeof opcode !== 'string' ||\n !opcode.startsWith(`${definition.extensionId}_`) || opcode === `${definition.extensionId}_`)) {\n throw new TypeError('Expected distinct full opcodes belonging to the extension.');\n }\n if (!Array.isArray(definition.editableArguments) ||\n new Set(definition.editableArguments).size !== definition.editableArguments.length ||\n definition.editableArguments.some(name => typeof name !== 'string' || !name)) {\n throw new TypeError('Expected distinct editable argument names.');\n }\n if (typeof definition.read !== 'function' || typeof definition.validate !== 'function' ||\n typeof definition.createPatch !== 'function' ||\n (definition.mount !== undefined && typeof definition.mount !== 'function')) {\n throw new TypeError('Invalid editor callbacks.');\n }\n const key = JSON.stringify([definition.extensionId, definition.editorId]);\n if (__classPrivateFieldGet(this, _EditorRegistry_editors, \"f\").has(key) || definition.opcodes.some(opcode => __classPrivateFieldGet(this, _EditorRegistry_opcodes, \"f\").has(opcode))) {\n throw new Error('The editor ID or an opcode is already registered.');\n }\n const entry = Object.freeze({\n ...definition,\n opcodes: Object.freeze([...definition.opcodes]),\n editableArguments: Object.freeze([...definition.editableArguments])\n });\n __classPrivateFieldGet(this, _EditorRegistry_editors, \"f\").set(key, entry);\n for (const opcode of entry.opcodes)\n __classPrivateFieldGet(this, _EditorRegistry_opcodes, \"f\").set(opcode, entry);\n __classPrivateFieldGet(this, _EditorRegistry_instances, \"m\", _EditorRegistry_notifyChanges).call(this);\n return () => {\n if (__classPrivateFieldGet(this, _EditorRegistry_editors, \"f\").get(key) !== entry)\n return;\n __classPrivateFieldGet(this, _EditorRegistry_editors, \"f\").delete(key);\n for (const opcode of entry.opcodes)\n __classPrivateFieldGet(this, _EditorRegistry_opcodes, \"f\").delete(opcode);\n __classPrivateFieldGet(this, _EditorRegistry_instances, \"m\", _EditorRegistry_notifyChanges).call(this);\n };\n }\n resolve(opcode) {\n const entry = __classPrivateFieldGet(this, _EditorRegistry_opcodes, \"f\").get(opcode);\n if (!entry)\n return undefined;\n return Object.freeze({\n apiVersion: entry.apiVersion, extensionId: entry.extensionId, editorId: entry.editorId,\n opcodes: entry.opcodes, editableArguments: entry.editableArguments\n });\n }\n open(reference, host) {\n const capturedReference = captureReference(reference);\n const live = host.readBlock(capturedReference);\n if (!live)\n return undefined;\n const snapshot = captureSnapshot(live, capturedReference);\n const entry = __classPrivateFieldGet(this, _EditorRegistry_opcodes, \"f\").get(snapshot.opcode);\n return entry ? new EditorSession(entry, snapshot, host) : undefined;\n }\n openDescendants(reference, host, limits) {\n if (!supportsDescendantEditing(host))\n return undefined;\n const port = host.descendants;\n const capturedReference = captureReference(reference);\n const resolvedLimits = descendantLimits(limits);\n const live = port.readSubtree(capturedReference);\n if (!live)\n return undefined;\n const captured = captureSubtree(live, capturedReference, resolvedLimits);\n if (!__classPrivateFieldGet(this, _EditorRegistry_opcodes, \"f\").has(captured.snapshot.nodes[0].block.opcode))\n return undefined;\n return new DescendantSession(captured, port, opcode => __classPrivateFieldGet(this, _EditorRegistry_opcodes, \"f\").get(opcode), listener => {\n __classPrivateFieldGet(this, _EditorRegistry_changes, \"f\").add(listener);\n return () => { __classPrivateFieldGet(this, _EditorRegistry_changes, \"f\").delete(listener); };\n }, resolvedLimits);\n }\n}\n_EditorRegistry_editors = new WeakMap(), _EditorRegistry_opcodes = new WeakMap(), _EditorRegistry_changes = new WeakMap(), _EditorRegistry_instances = new WeakSet(), _EditorRegistry_notifyChanges = function _EditorRegistry_notifyChanges() {\n for (const listener of [...__classPrivateFieldGet(this, _EditorRegistry_changes, \"f\")])\n listener();\n};\n"],
5
- "mappings": "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",
6
- "names": ["__classPrivateFieldSet", "__classPrivateFieldGet", "_EditorSession_prepareChanges", "_EditorSession_copyIssues", "_EditorSession_copyDraft", "_EditorSession_assertOpen", "_EditorSession_finish", "_EditorSession_notify", "_EditorSession_reportObserverError", "__classPrivateFieldSet", "__classPrivateFieldGet", "issues", "_DescendantSession_createRecord", "_DescendantSession_isOpen", "_DescendantSession_closedSaveResult", "_DescendantSession_assertOpen", "_DescendantSession_assertEditable", "_DescendantSession_bindingsCurrent", "_DescendantSession_checkBindings", "_DescendantSession_assertSaving", "_DescendantSession_notify", "_DescendantSession_watch", "_DescendantSession_finish", "__classPrivateFieldGet", "_EditorRegistry_notifyChanges"]
7
- }