haori 0.47.2 → 0.47.4
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.
- package/README.ja.md +1 -1
- package/README.md +1 -1
- package/dist/haori.cjs.js +14 -14
- package/dist/haori.es.js +977 -776
- package/dist/haori.iife.js +14 -14
- package/dist/index.d.ts +158 -10
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -315,6 +315,19 @@ export declare class Core {
|
|
|
315
315
|
* 経路が存在しないことを表す番兵。`undefined` を値として持つ経路と区別します。
|
|
316
316
|
*/
|
|
317
317
|
private static readonly ABSENT_PATH;
|
|
318
|
+
/**
|
|
319
|
+
* 宣言データとして外へ出すデータから予約キーを取り除きます。
|
|
320
|
+
*
|
|
321
|
+
* `_fetch` / `_poll` は内部バインディングデータにのみ持つ実行時の値で、宣言
|
|
322
|
+
* データとしては外へ出しません(仕様「`data-bind`」)。内部データ側は予約キーを
|
|
323
|
+
* 引き継ぐため(`ElementFragment.setBindingData()`)、出口の側で取り除かないと、
|
|
324
|
+
* `data-bind` 属性が数秒ごとの状態遷移で書き換わり続け、`data-{event}-copy` は
|
|
325
|
+
* 別の要素のフェッチ状態をコピー先へ運びます。
|
|
326
|
+
*
|
|
327
|
+
* @param data 外へ出すバインドデータ
|
|
328
|
+
* @returns 予約キーを除いたデータ
|
|
329
|
+
*/
|
|
330
|
+
static withoutReservedBindingKeys(data: Record<string, unknown>): Record<string, unknown>;
|
|
318
331
|
/**
|
|
319
332
|
* 変化した経路ごとに適用可否を判定し、棄却した経路を前の値のまま残したデータを
|
|
320
333
|
* 返します。
|
|
@@ -1315,9 +1328,35 @@ declare class ElementFragment extends Fragment {
|
|
|
1315
1328
|
/**
|
|
1316
1329
|
* バインドデータを設定します。
|
|
1317
1330
|
*
|
|
1331
|
+
* 予約キー(`_` 始まりのエンジン管理変数)は、新しいデータが同じキーを持たない
|
|
1332
|
+
* 限り引き継ぎます(仕様「`data-bind`」)。予約キーは `data-bind` 属性へ書き出さ
|
|
1333
|
+
* ないため、宣言を取り込む側も外部から属性を書き換える側もこの値を運べません。
|
|
1334
|
+
* 引き継がないと、`data-if` が真になったときの子の初期化や外部からの書き換えの
|
|
1335
|
+
* たびに `_fetch` / `_poll` が消え、注入した状態が「まだ何も起きていない」状態と
|
|
1336
|
+
* 区別できなくなります。明示的に落とす場合はキー自体を持たせてください
|
|
1337
|
+
* (`{_fetch: undefined}`)。
|
|
1338
|
+
*
|
|
1318
1339
|
* @param data バインドデータ
|
|
1319
1340
|
*/
|
|
1320
1341
|
setBindingData(data: Record<string, unknown>): void;
|
|
1342
|
+
/**
|
|
1343
|
+
* 新しいバインドデータへ、現在の予約キーのうち引き継ぐものを足します。
|
|
1344
|
+
*
|
|
1345
|
+
* @param data 新しいバインドデータ
|
|
1346
|
+
* @returns 予約キーを引き継いだバインドデータ
|
|
1347
|
+
*/
|
|
1348
|
+
private withRetainedReservedKeys;
|
|
1349
|
+
/**
|
|
1350
|
+
* 予約キー(エンジン管理変数)かどうかを判定します。
|
|
1351
|
+
*
|
|
1352
|
+
* `_fetch` / `_poll` など、Haori が実行時に注入し、`data-bind` 属性へ書き出さない
|
|
1353
|
+
* 値が対象です(仕様「`data-bind`」)。`data-bind` 属性へのミラー
|
|
1354
|
+
* (`Core.setBindingData()`)も同じ判定で対象から外します。
|
|
1355
|
+
*
|
|
1356
|
+
* @param key 判定対象のキー
|
|
1357
|
+
* @returns 予約キーなら true
|
|
1358
|
+
*/
|
|
1359
|
+
static isReservedBindingKey(key: string): boolean;
|
|
1321
1360
|
/**
|
|
1322
1361
|
* バインドデータ更新に伴う DOM 反映・再評価を、同一フラグメントでは呼出順
|
|
1323
1362
|
* (FIFO)で直列実行します。並行呼出による適用順の逆転(古いデータが後から
|
|
@@ -2938,16 +2977,34 @@ export declare class Form {
|
|
|
2938
2977
|
*/
|
|
2939
2978
|
static resolveSyncValues(form: ElementFragment, data: Record<string, unknown>): Record<string, unknown>;
|
|
2940
2979
|
/**
|
|
2941
|
-
*
|
|
2980
|
+
* キーを所有する祖先を、値の型を問わず解決します。
|
|
2942
2981
|
*
|
|
2943
2982
|
* 対象はフォームより外側の要素の**生バインドデータ**(`data-bind` で宣言・更新
|
|
2944
2983
|
* された値)だけです。`data-derive` の派生データと `data-each` の行データは対象外
|
|
2945
2984
|
* とします。どちらも描画のたびに作り直される仮想スコープで、行単位の書き戻しは
|
|
2946
2985
|
* `data-form-list` が担うため、ここで扱うと反映が行生成と競合します。
|
|
2947
2986
|
*
|
|
2948
|
-
*
|
|
2949
|
-
*
|
|
2950
|
-
*
|
|
2987
|
+
* 最も近い所有者だけを見ます。所有者が `data-each` の行である場合は、より外側は
|
|
2988
|
+
* 探しません(近い方が権威というシャドーの規則に従うため)。
|
|
2989
|
+
*
|
|
2990
|
+
* 値の型を問わないのは、収集キーの土台を解決する用途があるためです
|
|
2991
|
+
* (仕様「祖先が所有する値の反映(`data-form-arg` なし)」の「土台に使う値の型は
|
|
2992
|
+
* 問いません」)。`data-form-list` の収集キーは配列になるので、レコード限定に
|
|
2993
|
+
* すると土台が解決できません。`data-form-arg` のキーはレコードに限るため、
|
|
2994
|
+
* そちらは `resolveAncestorArgOwner()` が絞り込みます。
|
|
2995
|
+
*
|
|
2996
|
+
* @param form フォームのElementFragment
|
|
2997
|
+
* @param key キー名
|
|
2998
|
+
* @returns 所有する祖先フラグメントとその値。見つからない場合は null
|
|
2999
|
+
*/
|
|
3000
|
+
private static resolveAncestorKeyOwner;
|
|
3001
|
+
/**
|
|
3002
|
+
* `data-form-arg` のキーを所有する祖先を解決します。
|
|
3003
|
+
*
|
|
3004
|
+
* `data-form-arg` はフォームの入力欄が**そのキーの配下**に対応することを宣言する
|
|
3005
|
+
* ため、値はレコードに限ります。レコードでない値を所有している場合は所有者なしと
|
|
3006
|
+
* して扱い、開発モードで警告します。黙って退くと収集値がそのままそのキーへ入り、
|
|
3007
|
+
* 配列を宣言していた場合は**型がオブジェクトへ変わります**(一覧を描く式が壊れる)。
|
|
2951
3008
|
*
|
|
2952
3009
|
* @param form フォームのElementFragment
|
|
2953
3010
|
* @param key `data-form-arg` で指定されたキー名
|
|
@@ -2957,6 +3014,32 @@ export declare class Form {
|
|
|
2957
3014
|
owner: ElementFragment;
|
|
2958
3015
|
value: Record<string, unknown>;
|
|
2959
3016
|
} | null;
|
|
3017
|
+
/**
|
|
3018
|
+
* 収集キーの土台を祖先から解決する関数を返します。
|
|
3019
|
+
*
|
|
3020
|
+
* `data-form-arg` を宣言しないフォームでも、収集キーを祖先が所有する構成では
|
|
3021
|
+
* その値が土台になります(仕様「祖先が所有する値の反映(`data-form-arg` なし)」の
|
|
3022
|
+
* 「コミット時は**収集したキーごとに、最も近い所有者の値を土台に収集値を
|
|
3023
|
+
* 重ねます**」)。`Form.mergeCollectedValues()` へ渡して使います。
|
|
3024
|
+
*
|
|
3025
|
+
* @param form フォームのElementFragment
|
|
3026
|
+
* @returns キーを受け取り、祖先が所有する値を返す関数(所有者が無ければ undefined)
|
|
3027
|
+
*/
|
|
3028
|
+
static ancestorBaseResolver(form: ElementFragment): (key: string) => unknown;
|
|
3029
|
+
/**
|
|
3030
|
+
* `data-form-arg` のキーをレコード以外で所有している構成を、開発モードで知らせます。
|
|
3031
|
+
*
|
|
3032
|
+
* @param form フォームのElementFragment
|
|
3033
|
+
* @param key `data-form-arg` で指定されたキー名
|
|
3034
|
+
* @param value 祖先が所有している値
|
|
3035
|
+
*/
|
|
3036
|
+
private static warnArgOwnerIsNotRecord;
|
|
3037
|
+
/**
|
|
3038
|
+
* `data-form-arg` の所有者がレコードでないことを警告済みのキー。
|
|
3039
|
+
*
|
|
3040
|
+
* 同じ構成で毎回の収集ごとに警告しないよう、要素とキーの組で控えます。
|
|
3041
|
+
*/
|
|
3042
|
+
private static readonly warnedArgOwnerNotRecord;
|
|
2960
3043
|
/**
|
|
2961
3044
|
* 条件式(`data-validity` / `data-{event}-if`)の評価スコープを作ります。
|
|
2962
3045
|
*
|
|
@@ -3192,11 +3275,20 @@ export declare class Form {
|
|
|
3192
3275
|
* これらをバインドキーとして受け付けないため、載せても参照できず、`__proto__` に
|
|
3193
3276
|
* 至っては代入でオブジェクトのプロトタイプが差し替わってしまいます。
|
|
3194
3277
|
*
|
|
3278
|
+
* **土台に無いキーは `resolveBase` で解決します。** フォーム自身が収集キーを
|
|
3279
|
+
* 持たず祖先が持っている構成では、土台がここに無いためです(仕様「双方向
|
|
3280
|
+
* バインディングの自動更新」の「土台はフォーム自身のバインドデータに限りません」)。
|
|
3281
|
+
* 呼び出し側で土台を組み立ててから渡す形にしないのは、上のプロトタイプ汚染の
|
|
3282
|
+
* ガードを迂回させないためです(解決した値の代入もこのループの中で行います)。
|
|
3283
|
+
* 入れ子のレコードへ再帰する際は渡しません(解決するのはトップレベルの収集キー
|
|
3284
|
+
* だけで、入れ子のキーはバインドキーではないため)。
|
|
3285
|
+
*
|
|
3195
3286
|
* @param previous 直前のバインドデータ(無い場合は null)
|
|
3196
3287
|
* @param collected 収集値
|
|
3288
|
+
* @param resolveBase 土台に無いキーの土台を返す関数。省略時は解決しない
|
|
3197
3289
|
* @returns 収集値を重ねたバインドデータ
|
|
3198
3290
|
*/
|
|
3199
|
-
static mergeCollectedValues(previous: Record<string, unknown> | null, collected: Record<string, unknown
|
|
3291
|
+
static mergeCollectedValues(previous: Record<string, unknown> | null, collected: Record<string, unknown>, resolveBase?: ((key: string) => unknown) | null): Record<string, unknown>;
|
|
3200
3292
|
/**
|
|
3201
3293
|
* 収集値の 1 項目を、直前の値へ重ねます。
|
|
3202
3294
|
*
|
|
@@ -3314,10 +3406,20 @@ export declare class Form {
|
|
|
3314
3406
|
*/
|
|
3315
3407
|
private static overlayIdentifiedRows;
|
|
3316
3408
|
/**
|
|
3317
|
-
*
|
|
3409
|
+
* 祖先のバインドデータ更新を、配下のフォームへ反映します。
|
|
3410
|
+
*
|
|
3411
|
+
* `data-form-arg` を宣言したフォームへは入力欄まで流し込みます。対象は「当該キーを
|
|
3412
|
+
* 所有するのが更新された祖先自身」であるフォームだけです。間に同名キーを持つ要素が
|
|
3413
|
+
* あればそちらが権威なので対象外とします。
|
|
3318
3414
|
*
|
|
3319
|
-
*
|
|
3320
|
-
*
|
|
3415
|
+
* `data-form-arg` の無い収集単位(`<form>` と `data-form` コンテナ)には、双方向
|
|
3416
|
+
* コミットが作ったコピーの解除だけを行います(仕様「祖先が所有する値の反映
|
|
3417
|
+
* (`data-form-arg` なし)」の「祖先が当該キーを更新したときに解除するため、以降の
|
|
3418
|
+
* 更新が届かなくなることはありません」)。解除しないと、一度でも入力した収集単位は
|
|
3419
|
+
* 以降どの再取得も受け付けません。入力欄へ流し込まないのは、どのキーが対応するかを
|
|
3420
|
+
* 宣言していないためです(同節の「入力欄への流し込みは `data-form-arg` を宣言した
|
|
3421
|
+
* 場合だけです」)。行の入力欄は解除後の再評価で `data-each` の行単位の反映が
|
|
3422
|
+
* 拾います。
|
|
3321
3423
|
*
|
|
3322
3424
|
* 更新が始まった後に初期化されたフォームも対象外です。祖先の更新は初期化前の
|
|
3323
3425
|
* 状態を運んでいるため、流し込むとクリアしたはずの値が復活します。
|
|
@@ -3325,9 +3427,44 @@ export declare class Form {
|
|
|
3325
3427
|
* @param fragment 更新された祖先のフラグメント
|
|
3326
3428
|
* @param resetSequence 更新が始まった時点の初期化の通番
|
|
3327
3429
|
* @param origin 値の由来(通番と種別)。渡すと入力欄ごとに適用可否を判定します
|
|
3430
|
+
* @param previous 更新前の祖先の生バインドデータ。渡すと値が変わったキーだけ解除する
|
|
3431
|
+
* @returns 反映完了の Promise
|
|
3432
|
+
*/
|
|
3433
|
+
static syncAncestorArgForms(fragment: ElementFragment, resetSequence: number, origin?: ValueChangeOrigin | null, previous?: Record<string, unknown> | null): Promise<void>;
|
|
3434
|
+
/**
|
|
3435
|
+
* 配下の収集単位のうち、祖先のキーをコピーでシャドーしているものを列挙します。
|
|
3436
|
+
*
|
|
3437
|
+
* 収集単位は `<form>` と `data-form` コンテナの両方です(`Form.getFormFragment()`
|
|
3438
|
+
* が対象にする範囲と揃えます)。どちらも双方向コミットの書き込み先になるため、
|
|
3439
|
+
* どちらもコピーを作って祖先をシャドーしえます。仕様「祖先が所有するレコードの
|
|
3440
|
+
* 反映(`data-form-arg`)」が `data-form` を対象外とするのは**入力欄への流し込み**
|
|
3441
|
+
* についてで、シャドーの解除には当てはまりません。
|
|
3442
|
+
*
|
|
3443
|
+
* `data-form-arg` を宣言した `<form>` は除きます。そちらは `collectArgForms()` が
|
|
3444
|
+
* 扱い、`pushAncestorArgValue()` が入力欄への流し込みまで行います。
|
|
3445
|
+
*
|
|
3446
|
+
* 列挙するキーは、収集単位自身の生バインドデータが持ち、かつ**初期 `data-bind`
|
|
3447
|
+
* 宣言に無い**キーに限ります。宣言のあるキーは双方向コミットが作ったコピーでは
|
|
3448
|
+
* なく自身の宣言なので、祖先が同名のキーを更新しても落としてはなりません。
|
|
3449
|
+
*
|
|
3450
|
+
* @param root 走査の起点フラグメント(更新された祖先)
|
|
3451
|
+
* @returns 収集単位のフラグメントと、それが `root` のキーをシャドーしているキー名の
|
|
3452
|
+
* 一覧。シャドーしているキーが無い収集単位は含みません
|
|
3453
|
+
*/
|
|
3454
|
+
private static collectShadowingContainers;
|
|
3455
|
+
/**
|
|
3456
|
+
* 双方向コミットが作ったコピーを、フォーム自身のバインドデータから取り除きます。
|
|
3457
|
+
*
|
|
3458
|
+
* 取り除くと、フォーム内の式とフラグメントの継承は祖先の値を見るようになります。
|
|
3459
|
+
* 入力欄へは触りません(`data-each` の行は解除後の再評価で描き直され、行単位の
|
|
3460
|
+
* 反映が値を入れます)。
|
|
3461
|
+
*
|
|
3462
|
+
* @param form フォームのElementFragment
|
|
3463
|
+
* @param keys 取り除くキー名の一覧
|
|
3464
|
+
* @param origin 値の由来(通番と種別)。祖先の更新を起こした操作のものを引き継ぐ
|
|
3328
3465
|
* @returns 反映完了の Promise
|
|
3329
3466
|
*/
|
|
3330
|
-
static
|
|
3467
|
+
private static releaseOwnCopy;
|
|
3331
3468
|
/**
|
|
3332
3469
|
* 指定要素の配下にある `data-form-arg` 付きフォームを列挙します。
|
|
3333
3470
|
*
|
|
@@ -3528,6 +3665,17 @@ export declare class Form {
|
|
|
3528
3665
|
* @returns すべての初期化処理が完了するPromise
|
|
3529
3666
|
*/
|
|
3530
3667
|
static reset(fragment: ElementFragment, operationSequence?: number): Promise<void>;
|
|
3668
|
+
/**
|
|
3669
|
+
* 祖先が所有するキーを、リセットの書き込み対象から落とします。
|
|
3670
|
+
*
|
|
3671
|
+
* 落とすのは初期 `data-bind` 宣言に無いキーだけです。宣言のあるキーはフォーム
|
|
3672
|
+
* 自身が持つべき値で、祖先が同名のキーを持っていてもフォームの宣言が権威です。
|
|
3673
|
+
*
|
|
3674
|
+
* @param form フォームのElementFragment
|
|
3675
|
+
* @param initial 初期 `data-bind` 宣言(無い場合は null)
|
|
3676
|
+
* @param target リセットで書き込むバインドデータ(この場で書き換えます)
|
|
3677
|
+
*/
|
|
3678
|
+
private static deleteAncestorOwnedKeys;
|
|
3531
3679
|
/**
|
|
3532
3680
|
* data-bind 属性で宣言された初期バインドデータを取得します。
|
|
3533
3681
|
*
|
|
@@ -4364,7 +4512,7 @@ declare interface ValueChangeOrigin {
|
|
|
4364
4512
|
* リリース時に `package.json` と揃えて更新します(`tests/version.test.ts` が
|
|
4365
4513
|
* 一致を検査します)。
|
|
4366
4514
|
*/
|
|
4367
|
-
export declare const version = "0.47.
|
|
4515
|
+
export declare const version = "0.47.4";
|
|
4368
4516
|
|
|
4369
4517
|
/**
|
|
4370
4518
|
* すべてのレンダリングタスク(追従投入分を含む)の完了を待ちます。
|