概要
GeoloniaMap コンストラクタは「no DOM attribute parsing」(src/lib/geolonia-map.ts 冒頭のクラスコメント)として、GeoloniaMapOptions オブジェクトを受け取る設計になっている。しかし実装には コンテナの dataset(= HTML の data-* 属性)を直接読む箇所が 2 か所残存しており、「options だけで完結する lib」という契約と矛盾している。
これは embed 側で進めている「embed を maps-core 由来に置き換える」作業(geolonia/embed#491)および「embed の E2E を wrapper-only に縮約する」作業(geolonia/embed#493)の地ならしとして検出した。embed から GeoloniaMap(options) を呼ぶ形に移行すると、この 2 経路は options 経由で値を渡せず挙動が切れる。
該当箇所
1. ポップアップ内容を data-popup-content から読む
src/lib/geolonia-map.ts
// Popup from container's inner HTML content
const content = container.dataset?.popupContent;
if (content) {
const popup = new Popup({ offset: [0, -25] }).setHTML(content);
marker.setPopup(popup);
...
}
GeoloniaMapOptions に popupContent 相当のフィールドが無いため、ポップアップ内容は DOM 経由でしか渡せない。
2. SimpleStyleVector が data-lng / data-lat を判定に使う
src/lib/simplestyle-vector.ts
if (
!container.dataset ||
(!container.dataset.lng && !container.dataset.lat)
) {
// auto fitBounds する/しないの分岐
}
auto-fitBounds するか否かの判定に、コンテナの data-lng / data-lat を直接参照している。これも options には無い。
期待・選択肢(デシジョンは maps-core 側で)
修正方針はこちらで決めてほしい。考えられる選択肢:
- (A) options 化 —
popupContent?: string を GeoloniaMapOptions に追加し、(2) の判定も center などの options から導出する。lib から DOM 依存を完全に除去する。
- (B) DOM 契約として明文化 — 「これらは options ではなくコンテナ DOM を読む」ことを意図的仕様として型コメント/README に明記し、コンストラクタ冒頭の "no DOM attribute parsing" を実態に合わせて修正する。
どちらにせよ、embed 側(#491)が依存設計を確定する前に、この 2 経路の扱いが決まっていると移行がスムーズになる。
チェックリスト
参考
概要
GeoloniaMapコンストラクタは「no DOM attribute parsing」(src/lib/geolonia-map.ts冒頭のクラスコメント)として、GeoloniaMapOptionsオブジェクトを受け取る設計になっている。しかし実装には コンテナのdataset(= HTML のdata-*属性)を直接読む箇所が 2 か所残存しており、「options だけで完結する lib」という契約と矛盾している。これは embed 側で進めている「embed を maps-core 由来に置き換える」作業(geolonia/embed#491)および「embed の E2E を wrapper-only に縮約する」作業(geolonia/embed#493)の地ならしとして検出した。embed から
GeoloniaMap(options)を呼ぶ形に移行すると、この 2 経路は options 経由で値を渡せず挙動が切れる。該当箇所
1. ポップアップ内容を
data-popup-contentから読むsrc/lib/geolonia-map.tsGeoloniaMapOptionsにpopupContent相当のフィールドが無いため、ポップアップ内容は DOM 経由でしか渡せない。2. SimpleStyleVector が
data-lng/data-latを判定に使うsrc/lib/simplestyle-vector.tsauto-fitBounds するか否かの判定に、コンテナの
data-lng/data-latを直接参照している。これも options には無い。期待・選択肢(デシジョンは maps-core 側で)
修正方針はこちらで決めてほしい。考えられる選択肢:
popupContent?: stringをGeoloniaMapOptionsに追加し、(2) の判定もcenterなどの options から導出する。lib から DOM 依存を完全に除去する。どちらにせよ、embed 側(#491)が依存設計を確定する前に、この 2 経路の扱いが決まっていると移行がスムーズになる。
チェックリスト
data-popup-content依存の扱いを決定・対応data-lng/data-lat依存の扱いを決定・対応参考